From a478894636bd417c8bf77004f67f0bdad4a8dd2e Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Thu, 25 Feb 2021 17:09:49 +0100 Subject: [PATCH] [TRM] Added an option of using vapour heat capacity --- .../ThermoRichardsMechanicsFEM-impl.h | 63 +++++++++++++------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h index ebdfa42f847..e9ca1143ca8 100644 --- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h +++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h @@ -335,6 +335,9 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, auto const& medium = process_data_.media_map->getMedium(element_.getID()); auto const& liquid_phase = medium->phase("AqueousLiquid"); auto const& solid_phase = medium->phase("Solid"); + MPL::Phase const* gas_phase = + medium->hasPhase("Gas") ? &medium->phase("Gas") : nullptr; + MPL::VariableArray variables; MPL::VariableArray variables_prev; @@ -734,6 +737,7 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, // // temperature equation. // + GlobalDimVectorType const grad_T_ip = dNdx * T; { auto const specific_heat_capacity_fluid = liquid_phase @@ -771,11 +775,11 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, // temperature equation, pressure part // K_Tp.noalias() -= rho_LR * specific_heat_capacity_fluid * - N.transpose() * (dNdx * T).transpose() * k_rel * + N.transpose() * grad_T_ip.transpose() * k_rel * Ki_over_mu * dNdx * w; K_Tp.noalias() -= rho_LR * specific_heat_capacity_fluid * - N.transpose() * velocity_L.dot(dNdx * T) / k_rel * - dk_rel_dS_L * dS_L_dp_cap * N * w; + N.transpose() * velocity_L.dot(grad_T_ip) / + k_rel * dk_rel_dS_L * dS_L_dp_cap * N * w; } if (liquid_phase.hasProperty(MPL::PropertyType::vapour_diffusion)) @@ -786,26 +790,17 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, liquid_phase.property(MaterialPropertyLib::vapour_density) .template value<double>(variables, x_position, t, dt); - double const drho_wv_dp = - liquid_phase.property(MaterialPropertyLib::vapour_density) - .template dValue<double>(variables, - MPL::Variable::phase_pressure, - x_position, t, dt); - - double const storage_coefficient_by_water_vapor = - phi * (rho_wv * dS_L_dp_cap + (1 - S_L) * drho_wv_dp); - - storage_p_a_p.noalias() += - N.transpose() * storage_coefficient_by_water_vapor * N * w; double const drho_wv_dT = liquid_phase.property(MaterialPropertyLib::vapour_density) .template dValue<double>(variables, MPL::Variable::temperature, x_position, t, dt); - double const vapor_expansion_factor = phi * (1 - S_L) * drho_wv_dT; - M_pT.noalias() += N.transpose() * vapor_expansion_factor * N * w; - + double const drho_wv_dp = + liquid_phase.property(MaterialPropertyLib::vapour_density) + .template dValue<double>(variables, + MPL::Variable::phase_pressure, + x_position, t, dt); auto const f_Tv = liquid_phase .property( @@ -818,6 +813,37 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, .template value<double>(variables, x_position, t, dt); double const f_Tv_D_Tv = f_Tv * D_v * drho_wv_dT; + double const D_pv = D_v * drho_wv_dp; + + if (gas_phase && + gas_phase->hasProperty(MPL::PropertyType::heat_capacity)) + { + // Vapour velocity + GlobalDimVectorType const q_v = + -(f_Tv_D_Tv * grad_T_ip - D_pv * grad_p_cap) / rho_LR; + double const specific_heat_capacity_vapour = + gas_phase + ->property(MaterialPropertyLib::PropertyType:: + specific_heat_capacity) + .template value<double>(variables, x_position, t, dt); + + M_TT.noalias() += + w * + (rho_wv * specific_heat_capacity_vapour * (1 - S_L) * phi) * + N.transpose() * N; + + K_TT.noalias() += N.transpose() * q_v.transpose() * dNdx * + rho_wv * specific_heat_capacity_vapour * w; + } + + double const storage_coefficient_by_water_vapor = + phi * (rho_wv * dS_L_dp_cap + (1 - S_L) * drho_wv_dp); + + storage_p_a_p.noalias() += + N.transpose() * storage_coefficient_by_water_vapor * N * w; + + double const vapor_expansion_factor = phi * (1 - S_L) * drho_wv_dT; + M_pT.noalias() += N.transpose() * vapor_expansion_factor * N * w; local_Jac .template block<pressure_size, temperature_size>( @@ -825,9 +851,8 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, .noalias() += dNdx.transpose() * f_Tv_D_Tv * dNdx * w; local_rhs.template segment<pressure_size>(pressure_index) - .noalias() -= f_Tv_D_Tv * dNdx.transpose() * (dNdx * T) * w; + .noalias() -= f_Tv_D_Tv * dNdx.transpose() * grad_T_ip * w; - double const D_pv = D_v * drho_wv_dp; laplace_p.noalias() += dNdx.transpose() * D_pv * dNdx * w; } } -- GitLab