CM2 MeshTools® SDK /release 5.5.0

by | Jun 5, 2024

  • 5.5.0
  • June 2024.
  • 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 now end with _55 (Windows®), 5.5.0 with symlinks from 5.5 (Linux, macOS®).
  • All the mesh generators (except the specialized tools) now depend on the OMP run-time system lib. As a consequence, users should now also ship this lib (vcomp110.dll or later on Windows®, libgomp.so on Linux and libomp.dylib on macOS®) to their end users or make sure it’s installed on the target machines.
  • Visual Studio 2015 deprecated.

/new features

All meshers (except specialized tools)

  • The mesh generators are now partially OMP-parallelized (see Improvements below).
    The resulting meshes are perfectly reproducible and independent from the number of threads used: always the same meshes with the same input data (and the same CM2 libs).
  • New settings_type::num_threads to control the maximum number of threads allowed inside each mesh generator (similar to CM2 SurfMesh T3, CM2 SurfMesh Q4, CM2 SurfRemesh T3 and CM2 SurfRemesh Q4). The default is all threads available on the running platform.

Core MeshTools libs

  • New meshtools::unique_elements to eliminate duplicates (edges or faces, orientation-sensitive or not).
  • New meshtools::invalid_metrics to find the non definite-positive metrics (aniso only).
  • New meshtools::invalid_jacobians to find the elements with at least one negative or null jacobian. The jacobians are computed at specific points in the element, the so-called quadrature (Gauss/Hammer/Fellipa) points. The quadrature is the quadrature used in the CM2 FEM SDK for stiffness matrices.
  • New meshtools::node_detector::close_node members to find a node close to a given point (not always the closest).
    Faster than find_closest but doesn’t return always the closest node.
  • New meshtools1d::indices_to_connectE4 and meshtools1d::convert_into_cubic to generate cubic (4-node) edge meshes.
  • New element tags CM2_FACE_QUAD_MIX and CM2_SOLID_QUAD_MIX.
  • meshtools::MEDIT_output can now export CM2_PYRAMID5 and CM2_WEDGE6 and all quadratic elements (including the new CM2_FACE_QUAD_MIX and CM2_SOLID_QUAD_MIX but not the serendipity elements CM2_FACEQ8, CM2_PYRAMID13, CM2_WEDGE15 and CM2_HEXA20).
  • meshtools::jacobians now works also on quadratic elements (the jacobians are still computed at one point: the centroid of the element).
  • meshtools::check_IDs now works also on high-order elements.
  • meshtools2d::get_element_containing_point to find an element containing a point in a plane mesh (all-triangle, all-quad or mixed). Experimental.
  • meshtools3d::get_element_containing_point to find an element containing a point in a solid mesh (all-tetrahedron only at present). Experimental.

COM wrapper

  • Completed and updated.

/improvements

All meshers (except specialized tools)

  • Partial OMP-parallelization.
    Without any background-mesh, the multi-thread speed-ups (on top of other new single-thread optimizations) vary from:

    • +15% in CM2 TetraMesh Iso.
    • +20% in CM2 TriaMesh Aniso and CM2 QuadMesh Aniso.
    • +30% in CM2 TetraMesh Aniso.
    • Usually not significant in other mesh generators (CM2 TriaMesh Iso, CM2 QuadMesh Iso, CM2 HexaMesh Iso) at present.

    Higher speed-ups when a background-mesh is used (in all mesh generators).
    Note: more parts of the code should be multi-threaded in the future (especially in CM2 HexaMesh Iso) for hopefully higher speed-ups.

  • Some improvements in various parts (better shape qualities, better sizes…)

CM2 SurfMesh T3, CM2 SurfMesh Q4

  • Some improvements in the quality of the generated meshes.
  • A model with a single surface now benefits also from multi-threading.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Fortification leading to fewer CM2_REMESHING_ERROR.
  • An initial mesh partitioned into a single patch now benefits also from multi-threading.
  • Improvements in the quality of the generated meshes.

CM2 TetraMesh Iso, CM2 TetraMesh Ansio

  • Improvements in the quality of the generated meshes.

CM2 HexaMesh Iso

  • Streamlinings in the optimizer step (usually reducing the number of tetrahedrons).

CM2 Intersect T3

  • Significant speed-ups (in the 30% – 60% range, still single-threaded). This optimization benefits indirectly to meshtools3d::boolean_ops.
  • Some fortifications: fewer remaining pathologies in hard cases (mainly when the initial mesh is manifold).

Core MeshTools libs

  • meshtools::get_neighbors: reduced memory usage (- 67% on 64-bit platforms, – 30% on 32-bit platforms). This optimization benefits to all meshers in REGULARIZE_MODE, remeshers and specialized tools as they use this function directly or indirectly.

Miscellaneous

  • As usual, doc fixes/clarifications, update of the manuals, update of the tutorials.

/fixes

All meshers (except specialized tools)

  • The settings.subdomains_forcing = -1 (remove all inner subdomains) didn’t work as advertised.

CM2 TriaMesh Iso, CM2 TriaMesh Aniso, CM2 TetraMesh Iso, CM2 TetraMesh Aniso

  • Crashed (or infinite loop) when the user-defined input boundary contains degenerated elements (i.e. faces/edges with several identical nodes).

CM2 TriaMesh Aniso, CM2 QuadMesh Aniso, CM2 SurfMesh T3, CM2 SurfMesh Q4

  • Weird too coarse or too fine areas in some cases.

CM2 SurfMesh T3, CM2 SurfMesh Q4

  • Failure on some periodic surfaces (due to kernel computations inaccuracies).
  • When reference-coordinates computations for some high-order nodes failed (on curved, non-convex surfaces and settings.high_order_mode ≥ 2) the node ids in the remaining surfaces could be wrong (in data.connectM). This is fixed now (for the remaining surfaces) but the other (failed) surfaces are still missing in the final mesh. Use settings.high_order_mode ≤ 1 (high-order nodes no longer on true surfaces) in these cases.

CM2 SurfMesh Q4

  • Bad node ids in data_type::connectM when high-order nodes was requested and a surface was meshed with triangles only.
  • Missed structured meshings when high-order nodes was enabled.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Strange foldings when initial mesh has degenerated triangles (shape qualities = 0).

CM2 SurfRemesh Q4

  • Quads could be flipped (or badly warped and then split) during the optimisation step.

CM2 HexaMesh Iso

  • Issues in non strict-constraint mode (settings.strict_constraints_level = 0) when gaps or intersections in boundary.

Core MeshTools libs

  • meshtools::get_IDs (matrix version): buggy with mixed types of elements (i.e. with columns with tailing CM2_NONE values).

/breaking changes

Core MeshTools libs

  • meshtools2d::boolean_ops: the orientation of the output meshes is now consistent with the orientation of the initial meshes (was inverted).
    Note: the orientation of the initial meshes needs not to be counter clock-wise any more. It can be also clock-wise. But still must be consistent (all counter clock-wise or all clock-wise).
  • meshtools3d::boolean_ops: the orientation of the output meshes is now consistent with the orientation of the initial meshes (was inverted).
    Note: the orientation of the initial meshes needs not to be outwards any more. It can be also inwards. But still must be consistent (all outwards or all inwards).