OGS
IntegrationPointData.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <memory>
14 
16 #include "MathLib/KelvinVector.h"
18 #include "ParameterLib/Parameter.h"
19 
20 namespace ProcessLib
21 {
22 namespace ThermoHydroMechanics
23 {
24 template <typename BMatricesType, typename ShapeMatrixTypeDisplacement,
25  typename ShapeMatricesTypePressure, int DisplacementDim, int NPoints>
27 {
33  solid_material.createMaterialStateVariables())
34  {
35  // Initialize current time step values
36  static const int kelvin_vector_size =
38  sigma_eff.setZero(kelvin_vector_size);
39  eps.setZero(kelvin_vector_size);
40  eps_prev.setZero(kelvin_vector_size);
41  eps_m.setZero(kelvin_vector_size);
42  eps_m_prev.resize(kelvin_vector_size);
43 
44  // Previous time step values are not initialized and are set later.
45  sigma_eff_prev.resize(kelvin_vector_size);
46  }
47 
48  typename ShapeMatrixTypeDisplacement::template MatrixType<
49  DisplacementDim, NPoints * DisplacementDim>
54 
55  typename ShapeMatrixTypeDisplacement::NodalRowVectorType N_u;
56  typename ShapeMatrixTypeDisplacement::GlobalDimNodalMatrixType dNdx_u;
57 
58  typename ShapeMatricesTypePressure::NodalRowVectorType N_p;
59  typename ShapeMatricesTypePressure::GlobalDimNodalMatrixType dNdx_p;
60 
62  std::unique_ptr<typename MaterialLib::Solids::MechanicsBase<
63  DisplacementDim>::MaterialStateVariables>
66 
68  {
69  eps_prev = eps;
70  eps_m_prev = eps_m;
72  material_state_variables->pushBackState();
73  }
74 
76  MaterialPropertyLib::VariableArray const& variable_array,
77  double const t,
78  ParameterLib::SpatialPosition const& x_position,
79  double const dt,
80  double const temperature_prev)
81  {
82  MaterialPropertyLib::VariableArray variable_array_prev;
83  variable_array_prev[static_cast<int>(
87  variable_array_prev[static_cast<int>(MaterialPropertyLib::Variable::
90  eps_m_prev);
91  variable_array_prev[static_cast<int>(
93  .emplace<double>(temperature_prev);
94 
95  auto&& solution = solid_material.integrateStress(
96  variable_array_prev, variable_array, t, x_position, dt,
98 
99  if (!solution)
100  OGS_FATAL("Computation of local constitutive relation failed.");
101 
103  std::tie(sigma_eff, material_state_variables, C) = std::move(*solution);
104 
105  return C;
106  }
107 
109 };
110 
111 } // namespace ThermoHydroMechanics
112 } // namespace ProcessLib
#define OGS_FATAL(...)
Definition: Error.h:26
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Definition: KelvinVector.h:48
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Definition: KelvinVector.h:23
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
Definition: KelvinVector.h:56
ShapeMatrixTypeDisplacement::template MatrixType< DisplacementDim, NPoints *DisplacementDim > N_u_op
ShapeMatricesTypePressure::GlobalDimNodalMatrixType dNdx_p
BMatricesType::KelvinMatrixType updateConstitutiveRelation(MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x_position, double const dt, double const temperature_prev)
ShapeMatricesTypePressure::NodalRowVectorType N_p
std::unique_ptr< typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables > material_state_variables
MaterialLib::Solids::MechanicsBase< DisplacementDim > const & solid_material
ShapeMatrixTypeDisplacement::NodalRowVectorType N_u
ShapeMatrixTypeDisplacement::GlobalDimNodalMatrixType dNdx_u
IntegrationPointData(MaterialLib::Solids::MechanicsBase< DisplacementDim > const &solid_material)