module atmosphere / saturation
More...
|
subroutine, public | atmos_saturation_setup |
| Setup. More...
|
|
subroutine | atmos_saturation_alpha_0d (temp, alpha) |
| calc liquid/ice separation factor (0D) More...
|
|
subroutine | atmos_saturation_dqs_dtem_dens_liq_1d (KA, KS, KE, temp, dens, dqsdtem) |
|
subroutine | atmos_saturation_dqs_dtem_dens_ice_1d (KA, KS, KE, temp, dens, dqsdtem) |
|
subroutine | atmos_saturation_dqs_dtem_dpre_liq_1d (KA, KS, KE, temp, pres, qdry, dqsat_dT, dqsat_dP) |
|
subroutine | atmos_saturation_dqs_dtem_dpre_ice_1d (KA, KS, KE, temp, pres, qdry, dqsat_dT, dqsat_dP) |
|
subroutine | atmos_saturation_tdew_liq_1d (KA, KS, KE, DENS, TEMP, QV, Tdew, converged) |
|
subroutine | atmos_saturation_pote_0d (DENS, POTT, TEMP, QV, POTE) |
| calculate equivalent potential temperature Bolton, D., 1980: The computation of equivalent potential temperature. Monthly Weather Rev., 108, 1046-1053. PT_E = PT exp( L QV / (CPdry T) f ) f ~ 1.0784 ( 1 + 0.810 QV ) Here T_L is temperature at the lifting condensation level and T_L ~ 55 + 2840 / ( CPdry/Rdry log(T) - log(P_v) - 4.805 ) More...
|
|
subroutine | atmos_saturation_pote_1d (KA, KS, KE, DENS, POTT, TEMP, QV, POTE) |
|
subroutine | atmos_saturation_moist_conversion_dens_all_0d (DENS, Emoist0, TEMP, QV, QC, QI, CPtot, CVtot, converged) |
| Iterative moist conversion (liquid/ice mixture) at constant density (volume) More...
|
|
subroutine | atmos_saturation_moist_conversion_pres_liq_0d (PRES, Entr, Qdry, QV, QC, Rtot, CPtot, TEMP, converged) |
| Iterative moist conversion for liquid water at constant pressure. More...
|
|
module atmosphere / saturation
- Description
- Saturation module
- Author
- Team SCALE
- NAMELIST
-
PARAM_ATMOS_SATURATION
name | type | default value | comment |
ATMOS_SATURATION_ULIMIT_TEMP | real(RP) | 273.15_RP | upper limit temperature |
ATMOS_SATURATION_LLIMIT_TEMP | real(RP) | 233.15_RP | lower limit temperature |
- History Output
- No history output
◆ atmos_saturation_setup()
subroutine, public scale_atmos_saturation::atmos_saturation_setup |
Setup.
Definition at line 215 of file scale_atmos_saturation.F90.
231 namelist / param_atmos_saturation / &
232 atmos_saturation_ulimit_temp, &
233 atmos_saturation_llimit_temp
239 log_info(
"ATMOS_SATURATION_setup",*)
'Setup'
243 read(io_fid_conf,nml=param_atmos_saturation,iostat=ierr)
245 log_info(
"ATMOS_SATURATION_setup",*)
'Not found namelist. Default used.'
246 elseif( ierr > 0 )
then
247 log_error(
"ATMOS_SATURATION_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_SATURATION. Check!'
250 log_nml(param_atmos_saturation)
252 rtem00 = 1.0_rp / tem00
256 cpovr_liq = ( cpvap - cl ) / rvap
257 cpovr_ice = ( cpvap - ci ) / rvap
258 cvovr_liq = ( cvvap - cl ) / rvap
259 cvovr_ice = ( cvvap - ci ) / rvap
261 lovr_liq = lhv00 / rvap
262 lovr_ice = lhs00 / rvap
271 lovr_liq = lhv0 / rvap
272 lovr_ice = lhs0 / rvap
276 dalphadt_const = 1.0_rp / ( atmos_saturation_ulimit_temp - atmos_saturation_llimit_temp )
279 log_info(
"ATMOS_SATURATION_setup",
'(1x,A,F7.2,A,F7.2)')
'Temperature range for liquid/ice mixture : ', &
280 atmos_saturation_llimit_temp,
' - ', &
281 atmos_saturation_ulimit_temp
285 call atmos_saturation_psat_liq( tem_min, psat_min_liq )
286 call atmos_saturation_psat_ice( tem_min, psat_min_ice )
References scale_atmos_hydrometeor::atmos_hydrometeor_setup(), scale_const::const_ci, scale_const::const_cl, scale_const::const_cpvap, scale_const::const_cvvap, scale_const::const_lhs0, scale_const::const_lhs00, scale_const::const_lhv0, scale_const::const_lhv00, scale_const::const_thermodyn_type, scale_io::io_fid_conf, and scale_prc::prc_abort().
Referenced by scale_atmos_adiabat::atmos_adiabat_setup(), mod_rm_driver::rm_driver(), and mod_rm_prep::rm_prep().
◆ atmos_saturation_alpha_0d()
subroutine scale_atmos_saturation::atmos_saturation_alpha_0d |
( |
real(rp), intent(in) |
temp, |
|
|
real(rp), intent(out) |
alpha |
|
) |
| |
calc liquid/ice separation factor (0D)
- Parameters
-
[in] | temp | temperature [K] |
[out] | alpha | liquid/ice separation factor (0-1) |
Definition at line 296 of file scale_atmos_saturation.F90.
298 real(RP),
intent(in) :: temp
299 real(RP),
intent(out) :: alpha
302 alpha = ( temp - atmos_saturation_llimit_temp ) &
303 / ( atmos_saturation_ulimit_temp - atmos_saturation_llimit_temp )
305 alpha = min( max( alpha, 0.0_rp ), 1.0_rp )
◆ atmos_saturation_dqs_dtem_dens_liq_1d()
subroutine scale_atmos_saturation::atmos_saturation_dqs_dtem_dens_liq_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension (ka), intent(in) |
temp, |
|
|
real(rp), dimension (ka), intent(in) |
dens, |
|
|
real(rp), dimension(ka), intent(out) |
dqsdtem |
|
) |
| |
- Parameters
-
[in] | temp | temperature [K] |
[in] | dens | temperature [K] |
[out] | dqsdtem | (d qsw/d T)_{rho} |
Definition at line 1356 of file scale_atmos_saturation.F90.
1357 integer,
intent(in) :: KA, KS, KE
1359 real(RP),
intent(in) :: temp (KA)
1360 real(RP),
intent(in) :: dens (KA)
1362 real(RP),
intent(out) :: dqsdtem(KA)
1368 call atmos_saturation_dqs_dtem_dens_liq_0d( temp(k), dens(k), &
◆ atmos_saturation_dqs_dtem_dens_ice_1d()
subroutine scale_atmos_saturation::atmos_saturation_dqs_dtem_dens_ice_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension (ka), intent(in) |
temp, |
|
|
real(rp), dimension (ka), intent(in) |
dens, |
|
|
real(rp), dimension(ka), intent(out) |
dqsdtem |
|
) |
| |
Definition at line 1446 of file scale_atmos_saturation.F90.
1447 integer,
intent(in) :: KA, KS, KE
1449 real(RP),
intent(in) :: temp (KA)
1450 real(RP),
intent(in) :: dens (KA)
1452 real(RP),
intent(out) :: dqsdtem(KA)
1458 call atmos_saturation_dqs_dtem_dens_ice_0d( temp(k), dens(k), &
◆ atmos_saturation_dqs_dtem_dpre_liq_1d()
subroutine scale_atmos_saturation::atmos_saturation_dqs_dtem_dpre_liq_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension (ka), intent(in) |
temp, |
|
|
real(rp), dimension (ka), intent(in) |
pres, |
|
|
real(rp), dimension (ka), intent(in) |
qdry, |
|
|
real(rp), dimension(ka), intent(out) |
dqsat_dT, |
|
|
real(rp), dimension(ka), intent(out) |
dqsat_dP |
|
) |
| |
Definition at line 1588 of file scale_atmos_saturation.F90.
1589 integer,
intent(in) :: KA, KS, KE
1591 real(RP),
intent(in) :: temp (KA)
1592 real(RP),
intent(in) :: pres (KA)
1593 real(RP),
intent(in) :: qdry (KA)
1595 real(RP),
intent(out) :: dqsat_dT(KA)
1596 real(RP),
intent(out) :: dqsat_dP(KA)
1602 call atmos_saturation_dqs_dtem_dpre_liq_0d( temp(k), pres(k), qdry(k), &
1603 dqsat_dt(k), dqsat_dp(k) )
◆ atmos_saturation_dqs_dtem_dpre_ice_1d()
subroutine scale_atmos_saturation::atmos_saturation_dqs_dtem_dpre_ice_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension (ka), intent(in) |
temp, |
|
|
real(rp), dimension (ka), intent(in) |
pres, |
|
|
real(rp), dimension (ka), intent(in) |
qdry, |
|
|
real(rp), dimension(ka), intent(out) |
dqsat_dT, |
|
|
real(rp), dimension(ka), intent(out) |
dqsat_dP |
|
) |
| |
Definition at line 1690 of file scale_atmos_saturation.F90.
1691 integer,
intent(in) :: KA, KS, KE
1693 real(RP),
intent(in) :: temp (KA)
1694 real(RP),
intent(in) :: pres (KA)
1695 real(RP),
intent(in) :: qdry (KA)
1697 real(RP),
intent(out) :: dqsat_dT(KA)
1698 real(RP),
intent(out) :: dqsat_dP(KA)
1704 call atmos_saturation_dqs_dtem_dpre_ice( temp(k), pres(k), qdry(k), &
1705 dqsat_dt(k), dqsat_dp(k) )
References scale_const::const_undef.
◆ atmos_saturation_tdew_liq_1d()
subroutine scale_atmos_saturation::atmos_saturation_tdew_liq_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension(ka), intent(in) |
DENS, |
|
|
real(rp), dimension(ka), intent(in) |
TEMP, |
|
|
real(rp), dimension (ka), intent(in) |
QV, |
|
|
real(rp), dimension(ka), intent(out) |
Tdew, |
|
|
logical, intent(out) |
converged |
|
) |
| |
Definition at line 1868 of file scale_atmos_saturation.F90.
1868 integer,
intent(in) :: KA, KS, KE
1870 real(RP),
intent(in) :: DENS(KA)
1871 real(RP),
intent(in) :: TEMP(KA)
1872 real(RP),
intent(in) :: QV (KA)
1874 real(RP),
intent(out) :: Tdew(KA)
1875 logical,
intent(out) :: converged
1881 call atmos_saturation_tdew_liq_0d( dens(k), temp(k), qv(k), &
1882 tdew(k), converged )
1883 if ( .not. converged )
exit
References scale_prc::prc_abort().
◆ atmos_saturation_pote_0d()
subroutine scale_atmos_saturation::atmos_saturation_pote_0d |
( |
real(rp), intent(in) |
DENS, |
|
|
real(rp), intent(in) |
POTT, |
|
|
real(rp), intent(in) |
TEMP, |
|
|
real(rp), intent(in) |
QV, |
|
|
real(rp), intent(out) |
POTE |
|
) |
| |
calculate equivalent potential temperature Bolton, D., 1980: The computation of equivalent potential temperature. Monthly Weather Rev., 108, 1046-1053. PT_E = PT exp( L QV / (CPdry T) f ) f ~ 1.0784 ( 1 + 0.810 QV ) Here T_L is temperature at the lifting condensation level and T_L ~ 55 + 2840 / ( CPdry/Rdry log(T) - log(P_v) - 4.805 )
Definition at line 1940 of file scale_atmos_saturation.F90.
1944 atmos_hydrometeor_lhv
1945 real(RP),
intent(in) :: DENS
1946 real(RP),
intent(in) :: POTT
1947 real(RP),
intent(in) :: TEMP
1948 real(RP),
intent(in) :: QV
1950 real(RP),
intent(out) :: POTE
1956 pv = dens * qv * rvap * temp
1957 tl = 55.0_rp + 2840.0_rp / ( cpdry / rdry * log(temp) - log(pv) - 4.805_rp )
1958 call atmos_hydrometeor_lhv( temp, lhv )
1960 pote = pott * exp( lhv * qv / ( cpdry * temp ) &
1961 * 1.0784_rp * ( 1.0_rp + 0.810_rp * qv ) )
References scale_const::const_cpdry, and scale_const::const_rdry.
Referenced by atmos_saturation_pote_1d().
◆ atmos_saturation_pote_1d()
subroutine scale_atmos_saturation::atmos_saturation_pote_1d |
( |
integer, intent(in) |
KA, |
|
|
integer, intent(in) |
KS, |
|
|
integer, intent(in) |
KE, |
|
|
real(rp), dimension(ka), intent(in) |
DENS, |
|
|
real(rp), dimension(ka), intent(in) |
POTT, |
|
|
real(rp), dimension(ka), intent(in) |
TEMP, |
|
|
real(rp), dimension (ka), intent(in) |
QV, |
|
|
real(rp), dimension(ka), intent(out) |
POTE |
|
) |
| |
Definition at line 1971 of file scale_atmos_saturation.F90.
1971 integer,
intent(in) :: KA, KS, KE
1973 real(RP),
intent(in) :: DENS(KA)
1974 real(RP),
intent(in) :: POTT(KA)
1975 real(RP),
intent(in) :: TEMP(KA)
1976 real(RP),
intent(in) :: QV (KA)
1978 real(RP),
intent(out) :: POTE(KA)
1983 call atmos_saturation_pote_0d( dens(k), pott(k), temp(k), qv(k), &
References atmos_saturation_pote_0d(), scale_atmos_hydrometeor::cp_vapor, scale_atmos_hydrometeor::cp_water, scale_atmos_hydrometeor::cv_vapor, scale_atmos_hydrometeor::cv_water, scale_atmos_hydrometeor::lhv, and scale_prc::prc_abort().
◆ atmos_saturation_moist_conversion_dens_all_0d()
subroutine scale_atmos_saturation::atmos_saturation_moist_conversion_dens_all_0d |
( |
real(rp), intent(in) |
DENS, |
|
|
real(rp), intent(in) |
Emoist0, |
|
|
real(rp), intent(inout) |
TEMP, |
|
|
real(rp), intent(inout) |
QV, |
|
|
real(rp), intent(inout) |
QC, |
|
|
real(rp), intent(inout) |
QI, |
|
|
real(rp), intent(inout) |
CPtot, |
|
|
real(rp), intent(inout) |
CVtot, |
|
|
logical, intent(out) |
converged |
|
) |
| |
Iterative moist conversion (liquid/ice mixture) at constant density (volume)
Definition at line 2132 of file scale_atmos_saturation.F90.
2145 real(RP),
intent(in) :: DENS
2146 real(RP),
intent(in) :: Emoist0
2148 real(RP),
intent(inout) :: TEMP
2149 real(RP),
intent(inout) :: QV
2150 real(RP),
intent(inout) :: QC
2151 real(RP),
intent(inout) :: QI
2152 real(RP),
intent(inout) :: CPtot
2153 real(RP),
intent(inout) :: CVtot
2155 logical,
intent(out) :: converged
2160 real(RP) :: QV0, QC0, QI0
2167 real(RP) :: dalpha_dT
2168 real(RP) :: dqsat_dT
2169 real(RP) :: dqc_dT, dqi_dT
2170 real(RP) :: dCVtot_dT
2171 real(RP) :: dEmoist_dT
2174 integer,
parameter :: itelim = 100
2175 real(RP),
parameter :: dtemp_criteria = 0.1_rp**(2+rp/2)
2186 call atmos_saturation_dens2qsat_all( temp, dens, &
2189 if ( qsum <= qsat )
then
2195 temp = ( emoist0 - lhv * qv ) / cvtot
2204 call atmos_saturation_dqs_dtem_dens_all_0d( temp, dens, &
2206 qsat=qsat, alpha=alpha )
2207 call atmos_saturation_dalphadt( temp, dalpha_dt )
2209 dqc_dt = ( qsum - qv ) * dalpha_dt - dqsat_dt * ( alpha )
2210 dqi_dt = -( qsum - qv ) * dalpha_dt - dqsat_dt * ( 1.0_rp-alpha )
2216 demoist_dt = temp * dcvtot_dt + cvtot + dqsat_dt * lhv - dqi_dt *
lhf
2220 qc = ( qsum - qsat ) * ( alpha )
2221 qi = ( qsum - qsat ) * ( 1.0_rp - alpha )
2228 emoist = temp * cvtot + qv * lhv - qi *
lhf
2231 dtemp = ( emoist - emoist0 ) / demoist_dt
2234 if ( abs(dtemp) < dtemp_criteria )
then
2239 if( temp*0.0_rp /= 0.0_rp )
exit
References scale_atmos_hydrometeor::cp_ice, scale_atmos_hydrometeor::cp_vapor, scale_atmos_hydrometeor::cp_water, scale_atmos_hydrometeor::cv_ice, scale_atmos_hydrometeor::cv_vapor, scale_atmos_hydrometeor::cv_water, scale_atmos_hydrometeor::lhf, scale_atmos_hydrometeor::lhv, and scale_prc::prc_abort().
◆ atmos_saturation_moist_conversion_pres_liq_0d()
subroutine scale_atmos_saturation::atmos_saturation_moist_conversion_pres_liq_0d |
( |
real(rp), intent(in) |
PRES, |
|
|
real(rp), intent(in) |
Entr, |
|
|
real(rp), intent(in) |
Qdry, |
|
|
real(rp), intent(inout) |
QV, |
|
|
real(rp), intent(inout) |
QC, |
|
|
real(rp), intent(inout) |
Rtot, |
|
|
real(rp), intent(inout) |
CPtot, |
|
|
real(rp), intent(out) |
TEMP, |
|
|
logical, intent(out) |
converged |
|
) |
| |
Iterative moist conversion for liquid water at constant pressure.
Definition at line 2259 of file scale_atmos_saturation.F90.
2263 atmos_hydrometeor_entr, &
2264 atmos_hydrometeor_entr2temp, &
2268 real(RP),
intent(in) :: PRES
2269 real(RP),
intent(in) :: ENTR
2270 real(RP),
intent(in) :: Qdry
2272 real(RP),
intent(inout) :: QV
2273 real(RP),
intent(inout) :: QC
2274 real(RP),
intent(inout) :: CPtot
2275 real(RP),
intent(inout) :: Rtot
2277 real(RP),
intent(out) :: TEMP
2278 logical,
intent(out) :: converged
2280 real(RP),
parameter :: TEMMIN = 0.1_rp
2281 real(RP),
parameter :: criteria = 1.e-8_rp
2282 integer,
parameter :: itelim = 100
2286 real(RP) :: qsat, psat
2288 real(RP) :: TEMP_ite
2290 real(RP) :: ENTR_ite
2291 real(RP) :: Rtot_ite
2292 real(RP) :: CPtot_ite
2294 real(RP) :: dqsat_dT, dqsat_dP
2296 real(RP) :: TEMP_prev
2297 real(RP) :: dENTR_dT
2303 rtot = rtot + qc * rvap
2308 call atmos_hydrometeor_entr2temp( entr, pres, qsum, 0.0_rp, qdry, &
2312 call atmos_saturation_pres2qsat_liq( temp, pres, qdry, &
2314 if ( qsum <= qsat )
then
2328 call atmos_saturation_dqs_dtem_dpre_liq_0d( temp_ite, pres, qdry, &
2329 dqsat_dt, dqsat_dp, &
2330 qsat=qsat, psat=psat )
2332 qv_ite = min( qsum, qsat )
2334 rtot_ite = rtot - ( qsum - qv_ite ) * rvap
2337 dentr_dt = cptot_ite / temp_ite &
2339 - rvap * log( psat/ psat0 ) &
2343 call atmos_hydrometeor_entr( temp_ite, pres, &
2344 qv_ite, 0.0_rp, qdry, &
2345 rtot_ite, cptot_ite, &
2348 temp_prev = temp_ite
2349 temp_ite = temp_ite - ( entr_ite - entr ) / max( dentr_dt, eps )
2350 temp_ite = max( temp_ite, temmin )
2352 if( abs(temp_ite-temp_prev) < criteria )
then
References scale_const::const_eps, scale_const::const_lhv0, scale_atmos_hydrometeor::cp_vapor, and scale_atmos_hydrometeor::cp_water.
real(rp), parameter, public const_lhv0
latent heat of vaporizaion at 0C [J/kg]
subroutine, public prc_abort
Abort Process.
real(rp), public cp_water
CP for water [J/kg/K].
real(rp), public const_lhs00
latent heat of sublimation at 0K [J/kg]
real(rp), public const_lhv00
latent heat of vaporizaion at 0K [J/kg]
real(rp), public const_eps
small number
module atmosphere / hydrometeor
character(len=h_short), public const_thermodyn_type
internal energy type
real(rp), parameter, public const_cpvap
specific heat (water vapor, constant pressure) [J/kg/K]
real(rp), public cv_vapor
CV for vapor [J/kg/K].
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
real(rp), parameter, public const_ci
specific heat (ice) [J/kg/K]
real(rp), parameter, public const_cl
specific heat (liquid water) [J/kg/K]
real(rp), public const_cvvap
specific heat (water vapor, constant volume) [J/kg/K]
real(rp), public lhf
latent heat of fusion for use [J/kg]
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
real(rp), parameter, public const_lhs0
latent heat of sublimation at 0C [J/kg]
subroutine, public atmos_hydrometeor_setup
Setup.
real(rp), public cp_vapor
CP for vapor [J/kg/K].
real(rp), public cv_water
CV for water [J/kg/K].
real(rp), public cv_ice
CV for ice [J/kg/K].
real(rp), public cp_ice
CP for ice [J/kg/K].