OGS
ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/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 SpaceTimeData const& x_t, TemperatureData<DisplacementDim> const& T_data,
14 StrainData<DisplacementDim> const& eps_data,
15 PrevState<StrainData<DisplacementDim>> const& eps_prev_data,
17 PrevState<TotalStressData<DisplacementDim>> const& total_stress_data_prev,
18 TotalStressData<DisplacementDim>& total_stress_data,
19 EquivalentPlasticStrainData& equiv_plast_strain_data,
21 PrevState<SaturationData> const& S_L_prev_data, SaturationData& S_L_data,
22 SaturationDataDeriv& dS_L_data) const
23{
24 namespace MPL = MaterialPropertyLib;
25
26 double const T_prev = T_data.T_prev;
27 auto const& eps_total = eps_data.eps;
28 auto const& eps_total_prev = eps_prev_data->eps;
29 auto const& sigma_total_prev = total_stress_data_prev->sigma_total;
30
31 // current state
32 MPL::VariableArray variables;
33 {
34 // gradients
35 // TODO currently we always pass strain via mechanical_strain
36 variables.mechanical_strain = eps_total;
37 variables.liquid_phase_pressure = -p_cap_data.p_cap;
38
39 // external state variables
40 variables.temperature = T_data.T;
41 }
42
43 // previous state
44 MPL::VariableArray variables_prev;
45 {
46 // thermodynamic forces
47 variables_prev.stress = sigma_total_prev;
48 variables_prev.liquid_saturation = S_L_prev_data->S_L;
49
50 // gradients
51 // TODO currently we always pass strain via mechanical_strain
52 variables_prev.mechanical_strain = eps_total_prev;
53 variables_prev.liquid_phase_pressure = -p_cap_data.p_cap_prev;
54
55 // external state variables
56 variables_prev.temperature = T_prev;
57 }
58
59 auto solution = solid_material_.integrateStress(
60 variables_prev, variables, x_t.t, x_t.x, x_t.dt,
61 *mat_state.material_state_variables);
62
63 if (!solution)
64 {
65 OGS_FATAL("Computation of local constitutive relation failed.");
66 }
67
68 auto& tdyn_forces_data = std::get<0>(*solution);
69
70 auto const view = solid_material_.createThermodynamicForcesView();
71
72 total_stress_data.sigma_total = view.block(MSM::stress, tdyn_forces_data);
73 S_L_data.S_L = view.block(MSM::saturation, tdyn_forces_data);
74 mat_state.material_state_variables = std::move(std::get<1>(*solution));
75
76 auto const& tangent_operator_data = std::get<2>(*solution);
77
78 current_stateless.stiffness_tensor = tangent_operator_blocks_view_.block(
79 MSM::stress, MSM::strain, tangent_operator_data);
80
82 MSM::saturation, MSM::liquid_pressure, tangent_operator_data);
83
84 current_stateless.J_uT_BT_K_N = tangent_operator_blocks_view_.block(
85 MSM::stress, MSM::temperature, tangent_operator_data);
86
87 current_stateless.J_up_BT_K_N = tangent_operator_blocks_view_.block(
88 MSM::stress, MSM::liquid_pressure, tangent_operator_data);
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} // namespace ConstitutiveStressSaturation_StrainPressureTemperature
97} // namespace ProcessLib::ThermoRichardsMechanics
#define OGS_FATAL(...)
Definition Error.h:19
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > eps
Definition StrainData.h:14
void eval(const SpaceTimeData &x_t, TemperatureData< DisplacementDim > const &T_data, CapillaryPressureData< DisplacementDim > const &p_cap_data, StrainData< DisplacementDim > const &eps_data, PrevState< StrainData< DisplacementDim > > const &eps_prev_data, MaterialStateData< DisplacementDim > &mat_state, PrevState< TotalStressData< DisplacementDim > > const &total_stress_data_prev, TotalStressData< DisplacementDim > &total_stress_data, EquivalentPlasticStrainData &equiv_plast_strain_data, SolidMechanicsDataStateless< DisplacementDim > &current_stateless, PrevState< SaturationData > const &S_L_prev_data, SaturationData &S_L_data, SaturationDataDeriv &dS_L_data) const
MSM::OGSMFrontTangentOperatorBlocksView< DisplacementDim, MSM::ForcesGradsCombinations< boost::mp11::mp_list< MSM::Strain, MSM::LiquidPressure >, boost::mp11::mp_list< MSM::Stress, MSM::Saturation >, boost::mp11::mp_list< MSM::Temperature > >::type > tangent_operator_blocks_view_