35 std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
36 std::vector<ProcessVariable>
const& variables,
37 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
38 std::optional<ParameterLib::CoordinateSystem>
const&
39 local_coordinate_system,
41 std::map<
int, std::shared_ptr<MaterialPropertyLib::Medium>>
const& media)
45 DBUG(
"Create ThermoHydroMechanicsProcess.");
47 auto const coupling_scheme =
50 const bool use_monolithic_scheme =
51 !(coupling_scheme && (*coupling_scheme ==
"staggered"));
61 std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
63 if (use_monolithic_scheme)
75 variable_T = &per_process_variables[0].get();
76 variable_p = &per_process_variables[1].get();
77 variable_u = &per_process_variables[2].get();
78 process_variables.push_back(std::move(per_process_variables));
82 using namespace std::string_literals;
83 for (
auto const& variable_name :
84 {
"temperature"s,
"pressure"s,
"displacement"s})
86 auto per_process_variables =
88 process_variables.push_back(std::move(per_process_variables));
90 variable_T = &process_variables[0][0].get();
91 variable_p = &process_variables[1][0].get();
92 variable_u = &process_variables[2][0].get();
98 "The shape function order of temperature must be 1 but its input "
99 "value in <process_variable><order> is {:d}. Please correct it.",
105 "The shape function order of pressure must be 1 but its input "
106 "value in <process_variable><order> is {:d}. Please correct it.",
110 DBUG(
"Associate displacement with process variable '{:s}'.",
116 "Number of components of the process variable '{:s}' is different "
117 "from the displacement dimension: got {:d}, expected {:d}",
123 DBUG(
"Associate pressure with process variable '{:s}'.",
128 "Pressure process variable '{:s}' is not a scalar variable but has "
134 DBUG(
"Associate temperature with process variable '{:s}'.",
139 "temperature process variable '{:s}' is not a scalar variable but "
140 "has {:d} components.",
146 auto solid_constitutive_relations =
148 parameters, local_coordinate_system, materialIDs(mesh), config);
150 auto ice_constitutive_relation =
152 parameters, local_coordinate_system, config);
155 Eigen::Matrix<double, DisplacementDim, 1> specific_body_force;
157 std::vector<double>
const b =
160 "specific_body_force");
161 if (b.size() != DisplacementDim)
164 "The size of the specific body force vector does not match the "
165 "displacement dimension. Vector size is {:d}, displacement "
167 b.size(), DisplacementDim);
170 std::copy_n(b.data(), b.size(), specific_body_force.data());
179 config, parameters, mesh);
185 std::move(media_map),
186 std::move(solid_constitutive_relations),
187 std::move(ice_constitutive_relation),
188 std::move(initial_stress),
190 std::move(stabilizer)};
196 return std::make_unique<ThermoHydroMechanicsProcess<DisplacementDim>>(
197 std::move(name), mesh, std::move(jacobian_assembler), parameters,
198 integration_order, std::move(process_variables),
199 std::move(process_data), std::move(secondary_variables),
200 use_monolithic_scheme);