62 double const t,
double const dt, std::vector<double>
const& local_x,
63 std::vector<double>
const& ,
64 std::vector<double>& local_M_data, std::vector<double>& local_K_data,
65 std::vector<double>& )
67 assert(local_x.size() == ShapeFunction::NPOINTS);
71 local_M_data, ShapeFunction::NPOINTS, ShapeFunction::NPOINTS);
73 local_K_data, ShapeFunction::NPOINTS, ShapeFunction::NPOINTS);
76 auto const& solid_phase =
78 auto const& liquid_phase =
83 unsigned const n_integration_points =
86 for (
unsigned ip = 0; ip < n_integration_points; ip++)
89 auto const& N = ip_data.N;
90 auto const& dNdx = ip_data.dNdx;
91 auto const& w = ip_data.integration_weight;
99 double T_int_pt = 0.0;
105 auto const density_s =
107 .template value<double>(vars, pos, t, dt);
109 auto const heat_capacity_s =
113 .template value<double>(vars, pos, t, dt);
115 auto const density_f =
117 .template value<double>(vars, pos, t, dt);
119 auto const heat_capacity_f =
123 .template value<double>(vars, pos, t, dt);
125 auto const porosity =
127 .template value<double>(vars, pos, t, dt);
129 auto const velocity =
132 .template value<Eigen::Vector3d>(vars, pos, t, dt);
135 auto const thermal_conductivity =
140 .value(vars, pos, t, dt));
142 auto thermal_conductivity_dispersivity = thermal_conductivity;
144 double const velocity_magnitude = velocity.norm();
146 if (velocity_magnitude >= std::numeric_limits<double>::epsilon())
148 auto const thermal_dispersivity_longitudinal =
151 thermal_longitudinal_dispersivity)
152 .template value<double>();
153 auto const thermal_dispersivity_transversal =
156 thermal_transversal_dispersivity)
157 .template value<double>();
159 auto const thermal_dispersivity =
160 density_f * heat_capacity_f *
161 (thermal_dispersivity_transversal * velocity_magnitude *
162 Eigen::Matrix3d::Identity() +
163 (thermal_dispersivity_longitudinal -
164 thermal_dispersivity_transversal) /
165 velocity_magnitude * velocity * velocity.transpose());
166 thermal_conductivity_dispersivity += thermal_dispersivity;
171 (dNdx.transpose() * thermal_conductivity_dispersivity * dNdx +
172 N.transpose() * velocity.transpose() * dNdx * density_f *
177 local_M.noalias() += N.transpose() * N * w *
178 (density_s * heat_capacity_s * (1 - porosity) +
179 density_f * heat_capacity_f * porosity);
187 local_M = local_M.colwise().sum().eval().asDiagonal();
200 double const t,
double const dt, std::vector<double>
const& local_x,
201 std::vector<double>
const& local_x_prev,
202 std::vector<double>& local_rhs_data, std::vector<double>& local_Jac_data)
204 assert(local_x.size() == ShapeFunction::NPOINTS);
205 auto const local_matrix_size = local_x.size();
208 Eigen::Map<NodalVectorType const>(local_x.data(), local_matrix_size);
209 auto x_prev = Eigen::Map<NodalVectorType const>(local_x_prev.data(),
213 local_Jac_data, local_matrix_size, local_matrix_size);
215 local_rhs_data, local_matrix_size);
217 std::vector<double> local_M_data;
218 std::vector<double> local_K_data;
219 assemble(t, dt, local_x, local_x_prev, local_M_data, local_K_data,
224 local_M_data, local_matrix_size, local_matrix_size);
226 local_K_data, local_matrix_size, local_matrix_size);
229 local_Jac.noalias() += local_K + local_M / dt;
230 local_rhs.noalias() -= local_K * x + local_M * (x - x_prev) / dt;
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > initShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, IntegrationMethod const &integration_method)