CM2 MeshTools® Suite /release 5.0.0
- 5.0.0.
- August, 2020.
- All CM2 MeshTools® Suite.
/caveats
- Major release of the CM2 MeshTools® Suite.
- Due to changes in the API client applications must be recompiled against the new headers.
- Lib names suffix is
_50
for this series (unified with CM2 FEM). - The name of several tools have changed:
- For CM2 TriaMesh Iso, CM2 QuadMesh Iso, CM2 TetraMesh Iso and CM2 HexaMesh Iso: ‘
_iso
‘ should
be added now to the include file, the namespace and the lib names.
For instance, you should now includetriamesh_iso.h
, use namespacecm2::triamesh_iso
,
link againstcm2triamesh_iso_x64_50.lib
and run withcm2triamesh_iso_x64_50.dll
(for the Win x64 build). - For CM2 SurfRemesh T3 and CM2 SurfRemesh Q4: ‘
_
‘ should be removed betweensurf
andremesh
.
You should include nowsurfremesh_t3.h
, use namespacecm2::surfremesh_t3
,
link againstcm2surfremesh_t3_x64_50.lib
and run withcm2surfremesh_t3_x64_50.dll
(for the x64 build). - Same for CM2 SurfMesh T3 and CM2 SurfMesh Q4: ‘
_
‘ should be removed betweensurf
andmesh
. - Port to gcc 10 and clang 10 with new builds (Linux 32/64 and macOS).
- LInux gcc 5.3 builds removed.
- Visual Studio 2010 and gcc 4.8 are deprecated and will be no longer supported in future versions.
/new features
All meshers
- Background meshes and
target_metric
are no longer mutually exclusive.
The metric sizes of the background mesh will apply on the part covered by the background mesh and the rest of the domain will tend to thetarget_metric
mesh size (with progressive gradation controlled bymax_gradation
).
CM2 SurfMesh T3/Q4 (still experimental)
- The mesh sizes along curves are now affected by proximity to other curves making the meshes smoother.
- The mesh sizes along surfaces are now affected by curvatures of adjacent surfaces making the meshes smoother.
- Now able to generate quadratic elements (T6, Q8, Q9, Q8T6 and Q9T6).
This feature is controlled by the newsettings_type::high_order_type
(defaults to linear elements as before) andsettings_type::high_order_mode
(defaults to high-order nodes positioned onto the surfaces). - The CAD kernel is now wrapped in a single interface making the port to different kernels easier.
At present only the interface to Open CASCADE® is provided. - The generation is now OMP-parallelized (loop over the surfaces).
This is beneficial for CAD models with more than one surface. A 2x to 4x speed-up can be expected on most models (with several surfaces and a CPU with >= 4 cores). - New output
data_type::connectE
for the edge meshes along the curves. - New output
data_type::colorsE
for the curve IDs associated to the curve edges (similar todata_type::colors
for the surface IDs associated to the face elements). - Port to Linux and macOS
CM2 SurfRemesh T3/Q4
- The remeshing step (usually the longest step) is now OMP-parallelized (loop over the patches).
This is beneficial for models with more than one patch. A 1.5x to 3x speed-up can be expected on most models (with several patches and a CPU with >= 4 cores).
Note that the partitioning step and the final optimization step are still to be parallelized.
Miscellaneous
- New
meshtools::eigen_values
functions to compute Eigen values only of 2×2 symmetric and 3×3 symmetric matrices.
/improvements
All meshers
- Speed-ups and reduced memory consumption in the optimization step for big meshes (more than 1E6 elements).
- Speed-ups with very numerous subdomains (noticeable when over several hundreds).
CM2 TetraMesh Iso/Aniso
- Faster hard-constraints enforcement scheme with much fewer Steiner nodes.
CM2 SurfMesh T3/Q4 (still experimental)
- Mesh quality improvements on periodic surfaces with singularities (spheres, cones…)
CM2 SurfRemesh T3/Q4
- Some speed-ups on one thread (10 % on average, on top of OMP parallelization).
CM2 SurfRemesh Q4
- Much fewer quads in all-quad mode on difficult cases.
/fixes
All meshers
- Minor fixes (
data_type::hard_edges_out
,data_type::hard_faces_out
, cosmetics…)
CM2 TriaMesh Iso/Aniso, CM2 QuadMesh Iso/Aniso, CM2 TetraMesh Iso/Aniso
- Repulsive points didn’t work well.
CM2 QuadMesh Iso/Aniso
- Grid-like (i.e. structured) meshes were generated sometimes where a Delaunay mesh would have been more suitable and conversely.
CM2 SurfMesh T3/Q4 (still experimental)
- The isotropic chordal control (
settings_type::chordal_control_type
= 1 or 3) was bogus giving quite bad meshes.
CM2 SurfMesh Q4 (still experimental)
- Triangles were not gathered at the end of the
data_type::connectM
matrix but interleaved between quads (whensettings_type::all_quad_flag = false
).
Consequently, the memberdata_type::extract (DoubleMat& pos, UIntMat& connectQ, UIntMat& connectT)
was bogus. - In all-quad mode: could completely fail on periodic surfaces with singularities (now allows a few triangles and reports a
CM2_DEGENERATED_ELEMENT
).
CM2 SurfRemesh T3/Q4
- Flat surfaces could be strangely partitioned leading to bad remeshings (stitches across the surfaces).
- Problem with user-defined metrics along skeleton lines.
- Some output skeleton edges could be degenerated or even pathological (IDs equal to -1).
CM2 Layers 2D
- Fix irregular strange layers in some cases (curved boundaries with shallow convex and shallow concave parts).
Miscellaneous
meshtools::get_node_graph
: used to consider each element as a clique (all nodes connected).
This is valid only for simplex types (edge, triangle, tetrahedron).
A new parameterelement_type FE_type
was added to deal properly with non-simplex types.
Note that you can get back the former behaviour (all nodes connected inside each element) by specifyingFE_type = CM2_UNKNOWN_ELEMENT_TYPE
.
/breaking changes
All meshers
data_type::MODE_ERROR
is deprecated. Usedata_type::SETTINGS_ERROR
instead.
CM2 SurfMesh T3/Q4 (still experimental)
data_type::nefs_T3
(resp.nefs_Q4
,area_T3
,area_Q4
) replaced withdata_type::nefs_T
(resp.nefs_Q
,area_T
,area_Q
).- The
data_type::failed
array changed tocm2::UIntVec
(wascm2::UIntMat
).
CM2 SurfRemesh T3/Q4
- The formulas for substitutes to default
settings_type::min_h
andsettings_type::max_h
have changed. They now take into account alsodata_type::metrics
.
We still recommend to overwritemin_h
andmax_h
yourself with sound values instead of leaving the defaults (0
andDBL_MAX
). data_type::analysis_time
replaced withdata_type::partition_time
.
CM2 Intersect T3
- The
settings_type::fix_flag
(default =true
) is renamedsettings_type::dry_run_flag
(default =false
).
Miscellaneous
meshtools1d::mesh_curve_param
: the template classCurve
now requires membersCurve::get_tangents
andCurve::get_curvatures
instead ofCurve::get_local_bases
andCurve::get_local_curvatures
(just name changes).meshtools2d::mesh_surface_param
: the template classSurface
now requires membersSurface::get_tangents
andSurface::get_curvatures
instead ofSurface::get_local_bases
andSurface::get_local_curvatures
(just name changes).