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-20110615 $’ // ’$Id: planck_func.f90,v 1.3 2011-03-28 03:17:04 yot Exp $’ : | character(*), parameter
|