70 std::vector<double>
const& local_x,
71 std::vector<double>
const& ,
72 std::vector<double>& local_M_data,
73 std::vector<double>& local_K_data,
74 std::vector<double>& local_b_data)
override
76 auto const local_matrix_size = local_x.size();
79 assert(local_matrix_size == ShapeFunction::NPOINTS *
NUM_NODAL_DOF);
82 local_M_data, local_matrix_size, local_matrix_size);
84 local_K_data, local_matrix_size, local_matrix_size);
86 local_b_data, local_matrix_size);
88 auto KTT = local_K.template block<temperature_size, temperature_size>(
90 auto MTT = local_M.template block<temperature_size, temperature_size>(
92 auto Kpp = local_K.template block<pressure_size, pressure_size>(
94 auto Mpp = local_M.template block<pressure_size, pressure_size>(
96 auto Bp = local_b.template block<pressure_size, 1>(
pressure_index, 0);
103 auto p_nodal_values = Eigen::Map<const NodalVectorType>(
108 auto const& liquid_phase = medium.phase(
"AqueousLiquid");
109 auto const& solid_phase = medium.phase(
"Solid");
113 .projected_specific_body_force_vectors[this->
_element.
getID()];
117 unsigned const n_integration_points =
120 std::vector<GlobalDimVectorType> ip_flux_vector;
121 double average_velocity_norm = 0.0;
122 ip_flux_vector.reserve(n_integration_points);
125 process_data.shape_matrix_cache
126 .template NsHigherOrder<typename ShapeFunction::MeshElement>();
128 for (
unsigned ip(0); ip < n_integration_points; ip++)
132 auto const& ip_data = this->
_ip_data[ip];
133 auto const& dNdx = ip_data.dNdx;
134 auto const& N = Ns[ip];
135 auto const& w = ip_data.integration_weight;
137 double T_int_pt = 0.0;
138 double p_int_pt = 0.0;
148 auto const specific_storage =
150 .template value<double>(vars, pos, t, dt);
152 auto const porosity =
154 .template value<double>(vars, pos, t, dt);
157 auto const intrinsic_permeability =
162 .value(vars, pos, t, dt));
164 auto const specific_heat_capacity_fluid =
167 .template value<double>(vars, pos, t, dt);
170 auto const fluid_density =
173 .template value<double>(vars, pos, t, dt);
177 auto const viscosity =
180 .template value<double>(vars, pos, t, dt);
184 process_data.has_gravity
192 vars, fluid_density, specific_heat_capacity_fluid, velocity,
196 dNdx.transpose() * thermal_conductivity_dispersivity * dNdx * w;
198 ip_flux_vector.emplace_back(velocity * fluid_density *
199 specific_heat_capacity_fluid);
200 average_velocity_norm += velocity.norm();
202 Kpp.noalias() += w * dNdx.transpose() * K_over_mu * dNdx;
205 vars, porosity, fluid_density,
206 specific_heat_capacity_fluid, pos, t, dt) *
208 Mpp.noalias() += w * N.transpose() * specific_storage * N;
209 if (process_data.has_gravity)
211 Bp += w * fluid_density * dNdx.transpose() * K_over_mu * b;
218 process_data.stabilizer, this->_ip_data,
219 process_data.shape_matrix_cache, ip_flux_vector,
220 average_velocity_norm /
static_cast<double>(n_integration_points),