Skip to content
Snippets Groups Projects
Commit 31c9cedb authored by Boyan Meng's avatar Boyan Meng Committed by Dmitri Naumov
Browse files

[PL/TH2PP] Hydrodynamic dispersion

parent d11a975d
No related branches found
No related tags found
No related merge requests found
...@@ -33,7 +33,9 @@ void checkMPLProperties( ...@@ -33,7 +33,9 @@ void checkMPLProperties(
MaterialPropertyLib::PropertyType::saturation, MaterialPropertyLib::PropertyType::saturation,
MaterialPropertyLib::PropertyType::relative_permeability, MaterialPropertyLib::PropertyType::relative_permeability,
MaterialPropertyLib::PropertyType:: MaterialPropertyLib::PropertyType::
relative_permeability_nonwetting_phase}; relative_permeability_nonwetting_phase,
MaterialPropertyLib::PropertyType::longitudinal_dispersivity,
MaterialPropertyLib::PropertyType::transversal_dispersivity};
std::array const required_property_solid_phase = { std::array const required_property_solid_phase = {
MaterialPropertyLib::PropertyType::specific_heat_capacity, MaterialPropertyLib::PropertyType::specific_heat_capacity,
......
...@@ -191,6 +191,10 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler< ...@@ -191,6 +191,10 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler<
Eigen::Map<const NodalVectorType>(&local_x[num_nodes], num_nodes); Eigen::Map<const NodalVectorType>(&local_x[num_nodes], num_nodes);
MaterialPropertyLib::VariableArray vars; MaterialPropertyLib::VariableArray vars;
GlobalDimMatrixType const& I(
GlobalDimMatrixType::Identity(GlobalDim, GlobalDim));
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
auto const& ip_data = _ip_data[ip]; auto const& ip_data = _ip_data[ip];
...@@ -657,6 +661,34 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler< ...@@ -657,6 +661,34 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler<
w * N.transpose() * heat_capacity_water * density_wet * w * N.transpose() * heat_capacity_water * density_wet *
velocity_wet.transpose() * dNdx; velocity_wet.transpose() * dNdx;
auto const solute_dispersivity_transverse =
medium.template value<double>(
MaterialPropertyLib::PropertyType::transversal_dispersivity);
auto const solute_dispersivity_longitudinal =
medium.template value<double>(
MaterialPropertyLib::PropertyType::longitudinal_dispersivity);
double const velocity_wet_magnitude = velocity_wet.norm();
GlobalDimMatrixType const hydrodynamic_dispersion =
velocity_wet_magnitude != 0.0
? GlobalDimMatrixType(
(porosity * Sw * diffusion_coeff_contam_wet +
solute_dispersivity_transverse *
velocity_wet_magnitude) *
I +
(solute_dispersivity_longitudinal -
solute_dispersivity_transverse) /
velocity_wet_magnitude * velocity_wet *
velocity_wet.transpose())
: GlobalDimMatrixType(
(porosity * Sw * diffusion_coeff_contam_wet +
solute_dispersivity_transverse *
velocity_wet_magnitude) *
I);
auto const dispersion_operator =
dNdx.transpose() * hydrodynamic_dispersion * dNdx * w;
// The sum of all diffusive fluxes in either phase must equal to zero // The sum of all diffusive fluxes in either phase must equal to zero
Kap.noalias() += Kap.noalias() +=
(mol_density_nonwet * x_air_nonwet * lambda_nonwet) * (mol_density_nonwet * x_air_nonwet * lambda_nonwet) *
...@@ -718,34 +750,26 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler< ...@@ -718,34 +750,26 @@ void ThermalTwoPhaseFlowWithPPLocalAssembler<
(mol_density_wet * x_contam_wet * lambda_wet + (mol_density_wet * x_contam_wet * lambda_wet +
mol_density_nonwet * x_contam_nonwet * lambda_nonwet) * mol_density_nonwet * x_contam_nonwet * lambda_nonwet) *
laplace_operator + laplace_operator +
porosity * mol_density_wet * dispersion_operator * d_x_contam_wet_dpg +
(Sw * mol_density_wet * diffusion_coeff_contam_wet * porosity * (1 - Sw) * mol_density_nonwet *
d_x_contam_wet_dpg + diffusion_coeff_contam_nonwet * d_x_contam_nonwet_dpg *
(1 - Sw) * mol_density_nonwet * diffusion_coeff_contam_nonwet *
d_x_contam_nonwet_dpg) *
diffusion_operator; diffusion_operator;
Kcpc.noalias() += Kcpc.noalias() +=
-mol_density_wet * x_contam_wet * lambda_wet * laplace_operator + -mol_density_wet * x_contam_wet * lambda_wet * laplace_operator +
porosity * mol_density_wet * dispersion_operator * d_x_contam_wet_dpc +
(Sw * mol_density_wet * diffusion_coeff_contam_wet * porosity * (1 - Sw) * mol_density_nonwet *
d_x_contam_wet_dpc + diffusion_coeff_contam_nonwet * d_x_contam_nonwet_dpc *
(1 - Sw) * mol_density_nonwet * diffusion_coeff_contam_nonwet *
d_x_contam_nonwet_dpc) *
diffusion_operator; diffusion_operator;
Kcx.noalias() += Kcx.noalias() +=
porosity * mol_density_wet * dispersion_operator * d_x_contam_wet_dXc +
(Sw * mol_density_wet * diffusion_coeff_contam_wet * porosity * (1 - Sw) * mol_density_nonwet *
d_x_contam_wet_dXc + diffusion_coeff_contam_nonwet * d_x_contam_nonwet_dXc *
(1 - Sw) * mol_density_nonwet * diffusion_coeff_contam_nonwet * diffusion_operator;
d_x_contam_nonwet_dXc) *
diffusion_operator;
Kct.noalias() += Kct.noalias() +=
porosity * mol_density_wet * dispersion_operator * d_x_contam_wet_dT +
(Sw * mol_density_wet * diffusion_coeff_contam_wet * porosity * (1 - Sw) * mol_density_nonwet *
d_x_contam_wet_dT + diffusion_coeff_contam_nonwet * d_x_contam_nonwet_dT *
(1 - Sw) * mol_density_nonwet * diffusion_coeff_contam_nonwet * diffusion_operator;
d_x_contam_nonwet_dT) *
diffusion_operator;
Kep.noalias() += (lambda_nonwet * density_nonwet * enthalpy_nonwet + Kep.noalias() += (lambda_nonwet * density_nonwet * enthalpy_nonwet +
lambda_wet * density_wet * enthalpy_wet) * lambda_wet * density_wet * enthalpy_wet) *
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment