CM2 FEM® SDK /release 5.5.0
- 5.5.0
- June 2024.
- Major release of the CM2 FEM® SDK.
- All CM2 FEM® 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. Builds no longer provided.
/new features
4-node edge elements
New 4-node edge elements (CM2_EDGE4
) with physic models:
- Mechanical beams:
fem::model_beam_lin
,fem::model_beam_gnl
. - Masses:
fem::model_beam_mass
,fem::model_line_mass
. - Thermal:
fem::model_heat_capacity_1d
,fem::model_heat_conduction_1d
,fem::model_heat_convection_1d
. - Special:
fem::model_distributed_spring_1d
.
Mostly useful for curved elements and for non-linear beams (curved or straight).
We recall that all the non-linear beam formulations in CM2 FEM (2-node, 3-node and this new 4-node) take into account all kinds of non-linearity (large strains, large rotations, all geometric stiffness effects).
However the drawback of the 2-node non-linear formulation (and to a lesser extent also of the 3-node one) is that it needs refined meshes even with small displacements/rotations (i.e. when linear Euler-Bernoulli/Timoshenko solutions are expected).
These new 4-node edge formulations (linear and non-linear) have no such drawback.
When displacements/rotations are small, they give similar results and are as accurate as the 2-node linear formulation (i.e. they don’t need refined meshes).
Note however that, with large strains and large rotations (and with modal and buckling analyses), refined meshes are still needed whatever the formulation (2-, 3- or 4-node). The new 4-node formulations are usually more accurate than the 2-node formulations in these analyses.
2-node edge semi non-linear beam mechanical model
The new fem::model_beam_gnls
model is intermediate between fem::model_beam_lin
(linear but with a simple geometric stiffness matrix for Euler buckling analysis) and fem::model_beam_gnl
(fully non-linear).
It has a large-strains model (Green-Lagrange strain tensor) but a small-transformation model (small displacements and small rotations).
It has a non-linear tangent stiffness matrix which is the sum of the initial stiffness matrix (constant) and the simple geometric stiffness matrix of the linear model.
Generalized hard offsets
fem::numerical_model_base::set_hard_offsets
(used to work on rods/beams only) has been overhauled and now works for any kind of mechanical model defined on a mesh (rod, beam, plate, shell, solid). In addition, it has been simplified (faster and smaller memory usage).
Note that parameters order has changed for the overload specific to beams/rods (see Breaking Changes below).
Relaxations along lines
New fem::hinge_line
for relaxations (to be expressed in fixed frames only) along a line.
Mostly useful for boundaries of plates/shells but works for any kind of mechanical model defined on a mesh (rod, beam, plate, shell, solid).
Punctual contact with friction
New fem::contact_friction_punctual
for contact between two nodes in a specific direction (one-way or bidirectional) with friction (DISPLACEMENT
or ROTATION
) in the perpendicular directions (with possibly one or two tangent stiffnesses, one or two tangent friction coefficients).
At present, this model uses the Pure Penalty Method (the Augmented Lagrange Method is discarded at present for this model).
fem::solver_modal
, fem::solver_buckling_Euler
- New
settings_type::max_subspace_size_ratio
(experts only) to limits the size of the iteration subspace (hence the computational time) in cases of finite search ranges. See Fixes below.
fem::solver_static_Newton
- New
fem::solver_static_Newton::settings_type::min_iters_per_step
to force a minimum number of iterations in each step (even when convergence is granted).
fem::elementary_server
- New
fem::elementary_server::data_type::Js
array to give the jacobians at the integration points (in addition tofem::elementary_server::data_type::WJs
which are the products of the jacobians with the integration weight factors).
fem::law_beam_StVenant
- With the new
axial_code
, the beam can resist only traction (axial_code > 0
), only compression (axial_code < 0
) or both (axial_code = 0
, i.e. the regular behaviour).
This on/off behaviour is based on the sign of the axial strain.
fem::DOFs_mgr
- New members
fem::DOFs_mgr::nbr_fictitious_DOFs
andfem::DOFs_mgr::nbr_fictitious_nodes
.
elementary_load
- Member
elementary_load::sanity
is now inline (hence is now exported).
fem::FEM_states
, fem::FEM_Zstates
- Added missing overloaded
clear
members.
fem::numerical_model_composite
- New member
reserve
to reserve space in the composite for numerical models (to avoid reallocations and memory fragmentation). - New constructor with one model.
fem::law_base
- New
reserve_elements
(inherited) to reserve space in the law for element-by-element data (to avoid reallocations and memory fragmentation).
fem::loads_mgr
- New members
reserve_NM_Neumann_loads
,reserve_node_Neumann_loads
andreserve_node_Dirichlet_loads
to reserve space in the manager for loads (to avoid reallocations and memory fragmentation).
fem::evolution_funcs_mgr
- New
reserve
to reserve space in the manager for evolution functions (to avoid reallocations and memory fragmentation).
fem::spring_directional
, fem::link_directional
, fem::link_directional_gnl
- New constructors and
init
members with fewer default values.
fem::hinge_punctual
- Replaces
fem::hinge
(see Breaking Changes below).
New constructors andinit
members with multiplerelaxed_fIDs
andlaws
.
/improvements
fem::post_processor_1d
- The displacement/rotation diagrams now take into account the transverse shear effects (Timoshenko theory) and the variations of sections/inertias (linear variations only).
It used to neglect the transverse shear effects and approximate the sections/inertias to the averaged values.
The diagrams are now exact under these assumptions (uniform or linear variations of sections/inertias). The displacements/rotations at nodes remain exact under the same assumptions. - Distributed momentums (axial or not, uniform or trapeze, on constant or linearly varying sections/inertias) are now fully supported.
fem::solver_mass
- Now OMP parallelized.
fem::model_beam_lin
with CM2_EDGE2
elements
- Now exact results (were approximated) with distributed momentums (axial or not, uniform or trapeze, constant or linearly varying sections/inertias).
- Rewritten geometric stiffness matrix (used with
fem::solver_buckling_Euler
) with slightly more accurate bending and transverse shear effects (and slight speed-ups in the assembly times).
Miscellaneous
- Improvements in documentation, update of the manuals, update of the tutorials.
/fixes
fem::solver_reactions
- Loads on
fem::numerical_model_load_only
weren’t taken into account. - Lagrange multipliers are now stored in the
fem::FEM_states
solutions (alongside with other data such as elasto-plastic constitutive law parameters, penalty factors…) and taken into account byfem::solver_reactions
.
Note that Lagrange multipliers are produced by some solvers (at presentfem::solver_static_linear
,fem::solver_static_Newton
,
fem::solver_condensation_static
andsolver_heat_static_linear
) when Augmented Lagrange Method is usedsettings.method_code > 0
).
fem::solver_modal
, fem::solver_buckling_Euler
- A high number of modes in finite search ranges could seriously slow down the iteration process (which is quadratic with respect to the number of modes).
The newsettings_type::max_subspace_size_ratio
(see New features above) caps the dimension of the iteration subspace, hence limits the resolution time (but with the risk of aFEM_MISSING_MODES_WARNING
because of some missing extreme modes in the range).
fem::solver_modal
, fem::solver_buckling_Euler
, fem::solver_static_Newton
- Spurious
FEM_PIVOT_WARNING
could be raised.
fem::solver_modal
- Convergence issues on free-free models (when no restraint).
fem::solver_buckling_Euler
- Crashed on empty problems (when the number of DOFs equals zero).
fem::pulley::get_params
, fem::model_beam_gyroscopic::get_params
- The returned law was void (could cause a crash among others).
/breaking changes
fem::numerical_model_base::set_hard_offsets
- Parameters order have changed for the beam/rod specific overload (
pos
matrix).
fem::numerical_model_base::set_relaxations
- Replaced with classes
fem::hinge_punctual
andfem::hinge_line
.
fem::hinge
- Renamed into
fem::hinge_punctual
. - Parameter types and order have changed.
fem::soft_offset
- Renamed into
fem::soft_offsets_punctual
. - Parameter types and order have changed.
fem::law_spring
, fem::law_spring_nl
, law_spring_ep_perfect
, law_spring_ep_piecewise_linear
, law_spring_ep_power
, law_spring_ep_RambergOsgood
- Deprecated. Use
fem::law_rod
,fem::law_rod_nl
,law_rod_ep_perfect
,law_rod_ep_piecewise_linear
,law_rod_ep_power
,law_rod_ep_RambergOsgood
now.
Typedefs to the old names have been added for backward compatibility.
fem::distributed_spring_1d
, fem::distributed_spring_2d
- Now use
fem::law_scalar
instead oflaw_spring
(or the newlaw_rod
).
fem::model_beam_lin::set_simplified_Kg_flag
(resp. get_simplified_Kg_flag
)
- Renamed
fem::model_beam_lin::set_Kg_code
(resp.get_Kg_code
). Same forfem::model_beam_gnl
.
The former boolean flag is replaced with anunsigned
code allowing more choices (the default value is now2
with same effects as the previous defaultfalse
):- 0 : The geometric stiffness matrix is considered null.
- 1 : The geometric stiffness matrix due to axial force only (no effects due to the bending momentums or transverse shear forces).
- 2+: The geometric stiffness matrix due to all resultant forces and momentums (axial force, bending momentums and transverse shear forces).
fem::solver_heat_static_linear
- Field
data_type::outputs
type changed fromfem::FEM_matrix
tofem::FEM_states
.
fem::solver_heat_dynamic_linear
- Field
data_type::initial
type changed fromfem::FEM_matrix
tofem::FEM_states
.
fem::rigid_body_lin
, fem::rigid_body_gnl
- Member
init
with two arguments (one with default) replaced with a three-argument version (nodes, thermal expansion ratio and R-coupling flag).