OGS
ConstitutiveSetting.cpp
Go to the documentation of this file.
1
11#include "ConstitutiveSetting.h"
12
13#include <Eigen/LU>
14
17
19{
20namespace ConstitutiveStress_StrainTemperature
21{
22template <int DisplacementDim>
24 ConstitutiveModels<DisplacementDim>& models, double const t,
25 double const dt, ParameterLib::SpatialPosition const& x_position,
26 MediaData const& media_data, TemperatureData<DisplacementDim> const& T_data,
28 StatefulDataPrev<DisplacementDim>& prev_state) const
29{
30 // Set eps_m_prev from potentially non-zero eps and sigma_sw from
31 // restart.
32 SpaceTimeData const x_t{x_position, t, dt};
34 models.elastic_tangent_stiffness_model.eval(x_t, T_data, C_el_data);
35
36 auto const& eps = std::get<StrainData<DisplacementDim>>(state).eps;
37 auto const& sigma_sw =
38 std::get<SwellingDataStateful<DisplacementDim>>(state).sigma_sw;
39 std::get<PrevState<MechanicalStrainData<DisplacementDim>>>(prev_state)
40 ->eps_m.noalias() =
41 media_data.solid.hasProperty(
43 ? eps + C_el_data.C_el.inverse() * sigma_sw
44 : eps;
45}
46
47template <int DisplacementDim>
49 ConstitutiveModels<DisplacementDim>& models, double const t,
50 double const dt, ParameterLib::SpatialPosition const& x_position,
51 MaterialPropertyLib::Medium const& medium,
54 KelvinVector<DisplacementDim> const& eps_arg,
56 StatefulDataPrev<DisplacementDim> const& prev_state,
61{
62 namespace G = ProcessLib::Graph;
63
64 auto const aux_data = std::tuple{SpaceTimeData{x_position, t, dt},
65 MediaData{medium}, T_data, p_cap_data};
66
67 auto const mat_state_tuple = std::tie(mat_state);
68
69 // TODO will eps lag one iteration behind? (since it's not updated after
70 // solving the global equation system)
71 std::get<StrainData<DisplacementDim>>(state).eps.noalias() = eps_arg;
72
73 G::eval(models.elastic_tangent_stiffness_model, aux_data, tmp);
74 G::eval(models.biot_model, aux_data, tmp);
75 G::eval(models.solid_compressibility_model, aux_data, tmp);
76 G::eval(models.S_L_model, aux_data, state, tmp);
77
78 G::eval(models.bishops_model, aux_data, state, tmp);
79 // TODO why not ordinary state tracking?
80 G::eval(models.bishops_prev_model, aux_data, prev_state, tmp);
81 G::eval(models.poro_model, aux_data, tmp, state, prev_state);
82
83 {
84 auto const& biot_data = std::get<BiotData>(tmp);
85 auto const& poro_data = std::get<PorosityData>(state);
86
87 if (biot_data() < poro_data.phi)
88 {
90 "ThermoRichardsMechanics: Biot-coefficient {} is smaller than "
91 "porosity {} in element/integration point {}/{}.",
92 biot_data(), poro_data.phi, *x_position.getElementID(),
93 *x_position.getIntegrationPoint());
94 }
95 }
96
97 G::eval(models.swelling_model, aux_data, state, prev_state, tmp);
98 G::eval(models.s_therm_exp_model, aux_data, tmp);
99 G::eval(models.s_mech_model, aux_data, tmp, state, prev_state,
100 mat_state_tuple, cd);
101
102 G::eval(models.rho_L_model, aux_data, out);
103
104 /* {
105 double const p_FR = -bishops_data.chi_S_L * p_cap_data.p_cap;
106 // p_SR
107 // TODO used by no MPL model
108 variables.solid_grain_pressure =
109 p_FR -
110 Invariants::trace(std::get<s_mech_data>(state).sigma_eff) / (3 * (1
111 - phi));
112 } */
113
114 G::eval(models.rho_S_model, aux_data, state, out);
115 G::eval(models.grav_model, state, out, tmp, cd);
116 G::eval(models.mu_L_model, aux_data, out);
117 G::eval(models.transport_poro_model, aux_data, tmp, state, prev_state);
118 G::eval(models.perm_model, aux_data, state, out, cd, tmp);
119 G::eval(models.th_osmosis_model, aux_data, out, cd);
120 G::eval(models.darcy_model, aux_data, out, tmp, cd);
121 G::eval(models.heat_storage_and_flux_model, aux_data, out, state, tmp, cd);
122 G::eval(models.vapor_diffusion_model, aux_data, out, state, tmp, cd);
123 G::eval(models.f_therm_exp_model, aux_data, tmp, state, out);
124 G::eval(models.storage_model, aux_data, tmp, state, out, prev_state, cd);
125 G::eval(models.eq_p_model, aux_data, state, tmp, out, cd);
126 G::eval(models.eq_T_model, cd);
127}
128
129template struct ConstitutiveSetting<2>;
130template struct ConstitutiveSetting<3>;
131
132} // namespace ConstitutiveStress_StrainTemperature
133} // namespace ProcessLib::ThermoRichardsMechanics
#define OGS_FATAL(...)
Definition Error.h:26
bool hasProperty(PropertyType const &p) const
Definition Phase.cpp:69
std::optional< std::size_t > getElementID() const
std::optional< unsigned > getIntegrationPoint() const
std::tuple< DarcyLawData< DisplacementDim >, LiquidDensityData, LiquidViscosityData, SolidDensityData, PermeabilityData< DisplacementDim > > OutputData
Data that is needed for output purposes, but not directly for the assembly.
std::tuple< SaturationData, PorosityData, TransportPorosityData, StrainData< DisplacementDim >, SwellingDataStateful< DisplacementDim >, MechanicalStrainData< DisplacementDim >, EffectiveStressData< DisplacementDim > > StatefulData
Data whose state must be tracked by the TRM process.
std::tuple< SolidMechanicsDataStateless< DisplacementDim >, TotalStressData< DisplacementDim >, GravityData< DisplacementDim >, TRMHeatStorageAndFluxData< DisplacementDim >, TRMVaporDiffusionData< DisplacementDim >, TRMStorageData, EqPData< DisplacementDim >, EqTData< DisplacementDim >, ThermoOsmosisData< DisplacementDim > > ConstitutiveData
Data that is needed for the equation system assembly.
std::tuple< SwellingDataStateless< DisplacementDim >, ElasticTangentStiffnessData< DisplacementDim >, BiotData, SolidCompressibilityData, SaturationDataDeriv, BishopsData, PrevState< BishopsData >, SolidThermalExpansionData< DisplacementDim >, FluidThermalExpansionData, EquivalentPlasticStrainData > ConstitutiveTempData
KV::KelvinVectorType< DisplacementDim > KelvinVector
Definition Base.h:26
SolidCompressibilityModel< DisplacementDim, SolidConstitutiveRelation< DisplacementDim > > solid_compressibility_model
void init(ConstitutiveModels< DisplacementDim > &models, double const t, double const dt, ParameterLib::SpatialPosition const &x_position, MediaData const &media_data, TemperatureData< DisplacementDim > const &T_data, StatefulData< DisplacementDim > &state, StatefulDataPrev< DisplacementDim > &prev_state) const
void eval(ConstitutiveModels< DisplacementDim > &models, double const t, double const dt, ParameterLib::SpatialPosition const &x_position, MaterialPropertyLib::Medium const &medium, TemperatureData< DisplacementDim > const &T_data, CapillaryPressureData< DisplacementDim > const &p_cap_data, KelvinVector< DisplacementDim > const &eps_arg, StatefulData< DisplacementDim > &state, StatefulDataPrev< DisplacementDim > const &prev_state, MaterialStateData< DisplacementDim > &mat_state, ConstitutiveTempData< DisplacementDim > &tmp, OutputData< DisplacementDim > &out, ConstitutiveData< DisplacementDim > &cd) const
Evaluate the constitutive setting.
MaterialPropertyLib::Phase const & solid
Definition Base.h:63