OGS
DiffusionVelocity.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "DiffusionVelocity.h"
5
6namespace ProcessLib::TH2M
7{
9{
10template <int DisplacementDim>
14 MassMoleFractionsData const& mass_mole_fractions_data,
15 PhaseTransitionData const& phase_transition_data,
16 PorosityData const& porosity_data,
17 SaturationData const& S_L_data,
19 DiffusionVelocityData<DisplacementDim>& diffusion_velocity_data) const
20{
21 auto const gradxmWG = phase_transition_data.dxmWG_dpGR * grad_p_GR() +
22 phase_transition_data.dxmWG_dpCap * grad_p_cap() +
23 phase_transition_data.dxmWG_dT * grad_T();
24 auto const gradxmCG = -gradxmWG;
25
26 auto const gradxmWL = phase_transition_data.dxmWL_dpGR * grad_p_GR() +
27 phase_transition_data.dxmWL_dpCap * grad_p_cap() +
28 phase_transition_data.dxmWL_dT * grad_T();
29 auto const gradxmCL = -gradxmWL;
30
31 double const phi_L = S_L_data.S_L * porosity_data.phi;
32 double const phi_G = (1. - S_L_data.S_L) * porosity_data.phi;
33
34 double const phi_G_D_vapour =
35 phi_G * phase_transition_data.diffusion_coefficient_vapour;
36 double const phi_L_D_solute =
37 phi_L * phase_transition_data.diffusion_coefficient_solute;
38
39 if (mass_mole_fractions_data.xmCG == 0)
40 {
41 diffusion_velocity_data.d_CG = GlobalDimVector<DisplacementDim>::Zero();
42 }
43 else
44 {
45 diffusion_velocity_data.d_CG =
46 -phi_G_D_vapour / mass_mole_fractions_data.xmCG * gradxmCG;
47 }
48
49 if (mass_mole_fractions_data.xmCG == 1)
50 {
51 diffusion_velocity_data.d_WG = GlobalDimVector<DisplacementDim>::Zero();
52 }
53 else
54 {
55 diffusion_velocity_data.d_WG =
56 -phi_G_D_vapour / (1 - mass_mole_fractions_data.xmCG) * gradxmWG;
57 }
58
59 if (mass_mole_fractions_data.xmWL == 1)
60
61 {
62 diffusion_velocity_data.d_CL = GlobalDimVector<DisplacementDim>::Zero();
63 }
64 else
65 {
66 diffusion_velocity_data.d_CL =
67 -phi_L_D_solute / (1. - mass_mole_fractions_data.xmWL) * gradxmCL;
68 }
69
70 if (mass_mole_fractions_data.xmWL == 0)
71 {
72 diffusion_velocity_data.d_WL = GlobalDimVector<DisplacementDim>::Zero();
73 }
74 else
75 {
76 diffusion_velocity_data.d_WL =
77 -phi_L_D_solute / mass_mole_fractions_data.xmWL * gradxmWL;
78 }
79}
80
81template struct DiffusionVelocityModel<2>;
82template struct DiffusionVelocityModel<3>;
83} // namespace ConstitutiveRelations
84} // namespace ProcessLib::TH2M
Eigen::Vector< double, DisplacementDim > GlobalDimVector
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct GasPressureGradientTag > GasPressureGradientData
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct TemperatureGradientTag > TemperatureGradientData
BaseLib::StrongType< GlobalDimVector< DisplacementDim >, struct CapillaryPressureGradientTag > CapillaryPressureGradientData
void eval(CapillaryPressureGradientData< DisplacementDim > const &grad_p_cap, GasPressureGradientData< DisplacementDim > const &grad_p_GR, MassMoleFractionsData const &mass_mole_fractions_data, PhaseTransitionData const &phase_transition_data, PorosityData const &porosity_data, SaturationData const &S_L_data, TemperatureGradientData< DisplacementDim > const &grad_T, DiffusionVelocityData< DisplacementDim > &diffusion_velocity_data) const