Repository navigation
Conversation
Introduce finite-strain (NLGEOM) handling and kinematic forms (total vs rate/log_R) for Abaqus bridges and thermomechanical solver paths. Key changes: - Docs: expand Abaqus, solver and python_solver docs to describe NLGEOM, kinematic_form, statev layout and thermomechanical finite-strain rules. - API/headers: add prototypes for dH_dE/box_covector_2_dE, abaqus kinematics/route helpers, abaqus2smart_finite, smart2abaqus_finite_M/T, abaqus_kinematic_form/statev helpers and abaqus_finite_route in fea_transfer.hpp; add geodesic_F_increments in step_meca.hpp. - UMAT interface: run_umat_T signature extended to accept corate_type; umat dispatch updated to support finite-strain kinematic_form for umat_T and to run kernels in lab frame transported by DR. - Implementation/wrappers: use box_covector_2_dE in python wrapper logic, adjust finite-strain checks and remove previous restriction that forbade thermomechanical finite-strain blocks; update solver runner to accept thermomechanical finite-strain control types. - Tests: add comprehensive thermomechanical finite-strain tests and adjust existing tests accordingly. These changes enable proper mapping between simcoon finite-strain kernels and Abaqus UMAT expectations (stress, Jacobian, heat measures), expose kinematic form choices to Python API, and add unit tests to validate thermomechanical behaviour under finite strain.
Compute and store multiplicative increment generators for finite-strain kinematic controls, and support 'gradU' (control type 6) as F = I + gradU. Changes:
- solver: set_driven_strain now accepts an increment_end flag and advances F along the geodesic for sub-increments (F1 = exp(Dtinc * dL) * F0); end-of-increment still uses tabulated target F.
- step_meca / step_thermomeca: when control_type == 6 convert BC_meca (gradU) to F_target by adding the identity; geodesic_F_increments now stores the increment generator ΔL in mecas and BC_mecas holds F at increment ends.
- Added tabulated_F_increments to compute generators ΔL = ln(F_i F_{i-1}^{-1}) from table rows (components flagged as absent keep previous values); throws on singular F.
- Updated header/docs and Python block docs to explain geodesic increments, gradU semantics, and tabular behavior.
- Added new tests (test_F_control_substeps.py) to verify sub-increment behavior, gradU == F - I semantics, and tabular rows lying on the geodesic.
These changes make kinematic steps consistent across modes, enable correct sub-increment integration along the multiplicative geodesic, and clarify control-type 6 handling.
Expose and implement a new tangent_output argument for umat_T to select returned derivative types ('box', 'material', 'spatial'). Added validation for allowed values and usage constraints (needs F0/F1 for non-'box', condensed-state rules and condense='exact' interactions), and implemented conversion logic between box/material/spatial tangents and heat scaling (r vs r/J). Updated C++ wrapper signature and Python binding (default 'box'), updated documentation strings and docs, and added unit tests covering material/spatial outputs and invalid argument cases.
Change CMNAME parsing so the `_R` suffix is accepted only when it is the entire tail (case-insensitive) and not part of longer names like EPICP_REF. Update docs (abaqus.rst) and the header comment (fea_transfer.hpp) to document the behavior. Implement stricter check in abaqus_kinematic_form (fea_transfer.cpp) to ensure `_R` is followed by a space or NUL, and replace substring extraction in umat_singleM.cpp and umat_singleT.cpp with a safer const string(cmname, 5) constructor (CMNAME is space-padded with no terminator). Extend tests (Tabaqus_finite.cpp) to cover various `_R` and non-`_R` name forms.
This branch has not been deployed
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.
Introduce finite-strain (NLGEOM) handling and kinematic forms (total vs rate/log_R) for Abaqus bridges and thermomechanical solver paths. Key changes:
These changes enable proper mapping between simcoon finite-strain kernels and Abaqus UMAT expectations (stress, Jacobian, heat measures), expose kinematic form choices to Python API, and add unit tests to validate thermomechanical behaviour under finite strain.