40template <
typename ShapeMatrixType>
43 std::vector<ShapeMatrixType, Eigen::aligned_allocator<ShapeMatrixType>>
N_u;
46template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
61 template <
int M,
int N>
88 bool const is_axially_symmetric,
94 std::string_view
const name,
96 int const integration_order)
override;
100 int const process_id)
override;
102 void assemble(
double const ,
double const ,
103 std::vector<double>
const& ,
104 std::vector<double>
const& ,
105 std::vector<double>& ,
106 std::vector<double>& ,
107 std::vector<double>& )
override;
110 std::vector<double>
const& local_x,
111 std::vector<double>
const& local_x_prev,
112 std::vector<double>& ,
113 std::vector<double>& ,
114 std::vector<double>& local_rhs_data,
115 std::vector<double>& local_Jac_data)
override;
119 unsigned const n_integration_points =
122 for (
unsigned ip = 0; ip < n_integration_points; ip++)
129 ShapeFunctionDisplacement,
141 double>::quiet_NaN() ,
148 t, x_position, *material_state.material_state_variables);
150 ip_data.pushBackState();
151 material_state.pushBackState();
154 for (
unsigned ip = 0; ip < n_integration_points; ip++)
161 Eigen::VectorXd
const& ,
162 double const ,
double const ,
165 unsigned const n_integration_points =
168 for (
unsigned ip = 0; ip < n_integration_points; ip++)
174 for (
unsigned ip = 0; ip < n_integration_points; ip++)
181 double const t,
double const dt, Eigen::VectorXd
const& local_x,
182 Eigen::VectorXd
const& local_x_prev)
override;
185 const unsigned integration_point)
const override
190 return Eigen::Map<const Eigen::RowVectorXd>(N_u.data(), N_u.size());
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;
215 std::vector<GlobalVector*>
const& x,
216 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
217 std::vector<double>& cache)
const override;
220 std::vector<GlobalVector*>
const& x,
221 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
222 std::vector<double>& cache)
const override;
225 std::vector<ConstitutiveRelations::ConstitutiveData<DisplacementDim>>,
229 Eigen::VectorXd
const& local_x, Eigen::VectorXd
const& local_x_prev,
230 double const t,
double const dt,
240 std::vector<GlobalVector*>
const& ,
241 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
242 std::vector<double>& cache)
const override
254 ShapeFunctionDisplacement::NPOINTS>;
255 std::vector<IpData, Eigen::aligned_allocator<IpData>>
_ip_data;
258 typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType>
271 ShapeFunctionDisplacement::NPOINTS * DisplacementDim;
274 static const int C_size = ShapeFunctionPressure::NPOINTS;
275 static const int W_index = ShapeFunctionPressure::NPOINTS;
276 static const int W_size = ShapeFunctionPressure::NPOINTS;
std::size_t getID() const
Returns the ID of the element.
unsigned getNumberOfPoints() const
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
std::size_t setIPDataInitialConditions(std::string_view const name, double const *values, int const integration_order) override
static const int gas_pressure_size
static constexpr auto & N_u_op
static const int capillary_pressure_index
ShapeMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > ShapeMatricesTypeDisplacement
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
typename ShapeMatricesTypePressure::template VectorType< N > VectorType
SecondaryData< typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType > _secondary_data
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
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
void postTimestepConcrete(Eigen::VectorXd const &, Eigen::VectorXd const &, double const, double const, int 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
typename ShapeMatricesTypePressure::template MatrixType< M, N > MatrixType
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
static const int gas_pressure_index
static const int displacement_size
std::vector< IpData, Eigen::aligned_allocator< IpData > > _ip_data
static int const KelvinVectorSize
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
ShapeMatrixPolicyType< ShapeFunctionPressure, DisplacementDim > ShapeMatricesTypePressure
virtual std::vector< double > const & getIntPtEnthalpySolid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
TH2MLocalAssembler(TH2MLocalAssembler const &)=delete
std::tuple< std::vector< ConstitutiveRelations::ConstitutiveData< DisplacementDim > >, std::vector< ConstitutiveRelations::ConstitutiveTempData< DisplacementDim > > > updateConstitutiveVariables(Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, double const t, double const dt, ConstitutiveRelations::ConstitutiveModels< DisplacementDim > const &models)
void computeSecondaryVariableConcrete(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev) override
typename ShapeMatricesTypePressure::GlobalDimVectorType GlobalDimVectorType
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
typename ShapeMatricesTypePressure::GlobalDimMatrixType GlobalDimMatrixType
static const int temperature_index
void setInitialConditionsConcrete(Eigen::VectorXd const local_x, double const t, int const process_id) 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)
MatrixType< GlobalDim, GlobalDim > GlobalDimMatrixType
VectorType< GlobalDim > GlobalDimVectorType
RowVectorType< ShapeFunction::NPOINTS > NodalRowVectorType
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u
Constitutive models used for assembly.
NumLib::GenericIntegrationMethod const & integration_method_
TH2MProcessData< DisplacementDim > & process_data_
ConstitutiveRelations::SolidConstitutiveRelation< DisplacementDim > const & solid_material_
std::vector< typename ConstitutiveRelations::StatefulData< DisplacementDim > > current_states_
std::vector< typename ConstitutiveRelations::StatefulDataPrev< DisplacementDim > > prev_states_
MeshLib::Element const & element_
std::vector< ConstitutiveRelations::MaterialStateData< DisplacementDim > > material_states_
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u