OGS
ThermoRichardsMechanics/ConstitutiveStress_StrainTemperature/SolidMechanics.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "SolidMechanics.h"
5
7{
9{
10template <int DisplacementDim>
12 const SpaceTimeData& x_t,
13 SolidThermalExpansionData<DisplacementDim> const& s_therm_exp_data,
14 SwellingDataStateless<DisplacementDim> const& swelling_data,
17 BiotData const& biot_data,
18 BishopsData const& bishops_data,
19 SaturationDataDeriv const& dS_L_data,
20 StrainData<DisplacementDim> const& eps_data,
21 PrevState<StrainData<DisplacementDim>> const& eps_prev_data,
24 DisplacementDim>> const& sigma_eff_prev_data,
26 sigma_eff_data,
28 DisplacementDim>> const& eps_m_prev_data,
30 eps_m_data,
31 TotalStressData<DisplacementDim>& total_stress_data,
32 EquivalentPlasticStrainData& equiv_plast_strain_data,
34{
35 namespace MPL = MaterialPropertyLib;
36 MPL::VariableArray variables;
37
38 double const T_prev = T_data.T_prev;
39 double const dT = T_data.T - T_prev;
40
41 eps_m_data.eps_m.noalias() =
42 eps_m_prev_data->eps_m + eps_data.eps - eps_prev_data->eps -
43 s_therm_exp_data.solid_linear_thermal_expansivity_vector * dT +
44 swelling_data.eps_m;
45
47 eps_m_data.eps_m);
48 variables.temperature = T_data.T;
49
50 MPL::VariableArray variables_prev;
51
52 variables_prev.stress.emplace<KelvinVector<DisplacementDim>>(
53 sigma_eff_prev_data->sigma_eff);
55 eps_m_prev_data->eps_m);
56 variables_prev.temperature = T_prev;
57
58 auto solution = solid_material_.integrateStress(
59 variables_prev, variables, x_t.t, x_t.x, x_t.dt,
60 *mat_state.material_state_variables);
61
62 if (!solution)
63 {
64 OGS_FATAL("Computation of local constitutive relation failed.");
65 }
66
67 std::tie(sigma_eff_data.sigma_eff, mat_state.material_state_variables,
68 out.stiffness_tensor) = std::move(*solution);
69
70 auto const& identity2 = MathLib::KelvinVector::Invariants<
72 DisplacementDim)>::identity2;
73
74 total_stress_data.sigma_total.noalias() =
75 sigma_eff_data.sigma_eff +
76 biot_data() * bishops_data.chi_S_L * p_cap_data.p_cap * identity2;
77
78 out.J_uT_BT_K_N.noalias() = // TODO is this thermal stress?
79 -out.stiffness_tensor *
81
82 double const J_up_X_BTI2N =
83 -biot_data() *
84 (bishops_data.chi_S_L +
85 bishops_data.dchi_dS_L * p_cap_data.p_cap * dS_L_data.dS_L_dp_cap);
86
87 out.J_up_BT_K_N.noalias() =
88 swelling_data.J_up_BT_K_N + J_up_X_BTI2N * identity2;
89
90 equiv_plast_strain_data.equivalent_plastic_strain =
91 mat_state.material_state_variables->getEquivalentPlasticStrain();
92}
93
94template struct SolidMechanicsModel<2>;
95template struct SolidMechanicsModel<3>;
96
97} // namespace ConstitutiveStress_StrainTemperature
98} // namespace ProcessLib::ThermoRichardsMechanics
#define OGS_FATAL(...)
Definition Error.h:19
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
KV::KelvinVectorType< DisplacementDim > KelvinVector
BaseLib::StrongType< double, struct BiotTag > BiotData
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > sigma_eff
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > eps_m
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > eps
Definition StrainData.h:14
void eval(const SpaceTimeData &x_t, SolidThermalExpansionData< DisplacementDim > const &s_therm_exp_data, SwellingDataStateless< DisplacementDim > const &swelling_data, TemperatureData< DisplacementDim > const &T_data, CapillaryPressureData< DisplacementDim > const &p_cap_data, BiotData const &biot_data, BishopsData const &bishops_data, SaturationDataDeriv const &dS_L_data, StrainData< DisplacementDim > const &eps_data, PrevState< StrainData< DisplacementDim > > const &eps_prev_data, MaterialStateData< DisplacementDim > &mat_state, PrevState< ProcessLib::ConstitutiveRelations::EffectiveStressData< DisplacementDim > > const &sigma_eff_prev_data, ProcessLib::ConstitutiveRelations::EffectiveStressData< DisplacementDim > &sigma_eff_data, PrevState< ProcessLib::ConstitutiveRelations::MechanicalStrainData< DisplacementDim > > const &eps_m_prev_data, ProcessLib::ConstitutiveRelations::MechanicalStrainData< DisplacementDim > &eps_m_data, TotalStressData< DisplacementDim > &total_stress_data, EquivalentPlasticStrainData &equiv_plast_strain_data, SolidMechanicsDataStateless< DisplacementDim > &out) const