Class ReStartFileIO_3d
In: io/restartfileio_3d.f90

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

Methods

Included Modules

gtool_history dc_types dc_message dc_string gridset_3d timeset fileset_3d basicset_3d

Public Instance methods

Subroutine :

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

[Source]

  subroutine ReStartFile_Close
    !
    !リスタートファイルのクローズ
    !
    
    !モジュール読み込み
    use gtool_history
    
    !暗黙の型宣言禁止
    implicit none

    !ファイルを閉じる
    call HistoryClose(rstat)
    
  end subroutine ReStartFile_Close
Subroutine :
ReStartTime(2) :real(DP), intent(out)
xyz_PotTempB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyz_ExnerB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
pyz_VelXB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xqz_VelYB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyr_VelZB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyza_MixRtB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) :real(DP), intent(out)
xyz_KmB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyz_KhB(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyz_PotTempN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyz_ExnerN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
pyz_VelXN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xqz_VelYN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyr_VelZN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyza_MixRtN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) :real(DP), intent(out)
xyz_KmN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)
xyz_KhN(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(out)

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

[Source]

  subroutine ReStartFile_Get( ReStartTime, xyz_PotTempB, xyz_ExnerB, pyz_VelXB, xqz_VelYB, xyr_VelZB, xyza_MixRtB, xyz_KmB, xyz_KhB, xyz_PotTempN, xyz_ExnerN, pyz_VelXN, xqz_VelYN, xyr_VelZN, xyza_MixRtN, xyz_KmN, xyz_KhN  )
    !
    !リスタートファイルから情報取得
    !

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(DP), intent(out) :: ReStartTime(2)
    real(DP), intent(out) :: pyz_VelXN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xqz_VelYN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyr_VelZN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_ExnerN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_PotTempN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_KmN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_KhN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyza_MixRtN (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum)
    real(DP), intent(out) :: pyz_VelXB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xqz_VelYB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyr_VelZB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_ExnerB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_PotTempB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_KmB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyz_KhB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(out) :: xyza_MixRtB (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum)
    real(DP)              :: DelTime
    real(DP)              :: Var3D (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Var3Ds (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,2)
    real(DP)              :: Var4D (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum)
    real(DP)              :: Var4Ds (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum, 2)

    real(DP)              :: xyz_ExnerBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場のエクスナー関数
    real(DP)              :: xyz_DensBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の密度
    real(DP)              :: xyz_PotTempBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の温位
    real(DP)              :: xyz_VelSoundBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の音速
    real(DP)              :: xyz_PressBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の圧力
    real(DP)              :: xyz_TempBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の温度
    real(DP)              :: xyza_MixRtBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
                                               !基本場の混合比
    real(DP)              :: xyz_EffMolWtBasicZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                               !基本場の分子量効果
    character(30)        :: name               !変数名
    character(10)        :: step(2)
    integer              :: t

    !-------------------------------------------------------------
    ! Get a Value from netCDF File
    !-------------------------------------------------------------    
    do t = 1, 2
      step(t) = 't=^' // adjustl(toChar(t))   
    end do

    do t = 1, 2
      name = "t"
      call HistoryGet( InitFile, name, ReStartTime(t), step(t) )
    end do

    do t = 1, 2
      name = "VelX"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    pyz_VelXB = Var3Ds(:,:,:,1)
    pyz_VelXN = Var3Ds(:,:,:,2)

    do t = 1, 2
      name = "VelY"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xqz_VelYB = Var3Ds(:,:,:,1)
    xqz_VelYN = Var3Ds(:,:,:,2)

    do t = 1, 2    
      name = "VelZ"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xyr_VelZB = Var3Ds(:,:,:,1)
    xyr_VelZN = Var3Ds(:,:,:,2)

    do t = 1, 2    
      name = "Exner"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xyz_ExnerB = Var3Ds(:,:,:,1)
    xyz_ExnerN = Var3Ds(:,:,:,2)

    do t = 1, 2    
      name = "PotTemp"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xyz_PotTempB = Var3Ds(:,:,:,1)
    xyz_PotTempN = Var3Ds(:,:,:,2)
    
    do t = 1, 2  
      name = "Km"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xyz_KmB = Var3Ds(:,:,:,1)
    xyz_KmN = Var3Ds(:,:,:,2)
    
    do t = 1, 2  
      name = "Kh"
      call HistoryGet( InitFile, name, Var3Ds(:,:,:,t), step(t) )    
    end do
    xyz_KhB = Var3Ds(:,:,:,1)
    xyz_KhN = Var3Ds(:,:,:,2)
      
    do t = 1, 2
      name = "MixRt"
      call HistoryGet( InitFile, name, Var4Ds(:,:,:,:,t), step(t) )    
    end do
    xyza_MixRtB = Var4Ds(:,:,:,:,1)
    xyza_MixRtN = Var4Ds(:,:,:,:,2)
    
    !-------------------------------------------------------------
    ! 基本場の取得
    !-------------------------------------------------------------
    name = "DensBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_DensBasicZ = Var3D
    
    name = "ExnerBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_ExnerBasicZ = Var3D
    
    name = "PotTempBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_PotTempBasicZ = Var3D
    
    name = "VelSoundBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_VelSoundBasicZ = Var3D
    
    name = "TempBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_TempBasicZ = Var3D
    
    name = "PressBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_PressBasicZ = Var3D
    
    name = "MixRtBasicZ"
    call HistoryGet( InitFile, name, Var4D )
    xyza_MixRtBasicZ = Var4D
    
    name = "EffMolWtBasicZ"
    call HistoryGet( InitFile, name, Var3D )
    xyz_EffMolWtBasicZ = Var3D


    !----------------------------------------------------------
    ! 時間刻みのチェック
    !----------------------------------------------------------
    DelTime = ReStartTime(2) - ReStartTime(1)

    if ( DelTime /= real(DelTimeLong, 4) ) then 
      call MessageNotify( "W", "ReStartFile_Get", "DelTime in InitFile is not the same as DelTimeLong")
      call MessageNotify( "M", "ReStartFile_Get", "DelTime=%d", d=(/DelTime/) )
      call MessageNotify( "M", "ReStartFile_Get", "DelTimeLong=%d", d=(/DelTimeLong/) )
    end if
    
    !----------------------------------------------------------
    ! BasicSet モジュールに値を設定
    !----------------------------------------------------------
    call BasicSetArray_Init( xyz_PressBasicZ,    xyz_ExnerBasicZ, xyz_TempBasicZ, xyz_PotTempBasicZ,  xyz_DensBasicZ,  xyz_VelSoundBasicZ, xyza_MixRtBasicZ, xyz_EffMolWtBasicZ )
    
  end subroutine ReStartFile_Get
Subroutine :

リスタートファイルの書き出し

[Source]

  subroutine ReStartFile_Open(  )
    !
    !リスタートファイルの書き出し
    !
   
    use basicset_3d, only: xyz_ExnerBasicZ, xyz_DensBasicZ, xyz_PotTempBasicZ, xyz_VelSoundBasicZ, xyz_PressBasicZ, xyz_TempBasicZ, xyza_MixRtBasicZ, xyz_EffMolWtBasicZ   !基本場の分子量効果


    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(4)            :: SpcID(SpcNum)
    integer            :: N, L, M
    integer            :: s    

    SpcID = 0.0d0
    do s = 1, SpcNum
      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 = ReStartFile, title = exptitle, source = expsrc, institution = expinst, dims=(/'x','y','z','s','t'/), dimsizes=(/N, L, M, SpcNum, 0/), longnames=(/'X-coordinate', 'Y-coordinate', 'Z-coordinate', 'Species Num ', 'Time        '/), units=(/'m','m','m','1','t'/), xtypes=(/'double', 'double', 'double', 'double', 'double'/), origin=0.0, interval=1.0, history=rstat )
    
    !-------------------------------------------------------------  
    ! 変数出力
    !-------------------------------------------------------------
    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='ExnerBasicZ', dims=(/'x','y','z'/), longname='nondimensional pressure', units='1', xtype='double', history=rstat )
    
    !温位の基本場
    call HistoryAddVariable( varname='PotTempBasicZ', dims=(/'x','y','z'/), longname='potential temperature', units='K', xtype='double', history=rstat ) 
    
    !密度の基本場
    call HistoryAddVariable( varname='DensBasicZ', dims=(/'x','y','z'/), longname='density', units='Kg.m-3', xtype='double', history=rstat )
    
    !音波速度の基本場
    call HistoryAddVariable( varname='VelSoundBasicZ', dims=(/'x','y','z'/), longname='sound velocity', units='m.s-2', xtype='double', history=rstat )
    
    !温度の基本場
    call HistoryAddVariable( varname='TempBasicZ', dims=(/'x','y','z'/), longname='Temperature of basic state', units='K', xtype='double', history=rstat ) 
    
    !圧力の基本場
    call HistoryAddVariable( varname='PressBasicZ', dims=(/'x','y','z'/), longname='Pressure of basic state', units='Pa', xtype='double', history=rstat ) 
    
    !水蒸気混合比の基本場
    call HistoryAddVariable( varname='MixRtBasicZ', dims=(/'x','y','z','s'/), longname='Mixing ratio of Condensible volatiles', units='kg.kg-1', xtype='double', history=rstat ) 
    
    !分子量効果
    call HistoryAddVariable( varname='EffMolWtBasicZ', dims=(/'x','y','z'/), longname='Effect of Mole Weight', units='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='PotTemp', dims=(/'x','y','z','t'/), longname='virtual potential temperature', units='K', 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='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='MixRt', dims=(/'x','y','z','s','t'/), longname='Mixing Ratio', units='kg.kg-1"', xtype='double', history=rstat )
    
    !-------------------------------------------------------------
    ! 基本場のファイル出力
    !-------------------------------------------------------------
    call HistoryPut( 'DensBasicZ',     xyz_DensBasicZ     , rstat)
    call HistoryPut( 'ExnerBasicZ',    xyz_ExnerBasicZ    , rstat)
    call HistoryPut( 'PotTempBasicZ',  xyz_PotTempBasicZ  , rstat)
    call HistoryPut( 'VelSoundBasicZ', xyz_VelSoundBasicZ , rstat)
    call HistoryPut( 'TempBasicZ',     xyz_TempBasicZ     , rstat)
    call HistoryPut( 'PressBasicZ',    xyz_PressBasicZ    , rstat)
    call HistoryPut( 'MixRtBasicZ',    xyza_MixRtBasicZ  , rstat)
    call HistoryPut( 'EffMolWtBasicZ', xyz_EffMolWtBasicZ, rstat)
    
  end subroutine ReStartFile_Open
Subroutine :
Time :real(DP), intent(in)
xyz_PotTemp(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
xyz_Exner(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
pyz_VelX(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
xqz_VelY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
xyr_VelZ(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
xyza_MixRt(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum) :real(DP), intent(in)
xyz_Km(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)
xyz_Kh(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

リスタートファイルに予報変数を書き出す

[Source]

  subroutine ReStartFile_OutPut( Time, xyz_PotTemp, xyz_Exner, pyz_VelX, xqz_VelY, xyr_VelZ, xyza_MixRt, xyz_Km , xyz_Kh )
    !
    !リスタートファイルに予報変数を書き出す
    !
    
    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(DP), intent(in)  :: Time
    real(DP), intent(in)  :: pyz_VelX (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xqz_VelY (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyr_VelZ (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyz_Exner (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyz_PotTemp (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyz_Km (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyz_Kh (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP), intent(in)  :: xyza_MixRt (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
    
  
    !------------------------------------------------------------------
    ! ファイル出力
    !------------------------------------------------------------------
    call HistoryPut( 't',       Time        , rstat)
    call HistoryPut( 'VelX',    pyz_VelX    , rstat)
    call HistoryPut( 'VelY',    xqz_VelY    , rstat)
    call HistoryPut( 'VelZ',    xyr_VelZ    , rstat)
    call HistoryPut( 'Exner',   xyz_Exner   , rstat)
    call HistoryPut( 'PotTemp', xyz_PotTemp , rstat)
    call HistoryPut( 'Km',      xyz_Km      , rstat)
    call HistoryPut( 'Kh',      xyz_Kh      , rstat)
    call HistoryPut( 'MixRt',   xyza_MixRt  , rstat)    
    
  end subroutine ReStartFile_OutPut

[Validate]