22template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
25 ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>::
26 HydroMechanicsLocalAssemblerMatrixNearFracture(
28 std::size_t
const n_variables,
29 std::size_t
const local_matrix_size,
30 std::vector<unsigned>
const& dofIndex_to_localIndex,
32 bool const is_axially_symmetric,
35 ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>(
36 e, n_variables, local_matrix_size, dofIndex_to_localIndex,
37 integration_method, is_axially_symmetric, process_data),
42 _fracID_to_local.insert({fid, _fracture_props.size()});
49template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
51void HydroMechanicsLocalAssemblerMatrixNearFracture<
52 ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>::
53 assembleWithJacobianConcrete(
double const t,
double const dt,
54 Eigen::VectorXd
const& local_x,
55 Eigen::VectorXd
const& local_x_prev,
56 Eigen::VectorXd& local_b,
57 Eigen::MatrixXd& local_J)
59 auto p =
const_cast<Eigen::VectorXd&
>(local_x).segment(
pressure_index,
61 auto p_prev =
const_cast<Eigen::VectorXd&
>(local_x_prev)
87 double const ele_levelset = levelsets[0];
89 if (ele_levelset == 0)
93 t, dt, p, p_prev, u, u_prev, rhs_p, rhs_u, J_pp, J_pu, J_uu, J_up);
103 Eigen::VectorXd
const total_u = u + ele_levelset * g;
104 Eigen::VectorXd
const total_u_prev = u_prev + ele_levelset * g_prev;
108 total_u_prev, rhs_p, rhs_u, J_pp,
124 rhs_g = ele_levelset * rhs_u;
125 J_pg = ele_levelset * J_pu;
126 J_ug = ele_levelset * J_uu;
127 J_gp = ele_levelset * J_up;
128 J_gu = ele_levelset * J_uu;
129 J_gg = ele_levelset * ele_levelset * J_uu;
132template <
typename ShapeFunctionDisplacement,
typename ShapeFunctionPressure,
135 ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>::
136 postTimestepConcreteWithVector(
double const t,
double const dt,
137 Eigen::VectorXd
const& local_x)
139 auto p =
const_cast<Eigen::VectorXd&
>(local_x).segment(
pressure_index,
151 double const ele_levelset = levelsets[0];
153 if (ele_levelset == 0)
164 Eigen::VectorXd
const total_u = u + ele_levelset * g;
std::size_t getID() const
Returns the ID of the element.
HydroMechanicsProcessData< DisplacementDim > & _process_data
static const int displacement_jump_index
std::vector< FractureProperty * > _fracture_props
std::vector< JunctionProperty * > _junction_props
static const int displacement_size
static const int pressure_size
static const int displacement_index
Eigen::Vector3d _e_center_coords
std::unordered_map< int, int > _fracID_to_local
static const int pressure_index
void postTimestepConcreteWithBlockVectors(double const t, double const dt, Eigen::Ref< const Eigen::VectorXd > const &p, Eigen::Ref< const Eigen::VectorXd > const &u)
void assembleBlockMatricesWithJacobian(double const t, double const dt, Eigen::Ref< const Eigen::VectorXd > const &p, Eigen::Ref< const Eigen::VectorXd > const &p_prev, Eigen::Ref< const Eigen::VectorXd > const &u, Eigen::Ref< const Eigen::VectorXd > const &u_prev, Eigen::Ref< Eigen::VectorXd > rhs_p, Eigen::Ref< Eigen::VectorXd > rhs_u, Eigen::Ref< Eigen::MatrixXd > J_pp, Eigen::Ref< Eigen::MatrixXd > J_pu, Eigen::Ref< Eigen::MatrixXd > J_uu, Eigen::Ref< Eigen::MatrixXd > J_up)
void setPressureOfInactiveNodes(double const t, Eigen::Ref< Eigen::VectorXd > p)
HydroMechanicsLocalAssemblerMatrix(HydroMechanicsLocalAssemblerMatrix const &)=delete
std::vector< double > uGlobalEnrichments(std::vector< FractureProperty * > const &frac_props, std::vector< JunctionProperty * > const &junction_props, std::unordered_map< int, int > const &fracID_to_local, Eigen::Vector3d const &x)
std::vector< std::vector< int > > vec_ele_connected_fractureIDs