43 real(RP),
private :: ATMOS_PHY_SF_BULK_beta = 1.0_rp
55 namelist / param_atmos_phy_sf_bulk / &
56 atmos_phy_sf_bulk_beta
62 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Setup'
63 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Bulk scheme'
67 read(
io_fid_conf,nml=param_atmos_phy_sf_bulk,iostat=ierr)
69 log_info(
"ATMOS_PHY_SF_bulk_setup",*)
'Not found namelist. Default used.'
70 elseif( ierr > 0 )
then
71 log_error(
"ATMOS_PHY_SF_bulk_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_SF_BULK. Check!'
74 log_nml(param_atmos_phy_sf_bulk)
84 IA, IS, IE, JA, JS, JE, &
85 ATM_W, ATM_U, ATM_V, &
86 ATM_TEMP, ATM_PRES, ATM_QV, &
87 SFC_DENS, SFC_TEMP, SFC_PRES, &
88 SFC_Z0M, SFC_Z0H, SFC_Z0E, &
90 SFLX_MW, SFLX_MU, SFLX_MV, &
91 SFLX_SH, SFLX_LH, SFLX_QV, &
92 Ustar, Tstar, Qstar, Wstar, &
100 hydrometeor_lhv => atmos_hydrometeor_lhv
102 saturation_psat_all => atmos_saturation_psat_all
105 bulkflux_diagnose_surface
107 integer,
intent(in) :: ia, is, ie
108 integer,
intent(in) :: ja, js, je
110 real(rp),
intent(in) :: atm_w (ia,ja)
111 real(rp),
intent(in) :: atm_u (ia,ja)
112 real(rp),
intent(in) :: atm_v (ia,ja)
113 real(rp),
intent(in) :: atm_temp(ia,ja)
114 real(rp),
intent(in) :: atm_pres(ia,ja)
115 real(rp),
intent(in) :: atm_qv (ia,ja)
116 real(rp),
intent(in) :: sfc_dens(ia,ja)
117 real(rp),
intent(in) :: sfc_temp(ia,ja)
118 real(rp),
intent(in) :: sfc_pres(ia,ja)
119 real(rp),
intent(in) :: sfc_z0m (ia,ja)
120 real(rp),
intent(in) :: sfc_z0h (ia,ja)
121 real(rp),
intent(in) :: sfc_z0e (ia,ja)
122 real(rp),
intent(in) :: pbl (ia,ja)
123 real(rp),
intent(in) :: atm_z1 (ia,ja)
125 real(rp),
intent(out) :: sflx_mw(ia,ja)
126 real(rp),
intent(out) :: sflx_mu(ia,ja)
127 real(rp),
intent(out) :: sflx_mv(ia,ja)
128 real(rp),
intent(out) :: sflx_sh(ia,ja)
129 real(rp),
intent(out) :: sflx_lh(ia,ja)
130 real(rp),
intent(out) :: sflx_qv(ia,ja)
131 real(rp),
intent(out) :: ustar (ia,ja)
132 real(rp),
intent(out) :: tstar (ia,ja)
133 real(rp),
intent(out) :: qstar (ia,ja)
134 real(rp),
intent(out) :: wstar (ia,ja)
135 real(rp),
intent(out) :: rlmo (ia,ja)
136 real(rp),
intent(out) :: u10 (ia,ja)
137 real(rp),
intent(out) :: v10 (ia,ja)
138 real(rp),
intent(out) :: t2 (ia,ja)
139 real(rp),
intent(out) :: q2 (ia,ja)
141 real(rp) :: sfc_psat (ia,ja)
142 real(rp) :: lhv (ia,ja)
147 real(rp) :: sfc_qv(ia,ja)
149 real(rp) :: fracu10(ia,ja)
150 real(rp) :: fract2 (ia,ja)
151 real(rp) :: fracq2 (ia,ja)
158 log_progress(*)
'atmosphere / physics / surface flux / bulk'
165 call hydrometeor_lhv( ia, is, ie, ja, js, je, &
169 call saturation_psat_all( ia, is, ie, ja, js, je, &
192 sfc_qsat = epsvap * sfc_psat(i,j) / ( sfc_pres(i,j) - ( 1.0_rp-epsvap ) * sfc_psat(i,j) )
194 sfc_qv(i,j) = ( 1.0_rp - atmos_phy_sf_bulk_beta ) * atm_qv(i,j) + atmos_phy_sf_bulk_beta * sfc_qsat
195 uabs = sqrt( atm_w(i,j)**2 + atm_u(i,j)**2 + atm_v(i,j)**2 )
197 call bulkflux( atm_temp(i,j), sfc_temp(i,j), &
198 atm_pres(i,j), sfc_pres(i,j), &
199 atm_qv(i,j), sfc_qv(i,j), &
200 uabs, atm_z1(i,j), pbl(i,j), &
201 sfc_z0m(i,j), sfc_z0h(i,j), sfc_z0e(i,j), &
202 ustar(i,j), tstar(i,j), qstar(i,j), &
203 wstar(i,j), rlmo(i,j), ra, &
204 fracu10(i,j), fract2(i,j), fracq2(i,j) )
207 if ( uabs < eps )
then
208 sflx_mw(i,j) = 0.0_rp
209 sflx_mu(i,j) = 0.0_rp
210 sflx_mv(i,j) = 0.0_rp
212 mflux = -sfc_dens(i,j) * ustar(i,j)**2
213 sflx_mw(i,j) = mflux * atm_w(i,j) / uabs
214 sflx_mu(i,j) = mflux * atm_u(i,j) / uabs
215 sflx_mv(i,j) = mflux * atm_v(i,j) / uabs
219 sflx_sh(i,j) = -sfc_dens(i,j) * ustar(i,j) * tstar(i,j) * cpdry
220 sflx_lh(i,j) = -sfc_dens(i,j) * ustar(i,j) * qstar(i,j) * lhv(i,j)
223 sflx_qv(i,j) = sflx_lh(i,j) / lhv(i,j)
229 call bulkflux_diagnose_surface( ia, is, ie, ja, js, je, &
230 atm_u(:,:), atm_v(:,:), &
231 atm_temp(:,:), atm_qv(:,:), &
232 sfc_temp(:,:), sfc_qv(:,:), &
234 sfc_z0m(:,:), sfc_z0h(:,:), sfc_z0e(:,:), &
235 u10(:,:), v10(:,:), t2(:,:), q2(:,:), &
236 fracu10 = fracu10(:,:), &
237 fract2 = fract2(:,:), fracq2 = fracq2(:,:) )