Skip to content

Feature/kin ident#93

Merged
chemiskyy merged 4 commits into
masterfrom
feature/kin_ident
Jun 28, 2026
Merged

Feature/kin ident#93
chemiskyy merged 4 commits into
masterfrom
feature/kin_ident

Conversation

@chemiskyy

Copy link
Copy Markdown
Member

This pull request introduces a new example for parameter identification using the deployable MOORI UMAT and Simcoon's identification API, adds supporting experimental data files, and makes important corrections and improvements to the implementation and documentation of objective rates in the continuum mechanics code. The most significant changes are grouped below.


New example and documentation:

  • Added examples/hyperelasticity/hyperelastic_umat_identification.py, which demonstrates Mooney-Rivlin parameter identification using the production MOORI UMAT, Simcoon's solver, and the identification API. This example mirrors the analytical version but exercises the deployable UMAT and library-native cost function.
  • Added a README.rst to examples/identification explaining the parameter identification workflow and cross-linking the two hyperelastic identification examples.
  • Updated the docstring in examples/analysis/hyperelastic_parameter_identification.py to reference the new UMAT-based example and clarify the relationship between the two approaches.

Experimental data:

  • Added three experimental load-path files (path_UT_id.txt, path_PS_id.txt, path_ET_id.txt) under examples/hyperelasticity/data/, which are used by the new UMAT identification example. [1] [2] [3]

Objective rate implementation and documentation:

  • Corrected the mathematical formulation and documentation of the log_F (convected) objective rate in both the header (objective_rates.hpp) and implementation (objective_rates.cpp). The indefinite term in the strain-concentration tensor was removed, ensuring that A^F:D now correctly integrates to ln V, matching the behavior of A^R:D for log_R. [1] [2] [3]
  • Added and documented a new corate_kinematics function to centralize the dispatch of frame increments and rate-of-deformation tensors for all objective rates, ensuring consistent behavior across all control types. Updated Delta_log_strain_corate to use the corrected log_F implementation. [1] [2]

objective_rates: Fix A_F kernel and document convected-log behaviour. Removed the erroneous -0.5*ln(b_i b_j) term so A^F now uses t*coth(t) (diagonal -> 1) and correctly recovers ln V in the convected F-frame; added explanatory comments about the cosh/tanh compensation and the previous bug that corrupted the diagonal.

Delta_log_strain_corate: Documented that corate_type==3 (log_R) carries the log_R spin via sv_M->DR and must not be rotated again by a separate natural-basis DR_N (double-counts the correction and undershoots ln V).

solver: Remove redundant natural-basis rotation and explicit convective DF rotations. For corate_type==3 the DR_N inversion/rotation and rotate_strain/rotate_stress calls were removed — Detot is computed from Delta_log_strain_corate which already supplies the log_R correction. For corate_type==5 (log_F) clarified comments and stopped applying extra DF rotations; Detot is now computed from Delta_log_strain_F/A_F as a genuine rate. These changes prevent double-transport of rotations and fix incorrect integration/undershoot issues (and avoid breaking inelastic UMAT integration).
Add an example to identify Mooney-Rivlin parameters via the MOORI UMAT and simcoon API. Implements examples/hyperelasticity/hyperelastic_umat_identification.py which runs the UMAT through sim.solver, uses simcoon.identification (differential_evolution) and simcoon.calc_cost (nmse_per_response) to fit C10 and C01 (kappa fixed), and plots per-case and combined fits vs Treloar data. Also add three load-path files for the identification runs: examples/hyperelasticity/data/path_UT_id.txt, path_PS_id.txt and path_ET_id.txt.
Add a new corate_kinematics API (header + implementation) to centralize objective-rate dispatch and kinematics setup (DR, D, Omega) for all corate types. Update Delta_log_strain_corate to handle log_F as a genuine convected (A^F:D) rate and to preserve the exact XBM/logarithmic behavior. Replace duplicated per-site corate branches in solver.cpp with calls to corate_kinematics, simplifying solver logic and ensuring consistent behavior across control types. Also add a new examples/identification README documenting parameter-identification examples.

@chemiskyy chemiskyy left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@chemiskyy chemiskyy merged commit cbb9b4a into master Jun 28, 2026
7 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in simcoon 2.0 Jun 28, 2026
@chemiskyy chemiskyy deleted the feature/kin_ident branch June 28, 2026 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant