CM2 FEM® SDK /release 5.2.0

by | May 11, 2022

  • 5.2.0
  • May, 2022.
  • 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 suffix is _52 for this series.
  • New Visual Studio 2022 builds.
  • Visual Studio 2012 and GCC 6.1 builds removed (Visual Studio 2010 and GCC 4.8 builds will remain for some times as legacy builds).
  • Visual Studio 2013 is deprecated and will no longer be supported in future versions.
  • Win32 and Linux x86-32 builds are deprecated and will no longer be supported in future versions.

/new features

numerical_model_base

  • New member get_nodes to get the nodes (unique) in a model (the nodes of all elements or only the nodes of a specific element).
  • New members get_DOFs to get the DOFs (unique) in a model associated to a specific physics (for all elements or only for a specific element, only the prescribed ones, only the free ones or both).

solver_static_Newton, solver_condensation_static

  • Augmented Lagrange Method (ALM) to enforce more precisely the constraints (similar to solver_static_linear). ALM is enabled by default but can be disabled and return to Pure Penalty Method through the new settings_type::method_code.

solver_condensation_static

  • More OMP parallelism.

elementary_server

  • New data_type::Ee for strains averaged over the element (one strain tensor or strain resultants vector per element) or for temperature gradient (one gradient per element), depending on settings.physics_kind.
  • New data_type::Se for stresses averaged over the element (one stresses tensor or stress resultants vector per element) or for heat flow (one flow per element), depending on settings.physics_kind.
  • New settings_type::avg_strains_stresses_flag (default = true) to able/disable the computation of these element strains/stresses (or temperature gradient/heat flow).
  • New settings_type::express_in_basis to express these elementary strains/stresses (or temperature gradient/heat flow) into the global basis (the default) or the element basis.

stiffness_diag, thermal_diag, thermal_sym

  • New int code parameter:
    • code >= +1: The model is considered as a regular stiffness (the default). The diagonal values are used in the computation of the penalty factors (as before).
    • code = 0: The model is considered as a constraint. The diagonal values are not used in the computation of the penalty factors. When Augmented Lagrange Algorithm (ALM) is enabled in the solver, the model is considered as infinitely stiff (i.e. vector Ke % U is constrained to zero).

stiffness_sym, stiffness_sym_sparse, stiffness_sym_nl

  • Code int symmetry replaced with int code (new in stiffness_sym_nl):
    • code >= +1: The model is considered as a regular symmetric stiffness (same as symmetry = +1, the default). The diagonal values are used in the computation of the penalty factors (as before).
    • code = 0 The model is considered also as symmetric but as a constraint. The diagonal values are not used in the computation of the penalty factors. When Augmented Lagrange Algorithm (ALM) is enabled in the solver, the model is considered as a constraint infinitely stiff (i.e. vector Ke % U is constrained to zero).
    • code <= -1: The matrix is considered as skew-symmetric (same as symmetry != +1).

/improvements

solver_reactions

  • Some speed-ups.

solver_static_Newton

  • Wolfe step conditions. This can improve the convergence in some cases.

Miscellaneous

  • Source code ported to C++20 (while still keeping compatibility back to C++98).
  • Doc clean-ups.

/fixes

post_processor_1d, solver_stress_1d, elementary_server

  • Global loads (loads defined on a whole model) weren't taken into account.

solver_energy

  • Could crash with inputs from solver_modal_ldrv.

All shell models

  • Small inaccuracies on reactions and internal works (solver_reactions, solver_static_Newton) due to drilling stiffness (curved shells only).

/breaking changes

numerical_model_composite

  • Caveats for methods insert: any load applied before the insert will no longer be affected to the inserted sub-models.
    This simplifies the code related to loads (enabling some speed-ups in solver_reactions)
    and fixes bugs in post_processor_1d, solver_stress_1d and elementary_server.

law_beam_StVenant

  • Default effective transverse shear sections are now set to 5/6 * S0 (instead of S0).
    5/6 is the usual factor for rectangular sections.

solver_static_Newton

  • Default convergence thresholds settings_type::tol_F, settings_type::tol_U and settings_type::tol_E have been changed (from 1E-4 and 1E-8 to 1E-6 for all).
  • The residual (unbalanced forces) is now computed after increment of the solution (was before increment).
    Note that this value is passed to the watch_hdl.
  • The change in elastic energy is now exact after each increment (was just a linear approximation).
    Sometimes, this saves one iteration per step. Note that this value is also passed to the watch_hdl.

stiffness_sym, stiffness_sym_sparse

  • Code int symmetry replaced with int code with a diffferent behaviour now when code = 0.
    See new features above.