Subroutine : |
|
xyz_Press(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyz_Exner(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyz_Temp(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyz_PTemp(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyz_Dens(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyz_VelSound(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in)
|
xyzf_QMix(imin:imax,jmin:jmax,kmin:kmax,ncmax) : | real(DP), intent(in), optional
|
xyz_EffMolWt(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(in), optional
|
基本場の値を外部から取得する. dry
の場合は混合比や乾燥成分と凝結成分の存在比を陽に使わないので,
これらの変数は optional にしている.
subroutine basicset_init( xyz_Press, xyz_Exner, xyz_Temp, xyz_PTemp, xyz_Dens, xyz_VelSound, xyzf_QMix, xyz_EffMolWt )
!
! 基本場の値を外部から取得する.
! dry の場合は混合比や乾燥成分と凝結成分の存在比を陽に使わないので,
! これらの変数は optional にしている.
!
!入力変数
real(DP), intent(in) :: xyz_Press(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in) :: xyz_Exner(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in) :: xyz_Temp(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in) :: xyz_PTemp(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in) :: xyz_Dens(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in) :: xyz_VelSound(imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(in), optional :: xyzf_QMix(imin:imax,jmin:jmax,kmin:kmax,ncmax)
real(DP), intent(in), optional :: xyz_EffMolWt(imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: xyzf_QMixBZPerMolWt(imin:imax,jmin:jmax,kmin:kmax,GasNum)
integer :: s
! 配列の初期化
call basicset_array_init
!値の入力
xyz_PressBZ = xyz_Press
xyz_ExnerBZ = xyz_Exner
xyz_TempBZ = xyz_Temp
xyz_PTempBZ = xyz_PTemp
xyz_DensBZ = xyz_Dens
xyz_VelSoundBZ = xyz_VelSound
if (present(xyz_EffMolWt)) xyz_EffMolWtBZ = xyz_EffMolWt
if (present(xyzf_QMix)) then
xyzf_QMixBZ = xyzf_QMix
xyzf_QMixBZPerMolWt = 0.0d0
do s = 1, GasNum
xyzf_QMixBZPerMolWt(:,:,:,s) = xyzf_QMixBZ(:,:,:,IdxG(s)) / MolWtWet(IdxG(s))
end do
xyz_QMixBZPerMolWt = sum(xyzf_QMixBZPerMolWt, 4)
xyr_QMixBZPerMolWt = xyr_avr_xyz( sum(xyzf_QMixBZPerMolWt, 4) )
xyz_QMixBZ = sum(xyzf_QMixBZ, 4)
xyr_QMixBZ = xyr_avr_xyz( sum(xyzf_QMixBZ, 4) )
end if
xyz_VPTempBZ = xyz_PTempBZ / xyz_EffMolWtBZ
end subroutine basicset_init