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
_52
for 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_boundaries
to get the colors of the subdomains connected to some boundaries. - New
data_type::set_colors_by_boundaries
to set the colors (re-colorize) of the subdomains connected to some boundaries. - New
settings_type::save
andsettings_type::load
for serialization to/from ASCII files (similar todata_type::save
anddata_type::load
).
CM2 SurfRemesh T3, CM2 SurfRemesh Q4
data_type::colors_in
used 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_in
is not empty upon entry):- The input colors
data_type::colors_in
are 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_in
was required to be set toskeleton_edges
or cleared.
- The input colors
- Similarly,
data_type::skeleton_colors_in
used to be a purely out array (automatic coloring). Now user coloring is allowed on edges (whendata_type::skeleton_colors_in
anddata_type::skeleton_edges_in
are not empty upon entry):- The input colors
data_type::skeleton_colors_in
are 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_colors
andskeleton_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_in
anddata_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_parts
to re-colorizes the elements with their part id (requiresdata_type::xparts
to 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_T3
andmeshtools2d::extrude_normal_Q4
to 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_normal
to 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_ERROR
removed (was deprecated). UseCM2_SETTINGS_ERROR
now.
CM2 SurfRemesh T3, CM2 SurfRemesh Q4
- As input values in
data_type::colors_in
anddata_type::skeleton_colors_in
are no longer discarded (user coloring), in case of several consecutive remeshings setcolors_in = colors
andskeleton_colors_in = skeleton_colors
(or at least clear them) for the same reason asskeleton_edges_in
was required to be set toskeleton_edges
or cleared.
CM2 SurfMesh T3, CM2 SurfMesh Q4 (source code only)
face_edges_iterator::get_current
returns now an additional parameterint& orientation
to code for the edge’s orientation in the face contour.
Miscellaneous
meshtools::get_elements_on_boundaries
: new parameterorientation_code
to tie-break the side on which elements should be considered.