OGS
ConstitutiveSetting.cpp
Go to the documentation of this file.
1
11#include "ConstitutiveSetting.h"
12
14
16{
17namespace ConstitutiveStressSaturation_StrainPressureTemperature
18{
19template <int DisplacementDim>
21 ConstitutiveModels<DisplacementDim>& models, double const t,
22 double const dt, ParameterLib::SpatialPosition const& x_position,
23 MaterialPropertyLib::Medium const& medium,
26 KelvinVector<DisplacementDim> const& eps_arg,
28 StatefulDataPrev<DisplacementDim> const& prev_state,
33{
34 namespace G = ProcessLib::Graph;
35
36 auto const aux_data = std::tuple{SpaceTimeData{x_position, t, dt},
37 MediaData{medium}, T_data, p_cap_data};
38
39 auto const mat_state_tuple = std::tie(mat_state);
40
41 // TODO will eps lag one iteration behind? (since it's not updated after
42 // solving the global equation system)
43 std::get<StrainData<DisplacementDim>>(state).eps.noalias() = eps_arg;
44
45 G::eval(models.biot_model, aux_data, tmp);
46
47 G::eval(models.s_mech_model, aux_data, tmp, state, prev_state,
48 mat_state_tuple, cd);
49
50 G::eval(models.solid_compressibility_model, aux_data, tmp, cd);
51
52 G::eval(models.bishops_model, aux_data, state, tmp);
53 // TODO why not ordinary state tracking?
54 G::eval(models.bishops_prev_model, aux_data, prev_state, tmp);
55 G::eval(models.poro_model, aux_data, tmp, state, prev_state);
56
57 // TODO move to local assembler?
58 {
59 auto const& biot_data = std::get<BiotData>(tmp);
60 auto const& poro_data = std::get<PorosityData>(state);
61
62 if (biot_data() < poro_data.phi)
63 {
65 "ThermoRichardsMechanics: Biot-coefficient {} is smaller than "
66 "porosity {} in element/integration point {}/{}.",
67 biot_data(), poro_data.phi, *x_position.getElementID(),
68 *x_position.getIntegrationPoint());
69 }
70 }
71
72 G::eval(models.rho_L_model, aux_data, out);
73 G::eval(models.rho_S_model, aux_data, state, out);
74 G::eval(models.grav_model, state, out, tmp, cd);
75 G::eval(models.mu_L_model, aux_data, out);
76 G::eval(models.transport_poro_model, aux_data, tmp, state, prev_state);
77 G::eval(models.perm_model, aux_data, state, out, cd, tmp);
78 G::eval(models.th_osmosis_model, aux_data, out, cd);
79 G::eval(models.darcy_model, aux_data, out, tmp, cd);
80 G::eval(models.heat_storage_and_flux_model, aux_data, out, state, tmp, cd);
81 G::eval(models.vapor_diffusion_model, aux_data, out, state, tmp, cd);
82
83 // TODO Not needed for solid mechanics (solid thermal expansion is computed
84 // by the solid material model), but for fluid expansion. This duplication
85 // should be avoided in the future.
86 G::eval(models.s_therm_exp_model, aux_data, tmp);
87
88 G::eval(models.f_therm_exp_model, aux_data, tmp, state, out);
89 G::eval(models.storage_model, aux_data, tmp, state, out, prev_state, cd);
90 G::eval(models.eq_p_model, aux_data, state, tmp, out, cd);
91 G::eval(models.eq_T_model, cd);
92}
93
94template struct ConstitutiveSetting<2>;
95template struct ConstitutiveSetting<3>;
96} // namespace ConstitutiveStressSaturation_StrainPressureTemperature
97} // namespace ProcessLib::ThermoRichardsMechanics
#define OGS_FATAL(...)
Definition Error.h:26
std::optional< std::size_t > getElementID() const
std::optional< unsigned > getIntegrationPoint() const
std::tuple< SolidMechanicsDataStateless< 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< DarcyLawData< DisplacementDim >, LiquidDensityData, LiquidViscosityData, SolidDensityData, PermeabilityData< DisplacementDim > > OutputData
Data that is needed for output purposes, but not directly for the assembly.
std::tuple< BiotData, SolidCompressibilityData, SaturationDataDeriv, BishopsData, PrevState< BishopsData >, SolidThermalExpansionData< DisplacementDim >, FluidThermalExpansionData, EquivalentPlasticStrainData > ConstitutiveTempData
std::tuple< SaturationData, PorosityData, TransportPorosityData, StrainData< DisplacementDim >, TotalStressData< DisplacementDim > > StatefulData
Data whose state must be tracked by the TRM process.
KV::KelvinVectorType< DisplacementDim > KelvinVector
Definition Base.h:26
SolidCompressibilityModel< DisplacementDim, SolidConstitutiveRelation< DisplacementDim > > solid_compressibility_model
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.