42template <
typename ShapeMatrixType>
45 std::vector<ShapeMatrixType, Eigen::aligned_allocator<ShapeMatrixType>>
N_u;
48template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
63 template <
int M,
int N>
90 bool const is_axially_symmetric,
96 std::string
const& name,
98 int const integration_order)
override;
103 int const )
override;
105 void assemble(
double const ,
double const ,
106 std::vector<double>
const& ,
107 std::vector<double>
const& ,
108 std::vector<double>& ,
109 std::vector<double>& ,
110 std::vector<double>& )
override;
113 std::vector<double>
const& local_x,
114 std::vector<double>
const& local_x_prev,
115 std::vector<double>& ,
116 std::vector<double>& ,
117 std::vector<double>& local_rhs_data,
118 std::vector<double>& local_Jac_data)
override;
122 unsigned const n_integration_points =
125 for (
unsigned ip = 0; ip < n_integration_points; ip++)
133 ShapeFunctionDisplacement,
143 double>::quiet_NaN() ,
148 ip_data.solid_material.initializeInternalStateVariables(
149 t, x_position, *ip_data.material_state_variables);
151 ip_data.pushBackState();
156 Eigen::VectorXd
const& ,
157 double const ,
double const ,
161 unsigned const n_integration_points =
164 for (
unsigned ip = 0; ip < n_integration_points; ip++)
171 double const t,
double const dt, Eigen::VectorXd
const& local_x,
172 Eigen::VectorXd
const& local_x_prev)
override;
175 const unsigned integration_point)
const override
180 return Eigen::Map<const Eigen::RowVectorXd>(N_u.data(), N_u.size());
185 std::vector<GlobalVector*>
const& x,
186 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
187 std::vector<double>& cache)
const override;
190 std::vector<GlobalVector*>
const& x,
191 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
192 std::vector<double>& cache)
const override;
195 std::vector<GlobalVector*>
const& x,
196 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
197 std::vector<double>& cache)
const override;
200 std::vector<GlobalVector*>
const& x,
201 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
202 std::vector<double>& cache)
const override;
205 std::vector<GlobalVector*>
const& x,
206 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
207 std::vector<double>& cache)
const override;
210 std::vector<GlobalVector*>
const& x,
211 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
212 std::vector<double>& cache)
const override;
214 std::vector<ConstitutiveVariables<DisplacementDim>>
216 Eigen::VectorXd
const& local_x_prev,
217 double const t,
double const dt);
221 return ProcessLib::setIntegrationPointKelvinVectorData<DisplacementDim>(
231 constexpr int kelvin_vector_size =
235 return transposeInPlace<kelvin_vector_size>(
236 [
this](std::vector<double>& values)
243 std::vector<GlobalVector*>
const& ,
244 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
245 std::vector<double>& cache)
const override
247 return ProcessLib::getIntegrationPointKelvinVectorData<DisplacementDim>(
254 constexpr int kelvin_vector_size =
258 return transposeInPlace<kelvin_vector_size>(
259 [
this](std::vector<double>& values)
266 std::vector<GlobalVector*>
const& ,
267 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
268 std::vector<double>& cache)
const override
270 return ProcessLib::getIntegrationPointKelvinVectorData<DisplacementDim>(
276 constexpr int kelvin_vector_size =
279 return transposeInPlace<kelvin_vector_size>(
280 [
this](std::vector<double>& values)
286 std::vector<GlobalVector*>
const& ,
287 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
288 std::vector<double>& cache)
const override
290 return ProcessLib::getIntegrationPointKelvinVectorData<DisplacementDim>(
300 std::vector<GlobalVector*>
const& ,
301 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
302 std::vector<double>& cache)
const override
310 std::vector<GlobalVector*>
const& ,
311 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
312 std::vector<double>& cache)
const override
320 std::vector<GlobalVector*>
const& ,
321 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
322 std::vector<double>& cache)
const override
330 std::vector<GlobalVector*>
const& ,
331 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
332 std::vector<double>& cache)
const override
340 std::vector<GlobalVector*>
const& ,
341 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
342 std::vector<double>& cache)
const override
350 std::vector<double> result;
357 std::vector<GlobalVector*>
const& ,
358 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
359 std::vector<double>& cache)
const override
367 std::vector<GlobalVector*>
const& ,
368 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
369 std::vector<double>& cache)
const override
376 std::vector<GlobalVector*>
const& ,
377 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
378 std::vector<double>& cache)
const override
385 std::vector<GlobalVector*>
const& ,
386 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
387 std::vector<double>& cache)
const override
395 std::vector<GlobalVector*>
const& ,
396 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
397 std::vector<double>& cache)
const override
404 std::vector<GlobalVector*>
const& ,
405 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
406 std::vector<double>& cache)
const override
414 std::vector<GlobalVector*>
const& ,
415 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
416 std::vector<double>& cache)
const override
418 return ProcessLib::getIntegrationPointDimMatrixData<DisplacementDim>(
424 std::vector<GlobalVector*>
const& ,
425 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
426 std::vector<double>& cache)
const override
433 std::vector<GlobalVector*>
const& ,
434 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
435 std::vector<double>& cache)
const override
442 std::vector<GlobalVector*>
const& ,
443 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
444 std::vector<double>& cache)
const override
463 std::function<std::span<double>(
465 MaterialStateVariables&)>
const& get_values_span,
466 int const& n_components)
const override
474 DisplacementDim>::MaterialStateVariables
const&
477 return *
_ip_data[integration_point].material_state_variables;
488 ShapeFunctionDisplacement::NPOINTS>;
489 std::vector<IpData, Eigen::aligned_allocator<IpData>>
_ip_data;
495 typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType>
508 ShapeFunctionDisplacement::NPOINTS * DisplacementDim;
511 static const int C_size = ShapeFunctionPressure::NPOINTS;
512 static const int W_index = ShapeFunctionPressure::NPOINTS;
513 static const int W_size = ShapeFunctionPressure::NPOINTS;
virtual std::size_t getID() const final
Returns the ID of the element.
unsigned getNumberOfPoints() const
virtual std::vector< double > const & getIntPtEnthalpyGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
void assemble(double const, double const, std::vector< double > const &, std::vector< double > const &, std::vector< double > &, std::vector< double > &, std::vector< double > &) override
void initializeConcrete() override
void postTimestepConcrete(Eigen::VectorXd const &, Eigen::VectorXd const &, double const, double const, bool const, int const) override
static const int gas_pressure_size
static constexpr auto & N_u_op
std::vector< double > getMaterialStateVariableInternalState(std::function< std::span< double >(typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables &)> const &get_values_span, int const &n_components) const override
virtual std::vector< double > const & getIntPtMoleFractionGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int capillary_pressure_index
std::vector< ConstitutiveVariables< DisplacementDim > > updateConstitutiveVariables(Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, double const t, double const dt)
std::vector< double > const & getIntPtSigma(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
typename ShapeMatricesTypePressure::template MatrixType< M, N > MatrixType
Eigen::Matrix< double, KelvinVectorSize, 1 > SymmetricTensor
std::vector< double > const & getIntPtDiffusionVelocitySoluteLiquid(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
std::size_t setSigma(double const *values)
virtual std::vector< double > const & getIntPtSaturation(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtRelativePermeabilityLiquid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtMassFractionGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtEpsilon(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtEnthalpyLiquid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
ShapeMatrixPolicyType< ShapeFunctionPressure, DisplacementDim > ShapeMatricesTypePressure
virtual std::vector< double > const & getIntPtRelativePermeabilityGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
typename ShapeMatricesTypePressure::template VectorType< N > VectorType
virtual std::vector< double > const & getIntPtSolidDensity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
SecondaryData< typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType > _secondary_data
virtual std::vector< double > const & getIntPtVapourPressure(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
void assembleWithJacobian(double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &, std::vector< double > &, std::vector< double > &local_rhs_data, std::vector< double > &local_Jac_data) override
TH2MProcessData< DisplacementDim > & _process_data
MeshLib::Element const & _element
std::vector< double > const & getIntPtDiffusionVelocityGasGas(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
ShapeMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > ShapeMatricesTypeDisplacement
typename ShapeMatricesTypePressure::GlobalDimMatrixType GlobalDimMatrixType
virtual std::vector< double > const & getIntPtGasDensity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int capillary_pressure_size
TH2MLocalAssembler(TH2MLocalAssembler &&)=delete
std::vector< double > const & getIntPtDarcyVelocityLiquid(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
std::vector< double > const & getIntPtDiffusionVelocityLiquidLiquid(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
static const int temperature_size
bool const _is_axially_symmetric
std::vector< double > getSaturation() const override
unsigned getNumberOfIntegrationPoints() const override
std::vector< double > getSwellingStress() const override
virtual std::vector< double > const & getIntPtLiquidDensity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
virtual std::vector< double > const & getIntPtMassFractionLiquid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtIntrinsicPermeability(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int gas_pressure_index
std::vector< double > getSigma() const override
int getMaterialID() const override
static const int displacement_size
std::vector< IpData, Eigen::aligned_allocator< IpData > > _ip_data
static int const KelvinVectorSize
MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables const & getMaterialStateVariablesAt(unsigned integration_point) const override
std::vector< double > const & getIntPtDiffusionVelocityVapourGas(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
BMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > BMatricesType
virtual std::vector< double > const & getIntPtPorosity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
typename ShapeMatricesTypePressure::GlobalDimVectorType GlobalDimVectorType
virtual std::vector< double > const & getIntPtEnthalpySolid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
std::size_t setIPDataInitialConditions(std::string const &name, double const *values, int const integration_order) override
NumLib::GenericIntegrationMethod const & _integration_method
TH2MLocalAssembler(TH2MLocalAssembler const &)=delete
std::vector< double > getEpsilon() const override
void setInitialConditionsConcrete(std::vector< double > const &local_x_data, double const t, bool const, int const) override
void computeSecondaryVariableConcrete(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev) override
std::vector< double > const & getIntPtDarcyVelocityGas(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
static const int temperature_index
std::vector< double > const & getIntPtSwellingStress(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int displacement_index
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector(Eigen::MatrixBase< Derived > const &v)
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 & getIntegrationPointScalarData(IntegrationPointDataVector const &ip_data_vector, MemberType IpData::*const member, std::vector< double > &cache)
std::vector< double > getIntegrationPointDataMaterialStateVariables(IntegrationPointDataVector const &ip_data_vector, MemberType member, std::function< std::span< double >(MaterialStateVariables &)> get_values_span, int const n_components)
MatrixType< GlobalDim, GlobalDim > GlobalDimMatrixType
VectorType< GlobalDim > GlobalDimVectorType
RowVectorType< ShapeFunction::NPOINTS > NodalRowVectorType
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u
BMatricesType::KelvinVectorType eps
std::unique_ptr< typename MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables > material_state_variables
BMatricesType::KelvinVectorType sigma_eff
BMatricesType::KelvinVectorType sigma_sw
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u