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, &
89 Ustar, Tstar, Qstar, Wstar, &
97 hydrometeor_lhv => atmos_hydrometeor_lhv
99 saturation_psat_all => atmos_saturation_psat_all
102 bulkflux_diagnose_surface
104 integer,
intent(in) :: ia, is, ie
105 integer,
intent(in) :: ja, js, je
107 real(rp),
intent(in) :: atm_w (ia,ja)
108 real(rp),
intent(in) :: atm_u (ia,ja)
109 real(rp),
intent(in) :: atm_v (ia,ja)
110 real(rp),
intent(in) :: atm_temp(ia,ja)
111 real(rp),
intent(in) :: atm_pres(ia,ja)
112 real(rp),
intent(in) :: atm_qv (ia,ja)
113 real(rp),
intent(in) :: sfc_dens(ia,ja)
114 real(rp),
intent(in) :: sfc_temp(ia,ja)
115 real(rp),
intent(in) :: sfc_pres(ia,ja)
116 real(rp),
intent(in) :: sfc_z0m (ia,ja)
117 real(rp),
intent(in) :: sfc_z0h (ia,ja)
118 real(rp),
intent(in) :: sfc_z0e (ia,ja)
119 real(rp),
intent(in) :: pbl (ia,ja)
120 real(rp),
intent(in) :: atm_z1 (ia,ja)
122 real(rp),
intent(out) :: sflx_mw(ia,ja)
123 real(rp),
intent(out) :: sflx_mu(ia,ja)
124 real(rp),
intent(out) :: sflx_mv(ia,ja)
125 real(rp),
intent(out) :: sflx_sh(ia,ja)
126 real(rp),
intent(out) :: sflx_lh(ia,ja)
127 real(rp),
intent(out) :: sflx_qv(ia,ja)
128 real(rp),
intent(out) :: ustar (ia,ja)
129 real(rp),
intent(out) :: tstar (ia,ja)
130 real(rp),
intent(out) :: qstar (ia,ja)
131 real(rp),
intent(out) :: wstar (ia,ja)
132 real(rp),
intent(out) :: rlmo (ia,ja)
133 real(rp),
intent(out) :: u10 (ia,ja)
134 real(rp),
intent(out) :: v10 (ia,ja)
135 real(rp),
intent(out) :: t2 (ia,ja)
136 real(rp),
intent(out) :: q2 (ia,ja)
138 real(rp) :: sfc_psat (ia,ja)
139 real(rp) :: lhv (ia,ja)
144 real(rp) :: sfc_qv(ia,ja)
146 real(rp) :: fracu10(ia,ja)
147 real(rp) :: fract2 (ia,ja)
148 real(rp) :: fracq2 (ia,ja)
155 log_progress(*)
'atmosphere / physics / surface flux / bulk'
157 call hydrometeor_lhv( ia, is, ie, ja, js, je, &
161 call saturation_psat_all( ia, is, ie, ja, js, je, &
181 sfc_qsat = epsvap * sfc_psat(i,j) / ( sfc_pres(i,j) - ( 1.0_rp-epsvap ) * sfc_psat(i,j) )
183 sfc_qv(i,j) = ( 1.0_rp - atmos_phy_sf_bulk_beta ) * atm_qv(i,j) + atmos_phy_sf_bulk_beta * sfc_qsat
184 uabs = sqrt( atm_w(i,j)**2 + atm_u(i,j)**2 + atm_v(i,j)**2 )
186 call bulkflux( atm_temp(i,j), sfc_temp(i,j), &
187 atm_pres(i,j), sfc_pres(i,j), &
188 atm_qv(i,j), sfc_qv(i,j), &
189 uabs, atm_z1(i,j), pbl(i,j), &
190 sfc_z0m(i,j), sfc_z0h(i,j), sfc_z0e(i,j), &
191 ustar(i,j), tstar(i,j), qstar(i,j), &
192 wstar(i,j), rlmo(i,j), ra, &
193 fracu10(i,j), fract2(i,j), fracq2(i,j) )
196 if ( uabs < eps )
then
197 sflx_mw(i,j) = 0.0_rp
198 sflx_mu(i,j) = 0.0_rp
199 sflx_mv(i,j) = 0.0_rp
201 mflux = -sfc_dens(i,j) * ustar(i,j)**2
202 sflx_mw(i,j) = mflux * atm_w(i,j) / uabs
203 sflx_mu(i,j) = mflux * atm_u(i,j) / uabs
204 sflx_mv(i,j) = mflux * atm_v(i,j) / uabs
208 sflx_sh(i,j) = -sfc_dens(i,j) * ustar(i,j) * tstar(i,j) * cpdry
209 sflx_lh(i,j) = -sfc_dens(i,j) * ustar(i,j) * qstar(i,j) * lhv(i,j)
212 sflx_qv(i,j) = sflx_lh(i,j) / lhv(i,j)
217 call bulkflux_diagnose_surface( ia, is, ie, ja, js, je, &
218 atm_u(:,:), atm_v(:,:), &
219 atm_temp(:,:), atm_qv(:,:), &
220 sfc_temp(:,:), sfc_qv(:,:), &
222 sfc_z0m(:,:), sfc_z0h(:,:), sfc_z0e(:,:), &
223 u10(:,:), v10(:,:), t2(:,:), q2(:,:), &
224 fracu10 = fracu10(:,:), &
225 fract2 = fract2(:,:), fracq2 = fracq2(:,:) )