35namespace RichardsMechanics
41template <
typename ShapeMatrixType>
44 std::vector<ShapeMatrixType, Eigen::aligned_allocator<ShapeMatrixType>>
N_u;
47template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
68 ShapeFunctionDisplacement::NPOINTS>;
88 bool const is_axially_symmetric,
93 std::string_view
const name,
95 int const integration_order)
override;
99 int const process_id)
override;
101 void assemble(
double const t,
double const dt,
102 std::vector<double>
const& local_x,
103 std::vector<double>
const& local_x_prev,
104 std::vector<double>& local_M_data,
105 std::vector<double>& local_K_data,
106 std::vector<double>& local_rhs_data)
override;
109 std::vector<double>
const& local_x,
110 std::vector<double>
const& local_x_prev,
111 std::vector<double>& ,
112 std::vector<double>& ,
113 std::vector<double>& local_rhs_data,
114 std::vector<double>& local_Jac_data)
override;
117 double const t,
double const dt, Eigen::VectorXd
const& local_x,
118 Eigen::VectorXd
const& local_x_prev,
int const process_id,
119 std::vector<double>& local_M_data, std::vector<double>& local_K_data,
120 std::vector<double>& local_b_data,
121 std::vector<double>& local_Jac_data)
override;
125 unsigned const n_integration_points =
128 for (
unsigned ip = 0; ip < n_integration_points; ip++)
136 ShapeFunctionDisplacement,
146 double>::quiet_NaN() ,
151 ip_data.solid_material.initializeInternalStateVariables(
152 t, x_position, *ip_data.material_state_variables);
154 ip_data.pushBackState();
159 Eigen::VectorXd
const& ,
160 double const ,
double const ,
163 unsigned const n_integration_points =
166 for (
unsigned ip = 0; ip < n_integration_points; ip++)
173 double const t,
double const dt, Eigen::VectorXd
const& local_x,
174 Eigen::VectorXd
const& local_x_prev)
override;
177 const unsigned integration_point)
const override
182 return Eigen::Map<const Eigen::RowVectorXd>(N_u.data(), N_u.size());
185 std::vector<double>
getSigma()
const override;
189 std::vector<GlobalVector*>
const& x,
190 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
191 std::vector<double>& cache)
const override;
196 std::vector<GlobalVector*>
const& x,
197 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
198 std::vector<double>& cache)
const override;
203 std::vector<GlobalVector*>
const& x,
204 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
205 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;
217 std::vector<GlobalVector*>
const& x,
218 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
219 std::vector<double>& cache)
const override;
224 std::vector<GlobalVector*>
const& x,
225 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
226 std::vector<double>& cache)
const override;
230 std::vector<GlobalVector*>
const& x,
231 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
232 std::vector<double>& cache)
const override;
237 std::vector<GlobalVector*>
const& x,
238 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
239 std::vector<double>& cache)
const override;
241 std::vector<double>
getEpsilon()
const override;
244 std::vector<GlobalVector*>
const& x,
245 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
246 std::vector<double>& cache)
const override;
251 std::function<std::span<double>(
253 MaterialStateVariables&)> const& get_values_span,
254 int const& n_components) const override;
258 std::vector<GlobalVector*>
const& x,
259 std::vector<NumLib::LocalToGlobalIndexMap const*>
const& dof_table,
260 std::vector<double>& cache)
const override;
287 double const t,
double const dt, Eigen::VectorXd
const& local_x,
288 Eigen::VectorXd
const& local_x_prev, std::vector<double>& local_M_data,
289 std::vector<double>& local_K_data, std::vector<double>& local_b_data,
290 std::vector<double>& local_Jac_data);
319 double const t,
double const dt, Eigen::VectorXd
const& local_x,
320 Eigen::VectorXd
const& local_x_prev, std::vector<double>& local_M_data,
321 std::vector<double>& local_K_data, std::vector<double>& local_b_data,
322 std::vector<double>& local_Jac_data);
327 DisplacementDim>::MaterialStateVariables
const&
333 std::vector<IpData, Eigen::aligned_allocator<IpData>>
_ip_data;
339 typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType>
346 ShapeFunctionDisplacement::NPOINTS * DisplacementDim;
std::size_t getID() const
Returns the ID of the element.
unsigned getNumberOfPoints() const
VectorType< _kelvin_vector_size > KelvinVectorType
std::vector< double > const & getIntPtPorosity(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
static const int pressure_size
std::vector< double > getTransportPorosity() const override
std::vector< double > getSigma() const override
void assembleWithJacobianForDeformationEquations(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
BMatrixPolicyType< ShapeFunctionDisplacement, DisplacementDim > BMatricesType
std::vector< double > getPorosity() const override
static const int displacement_index
std::vector< double > const & getIntPtMicroPressure(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
static constexpr auto & N_u_op
SecondaryData< typename ShapeMatricesTypeDisplacement::ShapeMatrices::ShapeType > _secondary_data
void assembleWithJacobianForPressureEquations(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)
void computeSecondaryVariableConcrete(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev) override
Eigen::Matrix< double, KelvinVectorSize, 1 > SymmetricTensor
RichardsMechanicsLocalAssembler(RichardsMechanicsLocalAssembler &&)=delete
static int const KelvinVectorSize
std::vector< double > getSaturation() const override
std::vector< double > getMicroSaturation() 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
std::vector< double > getEpsilon() const override
std::vector< double > getSwellingStress() const override
static const int displacement_size
Eigen::Map< const Eigen::RowVectorXd > getShapeMatrix(const unsigned integration_point) const override
Provides the shape matrix at the given integration point.
NumLib::GenericIntegrationMethod const & _integration_method
typename BMatricesType::KelvinVectorType KelvinVectorType
typename ShapeMatricesTypePressure::GlobalDimMatrixType GlobalDimMatrixType
ShapeMatrixPolicyType< ShapeFunctionPressure, DisplacementDim > ShapeMatricesTypePressure
void initializeConcrete() override
std::size_t setIPDataInitialConditions(std::string_view const name, double const *values, int const integration_order) override
std::vector< double > const & getIntPtEpsilon(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
bool const _is_axially_symmetric
MaterialLib::Solids::MechanicsBase< DisplacementDim >::MaterialStateVariables const & getMaterialStateVariablesAt(unsigned integration_point) const override
RichardsMechanicsLocalAssembler(RichardsMechanicsLocalAssembler const &)=delete
int getMaterialID() const override
static const int pressure_index
std::vector< double > const & getIntPtSigma(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 > getMicroPressure() const override
unsigned getNumberOfIntegrationPoints() const override
void postTimestepConcrete(Eigen::VectorXd const &, Eigen::VectorXd const &, double const, double const, int const) override
std::vector< double > const & getIntPtDryDensitySolid(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
void assemble(double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_rhs_data) override
std::vector< double > const & getIntPtTransportPorosity(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 & getIntPtMicroSaturation(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
MeshLib::Element const & _element
void setInitialConditionsConcrete(Eigen::VectorXd const local_x, double const t, int const process_id) override
RichardsMechanicsProcessData< DisplacementDim > & _process_data
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
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
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 override
void assembleWithJacobianForStaggeredScheme(double const t, double const dt, Eigen::VectorXd const &local_x, Eigen::VectorXd const &local_x_prev, int const process_id, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
std::vector< double > const & getIntPtSwellingStress(const double t, std::vector< GlobalVector * > const &x, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_table, std::vector< double > &cache) const override
std::vector< IpData, Eigen::aligned_allocator< IpData > > _ip_data
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)
MatrixType< GlobalDim, GlobalDim > GlobalDimMatrixType
RowVectorType< ShapeFunction::NPOINTS > NodalRowVectorType
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u
std::vector< ShapeMatrixType, Eigen::aligned_allocator< ShapeMatrixType > > N_u