93{
94 [[maybe_unused]] auto const matrix_size =
97
98 assert(local_x.size() == matrix_size);
99
100 auto const gas_pressure =
103 local_x.template segment<capillary_pressure_size>(
105
108 auto const temperature_prev =
110
111 auto const displacement =
113 auto const displacement_prev =
115
116 auto const& medium =
118 auto const& gas_phase = medium.phase("Gas");
119 auto const& liquid_phase = medium.phase("AqueousLiquid");
120 auto const& solid_phase = medium.phase("Solid");
121 ConstitutiveRelations::MediaData media_data{medium};
122
123 unsigned const n_integration_points =
125
126 std::vector<ConstitutiveRelations::ConstitutiveData<DisplacementDim>>
127 ip_constitutive_data(n_integration_points);
128 std::vector<ConstitutiveRelations::ConstitutiveTempData<DisplacementDim>>
129 ip_constitutive_variables(n_integration_points);
130
131 for (unsigned ip = 0; ip < n_integration_points; ip++)
132 {
134 auto& ip_cv = ip_constitutive_variables[ip];
135 auto& ip_cd = ip_constitutive_data[ip];
139
140 auto const& Np = ip_data.N_p;
141 auto const& NT = Np;
142 auto const& Nu = ip_data.N_u;
143 auto const& gradNu = ip_data.dNdx_u;
144 auto const& gradNp = ip_data.dNdx_p;
151 auto const x_coord =
155
156 double const T = NT.dot(temperature);
157 double const T_prev = NT.dot(temperature_prev);
158 double const pGR = Np.dot(gas_pressure);
159 double const pCap = Np.dot(capillary_pressure);
160 ConstitutiveRelations::TemperatureData
const T_data{
T, T_prev};
165 double const pLR = pGR - pCap;
169
170
171 models.elastic_tangent_stiffness_model.eval({pos, t, dt}, T_data,
172 ip_cv.C_el_data);
173
174 models.biot_model.eval({pos, t, dt}, media_data, ip_cv.biot_data);
175
176 auto const Bu =
178 ShapeFunctionDisplacement::NPOINTS,
181
182 auto& eps = ip_out.eps_data.eps;
183 eps.noalias() = Bu * displacement;
184 models.S_L_model.eval({pos, t, dt}, media_data, pCap_data,
185 current_state.S_L_data, ip_cv.dS_L_dp_cap);
186
187 models.chi_S_L_model.eval({pos, t, dt}, media_data,
188 current_state.S_L_data, ip_cv.chi_S_L);
189
190
191 models.beta_p_SR_model.eval({pos, t, dt}, ip_cv.biot_data,
192 ip_cv.C_el_data, ip_cv.beta_p_SR);
193
194
195 models.swelling_model.eval(
196 {pos, t, dt}, media_data, ip_cv.C_el_data, current_state.S_L_data,
197 prev_state.S_L_data, prev_state.swelling_data,
198 current_state.swelling_data, ip_cv.swelling_data);
199
200
201 models.s_therm_exp_model.eval({pos, t, dt}, media_data, T_data, T0,
202 ip_cv.s_therm_exp_data);
203
204 models.mechanical_strain_model.eval(
205 T_data, ip_cv.s_therm_exp_data, ip_out.eps_data,
206 Bu * displacement_prev, prev_state.mechanical_strain_data,
207 ip_cv.swelling_data, current_state.mechanical_strain_data);
208
209 models.s_mech_model.eval(
210 {pos, t, dt}, T_data, current_state.mechanical_strain_data,
211 prev_state.mechanical_strain_data, prev_state.eff_stress_data,
213 ip_cd.s_mech_data, ip_cv.equivalent_plastic_strain_data);
214
215 models.total_stress_model.eval(current_state.eff_stress_data,
216 ip_cv.biot_data, ip_cv.chi_S_L, pGR_data,
217 pCap_data, ip_cv.total_stress_data);
218
219 models.permeability_model.eval(
220 {pos, t, dt}, media_data, current_state.S_L_data, pCap_data, T_data,
221 ip_cv.total_stress_data, ip_out.eps_data,
222 ip_cv.equivalent_plastic_strain_data, ip_out.permeability_data);
223
224 models.pure_liquid_density_model.eval({pos, t, dt}, media_data,
225 pGR_data, pCap_data, T_data,
226 current_state.rho_W_LR);
227
228 models.phase_transition_model.eval(
229 {pos, t, dt}, media_data, pGR_data, pCap_data, T_data,
230 current_state.rho_W_LR, ip_cv.viscosity_data, ip_out.enthalpy_data,
231 ip_out.mass_mole_fractions_data, ip_out.fluid_density_data,
232 ip_out.vapour_pressure_data, current_state.constituent_density_data,
233 ip_cv.phase_transition_data);
234
235 models.porosity_model.eval({pos, t, dt}, media_data,
236#ifdef NON_CONSTANT_SOLID_PHASE_VOLUME_FRACTION
237 ip_cv.biot_data, ip_out.eps_data,
238 ip_cv.s_therm_exp_data,
239#endif
240 ip_out.porosity_data, ip_cv.porosity_d_data);
241
242 models.solid_density_model.eval(
243 {pos, t, dt}, media_data, T_data,
244#ifdef NON_CONSTANT_SOLID_PHASE_VOLUME_FRACTION
245 ip_cv.biot_data, ip_out.eps_data, ip_cv.s_therm_exp_data,
246#endif
247 ip_out.solid_density_data, ip_cv.solid_density_d_data);
248
255
256
258
261
262 vars.
porosity = ip_out.porosity_data.phi;
263
264 auto const&
c = ip_cv.phase_transition_data;
265
266 auto const phi_L =
267 current_state.S_L_data.S_L * ip_out.porosity_data.phi;
268 auto const phi_G =
269 (1. - current_state.S_L_data.S_L) * ip_out.porosity_data.phi;
270 double const phi_S = 1. - ip_out.porosity_data.phi;
271
272
273 ip_data.lambda = MaterialPropertyLib::formEigenTensor<DisplacementDim>(
274 medium
275 .property(
277 .value(vars, pos, t, dt));
278
279 auto const cpS =
280 solid_phase.property(MPL::PropertyType::specific_heat_capacity)
281 .template value<double>(vars, pos, t, dt);
282 ip_data.h_S = cpS *
T;
283 auto const u_S = ip_data.h_S;
284
285 ip_data.rho_u_eff = phi_G * ip_out.fluid_density_data.rho_GR *
c.uG +
286 phi_L * ip_out.fluid_density_data.rho_LR *
c.uL +
287 phi_S * ip_out.solid_density_data.rho_SR * u_S;
288
289 ip_data.rho_G_h_G =
290 phi_G * ip_out.fluid_density_data.rho_GR * ip_out.enthalpy_data.h_G;
291 ip_data.rho_L_h_L =
292 phi_L * ip_out.fluid_density_data.rho_LR * ip_out.enthalpy_data.h_L;
293 ip_data.rho_S_h_S =
294 phi_S * ip_out.solid_density_data.rho_SR * ip_data.h_S;
295
296
297 auto const xmCL = 1. - ip_out.mass_mole_fractions_data.xmWL;
298
300 c.dxmWG_dpCap * gradpCap +
303
305 c.dxmWL_dpCap * gradpCap +
308
309
310
311
312
313 ip_data.d_CG = ip_out.mass_mole_fractions_data.xmCG == 0.
314 ? 0. * gradxmCG
315
316 : -phi_G / ip_out.mass_mole_fractions_data.xmCG *
317 c.diffusion_coefficient_vapour * gradxmCG;
318
319 ip_data.d_WG =
321 ? 0. * gradxmWG
322
323 : -phi_G /
c.xmWG *
c.diffusion_coefficient_vapour * gradxmWG;
324
325 ip_data.d_CL =
326 xmCL == 0.
327 ? 0. * gradxmCL
328
329 : -phi_L / xmCL *
c.diffusion_coefficient_solute * gradxmCL;
330
331 ip_data.d_WL = ip_out.mass_mole_fractions_data.xmWL == 0.
332 ? 0. * gradxmWL
333
334 : -phi_L / ip_out.mass_mole_fractions_data.xmWL *
335 c.diffusion_coefficient_solute * gradxmWL;
336
337
338
339
340 auto const drho_LR_dT =
341 liquid_phase.property(MPL::PropertyType::density)
342 .template dValue<double>(vars, MPL::Variable::temperature, pos,
343 t, dt);
344
345 ip_cv.drho_u_eff_dT =
346 phi_G *
c.drho_GR_dT *
c.uG +
347 phi_G * ip_out.fluid_density_data.rho_GR *
c.du_G_dT +
348 phi_L * drho_LR_dT *
c.uL +
349 phi_L * ip_out.fluid_density_data.rho_LR *
c.du_L_dT +
350 phi_S * ip_cv.solid_density_d_data.drho_SR_dT * u_S +
351 phi_S * ip_out.solid_density_data.rho_SR * cpS -
352 ip_cv.porosity_d_data.dphi_dT * ip_out.solid_density_data.rho_SR *
353 u_S;
354
355
356
357 double const ds_G_dp_cap = -ip_cv.dS_L_dp_cap();
358
359
360 double const dphi_G_dp_cap =
361 -ip_cv.dS_L_dp_cap() * ip_out.porosity_data.phi;
362
363 double const dphi_L_dp_cap =
364 ip_cv.dS_L_dp_cap() * ip_out.porosity_data.phi;
365
366 auto const lambdaGR =
367 gas_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
368 ? MPL::formEigenTensor<DisplacementDim>(
369 gas_phase
370 .property(MPL::PropertyType::thermal_conductivity)
371 .value(vars, pos, t, dt))
373
374 auto const dlambda_GR_dT =
375 gas_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
376 ? MPL::formEigenTensor<DisplacementDim>(
377 gas_phase[MPL::PropertyType::thermal_conductivity].dValue(
378 vars, MPL::Variable::temperature, pos, t, dt))
380
381 auto const lambdaLR =
382 liquid_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
383 ? MPL::formEigenTensor<DisplacementDim>(
384 liquid_phase
385 .property(MPL::PropertyType::thermal_conductivity)
386 .value(vars, pos, t, dt))
388
389 auto const dlambda_LR_dT =
390 liquid_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
391 ? MPL::formEigenTensor<DisplacementDim>(
392 liquid_phase[MPL::PropertyType::thermal_conductivity]
393 .dValue(vars, MPL::Variable::temperature, pos, t, dt))
395
396 auto const lambdaSR =
397 solid_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
398 ? MPL::formEigenTensor<DisplacementDim>(
399 solid_phase
400 .property(MPL::PropertyType::thermal_conductivity)
401 .value(vars, pos, t, dt))
403
404 auto const dlambda_SR_dT =
405 solid_phase.hasProperty(MPL::PropertyType::thermal_conductivity)
406 ? MPL::formEigenTensor<DisplacementDim>(
407 solid_phase[MPL::PropertyType::thermal_conductivity]
408 .dValue(vars, MPL::Variable::temperature, pos, t, dt))
410
411 ip_cv.dlambda_dp_cap =
412 dphi_G_dp_cap * lambdaGR + dphi_L_dp_cap * lambdaLR;
413
414 ip_cv.dlambda_dT = phi_G * dlambda_GR_dT + phi_L * dlambda_LR_dT +
415 phi_S * dlambda_SR_dT -
416 ip_cv.porosity_d_data.dphi_dT * lambdaSR;
417
418
419
420
421
422 double const drho_LR_dp_GR =
c.drho_LR_dp_LR;
423 double const drho_LR_dp_cap = -
c.drho_LR_dp_LR;
424
425
426 ip_cv.drho_h_eff_dp_GR =
427
428
429 phi_G *
c.drho_GR_dp_GR * ip_out.enthalpy_data.h_G +
430
431
432 phi_L * drho_LR_dp_GR * ip_out.enthalpy_data.h_L;
433 ip_cv.drho_h_eff_dp_cap =
434 dphi_G_dp_cap * ip_out.fluid_density_data.rho_GR *
435 ip_out.enthalpy_data.h_G +
436
437 dphi_L_dp_cap * ip_out.fluid_density_data.rho_LR *
438 ip_out.enthalpy_data.h_L +
439 phi_L * drho_LR_dp_cap * ip_out.enthalpy_data.h_L;
440
441
442 constexpr double dphi_G_dT = 0;
443 constexpr double dphi_L_dT = 0;
444 ip_cv.drho_h_eff_dT =
445 dphi_G_dT * ip_out.fluid_density_data.rho_GR *
446 ip_out.enthalpy_data.h_G +
447 phi_G *
c.drho_GR_dT * ip_out.enthalpy_data.h_G +
448 phi_G * ip_out.fluid_density_data.rho_GR *
c.dh_G_dT +
449 dphi_L_dT * ip_out.fluid_density_data.rho_LR *
450 ip_out.enthalpy_data.h_L +
451 phi_L * drho_LR_dT * ip_out.enthalpy_data.h_L +
452 phi_L * ip_out.fluid_density_data.rho_LR *
c.dh_L_dT -
453 ip_cv.porosity_d_data.dphi_dT * ip_out.solid_density_data.rho_SR *
454 ip_data.h_S +
455 phi_S * ip_cv.solid_density_d_data.drho_SR_dT * ip_data.h_S +
456 phi_S * ip_out.solid_density_data.rho_SR * cpS;
457
458 ip_cv.drho_u_eff_dp_GR =
459
460 phi_G *
c.drho_GR_dp_GR *
c.uG +
461 phi_G * ip_out.fluid_density_data.rho_GR *
c.du_G_dp_GR +
462
463 phi_L * drho_LR_dp_GR *
c.uL +
464 phi_L * ip_out.fluid_density_data.rho_LR *
c.du_L_dp_GR;
465
466 ip_cv.drho_u_eff_dp_cap =
467 dphi_G_dp_cap * ip_out.fluid_density_data.rho_GR *
c.uG +
468
469 dphi_L_dp_cap * ip_out.fluid_density_data.rho_LR *
c.uL +
470 phi_L * drho_LR_dp_cap *
c.uL +
471 phi_L * ip_out.fluid_density_data.rho_LR *
c.du_L_dp_cap;
472
475 ip_out.permeability_data.Ki * ip_out.permeability_data.k_rel_G /
476 ip_cv.viscosity_data.mu_GR;
478 ip_out.permeability_data.Ki * ip_out.permeability_data.k_rel_L /
479 ip_cv.viscosity_data.mu_LR;
480
481
482
483
484
485
486
487
488
489 ip_cv.dk_over_mu_G_dp_cap = ip_out.permeability_data.Ki *
490 ip_out.permeability_data.dk_rel_G_dS_L *
491 ip_cv.dS_L_dp_cap() /
492 ip_cv.viscosity_data.mu_GR;
493 ip_cv.dk_over_mu_L_dp_cap = ip_out.permeability_data.Ki *
494 ip_out.permeability_data.dk_rel_L_dS_L *
495 ip_cv.dS_L_dp_cap() /
496 ip_cv.viscosity_data.mu_LR;
497
498 ip_data.w_GS = k_over_mu_G * ip_out.fluid_density_data.rho_GR * b -
499 k_over_mu_G * gradpGR;
500 ip_data.w_LS = k_over_mu_L * gradpCap +
501 k_over_mu_L * ip_out.fluid_density_data.rho_LR * b -
502 k_over_mu_L * gradpGR;
503
504 ip_cv.drho_GR_h_w_eff_dp_GR_Npart =
505 c.drho_GR_dp_GR * ip_out.enthalpy_data.h_G * ip_data.w_GS +
506 ip_out.fluid_density_data.rho_GR * ip_out.enthalpy_data.h_G *
507 k_over_mu_G *
c.drho_GR_dp_GR * b;
508 ip_cv.drho_GR_h_w_eff_dp_GR_gradNpart =
509 ip_out.fluid_density_data.rho_GR * ip_out.enthalpy_data.h_G *
510 k_over_mu_G -
511 ip_out.fluid_density_data.rho_LR * ip_out.enthalpy_data.h_L *
512 k_over_mu_L;
513
514 ip_cv.drho_LR_h_w_eff_dp_cap_Npart =
515 -drho_LR_dp_cap * ip_out.enthalpy_data.h_L * ip_data.w_LS -
516 ip_out.fluid_density_data.rho_LR * ip_out.enthalpy_data.h_L *
517 k_over_mu_L * drho_LR_dp_cap * b;
518 ip_cv.drho_LR_h_w_eff_dp_cap_gradNpart =
519
520 ip_out.fluid_density_data.rho_LR * ip_out.enthalpy_data.h_L *
521 k_over_mu_L;
522
523 ip_cv.drho_GR_h_w_eff_dT =
524 c.drho_GR_dT * ip_out.enthalpy_data.h_G * ip_data.w_GS +
525 ip_out.fluid_density_data.rho_GR *
c.dh_G_dT * ip_data.w_GS +
526 drho_LR_dT * ip_out.enthalpy_data.h_L * ip_data.w_LS +
527 ip_out.fluid_density_data.rho_LR *
c.dh_L_dT * ip_data.w_LS;
528
529
530
531
532
533 double const s_L = current_state.S_L_data.S_L;
534 double const s_G = 1. - s_L;
535 double const rho_C_FR =
536 s_G * current_state.constituent_density_data.rho_C_GR +
537 s_L * current_state.constituent_density_data.rho_C_LR;
538 double const rho_W_FR =
539 s_G * current_state.constituent_density_data.rho_W_GR +
540 s_L * current_state.rho_W_LR();
541
542 constexpr double drho_C_GR_dp_cap = 0;
543 if (dt == 0.)
544 {
545 ip_cv.dfC_3a_dp_GR = 0.;
546 ip_cv.dfC_3a_dp_cap = 0.;
547 ip_cv.dfC_3a_dT = 0.;
548 }
549 else
550 {
551 double const rho_C_GR_dot =
552 (current_state.constituent_density_data.rho_C_GR -
553 prev_state.constituent_density_data->rho_C_GR) /
554 dt;
555 double const rho_C_LR_dot =
556 (current_state.constituent_density_data.rho_C_LR -
557 prev_state.constituent_density_data->rho_C_LR) /
558 dt;
559 ip_cv.dfC_3a_dp_GR =
560 s_G *
c.drho_C_GR_dp_GR /
561 dt +
562 s_L *
c.drho_C_LR_dp_GR /
563 dt;
564 ip_cv.dfC_3a_dp_cap = ds_G_dp_cap * rho_C_GR_dot +
565 s_G * drho_C_GR_dp_cap / dt +
566 ip_cv.dS_L_dp_cap() * rho_C_LR_dot -
567 s_L *
c.drho_C_LR_dp_LR / dt;
568 ip_cv.dfC_3a_dT =
569 s_G *
c.drho_C_GR_dT / dt + s_L *
c.drho_C_LR_dT / dt;
570 }
571
572 double const drho_C_FR_dp_GR =
573
574
575 s_G *
c.drho_C_GR_dp_GR +
576
577
578 s_L *
c.drho_C_LR_dp_GR;
579 ip_cv.dfC_4_MCpG_dp_GR =
580 drho_C_FR_dp_GR * (ip_cv.biot_data() - ip_out.porosity_data.phi) *
581 ip_cv.beta_p_SR();
582
583 double const drho_C_FR_dT = s_G *
c.drho_C_GR_dT + s_L *
c.drho_C_LR_dT;
584 ip_cv.dfC_4_MCpG_dT =
585 drho_C_FR_dT * (ip_cv.biot_data() - ip_out.porosity_data.phi) *
586 ip_cv.beta_p_SR() -
587 rho_C_FR * ip_cv.porosity_d_data.dphi_dT * ip_cv.beta_p_SR();
588
589 ip_cv.dfC_4_MCT_dT =
590 drho_C_FR_dT * (ip_cv.biot_data() - ip_out.porosity_data.phi) *
591 ip_cv.s_therm_exp_data.beta_T_SR
592#ifdef NON_CONSTANT_SOLID_PHASE_VOLUME_FRACTION
593 + rho_C_FR * (ip_cv.biot_data() - ip_cv.porosity_d_data.dphi_dT) *
594 ip_cv.s_therm_exp_data.beta_T_SR
595#endif
596 ;
597
598 ip_cv.dfC_4_MCu_dT = drho_C_FR_dT * ip_cv.biot_data();
599
600 ip_cv.dfC_2a_dp_GR =
601 -ip_out.porosity_data.phi *
c.drho_C_GR_dp_GR -
602 drho_C_FR_dp_GR * pCap *
603 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
604 ip_cv.beta_p_SR();
605
606 double const drho_C_FR_dp_cap =
607 ds_G_dp_cap * current_state.constituent_density_data.rho_C_GR +
608 s_G * drho_C_GR_dp_cap +
609 ip_cv.dS_L_dp_cap() *
610 current_state.constituent_density_data.rho_C_LR -
611 s_L *
c.drho_C_LR_dp_LR;
612
613 ip_cv.dfC_2a_dp_cap =
614 ip_out.porosity_data.phi * (-
c.drho_C_LR_dp_LR - drho_C_GR_dp_cap) -
615 drho_C_FR_dp_cap * pCap *
616 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
617 ip_cv.beta_p_SR() +
618 rho_C_FR * (ip_cv.biot_data() - ip_out.porosity_data.phi) *
619 ip_cv.beta_p_SR();
620
621 ip_cv.dfC_2a_dT =
622 ip_cv.porosity_d_data.dphi_dT *
623 (current_state.constituent_density_data.rho_C_LR -
624 current_state.constituent_density_data.rho_C_GR) +
625 ip_out.porosity_data.phi * (
c.drho_C_LR_dT -
c.drho_C_GR_dT) -
626 drho_C_FR_dT * pCap *
627 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
628 ip_cv.beta_p_SR() +
629 rho_C_FR * pCap * ip_cv.porosity_d_data.dphi_dT * ip_cv.beta_p_SR();
630
631 ip_cv.dadvection_C_dp_GR =
c.drho_C_GR_dp_GR * k_over_mu_G
632
633
634 +
c.drho_C_LR_dp_GR * k_over_mu_L;
635
636 ip_cv.dadvection_C_dp_cap =
637
638 current_state.constituent_density_data.rho_C_GR *
639 ip_cv.dk_over_mu_G_dp_cap +
640 (-
c.drho_C_LR_dp_LR) * k_over_mu_L +
641 current_state.constituent_density_data.rho_C_LR *
642 ip_cv.dk_over_mu_L_dp_cap;
643
644 ip_cv.dfC_4_LCpG_dT =
645 c.drho_C_GR_dT * k_over_mu_G +
c.drho_C_LR_dT * k_over_mu_L
646
647 ;
648
649 double const drho_W_FR_dp_GR =
650
651
652 s_G *
c.drho_W_GR_dp_GR +
653
654 s_L *
c.drho_W_LR_dp_GR;
655 double const drho_W_FR_dp_cap =
656 ds_G_dp_cap * current_state.constituent_density_data.rho_W_GR +
657 s_G *
c.drho_W_GR_dp_cap +
658 ip_cv.dS_L_dp_cap() * current_state.rho_W_LR() -
659 s_L *
c.drho_W_LR_dp_LR;
660 double const drho_W_FR_dT = s_G *
c.drho_W_GR_dT + s_L *
c.drho_W_LR_dT;
661
662 ip_cv.dfW_2a_dp_GR =
663 ip_out.porosity_data.phi * (
c.drho_W_LR_dp_GR -
c.drho_W_GR_dp_GR);
664 ip_cv.dfW_2b_dp_GR = drho_W_FR_dp_GR * pCap *
665 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
666 ip_cv.beta_p_SR();
667 ip_cv.dfW_2a_dp_cap = ip_out.porosity_data.phi *
668 (-
c.drho_W_LR_dp_LR -
c.drho_W_GR_dp_cap);
669 ip_cv.dfW_2b_dp_cap =
670 drho_W_FR_dp_cap * pCap *
671 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
672 ip_cv.beta_p_SR() +
673 rho_W_FR * (ip_cv.biot_data() - ip_out.porosity_data.phi) *
674 ip_cv.beta_p_SR();
675
676 ip_cv.dfW_2a_dT =
677 ip_cv.porosity_d_data.dphi_dT *
678 (current_state.rho_W_LR() -
679 current_state.constituent_density_data.rho_W_GR) +
680 ip_out.porosity_data.phi * (
c.drho_W_LR_dT -
c.drho_W_GR_dT);
681 ip_cv.dfW_2b_dT =
682 drho_W_FR_dT * pCap *
683 (ip_cv.biot_data() - ip_out.porosity_data.phi) *
684 ip_cv.beta_p_SR() -
685 rho_W_FR * pCap * ip_cv.porosity_d_data.dphi_dT * ip_cv.beta_p_SR();
686
687 if (dt == 0.)
688 {
689 ip_cv.dfW_3a_dp_GR = 0.;
690 ip_cv.dfW_3a_dp_cap = 0.;
691 ip_cv.dfW_3a_dT = 0.;
692 }
693 else
694 {
695 double const rho_W_GR_dot =
696 (current_state.constituent_density_data.rho_W_GR -
697 prev_state.constituent_density_data->rho_W_GR) /
698 dt;
699 double const rho_W_LR_dot =
700 (current_state.rho_W_LR() - **prev_state.rho_W_LR) / dt;
701
702 ip_cv.dfW_3a_dp_GR =
703 s_G *
c.drho_W_GR_dp_GR /
704 dt +
705 s_L *
c.drho_W_LR_dp_GR /
706 dt;
707 ip_cv.dfW_3a_dp_cap = ds_G_dp_cap * rho_W_GR_dot +
708 s_G *
c.drho_W_GR_dp_cap / dt +
709 ip_cv.dS_L_dp_cap() * rho_W_LR_dot -
710 s_L *
c.drho_W_LR_dp_LR / dt;
711 ip_cv.dfW_3a_dT =
712 s_G *
c.drho_W_GR_dT / dt + s_L *
c.drho_W_LR_dT / dt;
713 }
714
715 ip_cv.dfW_4_LWpG_a_dp_GR =
c.drho_W_GR_dp_GR * k_over_mu_G
716
717 +
c.drho_W_LR_dp_GR * k_over_mu_L
718
719 ;
720 ip_cv.dfW_4_LWpG_a_dp_cap =
721 c.drho_W_GR_dp_cap * k_over_mu_G +
722 current_state.constituent_density_data.rho_W_GR *
723 ip_cv.dk_over_mu_G_dp_cap +
724 -
c.drho_W_LR_dp_LR * k_over_mu_L +
725 current_state.rho_W_LR() * ip_cv.dk_over_mu_L_dp_cap;
726
727 ip_cv.dfW_4_LWpG_a_dT =
728 c.drho_W_GR_dT * k_over_mu_G
729
730 +
c.drho_W_LR_dT * k_over_mu_L
731
732 ;
733
734
735 ip_cv.dfW_4_LWpG_d_dp_GR =
736 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
737 ip_cv.dfW_4_LWpG_d_dp_cap =
738 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
739 ip_cv.dfW_4_LWpG_d_dT =
740 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
741
742 ip_cv.dfW_4_LWpC_a_dp_GR =
c.drho_W_LR_dp_GR * k_over_mu_L
743
744 ;
745 ip_cv.dfW_4_LWpC_a_dp_cap =
746 -
c.drho_W_LR_dp_LR * k_over_mu_L +
747 current_state.rho_W_LR() * ip_cv.dk_over_mu_L_dp_cap;
748 ip_cv.dfW_4_LWpC_a_dT =
c.drho_W_LR_dT * k_over_mu_L
749
750 ;
751
752
753 ip_cv.dfW_4_LWpC_d_dp_GR =
754 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
755 ip_cv.dfW_4_LWpC_d_dp_cap =
756 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
757 ip_cv.dfW_4_LWpC_d_dT =
758 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
759
760 ip_cv.dfC_4_LCpC_a_dp_GR =
c.drho_C_LR_dp_GR * k_over_mu_L
761
762 ;
763 ip_cv.dfC_4_LCpC_a_dp_cap =
764 -
c.drho_C_LR_dp_LR * k_over_mu_L +
765 current_state.constituent_density_data.rho_C_LR *
766 ip_cv.dk_over_mu_L_dp_cap;
767 ip_cv.dfC_4_LCpC_a_dT =
c.drho_W_LR_dT * k_over_mu_L
768
769 ;
770
771
772 ip_cv.dfC_4_LCpC_d_dp_GR =
773 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
774 ip_cv.dfC_4_LCpC_d_dp_cap =
775 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
776 ip_cv.dfC_4_LCpC_d_dT =
777 Eigen::Matrix<double, DisplacementDim, DisplacementDim>::Zero();
778 }
779
780 return {ip_constitutive_data, ip_constitutive_variables};
781}
double gas_phase_pressure
double liquid_phase_pressure
Eigen::Matrix< double, GlobalDim, GlobalDim > formEigenTensor(MaterialPropertyLib::PropertyDataType const &values)
BaseLib::StrongType< double, struct GasPressureTag > GasPressureData
BaseLib::StrongType< double, struct CapillaryPressureTag > CapillaryPressureData
BaseLib::StrongType< double, struct ReferenceTemperatureTag > ReferenceTemperatureData