OGS
RichardsMechanics/IntegrationPointData.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <memory>
7
13
14namespace ProcessLib
15{
16namespace RichardsMechanics
17{
18template <typename BMatricesType, typename ShapeMatrixTypeDisplacement,
19 typename ShapeMatricesTypePressure, int DisplacementDim, int NPoints>
21{
22 typename ShapeMatrixTypeDisplacement::NodalRowVectorType N_u;
23 typename ShapeMatrixTypeDisplacement::GlobalDimNodalMatrixType dNdx_u;
24
25 typename ShapeMatricesTypePressure::NodalRowVectorType N_p;
26 typename ShapeMatricesTypePressure::GlobalDimNodalMatrixType dNdx_p;
27
28 double integration_weight = std::numeric_limits<double>::quiet_NaN();
29
30 MathLib::KelvinVector::
31 KelvinMatrixType<DisplacementDim> static computeElasticTangentStiffness(
32 MaterialPropertyLib::VariableArray const& variable_array,
33 double const t,
34 ParameterLib::SpatialPosition const& x_position,
35 double const dt,
37 solid_material,
39 MaterialStateVariables const& material_state_variables)
40 {
41 namespace MPL = MaterialPropertyLib;
42
43 MPL::VariableArray variable_array_prev = variable_array;
44
45 auto&& solution = solid_material.integrateStress(
46 variable_array_prev, variable_array, t, x_position, dt,
47 material_state_variables);
48
49 if (!solution)
50 {
51 OGS_FATAL("Computation of elastic tangent stiffness failed.");
52 }
53
55 std::move(std::get<2>(*solution));
56
57 return C;
58 }
59
60 static typename BMatricesType::KelvinMatrixType updateConstitutiveRelation(
61 MaterialPropertyLib::VariableArray const& variable_array,
62 double const t,
63 ParameterLib::SpatialPosition const& x_position,
64 double const dt,
65 double const temperature,
67 sigma_eff,
69 DisplacementDim>> const& sigma_eff_prev,
71 DisplacementDim> const&
72 /*eps_m*/,
74 DisplacementDim>> const& eps_m_prev,
76 solid_material,
77 std::unique_ptr<typename MaterialLib::Solids::MechanicsBase<
78 DisplacementDim>::MaterialStateVariables>& material_state_variables)
79 {
80 MaterialPropertyLib::VariableArray variable_array_prev;
81 variable_array_prev.stress = sigma_eff_prev->sigma_eff;
82 variable_array_prev.mechanical_strain
84 eps_m_prev->eps_m);
85 variable_array_prev.temperature = temperature;
86
87 auto&& solution = solid_material.integrateStress(
88 variable_array_prev, variable_array, t, x_position, dt,
89 *material_state_variables);
90
91 if (!solution)
92 {
93 OGS_FATAL("Computation of local constitutive relation failed.");
94 }
95
97 std::tie(sigma_eff.sigma_eff, material_state_variables, C) =
98 std::move(*solution);
99
100 return C;
101 }
102
104};
105
106} // namespace RichardsMechanics
107} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
virtual std::optional< std::tuple< KelvinVector, std::unique_ptr< MaterialStateVariables >, KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const dt, MaterialStateVariables const &material_state_variables) const =0
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > sigma_eff
static MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > computeElasticTangentStiffness(MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x_position, double const dt, MaterialLib::Solids::MechanicsBase< DisplacementDim > const &solid_material, typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables)
static BMatricesType::KelvinMatrixType updateConstitutiveRelation(MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x_position, double const dt, double const temperature, ProcessLib::ConstitutiveRelations::EffectiveStressData< DisplacementDim > &sigma_eff, PrevState< ProcessLib::ConstitutiveRelations::EffectiveStressData< DisplacementDim > > const &sigma_eff_prev, ProcessLib::ConstitutiveRelations::MechanicalStrainData< DisplacementDim > const &, PrevState< ProcessLib::ConstitutiveRelations::MechanicalStrainData< DisplacementDim > > const &eps_m_prev, MaterialLib::Solids::MechanicsBase< DisplacementDim > const &solid_material, std::unique_ptr< typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables > &material_state_variables)