subroutine RadRRTMGWrapperFluxCore( xy_SurfAlbedo, xyz_DelAtmMass, xyz_Press, xyr_Press, xyz_Temp, xyr_Temp, xyz_QH2OVap, xyz_QH2OLiq, xyz_QH2OSol, xyz_CloudCover, xy_SurfTemp, xyr_RadSUwFlux, xyr_RadSDwFlux, xyr_RadLUwFlux, xyr_RadLDwFlux, xyra_DelRadLUwFlux, xyra_DelRadLDwFlux )
! USE statements
!
! ヒストリデータ出力
! History data output
!
use gtool_historyauto, only: HistoryAutoPut
! 時刻管理
! Time control
!
use timeset, only: TimeN ! ステップ $ t $ の時刻.
! Time of step $ t $.
! 全球一定体積混合比の設定
! Set globally constant volume mixing ratio
!
use set_gcmr, only : SetGCMR
! O3 分布の設定
! Set O3 distribution
!
use set_o3, only: SetO3
!!$ ! 地球大気向け短波放射モデル Ver. 2.6
!!$ ! short wave radiation model for the Earth's atmosphere Ver. 2.6
!!$ !
!!$ use rad_Earth_SW_V2_6, only: RadEarthSWV26Flux
!!$
!!$ ! 地球大気向け長波放射モデル Ver. 2.4
!!$ ! long wave radiation model for the Earth's atmosphere Ver. 2.4
!!$ !
!!$ use rad_Earth_LW_V2_4, only : RadEarthLWV24Flux
#ifdef RRTMG
! RRTMG modules
! RRTMG modules
!
use parrrtm, only : nbndlw
use rrtmg_lw_rad, only : rrtmg_lw
use parrrsw, only : nbndsw, naerec
use rrtmg_sw_rad, only : rrtmg_sw
#endif
! 太陽放射フラックスの設定
! Set solar constant
!
use set_solarconst, only : SetSolarConst
! 短波入射 (太陽入射)
! Short wave (insolation) incoming
!
use rad_short_income, only : RadShortIncome
real(DP), intent(in ) :: xy_SurfAlbedo (0:imax-1, 1:jmax)
real(DP), intent(in ) :: xyz_DelAtmMass (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xyz_Press (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xyr_Press (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(in ) :: xyz_Temp (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xyr_Temp (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(in ) :: xyz_QH2OVap (0:imax-1, 1:jmax, 1:kmax)
! $ q $ . 混合比. Mass mixing ratio of constituents (1)
real(DP), intent(in ) :: xyz_QH2OLiq (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xyz_QH2OSol (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xyz_CloudCover (0:imax-1, 1:jmax, 1:kmax)
real(DP), intent(in ) :: xy_SurfTemp (0:imax-1, 1:jmax)
real(DP), intent(out) :: xyr_RadSUwFlux (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(out) :: xyr_RadSDwFlux (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(out) :: xyr_RadLUwFlux (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(out) :: xyr_RadLDwFlux (0:imax-1, 1:jmax, 0:kmax)
real(DP), intent(out) :: xyra_DelRadLUwFlux(0:imax-1, 1:jmax, 0:kmax, 0:1)
real(DP), intent(out) :: xyra_DelRadLDwFlux(0:imax-1, 1:jmax, 0:kmax, 0:1)
#ifdef RRTMG
! Work variables
!
real(DP) :: VMRCO2
real(DP) :: xyz_QCO2 (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: VMRN2O
real(DP) :: xyz_QN2O (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: VMRCH4
real(DP) :: xyz_QCH4 (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelCO2Mass (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelH2OVapMass(0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelH2OLiqMass(0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelH2OSolMass(0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelO3Mass (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelN2OMass (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_DelCH4Mass (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_CloudWatREff (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xyz_CloudIceREff (0:imax-1, 1:jmax, 1:kmax)
real(DP) :: xy_CloudCoverRand(0:imax-1, 1:jmax)
! ----- Input -----
integer :: ncol
! Number of horizontal columns
integer :: nlay
! Number of model layers
integer :: icld
! Cloud overlap method
! 0: Clear only
! 1: Random
! 2: Maximum/random
! 3: Maximum
integer :: idrv
! Flag for calculation of dFdT, the change
! in upward flux as a function of
! surface temperature [0=off, 1=on]
! 0: Normal forward calculation
! 1: Normal forward calculation with
! duflx_dt and duflxc_dt output
real(DP) :: az_play( 1:imax*jmax, 1:kmax )
! Layer pressures (hPa, mb)
! Dimensions: (ncol,nlay)
real(DP) :: ar_plev( 1:imax*jmax, 0:kmax )
! Interface pressures (hPa, mb)
! Dimensions: (ncol,nlay+1)
real(DP) :: az_tlay( 1:imax*jmax, 1:kmax )
! Layer temperatures (K)
! Dimensions: (ncol,nlay)
real(DP) :: ar_tlev( 1:imax*jmax, 0:kmax )
! Interface temperatures (K)
! Dimensions: (ncol,nlay+1)
real(DP) :: a_tsfc( 1:imax*jmax )
! Surface temperature (K)
! Dimensions: (ncol)
real(DP) :: az_h2ovmr( 1:imax*jmax, 1:kmax )
! H2O volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_o3vmr( 1:imax*jmax, 1:kmax )
! O3 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_co2vmr( 1:imax*jmax, 1:kmax )
! CO2 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_ch4vmr( 1:imax*jmax, 1:kmax )
! Methane volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_n2ovmr( 1:imax*jmax, 1:kmax )
! Nitrous oxide volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_o2vmr( 1:imax*jmax, 1:kmax )
! Oxygen volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_cfc11vmr( 1:imax*jmax, 1:kmax )
! CFC11 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_cfc12vmr( 1:imax*jmax, 1:kmax )
! CFC12 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_cfc22vmr( 1:imax*jmax, 1:kmax )
! CFC22 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: az_ccl4vmr( 1:imax*jmax, 1:kmax )
! CCL4 volume mixing ratio
! Dimensions: (ncol,nlay)
real(DP) :: aa_emis( 1:imax*jmax, 1:kmax )
! Surface emissivity
! Dimensions: (ncol,nbndlw)
integer :: inflglw ! Flag for cloud optical properties
integer :: iceflglw ! Flag for ice particle specification
integer :: liqflglw ! Flag for liquid droplet specification
real(DP) :: az_cldfr( 1:imax*jmax, 1:kmax )
! Cloud fraction
! Dimensions: (ncol,nlay)
real(DP) :: az_cicewp( 1:imax*jmax, 1:kmax )
! Cloud ice water path (g/m2)
! Dimensions: (ncol,nlay)
real(DP) :: az_cliqwp( 1:imax*jmax, 1:kmax )
! Cloud liquid water path (g/m2)
! Dimensions: (ncol,nlay)
real(DP) :: az_reice( 1:imax*jmax, 1:kmax )
! Cloud ice particle effective size (microns)
! Dimensions: (ncol,nlay)
! specific definition of reice depends on setting of iceflglw:
! iceflglw = 0: ice effective radius, r_ec, (Ebert and Curry, 1992),
! r_ec must be >= 10.0 microns
! iceflglw = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
! r_ec range is limited to 13.0 to 130.0 microns
! iceflglw = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
! r_k range is limited to 5.0 to 131.0 microns
! iceflglw = 3: generalized effective size, dge, (Fu, 1996),
! dge range is limited to 5.0 to 140.0 microns
! [dge = 1.0315 * r_ec]
real(DP) :: az_reliq( 1:imax*jmax, 1:kmax )
! Cloud water drop effective radius (microns)
! Dimensions: (ncol,nlay)
real(DP) :: aaz_taucld( 1:nbndlw, 1:imax*jmax, 1:kmax )
! In-cloud optical depth
! Dimensions: (nbndlw,ncol,nlay)
real(DP) :: aza_tauaer( 1:imax*jmax, 1:kmax, 1:nbndlw )
! aerosol optical depth
! Dimensions: (ncol,nlay,nbndlw)
! ----- Output -----
real(DP) :: ar_uflx( 1:imax*jmax, 0:kmax )
! Total sky longwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: ar_dflx( 1:imax*jmax, 0:kmax )
! Total sky longwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: az_hr( 1:imax*jmax, 1:kmax )
! Total sky longwave radiative heating rate (K/d)
! Dimensions: (ncol,nlay)
real(DP) :: ar_uflxc( 1:imax*jmax, 0:kmax )
! Clear sky longwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: ar_dflxc( 1:imax*jmax, 0:kmax )
! Clear sky longwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: az_hrc( 1:imax*jmax, 1:kmax )
! Clear sky longwave radiative heating rate (K/d)
! Dimensions: (ncol,nlay)
! ----- Optional Output -----
real(DP) :: ar_duflx_dt( 1:imax*jmax, 0:kmax )
! change in upward longwave flux (w/m2/k)
! with respect to surface temperature
! Dimensions: (ncol,nlay+1)
real(DP) :: ar_duflxc_dt( 1:imax*jmax, 0:kmax )
! change in clear sky upward longwave flux (w/m2/k)
! with respect to surface temperature
! Dimensions: (ncol,nlay+1)
! ----- Input -----
integer :: iaer
! Aerosol option flag
! 0: No aerosol
! 6: ECMWF method
! 10:Input aerosol optical
! properties
real(DP) :: a_asdir( imax*jmax )
! UV/vis surface albedo direct rad
! Dimensions: (ncol)
real(DP) :: a_aldir( imax*jmax )
! Near-IR surface albedo direct rad
! Dimensions: (ncol)
real(DP) :: a_asdif( imax*jmax )
! UV/vis surface albedo: diffuse rad
! Dimensions: (ncol)
real(DP) :: a_aldif( imax*jmax )
! Near-IR surface albedo: diffuse rad
! Dimensions: (ncol)
integer :: dyofyr
! Day of the year (used to get Earth/Sun
! distance if adjflx not provided)
real(DP) :: adjes
! Flux adjustment for Earth/Sun distance
real(DP) :: a_coszen( imax*jmax )
! Cosine of solar zenith angle
! Dimensions: (ncol)
real(DP) :: scon
! Solar constant (W/m2)
integer :: inflgsw
! Flag for cloud optical properties
integer :: iceflgsw
! Flag for ice particle specification
integer :: liqflgsw
! Flag for liquid droplet specification
real(DP) :: aaz_ssacld( 1:nbndsw, 1:imax*jmax, 1:kmax )
! In-cloud single scattering albedo
! Dimensions: (nbndsw,ncol,nlay)
real(DP) :: aaz_asmcld( 1:nbndsw, 1:imax*jmax, 1:kmax )
! In-cloud asymmetry parameter
! Dimensions: (nbndsw,ncol,nlay)
real(DP) :: aaz_fsfcld( 1:nbndsw, 1:imax*jmax, 1:kmax )
! In-cloud forward scattering fraction
! Dimensions: (nbndsw,ncol,nlay)
real(DP) :: aza_ssaaer( 1:imax*jmax, 1:kmax, 1:nbndsw )
! Aerosol single scattering albedo (iaer=10 only)
! Dimensions: (ncol,nlay,nbndsw)
! (non-delta scaled)
real(DP) :: aza_asmaer( 1:imax*jmax, 1:kmax, 1:nbndsw )
! Aerosol asymmetry parameter (iaer=10 only)
! Dimensions: (ncol,nlay,nbndsw)
! (non-delta scaled)
real(DP) :: aza_ecaer( 1:imax*jmax, 1:kmax, 1:naerec )
! Aerosol optical depth at 0.55 micron (iaer=6 only)
! Dimensions: (ncol,nlay,naerec)
! (non-delta scaled)
! ----- Output -----
real(DP) :: ar_swuflx( 1:imax*jmax, 0:kmax )
! Total sky shortwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: ar_swdflx( 1:imax*jmax, 0:kmax )
! Total sky shortwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: az_swhr( 1:imax*jmax, 1:kmax )
! Total sky shortwave radiative heating rate (K/d)
! Dimensions: (ncol,nlay)
real(DP) :: ar_swuflxc( 1:imax*jmax, 0:kmax )
! Clear sky shortwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: ar_swdflxc( 1:imax*jmax, 0:kmax )
! Clear sky shortwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
real(DP) :: az_swhrc( 1:imax*jmax, 1:kmax )
! Clear sky shortwave radiative heating rate (K/d)
! Dimensions: (ncol,nlay)
real(DP) :: SolarConst
real(DP) :: xy_CosZet (0:imax-1, 1:jmax)
real(DP) :: DistFromStarScld
! Distance between the central star and the planet
real(DP) :: DiurnalMeanFactor
real(DP) :: xyr_RadCSSUwFlux(0:imax-1, 1:jmax, 0:kmax)
real(DP) :: xyr_RadCSSDwFlux(0:imax-1, 1:jmax, 0:kmax)
real(DP) :: xyr_RadCSLUwFlux(0:imax-1, 1:jmax, 0:kmax)
real(DP) :: xyr_RadCSLDwFlux(0:imax-1, 1:jmax, 0:kmax)
integer :: i
integer :: j
integer :: k
integer :: l
! 初期化確認
! Initialization check
!
if ( .not. rad_rrtmg_wrapper_inited ) then
call MessageNotify( 'E', module_name, 'This module has not been initialized.' )
end if
! 全球一定体積混合比の設定
! Set globally constant volume mixing ratio
!
call SetGCMR( 'CO2', VMRCO2 )
xyz_QCO2 = VMRCO2 * CO2MolWeight / MeanMolWeight
! 全球一定体積混合比の設定
! Set globally constant volume mixing ratio
!
call SetGCMR( 'N2O', VMRN2O )
xyz_QN2O = VMRN2O * N2OMolWeight / MeanMolWeight
! 全球一定体積混合比の設定
! Set globally constant volume mixing ratio
!
call SetGCMR( 'CH4', VMRCH4 )
xyz_QCH4 = VMRCH4 * CH4MolWeight / MeanMolWeight
! O3 分布の設定
! Setting of O3 distribution
!
call SetO3( xyz_Press, xyz_QO3 )
!
! Set cloud effective radius
!
xyz_CloudWatREff = CloudWatREff
!
select case ( IDCloudIceREffMethod )
case ( IDCloudIceREffMethodConst )
xyz_CloudIceREff = CloudIceREff
case ( IDCloudIceREffMethodLin )
! This is a simple model mimicing a result of Ou and Liou (1995).
! This was used in MRI model probably.
xyz_CloudIceREff = ( 20.0e-6_DP - 150.0e-6_DP ) / ( ( 273.15_DP - 60.0_DP ) - ( 273.15_DP - 20.0_DP ) ) * ( xyz_Temp - ( 273.15_DP - 20.0_DP ) ) + 150.0e-6_DP
xyz_CloudIceREff = min( max( xyz_CloudIceREff, 20.0e-6_DP ), 150.0e-6_DP )
end select
xyz_DelCO2Mass = xyz_DelAtmMass * xyz_QCO2
xyz_DelH2OVapMass = xyz_DelAtmMass * xyz_QH2OVap
xyz_DelH2OLiqMass = xyz_DelAtmMass * xyz_QH2OLiq
xyz_DelH2OSolMass = xyz_DelAtmMass * xyz_QH2OSol
xyz_DelO3Mass = xyz_DelAtmMass * xyz_QO3
xyz_DelN2OMass = xyz_DelAtmMass * xyz_QN2O
xyz_DelCH4Mass = xyz_DelAtmMass * xyz_QCH4
ncol = imax * jmax
! Number of horizontal columns
nlay = kmax
! Number of model layers
icld = 1
! Cloud overlap method
! 0: Clear only
! 1: Random
! 2: Maximum/random
! 3: Maximum
idrv = 1
! Flag for calculation of dFdT, the change
! in upward flux as a function of
! surface temperature [0=off, 1=on]
! 0: Normal forward calculation
! 1: Normal forward calculation with
! duflx_dt and duflxc_dt output
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
do k = 1, kmax
az_play( l, k ) = xyz_Press(i,j,k) * 1.0e-2_DP
! Layer pressures (hPa, mb)
! Dimensions: (ncol,nlay)
end do
do k = 0, kmax
ar_plev( l, k ) = xyr_Press(i,j,k) * 1.0e-2_DP
! Interface pressures (hPa, mb)
! Dimensions: (ncol,nlay+1)
end do
do k = 1, kmax
az_tlay( l, k ) = xyz_Temp(i,j,k)
! Layer temperatures (K)
! Dimensions: (ncol,nlay)
end do
do k = 0, kmax
ar_tlev( l, k ) = xyr_Temp(i,j,k)
! Interface temperatures (K)
! Dimensions: (ncol,nlay+1)
end do
a_tsfc( l ) = xy_SurfTemp(i,j)
! Surface temperature (K)
! Dimensions: (ncol)
do k = 1, kmax
az_h2ovmr( l, k ) = xyz_QH2OVap(i,j,k) * MeanMolWeight / H2OMolWeight
! H2O volume mixing ratio
! Dimensions: (ncol,nlay)
az_o3vmr( l, k ) = xyz_QO3(i,j,k) * MeanMolWeight / ( 16.0_DP * 3.0_DP * 1.0e-3_DP )
! O3 volume mixing ratio
! Dimensions: (ncol,nlay)
az_co2vmr( l, k ) = xyz_QCO2(i,j,k) * MeanMolWeight / CO2MolWeight
! CO2 volume mixing ratio
! Dimensions: (ncol,nlay)
az_ch4vmr( l, k ) = xyz_QCH4(i,j,k) * MeanMolWeight / CH4MolWeight
! Methane volume mixing ratio
! Dimensions: (ncol,nlay)
az_n2ovmr( l, k ) = xyz_QN2O(i,j,k) * MeanMolWeight / N2OMolWeight
! Nitrous oxide volume mixing ratio
! Dimensions: (ncol,nlay)
az_o2vmr( l, k ) = 0.21_DP
! Oxygen volume mixing ratio
! Dimensions: (ncol,nlay)
az_cfc11vmr( l, k ) = 0.0_DP
! CFC11 volume mixing ratio
! Dimensions: (ncol,nlay)
az_cfc12vmr( l, k ) = 0.0_DP
! CFC12 volume mixing ratio
! Dimensions: (ncol,nlay)
az_cfc22vmr( l, k ) = 0.0_DP
! CFC22 volume mixing ratio
! Dimensions: (ncol,nlay)
az_ccl4vmr( l, k ) = 0.0_DP
! CCL4 volume mixing ratio
! Dimensions: (ncol,nlay)
end do
end do
end do
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
do k = 1, kmax
!!$ az_cldfr( l, k ) = xyz_CloudCover(i,j,k)
az_cldfr( l, k ) = 1.0_DP
! Cloud fraction
! Dimensions: (ncol,nlay)
!!$ az_cicewp( l, k ) = xyz_DelH2OSolMass(i,j,k) * 1.0e3_DP
az_cicewp( l, k ) = xyz_DelH2OSolMass(i,j,k) * 1.0e3_DP * xyz_CloudCover(i,j,k)**1.5
! Cloud ice water path (g/m2)
! Dimensions: (ncol,nlay)
!!$ az_cliqwp( l, k ) = xyz_DelH2OLiqMass(i,j,k) * 1.0e3_DP
az_cliqwp( l, k ) = xyz_DelH2OLiqMass(i,j,k) * 1.0e3_DP * xyz_CloudCover(i,j,k)**1.5
! Cloud liquid water path (g/m2)
! Dimensions: (ncol,nlay)
az_reice( l, k ) = xyz_CloudIceREff(i,j,k) * 1.0e6_DP
! Cloud ice particle effective size (microns)
! Dimensions: (ncol,nlay)
az_reliq( l, k ) = xyz_CloudWatREff(i,j,k) * 1.0e6_DP
! Cloud water drop effective radius (microns)
! Dimensions: (ncol,nlay)
aaz_taucld( :, l, k ) = 0.0_DP
! This is updated in rrtmg_lw when inflglw /= 0
! In-cloud optical depth
! Dimensions: (nbndlw,ncol,nlay)
aza_tauaer( l, k, : ) = 0.0_DP
! aerosol optical depth
! Dimensions: (ncol,nlay,nbndlw)
end do
end do
end do
! 太陽放射フラックスの設定
! Set solar constant
!
call SetSolarConst( SolarConst )
! 短波入射の計算
! Calculate short wave (insolation) incoming radiation
!
call RadShortIncome( xy_CosZet = xy_CosZet, DistFromStarScld = DistFromStarScld, DiurnalMeanFactor = DiurnalMeanFactor )
! ----- Input -----
iaer = 0
! Aerosol option flag
! 0: No aerosol
! 6: ECMWF method
! 10:Input aerosol optical
! properties
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
a_asdir( l ) = xy_SurfAlbedo(i,j)
! UV/vis surface albedo direct rad
! Dimensions: (ncol)
a_aldir( l ) = xy_SurfAlbedo(i,j)
! Near-IR surface albedo direct rad
! Dimensions: (ncol)
a_asdif( l ) = xy_SurfAlbedo(i,j)
! UV/vis surface albedo: diffuse rad
! Dimensions: (ncol)
a_aldif( l ) = xy_SurfAlbedo(i,j)
! Near-IR surface albedo: diffuse rad
! Dimensions: (ncol)
end do
end do
dyofyr = 0.0_DP
! Day of the year (used to get Earth/Sun
! distance if adjflx not provided)
adjes = DistFromStarScld
! Flux adjustment for Earth/Sun distance
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
a_coszen( l ) = xy_CosZet(i,j)
! Cosine of solar zenith angle
! Dimensions: (ncol)
end do
end do
scon = SolarConst
! Solar constant (W/m2)
inflgsw = 2
! Flag for cloud optical properties
iceflgsw = 1
! Flag for ice particle specification
liqflgsw = 1
! Flag for liquid droplet specification
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
do k = 1, kmax
aaz_ssacld( :, l, k ) = 0.0_DP
! In-cloud single scattering albedo
! Dimensions: (nbndsw,ncol,nlay)
aaz_asmcld( :, l, k ) = 0.0_DP
! In-cloud asymmetry parameter
! Dimensions: (nbndsw,ncol,nlay)
aaz_fsfcld( :, l, k ) = 0.0_DP
! In-cloud forward scattering fraction
! Dimensions: (nbndsw,ncol,nlay)
aza_ssaaer( l, k, : ) = 1.0_DP
! Aerosol single scattering albedo (iaer=10 only)
! Dimensions: (ncol,nlay,nbndsw)
! (non-delta scaled)
aza_asmaer( l, k, : ) = 0.0_DP
! Aerosol asymmetry parameter (iaer=10 only)
! Dimensions: (ncol,nlay,nbndsw)
! (non-delta scaled)
aza_ecaer( l, k, : ) = 0.0_DP
! Aerosol optical depth at 0.55 micron (iaer=6 only)
! Dimensions: (ncol,nlay,naerec)
! (non-delta scaled)
end do
end do
end do
call rrtmg_sw( ncol ,nlay ,icld ,iaer , az_play ,ar_plev ,az_tlay ,ar_tlev ,a_tsfc , az_h2ovmr ,az_o3vmr ,az_co2vmr ,az_ch4vmr ,az_n2ovmr ,az_o2vmr, a_asdir ,a_asdif ,a_aldir ,a_aldif , a_coszen ,adjes ,dyofyr ,scon , inflgsw ,iceflgsw,liqflgsw,az_cldfr , aaz_taucld ,aaz_ssacld ,aaz_asmcld ,aaz_fsfcld , az_cicewp ,az_cliqwp ,az_reice ,az_reliq , aza_tauaer ,aza_ssaaer ,aza_asmaer ,aza_ecaer , ar_swuflx ,ar_swdflx ,az_swhr ,ar_swuflxc ,ar_swdflxc ,az_swhrc )
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
do k = 0, kmax
xyr_RadSUwFlux(i,j,k) = ar_swuflx( l, k )
! Total sky shortwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
xyr_RadSDwFlux(i,j,k) = ar_swdflx( l, k )
! Total sky shortwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
end do
!!$ do k = 1, kmax
!!$ az_swhr( l, k )
!!$ ! Total sky shortwave radiative heating rate (K/d)
!!$ ! Dimensions: (ncol,nlay)
!!$ end do
do k = 0, kmax
xyr_RadCSSUwFlux(i,j,k) = ar_swuflxc( l, k )
! Clear sky shortwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
xyr_RadCSSDwFlux(i,j,k) = ar_swdflxc( l, k )
! Clear sky shortwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
end do
!!$ do k = 1, kmax
!!$ az_swhrc( l, k )
!!$ ! Clear sky shortwave radiative heating rate (K/d)
!!$ ! Dimensions: (ncol,nlay)
!!$ end do
end do
end do
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
aa_emis( l, : ) = 1.0_DP
! Surface emissivity
! Dimensions: (ncol,nbndlw)
end do
end do
inflglw = 2
! see inflag in rrtmg_lw_cldprop.f90
! Flag for cloud optical properties
iceflglw = 1
! see iceflag in rrtmg_lw_cldprop.f90
! Flag for ice particle specification
! specific definition of reice depends on setting of iceflglw:
! iceflglw = 0: ice effective radius, r_ec, (Ebert and Curry, 1992),
! r_ec must be >= 10.0 microns
! iceflglw = 1: ice effective radius, r_ec, (Ebert and Curry, 1992),
! r_ec range is limited to 13.0 to 130.0 microns
! iceflglw = 2: ice effective radius, r_k, (Key, Streamer Ref. Manual, 1996)
! r_k range is limited to 5.0 to 131.0 microns
! iceflglw = 3: generalized effective size, dge, (Fu, 1996),
! dge range is limited to 5.0 to 140.0 microns
! [dge = 1.0315 * r_ec]
liqflglw = 1
! see liqflag in rrtmg_lw_cldprop.f90
! Flag for liquid droplet specification
call rrtmg_lw( ncol ,nlay ,icld ,idrv , az_play ,ar_plev ,az_tlay ,ar_tlev ,a_tsfc , az_h2ovmr ,az_o3vmr ,az_co2vmr ,az_ch4vmr ,az_n2ovmr ,az_o2vmr, az_cfc11vmr,az_cfc12vmr,az_cfc22vmr,az_ccl4vmr ,aa_emis , inflglw ,iceflglw,liqflglw,az_cldfr , aaz_taucld ,az_cicewp ,az_cliqwp ,az_reice ,az_reliq , aza_tauaer , ar_uflx ,ar_dflx ,az_hr ,ar_uflxc ,ar_dflxc, az_hrc, ar_duflx_dt,ar_duflxc_dt )
do j = 1, jmax
do i = 0, imax-1
l = imax * (j-1) + i + 1
do k = 0, kmax
xyr_RadLUwFlux(i,j,k) = ar_uflx( l, k )
! Total sky longwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
xyr_RadLDwFlux(i,j,k) = ar_dflx( l, k )
! Total sky longwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
!!$ az_hr( 1:imax*jmax, 1:kmax )
!!$ ! Total sky longwave radiative heating rate (K/d)
!!$ ! Dimensions: (ncol,nlay)
xyr_RadCSLUwFlux(i,j,k) = ar_uflxc( l, k )
! Clear sky longwave upward flux (W/m2)
! Dimensions: (ncol,nlay+1)
xyr_RadCSLDwFlux(i,j,k) = ar_dflxc( l, k )
! Clear sky longwave downward flux (W/m2)
! Dimensions: (ncol,nlay+1)
!!$ az_hrc( 1:imax*jmax, 1:kmax )
!!$ ! Clear sky longwave radiative heating rate (K/d)
!!$ ! Dimensions: (ncol,nlay)
xyra_DelRadLUwFlux(i,j,k,0) = ar_duflx_dt( l, k )
! change in upward longwave flux (w/m2/k)
! with respect to surface temperature
! Dimensions: (ncol,nlay+1)
xyra_DelRadLUwFlux(i,j,k,1) = 0.0_DP
xyra_DelRadLDwFlux(i,j,k,0) = 0.0_DP
xyra_DelRadLDwFlux(i,j,k,1) = 0.0_DP
!!$ ar_duflxc_dt( 1:imax*jmax, 1:kmax )
! change in clear sky upward longwave flux (w/m2/k)
! with respect to surface temperature
! Dimensions: (ncol,nlay+1)
end do
end do
end do
!!$ ! 地球大気向け短波放射モデル Ver. 2.6
!!$ ! short wave radiation model for the Earth's atmosphere Ver. 2.6
!!$ !
!!$ call RadEarthSWV26Flux( &
!!$ & xy_SurfAlbedo, &
!!$ & xyz_DelAtmMass, &
!!$ & xyz_DelH2OVapMass, xyz_DelH2OLiqMass, xyz_DelH2OSolMass, &
!!$ & xyz_DelO3Mass, &
!!$ & xyz_Press, xyz_Temp, &
!!$ & xyz_CloudCover, &
!!$ & xyz_CloudWatREff, xyz_CloudIceREff, &
!!$ & xyr_RadSUwFlux, xyr_RadSDwFlux &
!!$ & )
!!$
!!$
!!$ call RadEarthLWV24Flux( &
!!$ & xyz_DelCO2Mass, &
!!$ & xyz_DelH2OVapMass, xyz_DelH2OLiqMass, xyz_DelH2OSolMass, &
!!$ & xyz_DelO3Mass, &
!!$ & xyz_DelN2OMass, xyz_DelCH4Mass, &
!!$ & xyz_Press, xyz_Temp, xy_SurfTemp, & ! (in )
!!$ & xyz_QCO2, xyz_QH2OVap, & ! (in )
!!$ & xyz_QN2O, xyz_QCH4, & ! (in )
!!$ & xyz_CloudCover, & ! (in )
!!$ & xyz_CloudWatREff, xyz_CloudIceREff, & ! (in )
!!$ & xyr_RadLUwFlux, xyr_RadLDwFlux, & ! (out)
!!$ & xyra_DelRadLUwFlux, xyra_DelRadLDwFlux & ! (out)
!!$ & )
! Output variables
!
call HistoryAutoPut( TimeN, 'CloudCoverforRad', xyz_CloudCover )
!
xy_CloudCoverRand = 1.0_DP
do k = 1, kmax
xy_CloudCoverRand = xy_CloudCoverRand * ( 1.0_DP - xyz_CloudCover(:,:,k) )
end do
xy_CloudCoverRand = 1.0_DP - xy_CloudCoverRand
call HistoryAutoPut( TimeN, 'CloudCoverRand', xy_CloudCoverRand )
call HistoryAutoPut( TimeN, 'RadCSLUWFLXB', xyr_RadCSLUwFlux )
call HistoryAutoPut( TimeN, 'RadCSLDWFLXB', xyr_RadCSLDwFlux )
call HistoryAutoPut( TimeN, 'RadCSSUWFLXB', xyr_RadCSSUwFlux )
call HistoryAutoPut( TimeN, 'RadCSSDWFLXB', xyr_RadCSSDwFlux )
#endif
end subroutine RadRRTMGWrapperFluxCore