| Class | ReStartFileIO |
| In: |
../src/io/restartfileio.f90
|
リスタート用の場の情報を netCDF ファイルに出力するためのルーチン
| Subroutine : |
リスタートファイルのクローズ
subroutine ReStartFileIO_Finalize
!
!リスタートファイルのクローズ
!
!モジュール読み込み
use gtool_history
!暗黙の型宣言禁止
implicit none
!ファイルを閉じる
call HistoryClose(rstat, quiet=.true.)
end subroutine ReStartFileIO_Finalize
| Subroutine : |
リスタートファイルから情報取得
subroutine ReStartFileio_BZ_Get()
!
!リスタートファイルから情報取得
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(DP) :: Var3D (imin:imax,jmin:jmax,kmin:kmax)
real(DP) :: Var4D (imin:imax,jmin:jmax,kmin:kmax,ncmax)
real(DP) :: xyz_ExnerBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場のエクスナー関数
real(DP) :: xyz_DensBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の密度
real(DP) :: xyz_PTempBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の温位
real(DP) :: xyz_VelSoundBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の音速
real(DP) :: xyz_PressBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の圧力
real(DP) :: xyz_TempBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の温度
real(DP) :: xyzf_QMixBZ (imin:imax,jmin:jmax,kmin:kmax, ncmax)
!基本場の混合比
real(DP) :: xyz_EffMolWtBZ (imin:imax,jmin:jmax,kmin:kmax)
!基本場の分子量効果
character(STRING) :: name !変数名
!-------------------------------------------------------------
! 基本場の取得
!
name = "DensBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_DensBZ = Var3D
name = "ExnerBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_ExnerBZ = Var3D
name = "PTempBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_PTempBZ = Var3D
name = "VelSoundBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_VelSoundBZ = Var3D
name = "TempBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_TempBZ = Var3D
name = "PressBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_PressBZ = Var3D
name = "QMixBZ"
call HistoryGet( InputFile, name, Var4D, flag_mpi_split = FLAG_LIB_MPI )
xyzf_QMixBZ = Var4D
name = "EffMolWtBZ"
call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
xyz_EffMolWtBZ = Var3D
!----------------------------------------------------------
! BasicSet モジュールに値を設定
!----------------------------------------------------------
call basicset_init( xyz_PressBZ, xyz_ExnerBZ, xyz_TempBZ, xyz_PTempBZ, xyz_DensBZ, xyz_VelSoundBZ, xyzf_QMixBZ, xyz_EffMolWtBZ )
end subroutine ReStartFileio_BZ_Get
| Subroutine : |
リスタートファイルの書き出し
This procedure input/output NAMELIST#restartfileio_nml .
subroutine ReStartFileio_Init
!
!リスタートファイルの書き出し
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(4) :: SpcID(ncmax)
integer :: N, L, M
integer :: s
integer :: unit !装置番号
!NAMELIST から情報を取得
NAMELIST /restartfileio_nml/ InputFile, OutputFile
call FileOpen(unit, file=namelist_filename, mode='r')
read(unit, NML=restartfileio_nml)
close(unit)
!確認
if (myrank == 0) then
call MessageNotify( "M", "restartfileioIO_init", "InputFile = %c", c1=trim(InputFile) )
call MessageNotify( "M", "restartfileioIO_init", "OutputFile = %c", c1=trim(OutputFile) )
end if
SpcID = 0.0d0
do s = 1, ncmax
SpcID(s) = real( s, 4 )
end do
N = size(x_X, 1)
L = size(y_Y, 1)
M = size(z_Z, 1)
!-------------------------------------------------------------
! ヒストリー作成
!-------------------------------------------------------------
call HistoryCreate( file = Outputfile, title = filetitle, source = filesource, institution = FileInstitution, dims=(/'x','y','z','s','t'/), dimsizes=(/N, L, M, ncmax, 0/), longnames=(/'X-coordinate', 'Y-coordinate', 'Z-coordinate', 'Species Num ', 'Time '/), units=(/'m ','m ','m ','1 ','sec'/), xtypes=(/'double', 'double', 'double', 'double', 'double'/), flag_mpi_split = FLAG_LIB_MPI, origin=0.0, interval=1.0, history=rstat, quiet=.true. )
!-------------------------------------------------------------
! 変数出力
!-------------------------------------------------------------
call HistoryPut('x', x_X, rstat )
call HistoryPut('y', y_Y, rstat )
call HistoryPut('z', z_Z, rstat )
call HistoryPut('s', real(SpcID, 4), rstat )
!無次元圧力の基本場
call HistoryAddVariable( varname='ExnerBZ', dims=(/'x','y','z'/), longname='nondimensional pressure', units='1', xtype='double', history=rstat )
!温位の基本場
call HistoryAddVariable( varname='PTempBZ', dims=(/'x','y','z'/), longname='potential temperature', units='K', xtype='double', history=rstat )
!密度の基本場
call HistoryAddVariable( varname='DensBZ', dims=(/'x','y','z'/), longname='density', units='Kg.m-3', xtype='double', history=rstat )
!音波速度の基本場
call HistoryAddVariable( varname='VelSoundBZ', dims=(/'x','y','z'/), longname='sound velocity', units='m.s-2', xtype='double', history=rstat )
!温度の基本場
call HistoryAddVariable( varname='TempBZ', dims=(/'x','y','z'/), longname='Temperature of basic state', units='K', xtype='double', history=rstat )
!圧力の基本場
call HistoryAddVariable( varname='PressBZ', dims=(/'x','y','z'/), longname='Pressure of basic state', units='Pa', xtype='double', history=rstat )
!水蒸気混合比の基本場
call HistoryAddVariable( varname='QMixBZ', dims=(/'x','y','z','s'/), longname='Mixing ratio of Condensible volatiles', units='kg.kg-1', xtype='double', history=rstat )
!分子量効果
call HistoryAddVariable( varname='EffMolWtBZ', dims=(/'x','y','z'/), longname='Effect of Mole Weight', units='1', xtype='double', history=rstat )
!分子量効果
call HistoryAddVariable( varname='HumBZ', dims=(/'x','y','z','s'/), longname='Humidity', units='1', xtype='double', history=rstat )
!速度
call HistoryAddVariable( varname='VelX', dims=(/'x','y','z','t'/), longname='zonal velocity', units='m.s-1', xtype='double', history=rstat )
!速度
call HistoryAddVariable( varname='VelY', dims=(/'x','y','z','t'/), longname='meridional velocity', units='m.s-1', xtype='double', history=rstat )
!速度
call HistoryAddVariable( varname='VelZ', dims=(/'x','y','z','t'/), longname='vertical velocity', units='m.s-1', xtype='double', history=rstat )
!無次元圧力
call HistoryAddVariable( varname='Exner', dims=(/'x','y','z','t'/), longname='nondimensional pressure', units='1', xtype='double', history=rstat )
!温位の擾乱
call HistoryAddVariable( varname='PTemp', dims=(/'x','y','z','t'/), longname='virtual potential temperature', units='K', xtype='double', history=rstat )
!渦粘性係数
call HistoryAddVariable( varname='Km', dims=(/'x','y','z','t'/), longname='Km', units='m2.s-1', xtype='double', history=rstat )
!渦粘性係数
call HistoryAddVariable( varname='Kh', dims=(/'x','y','z','t'/), longname='Kh', units='m2.s-1', xtype='double', history=rstat )
!雲密度
call HistoryAddVariable( varname='CDens', dims=(/'x','y','z','t'/), longname='CDens', units='m2.s-1', xtype='double', history=rstat )
!混合比
call HistoryAddVariable( varname='QMix', dims=(/'x','y','z','s','t'/), longname='Mixing Ratio', units='kg.kg-1"', xtype='double', history=rstat )
end subroutine ReStartFileio_Init
| Subroutine : | |
| pyz_VelXB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| pyz_VelXN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xqz_VelYB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xqz_VelYN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyr_VelZB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyr_VelZN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_PTempB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_PTempN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_ExnerB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_ExnerN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyzf_QMixB(imin:imax,jmin:jmax,kmin:kmax,ncmax) : | real(DP), intent(out) |
| xyzf_QMixN(imin:imax,jmin:jmax,kmin:kmax,ncmax) : | real(DP), intent(out) |
| xyz_KmB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_KmN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_KhB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_KhN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_CDensB(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
| xyz_CDensN(imin:imax,jmin:jmax,kmin:kmax) : | real(DP), intent(out) |
リスタートファイルから情報取得
subroutine ReStartFileio_Var_Get( pyz_VelXB, pyz_VelXN, xqz_VelYB, xqz_VelYN, xyr_VelZB, xyr_VelZN, xyz_PTempB, xyz_PTempN, xyz_ExnerB, xyz_ExnerN, xyzf_QMixB, xyzf_QMixN, xyz_KmB, xyz_KmN, xyz_KhB, xyz_KhN, xyz_CDensB, xyz_CDensN )
!
!リスタートファイルから情報取得
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(DP), intent(out) :: pyz_VelXN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xqz_VelYN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyr_VelZN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_ExnerN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_PTempN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_KmN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_KhN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_CDensN (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyzf_QMixN (imin:imax,jmin:jmax,kmin:kmax,ncmax)
real(DP), intent(out) :: pyz_VelXB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xqz_VelYB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyr_VelZB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_ExnerB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_PTempB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_KmB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_KhB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyz_CDensB (imin:imax,jmin:jmax,kmin:kmax)
real(DP), intent(out) :: xyzf_QMixB (imin:imax,jmin:jmax,kmin:kmax,ncmax)
character(STRING) :: name !変数名
character(STRING) :: TimeN = ""
character(STRING) :: TimeB = ""
!-------------------------------------------------------------
! Get a Value from netCDF File
!-------------------------------------------------------------
if (RestartTime /= 0.0d0) then
timeB = 't=' // toChar( RestartTime - DelTimeLong)
timeN = 't=' // toChar( RestartTime )
else
timeB = 't=' // toChar( RestartTime )
timeN = 't=' // toChar( RestartTime )
end if
! write(*,*) TimeN, TimeB
name = "PTemp"
call HistoryGet( InputFile, name, xyz_PTempB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyz_PTempN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "VelX"
call HistoryGet( InputFile, name, pyz_VelXB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, pyz_VelXN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "VelY"
call HistoryGet( InputFile, name, xqz_VelYB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xqz_VelYN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "VelZ"
call HistoryGet( InputFile, name, xyr_VelZB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyr_VelZN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "Exner"
call HistoryGet( InputFile, name, xyz_ExnerB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyz_ExnerN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "Km"
call HistoryGet( InputFile, name, xyz_KmB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyz_KmN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "Kh"
call HistoryGet( InputFile, name, xyz_KhB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyz_KhN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "CDens"
call HistoryGet( InputFile, name, xyz_CDensB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyz_CDensN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
name = "QMix"
call HistoryGet( InputFile, name, xyzf_QMixB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
call HistoryGet( InputFile, name, xyzf_QMixN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
end subroutine ReStartFileio_Var_Get