OGS
ThermoRichardsMechanics/ConstitutiveStressSaturation_StrainPressureTemperature/ConstitutiveSetting.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
5
8
10{
12{
13template <int DisplacementDim>
15{
16 INFO(
17 "Checking correct model evaluation order in the constitutive setting.");
18
19 using namespace boost::mp11;
20
21 constexpr auto D = DisplacementDim;
22
23 using Inputs =
24 mp_list<SpaceTimeData, MediaData, TemperatureData<D>,
26 //, MaterialStateData<D> /*TODO material state data is a special
27 // case: it's both input and output data.*/
28 >;
29
30 using InputsAndPrevState = mp_append<Inputs, StatefulDataPrev<D>>;
31
32 bool const is_correct = ProcessLib::Graph::isEvalOrderCorrectRT<
33 ConstitutiveModels<DisplacementDim>, InputsAndPrevState>();
34
35 if (!is_correct)
36 {
37 OGS_FATAL("The constitutive setting has a wrong evaluation order.");
38 }
39
40 INFO("Model evaluation order is correct.");
41
42 return is_correct;
43}
44
45template <int DisplacementDim>
47 ConstitutiveModels<DisplacementDim>& /*models*/, double const /*t*/,
48 double const /*dt*/, ParameterLib::SpatialPosition const& /*x_position*/,
49 MediaData const& /*media_data*/,
50 TemperatureData<DisplacementDim> const& /*T_data*/,
52 StatefulDataPrev<DisplacementDim>& /*prev_state*/) const
53{
54 [[maybe_unused]] static const bool model_order_correct =
56}
57
58template <int DisplacementDim>
60 ConstitutiveModels<DisplacementDim>& models, double const t,
61 double const dt, ParameterLib::SpatialPosition const& x_position,
62 MaterialPropertyLib::Medium const& medium,
65 KelvinVector<DisplacementDim> const& eps_arg,
67 StatefulDataPrev<DisplacementDim> const& prev_state,
72{
73 auto const aux_data = std::tuple{SpaceTimeData{x_position, t, dt},
74 MediaData{medium}, T_data, p_cap_data};
75
76 auto const mat_state_tuple = std::tie(mat_state);
77
78 // TODO will eps lag one iteration behind? (since it's not updated after
79 // solving the global equation system)
80 std::get<StrainData<DisplacementDim>>(state).eps.noalias() = eps_arg;
81
82 ProcessLib::Graph::evalAllInOrder(models, aux_data, cd, mat_state_tuple,
83 out, prev_state, state, tmp);
84
85 // TODO why not ordinary state tracking for BishopsPrevModel?
86
87 {
88 auto const& biot_data = std::get<BiotData>(tmp);
89 auto const& poro_data = std::get<PorosityData>(state);
90
91 if (biot_data() < poro_data.phi)
92 {
94 "ThermoRichardsMechanics: Biot-coefficient {} is smaller than "
95 "porosity {} in element {}.",
96 biot_data(), poro_data.phi, *x_position.getElementID());
97 }
98 }
99
100 // TODO Solid thermal expansion is not needed for solid mechanics (it is
101 // computed by the solid material model itself), but for fluid expansion.
102 // This duplication should be avoided in the future.
103}
104
105template struct ConstitutiveSetting<2>;
106template struct ConstitutiveSetting<3>;
107} // namespace ConstitutiveStressSaturation_StrainPressureTemperature
108} // namespace ProcessLib::ThermoRichardsMechanics
#define OGS_FATAL(...)
Definition Error.h:10
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:28
std::optional< std::size_t > getElementID() const
KV::KelvinVectorType< DisplacementDim > KelvinVector
void evalAllInOrder(Functions &fs, Tuples &... ts)
Definition Apply.h:290
std::tuple< BiotModel, SolidMechanicsModel< DisplacementDim >, SolidCompressibilityModel< DisplacementDim, SolidConstitutiveRelation< DisplacementDim > >, BishopsModel, BishopsPrevModel, EffectiveStressModel< DisplacementDim >, PorosityModel< DisplacementDim >, LiquidDensityModel< DisplacementDim >, SolidDensityModel< DisplacementDim >, GravityModel< DisplacementDim >, LiquidViscosityModel< DisplacementDim >, TransportPorosityModel< DisplacementDim >, PermeabilityModel< DisplacementDim >, ThermoOsmosisModel< DisplacementDim >, DarcyLawModel< DisplacementDim >, TRMHeatStorageAndFluxModel< DisplacementDim >, TRMVaporDiffusionModel< DisplacementDim >, SolidThermalExpansionModel< DisplacementDim >, FluidThermalExpansionModel< DisplacementDim >, TRMStorageModel< DisplacementDim >, EqPModel< DisplacementDim >, EqTModel< DisplacementDim > > ConstitutiveModels
Constitutive models used for 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< SolidMechanicsDataStateless< DisplacementDim >, EffectiveStressData< 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< 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.
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.
void init(ConstitutiveModels< DisplacementDim > &, double const, double const, ParameterLib::SpatialPosition const &, MediaData const &, TemperatureData< DisplacementDim > const &, StatefulData< DisplacementDim > &, StatefulDataPrev< DisplacementDim > &) const