75 log_info(
"ATMOS_PHY_SF_driver_setup",*)
'Setup' 80 log_info(
"ATMOS_PHY_SF_driver_setup",*)
'Coupler is enabled.' 89 log_error(
"ATMOS_PHY_SF_driver_setup",*)
'invalid Surface flux type(', trim(
atmos_phy_sf_type),
'). CHECK!' 96 log_info(
"ATMOS_PHY_SF_driver_setup",*)
'this component is never called.' 97 log_info(
"ATMOS_PHY_SF_driver_setup",*)
'surface fluxes are set to zero.' 100 sflx_mv(:,:) = 0.0_rp
101 sflx_sh(:,:) = 0.0_rp
102 sflx_lh(:,:) = 0.0_rp
103 log_info(
"ATMOS_PHY_SF_driver_setup",*)
'SFC_TEMP, SFC_albedo is set in ATMOS_PHY_SF_vars.' 107 sflx_qtrc(:,:,:) = 0.0_rp
196 logical,
intent(in) :: update_flag
198 real(RP) :: ATM_W (
ia,
ja)
199 real(RP) :: ATM_U (
ia,
ja)
200 real(RP) :: ATM_V (
ia,
ja)
201 real(RP) :: ATM_DENS(
ia,
ja)
202 real(RP) :: ATM_TEMP(
ia,
ja)
203 real(RP) :: ATM_PRES(
ia,
ja)
204 real(RP) :: ATM_QV (
ia,
ja)
205 real(RP) :: SFLX_QV (
ia,
ja)
206 real(RP) :: us, SFLX_PT
212 if ( update_flag )
then 215 call bottom_estimate(
ka,
ks,
ke, &
220 sfc_dens(:,:), sfc_pres(:,:) )
227 atm_w(i,j) =
w(
ks,i,j)
228 atm_u(i,j) =
u(
ks,i,j)
229 atm_v(i,j) =
v(
ks,i,j)
230 atm_dens(i,j) =
dens(
ks,i,j)
231 atm_temp(i,j) =
temp(
ks,i,j)
232 atm_pres(i,j) =
pres(
ks,i,j)
233 atm_qv(i,j) =
qv(
ks,i,j)
241 atm_w(:,:), atm_u(:,:), atm_v(:,:), &
242 atm_temp(:,:), atm_pres(:,:), atm_qv(:,:), &
243 sfc_dens(:,:), sfc_temp(:,:), sfc_pres(:,:), &
244 sfc_z0m(:,:), sfc_z0h(:,:), sfc_z0e(:,:), &
245 pbl_zi(:,:), z1(:,:), &
246 sflx_mw(:,:), sflx_mu(:,:), sflx_mv(:,:), &
247 sflx_sh(:,:), sflx_lh(:,:), sflx_qv(:,:), &
248 u10(:,:), v10(:,:), t2(:,:), q2(:,:) )
253 atm_w(:,:), atm_u(:,:), atm_v(:,:), atm_temp(:,:), &
254 z1(:,:), sfc_dens(:,:), &
255 sflx_mw(:,:), sflx_mu(:,:), sflx_mv(:,:), &
256 sflx_sh(:,:), sflx_lh(:,:), sflx_qv(:,:), &
258 t2(:,:) = atm_temp(:,:)
259 q2(:,:) = atm_qv(:,:)
264 sflx_qtrc(:,:,
i_qv) = sflx_qv(:,:)
273 us = max( 1.e-6_rp, sqrt( sqrt( sflx_mu(i,j)**2 + sflx_mv(i,j)**2 ) /
dens(
ks,i,j) ) )
276 sflx_pt = sign( max(abs(sflx_pt), eps), sflx_pt )
278 l_mo(i,j) = - us**3 *
pott(
ks,i,j) / ( karman * grav * sflx_pt )
288 momz_t_sf(i,j) = sflx_mw(i,j) / ( cz(
ks+1,i,j) - cz(
ks,i,j) )
289 rhou_t_sf(i,j) = sflx_mu(i,j) / ( fz(
ks,i,j) - fz(
ks-1,i,j) )
290 rhov_t_sf(i,j) = sflx_mv(i,j) / ( fz(
ks,i,j) - fz(
ks-1,i,j) )
291 rhoh_sf(i,j) = sflx_sh(i,j) / ( fz(
ks,i,j) - fz(
ks-1,i,j) )
292 dens_t_sf(i,j) = 0.0_rp
293 rhot_t_sf(i,j) = 0.0_rp
303 work = sflx_qtrc(i,j,iq) / ( fz(
ks,i,j) - fz(
ks-1,i,j) )
305 rhoq_t_sf(i,j,iq) = work
306 dens_t_sf(i,j) = dens_t_sf(i,j) + work *
tracer_mass(iq)
318 momz_t(
ks,i,j) = momz_t(
ks,i,j) + momz_t_sf(i,j)
319 rhou_t(
ks,i,j) = rhou_t(
ks,i,j) + rhou_t_sf(i,j)
320 rhov_t(
ks,i,j) = rhov_t(
ks,i,j) + rhov_t_sf(i,j)
321 rhoh(
ks,i,j) = rhoh(
ks,i,j) + rhoh_sf(i,j)
330 rhoq_t(
ks,i,j,iq) = rhoq_t(
ks,i,j,iq) + rhoq_t_sf(i,j,iq)
332 dens_t(
ks,i,j) = dens_t(
ks,i,j) + dens_t_sf(i,j)
333 rhot_t(
ks,i,j) = rhot_t(
ks,i,j) + rhot_t_sf(i,j)
343 sflx_qtrc(:,:,iq),
'SFLX_'//trim(
tracer_name(iq)), &
350 dens_t_sf(:,:),
'DENS_t_SF', &
354 momz_t_sf(:,:),
'MOMZ_t_SF', &
358 rhou_t_sf(:,:),
'RHOU_t_SF', &
362 rhov_t_sf(:,:),
'RHOV_t_SF', &
366 rhoh_sf(:,:),
'RHOH_SF', &
372 rhot_t_sf(:,:),
'RHOT_t_SF', &
377 rhoq_t_sf(:,:,iq), trim(
tracer_name(iq))//
'_t_SF', &
394 barometric_law_mslp => atmos_hydrostatic_barometric_law_mslp
427 real(RP) :: MSLP (
ia,
ja)
428 real(RP) :: Uabs10(
ia,
ja)
429 real(RP) :: U10m (
ia,
ja)
430 real(RP) :: V10m (
ia,
ja)
439 uabs10(i,j) = sqrt( u10(i,j)**2 + v10(i,j)**2 )
440 u10m(i,j) = u10(i,j) * rotc(i,j,1) - v10(i,j) * rotc(i,j,2)
441 v10m(i,j) = u10(i,j) * rotc(i,j,2) + v10(i,j) * rotc(i,j,1)
451 call file_history_in( sfc_dens(:,:),
'SFC_DENS',
'surface atmospheric density',
'kg/m3' )
452 call file_history_in( sfc_pres(:,:),
'SFC_PRES',
'surface atmospheric pressure',
'Pa' )
453 call file_history_in( sfc_temp(:,:),
'SFC_TEMP',
'surface skin temperature (merged)',
'K' )
454 call file_history_in( sfc_albedo(:,:,
i_r_direct ,
i_r_ir ),
'SFC_ALB_IR_dir' ,
'surface albedo (IR; direct; merged)',
'1' , fill_halo=.true. )
455 call file_history_in( sfc_albedo(:,:,
i_r_diffuse,
i_r_ir ),
'SFC_ALB_IR_dif' ,
'surface albedo (IR; diffuse; merged)',
'1' , fill_halo=.true. )
456 call file_history_in( sfc_albedo(:,:,
i_r_direct ,
i_r_nir),
'SFC_ALB_NIR_dir',
'surface albedo (NIR; direct; merged)',
'1' , fill_halo=.true. )
457 call file_history_in( sfc_albedo(:,:,
i_r_diffuse,
i_r_nir),
'SFC_ALB_NIR_dif',
'surface albedo (NIR; diffuse; merged)',
'1' , fill_halo=.true. )
458 call file_history_in( sfc_albedo(:,:,
i_r_direct ,
i_r_vis),
'SFC_ALB_VIS_dir',
'surface albedo (VIS; direct; merged)',
'1' , fill_halo=.true. )
459 call file_history_in( sfc_albedo(:,:,
i_r_diffuse,
i_r_vis),
'SFC_ALB_VIS_dif',
'surface albedo (VIS; diffuse; merged)',
'1' , fill_halo=.true. )
460 call file_history_in( sfc_z0m(:,:),
'SFC_Z0M',
'roughness length (momentum)',
'm' , fill_halo=.true. )
461 call file_history_in( sfc_z0h(:,:),
'SFC_Z0H',
'roughness length (heat)',
'm' , fill_halo=.true. )
462 call file_history_in( sfc_z0e(:,:),
'SFC_Z0E',
'roughness length (vapor)',
'm' , fill_halo=.true. )
463 call file_history_in( sflx_mw(:,:),
'MWFLX',
'w-momentum flux (merged)',
'kg/m/s2' )
464 call file_history_in( sflx_mu(:,:),
'MUFLX',
'u-momentum flux (merged)',
'kg/m/s2' )
465 call file_history_in( sflx_mv(:,:),
'MVFLX',
'v-momentum flux (merged)',
'kg/m/s2' )
466 call file_history_in( sflx_sh(:,:),
'SHFLX',
'sensible heat flux (merged)',
'W/m2' , fill_halo=.true. )
467 call file_history_in( sflx_lh(:,:),
'LHFLX',
'latent heat flux (merged)',
'W/m2' , fill_halo=.true. )
468 call file_history_in( sflx_gh(:,:),
'GHFLX',
'ground heat flux (merged)',
'W/m2' , fill_halo=.true. )
471 call file_history_in( sflx_qtrc(:,:,iq),
'SFLX_'//trim(
tracer_name(iq)), &
472 'surface '//trim(
tracer_name(iq))//
' flux (merged)', &
473 'kg/m2/s' , fill_halo=.true. )
476 call file_history_in( uabs10(:,:),
'Uabs10',
'10m absolute wind',
'm/s' , fill_halo=.true. )
477 call file_history_in( u10(:,:),
'U10',
'10m x-wind',
'm/s' , fill_halo=.true. )
478 call file_history_in( v10(:,:),
'V10',
'10m y-wind',
'm/s' , fill_halo=.true. )
479 call file_history_in( u10m(:,:),
'U10m',
'10m eastward wind',
'm/s' , fill_halo=.true. )
480 call file_history_in( v10m(:,:),
'V10m',
'10m northward wind',
'm/s' , fill_halo=.true. )
481 call file_history_in( t2(:,:),
'T2 ',
'2m air temperature',
'K' , fill_halo=.true. )
482 call file_history_in( q2(:,:),
'Q2 ',
'2m specific humidity',
'kg/kg', fill_halo=.true. )
483 call file_history_in( mslp(:,:),
'MSLP',
'mean sea-level pressure',
'Pa' , fill_halo=.true., standard_name=
'air_pressure_at_mean_sea_level' )
real(rp), dimension(:,:,:), allocatable, public dens_tp
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_rhou_t
subroutine, public atmos_bottom_estimate(KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, PRES, CZ, Zsfc, Z1, SFC_DENS, SFC_PRES)
Calc bottom boundary of atmosphere (just above surface)
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_rhot_t
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_z0e
module coupler / surface-atmospehre
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_rhoh
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_mw
real(rp), dimension(:,:,:), allocatable, target, public rhot
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_momz_t
subroutine, public atmos_phy_sf_driver_calc_tendency(update_flag)
calculation tendency
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_v10
integer, public ia
of whole cells: x, local, with HALO
integer, parameter, public i_r_vis
module atmosphere / bottom boundary extrapolation
module Atmosphere Grid CartesianC metirc
module ATMOSPHERIC Variables
module ATMOSPHERE / Physics Surface fluxes
real(rp), dimension(:,:,:), allocatable, public rhot_tp
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_temp
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_fz
geopotential height [m] (wxy)
integer, public ja
of whole cells: y, local, with HALO
real(rp), dimension(:,:,:), allocatable, target, public dens
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_mv
real(rp), parameter, public const_karman
von Karman constant
real(rp), dimension(:,:,:), allocatable, public rhov_tp
character(len=h_short), dimension(qa_max), public tracer_name
logical, public statistics_checktotal
calc&report variable totals to logfile?
real(rp), dimension(:,:,:), allocatable, public rhoh_p
real(rp), public const_undef
subroutine, public atmos_phy_sf_const_flux(IA, IS, IE, JA, JS, JE, ATM_W, ATM_U, ATM_V, ATM_TEMP, ATM_Z1, SFC_DENS, SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, SFLX_QV, U10, V10)
Constant flux.
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.
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_lw_dn
real(rp), dimension(:,:), allocatable, public atmos_grid_cartesc_real_z1
Height of the lowermost grid from surface (cell center) [m].
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_l_mo
module Atmosphere / Physics Radiation
integer, public is
start point of inner domain: x, local
real(rp), dimension(:,:,:), allocatable, public atmos_phy_sf_rhoq_t
character(len=h_short), public atmos_phy_sf_type
module ATMOSPHERIC Surface Variables
real(rp), dimension(:,:), allocatable, public atmos_phy_bl_zi
integer, public ie
end point of inner domain: x, local
real(rp), dimension(:,:,:,:), allocatable, public atmos_phy_sf_sfc_albedo
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_u10
logical, public atmos_hydrometeor_dry
module atmosphere / hydrometeor
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_z0h
module atmosphere / grid / cartesC index
integer, public ke
end point of inner domain: z, local
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_sw_dn
real(rp), dimension(:,:,:,:), allocatable, public rhoq_tp
integer, public je
end point of inner domain: y, local
real(rp), dimension(:,:,:), allocatable, target, public temp
real(rp), dimension(:,:,:), allocatable, target, public w
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_lh
subroutine, public atmos_phy_sf_driver_setup
Setup.
module atmosphere / hydrostatic barance
real(rp), public const_grav
standard acceleration of gravity [m/s2]
module atmosphere / physics / PBL
module atmosphere / physics / surface / bulk
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_pres
real(rp), dimension(:,:,:), allocatable, target, public atmos_phy_sf_sflx_qtrc
integer, public ks
start point of inner domain: z, local
subroutine, public atmos_phy_sf_bulk_setup
Setup.
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_metric_rotc
rotation coefficient
real(dp), public time_dtsec_atmos_phy_sf
time interval of physics(surface flux) [sec]
logical, public atmos_sw_phy_sf
subroutine history_output
real(rp), dimension(:,:,:), allocatable, target, public pott
real(rp), dimension(:,:,:), pointer, public dens_av
subroutine, public prc_abort
Abort Process.
real(rp), dimension(:,:,:), allocatable, pointer, target, public qv
integer, public js
start point of inner domain: y, local
integer, parameter, public i_r_direct
real(rp), dimension(:,:,:), allocatable, target, public v
subroutine, public atmos_phy_sf_const_setup
Setup.
real(rp), dimension(:,:,:), allocatable, target, public u
real(rp), dimension(:,:,:), allocatable, public momz_tp
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_sh
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_cz
geopotential height [m] (zxy)
real(rp), public const_eps
small number
integer, parameter, public i_r_nir
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_q2
module Atmosphere GRID CartesC Real(real space)
real(rp), dimension(:,:), allocatable, public atmos_grid_cartesc_real_area
horizontal area ( xy, normal z) [m2]
module atmosphere / physics / surface / const
real(rp), dimension(:,:), allocatable, public topo_zsfc
absolute ground height [m]
real(rp), dimension(:,:,:), allocatable, public rhou_tp
integer, public ka
of whole cells: z, local, with HALO
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_rhov_t
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_z0m
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_t2
integer, parameter, public i_r_ir
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_dens_t
real(rp), dimension(:,:,:), pointer, public rhot_av
integer, parameter, public i_r_diffuse
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_dens
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_gh
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sflx_mu
real(rp), dimension(:,:,:), allocatable, target, public pres
real(rp), dimension(qa_max), public tracer_mass
real(rp), public atmos_grid_cartesc_real_totarea
total area (xy, local) [m2]