30namespace MPL = MaterialPropertyLib;
32template <
typename BMatricesType,
typename ShapeMatricesTypeDisplacement,
33 typename ShapeMatricesTypePressure,
int DisplacementDim,
int NPoints>
48 typename ShapeMatricesTypeDisplacement::NodalRowVectorType
N_u;
49 typename ShapeMatricesTypeDisplacement::GlobalDimNodalMatrixType
dNdx_u;
51 typename ShapeMatricesTypePressure::NodalRowVectorType
N_p;
52 typename ShapeMatricesTypePressure::GlobalDimNodalMatrixType
dNdx_p;
56 DisplacementDim>::MaterialStateVariables>
77 double const temperature)
84 auto const null_state =
solid_material.createMaterialStateVariables();
90 variable_array.
stress.emplace<KV>(KV::Zero());
94 variable_array_prev.
stress.emplace<KV>(KV::Zero());
99 solid_material.integrateStress(variable_array_prev, variable_array,
100 t, x_position, dt, *null_state);
104 OGS_FATAL(
"Computation of elastic tangent stiffness failed.");
108 std::move(std::get<2>(*solution));
113 template <
typename DisplacementVectorType>
119 DisplacementVectorType
const& ,
123 variable_array_prev.
stress
132 variable_array_prev, variable_array, t, x_position, dt,
137 OGS_FATAL(
"Computation of local constitutive relation failed.");
151template <
typename ShapeMatrixType>
154 std::vector<ShapeMatrixType, Eigen::aligned_allocator<ShapeMatrixType>>
N_u;
157template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
187 bool const is_axially_symmetric,
192 std::string_view
const name,
193 double const* values,
194 int const integration_order)
override;
197 std::vector<double>
const& ,
198 std::vector<double>
const& ,
199 std::vector<double>& ,
200 std::vector<double>& ,
201 std::vector<double>& )
override
204 "HydroMechanicsLocalAssembler: assembly without jacobian is not "
209 std::vector<double>
const& local_x,
210 std::vector<double>
const& local_x_prev,
211 std::vector<double>& local_rhs_data,
212 std::vector<double>& local_Jac_data)
override;
215 const double t,
double const dt, Eigen::VectorXd
const& local_x,
216 Eigen::VectorXd
const& local_x_prev,
int const process_id,
217 std::vector<double>& local_b_data,
218 std::vector<double>& local_Jac_data)
override;
222 unsigned const n_integration_points =
225 for (
unsigned ip = 0; ip < n_integration_points; ip++)
243 double>::quiet_NaN() ,
248 ip_data.solid_material.initializeInternalStateVariables(
249 t, x_position, *ip_data.material_state_variables);
251 ip_data.pushBackState();
256 Eigen::VectorXd
const& local_x_prev,
257 double const t,
double const dt,
258 int const process_id)
override;
261 double const t,
double const dt, Eigen::VectorXd
const& local_xs,
262 Eigen::VectorXd
const& local_x_prev)
override;
265 Eigen::VectorXd
const& local_x_prev,
266 double const t,
double const dt,
267 int const process_id)
override;
271 int const process_id)
override;
274 const unsigned integration_point)
const override
279 return Eigen::Map<const Eigen::RowVectorXd>(N_u.data(), N_u.size());
285 std::vector<double>
getSigma()
const override;
287 std::vector<double>
getEpsilon()
const override;
293 std::vector<GlobalVector*>
const& x,
294 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
295 std::vector<double>& cache)
const override;
299 std::vector<GlobalVector*>
const& ,
300 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
301 std::vector<double>& cache)
const override
309 std::vector<GlobalVector*>
const& ,
310 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
311 std::vector<double>& cache)
const override
342 const double t,
double const dt, Eigen::VectorXd
const& local_x,
343 std::vector<double>& local_b_data, std::vector<double>& local_Jac_data);
369 const double t,
double const dt, Eigen::VectorXd
const& local_x,
370 Eigen::VectorXd
const& local_x_prev, std::vector<double>& local_b_data,
371 std::vector<double>& local_Jac_data);
378 DisplacementDim>::MaterialStateVariables
const&
389 ShapeFunctionDisplacement::NPOINTS>;
390 std::vector<IpData, Eigen::aligned_allocator<IpData>>
_ip_data;
396 typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType>
403 ShapeFunctionDisplacement::NPOINTS * DisplacementDim;
EigenFixedShapeMatrixPolicy< ShapeFunction, GlobalDim > ShapeMatrixPolicyType
KelvinVector mechanical_strain
void assembleWithJacobian(double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_rhs_data, std::vector< double > &local_Jac_data) override
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
static const int displacement_size
bool const _is_axially_symmetric
void initializeConcrete() override
unsigned getNumberOfIntegrationPoints() const override
NumLib::GenericIntegrationMethod const & _integration_method
void assemble(double const, double const, std::vector< double > const &, std::vector< double > const &, std::vector< double > &, std::vector< double > &, std::vector< double > &) override
HydroMechanicsLocalAssembler(HydroMechanicsLocalAssembler &&)=delete
Eigen::Matrix< double, KelvinVectorSize, 1 > SymmetricTensor
void postNonLinearSolverConcrete(Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, double const t, double const dt, int const process_id) override
void postTimestepConcrete(Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, double const t, double const dt, int const process_id) override
void assembleWithJacobianForPressureEquations(const double t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
std::size_t setIPDataInitialConditions(std::string_view const name, double const *values, int const integration_order) override
Returns number of read integration points.
IntegrationPointData< BMatricesType, ShapeMatricesTypeDisplacement, ShapeMatricesTypePressure, DisplacementDim, ShapeFunctionDisplacement::NPOINTS > IpData
ShapeMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > ShapeMatricesTypeDisplacement
void computeSecondaryVariableConcrete(double const t, double const dt, Eigen::VectorXd const &local_xs, Eigen::VectorXd const &local_x_prev) override
ShapeMatrixPolicyType< ShapeFunctionPressure, DisplacementDim > ShapeMatricesTypePressure
void assembleWithJacobianForStaggeredScheme(const double t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, int const process_id, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables const & getMaterialStateVariablesAt(unsigned integration_point) const override
std::vector< double > getSigma() const override
void assembleWithJacobianForDeformationEquations(const double t, double const dt, Eigen::VectorXd const &local_x, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
static const int displacement_index
std::vector< double > const & getIntPtDarcyVelocity(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
void setInitialConditionsConcrete(Eigen::VectorXd const local_x, double const t, int const process_id) override
HydroMechanicsLocalAssembler(HydroMechanicsLocalAssembler const &)=delete
std::vector< double > const & getIntPtEpsilon(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
int getNumberOfVectorElementsForDeformation() const override
static const int pressure_index
MeshLib::Element const & _element
HydroMechanicsProcessData< DisplacementDim > & _process_data
SecondaryData< typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType > _secondary_data
BMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > BMatricesType
int getMaterialID() const override
static constexpr auto & N_u_op
std::vector< double > getEpsilon() const override
static int const KelvinVectorSize
std::vector< IpData, Eigen::aligned_allocator< IpData > > _ip_data
static const int pressure_size
std::vector< double > getStrainRateVariable() const override
std::vector< double > const & getIntPtSigma(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
MathLib::KelvinVector::Invariants< KelvinVectorSize > Invariants
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector(Eigen::MatrixBase< Derived > const &v)
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
constexpr Eigen::CwiseNullaryOp< EigenBlockMatrixViewFunctor< D, M >, typename EigenBlockMatrixViewFunctor< D, M >::Matrix > eigenBlockMatrixView(const Eigen::MatrixBase< M > &matrix)
std::array< double, 3 > interpolateCoordinates(MeshLib::Element const &e, typename ShapeMatricesType::ShapeMatrices::ShapeType const &N)
std::vector< double > const & getIntegrationPointKelvinVectorData(IntegrationPointDataVector const &ip_data_vector, MemberType IpData::*const member, std::vector< double > &cache)
RowVectorType< ShapeFunction::NPOINTS > NodalRowVectorType
double integration_weight
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
BMatricesType::KelvinMatrixType updateConstitutiveRelation(MPL::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x_position, double const dt, DisplacementVectorType const &, double const T)
ShapeMatricesTypeDisplacement::GlobalDimNodalMatrixType dNdx_u
std::unique_ptr< typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables > material_state_variables
ShapeMatricesTypeDisplacement::NodalRowVectorType N_u
double strain_rate_variable
BMatricesType::KelvinVectorType eps
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > computeElasticTangentStiffness(double const t, ParameterLib::SpatialPosition const &x_position, double const dt, double const temperature)
ShapeMatricesTypePressure::GlobalDimNodalMatrixType dNdx_p
ShapeMatricesTypePressure::NodalRowVectorType N_p
BMatricesType::KelvinVectorType sigma_eff_prev
BMatricesType::KelvinVectorType eps_prev
MaterialLib::Solids::MechanicsBase< DisplacementDim > const & solid_material
IntegrationPointData(MaterialLib::Solids::MechanicsBase< DisplacementDim > const &solid_material)
BMatricesType::KelvinVectorType sigma_eff
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u