https://gitlab.opengeosys.org/ogs/ogs.git
Raw File
Tip revision: 24c9c69acc39cb4071852070ab7d1010b388e14b authored by Dmitry Yu. Naumov on 09 March 2021, 13:49:07 UTC
Merge branch 'CIFixTolerancesRMLiakopoulosQN' into 'master'
Tip revision: 24c9c69
WaterVaporProperties.cpp
/**
 *  \copyright
 *   Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org)
 *              Distributed under a Modified BSD License.
 *              See accompanying file LICENSE.txt or
 *              http://www.opengeosys.org/project/license
 *
 * \file
 */

#include "WaterVaporProperties.h"

#include <array>
#include <cmath>

#include "MaterialLib/PhysicalConstant.h"

namespace MaterialLib
{
using PhysicalConstant::IdealGasConstant;
using PhysicalConstant::CelsiusZeroInKelvin;
namespace Fluid
{
static const double temperature_0 = 373.15;  /// reference temperature in [K]
static const double p_0 = 101325.0;          /// reference pressure
static const double h_wg = 2258000.0;  /// latent heat of water evaporation

double WaterVaporProperties::calculateSaturatedVaporPressure(
    const double T) const
{
    return p_0 * std::exp(((1 / temperature_0) - (1 / T)) * _water_mol_mass * h_wg /
                           IdealGasConstant);
}

double WaterVaporProperties::calculateDerivativedPsatdT(const double T) const
{
    return p_0 * (_water_mol_mass * h_wg / IdealGasConstant) * (1. / T / T) *
           std::exp(((1. / temperature_0) - (1. / T)) * _water_mol_mass * h_wg /
                    IdealGasConstant);
}

double WaterVaporProperties::calculateVaporPressureNonwet(
    const double pc, const double T,
    const double mass_density_water) const
{
    const double p_sat = calculateSaturatedVaporPressure(T);
    const double c_w = _water_mol_mass / IdealGasConstant / T;
    return p_sat * std::exp(-pc * c_w / mass_density_water);
}
double WaterVaporProperties::calculateDerivativedPgwdT(
    const double pc, const double T, const double mass_density_water) const
{
    const double c_w = _water_mol_mass / IdealGasConstant / T;
    const double p_sat = calculateSaturatedVaporPressure(T);
    const double dPsatdT = calculateDerivativedPsatdT(T);
    return dPsatdT * std::exp(-pc * c_w / mass_density_water) +
           p_sat * std::exp(-pc * c_w / mass_density_water) *
               (pc * _water_mol_mass / mass_density_water / IdealGasConstant / T / T);
}
double WaterVaporProperties::calculateDerivativedPgwdPC(
    const double pc, const double T, const double mass_density_water) const
{
    const double c_w = _water_mol_mass / IdealGasConstant / T;
    const double p_sat = calculateSaturatedVaporPressure(T);
    return p_sat * std::exp(-pc * c_w / mass_density_water) * (-c_w / mass_density_water);
}
double WaterVaporProperties::calculatedDensityNonwetdT(
    const double p_air_nonwet, const double p_vapor_nonwet, const double pc,
    const double T, const double mass_density_water) const
{
    const double dPgwdT = calculateDerivativedPgwdT(pc, T, mass_density_water);
    return -((p_air_nonwet * _air_mol_mass + p_vapor_nonwet * _water_mol_mass) / IdealGasConstant /
             T / T) +
           (_water_mol_mass - _air_mol_mass) * dPgwdT / IdealGasConstant / T;
}
double WaterVaporProperties::getWaterVaporEnthalpySimple(const double temperature,
    const double heat_capacity_water_vapor,
    const double /*pressure*/,
    const double /*latent_heat_evaporation*/)
{
    return heat_capacity_water_vapor * (temperature - CelsiusZeroInKelvin) +
        h_wg;
}

}  // namespace Fluid
}  // namespace MaterialLib
back to top