13 #include "inc_openmp.h" 73 if(
io_l )
write(
io_fid_log,*)
'++++++ Module[DRIVER] / Categ[ATMOS PHY_RD] / Origin[SCALE-RM]' 82 if(
io_l )
write(
io_fid_log,*)
'*** this component is never called.' 83 if(
io_l )
write(
io_fid_log,*)
'*** radiation fluxes are set to zero.' 84 sfcflx_lw_up(:,:) = 0.0_rp
85 sfcflx_lw_dn(:,:) = 0.0_rp
86 sfcflx_sw_up(:,:) = 0.0_rp
87 sfcflx_sw_dn(:,:) = 0.0_rp
88 toaflx_lw_up(:,:) = 0.0_rp
89 toaflx_lw_dn(:,:) = 0.0_rp
90 toaflx_sw_up(:,:) = 0.0_rp
91 toaflx_sw_dn(:,:) = 0.0_rp
92 sflx_rad_dn(:,:,:,:) = 0.0_rp
150 solarins_insolation => atmos_solarins_insolation
195 logical,
intent(in) :: update_flag
197 real(RP) :: temp_t (
ka,
ia,
ja,3)
198 real(RP) :: flux_rad (
ka,
ia,
ja,2,2,2)
199 real(RP) :: flux_rad_top(
ia,
ja,2,2,2)
201 real(RP) :: flux_up (
ka,
ia,
ja,2)
202 real(RP) :: flux_dn (
ka,
ia,
ja,2)
203 real(RP) :: flux_net (
ka,
ia,
ja,2)
204 real(RP) :: flux_net_toa(
ia,
ja,2)
205 real(RP) :: flux_net_sfc(
ia,
ja,2)
207 real(RP) :: sfcflx_lw_up_c(
ia,
ja)
208 real(RP) :: sfcflx_lw_dn_c(
ia,
ja)
209 real(RP) :: sfcflx_sw_up_c(
ia,
ja)
210 real(RP) :: sfcflx_sw_dn_c(
ia,
ja)
211 real(RP) :: toaflx_lw_up_c(
ia,
ja)
212 real(RP) :: toaflx_lw_dn_c(
ia,
ja)
213 real(RP) :: toaflx_sw_up_c(
ia,
ja)
214 real(RP) :: toaflx_sw_dn_c(
ia,
ja)
217 real(RP) :: rthratensw(
ia,
ka,
ja)
218 real(RP) :: sdown3d (
ia,
ka,
ja)
219 real(RP) :: gsw (
ia,
ja)
220 real(RP) :: rho3d (
ia,
ka,
ja)
221 real(RP) :: t3d (
ia,
ka,
ja)
222 real(RP) :: p3d (
ia,
ka,
ja)
223 real(RP) :: pi3d (
ia,
ka,
ja)
224 real(RP) :: dz8w (
ia,
ka,
ja)
225 real(RP) :: qv3d (
ia,
ka,
ja)
226 real(RP) :: qc3d (
ia,
ka,
ja)
227 real(RP) :: qr3d (
ia,
ka,
ja)
228 real(RP) :: qi3d (
ia,
ka,
ja)
229 real(RP) :: qs3d (
ia,
ka,
ja)
230 real(RP) :: qg3d (
ia,
ka,
ja)
231 real(RP) :: flux_rad_org(
ka,
ia,
ja,2,2,2)
238 if ( update_flag )
then 240 call solarins_insolation( solins(:,:), &
262 call rd_heating( flux_rad(:,:,:,:,:,2), &
276 sfcflx_lw_up_c(i,j) = flux_rad(
ks-1,i,j,
i_lw,
i_up,1)
277 sfcflx_lw_dn_c(i,j) = flux_rad(
ks-1,i,j,
i_lw,
i_dn,1)
278 sfcflx_sw_up_c(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_up,1)
279 sfcflx_sw_dn_c(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,1)
281 sfcflx_lw_up(i,j) = flux_rad(
ks-1,i,j,
i_lw,
i_up,2)
282 sfcflx_lw_dn(i,j) = flux_rad(
ks-1,i,j,
i_lw,
i_dn,2)
283 sfcflx_sw_up(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_up,2)
284 sfcflx_sw_dn(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,2)
286 flux_net_sfc(i,j,
i_lw) = sfcflx_lw_up(i,j) - sfcflx_lw_dn(i,j)
287 flux_net_sfc(i,j,
i_sw) = sfcflx_sw_up(i,j) - sfcflx_sw_dn(i,j)
295 toaflx_lw_up_c(i,j) = flux_rad_top(i,j,
i_lw,
i_up,1)
296 toaflx_lw_dn_c(i,j) = flux_rad_top(i,j,
i_lw,
i_dn,1)
297 toaflx_sw_up_c(i,j) = flux_rad_top(i,j,
i_sw,
i_up,1)
298 toaflx_sw_dn_c(i,j) = flux_rad_top(i,j,
i_sw,
i_dn,1)
300 toaflx_lw_up(i,j) = flux_rad_top(i,j,
i_lw,
i_up,2)
301 toaflx_lw_dn(i,j) = flux_rad_top(i,j,
i_lw,
i_dn,2)
302 toaflx_sw_up(i,j) = flux_rad_top(i,j,
i_sw,
i_up,2)
303 toaflx_sw_dn(i,j) = flux_rad_top(i,j,
i_sw,
i_dn,2)
305 flux_net_toa(i,j,
i_lw) = toaflx_lw_up(i,j) - toaflx_lw_dn(i,j)
306 flux_net_toa(i,j,
i_sw) = toaflx_sw_up(i,j) - toaflx_sw_dn(i,j)
314 flux_up(k,i,j,
i_lw) = 0.5_rp * ( flux_rad(k-1,i,j,
i_lw,
i_up,2) + flux_rad(k,i,j,
i_lw,
i_up,2) )
315 flux_dn(k,i,j,
i_lw) = 0.5_rp * ( flux_rad(k-1,i,j,
i_lw,
i_dn,2) + flux_rad(k,i,j,
i_lw,
i_dn,2) )
316 flux_up(k,i,j,
i_sw) = 0.5_rp * ( flux_rad(k-1,i,j,
i_sw,
i_up,2) + flux_rad(k,i,j,
i_sw,
i_up,2) )
317 flux_dn(k,i,j,
i_sw) = 0.5_rp * ( flux_rad(k-1,i,j,
i_sw,
i_dn,2) + flux_rad(k,i,j,
i_sw,
i_dn,2) )
319 flux_net(k,i,j,
i_lw) = flux_up(k,i,j,
i_lw) - flux_dn(k,i,j,
i_lw)
320 flux_net(k,i,j,
i_sw) = flux_up(k,i,j,
i_sw) - flux_dn(k,i,j,
i_sw)
327 flux_rad_org(:,:,:,:,:,:) = flux_rad(:,:,:,:,:,:)
366 t3d(i,k,j) =
temp(k,i,j)
367 rho3d(i,k,j) =
dens(k,i,j)
368 p3d(i,k,j) =
pres(k,i,j)
369 pi3d(i,k,j) = (
pres(k,i,j)/pre00)**(rdry/cpdry)
381 sfc_albedo(:,:,
i_sw), &
406 flux_net_sfc(i,j,
i_sw) = gsw(i,j)
408 flux_rad(k,i,j,
i_sw,
i_up,2) = 0.0_rp
409 flux_rad(k,i,j,
i_sw,
i_dn,2) = sdown3d(i,k,j)
413 flux_rad(k,i,j,
i_sw,
i_dn,2) = sdown3d(i,
ks-1,j)
424 sfcflx_sw_up(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,2) * sfc_albedo(i,j,
i_sw)
425 sfcflx_sw_dn(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,2)
427 toaflx_sw_up(i,j) = 0.0_rp
428 toaflx_sw_dn(i,j) = flux_rad(
ke,i,j,
i_sw,
i_dn,2)
434 flux_net_toa(i,j,
i_sw) = 0.0_rp
436 flux_net(k,i,j,
i_sw) = 0.0_rp
437 flux_up(k,i,j,
i_sw) = 0.0_rp
438 flux_dn(k,i,j,
i_sw) = 0.5_rp * ( flux_rad(k-1,i,j,
i_sw,
i_dn,2) + flux_rad(k,i,j,
i_sw,
i_dn,2) )
445 flux_net_sfc(i,j,
i_sw) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,2)*sfc_albedo(i,j,
i_sw)-flux_rad(
ks-1,i,j,
i_sw,
i_dn,2)
451 call hist_in( solins(:,:),
'SOLINS',
'solar insolation',
'W/m2', nohalo=.true. )
452 call hist_in( cossza(:,:),
'COSZ',
'cos(solar zenith angle)',
'1', nohalo=.true. )
454 call hist_in( sfcflx_lw_up_c(:,:),
'SFLX_LW_up_c',
'SFC upward longwave radiation flux (clr)',
'W/m2', nohalo=.true. )
455 call hist_in( sfcflx_lw_dn_c(:,:),
'SFLX_LW_dn_c',
'SFC downward longwave radiation flux (clr)',
'W/m2', nohalo=.true. )
456 call hist_in( sfcflx_sw_up_c(:,:),
'SFLX_SW_up_c',
'SFC upward shortwave radiation flux (clr)',
'W/m2', nohalo=.true. )
457 call hist_in( sfcflx_sw_dn_c(:,:),
'SFLX_SW_dn_c',
'SFC downward shortwave radiation flux (clr)',
'W/m2', nohalo=.true. )
459 call hist_in( sfcflx_lw_up(:,:),
'SFLX_LW_up',
'SFC upward longwave radiation flux',
'W/m2', nohalo=.true. )
460 call hist_in( sfcflx_lw_dn(:,:),
'SFLX_LW_dn',
'SFC downward longwave radiation flux',
'W/m2', nohalo=.true. )
461 call hist_in( sfcflx_sw_up(:,:),
'SFLX_SW_up',
'SFC upward shortwave radiation flux',
'W/m2', nohalo=.true. )
462 call hist_in( sfcflx_sw_dn(:,:),
'SFLX_SW_dn',
'SFC downward shortwave radiation flux',
'W/m2', nohalo=.true. )
464 call hist_in( toaflx_lw_up_c(:,:),
'TOAFLX_LW_up_c',
'TOA upward longwave radiation flux (clr)',
'W/m2', nohalo=.true. )
465 call hist_in( toaflx_lw_dn_c(:,:),
'TOAFLX_LW_dn_c',
'TOA downward longwave radiation flux (clr)',
'W/m2', nohalo=.true. )
466 call hist_in( toaflx_sw_up_c(:,:),
'TOAFLX_SW_up_c',
'TOA upward shortwave radiation flux (clr)',
'W/m2', nohalo=.true. )
467 call hist_in( toaflx_sw_dn_c(:,:),
'TOAFLX_SW_dn_c',
'TOA downward shortwave radiation flux (clr)',
'W/m2', nohalo=.true. )
469 call hist_in( toaflx_lw_up(:,:),
'TOAFLX_LW_up',
'TOA upward longwave radiation flux',
'W/m2', nohalo=.true. )
470 call hist_in( toaflx_lw_dn(:,:),
'TOAFLX_LW_dn',
'TOA downward longwave radiation flux',
'W/m2', nohalo=.true. )
471 call hist_in( toaflx_sw_up(:,:),
'TOAFLX_SW_up',
'TOA upward shortwave radiation flux',
'W/m2', nohalo=.true. )
472 call hist_in( toaflx_sw_dn(:,:),
'TOAFLX_SW_dn',
'TOA downward shortwave radiation flux',
'W/m2', nohalo=.true. )
474 call hist_in( flux_net_sfc(:,:,
i_lw),
'SLR',
'SFC net longwave radiation flux',
'W/m2', nohalo=.true. )
475 call hist_in( flux_net_sfc(:,:,
i_sw),
'SSR',
'SFC net shortwave radiation flux',
'W/m2', nohalo=.true. )
476 call hist_in( flux_net_toa(:,:,
i_lw),
'OLR',
'TOA net longwave radiation flux',
'W/m2', nohalo=.true. )
477 call hist_in( flux_net_toa(:,:,
i_sw),
'OSR',
'TOA net shortwave radiation flux',
'W/m2', nohalo=.true. )
479 call hist_in( flux_up(:,:,:,
i_lw),
'RADFLUX_LWUP',
'upward longwave radiation flux',
'W/m2', nohalo=.true. )
480 call hist_in( flux_dn(:,:,:,
i_lw),
'RADFLUX_LWDN',
'downward longwave radiation flux',
'W/m2', nohalo=.true. )
481 call hist_in( flux_net(:,:,:,
i_lw),
'RADFLUX_LW',
'net longwave radiation flux',
'W/m2', nohalo=.true. )
482 call hist_in( flux_up(:,:,:,
i_sw),
'RADFLUX_SWUP',
'upward shortwave radiation flux',
'W/m2', nohalo=.true. )
483 call hist_in( flux_dn(:,:,:,
i_sw),
'RADFLUX_SWDN',
'downward shortwave radiation flux',
'W/m2', nohalo=.true. )
484 call hist_in( flux_net(:,:,:,
i_sw),
'RADFLUX_SW',
'net shortwave radiation flux',
'W/m2', nohalo=.true. )
486 call hist_in( sflx_rad_dn(:,:,
i_lw,
i_direct ),
'SFLX_LW_dn_dir',
'SFC downward longwave flux (direct )',
'W/m2', nohalo=.true. )
487 call hist_in( sflx_rad_dn(:,:,
i_lw,
i_diffuse),
'SFLX_LW_dn_dif',
'SFC downward longwave flux (diffuse)',
'W/m2', nohalo=.true. )
488 call hist_in( sflx_rad_dn(:,:,
i_sw,
i_direct ),
'SFLX_SW_dn_dir',
'SFC downward shortwave flux (direct )',
'W/m2', nohalo=.true. )
489 call hist_in( sflx_rad_dn(:,:,
i_sw,
i_diffuse),
'SFLX_SW_dn_dif',
'SFC downward shortwave flux (diffuse)',
'W/m2', nohalo=.true. )
491 call hist_in( temp_t(:,:,:,
i_lw),
'TEMP_t_rd_LW',
'tendency of temp in rd(LW)',
'K/day', nohalo=.true. )
492 call hist_in( temp_t(:,:,:,
i_sw),
'TEMP_t_rd_SW',
'tendency of temp in rd(SW)',
'K/day', nohalo=.true. )
493 call hist_in( temp_t(:,:,:,3 ),
'TEMP_t_rd',
'tendency of temp in rd',
'K/day', nohalo=.true. )
494 call hist_in( rhot_t_rd(:,:,:),
'RHOT_t_RD',
'tendency of RHOT in rd',
'K.kg/m3/s', nohalo=.true. )
497 call hist_in( flux_rad(:,:,:,
i_lw,
i_up,2),
'RFLX_LW_up',
'upward longwave radiation flux (cell face)',
'W/m2', nohalo=.true. )
498 call hist_in( flux_rad(:,:,:,
i_lw,
i_dn,2),
'RFLX_LW_dn',
'downward longwave radiation flux (cell face)',
'W/m2', nohalo=.true. )
499 call hist_in( flux_rad(:,:,:,
i_sw,
i_up,2),
'RFLX_SW_up',
'upward shortwave radiation flux (cell face)',
'W/m2', nohalo=.true. )
500 call hist_in( flux_rad(:,:,:,
i_sw,
i_dn,2),
'RFLX_SW_dn',
'downward shortwave radiation flux (cell face)',
'W/m2', nohalo=.true. )
504 flux_rad(:,:,:,:,:,:) = flux_rad_org(:,:,:,:,:,:)
508 sfcflx_sw_up(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_up,2)
509 sfcflx_sw_dn(i,j) = flux_rad(
ks-1,i,j,
i_sw,
i_dn,2)
511 toaflx_sw_up(i,j) = flux_rad_top(i,j,
i_sw,
i_up,2)
512 toaflx_sw_dn(i,j) = flux_rad_top(i,j,
i_sw,
i_dn,2)
523 rhot_t(k,i,j) = rhot_t(k,i,j) + rhot_t_rd(k,i,j)
529 call stat_total( total, rhot_t_rd(:,:,:),
'RHOT_t_RD' )
integer, public is
start point of inner domain: x, local
logical, public statistics_checktotal
calc&report variable totals to logfile?
subroutine, public atmos_phy_rd_heating(flux_rad, DENS, RHOT, QTRC, FZ, dt, TEMP_t, RHOT_t)
Calc heating rate.
integer, public je
end point of inner domain: y, local
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
subroutine, public prc_mpistop
Abort MPI.
integer, parameter, public i_direct
real(rp), dimension(:,:), allocatable, public landuse_fact_urban
urban factor
real(dp), public time_dtsec_atmos_phy_rd
time interval of physics(radiation ) [sec]
logical, public atmos_sw_phy_rd
real(rp), dimension(:,:,:), allocatable, target, public rhot
logical, public io_l
output log or not? (this process)
procedure(rd), pointer, public atmos_phy_rd
real(rp), dimension(:,:,:), allocatable, public pres
module ATMOSPHERE / Physics Radiation
module ATMOSPHERIC Variables
real(rp), dimension(:,:,:,:), pointer, public qtrc_av
integer, public ke
end point of inner domain: z, local
real(rp), dimension(:,:,:), allocatable, public rhot_tp
real(rp), dimension(:,:,:), allocatable, public atmos_phy_rd_rhot_t
real(rp), dimension(:,:,:), allocatable, public real_fz
geopotential height [m] (cell face )
real(rp), dimension(:,:), allocatable, public atmos_phy_sf_sfc_temp
real(rp), dimension(:,:,:), allocatable, public real_cz
geopotential height [m] (cell center)
real(rp), dimension(:,:,:), allocatable, target, public dens
integer, parameter, public i_diffuse
character(len=h_short), public atmos_phy_rd_type
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_lw_up
subroutine, public atmos_phy_rd_driver_setup
Setup.
integer, parameter, public i_lw
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_toaflx_sw_up
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_lw_dn
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_cossza
module Atmosphere / Physics Radiation
module ATMOSPHERIC Surface Variables
integer, parameter, public i_sw
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_sw_up
integer, public ia
of whole cells: x, local, with HALO
real(rp), dimension(:,:,:), allocatable, public temp
integer, parameter, public i_dn
integer, public ka
of whole cells: z, local, with HALO
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_sflx_sw_dn
real(rp), public const_pre00
pressure reference [Pa]
integer, public time_offset_year
time offset [year]
real(rp), dimension(:,:,:), allocatable, public atmos_phy_sf_sfc_albedo
real(rp), dimension(:,:), allocatable, public landuse_fact_ocean
ocean factor
integer, public js
start point of inner domain: y, local
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_toaflx_lw_dn
module ATMOSPHERE / Physics Radiation
real(rp), dimension(:,:,:), pointer, public dens_av
integer, public ks
start point of inner domain: z, local
subroutine, public prof_rapstart(rapname_base, level)
Start raptime.
real(rp), dimension(:,:,:,:), allocatable, public atmos_phy_rd_sflx_downall
subroutine, public swrad(dt, RTHRATEN, SDOWN3D, GSW, XLAT, XLONG, ALBEDO, rho_phy, T3D, P3D, pi3D, dz8w, solins, cosSZA, QV3D, QC3D, QR3D, QI3D, QS3D, QG3D, F_QV, F_QC, F_QR, F_QI, F_QS, F_QG, icloud, warm_rain)
subroutine, public atmos_phy_rd_driver(update_flag)
Driver.
integer, public ie
end point of inner domain: x, local
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_toaflx_sw_dn
real(rp), dimension(:,:), allocatable, public real_lon
longitude [rad,0-2pi]
subroutine, public atmos_phy_rd_driver_resume
Resume.
subroutine, public atmos_phy_rd_setup(RD_TYPE)
Setup.
module ATMOSPHERE / Physics Radiation
integer, dimension(6), public time_nowdate
current time [YYYY MM DD HH MM SS]
real(rp), dimension(:,:,:), pointer, public rhot_av
real(rp), dimension(:,:), allocatable, public real_lat
latitude [rad,-pi,pi]
real(rp), dimension(:,:), allocatable, public landuse_fact_land
land factor
module ATMOSPHERE / Physics Radiation
integer, public io_fid_log
Log file ID.
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_solins
subroutine, public prof_rapend(rapname_base, level)
Save raptime.
integer, parameter, public i_up
real(rp), dimension(:,:), allocatable, public atmos_phy_rd_toaflx_lw_up
real(rp), dimension(:,:,:,:), allocatable, target, public qtrc
integer, public ja
of whole cells: y, local, with HALO