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)
62 .segment(pressure_index, pressure_size);
63 if (_process_data.deactivate_matrix_in_flow)
65 Base::setPressureOfInactiveNodes(t, p);
67 auto const u = local_x.segment(displacement_index, displacement_size);
69 local_x_prev.segment(displacement_index, displacement_size);
71 auto rhs_p = local_b.segment(pressure_index, pressure_size);
72 auto rhs_u = local_b.segment(displacement_index, displacement_size);
74 auto J_pp = local_J.block(pressure_index, pressure_index, pressure_size,
76 auto J_pu = local_J.block(pressure_index, displacement_index, pressure_size,
78 auto J_up = local_J.block(displacement_index, pressure_index,
79 displacement_size, pressure_size);
80 auto J_uu = local_J.block(displacement_index, displacement_index,
81 displacement_size, displacement_size);
86 _fracture_props, _junction_props, _fracID_to_local, _e_center_coords);
87 double const ele_levelset = levelsets[0];
89 if (ele_levelset == 0)
92 Base::assembleBlockMatricesWithJacobian(
93 t, dt, p, p_prev, u, u_prev, rhs_p, rhs_u, J_pp, J_pu, J_uu, J_up);
100 auto const g = local_x.segment(displacement_jump_index, displacement_size);
102 local_x_prev.segment(displacement_jump_index, displacement_size);
103 Eigen::VectorXd
const total_u = u + ele_levelset * g;
104 Eigen::VectorXd
const total_u_prev = u_prev + ele_levelset * g_prev;
107 Base::assembleBlockMatricesWithJacobian(t, dt, p, p_prev, total_u,
108 total_u_prev, rhs_p, rhs_u, J_pp,
112 auto rhs_g = local_b.segment(displacement_jump_index, displacement_size);
113 auto J_pg = local_J.block(pressure_index, displacement_jump_index,
114 pressure_size, displacement_size);
115 auto J_ug = local_J.block(displacement_index, displacement_jump_index,
116 displacement_size, displacement_size);
117 auto J_gp = local_J.block(displacement_jump_index, pressure_index,
118 displacement_size, pressure_size);
119 auto J_gu = local_J.block(displacement_jump_index, displacement_index,
120 displacement_size, displacement_size);
121 auto J_gg = local_J.block(displacement_jump_index, displacement_jump_index,
122 displacement_size, displacement_size);
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;
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,
141 if (_process_data.deactivate_matrix_in_flow)
143 Base::setPressureOfInactiveNodes(t, p);
145 auto u = local_x.segment(displacement_index, displacement_size);
150 _fracture_props, _junction_props, _fracID_to_local, _e_center_coords);
151 double const ele_levelset = levelsets[0];
153 if (ele_levelset == 0)
156 Base::postTimestepConcreteWithBlockVectors(t, dt, p, u);
163 auto const g = local_x.segment(displacement_jump_index, displacement_size);
164 Eigen::VectorXd
const total_u = u + ele_levelset * g;
167 Base::postTimestepConcreteWithBlockVectors(t, dt, p, total_u);