CM2 MeshTools® SDK /release 5.2.0

by | May 11, 2022

  • 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 and settings_type::load for serialization to/from ASCII files (similar to data_type::save and data_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 (when data_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 array data_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 as skeleton_edges_in was required to be set to skeleton_edges or cleared.
  • Similarly, data_type::skeleton_colors_in used to be a purely out array (automatic coloring). Now user coloring is allowed on edges (when data_type::skeleton_colors_in and data_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 array data_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 and skeleton_edges_in = skeleton_edges (or at least clear them).
  • New data_type::nefs_T3_in, data_type::nefs_Q4_in, data_type::area_T3_in and data_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 (requires data_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 (when Ne = 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 and meshtools2d::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 (when Ne = 1), internal solid nodes are now interpolated using also the quadratic nodes on edges and faces (when Ne = 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). Use CM2_SETTINGS_ERROR now.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • As input values in data_type::colors_in and data_type::skeleton_colors_in are no longer discarded (user coloring), in case of several consecutive remeshings set colors_in = colors and skeleton_colors_in = skeleton_colors (or at least clear them) for the same reason as skeleton_edges_in was required to be set to skeleton_edges or cleared.

CM2 SurfMesh T3, CM2 SurfMesh Q4 (source code only)

  • face_edges_iterator::get_current returns now an additional parameter int& orientation to code for the edge’s orientation in the face contour.

Miscellaneous

  • meshtools::get_elements_on_boundaries: new parameter orientation_code to tie-break the side on which elements should be considered.