43 real(RP),
private :: atmos_phy_sf_bulk_beta = 1.0_rp
54 namelist / param_atmos_phy_sf_bulk / &
55 atmos_phy_sf_bulk_beta
61 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Setup' 62 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Bulk scheme' 66 read(
io_fid_conf,nml=param_atmos_phy_sf_bulk,iostat=ierr)
68 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Not found namelist. Default used.' 69 elseif( ierr > 0 )
then 70 log_error(
"ATMOS_PHY_SF_bulk_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_SF_BULK. Check!' 73 log_nml(param_atmos_phy_sf_bulk)
81 IA, IS, IE, JA, JS, JE, &
82 ATM_W, ATM_U, ATM_V, &
83 ATM_TEMP, ATM_PRES, ATM_QV, &
84 SFC_DENS, SFC_TEMP, SFC_PRES, &
85 SFC_Z0M, SFC_Z0H, SFC_Z0E, &
87 SFLX_MW, SFLX_MU, SFLX_MV, &
88 SFLX_SH, SFLX_LH, SFLX_QV, &
94 hydrometeor_lhv => atmos_hydrometeor_lhv
96 saturation_psat_all => atmos_saturation_psat_all
100 integer,
intent(in) :: IA, IS, IE
101 integer,
intent(in) :: JA, JS, JE
103 real(RP),
intent(in) :: ATM_W (ia,ja)
104 real(RP),
intent(in) :: ATM_U (ia,ja)
105 real(RP),
intent(in) :: ATM_V (ia,ja)
106 real(RP),
intent(in) :: ATM_TEMP(ia,ja)
107 real(RP),
intent(in) :: ATM_PRES(ia,ja)
108 real(RP),
intent(in) :: ATM_QV (ia,ja)
109 real(RP),
intent(in) :: SFC_DENS(ia,ja)
110 real(RP),
intent(in) :: SFC_TEMP(ia,ja)
111 real(RP),
intent(in) :: SFC_PRES(ia,ja)
112 real(RP),
intent(in) :: SFC_Z0M (ia,ja)
113 real(RP),
intent(in) :: SFC_Z0H (ia,ja)
114 real(RP),
intent(in) :: SFC_Z0E (ia,ja)
115 real(RP),
intent(in) :: PBL (ia,ja)
116 real(RP),
intent(in) :: ATM_Z1 (ia,ja)
118 real(RP),
intent(out) :: SFLX_MW(ia,ja)
119 real(RP),
intent(out) :: SFLX_MU(ia,ja)
120 real(RP),
intent(out) :: SFLX_MV(ia,ja)
121 real(RP),
intent(out) :: SFLX_SH(ia,ja)
122 real(RP),
intent(out) :: SFLX_LH(ia,ja)
123 real(RP),
intent(out) :: SFLX_QV(ia,ja)
124 real(RP),
intent(out) :: U10 (ia,ja)
125 real(RP),
intent(out) :: V10 (ia,ja)
126 real(RP),
intent(out) :: T2 (ia,ja)
127 real(RP),
intent(out) :: Q2 (ia,ja)
129 real(RP) :: SFC_PSAT (ia,ja)
130 real(RP) :: LHV (ia,ja)
147 log_progress(*)
'atmosphere / physics / surface flux / bulk' 150 call hydrometeor_lhv( ia, is, ie, ja, js, je, &
154 call saturation_psat_all( ia, is, ie, ja, js, je, &
172 sfc_qsat = epsvap * sfc_psat(i,j) / ( sfc_pres(i,j) - ( 1.0_rp-epsvap ) * sfc_psat(i,j) )
174 sfc_qv = ( 1.0_rp - atmos_phy_sf_bulk_beta ) * atm_qv(i,j) + atmos_phy_sf_bulk_beta * sfc_qsat
199 sflx_mw(i,j) = -sfc_dens(i,j) * ustar * ustar / uabs * atm_w(i,j)
200 sflx_mu(i,j) = -sfc_dens(i,j) * ustar * ustar / uabs * atm_u(i,j)
201 sflx_mv(i,j) = -sfc_dens(i,j) * ustar * ustar / uabs * atm_v(i,j)
204 sflx_sh(i,j) = -sfc_dens(i,j) * ustar * tstar * cpdry
205 sflx_lh(i,j) = -sfc_dens(i,j) * ustar * qstar * lhv(i,j)
208 sflx_qv(i,j) = sflx_lh(i,j) / lhv(i,j)
216 u10(i,j) = atm_u(i,j) * log( 10.0_rp / sfc_z0m(i,j) ) / log( atm_z1(i,j) / sfc_z0m(i,j) )
217 v10(i,j) = atm_v(i,j) * log( 10.0_rp / sfc_z0m(i,j) ) / log( atm_z1(i,j) / sfc_z0m(i,j) )
218 t2(i,j) = sfc_temp(i,j) + ( atm_temp(i,j) - sfc_temp(i,j) ) &
219 * ( log( 2.0_rp / sfc_z0m(i,j) ) * log( 2.0_rp / sfc_z0h(i,j) ) ) &
220 / ( log( atm_z1(i,j) / sfc_z0m(i,j) ) * log( atm_z1(i,j) / sfc_z0h(i,j) ) )
221 q2(i,j) = sfc_qv + ( atm_qv(i,j) - sfc_qv ) &
222 * ( log( 2.0_rp / sfc_z0m(i,j) ) * log( 2.0_rp / sfc_z0e(i,j) ) ) &
223 / ( log( atm_z1(i,j) / sfc_z0m(i,j) ) * log( atm_z1(i,j) / sfc_z0e(i,j) ) )
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
module atmosphere / saturation
integer, public io_fid_conf
Config file ID.
subroutine, public atmos_phy_sf_bulk_flux(IA, IS, IE, JA, JS, JE, ATM_W, ATM_U, ATM_V, ATM_TEMP, ATM_PRES, ATM_QV, SFC_DENS, SFC_TEMP, SFC_PRES, SFC_Z0M, SFC_Z0H, SFC_Z0E, PBL, ATM_Z1, SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, SFLX_QV, U10, V10, T2, Q2)
Calculate surface flux.
module atmosphere / hydrometeor
procedure(bc), pointer, public bulkflux
module atmosphere / physics / surface / bulk
subroutine, public atmos_phy_sf_bulk_setup
Setup.
real(rp), public const_epsvap
Rdry / Rvap.
subroutine, public prc_abort
Abort Process.