CM2 MeshTools® SDK /release 5.5.0 Preview 2

by | Apr 11, 2024

  • 5.5.0 Preview 2
  • April 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).
  • 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.

COM wrapper

  • Completed and updated.

Miscellaneous

  • New meshtools::unique_elements to eliminate duplicates (edges or faces, orientation-sensitive or not).
  • New meshtools1d::indices_to_connectE4 and meshtools1d::convert_into_cubic to generate cubic (4-node) edge meshes.
  • meshtools::MEDIT_output can now export CM2_PYRAMID5 and CM2_WEDGE6 elements.

/improvements

All meshers (except specialized tools)

  • Partial OMP-parallelization. Without any background-mesh, the multi-thread speed-up (on top of other new single-thread optimizations) vary from:
    • +20% in CM2 TriaMesh Aniso and CM2 QuadMesh Aniso.
    • +15% in CM2 TetraMesh Iso.
    • +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).

Miscellaneous

  • 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.
  • As usual: doc 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

  • Strange coarse areas in some cases.

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.

/breaking changes

Miscellaneous

  • 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).