OGS
ProcessLib::ThermoRichardsMechanics Namespace Reference

Namespaces

namespace  ConstitutiveStress_StrainTemperature
 
namespace  ConstitutiveStressSaturation_StrainPressureTemperature
 

Classes

struct  BiotModel
 
struct  BishopsData
 
struct  BishopsModel
 
struct  BishopsPrevModel
 
struct  CapillaryPressureData
 
struct  DarcyLawData
 
struct  DarcyLawModel
 
struct  EqPData
 
struct  EqPModel
 
struct  EqTData
 
struct  EqTModel
 
struct  EquivalentPlasticStrainData
 
struct  FluidThermalExpansionData
 
struct  FluidThermalExpansionModel
 
struct  GravityData
 
struct  GravityModel
 
struct  IntegrationPointData
 
struct  LiquidDensityData
 
struct  LiquidDensityModel
 
struct  LiquidViscosityData
 
struct  LiquidViscosityModel
 
struct  LocalAssemblerInterface
 
class  MaterialStateData
 
struct  MediaData
 
struct  PermeabilityData
 
struct  PermeabilityModel
 
struct  PorosityData
 
struct  PorosityModel
 
struct  SaturationData
 
struct  SaturationDataDeriv
 
struct  SaturationModel
 
struct  SolidCompressibilityData
 
struct  SolidDensityData
 
struct  SolidDensityModel
 
struct  SolidMechanicsDataStateless
 
struct  SolidThermalExpansionData
 
struct  SolidThermalExpansionModel
 
struct  TemperatureData
 
struct  ThermoOsmosisData
 
struct  ThermoOsmosisModel
 
class  ThermoRichardsMechanicsLocalAssembler
 
struct  ThermoRichardsMechanicsLocalAssembler3Args
 
class  ThermoRichardsMechanicsProcess
 Global assembler for the monolithic scheme of the non-isothermal Richards flow coupled with mechanics. More...
 
struct  ThermoRichardsMechanicsProcessData
 
struct  TotalStressData
 
struct  TransportPorosityData
 
struct  TransportPorosityModel
 
struct  TRMHeatStorageAndFluxData
 
struct  TRMHeatStorageAndFluxModel
 
struct  TRMStorageData
 
struct  TRMStorageModel
 
struct  TRMVaporDiffusionData
 
struct  TRMVaporDiffusionModel
 

Typedefs

template<int DisplacementDim>
using KelvinVector = KV::KelvinVectorType<DisplacementDim>
 
template<int DisplacementDim>
using KelvinMatrix = KV::KelvinMatrixType<DisplacementDim>
 
template<int DisplacementDim>
using GlobalDimVector = Eigen::Vector<double, DisplacementDim>
 
template<int DisplacementDim>
using GlobalDimMatrix
 
using BiotData = BaseLib::StrongType<double, struct BiotTag>
 
using InitializePorosityFromMediumProperty
 A type helping to avoid confusion of different boolean values.
 

Functions

template<int D>
constexpr GlobalDimVector< D > DVnan ()
 Used to set a D dimensional vector to all not-a-number.
 
template<int D>
constexpr GlobalDimMatrix< D > DMnan ()
 Used to set a D x D matrix to all not-a-number.
 
static void bishopsModelEvalImpl (SpaceTimeData const &x_t, MediaData const &media_data, SaturationData const &S_L_data, BishopsData &out)
 
template<int DisplacementDim, typename ConstitutiveTraits >
void createLocalAssemblers (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface< DisplacementDim, ConstitutiveTraits > > > &local_assemblers, NumLib::IntegrationOrder const integration_order, bool const is_axially_symmetric, ThermoRichardsMechanicsProcessData< DisplacementDim, ConstitutiveTraits > &process_data)
 
template void createLocalAssemblers< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > > > &local_assemblers, NumLib::IntegrationOrder const integration_order, bool const is_axially_symmetric, ThermoRichardsMechanicsProcessData< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > &process_data)
 
template void createLocalAssemblers< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > > > &local_assemblers, NumLib::IntegrationOrder const integration_order, bool const is_axially_symmetric, ThermoRichardsMechanicsProcessData< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > &process_data)
 
template void createLocalAssemblers< 2, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 2 > > (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface< 2, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 2 > > > > &local_assemblers, NumLib::IntegrationOrder const integration_order, bool const is_axially_symmetric, ThermoRichardsMechanicsProcessData< 2, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 2 > > &process_data)
 
template void createLocalAssemblers< 3, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 3 > > (std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface< 3, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 3 > > > > &local_assemblers, NumLib::IntegrationOrder const integration_order, bool const is_axially_symmetric, ThermoRichardsMechanicsProcessData< 3, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 3 > > &process_data)
 
void checkMPLProperties (std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
void checkProcessVariableComponents (ProcessVariable const &variable, const int dim)
 
template<int DisplacementDim, typename ConstitutiveTraits , typename CreateConstitutiveSetting >
std::unique_ptr< ProcesscreateThermoRichardsMechanicsProcessStage2 (std::string const &name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media, bool const mandatory_stress0_type)
 
template<int DisplacementDim>
std::unique_ptr< ProcesscreateThermoRichardsMechanicsProcess (std::string const &name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
template std::unique_ptr< ProcesscreateThermoRichardsMechanicsProcess< 2 > (std::string const &name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
template std::unique_ptr< ProcesscreateThermoRichardsMechanicsProcess< 3 > (std::string const &name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 

Typedef Documentation

◆ BiotData

Definition at line 18 of file Biot.h.

◆ GlobalDimMatrix

template<int DisplacementDim>
using ProcessLib::ThermoRichardsMechanics::GlobalDimMatrix
Initial value:
Eigen::Matrix<double, DisplacementDim, DisplacementDim, Eigen::RowMajor>

Definition at line 35 of file Base.h.

◆ GlobalDimVector

template<int DisplacementDim>
using ProcessLib::ThermoRichardsMechanics::GlobalDimVector = Eigen::Vector<double, DisplacementDim>

Definition at line 32 of file Base.h.

◆ InitializePorosityFromMediumProperty

◆ KelvinMatrix

template<int DisplacementDim>
using ProcessLib::ThermoRichardsMechanics::KelvinMatrix = KV::KelvinMatrixType<DisplacementDim>

Definition at line 29 of file Base.h.

◆ KelvinVector

template<int DisplacementDim>
using ProcessLib::ThermoRichardsMechanics::KelvinVector = KV::KelvinVectorType<DisplacementDim>

Definition at line 26 of file Base.h.

Function Documentation

◆ bishopsModelEvalImpl()

static void ProcessLib::ThermoRichardsMechanics::bishopsModelEvalImpl ( SpaceTimeData const & x_t,
MediaData const & media_data,
SaturationData const & S_L_data,
BishopsData & out )
static

Definition at line 15 of file Bishops.cpp.

19{
20 namespace MPL = MaterialPropertyLib;
21 MPL::VariableArray variables;
22 variables.liquid_saturation = S_L_data.S_L;
23
24 auto const& medium = media_data.medium;
25
26 out.chi_S_L = medium.property(MPL::PropertyType::bishops_effective_stress)
27 .template value<double>(variables, x_t.x, x_t.t, x_t.dt);
28
29 out.dchi_dS_L = medium.property(MPL::PropertyType::bishops_effective_stress)
30 .template dValue<double>(
31 variables, MPL::Variable::liquid_saturation, x_t.x,
32 x_t.t, x_t.dt);
33}

References ProcessLib::ThermoRichardsMechanics::BishopsData::chi_S_L, ProcessLib::ThermoRichardsMechanics::BishopsData::dchi_dS_L, ProcessLib::ConstitutiveRelations::SpaceTimeData::dt, MaterialPropertyLib::VariableArray::liquid_saturation, ProcessLib::ThermoRichardsMechanics::MediaData::medium, ProcessLib::ThermoRichardsMechanics::SaturationData::S_L, ProcessLib::ConstitutiveRelations::SpaceTimeData::t, and ProcessLib::ConstitutiveRelations::SpaceTimeData::x.

Referenced by ProcessLib::ThermoRichardsMechanics::BishopsPrevModel::eval(), and ProcessLib::ThermoRichardsMechanics::BishopsModel::eval().

◆ checkMPLProperties()

void ProcessLib::ThermoRichardsMechanics::checkMPLProperties ( std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media)

Definition at line 37 of file CreateThermoRichardsMechanicsProcess.cpp.

39{
40 std::array const required_medium_properties = {
45 std::array const required_liquid_properties = {
47 std::array const required_solid_properties = {MaterialPropertyLib::density};
48
49 // Thermal properties are not checked because they can be phase property or
50 // medium property (will be enabled later).
51 for (auto const& m : media)
52 {
53 checkRequiredProperties(*m.second, required_medium_properties);
54 checkRequiredProperties(m.second->phase("AqueousLiquid"),
55 required_liquid_properties);
56 checkRequiredProperties(m.second->phase("Solid"),
57 required_solid_properties);
58 }
59}
void checkRequiredProperties(Component const &c, std::span< PropertyType const > const required_properties)
Definition Component.cpp:60

References MaterialPropertyLib::biot_coefficient, MaterialPropertyLib::bishops_effective_stress, MaterialPropertyLib::density, MaterialPropertyLib::porosity, MaterialPropertyLib::relative_permeability, MaterialPropertyLib::saturation, and MaterialPropertyLib::viscosity.

Referenced by createThermoRichardsMechanicsProcessStage2().

◆ checkProcessVariableComponents()

void ProcessLib::ThermoRichardsMechanics::checkProcessVariableComponents ( ProcessVariable const & variable,
const int dim )

Definition at line 61 of file CreateThermoRichardsMechanicsProcess.cpp.

63{
64 DBUG("Associate displacement with process variable '{:s}'.",
65 variable.getName());
66
67 if (variable.getNumberOfGlobalComponents() != dim)
68 {
70 "Number of components of the process variable '{:s}' is different "
71 "from the displacement dimension: got {:d}, expected {:d}",
72 variable.getName(),
73 variable.getNumberOfGlobalComponents(),
74 dim);
75 }
76}
#define OGS_FATAL(...)
Definition Error.h:26
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30

References DBUG(), ProcessLib::ProcessVariable::getName(), ProcessLib::ProcessVariable::getNumberOfGlobalComponents(), and OGS_FATAL.

Referenced by createThermoRichardsMechanicsProcessStage2().

◆ createLocalAssemblers()

template<int DisplacementDim, typename ConstitutiveTraits >
void ProcessLib::ThermoRichardsMechanics::createLocalAssemblers ( std::vector< MeshLib::Element * > const & mesh_elements,
NumLib::LocalToGlobalIndexMap const & dof_table,
std::vector< std::unique_ptr< LocalAssemblerInterface< DisplacementDim, ConstitutiveTraits > > > & local_assemblers,
NumLib::IntegrationOrder const integration_order,
bool const is_axially_symmetric,
ThermoRichardsMechanicsProcessData< DisplacementDim, ConstitutiveTraits > & process_data )

Definition at line 35 of file CreateThermoRichardsMechanicsLocalAssemblers.cpp.

45{
47 DisplacementDim,
49 ConstitutiveTraits>::template LocalAssemblerImplementation>(
50 mesh_elements, dof_table, local_assemblers, integration_order,
51 is_axially_symmetric, process_data);
52}
void createLocalAssemblersHM(std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, ProviderOrOrder const &provider_or_order, ExtraCtorArgs &&... extra_ctor_args)

References ProcessLib::createLocalAssemblersHM().

◆ createLocalAssemblers< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > >()

template void ProcessLib::ThermoRichardsMechanics::createLocalAssemblers< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > ( std::vector< MeshLib::Element * > const & mesh_elements,
NumLib::LocalToGlobalIndexMap const & dof_table,
std::vector< std::unique_ptr< LocalAssemblerInterface< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > > > & local_assemblers,
NumLib::IntegrationOrder const integration_order,
bool const is_axially_symmetric,
ThermoRichardsMechanicsProcessData< 2, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 2 > > & process_data )

◆ createLocalAssemblers< 2, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 2 > >()

◆ createLocalAssemblers< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > >()

template void ProcessLib::ThermoRichardsMechanics::createLocalAssemblers< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > ( std::vector< MeshLib::Element * > const & mesh_elements,
NumLib::LocalToGlobalIndexMap const & dof_table,
std::vector< std::unique_ptr< LocalAssemblerInterface< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > > > & local_assemblers,
NumLib::IntegrationOrder const integration_order,
bool const is_axially_symmetric,
ThermoRichardsMechanicsProcessData< 3, ConstitutiveStress_StrainTemperature::ConstitutiveTraits< 3 > > & process_data )

◆ createLocalAssemblers< 3, ConstitutiveStressSaturation_StrainPressureTemperature::ConstitutiveTraits< 3 > >()

◆ createThermoRichardsMechanicsProcess()

template<int DisplacementDim>
std::unique_ptr< Process > ProcessLib::ThermoRichardsMechanics::createThermoRichardsMechanicsProcess ( std::string const & name,
MeshLib::Mesh & mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > && jacobian_assembler,
std::vector< ProcessVariable > const & variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters,
std::optional< ParameterLib::CoordinateSystem > const & local_coordinate_system,
unsigned const integration_order,
BaseLib::ConfigTree const & config,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )
Input File Parameter
prj__processes__process__type
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__subtype

Definition at line 221 of file CreateThermoRichardsMechanicsProcess.cpp.

232{
234 config.checkConfigParameter("type", "THERMO_RICHARDS_MECHANICS");
235 DBUG("Create ThermoRichardsMechanicsProcess.");
236
237 auto const subtype =
239 config.getConfigParameter<std::string>("subtype",
240 "Stress_StrainTemperature");
241 INFO("TRM process subtype is '{}'", subtype);
242
243 if (subtype == "Stress_StrainTemperature")
244 {
245 bool const mandatory_stress0_type = false;
247 DisplacementDim,
249 DisplacementDim>,
251 DisplacementDim>>(name, mesh, std::move(jacobian_assembler),
252 variables, parameters,
253 local_coordinate_system, integration_order,
254 config, media, mandatory_stress0_type);
255 }
256
257 if (subtype == "StressSaturation_StrainPressureTemperature")
258 {
259#ifdef OGS_USE_MFRONT
260 bool const mandatory_stress0_type = true;
261 return createThermoRichardsMechanicsProcessStage2<
262 DisplacementDim,
263 ConstitutiveStressSaturation_StrainPressureTemperature::
264 ConstitutiveTraits<DisplacementDim>,
265 ConstitutiveStressSaturation_StrainPressureTemperature::
266 CreateConstitutiveSetting<DisplacementDim>>(
267 name, mesh, std::move(jacobian_assembler), variables, parameters,
268 local_coordinate_system, integration_order, config, media,
269 mandatory_stress0_type);
270#else
271 OGS_FATAL(
272 "TRM process subtype 'StressSaturation_StrainPressureTemperature' "
273 "is not supported, because OGS has not been built with MFront.");
274#endif
275 }
276
277 OGS_FATAL("Unknown TRM process subtype '{}'.", subtype);
278}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:35
std::unique_ptr< Process > createThermoRichardsMechanicsProcessStage2(std::string const &name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media, bool const mandatory_stress0_type)

References BaseLib::ConfigTree::checkConfigParameter(), createThermoRichardsMechanicsProcessStage2(), DBUG(), BaseLib::ConfigTree::getConfigParameter(), INFO(), and OGS_FATAL.

◆ createThermoRichardsMechanicsProcess< 2 >()

template std::unique_ptr< Process > ProcessLib::ThermoRichardsMechanics::createThermoRichardsMechanicsProcess< 2 > ( std::string const & name,
MeshLib::Mesh & mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > && jacobian_assembler,
std::vector< ProcessVariable > const & variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters,
std::optional< ParameterLib::CoordinateSystem > const & local_coordinate_system,
unsigned const integration_order,
BaseLib::ConfigTree const & config,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )

◆ createThermoRichardsMechanicsProcess< 3 >()

template std::unique_ptr< Process > ProcessLib::ThermoRichardsMechanics::createThermoRichardsMechanicsProcess< 3 > ( std::string const & name,
MeshLib::Mesh & mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > && jacobian_assembler,
std::vector< ProcessVariable > const & variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters,
std::optional< ParameterLib::CoordinateSystem > const & local_coordinate_system,
unsigned const integration_order,
BaseLib::ConfigTree const & config,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )

◆ createThermoRichardsMechanicsProcessStage2()

template<int DisplacementDim, typename ConstitutiveTraits , typename CreateConstitutiveSetting >
std::unique_ptr< Process > ProcessLib::ThermoRichardsMechanics::createThermoRichardsMechanicsProcessStage2 ( std::string const & name,
MeshLib::Mesh & mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > && jacobian_assembler,
std::vector< ProcessVariable > const & variables,
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters,
std::optional< ParameterLib::CoordinateSystem > const & local_coordinate_system,
unsigned const integration_order,
BaseLib::ConfigTree const & config,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media,
bool const mandatory_stress0_type )
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__coupling_scheme

Process Variables

Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__process_variables

Primary process variables as they appear in the global component vector:

Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__process_variables__temperature
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__process_variables__pressure
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__process_variables__displacement

Process Parameters

Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__specific_body_force
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__mass_lumping
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__apply_body_force_for_deformation
Input File Parameter
prj__processes__process__THERMO_RICHARDS_MECHANICS__initialize_porosity_from_medium_property

Definition at line 80 of file CreateThermoRichardsMechanicsProcess.cpp.

90{
91 auto const coupling_scheme =
93 config.getConfigParameterOptional<std::string>("coupling_scheme");
94 const bool use_monolithic_scheme =
95 !(coupling_scheme && (*coupling_scheme == "staggered"));
96
98
100 auto const pv_config = config.getConfigSubtree("process_variables");
101
102 ProcessVariable* variable_T;
103 ProcessVariable* variable_p;
104 ProcessVariable* variable_u;
105 std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
106 process_variables;
107 if (use_monolithic_scheme) // monolithic scheme.
108 {
111 auto per_process_variables = findProcessVariables(
112 variables, pv_config,
113 {
114 "temperature",
116 "pressure",
118 "displacement"});
119 variable_T = &per_process_variables[0].get();
120 variable_p = &per_process_variables[1].get();
121 variable_u = &per_process_variables[2].get();
122 process_variables.push_back(std::move(per_process_variables));
123 }
124 else // staggered scheme.
125 {
126 OGS_FATAL(
127 "So far, only the monolithic scheme is implemented for "
128 "THERMO_RICHARDS_MECHANICS");
129 }
130
131 checkProcessVariableComponents(*variable_T, 1);
132 checkProcessVariableComponents(*variable_p, 1);
133 checkProcessVariableComponents(*variable_u, DisplacementDim);
134
136
137 auto solid_constitutive_relations =
138 CreateConstitutiveSetting::createSolidConstitutiveRelations(
139 parameters, local_coordinate_system, config);
140
141 // Specific body force
142 Eigen::Matrix<double, DisplacementDim, 1> specific_body_force;
143 {
144 std::vector<double> const b =
146 config.getConfigParameter<std::vector<double>>(
147 "specific_body_force");
148 if (b.size() != DisplacementDim)
149 {
150 OGS_FATAL(
151 "The size of the specific body force vector does not match the "
152 "displacement dimension. Vector size is {:d}, displacement "
153 "dimension is {:d}",
154 b.size(), DisplacementDim);
155 }
156
157 std::copy_n(b.data(), b.size(), specific_body_force.data());
158 }
159
160 auto media_map =
162 DBUG(
163 "Check the media properties of ThermoRichardsMechanics process "
164 "...");
165 checkMPLProperties(media);
166 DBUG("Media properties verified.");
167
168 auto initial_stress = ProcessLib::createInitialStress<DisplacementDim>(
169 config, parameters, mesh, mandatory_stress0_type);
170
171 bool mass_lumping = false;
172 if (auto const mass_lumping_ptr =
174 config.getConfigParameterOptional<bool>("mass_lumping"))
175 {
176 DBUG("Using mass lumping for the Richards flow equation.");
177 mass_lumping = *mass_lumping_ptr;
178 }
179
180 bool const apply_body_force_for_deformation =
182 config.getConfigParameter<bool>("apply_body_force_for_deformation",
183 true);
184
185 bool const initialize_porosity_from_medium_property =
187 config.getConfigParameter("initialize_porosity_from_medium_property",
188 true);
189
190 const bool use_TaylorHood_elements =
191 variable_p->getShapeFunctionOrder() !=
192 variable_u->getShapeFunctionOrder()
193 ? true
194 : false;
195
196 ThermoRichardsMechanicsProcessData<DisplacementDim, ConstitutiveTraits>
197 process_data{materialIDs(mesh),
198 std::move(media_map),
199 std::move(solid_constitutive_relations),
200 std::move(initial_stress),
201 specific_body_force,
202 mass_lumping,
203 use_TaylorHood_elements,
204 apply_body_force_for_deformation,
206 initialize_porosity_from_medium_property}};
207
208 SecondaryVariableCollection secondary_variables;
209
210 ProcessLib::createSecondaryVariables(config, secondary_variables);
211
212 return std::make_unique<
213 ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>>(
214 name, mesh, std::move(jacobian_assembler), parameters,
215 integration_order, std::move(process_variables),
216 std::move(process_data), std::move(secondary_variables),
217 use_monolithic_scheme);
218}
unsigned getShapeFunctionOrder() const
MaterialSpatialDistributionMap createMaterialSpatialDistributionMap(std::map< int, std::shared_ptr< Medium > > const &media, MeshLib::Mesh const &mesh)
PropertyVector< int > const * materialIDs(Mesh const &mesh)
Definition Mesh.cpp:268
void checkMPLProperties(MeshLib::Mesh const &mesh, MaterialPropertyLib::MaterialSpatialDistributionMap const &media_map)
void checkProcessVariableComponents(ProcessVariable const &variable)
BaseLib::StrongType< bool, struct InitializePorosityFromMediumPropertyTag > InitializePorosityFromMediumProperty
A type helping to avoid confusion of different boolean values.
std::vector< std::reference_wrapper< ProcessVariable > > findProcessVariables(std::vector< ProcessVariable > const &variables, BaseLib::ConfigTree const &pv_config, std::initializer_list< std::string > tags)
void createSecondaryVariables(BaseLib::ConfigTree const &config, SecondaryVariableCollection &secondary_variables)

References checkMPLProperties(), checkProcessVariableComponents(), MaterialPropertyLib::createMaterialSpatialDistributionMap(), ProcessLib::createSecondaryVariables(), DBUG(), ProcessLib::findProcessVariables(), BaseLib::ConfigTree::getConfigParameter(), BaseLib::ConfigTree::getConfigParameterOptional(), BaseLib::ConfigTree::getConfigSubtree(), ProcessLib::ProcessVariable::getShapeFunctionOrder(), and OGS_FATAL.

Referenced by createThermoRichardsMechanicsProcess().

◆ DMnan()

template<int D>
constexpr GlobalDimMatrix< D > ProcessLib::ThermoRichardsMechanics::DMnan ( )
constexpr

Used to set a D x D matrix to all not-a-number.

Definition at line 47 of file Base.h.

48{
50}
Eigen::Matrix< double, DisplacementDim, DisplacementDim, Eigen::RowMajor > GlobalDimMatrix
Definition Base.h:35

References ProcessLib::ConstitutiveRelations::nan.

◆ DVnan()

template<int D>
constexpr GlobalDimVector< D > ProcessLib::ThermoRichardsMechanics::DVnan ( )
constexpr

Used to set a D dimensional vector to all not-a-number.

Definition at line 40 of file Base.h.

41{
43}
Eigen::Vector< double, DisplacementDim > GlobalDimVector
Definition Base.h:32

References ProcessLib::ConstitutiveRelations::nan.