Radiation main.
388 thermodyn_temp_pres => atmos_thermodyn_temp_pres
390 saturation_dens2qsat_liq => atmos_saturation_dens2qsat_liq
404 real(RP),
intent(in) :: dens (
ka,
ia,
ja)
405 real(RP),
intent(in) :: rhot (
ka,
ia,
ja)
406 real(RP),
intent(in) :: qtrc (
ka,
ia,
ja,
qa)
407 real(RP),
intent(in) :: cz (
ka,
ia,
ja)
408 real(RP),
intent(in) :: fz (0:
ka,
ia,
ja)
409 real(RP),
intent(in) :: fact_ocean (
ia,
ja)
410 real(RP),
intent(in) :: fact_land (
ia,
ja)
411 real(RP),
intent(in) :: fact_urban (
ia,
ja)
412 real(RP),
intent(in) :: temp_sfc (
ia,
ja)
413 real(RP),
intent(in) :: albedo_land (
ia,
ja,2)
414 real(RP),
intent(in) :: solins (
ia,
ja)
415 real(RP),
intent(in) :: cossza (
ia,
ja)
416 real(RP),
intent(out) :: flux_rad (
ka,
ia,
ja,2,2,2)
417 real(RP),
intent(out) :: flux_rad_top (
ia,
ja,2,2,2)
418 real(RP),
intent(out) :: flux_rad_sfc_dn(
ia,
ja,2,2)
421 real(RP) :: temp (
ka,
ia,
ja)
422 real(RP) :: pres (
ka,
ia,
ja)
423 real(RP) :: qsat (
ka,
ia,
ja)
425 real(RP) :: cldfrac(
ka,
ia,
ja)
430 real(RP),
parameter :: min_cldfrac = 1.e-8_rp
432 real(RP) :: rhodz_merge (rd_kmax,
ia,
ja)
433 real(RP) :: pres_merge (rd_kmax,
ia,
ja)
434 real(RP) :: temp_merge (rd_kmax,
ia,
ja)
435 real(RP) :: temph_merge (rd_kmax+1,
ia,
ja)
437 real(RP) :: gas_merge (rd_kmax,
ia,
ja,mstrn_ngas)
438 real(RP) :: cfc_merge (rd_kmax,
ia,
ja,mstrn_ncfc)
439 real(RP) :: aerosol_conc_merge(rd_kmax,
ia,
ja,rd_naero )
440 real(RP) :: aerosol_radi_merge(rd_kmax,
ia,
ja,rd_naero )
441 real(RP) :: cldfrac_merge (rd_kmax,
ia,
ja)
444 real(RP) :: flux_rad_merge(rd_kmax+1,
ia,
ja,2,2,mstrn_ncloud)
448 integer :: ihydro, iaero, iq
449 integer :: rd_k, k, i, j, v, ic
452 if(
io_l )
write(
io_fid_log,*)
'*** Physics step: Radiation(mstrnX)' 456 call thermodyn_temp_pres( temp(:,:,:), &
462 call saturation_dens2qsat_liq( qsat(:,:,:), &
470 rh(k,i,j) = qtrc(k,i,j,
i_qv) / qsat(k,i,j)
475 call mp_cloudfraction( cldfrac(:,:,:), &
478 call mp_effectiveradius( mp_re(:,:,:,:), &
483 call ae_effectiveradius( ae_re(:,:,:,:), &
487 call mp_mixingratio( mp_qe(:,:,:,:), &
490 if ( atmos_phy_rd_mstrn_only_qci )
then 493 if ( iq /=
i_qc .AND. iq /=
i_qi )
then 495 mp_qe(:,:,:,ihydro) = 0.0_rp
502 if ( rd_profile_use_climatology )
then 503 call rd_profile_read( rd_kmax, &
518 rd_aerosol_conc(:,:), &
519 rd_aerosol_radi(:,:), &
527 temph_merge(rd_k,i,j) = rd_temph(rd_k)
530 temp(
ke+1,i,j) = temp(
ke,i,j)
531 do rd_k = rd_kadd+1, rd_kmax
532 k =
ks + rd_kmax - rd_k
534 temph_merge(rd_k,i,j) = 0.5_rp * ( temp(k,i,j) + temp(k+1,i,j) )
536 temph_merge(rd_kmax+1,i,j) = temp(
ks,i,j)
544 rhodz_merge(rd_k,i,j) = rd_rhodz(rd_k)
545 pres_merge(rd_k,i,j) = rd_pres(rd_k)
546 temp_merge(rd_k,i,j) = rd_temp(rd_k)
549 do rd_k = rd_kadd+1, rd_kmax
550 k =
ks + rd_kmax - rd_k
552 rhodz_merge(rd_k,i,j) = dens(k,i,j) * ( fz(k,i,j)-fz(k-1,i,j) )
553 pres_merge(rd_k,i,j) = pres(k,i,j) * 1.e-2_rp
554 temp_merge(rd_k,i,j) = temp(k,i,j)
564 gas_merge(rd_k,i,j,v) = rd_gas(rd_k,v)
572 do rd_k = rd_kadd+1, rd_kmax
573 k =
ks + rd_kmax - rd_k
574 zerosw = sign(0.5_rp, qtrc(k,i,j,
i_qv)-eps) + 0.5_rp
575 gas_merge(rd_k,i,j,1) = qtrc(k,i,j,
i_qv) / mvap * mdry / ppm * zerosw
585 cfc_merge(rd_k,i,j,v) = rd_cfc(rd_k,v)
594 cldfrac_merge(rd_k,i,j) = rd_cldfrac(rd_k)
597 do rd_k = rd_kadd+1, rd_kmax
598 k =
ks + rd_kmax - rd_k
600 cldfrac_merge(rd_k,i,j) = 0.5_rp + sign( 0.5_rp, cldfrac(k,i,j)-min_cldfrac )
610 aerosol_conc_merge(rd_k,i,j,v) = rd_aerosol_conc(rd_k,v)
611 aerosol_radi_merge(rd_k,i,j,v) = rd_aerosol_radi(rd_k,v)
620 do rd_k = rd_kadd+1, rd_kmax
621 k =
ks + rd_kmax - rd_k
623 aerosol_conc_merge(rd_k,i,j,ihydro) = max( mp_qe(k,i,j,ihydro), 0.0_rp ) &
624 / mp_dens(ihydro) * rho_std / ppm
625 aerosol_radi_merge(rd_k,i,j,ihydro) = mp_re(k,i,j,ihydro)
635 do rd_k = rd_kadd+1, rd_kmax
636 k =
ks + rd_kmax - rd_k
638 aerosol_conc_merge(rd_k,i,j,
mp_qa+iaero) = max( qtrc(k,i,j,
i_ae2all(iaero)), 0.0_rp ) &
639 /
ae_dens(iaero) * rho_std / ppm
640 aerosol_radi_merge(rd_k,i,j,
mp_qa+iaero) = ae_re(k,i,j,iaero)
648 do rd_k = rd_kadd+1, rd_kmax
649 aerosol_conc_merge(rd_k,i,j,
mp_qa+iaero) = rd_aerosol_conc(rd_k,
mp_qa+iaero)
650 aerosol_radi_merge(rd_k,i,j,
mp_qa+iaero) = rd_aerosol_radi(rd_k,
mp_qa+iaero)
661 call rd_mstrn_dtrn3( rd_kmax, &
671 rhodz_merge(:,:,:), &
674 temph_merge(:,:,:), &
676 gas_merge(:,:,:,:), &
677 cfc_merge(:,:,:,:), &
678 aerosol_conc_merge(:,:,:,:), &
679 aerosol_radi_merge(:,:,:,:), &
681 cldfrac_merge(:,:,:), &
682 albedo_land(:,:,:), &
686 flux_rad_merge(:,:,:,:,:,:), &
687 flux_rad_sfc_dn(:,:,:,:) )
695 do rd_k = rd_kadd+1, rd_kmax+1
696 k =
ks + rd_kmax - rd_k
698 flux_rad(k,i,j,
i_lw,
i_up,ic) = flux_rad_merge(rd_k,i,j,
i_lw,
i_up,ic)
699 flux_rad(k,i,j,
i_lw,
i_dn,ic) = flux_rad_merge(rd_k,i,j,
i_lw,
i_dn,ic)
700 flux_rad(k,i,j,
i_sw,
i_up,ic) = flux_rad_merge(rd_k,i,j,
i_sw,
i_up,ic)
701 flux_rad(k,i,j,
i_sw,
i_dn,ic) = flux_rad_merge(rd_k,i,j,
i_sw,
i_dn,ic)
integer, public is
start point of inner domain: x, local
procedure(cf), pointer, public atmos_phy_mp_cloudfraction
integer, public je
end point of inner domain: y, local
real(rp), parameter, public const_ppm
parts par million
module ATMOSPHERE / Saturation adjustment
module ATMOSPHERE / Physics Aerosol Microphysics
real(rp), public real_basepoint_lat
position of base point in real world [rad,-pi,pi]
logical, public io_l
output log or not? (this process)
module ATMOSPHERE / Physics Cloud Microphysics
integer, public ke
end point of inner domain: z, local
module ATMOSPHERE / Physics Radiation / Vertical profile
integer, parameter, public i_lw
integer, parameter, public i_sw
real(rp), public const_mvap
mass weight (water vapor) [g/mol]
integer, public ia
of x whole cells (local, with HALO)
integer, parameter, public i_dn
integer, public ka
of z whole cells (local, with HALO)
procedure(mr), pointer, public atmos_phy_mp_mixingratio
integer, dimension(:), allocatable, public i_mp2all
integer, public js
start point of inner domain: y, local
procedure(er), pointer, public atmos_phy_mp_effectiveradius
integer, public ks
start point of inner domain: z, local
subroutine, public prof_rapstart(rapname_base, level)
Start raptime.
integer, public ie
end point of inner domain: x, local
real(rp), public const_eps
small number
module ATMOSPHERE / Thermodynamics
real(rp), dimension(:), pointer, public ae_dens
subroutine, public atmos_phy_rd_profile_read(kmax, ngas, ncfc, naero, real_lat, now_date, zh, z, rhodz, pres, presh, temp, temph, gas, cfc, aerosol_conc, aerosol_radi, cldfrac)
Read profile for radiation.
procedure(er), pointer, public atmos_phy_ae_effectiveradius
integer, dimension(6), public time_nowdate
current time [YYYY MM DD HH MM SS]
integer, dimension(:), allocatable, public i_ae2all
integer, public io_fid_log
Log file ID.
real(rp), public const_mdry
mass weight (dry air) [g/mol]
subroutine, public prof_rapend(rapname_base, level)
Save raptime.
real(rp), dimension(:), pointer, public atmos_phy_mp_dens
logical, public atmos_phy_rd_profile_use_climatology
use climatology?
integer, parameter, public i_up
integer, public ja
of y whole cells (local, with HALO)