Class ReStartFileIO
In: ../src/io/restartfileio.f90

リスタート用の場の情報を netCDF ファイルに出力するためのルーチン

Methods

Included Modules

gtool_history dc_types dc_message dc_string dc_iounit mpi_wrapper axesset gridset timeset fileset basicset namelist_util

Public Instance methods

Subroutine :

リスタートファイルのクローズ

[Source]

  subroutine ReStartFileIO_Finalize
    !
    !リスタートファイルのクローズ
    !
    
    !モジュール読み込み
    use gtool_history
    
    !暗黙の型宣言禁止
    implicit none
    
    !ファイルを閉じる
    call HistoryClose(rstat, quiet=.true.)
    
  end subroutine ReStartFileIO_Finalize
Subroutine :

リスタートファイルから情報取得

[Source]

  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 .

[Source]

  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='VPTempBZ', dims=(/'x','y','z'/), longname='virtual 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)

リスタートファイルから情報取得

[Source]

  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
rstat
Variable :
rstat :type(GT_HISTORY), save, public