| Class | planck_func |
| In: |
radiation/planck_func.f90
|
Note that Japanese and English are described in parallel.
| !$ ! RadiationFluxDennouAGCM : | 放射フラックスの計算 |
| !$ ! RadiationDTempDt : | 放射フラックスによる温度変化の計算 |
| !$ ! RadiationFluxOutput : | 放射フラックスの出力 |
| !$ ! RadiationFinalize : | 終了処理 (モジュール内部の変数の割り付け解除) |
| !$ ! ———— : | ———— |
| !$ ! RadiationFluxDennouAGCM : | Calculate radiation flux |
| !$ ! RadiationDTempDt : | Calculate temperature tendency with radiation flux |
| !$ ! RadiationFluxOutput : | Output radiation fluxes |
| !$ ! RadiationFinalize : | Termination (deallocate variables in this module) |
!$ ! NAMELIST#radiation_DennouAGCM_nml
| Function : | |
| Res : | real(DP) |
| WN : | real(DP), intent(in ) |
| Temp : | real(DP), intent(in ) |
function DPFDT( WN, Temp ) result( Res )
! USE statements
!
! 宣言文 ; Declaration statements
!
real(DP), intent(in ) :: WN
real(DP), intent(in ) :: Temp
real(DP) :: Res
! 作業変数
! Work variables
!
real(DP) :: aaa_Temp(1,1,1)
real(DP) :: aaa_Res (1,1,1)
aaa_Temp(1,1,1) = Temp
aaa_Res = aaa_DPFDT( 1, 1, 1, 1, 1, 1, WN, aaa_Temp )
Res = aaa_Res(1,1,1)
end function DPFDT
| Subroutine : | |
| is : | integer , intent(in ) |
| ie : | integer , intent(in ) |
| js : | integer , intent(in ) |
| je : | integer , intent(in ) |
| WN1 : | real(DP), intent(in ) |
| WN2 : | real(DP), intent(in ) |
| Num : | integer , intent(in ) |
| aa_Temp(is:ie, js:je) : | real(DP), intent(in ) |
| aa_DPFDTInted(is:ie, js:je) : | real(DP), intent(out) |
subroutine Integ_DPFDT_GQ_Array2D( is, ie, js, je, WN1, WN2, Num, aa_Temp, aa_DPFDTInted )
! USE statements
!
integer , intent(in ) :: is
integer , intent(in ) :: ie
integer , intent(in ) :: js
integer , intent(in ) :: je
real(DP), intent(in ) :: WN1
real(DP), intent(in ) :: WN2
integer , intent(in ) :: Num
real(DP), intent(in ) :: aa_Temp (is:ie, js:je)
real(DP), intent(out) :: aa_DPFDTInted(is:ie, js:je)
!
! local variables
!
real(DP) :: aaa_Temp (is:ie, js:je, 1:1)
real(DP) :: aaa_DPFDTInted(is:ie, js:je, 1:1)
aaa_Temp(:,:,1) = aa_Temp
call Integ_DPFDT_GQ_Array3D( is, ie, js, je, 1, 1, WN1, WN2, Num, aaa_Temp, aaa_DPFDTInted )
aa_DPFDTInted = aaa_DPFDTInted(:,:,1)
end subroutine Integ_DPFDT_GQ_Array2D
| Subroutine : | |
| is : | integer , intent(in ) |
| ie : | integer , intent(in ) |
| js : | integer , intent(in ) |
| je : | integer , intent(in ) |
| ks : | integer , intent(in ) |
| ke : | integer , intent(in ) |
| WN1 : | real(DP), intent(in ) |
| WN2 : | real(DP), intent(in ) |
| Num : | integer , intent(in ) |
| aaa_Temp(is:ie, js:je, ks:ke) : | real(DP), intent(in ) |
| aaa_DPFDTInted(is:ie, js:je, ks:ke) : | real(DP), intent(out) |
subroutine Integ_DPFDT_GQ_Array3D( is, ie, js, je, ks, ke, WN1, WN2, Num, aaa_Temp, aaa_DPFDTInted )
! USE statements
!
! ガウス重み, 分点の計算
! Calculate Gauss node and Gaussian weight
!
use gauss_quad, only : GauLeg
integer , intent(in ) :: is
integer , intent(in ) :: ie
integer , intent(in ) :: js
integer , intent(in ) :: je
integer , intent(in ) :: ks
integer , intent(in ) :: ke
real(DP), intent(in ) :: WN1
real(DP), intent(in ) :: WN2
integer , intent(in ) :: Num
real(DP), intent(in ) :: aaa_Temp (is:ie, js:je, ks:ke)
real(DP), intent(out) :: aaa_DPFDTInted(is:ie, js:je, ks:ke)
!
! local variables
!
real(DP):: GP( Num )
real(DP):: GW( Num )
integer :: l
call GauLeg( WN1, WN2, Num, GP, GW )
aaa_DPFDTInted = 0.0_DP
do l = 1, num
aaa_DPFDTInted = aaa_DPFDTInted + aaa_DPFDT( is, ie, js, je, ks, ke, GP(l), aaa_Temp ) * GW(l)
end do
end subroutine Integ_DPFDT_GQ_Array3D
| Subroutine : | |
| wn1 : | real(DP), intent(in ) |
| wn2 : | real(DP), intent(in ) |
| num : | integer , intent(in ) |
| is : | integer , intent(in ) |
| ie : | integer , intent(in ) |
| js : | integer , intent(in ) |
| je : | integer , intent(in ) |
| temp(is:ie, js:je) : | real(DP), intent(in ) |
| pfinted(is:ie, js:je) : | real(DP), intent(out) |
subroutine Integ_PF_GQ_Array2D( wn1, wn2, num, is, ie, js, je, temp, pfinted )
real(DP), intent(in ) :: wn1,wn2
integer , intent(in ) :: num
integer , intent(in ) :: is
integer , intent(in ) :: ie
integer , intent(in ) :: js
integer , intent(in ) :: je
real(DP), intent(in ) :: temp (is:ie, js:je)
real(DP), intent(out) :: pfinted(is:ie, js:je)
!
! local variables
!
real(DP) :: temp3d (is:ie, js:je, 1:1)
real(DP) :: pfinted3d(is:ie, js:je, 1:1)
temp3d(:,:,1) = temp(:,:)
call Integ_PF_GQ_Array3D( wn1, wn2, num, is, ie, js, je, 1, 1, temp3d, pfinted3d )
pfinted(:,:) = pfinted3d(:,:,1)
end subroutine Integ_PF_GQ_Array2D
| Subroutine : | |
| wn1 : | real(DP), intent(in ) |
| wn2 : | real(DP), intent(in ) |
| num : | integer , intent(in ) |
| is : | integer , intent(in ) |
| ie : | integer , intent(in ) |
| js : | integer , intent(in ) |
| je : | integer , intent(in ) |
| ks : | integer , intent(in ) |
| ke : | integer , intent(in ) |
| aaa_temp(is:ie, js:je, ks:ke) : | real(DP), intent(in ) |
| aaa_pfinted(is:ie, js:je, ks:ke) : | real(DP), intent(out) |
subroutine Integ_PF_GQ_Array3D( wn1, wn2, num, is, ie, js, je, ks, ke, aaa_temp, aaa_pfinted )
! ガウス重み, 分点の計算
! Calculate Gauss node and Gaussian weight
!
use gauss_quad, only : GauLeg
real(DP), intent(in ) :: wn1,wn2
integer , intent(in ) :: num
integer , intent(in ) :: is, ie
integer , intent(in ) :: js, je
integer , intent(in ) :: ks, ke
real(DP), intent(in ) :: aaa_temp (is:ie, js:je, ks:ke)
real(DP), intent(out) :: aaa_pfinted(is:ie, js:je, ks:ke)
!
! local variables
!
real(DP):: x( num ), w( num )
integer :: l
call GauLeg( wn1, wn2, num, x, w )
aaa_pfinted(:,:,:) = 0.0d0
do l = 1, num
aaa_pfinted(:,:,:) = aaa_pfinted(:,:,:) + aaa_PF( is, ie, js, je, ks, ke, x(l), aaa_Temp ) * w( l )
end do
end subroutine Integ_PF_GQ_Array3D
| Function : | |
| Res : | real(DP) |
| WN : | real(DP), intent(in) |
| Temp : | real(DP), intent(in) |
温度, 比湿, 気圧から, 放射フラックスを計算します.
Calculate radiation flux from temperature, specific humidity, and air pressure.
function PF( WN, Temp ) result( Res )
!
! 温度, 比湿, 気圧から, 放射フラックスを計算します.
!
! Calculate radiation flux from temperature, specific humidity, and
! air pressure.
!
! モジュール引用 ; USE statements
!
! 宣言文 ; Declaration statements
!
real(DP), intent(in) :: WN
real(DP), intent(in) :: Temp
real(DP) :: Res
! 作業変数
! Work variables
!
real(DP) :: aaa_Temp(1,1,1)
real(DP) :: aaa_Res (1,1,1)
! 実行文 ; Executable statement
!
aaa_Temp(1,1,1) = Temp
aaa_Res = aaa_PF( 1, 1, 1, 1, 1, 1, WN, aaa_Temp )
Res = aaa_Res(1,1,1)
end function PF
| Function : | |
| aaa_Res(is:ie, js:je, ks:ke) : | real(DP) |
| is : | integer , intent(in) |
| ie : | integer , intent(in) |
| js : | integer , intent(in) |
| je : | integer , intent(in) |
| ks : | integer , intent(in) |
| ke : | integer , intent(in) |
| WN : | real(DP), intent(in) |
| aaa_Temp(is:ie, js:je, ks:ke) : | real(DP), intent(in) |
温度, 比湿, 気圧から, 放射フラックスを計算します.
Calculate radiation flux from temperature, specific humidity, and air pressure.
function aaa_PF( is, ie, js, je, ks, ke, WN, aaa_Temp ) result( aaa_Res )
!
! 温度, 比湿, 気圧から, 放射フラックスを計算します.
!
! Calculate radiation flux from temperature, specific humidity, and
! air pressure.
!
! モジュール引用 ; USE statements
!
! 宣言文 ; Declaration statements
!
integer , intent(in) :: is
integer , intent(in) :: ie
integer , intent(in) :: js
integer , intent(in) :: je
integer , intent(in) :: ks
integer , intent(in) :: ke
real(DP), intent(in) :: WN
real(DP), intent(in) :: aaa_Temp(is:ie, js:je, ks:ke)
real(DP) :: aaa_Res (is:ie, js:je, ks:ke)
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
aaa_Res = 2.0d0 * Planc * SOL * SOL * WN * WN * WN / ( exp( Planc * SOL * ( WN+1.0d-10 ) / ( Boltz * aaa_Temp ) ) - 1.0d0 )
end function aaa_PF
| Variable : | |||
| planck_func_inited = .false. : | logical, save, public
|
| Function : | |
| aaa_Res(is:ie, js:je, ks:ke) : | real(DP) |
| is : | integer , intent(in ) |
| ie : | integer , intent(in ) |
| js : | integer , intent(in ) |
| je : | integer , intent(in ) |
| ks : | integer , intent(in ) |
| ke : | integer , intent(in ) |
| WN : | real(DP), intent(in ) |
| aaa_Temp(is:ie, js:je, ks:ke) : | real(DP), intent(in ) |
function aaa_DPFDT( is, ie, js, je, ks, ke, WN, aaa_Temp ) result( aaa_Res )
! USE statements
!
integer , intent(in ) :: is
integer , intent(in ) :: ie
integer , intent(in ) :: js
integer , intent(in ) :: je
integer , intent(in ) :: ks
integer , intent(in ) :: ke
real(DP), intent(in ) :: WN
real(DP), intent(in ) :: aaa_Temp(is:ie, js:je, ks:ke)
real(DP) :: aaa_Res (is:ie, js:je, ks:ke)
real(DP) :: aaa_ExpTerm(is:ie, js:je, ks:ke)
real(DP) :: aaa_PF (is:ie, js:je, ks:ke)
aaa_ExpTerm = exp( Planc * SOL * ( WN + 1.0d-10 ) / ( Boltz * aaa_Temp ) )
aaa_PF = 2.0d0 * Planc * SOL * SOL * WN * WN * WN / ( aaa_ExpTerm - 1.0d0 )
aaa_Res = 1.0d0 / ( 2.0d0 * SOL * WN * WN * Boltz ) * ( aaa_PF / aaa_Temp )**2 * aaa_ExpTerm
end function aaa_DPFDT
| Constant : | |||
| version = ’$Name: dcpam5-20110327 $’ // ’$Id: planck_func.f90,v 1.3 2011-03-28 03:17:04 yot Exp $’ : | character(*), parameter
|