Feature/kin ident#93
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces a new example for parameter identification using the deployable
MOORIUMAT 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:
examples/hyperelasticity/hyperelastic_umat_identification.py, which demonstrates Mooney-Rivlin parameter identification using the productionMOORIUMAT, Simcoon's solver, and the identification API. This example mirrors the analytical version but exercises the deployable UMAT and library-native cost function.README.rsttoexamples/identificationexplaining the parameter identification workflow and cross-linking the two hyperelastic identification examples.examples/analysis/hyperelastic_parameter_identification.pyto reference the new UMAT-based example and clarify the relationship between the two approaches.Experimental data:
path_UT_id.txt,path_PS_id.txt,path_ET_id.txt) underexamples/hyperelasticity/data/, which are used by the new UMAT identification example. [1] [2] [3]Objective rate implementation and documentation:
objective_rates.hpp) and implementation (objective_rates.cpp). The indefinite term in the strain-concentration tensor was removed, ensuring thatA^F:Dnow correctly integrates toln V, matching the behavior ofA^R:Dfor log_R. [1] [2] [3]corate_kinematicsfunction to centralize the dispatch of frame increments and rate-of-deformation tensors for all objective rates, ensuring consistent behavior across all control types. UpdatedDelta_log_strain_corateto use the corrected log_F implementation. [1] [2]