93{
94 [[maybe_unused]] auto const matrix_size =
97
98 assert(local_x.size() == matrix_size);
99
100 auto const gas_pressure =
102 auto const gas_pressure_prev =
105 local_x.template segment<capillary_pressure_size>(
107 auto const capillary_pressure_prev =
108 local_x_prev.template segment<capillary_pressure_size>(
110
113 auto const temperature_prev =
115
116 auto const displacement =
118 auto const displacement_prev =
120
121 auto const& medium =
123 ConstitutiveRelations::MediaData media_data{medium};
124
125 unsigned const n_integration_points =
127
128 std::vector<ConstitutiveRelations::ConstitutiveData<DisplacementDim>>
129 ip_constitutive_data(n_integration_points);
130 std::vector<ConstitutiveRelations::ConstitutiveTempData<DisplacementDim>>
131 ip_constitutive_variables(n_integration_points);
132
133 for (unsigned ip = 0; ip < n_integration_points; ip++)
134 {
136 auto& ip_cv = ip_constitutive_variables[ip];
137 auto& ip_cd = ip_constitutive_data[ip];
141
142 auto const& Np = ip_data.N_p;
143 auto const& NT = Np;
144 auto const& Nu = ip_data.N_u;
145 auto const& gradNu = ip_data.dNdx_u;
146 auto const& gradNp = ip_data.dNdx_p;
153 auto const x_coord =
157
158 double const T = NT.dot(temperature);
159 double const T_prev = NT.dot(temperature_prev);
160 double const pG = Np.dot(gas_pressure);
161 double const pG_prev = Np.dot(gas_pressure_prev);
162 double const pCap = Np.dot(capillary_pressure);
163 double const pCap_prev = Np.dot(capillary_pressure_prev);
164 ConstitutiveRelations::TemperatureData const T_data{T, T_prev};
165 ConstitutiveRelations::GasPressureData const pGR_data{pG, pG_prev};
166 ConstitutiveRelations::CapillaryPressureData const pCap_data{pCap,
167 pCap_prev};
171 grad_p_GR{gradNp * gas_pressure};
176
177
178 models.elastic_tangent_stiffness_model.eval({pos, t, dt}, T_data,
179 ip_cv.C_el_data);
180
181 models.biot_model.eval({pos, t, dt}, media_data, ip_cv.biot_data);
182
183 auto const Bu =
185 ShapeFunctionDisplacement::NPOINTS,
188
189 ip_out.eps_data.eps.noalias() = Bu * displacement;
190 models.S_L_model.eval({pos, t, dt}, media_data, pCap_data,
191 current_state.S_L_data);
192
193 models.chi_S_L_model.eval({pos, t, dt}, media_data,
194 current_state.S_L_data,
195 current_state.chi_S_L);
196
197 models.chi_S_L_prev_model.eval({pos, t, dt}, media_data,
198 prev_state.S_L_data, prev_state.chi_S_L);
199
200
201 models.beta_p_SR_model.eval({pos, t, dt}, ip_cv.biot_data,
202 ip_cv.C_el_data, ip_cv.beta_p_SR);
203
204
205 models.swelling_model.eval(
206 {pos, t, dt}, media_data, ip_cv.C_el_data, current_state.S_L_data,
207 prev_state.S_L_data, prev_state.swelling_data,
208 current_state.swelling_data, ip_cv.swelling_data);
209
210
211 models.s_therm_exp_model.eval({pos, t, dt}, media_data, T_data, T0,
212 ip_cv.s_therm_exp_data);
213
214 models.mechanical_strain_model.eval(
215 T_data, ip_cv.s_therm_exp_data, ip_out.eps_data,
216 Bu * displacement_prev, prev_state.mechanical_strain_data,
217 ip_cv.swelling_data, current_state.mechanical_strain_data);
218
219 models.s_mech_model.eval(
220 {pos, t, dt}, T_data, current_state.mechanical_strain_data,
221 prev_state.mechanical_strain_data, prev_state.eff_stress_data,
223 ip_cd.s_mech_data, ip_cv.equivalent_plastic_strain_data);
224
225 models.total_stress_model.eval(current_state.eff_stress_data,
226 ip_cv.biot_data, current_state.chi_S_L,
227 pGR_data, pCap_data,
228 ip_cv.total_stress_data);
229
230 models.pure_liquid_density_model.eval({pos, t, dt}, media_data,
231 pGR_data, pCap_data, T_data,
232 current_state.rho_W_LR);
233
234 models.phase_transition_model.eval(
235 {pos, t, dt}, media_data, pGR_data, pCap_data, T_data,
236 current_state.rho_W_LR, ip_out.fluid_enthalpy_data,
237 ip_out.mass_mole_fractions_data, ip_out.fluid_density_data,
238 ip_out.vapour_pressure_data, current_state.constituent_density_data,
239 ip_cv.phase_transition_data);
240
241 models.viscosity_model.eval({pos, t, dt}, media_data, T_data,
242 ip_out.mass_mole_fractions_data,
243 ip_cv.viscosity_data);
244
245 models.porosity_model.eval(
246 {pos, t, dt}, media_data, current_state.S_L_data,
247 prev_state.S_L_data, pCap_data, pGR_data, current_state.chi_S_L,
248 prev_state.chi_S_L, ip_cv.beta_p_SR, ip_out.eps_data,
249 Bu * displacement_prev, prev_state.porosity_data,
250 current_state.porosity_data);
251
252 if (medium.hasProperty(MPL::PropertyType::transport_porosity))
253 {
254 models.transport_porosity_model.eval(
255 {pos, t, dt}, media_data, current_state.S_L_data,
256 prev_state.S_L_data, pCap_data, pGR_data, current_state.chi_S_L,
257 prev_state.chi_S_L, ip_cv.beta_p_SR,
258 current_state.mechanical_strain_data,
259 prev_state.mechanical_strain_data,
260 prev_state.transport_porosity_data, current_state.porosity_data,
261 current_state.transport_porosity_data);
262 }
263 else
264 {
265 current_state.transport_porosity_data.phi =
266 current_state.porosity_data.phi;
267 }
268
269 models.permeability_model.eval(
270 {pos, t, dt}, media_data, current_state.S_L_data, pGR_data,
271 pCap_data, T_data, current_state.transport_porosity_data,
272 ip_cv.total_stress_data, current_state.mechanical_strain_data,
273 ip_out.eps_data, ip_cv.equivalent_plastic_strain_data,
274 ip_out.permeability_data);
275
276 models.solid_density_model.eval(
277 {pos, t, dt}, media_data, T_data, current_state.eff_stress_data,
278 pCap_data, pGR_data, current_state.chi_S_L,
279 current_state.porosity_data, ip_out.solid_density_data);
280
281 models.solid_heat_capacity_model.eval({pos, t, dt}, media_data, T_data,
282 ip_cv.solid_heat_capacity_data);
283
284 models.thermal_conductivity_model.eval(
285 {pos, t, dt}, media_data, T_data, current_state.porosity_data,
286 current_state.S_L_data, ip_cv.thermal_conductivity_data);
287
288 models.advection_model.eval(current_state.constituent_density_data,
289 ip_out.permeability_data,
290 current_state.rho_W_LR,
291 ip_cv.viscosity_data,
292 ip_cv.advection_data);
293
294 models.gravity_model.eval(
295 ip_out.fluid_density_data,
296 current_state.porosity_data,
297 current_state.S_L_data,
298 ip_out.solid_density_data,
300 this->process_data_.specific_body_force},
301 ip_cv.volumetric_body_force);
302
303 models.diffusion_velocity_model.eval(grad_p_cap,
304 grad_p_GR,
305 ip_out.mass_mole_fractions_data,
306 ip_cv.phase_transition_data,
307 current_state.porosity_data,
308 current_state.S_L_data,
309 grad_T,
310 ip_out.diffusion_velocity_data);
311
312 models.solid_enthalpy_model.eval(ip_cv.solid_heat_capacity_data, T_data,
313 ip_out.solid_enthalpy_data);
314
315 models.internal_energy_model.eval(ip_out.fluid_density_data,
316 ip_cv.phase_transition_data,
317 current_state.porosity_data,
318 current_state.S_L_data,
319 ip_out.solid_density_data,
320 ip_out.solid_enthalpy_data,
321 current_state.internal_energy_data);
322
323 models.effective_volumetric_enthalpy_model.eval(
324 ip_out.fluid_density_data,
325 ip_out.fluid_enthalpy_data,
326 current_state.porosity_data,
327 current_state.S_L_data,
328 ip_out.solid_density_data,
329 ip_out.solid_enthalpy_data,
330 ip_cv.effective_volumetric_enthalpy_data);
331
332 models.fC_1_model.eval(ip_cv.advection_data, ip_out.fluid_density_data,
333 ip_cv.fC_1);
334
336 {
337 models.fC_2a_model.eval(ip_cv.biot_data,
338 pCap_data,
339 current_state.constituent_density_data,
340 current_state.porosity_data,
341 current_state.S_L_data,
342 ip_cv.beta_p_SR,
343 ip_cv.fC_2a);
344 }
345 models.fC_3a_model.eval(dt,
346 current_state.constituent_density_data,
347 prev_state.constituent_density_data,
348 current_state.S_L_data,
349 ip_cv.fC_3a);
350
351 models.fC_4_LCpG_model.eval(ip_cv.advection_data,
352 ip_out.fluid_density_data,
353 ip_cv.phase_transition_data,
354 current_state.porosity_data,
355 current_state.S_L_data,
356 ip_cv.fC_4_LCpG);
357
358 models.fC_4_LCpC_model.eval(ip_cv.advection_data,
359 ip_out.fluid_density_data,
360 ip_cv.phase_transition_data,
361 current_state.porosity_data,
362 current_state.S_L_data,
363 ip_cv.fC_4_LCpC);
364
365 models.fC_4_LCT_model.eval(ip_out.fluid_density_data,
366 ip_cv.phase_transition_data,
367 current_state.porosity_data,
368 current_state.S_L_data,
369 ip_cv.fC_4_LCT);
370
371 models.fC_4_MCpG_model.eval(ip_cv.biot_data,
372 current_state.constituent_density_data,
373 current_state.porosity_data,
374 current_state.S_L_data,
375 ip_cv.beta_p_SR,
376 ip_cv.fC_4_MCpG);
377
378 models.fC_4_MCpC_model.eval(ip_cv.biot_data,
379 pCap_data,
380 current_state.constituent_density_data,
381 current_state.porosity_data,
382 prev_state.S_L_data,
383 current_state.S_L_data,
384 ip_cv.beta_p_SR,
385 ip_cv.fC_4_MCpC);
386
387 models.fC_4_MCT_model.eval(ip_cv.biot_data,
388 current_state.constituent_density_data,
389 current_state.porosity_data,
390 current_state.S_L_data,
391 ip_cv.s_therm_exp_data,
392 ip_cv.fC_4_MCT);
393
394 models.fC_4_MCu_model.eval(ip_cv.biot_data,
395 current_state.constituent_density_data,
396 current_state.S_L_data,
397 ip_cv.fC_4_MCu);
398
399 models.fW_1_model.eval(ip_cv.advection_data, ip_out.fluid_density_data,
400 ip_cv.fW_1);
401
403 {
404 models.fW_2_model.eval(ip_cv.biot_data,
405 pCap_data,
406 current_state.constituent_density_data,
407 current_state.porosity_data,
408 current_state.rho_W_LR,
409 current_state.S_L_data,
410 ip_cv.beta_p_SR,
411 ip_cv.fW_2);
412 }
413 models.fW_3a_model.eval(dt,
414 current_state.constituent_density_data,
415 prev_state.constituent_density_data,
416 prev_state.rho_W_LR,
417 current_state.rho_W_LR,
418 current_state.S_L_data,
419 ip_cv.fW_3a);
420
421 models.fW_4_LWpG_model.eval(ip_cv.advection_data,
422 ip_out.fluid_density_data,
423 ip_cv.phase_transition_data,
424 current_state.porosity_data,
425 current_state.S_L_data,
426 ip_cv.fW_4_LWpG);
427
428 models.fW_4_LWpC_model.eval(ip_cv.advection_data,
429 ip_out.fluid_density_data,
430 ip_cv.phase_transition_data,
431 current_state.porosity_data,
432 current_state.S_L_data,
433 ip_cv.fW_4_LWpC);
434
435 models.fW_4_LWT_model.eval(ip_out.fluid_density_data,
436 ip_cv.phase_transition_data,
437 current_state.porosity_data,
438 current_state.S_L_data,
439 ip_cv.fW_4_LWT);
440
441 models.fW_4_MWpG_model.eval(ip_cv.biot_data,
442 current_state.constituent_density_data,
443 current_state.porosity_data,
444 current_state.rho_W_LR,
445 current_state.S_L_data,
446 ip_cv.beta_p_SR,
447 ip_cv.fW_4_MWpG);
448
449 models.fW_4_MWpC_model.eval(ip_cv.biot_data,
450 pCap_data,
451 current_state.constituent_density_data,
452 current_state.porosity_data,
453 prev_state.S_L_data,
454 current_state.rho_W_LR,
455 current_state.S_L_data,
456 ip_cv.beta_p_SR,
457 ip_cv.fW_4_MWpC);
458
459 models.fW_4_MWT_model.eval(ip_cv.biot_data,
460 current_state.constituent_density_data,
461 current_state.porosity_data,
462 current_state.rho_W_LR,
463 current_state.S_L_data,
464 ip_cv.s_therm_exp_data,
465 ip_cv.fW_4_MWT);
466
467 models.fW_4_MWu_model.eval(ip_cv.biot_data,
468 current_state.constituent_density_data,
469 current_state.rho_W_LR,
470 current_state.S_L_data,
471 ip_cv.fW_4_MWu);
472
473 models.fT_1_model.eval(dt,
474 current_state.internal_energy_data,
475 prev_state.internal_energy_data,
476 ip_cv.fT_1);
477
478
479
480
481
482 models.darcy_velocity_model.eval(
483 grad_p_cap,
484 ip_out.fluid_density_data,
485 grad_p_GR,
486 ip_out.permeability_data,
488 this->process_data_.specific_body_force},
489 ip_cv.viscosity_data,
490 ip_out.darcy_velocity_data);
491
492 models.fT_2_model.eval(ip_out.darcy_velocity_data,
493 ip_out.fluid_density_data,
494 ip_out.fluid_enthalpy_data,
495 ip_cv.fT_2);
496
497 models.fT_3_model.eval(
498 current_state.constituent_density_data,
499 ip_out.darcy_velocity_data,
500 ip_out.diffusion_velocity_data,
501 ip_out.fluid_density_data,
502 ip_cv.phase_transition_data,
504 this->process_data_.specific_body_force},
505 ip_cv.fT_3);
506
507 models.fu_2_KupC_model.eval(ip_cv.biot_data, current_state.chi_S_L,
508 ip_cv.fu_2_KupC);
509 }
510
511 return {ip_constitutive_data, ip_constitutive_variables};
512}
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct GasPressureGradientTag > GasPressureGradientData
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct TemperatureGradientTag > TemperatureGradientData
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct CapillaryPressureGradientTag > CapillaryPressureGradientData
BaseLib::StrongType< double, struct ReferenceTemperatureTag > ReferenceTemperatureData
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct SpecificBodyForceTag > SpecificBodyForceData