CM2 MeshTools® SDK /release 5.2.0
- 5.2.0
- May, 2022.
- Major release of the CM2 MeshTools® SDK.
- All CM2 MeshTools® SDK.
- Due to changes in the API, client applications must be recompiled against the new headers.
/caveats
- Major version. Due to changes in the API, client applications must be recompiled against the new headers.
- Lib names suffix is
_52for this series. - New Visual Studio 2022 builds.
- Visual Studio 2012 and GCC 6.1 builds removed (Visual Studio 2010 and GCC 4.8 builds will remain for some times as legacy builds).
- Visual Studio 2013 is deprecated and will no longer be supported in future versions.
- Win32 and Linux x86-32 builds are deprecated and will no longer be supported in future versions.
/new features
All meshers
- New
data_type::get_colors_on_boundariesto get the colors of the subdomains connected to some boundaries. - New
data_type::set_colors_by_boundariesto set the colors (re-colorize) of the subdomains connected to some boundaries. - New
settings_type::saveandsettings_type::loadfor serialization to/from ASCII files (similar todata_type::saveanddata_type::load).
CM2 SurfRemesh T3, CM2 SurfRemesh Q4
data_type::colors_inused to be a purely out array (automatic coloring). The user had little control over the patches and none over the color values. Now user coloring is allowed on faces (whendata_type::colors_inis not empty upon entry):- The input colors
data_type::colors_inare transfered to the children faces: new faces in the final mesh are colored (in arraydata_type::colors) with same color as their parent face in the initial mesh, whatever the type of coloring (automatic or user coloring). - The boundaries between different input colors are considered as skeleton edges (and honored as such).
- Caveats: in case of several consecutive remeshings, set
colors_in = colors(or at least clear it) for the same reason asskeleton_edges_inwas required to be set toskeleton_edgesor cleared.
- The input colors
- Similarly,
data_type::skeleton_colors_inused to be a purely out array (automatic coloring). Now user coloring is allowed on edges (whendata_type::skeleton_colors_inanddata_type::skeleton_edges_inare not empty upon entry):- The input colors
data_type::skeleton_colors_inare transfered to the children edges: new edges in the final mesh are colored (in arraydata_type::skeleton_colors) with same color as their parent edge in the initial mesh, whatever the type of coloring (automatic or user coloring). - The boundaries (extremities) between different input line colors are considered as hard nodes.
- Caveats: in case of several consecutive remeshings, set
skeleton_colors_in = skeleton_colorsandskeleton_edges_in = skeleton_edges(or at least clear them).
- The input colors
- New
data_type::nefs_T3_in,data_type::nefs_Q4_in,data_type::area_T3_inanddata_type::area_Q4_in(following CM2 SurfRemesh Q4 new acceptance of all-quad/hybrid meshes upon entry).
CM2 SurfRemesh Q4
- Now accepts also all-quad and mixed quad-triangle meshes upon entry (on top of all-triangle meshes). The partitioning of the initial meshes avoids splitting any quad (if possible).
CM2 Intersect T3
- New
data_type::set_colors_by_partsto re-colorizes the elements with their part id (requiresdata_type::xpartsto be populated).
Miscellaneous
meshtools2d::convert_into_high_order,meshtools2d::convert_into_quadratic: Internal nodes are now interpolated using also the quadratic nodes on edges (whenNe = 1). For instance, the central nodes of Q9 faces is now interpolated using serendipity Q8 shape functions (was interpolated using only the Q4 linear shape functions) giving better positions of central nodes for elements near curved boundaries.- New
meshtools2d::extrude_normal_T3andmeshtools2d::extrude_normal_Q4to extrude (sweep) a line mesh (E2) in normal directions to make a structured 2-D mesh (T3 or Q4). - New
meshtools2d::flip (UIntMat& connect, UIntMat& neighbors, cm2::element_type FE_type)to flip face elements and update their neighbor matrix together. meshtools3d::convert_into_high_order,meshtools2d::convert_into_quadratic: Internal face nodes are now interpolated using also the quadratic nodes on edges (whenNe = 1), internal solid nodes are now interpolated using also the quadratic nodes on edges and faces (whenNe = 1,Nft = 0,Nfq = 1). For instance, the central nodes of H27 bricks is now interpolated using serendipity H26 shape functions (was interpolated using only the H8 linear shape functions) giving better positions of central nodes for elements near curved boundaries.- New
meshtools3d::extrude_normalto extrude (sweep) a surface mesh (T3, Q4 or mixed) in normal directions to make a structured 3-D mesh (W6, H8 or mixed).
/improvements
All meshers
- Improvements in the regularize schemes. Better minimal qualities together with faster regularizations (up to +30%).
CM2 TetraMesh Iso, CM2 TetraMesh Aniso
- Faster boundary enforcement with fewer Steiner nodes.
- Speed-ups in some very specific cases (such as spheres with structured boundary meshes).
CM2 HexaMesh Iso
- More efficient boundary quads enforcement.
- Noticeably fewer low-order elements (tetrahedrons and pyramids).
- Speed-ups +5% on average (up to +30%).
CM2 TriaMesh Iso, CM2 TriaMesh Aniso
- Speed-ups in some very specific cases (such as disks).
Miscellaneous
- Source code ported to C++20 (while still keeping compatibility with C++98 and later).
- Doc clean-ups.
COM wrapper
- Updated.
/fixes
CM2 SurfRemesh T3, CM2 SurfRemesh Q4
- Issues with
skeleton_edges_in. - Rare crashes.
/breaking changes
All meshers
- Error
CM2_MODE_ERRORremoved (was deprecated). UseCM2_SETTINGS_ERRORnow.
CM2 SurfRemesh T3, CM2 SurfRemesh Q4
- As input values in
data_type::colors_inanddata_type::skeleton_colors_inare no longer discarded (user coloring), in case of several consecutive remeshings setcolors_in = colorsandskeleton_colors_in = skeleton_colors(or at least clear them) for the same reason asskeleton_edges_inwas required to be set toskeleton_edgesor cleared.
CM2 SurfMesh T3, CM2 SurfMesh Q4 (source code only)
face_edges_iterator::get_currentreturns now an additional parameterint& orientationto code for the edge’s orientation in the face contour.
Miscellaneous
meshtools::get_elements_on_boundaries: new parameterorientation_codeto tie-break the side on which elements should be considered.