CM2 MeshTools® SDK /release 5.1.0

by | Oct 18, 2021

  • 5.1.0
  • October, 2021.
  • All CM2 MeshTools® SDK.
  • Major release of the CM2 MeshTools® SDK.
  • Due to changes in the API, client applications must be recompiled against the new headers.

/caveats

Caveats

  • Preview version. API is still subject to changes.
  • Major version. Due to changes in the API, client applications must be recompiled against the new headers.
  • Lib names suffix is _51 for this series.
  • Win32 and Linux x86 (32-bit) builds are deprecated and will no longer be supported in future versions.
  • Visual Studio 2012 and GCC 6.1 are deprecated and will no longer be supported in future versions
    (Visual Studio 2010 and GCC 4.8 builds will remain for some times as legacy builds).

/new features

CM2 SurfMesh T3, CM2 SurfMesh Q4

  • New parameter settings_type::fix_tolerance to merge (i.e. fix) CAD entities when their maximum distance is below or equal to this value.
    Considered only between skeleton vertices so far.
  • New parameter settings_type::min_Q4_warp_quality to limit the maximum warpage of the quadrangles (over-warped quads are split into triangles).
  • Now able to read BRep files.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • New parameter settings_type::min_Q4_warp_quality to limit the maximum warpage of the quadrangles (over-warped quads are split into triangles).

CM2 Intersect T3

  • New settings_type::anaysis_code and data_type::xparts to limit the analysis (and the fixes) to inter-domain pathologies.
    This saves CPU time when one knows that each part individually is fine but wants to fix only the intersections between the parts.
    In addition, this prevents close nodes or small elements in each part to be considered as pathology and modified.

Miscellaneous

  • New meshtools::centroids to compute the centroids of elements in a mesh (linear types only).
  • New meshtools::FEMAP_input and meshtools::FEMAP_output with FILE* parameter (in place of const char*).
  • New meshtools::NASTRAN_input and meshtools::NASTRAN_output with FILE* parameter (in place of const char*).
  • New meshtools::STL_input and meshtools::STL_output with FILE* parameter (in place of const char*).
  • New meshtools1d::convert_into_quadratic to transform linear edges into quadratic ones (simplified version of meshtools1d::convert_into_high_order).
  • New meshtools1d::convert_into_linear to transform high-order edges into linear ones (discarding the high-order nodes).
  • New meshtools2d::get_connected_elements to compute the IDs (as CSR compressed lists) of the faces (triangles or quads) connected to the nodes.
    Similar to the general meshtools::get_connected_elements (which works also for 1-D and 3-D types of element) but element IDs in the lists are returned here counter-clock wise (vs. increasing ID ordering for the general-case function).
  • New meshtools2d::circumcenters to compute the circumcenters of triangle meshes (2-D and 3-D).
  • New meshtools2d::convert_into_quadratic to transform linear faces into quadratic ones (simplified versions of meshtools2d::convert_into_high_order).
  • New meshtools2d::convert_into_linear to transform high-order faces into linear ones (discarding the high-order nodes).
  • New meshtools2d::normals (overloaded) to compute the normals/directors to elements in surface meshes (triangles or quads).
    A previous overload was already available for nodal normals.
  • New meshtools3d::circumcenters to compute the circumcenters of tetrahedron meshes.
  • New meshtools3d::convert_into_quadratic to transform linear solids into quadratic ones (simplified versions of meshtools3d::convert_into_high_order).
  • New meshtools3d::convert_into_linear to transform high-order edges into linear ones (discarding the high-order nodes).
  • Portage to GCC 11 and Clang 13.
  • Source code ported to stdc++17.

/improvements

All meshers

  • Massive speed-ups in the optimization step for some corner cases (when the max-min quality imposed by the constraints is very low).

CM2 TriaMesh Iso

  • Speed-ups +10% on average.
  • Some improvements in mesh quality.

CM2 QuadMesh Iso

  • Speed-ups +25% on average.
  • Some improvements in mesh quality.

CM2 TriaMesh Aniso

  • Speed-ups +10% on average.
  • Some improvements in mesh quality.

CM2 QuadMesh Anso

  • Speed-ups +25% on average.
  • Some improvements in mesh quality.

CM2 SurfMesh T3, CM2 SurfMesh Q4

  • Speed-ups +15% on average.
  • Port to OCCT 7.5 (Win, Linux and macOS).

CM2 TetraMesh Iso, CM2 TetraMesh Aniso

  • More efficient boundary enforcement with much fewer Steiner nodes.

CM2 TetraMesh Iso

  • Speed-ups +15% on average.
  • Fewer nodes and elements in some cases.
  • Some improvements in mesh quality in some cases.

CM2 TetraMesh Aniso

  • Speed-ups +5% on average.
  • Fewer nodes and elements in some cases.
  • Some improvements in mesh quality.

CM2 HexaMesh Iso

  • Speed-ups +25% on average.
  • More efficient boundary quads enforcement.
  • Slightly fewer low-order elements (tetrahedrons and pyramids).
  • Some improvements in mesh quality.

CM2 Intersect T3

  • Speed-ups +25% on average (much more on multi-domains with analysis_code < 2.
  • Some improvements in difficult cases.

Miscellaneous

  • meshtools::node_detector: constructors and reinit members use now a perfect-balancing insertion scheme making find_closest and find_in_box faster.
  • meshtools1d::mesh_curve_param: clean-ups and reduced memory usage.

COM wrapper

  • Updated.

/fixes

CM2 QuadMesh Iso, CM2 QuadMesh Aniso

  • Failure sometimes when settings.all_quad_flag = true and only four edges in boundary.

CM2 TriaMesh Iso, CM2 TriaMesh Aniso

  • Similar to the QuadMesh behaviour, structured meshes are not longer forced (with structured_pattern >= 0) when a Delaunay mesh is more suitable (for instance with a background mesh, specific mesh sizes or a target_metric).

CM2 Intersect T3

  • Orientation of some faces could be wrong upon exit (opposite to the initial master faces).
  • Nodes of slave faces weren’t always projected on master faces.

CM2 HexaMesh Iso

  • Unexpected slow-downs with boundary meshes with small elements sizes.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Some fixes.

Miscellaneous

  • Doc fixes and clarifications.

/breaking changes

CM2 TetraMesh Iso, CM2 TetraMesh Aniso

  • data_type::best_achievable_min_quality renamed data_type::max_min_quality.
    This output field is now relevant also for CM2 TetraMesh Aniso, although only approximative here (was valid only for CM2 TetraMesh Iso).

Miscellaneous

  • meshtools1d::convert_E2 renamed into meshtools1d::convert_into_high_order.
    Note also the new meshtools1d::convert_into_quadratic (see /new features above).
  • meshtools1d::E3_to_2E2 renamed into meshtools1d::split_into_linear.
  • meshtools1d::mesh_curve_param: the metrics array H now behaves as the curvilinear coordinates array pos1D.
    Upon entry: the requested mesh sizes relative to nodes (used to be relative to pos).
    Upon exit: the metrics of the new nodes are appended (as before).
  • meshtools2d::convert_T3, meshtools2d::convert_Q4 and meshtools2d::convert_mixed unified into new meshtools2d::convert_into_high_order (accepting pure and mixed meshes).
    Note also the new meshtools2d::convert_into_quadratic (see /new features above).
  • meshtools2d::convert_T6, meshtools2d::convert_Q9 and meshtools2d::convert_Q9T6 unified into new meshtools2d::split_into_linear (accepting pure and mixed meshes).
  • meshtools2d::split_into_Q4: parameters const UIntMat& connectQ4, const UIntMat& connectT3 unified into const UIntMat& connectM (accepting pure and mixed meshes).
  • meshtools2d::split_Q4_into_T3: new parameter min_Q4_warp_quality to set a max limit on the warpage of the quadrangles. Quads with greater warpage are split.
  • meshtools3d::convert_TH4, meshtools3d::convert_P5, meshtools3d::convert_W6 and meshtools3d::convert_mixed unified into new meshtools3d::convert_into_high_order (accepting some pure and mixed meshes).
    Note also the new meshtools2d::convert_into_quadratic (see /new features above).
  • meshtools3d::split_into_H8: unified parameters (accepting some pure and mixed meshes, but still no pyramid).