Skip to content

Add thermal effects to the multiplicative split material#2083

Open
rjoussen wants to merge 1 commit into
4C-multiphysics:mainfrom
rjoussen:add-thermal-effects-to-multsplit-material
Open

Add thermal effects to the multiplicative split material#2083
rjoussen wants to merge 1 commit into
4C-multiphysics:mainfrom
rjoussen:add-thermal-effects-to-multsplit-material

Conversation

@rjoussen

@rjoussen rjoussen commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Description and Context

For now, the last PR to make the viscoplastic factor thermo-coupled:

  • Heat source due to plastic dissipation is wired from the viscoplastic factor to the thermo element implementation.
  • Stress contribution due to thermal expansion is added
  • Two new regression tests are added, for partitioned and monolithic TSI, respectively. Including both is because the call order and, hence, the caching behavior are quite different for the two algorithms. They use identical result tests to demonstrate consistency. Though it should be noted that using a partitioned algorithm for the viscoplastic material in its current form is not recommended, since this leads to many re-evaluations of the material without a valid cache being present and consequently repeated return-mappings (or "constitutive updates" in the future), which probably mitigates all advantages a partitioned algorithm might have.

Current Limitations:

  • Supported only for a single viscoplastic factor.
  • The thermo-elastic contribution to the thermo equation via stress_temperature_modulus_and_deriv is neglected so far.

Related Issues and Pull Requests

following #2041
Doesn't touch any factor code, so independent of #2082 (@dragos-ana) Edit: I ended up re-designing some of the ThermalQuantities struct, mainly due to performance concerns, which now lead to some changes in the factor, but quite limited. The thermal expansion evaluations now also use tensors instead of matrices.

@rjoussen rjoussen self-assigned this Jun 15, 2026
Copilot AI review requested due to automatic review settings June 15, 2026 10:15
@rjoussen rjoussen added the type: enhancement A new feature or enhancement to be implemented label Jun 15, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR thermo-couples the multiplicative split defgrad elast-hyper material by adding thermal expansion stress contributions and wiring plastic-dissipation heat sources into the thermo element, plus adding regression coverage for monolithic vs partitioned TSI.

Changes:

  • Add thermal expansion parameters and thermal-stress contributions to MAT_MultiplicativeSplitDefgradElastHyper
  • Extend thermo element dissipation handling to support multiplicative-split viscoplastic heat sources
  • Add two TSI regression tests (monolithic + partitioned) to validate consistency

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
unittests/mat/4C_multiplicative_split_defgrad_elasthyper_test.cpp Updates unit test setup and adapts to new evaluated_sdi_fin signature requiring thermal quantities
tests/list_of_tests.cmake Registers new thermo-viscoplastic TSI regression tests (monolithic/partitioned)
tests/input_files/mat_iso_thermoviscoplast_refJC_log_timint_tsi_partitioned.4C.yaml Adds partitioned TSI input exercising thermo-viscoplastic dissipation + thermal expansion
tests/input_files/mat_iso_thermoviscoplast_refJC_log_timint_tsi_monolithic.4C.yaml Adds monolithic TSI input exercising the same scenario for consistency
src/tsi/4C_tsi_monolithic.cpp Sets differentiation type to temperature for structure coupling matrix assembly
src/thermo/src/element/4C_thermo_ele_impl.cpp Extends dissipation evaluation/tangents to handle multiplicative-split material heat source and derivatives
src/mat/4C_mat_trait_thermo_solid.hpp Adjusts ThermoSolid trait inheritance (removes Solid)
src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.hpp Adds thermo-solid trait, thermal expansion API, and heat-source evaluation entry point
src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.cpp Implements thermal expansion stress contribution and heat source forwarding to viscoplastic factor

Comment thread src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.cpp Outdated
Comment thread src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.cpp
Comment thread src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.cpp Outdated
Comment thread unittests/mat/4C_multiplicative_split_defgrad_elasthyper_test.cpp Outdated
Comment thread src/thermo/src/element/4C_thermo_ele_impl.cpp
Comment thread src/thermo/src/element/4C_thermo_ele_impl.cpp
Comment thread src/thermo/src/element/4C_thermo_ele_impl.cpp
Comment thread src/mat/4C_mat_multiplicative_split_defgrad_elasthyper.hpp Outdated
@rjoussen rjoussen force-pushed the add-thermal-effects-to-multsplit-material branch from 2580977 to b1124a5 Compare June 16, 2026 18:59
@rjoussen rjoussen requested a review from Copilot June 16, 2026 19:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@rjoussen rjoussen marked this pull request as draft June 16, 2026 19:29
@rjoussen rjoussen force-pushed the add-thermal-effects-to-multsplit-material branch from b1124a5 to 0139ca2 Compare June 17, 2026 07:32
@rjoussen rjoussen requested a review from Copilot June 17, 2026 07:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@rjoussen rjoussen marked this pull request as ready for review June 17, 2026 08:40
@c-p-schmidt c-p-schmidt requested a review from Copilot June 17, 2026 08:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Comment thread src/mat/4C_mat_multiplicative_split_defgrad_elasthyper_service.hpp
Comment thread src/thermo/src/element/4C_thermo_ele_impl.cpp Outdated
- Heat source due to plastic dissipation is wired from the viscoplastic
factor to the thermo element implementation.
- Stress contribution from thermal expansion is added
- Two new regression tests are added, for partitioned and monolithic TSI

Limitations:
- Supported only for a single viscoplastic factor.
- The thermo-elastic contribution in the via
`stress_temperature_modulus_and_deriv` is neglected so far.
@rjoussen rjoussen force-pushed the add-thermal-effects-to-multsplit-material branch from 0139ca2 to d59f530 Compare June 17, 2026 09:11
@rjoussen

Copy link
Copy Markdown
Contributor Author

Thanks for running copilot @c-p-schmidt, mine ran out of tokens apparently :)

@dragos-ana dragos-ana left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks great!
Particularly, your use of tensors and the newly added TensorAndTemperatureDerivative have simplified the code a lot!
I added some minor comments / suggestions

Comment on lines +290 to +293
void reinit(const Core::LinAlg::Tensor<double, 3, 3>* defgrd,
const Core::LinAlg::SymmetricTensor<double, 3, 3>& glstrain, double temperature,
unsigned gp) override { /* do nothing */ };

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This has nothing to do with your PR, but reinit is a very strange / non-descriptive name for what the function does.

Maybe a matter for private discussion, but shouldn't we at least include the stress-temperature modulus into the residual and neglect the linearization first?

Comment on lines +298 to +299
* @brief Evaluate the mechanical dissipation produced by this material. Currently, this is only
* enabled for the viscoplastic factor.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
* @brief Evaluate the mechanical dissipation produced by this material. Currently, this is only
* enabled for the viscoplastic factor.
* @brief Evaluate the heat source produced by this material. Currently, this is only
* enabled for the viscoplastic factor.

To prevent confusion as also noted in a previous PR ;) It's still my opinion that this is better named as the Taylor-Quinney heating, but I am also fine with heat source.

}
else if (num_contributions > 1)
{
FOUR_C_THROW("Mechanical Dissipation is only implemented for a single factor so far.");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
FOUR_C_THROW("Mechanical Dissipation is only implemented for a single factor so far.");
FOUR_C_THROW("Evaluation of additional heat source is only implemented for a single factor so far.");

Core::LinAlg::Matrix<8, 1> curr_delta{Core::LinAlg::Initialization::zero};

//! thermal contribution due to thermal expansion to the thermo-elastic 2PK stress
TensorAndTemperatureDerivative curr_ST{};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
TensorAndTemperatureDerivative curr_ST{};
TensorAndTemperatureDerivative curr_ST_and_temp_deriv{};

Maybe?

Comment on lines +27 to +28
TIMESTEP: 0.05
NUMSTEP: 200

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

TSI Dynamic governs the time settings, but it would be nice if they match the set values in both the dedicated structure and thermal sections.

Comment on lines +70 to +73
SOLVER 2:
SOLVER: Belos
SOLVER_XML_FILE: "xml/linear_solver/iterative_gmres_template.xml"
PRECONDITIONER_XML_FILE: "xml/block_preconditioner/thermo_solid.xml"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

If I see this right, Belos is not used here at all? Maybe it should be removed if that is not the case.

Comment on lines +2083 to +2084
thermoplhyperelast = std::dynamic_pointer_cast<Mat::ThermoPlasticHyperElast>(structmat);
// true: error if cast fails

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Since the dynamic pointer cast does not throw by default, it could be helpful to explicitly assert that it is not a nullptr after the cast.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: enhancement A new feature or enhancement to be implemented

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants