27 namespace TwoPhaseFlowWithPP
29 template <
typename NodalRowVectorType,
typename GlobalDimNodalMatrixType,
30 typename NodalMatrixType>
34 GlobalDimNodalMatrixType dNdx_,
35 double const& integration_weight_,
36 NodalMatrixType
const massOperator_)
38 dNdx(std::move(dNdx_)),
44 NodalRowVectorType
const N;
45 GlobalDimNodalMatrixType
const dNdx;
60 std::vector<GlobalVector*>
const& x,
61 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
62 std::vector<double>& cache)
const = 0;
66 std::vector<GlobalVector*>
const& x,
67 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
68 std::vector<double>& cache)
const = 0;
71 template <
typename ShapeFunction,
typename IntegrationMethod,
int GlobalDim>
95 bool const is_axially_symmetric,
96 unsigned const integration_order,
106 unsigned const n_integration_points =
108 _ip_data.reserve(n_integration_points);
109 auto const shape_matrices =
111 GlobalDim>(element, is_axially_symmetric,
113 for (
unsigned ip = 0; ip < n_integration_points; ip++)
115 auto const& sm = shape_matrices[ip];
118 sm.integralMeasure * sm.detJ *
120 sm.N.transpose() * sm.N * sm.integralMeasure * sm.detJ *
125 void assemble(
double const t,
double const dt,
126 std::vector<double>
const& local_x,
127 std::vector<double>
const& local_xdot,
128 std::vector<double>& local_M_data,
129 std::vector<double>& local_K_data,
130 std::vector<double>& local_b_data)
override;
133 const unsigned integration_point)
const override
135 auto const& N =
_ip_data[integration_point].N;
138 return Eigen::Map<const Eigen::RowVectorXd>(N.data(), N.size());
143 std::vector<GlobalVector*>
const& ,
144 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
145 std::vector<double>& )
const override
153 std::vector<GlobalVector*>
const& ,
154 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& ,
155 std::vector<double>& )
const override
virtual std::vector< double > const & getIntPtSaturation(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const =0
virtual std::vector< double > const & getIntPtWetPressure(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const =0
std::vector< double > _pressure_wet
std::vector< double > _saturation
static const int cap_pressure_matrix_index
MeshLib::Element const & _element
static const int nonwet_pressure_size
ShapeMatrixPolicyType< ShapeFunction, GlobalDim > ShapeMatricesType
static const int nonwet_pressure_matrix_index
std::vector< double > const & getIntPtSaturation(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &) const override
IntegrationMethod const _integration_method
static const int cap_pressure_coeff_index
TwoPhaseFlowWithPPLocalAssembler(MeshLib::Element const &element, std::size_t const, bool const is_axially_symmetric, unsigned const integration_order, TwoPhaseFlowWithPPProcessData const &process_data)
std::vector< IntegrationPointData< NodalRowVectorType, GlobalDimNodalMatrixType, NodalMatrixType >, Eigen::aligned_allocator< IntegrationPointData< NodalRowVectorType, GlobalDimNodalMatrixType, NodalMatrixType > > > _ip_data
typename ShapeMatricesType::NodalMatrixType NodalMatrixType
std::vector< double > const & getIntPtWetPressure(const double, std::vector< GlobalVector * > const &, std::vector< NumLib::LocalToGlobalIndexMap const * > const &, std::vector< double > &) const override
void assemble(double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_xdot, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data) override
typename ShapeMatricesType::GlobalDimVectorType GlobalDimVectorType
typename ShapeMatricesType::NodalRowVectorType NodalRowVectorType
typename ShapeMatricesType::GlobalDimMatrixType GlobalDimMatrixType
typename ShapeMatricesType::ShapeMatrices ShapeMatrices
typename LocalAssemblerTraits::LocalVector LocalVectorType
typename ShapeMatricesType::GlobalDimNodalMatrixType GlobalDimNodalMatrixType
typename ShapeMatricesType::NodalVectorType NodalVectorType
typename LocalAssemblerTraits::LocalMatrix LocalMatrixType
TwoPhaseFlowWithPPProcessData const & _process_data
static const int cap_pressure_size
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
static const int nonwet_pressure_coeff_index
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > initShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, IntegrationMethod const &integration_method)
const unsigned NUM_NODAL_DOF
MatrixType< ShapeFunction::NPOINTS, ShapeFunction::NPOINTS > NodalMatrixType
NumLib::ShapeMatrices< NodalRowVectorType, DimNodalMatrixType, DimMatrixType, GlobalDimNodalMatrixType > ShapeMatrices
MatrixType< GlobalDim, ShapeFunction::NPOINTS > GlobalDimNodalMatrixType
MatrixType< GlobalDim, GlobalDim > GlobalDimMatrixType
VectorType< GlobalDim > GlobalDimVectorType
VectorType< ShapeFunction::NPOINTS > NodalVectorType
RowVectorType< ShapeFunction::NPOINTS > NodalRowVectorType
GlobalDimNodalMatrixType const dNdx
IntegrationPointData(NodalRowVectorType N_, GlobalDimNodalMatrixType dNdx_, double const &integration_weight_, NodalMatrixType const massOperator_)
NodalRowVectorType const N
const double integration_weight
NodalMatrixType const massOperator
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Vector< NNodes *NodalDOF > LocalVector
Matrix< NNodes *NodalDOF, NNodes *NodalDOF > LocalMatrix