CM2 MeshTools® SDK /release 5.5.0 Preview 1
- 5.5.0 Preview 1
- March 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 from5.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
andmeshtools1d::convert_into_cubic
to generate cubic (4-node) edge meshes.
/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.
CM2 HexaMesh Iso
- Streamlinings in the optimizer step (usually reducing the number of tetrahedrons).
CM2 Intersect T3
- Significant speed-ups (in the 20% – 60% range, still single-threaded).
This optimization benefits indirectly tomeshtools3d::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 inREGULARIZE_MODE
, remeshers and specialized tools as they use this function directly or indirectly.- 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 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).