CM2 MeshTools® SDK /release 5.5.0
- 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 from5.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 andlibomp.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 theCM2 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 thanfind_closest
but doesn’t return always the closest node. - New
meshtools1d::indices_to_connectE4
andmeshtools1d::convert_into_cubic
to generate cubic (4-node) edge meshes. - New element tags
CM2_FACE_QUAD_MIX
andCM2_SOLID_QUAD_MIX
. meshtools::MEDIT_output
can now exportCM2_PYRAMID5
andCM2_WEDGE6
and all quadratic elements (including the newCM2_FACE_QUAD_MIX
andCM2_SOLID_QUAD_MIX
but not the serendipity elementsCM2_FACEQ8
,CM2_PYRAMID13
,CM2_WEDGE15
andCM2_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 inREGULARIZE_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 (indata.connectM
). This is fixed now (for the remaining surfaces) but the other (failed) surfaces are still missing in the final mesh. Usesettings.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 tailingCM2_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).