Skip to content
Snippets Groups Projects
Commit 5d3f5e27 authored by Christoph Lehmann's avatar Christoph Lehmann
Browse files

[PL/TRM] Check model eval order at runtime

parent 3889a8c4
No related branches found
No related tags found
No related merge requests found
......@@ -11,11 +11,56 @@
#include "ConstitutiveSetting.h"
#include "ProcessLib/Graph/Apply.h"
#include "ProcessLib/Graph/CheckEvalOrderRT.h"
namespace ProcessLib::ThermoRichardsMechanics
{
namespace ConstitutiveStressSaturation_StrainPressureTemperature
{
template <int DisplacementDim>
static bool checkCorrectModelEvalOrder()
{
INFO(
"Checking correct model evaluation order in the constitutive setting.");
using namespace boost::mp11;
constexpr auto D = DisplacementDim;
using Inputs =
mp_list<SpaceTimeData, MediaData, TemperatureData<D>,
CapillaryPressureData<D>, StrainData<D>
//, MaterialStateData<D> /*TODO material state data is a special
// case: it's both input and output data.*/
>;
using InputsAndPrevState = mp_append<Inputs, StatefulDataPrev<D>>;
bool const is_correct = ProcessLib::Graph::isEvalOrderCorrectRT<
ConstitutiveModels<DisplacementDim>, InputsAndPrevState>();
if (!is_correct)
{
OGS_FATAL("The constitutive setting has a wrong evaluation order.");
}
INFO("Model evaluation order is correct.");
return is_correct;
}
template <int DisplacementDim>
void ConstitutiveSetting<DisplacementDim>::init(
ConstitutiveModels<DisplacementDim>&, double const /*t*/,
double const /*dt*/, ParameterLib::SpatialPosition const&, MediaData const&,
TemperatureData<DisplacementDim> const&, StatefulData<DisplacementDim>&,
StatefulDataPrev<DisplacementDim>&) const
{
[[maybe_unused]] static const bool model_order_correct =
checkCorrectModelEvalOrder<DisplacementDim>();
}
template <int DisplacementDim>
void ConstitutiveSetting<DisplacementDim>::eval(
ConstitutiveModels<DisplacementDim>& models, double const t,
......
......@@ -24,9 +24,7 @@ struct ConstitutiveSetting
double const /*dt*/, ParameterLib::SpatialPosition const&,
MediaData const&, TemperatureData<DisplacementDim> const&,
StatefulData<DisplacementDim>&,
StatefulDataPrev<DisplacementDim>&) const
{
}
StatefulDataPrev<DisplacementDim>&) const;
/// Evaluate the constitutive setting.
void eval(ConstitutiveModels<DisplacementDim>& models, double const t,
......
......@@ -14,11 +14,41 @@
#include "MaterialLib/MPL/PropertyType.h"
#include "ProcessLib/Graph/Apply.h"
#include "ProcessLib/Graph/CheckEvalOrderRT.h"
namespace ProcessLib::ThermoRichardsMechanics
{
namespace ConstitutiveStress_StrainTemperature
{
template <int DisplacementDim>
static bool checkCorrectModelEvalOrder()
{
INFO(
"Checking correct model evaluation order in the constitutive setting.");
using namespace boost::mp11;
constexpr auto D = DisplacementDim;
using Inputs = mp_list<SpaceTimeData, MediaData, TemperatureData<D>,
CapillaryPressureData<D>, StrainData<D>>;
using InputsAndPrevState = mp_append<Inputs, StatefulDataPrev<D>>;
bool const is_correct = ProcessLib::Graph::isEvalOrderCorrectRT<
ConstitutiveModels<DisplacementDim>, InputsAndPrevState>();
if (!is_correct)
{
OGS_FATAL("The constitutive setting has a wrong evaluation order.");
}
INFO("Model evaluation order is correct.");
return is_correct;
}
template <int DisplacementDim>
void ConstitutiveSetting<DisplacementDim>::init(
ConstitutiveModels<DisplacementDim>& models, double const t,
......@@ -27,6 +57,9 @@ void ConstitutiveSetting<DisplacementDim>::init(
StatefulData<DisplacementDim>& state,
StatefulDataPrev<DisplacementDim>& prev_state) const
{
[[maybe_unused]] static const bool model_order_correct =
checkCorrectModelEvalOrder<DisplacementDim>();
// Set eps_m_prev from potentially non-zero eps and sigma_sw from
// restart.
SpaceTimeData const x_t{x_position, t, dt};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment