vic/vic_run/src/penman.c
double
penman(double tair,
       double elevation,
       double rad,
       double vpd,
       double ra,
       double rc,
       double rarc)
{
    double evap;                /* Penman-Monteith evapotranspiration */
    double slope;               /* slope of saturated vapor pressure curve */
    double r_air;               /* density of air in kg/m3 */
    double h;                   /* scale height in the atmosphere (m) */
    double lv;                  /* latent heat of vaporization (J/kg) */
    double pz;                  /* surface air pressure */
    double gamma;               /* psychrometric constant (Pa/C) */

    /* calculate the slope of the saturated vapor pressure curve in Pa/K */
    slope = svp_slope(tair);

    /* calculate scale height based on average temperature in the column */
    h = calc_scale_height(tair, elevation);

    /* use hypsometric equation to calculate p_z, assume that virtual
       temperature is equal air_temp */
    pz = CONST_PSTD * exp(-elevation / h);

    /* calculate latent heat of vaporization. Eq. 4.2.1 in Handbook of
       Hydrology, assume Ts is Tair */
    lv = calc_latent_heat_of_vaporization(tair);

    /* calculate gamma. Eq. 4.2.28. Handbook of Hydrology */
    gamma = 1628.6 * pz / lv;

    /* calculate factor to be applied to rc/ra */

    /* calculate the air density, using eq. 4.2.4 Handbook of Hydrology */
    r_air = 0.003486 * pz / (275 + tair);

    /* calculate the evaporation in mm/day (by not dividing by the density
       of water (~1000 kg/m3)), the result ends up being in mm instead of m */

    evap = (slope * rad + r_air * CONST_CPMAIR * vpd / ra) /
           (lv * (slope + gamma * (1 + (rc + rarc) / ra))) * CONST_CDAY;

    if (vpd >= 0.0 && evap < 0.0) {
        evap = 0.0;
    }

    return evap;
}
/******************************************************************************
 * @brief    Calculate daily evapotranspiration using the combination equation.
 *****************************************************************************/
@brief    Calculate daily evapotranspiration using the combination equation.
@brief Calculate daily evapotranspiration using the combination equation .
double
penman(double tair,
       double elevation,
       double rad,
       double vpd,
       double ra,
       double rc,
       double rarc)
{
    double evap;                
    double slope;               
    double r_air;               
    double h;                   
    double lv;                  
    double pz;                  
    double gamma;               
    slope = svp_slope(tair);
    h = calc_scale_height(tair, elevation);
    pz = CONST_PSTD * exp(-elevation / h);
    lv = calc_latent_heat_of_vaporization(tair);
    gamma = 1628.6 * pz / lv;
    r_air = 0.003486 * pz / (275 + tair);
    evap = (slope * rad + r_air * CONST_CPMAIR * vpd / ra) /
           (lv * (slope + gamma * (1 + (rc + rarc) / ra))) * CONST_CDAY;
    if (vpd >= 0.0 && evap < 0.0) {
        evap = 0.0;
    }
    return evap;
}
double penman ( double tair , double elevation , double rad , double vpd , double ra , double rc , double rarc ) { double evap ; double slope ; double r_air ; double h ; double lv ; double pz ; double gamma ; slope = svp_slope ( tair ) ; h = calc_scale_height ( tair , elevation ) ; pz = CONST_PSTD * exp ( - elevation / h ) ; lv = calc_latent_heat_of_vaporization ( tair ) ; gamma = 1628.6 * pz / lv ; r_air = 0.003486 * pz / ( 275 + tair ) ; evap = ( slope * rad + r_air * CONST_CPMAIR * vpd / ra ) / ( lv * ( slope + gamma * ( 1 + ( rc + rarc ) / ra ) ) ) * CONST_CDAY ; if ( vpd >= 0.0 && evap < 0.0 ) { evap = 0.0 ; } return evap ; }
@brief    Calculate daily evapotranspiration using the combination equation.
@brief Calculate daily evapotranspiration using the combination equation .
/* Penman-Monteith evapotranspiration */ /* slope of saturated vapor pressure curve */ /* density of air in kg/m3 */ /* scale height in the atmosphere (m) */ /* latent heat of vaporization (J/kg) */ /* surface air pressure */ /* psychrometric constant (Pa/C) */ /* calculate the slope of the saturated vapor pressure curve in Pa/K */ /* calculate scale height based on average temperature in the column */ /* use hypsometric equation to calculate p_z, assume that virtual
       temperature is equal air_temp */ /* calculate latent heat of vaporization. Eq. 4.2.1 in Handbook of
       Hydrology, assume Ts is Tair */ /* calculate gamma. Eq. 4.2.28. Handbook of Hydrology */ /* calculate factor to be applied to rc/ra */ /* calculate the air density, using eq. 4.2.4 Handbook of Hydrology */ /* calculate the evaporation in mm/day (by not dividing by the density
       of water (~1000 kg/m3)), the result ends up being in mm instead of m */