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);
100 auto p_nodal_values = Eigen::Map<const NodalVectorType>(
105 auto const& liquid_phase = medium.phase(
"AqueousLiquid");
106 auto const& solid_phase = medium.phase(
"Solid");
110 .projected_specific_body_force_vectors[this->
_element.
getID()];
114 unsigned const n_integration_points =
117 std::vector<GlobalDimVectorType> ip_flux_vector;
118 double average_velocity_norm = 0.0;
119 ip_flux_vector.reserve(n_integration_points);
122 process_data.shape_matrix_cache
123 .template NsHigherOrder<typename ShapeFunction::MeshElement>();
125 for (
unsigned ip(0); ip < n_integration_points; ip++)
127 auto const& ip_data = this->
_ip_data[ip];
128 auto const& dNdx = ip_data.dNdx;
129 auto const& N = Ns[ip];
130 auto const& w = ip_data.integration_weight;
139 double T_int_pt = 0.0;
140 double p_int_pt = 0.0;
150 auto const specific_storage =
152 .template value<double>(vars, pos, t, dt);
154 auto const porosity =
156 .template value<double>(vars, pos, t, dt);
159 auto const intrinsic_permeability =
164 .value(vars, pos, t, dt));
166 auto const specific_heat_capacity_fluid =
169 .template value<double>(vars, pos, t, dt);
172 auto const fluid_density =
175 .template value<double>(vars, pos, t, dt);
179 auto const viscosity =
182 .template value<double>(vars, pos, t, dt);
186 process_data.has_gravity
194 vars, fluid_density, specific_heat_capacity_fluid, velocity,
198 dNdx.transpose() * thermal_conductivity_dispersivity * dNdx * w;
200 ip_flux_vector.emplace_back(velocity * fluid_density *
201 specific_heat_capacity_fluid);
202 average_velocity_norm += velocity.norm();
204 Kpp.noalias() += w * dNdx.transpose() * K_over_mu * dNdx;
207 vars, porosity, fluid_density,
208 specific_heat_capacity_fluid, pos, t, dt) *
210 Mpp.noalias() += w * N.transpose() * specific_storage * N;
211 if (process_data.has_gravity)
213 Bp += w * fluid_density * dNdx.transpose() * K_over_mu * b;
220 process_data.stabilizer, this->_ip_data,
221 process_data.shape_matrix_cache, ip_flux_vector,
222 average_velocity_norm /
static_cast<double>(n_integration_points),