OGS
LargeDeformation/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
6#include "BaseLib/Error.h"
9
11{
13{
14template <int DisplacementDim>
16{
17 INFO(
18 "Checking correct model evaluation order in the constitutive setting.");
19
20 using namespace boost::mp11;
21
22 constexpr auto D = DisplacementDim;
23
24 using Inputs = mp_list<SpaceTimeData, MediaData, Temperature,
27
28 using InputsAndPrevState = mp_append<Inputs, StatefulDataPrev<D>>;
29
30 bool const is_correct = ProcessLib::Graph::isEvalOrderCorrectRT<
31 ConstitutiveModels<DisplacementDim>, InputsAndPrevState>();
32
33 if (!is_correct)
34 {
35 OGS_FATAL("The constitutive setting has a wrong evaluation order.");
36 }
37
38 INFO("Model evaluation order is correct.");
39
40 return is_correct;
41}
42
43template <int DisplacementDim>
45{
46 [[maybe_unused]] static const bool model_order_correct =
48}
49
50template <int DisplacementDim>
52 ConstitutiveModels<DisplacementDim>& models, double const t,
53 double const dt, ParameterLib::SpatialPosition const& x_position,
54 MaterialPropertyLib::Medium const& medium, double const T_ref,
55 DeformationGradientData<DisplacementDim> const& deformation_gradient_data,
56 GradientVectorType const& deformation_gradient_prev,
58 StatefulDataPrev<DisplacementDim> const& prev_state,
62{
63 auto& deformation_gradient_data_prev =
64 std::get<PrevState<DeformationGradientData<DisplacementDim>>>(tmp);
65 deformation_gradient_data_prev->deformation_gradient =
66 deformation_gradient_prev;
67
68 auto const aux_data =
69 std::tuple{SpaceTimeData{x_position, t, dt}, MediaData{medium},
70 Temperature{T_ref}, deformation_gradient_data};
71 auto const mat_state_tuple = std::tie(mat_state);
72
73 ProcessLib::Graph::evalAllInOrder(models, aux_data, cd, mat_state_tuple,
74 prev_state, state, tmp);
75}
76
77template struct ConstitutiveSetting<2>;
78template struct ConstitutiveSetting<3>;
79} // namespace ConstitutiveRelations
80} // namespace ProcessLib::LargeDeformation
#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
void evalAllInOrder(Functions &fs, Tuples &... ts)
Definition Apply.h:288
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.
ProcessLib::ConstitutiveRelations::PrevStateOf< StatefulData< DisplacementDim > > StatefulDataPrev
std::tuple< PrevState< DeformationGradientData< DisplacementDim > >, SolidDensity > ConstitutiveTempData
std::tuple< StressData< DisplacementDim > > StatefulData
Data whose state must be tracked by the process.
void eval(ConstitutiveModels< DisplacementDim > &models, double const t, double const dt, ParameterLib::SpatialPosition const &x_position, MaterialPropertyLib::Medium const &medium, double const T_ref, DeformationGradientData< DisplacementDim > const &deformation_gradient_data, GradientVectorType const &deformation_gradient_prev, StatefulData< DisplacementDim > &state, StatefulDataPrev< DisplacementDim > const &prev_state, MaterialStateData< DisplacementDim > &mat_state, ConstitutiveTempData< DisplacementDim > &tmp, ConstitutiveData< DisplacementDim > &cd) const
Evaluate the constitutive setting.
Eigen::Matrix< double, DisplacementDim *DisplacementDim+(DisplacementDim==2 ? 1 :0), 1 > GradientVectorType