18 #include "inc_openmp.h" 51 real(RP),
private :: ATMOS_PHY_SF_beta = 1.0_rp
62 character(len=*),
intent(in) :: atmos_phy_sf_type
64 namelist / param_atmos_phy_sf_bulk / &
71 if(
io_l )
write(
io_fid_log,*)
'++++++ Module[SURFACE FLUX] / Categ[ATMOS PHYSICS] / Origin[SCALElib]' 74 if ( atmos_phy_sf_type /=
'BULK' )
then 75 write(*,*)
'xxx ATMOS_PHY_SF_TYPE is not BULK. Check!' 81 read(
io_fid_conf,nml=param_atmos_phy_sf_bulk,iostat=ierr)
83 if(
io_l )
write(
io_fid_log,*)
'*** Not found namelist. Default used.' 84 elseif( ierr > 0 )
then 85 write(*,*)
'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_SF_BULK. Check!' 96 ATM_TEMP, ATM_PRES, ATM_W, ATM_U, ATM_V, &
100 SFC_DENS, SFC_PRES, &
101 SFLX_LW_dn, SFLX_SW_dn, &
102 SFC_TEMP, SFC_albedo, &
103 SFC_Z0M, SFC_Z0H, SFC_Z0E, &
104 SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, &
114 hydrometeor_lhv => atmos_hydrometeor_lhv, &
117 saturation_pres2qsat_all => atmos_saturation_pres2qsat_all
124 real(RP),
intent(in) :: atm_temp (
ia,
ja)
125 real(RP),
intent(in) :: atm_pres (
ia,
ja)
126 real(RP),
intent(in) :: atm_w (
ia,
ja)
127 real(RP),
intent(in) :: atm_u (
ia,
ja)
128 real(RP),
intent(in) :: atm_v (
ia,
ja)
129 real(RP),
intent(in) :: atm_dens (
ia,
ja)
130 real(RP),
intent(in) :: atm_qtrc (
ia,
ja,
qa)
131 real(RP),
intent(in) :: atm_z1 (
ia,
ja)
132 real(DP),
intent(in) :: dt
133 real(RP),
intent(in) :: sfc_dens (
ia,
ja)
134 real(RP),
intent(in) :: sfc_pres (
ia,
ja)
135 real(RP),
intent(in) :: sflx_lw_dn(
ia,
ja)
136 real(RP),
intent(in) :: sflx_sw_dn(
ia,
ja)
137 real(RP),
intent(in) :: sfc_temp (
ia,
ja)
138 real(RP),
intent(in) :: sfc_albedo(
ia,
ja,2)
139 real(RP),
intent(inout) :: sfc_z0m (
ia,
ja)
140 real(RP),
intent(inout) :: sfc_z0h (
ia,
ja)
141 real(RP),
intent(inout) :: sfc_z0e (
ia,
ja)
142 real(RP),
intent(out) :: sflx_mw (
ia,
ja)
143 real(RP),
intent(out) :: sflx_mu (
ia,
ja)
144 real(RP),
intent(out) :: sflx_mv (
ia,
ja)
145 real(RP),
intent(out) :: sflx_sh (
ia,
ja)
146 real(RP),
intent(out) :: sflx_lh (
ia,
ja)
147 real(RP),
intent(out) :: sflx_qtrc (
ia,
ja,
qa)
148 real(RP),
intent(out) :: u10 (
ia,
ja)
149 real(RP),
intent(out) :: v10 (
ia,
ja)
150 real(RP),
intent(out) :: t2 (
ia,
ja)
151 real(RP),
intent(out) :: q2 (
ia,
ja)
153 real(RP) :: atm_qv (
ia,
ja)
154 real(RP) :: sfc_z0m_t(
ia,
ja)
155 real(RP) :: sfc_z0h_t(
ia,
ja)
156 real(RP) :: sfc_z0e_t(
ia,
ja)
157 real(RP) :: sfc_qsat (
ia,
ja)
158 real(RP) :: sfc_qv (
ia,
ja)
159 real(RP) :: lhv (
ia,
ja)
160 real(RP) :: pbl (
ia,
ja)
173 if(
io_l )
write(
io_fid_log,*)
'*** Atmos physics step: Surface flux(bulk)' 186 sfc_z0m(:,:) = sfc_z0m(:,:) + sfc_z0m_t(:,:) * dt
187 sfc_z0h(:,:) = sfc_z0h(:,:) + sfc_z0h_t(:,:) * dt
188 sfc_z0e(:,:) = sfc_z0e(:,:) + sfc_z0e_t(:,:) * dt
190 call hydrometeor_lhv( lhv(:,:), atm_temp(:,:) )
193 atm_qv(:,:) = atm_qtrc(:,:,
i_qv)
195 call saturation_pres2qsat_all( sfc_qsat(:,:), &
199 sfc_qv(:,:) = ( 1.0_rp - atmos_phy_sf_beta ) * atm_qv(:,:) + atmos_phy_sf_beta * sfc_qsat(:,:)
205 sflx_qtrc(:,:,:) = 0.0_rp
231 sflx_mw(i,j) = -atm_dens(i,j) * ustar**2 / uabs * atm_w(i,j)
232 sflx_mu(i,j) = -atm_dens(i,j) * ustar**2 / uabs * atm_u(i,j)
233 sflx_mv(i,j) = -atm_dens(i,j) * ustar**2 / uabs * atm_v(i,j)
236 sflx_sh(i,j) = - atm_dens(i,j) * ustar * tstar &
237 * cpdry * ( sfc_pres(i,j) / pre00 )**( rdry/cpdry )
238 sflx_lh(i,j) = - atm_dens(i,j) * ustar * qstar * lhv(i,j)
242 sflx_qtrc(i,j,
i_qv) = sflx_lh(i,j) / lhv(i,j)
251 u10(i,j) = atm_u(i,j) * log( 10.0_rp / sfc_z0m(i,j) ) / log( atm_z1(i,j) / sfc_z0m(i,j) )
252 v10(i,j) = atm_v(i,j) * log( 10.0_rp / sfc_z0m(i,j) ) / log( atm_z1(i,j) / sfc_z0m(i,j) )
253 t2(i,j) = sfc_temp(i,j) + ( atm_temp(i,j) - sfc_temp(i,j) ) &
254 * ( log( 2.0_rp / sfc_z0m(i,j) ) * log( 2.0_rp / sfc_z0h(i,j) ) ) &
255 / ( log( atm_z1(i,j) / sfc_z0m(i,j) ) * log( atm_z1(i,j) / sfc_z0h(i,j) ) )
256 q2(i,j) = sfc_qv(i,j) + ( atm_qv(i,j) - sfc_qv(i,j) ) &
257 * ( log( 2.0_rp / sfc_z0m(i,j) ) * log( 2.0_rp / sfc_z0e(i,j) ) ) &
258 / ( log( atm_z1(i,j) / sfc_z0m(i,j) ) * log( atm_z1(i,j) / sfc_z0e(i,j) ) )
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
subroutine, public atmos_phy_sf_bulk_setup(ATMOS_PHY_SF_TYPE)
Setup.
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
module ATMOSPHERE / Saturation adjustment
subroutine, public prc_mpistop
Abort MPI.
logical, public io_l
output log or not? (this process)
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
logical, public io_nml
output log or not? (for namelist, this process)
integer, public ia
of whole cells: x, local, with HALO
real(rp), public const_pre00
pressure reference [Pa]
procedure(bc), pointer, public bulkflux
integer, public js
start point of inner domain: y, local
module ATMOSPHERE / Physics Surface fluxes
procedure(rl), pointer, public roughness
integer, public ie
end point of inner domain: x, local
subroutine, public atmos_phy_sf_bulk(ATM_TEMP, ATM_PRES, ATM_W, ATM_U, ATM_V, ATM_DENS, ATM_QTRC, ATM_Z1, dt, SFC_DENS, SFC_PRES, SFLX_LW_dn, SFLX_SW_dn, SFC_TEMP, SFC_albedo, SFC_Z0M, SFC_Z0H, SFC_Z0E, SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, SFLX_QTRC, U10, V10, T2, Q2)
Calculate surface flux.
module Surface roughness length
integer, public io_fid_conf
Config file ID.
integer, public io_fid_log
Log file ID.
integer, public io_fid_nml
Log file ID (only for output namelist)
integer, public ja
of whole cells: y, local, with HALO