OGS
SmallDeformation/ConstitutiveRelations/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 = mp_list<SpaceTimeData, MediaData, Temperature, StrainData<D>,
25
26 using InputsAndPrevState = mp_append<Inputs, StatefulDataPrev<D>>;
27
28 bool const is_correct = ProcessLib::Graph::isEvalOrderCorrectRT<
29 ConstitutiveModels<DisplacementDim>, InputsAndPrevState>();
30
31 if (!is_correct)
32 {
33 OGS_FATAL("The constitutive setting has a wrong evaluation order.");
34 }
35
36 INFO("Model evaluation order is correct.");
37 return is_correct;
38}
39
40template <int DisplacementDim>
42{
43 [[maybe_unused]] static const bool model_order_correct =
45}
46template <int DisplacementDim>
48 ConstitutiveModels<DisplacementDim>& models, double const t,
49 double const dt, ParameterLib::SpatialPosition const& x_position,
50 MaterialPropertyLib::Medium const& medium, double const T_ref,
52 KelvinVector<DisplacementDim> const& eps_prev,
54 StatefulDataPrev<DisplacementDim> const& prev_state,
59{
60 auto& eps_data = std::get<StrainData<DisplacementDim>>(out);
61 eps_data.eps = eps;
62 auto& eps_data_prev = std::get<PrevState<StrainData<DisplacementDim>>>(tmp);
63 eps_data_prev->eps = eps_prev;
64
65 auto const aux_data = std::tuple{SpaceTimeData{x_position, t, dt},
66 MediaData{medium}, Temperature{T_ref}};
67 auto const mat_state_tuple = std::tie(mat_state);
68
69 ProcessLib::Graph::evalAllInOrder(models, aux_data, cd, mat_state_tuple,
70 out, prev_state, state, tmp);
71}
72
73template struct ConstitutiveSetting<2>;
74template struct ConstitutiveSetting<3>;
75} // namespace ConstitutiveRelations
76} // namespace ProcessLib::SmallDeformation
#define OGS_FATAL(...)
Definition Error.h:19
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:28
BaseLib::StrongType< double, struct TemperatureTag > Temperature
KV::KelvinVectorType< DisplacementDim > KelvinVector
void evalAllInOrder(Functions &fs, Tuples &... ts)
Definition Apply.h:288
ProcessLib::ConstitutiveRelations::PrevStateOf< StatefulData< DisplacementDim > > StatefulDataPrev
std::tuple< StressData< DisplacementDim > > StatefulData
Data whose state must be tracked by the process.
std::tuple< SolidMechanicsDataStateless< DisplacementDim >, VolumetricBodyForce< DisplacementDim > > ConstitutiveData
Data that is needed for the equation system assembly.
std::tuple< SolidMechanicsModel< DisplacementDim >, SolidDensityModel, GravityModel< DisplacementDim > > ConstitutiveModels
Constitutive models used for assembly.
std::tuple< StrainData< DisplacementDim >, FreeEnergyDensityData > OutputData
Data that is needed for output purposes, but not directly for the assembly.
std::tuple< PrevState< StrainData< DisplacementDim > >, SolidDensity > ConstitutiveTempData
void eval(ConstitutiveModels< DisplacementDim > &models, double const t, double const dt, ParameterLib::SpatialPosition const &x_position, MaterialPropertyLib::Medium const &medium, double const T_ref, KelvinVector< DisplacementDim > const &eps, KelvinVector< DisplacementDim > const &eps_prev, 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.