40 template <
typename ShapeMatrixType>
43 std::vector<ShapeMatrixType, Eigen::aligned_allocator<ShapeMatrixType>>
N_u;
46 template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
47 typename IntegrationMethod,
int DisplacementDim>
61 template <
int M,
int N>
82 bool const is_axially_symmetric,
83 unsigned const integration_order,
89 std::string
const&
name,
91 int const integration_order)
override;
98 void assemble(
double const ,
double const ,
99 std::vector<double>
const& ,
100 std::vector<double>
const& ,
101 std::vector<double>& ,
102 std::vector<double>& ,
103 std::vector<double>& )
override;
106 std::vector<double>
const& local_x,
107 std::vector<double>
const& local_xdot,
108 const double ,
const double ,
109 std::vector<double>& ,
110 std::vector<double>& ,
111 std::vector<double>& local_rhs_data,
112 std::vector<double>& local_Jac_data)
override;
116 unsigned const n_integration_points =
119 for (
unsigned ip = 0; ip < n_integration_points; ip++)
129 ShapeFunctionDisplacement,
137 double>::quiet_NaN() ,
141 ip_data.pushBackState();
147 double const )
override
149 unsigned const n_integration_points =
152 for (
unsigned ip = 0; ip < n_integration_points; ip++)
159 double const t,
double const dt, Eigen::VectorXd
const& local_x,
160 Eigen::VectorXd
const& local_x_dot)
override;
163 const unsigned integration_point)
const override
168 return Eigen::Map<const Eigen::RowVectorXd>(N_u.data(), N_u.size());
173 std::vector<GlobalVector*>
const& x,
174 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
175 std::vector<double>& cache)
const override;
178 std::vector<GlobalVector*>
const& x,
179 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
180 std::vector<double>& cache)
const override;
182 std::vector<ConstitutiveVariables<DisplacementDim>>
184 Eigen::VectorXd
const& local_x_dot,
185 double const t,
double const dt);
189 return ProcessLib::setIntegrationPointKelvinVectorData<DisplacementDim>(
199 constexpr
int kelvin_vector_size =
203 return transposeInPlace<kelvin_vector_size>(
204 [
this](std::vector<double>& values)
211 std::vector<GlobalVector*>
const& ,
212 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
213 std::vector<double>& cache)
const override
215 return ProcessLib::getIntegrationPointKelvinVectorData<DisplacementDim>(
221 constexpr
int kelvin_vector_size =
224 return transposeInPlace<kelvin_vector_size>(
225 [
this](std::vector<double>& values)
231 std::vector<GlobalVector*>
const& ,
232 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
233 std::vector<double>& cache)
const override
235 return ProcessLib::getIntegrationPointKelvinVectorData<DisplacementDim>(
245 std::vector<GlobalVector*>
const& ,
246 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
247 std::vector<double>& cache)
const override
255 std::vector<GlobalVector*>
const& ,
256 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
257 std::vector<double>& cache)
const override
265 std::vector<GlobalVector*>
const& ,
266 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
267 std::vector<double>& cache)
const override
275 std::vector<GlobalVector*>
const& ,
276 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
277 std::vector<double>& cache)
const override
285 std::vector<GlobalVector*>
const& ,
286 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
287 std::vector<double>& cache)
const override
295 std::vector<double> result;
302 std::vector<GlobalVector*>
const& ,
303 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
304 std::vector<double>& cache)
const override
312 std::vector<GlobalVector*>
const& ,
313 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
314 std::vector<double>& cache)
const override
321 std::vector<GlobalVector*>
const& ,
322 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
323 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
349 std::vector<GlobalVector*>
const& ,
350 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
351 std::vector<double>& cache)
const override
359 std::vector<GlobalVector*>
const& ,
360 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
361 std::vector<double>& cache)
const override
368 std::vector<GlobalVector*>
const& ,
369 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
370 std::vector<double>& cache)
const override
377 std::vector<GlobalVector*>
const& ,
378 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
379 std::vector<double>& cache)
const override
393 ShapeFunctionDisplacement::NPOINTS>;
394 std::vector<IpData, Eigen::aligned_allocator<IpData>>
_ip_data;
413 ShapeFunctionDisplacement::NPOINTS * DisplacementDim;
416 static const int C_size = ShapeFunctionPressure::NPOINTS;
417 static const int W_index = ShapeFunctionPressure::NPOINTS;
418 static const int W_size = ShapeFunctionPressure::NPOINTS;
virtual std::size_t getID() const final
Returns the ID of the element.
static const int temperature_index
std::vector< double > const & getIntPtSigma(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
typename ShapeMatricesTypePressure::GlobalDimMatrixType GlobalDimMatrixType
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
SecondaryData< typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType > _secondary_data
ShapeMatrixPolicyType< ShapeFunctionPressure, DisplacementDim > ShapeMatricesTypePressure
std::size_t setSigma(double const *values)
std::vector< double > getSigma() const override
void computeSecondaryVariableConcrete(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_dot) override
std::vector< double > getSaturation() const override
typename ShapeMatricesTypePressure::template MatrixType< M, N > MatrixType
BMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > BMatricesType
MeshLib::Element const & _element
virtual std::vector< double > const & getIntPtMoleFractionGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtSaturation(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int gas_pressure_index
virtual std::vector< double > const & getIntPtRelativePermeabilityGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
TH2MLocalAssembler(TH2MLocalAssembler &&)=delete
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
ShapeMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > ShapeMatricesTypeDisplacement
typename ShapeMatricesTypePressure::template VectorType< N > VectorType
virtual std::vector< double > const & getIntPtRelativePermeabilityLiquid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int gas_pressure_size
void assemble(double const, double const, std::vector< double > const &, std::vector< double > const &, std::vector< double > &, std::vector< double > &, std::vector< double > &) override
bool const _is_axially_symmetric
void setInitialConditionsConcrete(std::vector< double > const &local_x, double const t, bool const, int const) override
std::vector< double > getEpsilon() const override
static const int displacement_size
virtual std::vector< double > const & getIntPtEnthalpySolid(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 & getIntPtPorosity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
TH2MProcessData< DisplacementDim > & _process_data
std::vector< IpData, Eigen::aligned_allocator< IpData > > _ip_data
std::vector< ConstitutiveVariables< DisplacementDim > > updateConstitutiveVariables(Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_dot, double const t, double const dt)
std::size_t setIPDataInitialConditions(std::string const &name, double const *values, int const integration_order) override
virtual std::vector< double > const & getIntPtSolidDensity(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
void assembleWithJacobian(double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_xdot, const double, const double, std::vector< double > &, std::vector< double > &, std::vector< double > &local_rhs_data, std::vector< double > &local_Jac_data) override
TH2MLocalAssembler(TH2MLocalAssembler const &)=delete
virtual std::vector< double > const & getIntPtVapourPressure(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
virtual std::vector< double > const & getIntPtMassFractionLiquid(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
void postTimestepConcrete(Eigen::VectorXd const &, double const, double const) override
static const int capillary_pressure_index
void initializeConcrete() 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
virtual std::vector< double > const & getIntPtEnthalpyGas(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
static const int temperature_size
static const int displacement_index
Eigen::Matrix< double, KelvinVectorSize, 1 > SymmetricTensor
virtual std::vector< double > const & getIntPtLiquidDensity(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &cache) const override
IntegrationMethod _integration_method
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
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
static int const KelvinVectorSize
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)
MathLib::TemplatePoint< double, 3 > Point3d
std::array< double, 3 > interpolateCoordinates(MeshLib::Element const &e, typename ShapeMatricesType::ShapeMatrices::ShapeType const &N)
std::vector< double > const & getIntegrationPointScalarData(std::vector< IntegrationPointData, Eigen::aligned_allocator< IntegrationPointData >> const &ip_data, MemberType member, std::vector< double > &cache)
MatrixType< GlobalDim, GlobalDim > GlobalDimMatrixType
VectorType< GlobalDim > GlobalDimVectorType
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u
BMatricesType::KelvinVectorType eps
BMatricesType::KelvinVectorType sigma_eff
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u