Class HistoryFileIO
In: io/historyfileio.f90

ファイル出力. 長い時間ステップの値を出力.

Methods

Included Modules

gtool_history gridset basicset fileset StorePotTemp StoreMixRt StoreMom StoreBuoy StoreStab moistset average

Public Instance methods

Subroutine :

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

[Source]

  subroutine HistoryFile_Close
    !
    !ヒストリファイルのクローズ
    !
    
    !暗黙の型宣言禁止
    implicit none

    !変数定義
    integer :: s ! ループ添字

    !ファイルを閉じる
    do s = 1, FileNum
      call HistoryClose(gt_hist(s), quiet=.true.)
    end do

  end subroutine HistoryFile_Close
Subroutine :

ヒストリファイルの定義

[Source]

  subroutine HistoryFile_Open( )
    !
    !ヒストリファイルの定義
    !
    
    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    integer :: s ! ループ添字

    !-----------------------------------------------------------
    ! ヒストリー作成
    !-----------------------------------------------------------
    do s = 1, FileNum
      call HistoryCreate( file = HistoryFile(s), title = exptitle, source = expsrc, institution = expinst, dims=(/'x','z','t'/), dimsizes=(/FileNX, FileNZ, 0/), longnames=(/'X-coordinate', 'Z-coordinate', 'Time        '/), units=(/'m  ','m  ','sec'/), origin=0.0, xtypes=(/'double', 'double', 'double'/), interval=0.0, history=gt_hist(s), quiet=.true. )

      call HistoryPut('x', s_X( FileXMin: FileXMax ), gt_hist(s) )
      call HistoryPut('z', s_Z( FileZMin: FileZMax ), gt_hist(s) )
!      call HistoryPut('z', xz_PressBasicZ( 1, FileZMin: FileZMax ), gt_hist(s) )

    end do

    !-----------------------------------------------------------  
    ! 予報変数の出力
    !-----------------------------------------------------------  
    !無次元圧力の擾乱
    call HistoryAddVariable( varname='Exner', dims=(/'x','z','t'/), longname='disturbunce of nondimensional pressure', units=' ', xtype='double', history=gt_hist(1) )
    
    !温位の擾乱
    call HistoryAddVariable( varname='PotTemp', dims=(/'x','z','t'/), longname='disturbunce of potential temperature', units='K', xtype='double', history=gt_hist(2) )

    !水平速度
    call HistoryAddVariable( varname='VelX', dims=(/'x','z','t'/), longname='zonal velocity', units='m.s-1', xtype='double', history=gt_hist(3) )

    !鉛直速度
    call HistoryAddVariable( varname='VelZ', dims=(/'x','z','t'/), longname='vertical velocity', units='m.s-1', xtype='double', history=gt_hist(4) )

    !渦粘性係数(運動量)
    call HistoryAddVariable( varname='Km', dims=(/'x','z','t'/), longname='turbulet diffusion coefficient', units='m2.s-1', xtype='double', history=gt_hist(5) )
  
    !渦粘性係数(熱)
    call HistoryAddVariable( varname='Kh', dims=(/'x','z','t'/), longname='turbulet diffusion coefficient for heat', units='m2.s-1', xtype='double', history=gt_hist(6) )
  
    !混合比
    do s = 1, SpcNum
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s)), dims=(/'x','z','t'/), longname=trim(SpcWetSymbol(s))//' Mixing Ratio', units='kg.kg-1', xtype='double', history=gt_hist(8+s))
    end do
    
    !地表面フラックス(水蒸気)
    call HistoryAddVariable( varname='MixRtFluxBulk', dims=(/'x','t'/), longname='flux of mixing ratio of vapor from surface', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8+SpcNum+1) )

    !地表面フラックス(熱)
    call HistoryAddVariable( varname='HeatFluxBulk', dims=(/'x','t'/), longname='flux of heating from surface', units='K.s-1', xtype='double', history=gt_hist(8+SpcNum+1) )

    !地表面フラックス(運動量)
    call HistoryAddVariable( varname='MomFluxBulk', dims=(/'x','t'/), longname='flux of momentum from surface', units='kg.m.s-1', xtype='double', history=gt_hist(8+SpcNum+1) )

    !降水
    call HistoryAddVariable( varname='FallRain', dims=(/'x','z','t'/), longname='fall rain term', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8+SpcNum+2) )

    !----------------------------------------------------------------
    ! 解析値
    !----------------------------------------------------------------
    call HistoryAddVariable( varname='BuoyTemp', dims=(/'z','t'/), longname='Buoyancy (Temp)', units='s-2', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='BuoyMolWt', dims=(/'z','t'/), longname='Buoyancy (MolWt)', units='s-2', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='BuoyDrag', dims=(/'z','t'/), longname='Buoyance (Drag)', units='s-2', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='StabTemp', dims=(/'z','t'/), longname='Stability (Temp)', units='s-2', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='StabMolWt', dims=(/'z','t'/), longname='Stability (MolWt)', units='s-2', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempAdv', dims=(/'z','t'/), longname='Advection term of potential temperature', units='K.s-1', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempTurb', dims=(/'z','t'/), longname='Turbulence term of potential temperature', units='K.s-1"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempDisp', dims=(/'z','t'/), longname='Dissipation term of potential temperature', units='K.s-1"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempRad', dims=(/'z','t'/), longname='Radiation term of potential temperature', units='K.s-1"', xtype='double', history=gt_hist(8) ) 
    
    call HistoryAddVariable( varname='PotTempDiff', dims=(/'z','t'/), longname='Numerical diffusion term of potential temperature', units='K.s-1', xtype='double', history=gt_hist(8) ) 
    
    call HistoryAddVariable( varname='PotTempCond', dims=(/'z','t'/), longname='Latent heat term of potential temperature', units='K.s-1', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempFlux', dims=(/'z','t'/), longname='Surface Flux term of potential temperature', units='K.s-1"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='PotTempDamp', dims=(/'z','t'/), longname='Newtonian Cooling term of potential temperature', units='K.s-1"', xtype='double', history=gt_hist(8) ) 

    !----------------------------------------------------------------
    ! 運動量の x 平均の時間変化を Zprof に追加
    !----------------------------------------------------------------

    call HistoryAddVariable( varname='Mom_Adv', dims=(/'z','t'/), longname='Advection term of momentum in x direction', units='kg.m..s-2"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='Mom_Turb', dims=(/'z','t'/), longname='Turblence term of momentum in x direction', units='kg.m..s-2"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='Mom_Diff', dims=(/'z','t'/), longname='Numerical diffusion term of momentum in x direction', units='kg.m..s-2"', xtype='double', history=gt_hist(8) ) 

    call HistoryAddVariable( varname='Mom_Flux', dims=(/'z','t'/), longname='Flux term of momentum in x direction', units='kg.m..s-2"', xtype='double', history=gt_hist(8) )
 
    !----------------------------------------------------------------
    ! Mixing Ratio time change
    !----------------------------------------------------------------
    do s = 1, SpcNum
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Adv', dims=(/'z','t'/), longname='Advection term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
      
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Turb', dims=(/'z','t'/), longname='Turbulence term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
      
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Diff', dims=(/'z','t'/), longname='Diffusion term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
      
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Flux', dims=(/'z','t'/), longname='Surface Flux term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
    
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Rain', dims=(/'z','t'/), longname='Fall Rain term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
    
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Fill1', dims=(/'z','t'/), longname='Filling Negative term 1 of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
    
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Fill2', dims=(/'z','t'/), longname='Filling Negative term 2 of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
    
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'_Cond', dims=(/'z','t'/), longname='Condensation term of ' //trim(SpcWetSymbol(s))//' mixing ratio', units='kg.kg-1.s-1', xtype='double', history=gt_hist(8) ) 
    
!      call HistoryAddVariable(  &
!        & varname=trim(SpcWetSymbol(s))//'_Asln', & 
!        & dims=(/'z','t'/),     &
!        & longname='Asselin time filter term of '          &
!        &           //trim(SpcWetSymbol(s))//' mixing ratio',  &
!        & units='kg.kg-1.s-1',    &
!        & xtype='double',       &
!        & history=gt_hist(8) ) 
    
    end do

    !-----------------------------------------------------------  
    ! 基本場の出力
    !-----------------------------------------------------------  
    !無次元圧力の基本場
    call HistoryAddVariable( varname='ExnerBasicZ', dims=(/'x','z'/), longname='nondimensional pressure', units='1', xtype='double', history=gt_hist(7) ) 
    
    !温位の基本場
    call HistoryAddVariable( varname='PotTempBasicZ', dims=(/'x','z'/), longname='potential temperature', units='K', xtype='double', history=gt_hist(7) ) 
    
    !仮温位の基本場
    call HistoryAddVariable( varname='VPotTempBasicZ', dims=(/'x','z'/), longname='vertial potential temperature', units='K', xtype='double', history=gt_hist(7) ) 
    
    !密度の基本場
    call HistoryAddVariable( varname='DensBasicZ', dims=(/'x','z'/), longname='density', units='Kg.m-3', xtype='double', history=gt_hist(7) ) 
    
    !音波速度の基本場
    call HistoryAddVariable( varname='VelSoundBasicZ', dims=(/'x','z'/), longname='sound velocity', units='m.s-2', xtype='double', history=gt_hist(7) ) 
    
    !温度の基本場
    call HistoryAddVariable( varname='TempBasicZ', dims=(/'x','z'/), longname='Temperature of basic state', units='K', xtype='double', history=gt_hist(7) ) 
    
    !圧力の基本場
    call HistoryAddVariable( varname='PressBasicZ', dims=(/'x','z'/), longname='Pressure of basic state', units='Pa', xtype='double', history=gt_hist(7) ) 
    
    !混合比の基本場
    do s = 1, SpcNum
      call HistoryAddVariable( varname=trim(SpcWetSymbol(s))//'BasicZ', dims=(/'x','z'/), longname=trim(SpcWetSymbol(s))//' Mixing Ratio of basic state', units='kg.kg-1', xtype='double', history=gt_hist(7) ) 
    end do

    !分子量効果
    call HistoryAddVariable( varname='EffMolWtBasicZ', dims=(/'x','z'/), longname='Effect of Mole Weight', units='1', xtype='double', history=gt_hist(7) ) 

    !-------------------------------------------------------------
    ! 基本場のファイル出力
    !-------------------------------------------------------------
    call HistoryPut( 'DensBasicZ', xz_DensBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'ExnerBasicZ', xz_ExnerBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'PotTempBasicZ', xz_PotTempBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'VPotTempBasicZ', xz_PotTempBasicZ(FileXMin:FileXMax, FileZMin:FileZMax) / xz_EffMolWtBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'VelSoundBasicZ', xz_VelSoundBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'TempBasicZ', xz_TempBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    call HistoryPut( 'PressBasicZ', xz_PressBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )

    do s = 1, SpcNum
      call HistoryPut( trim(SpcWetSymbol(s))//'BasicZ', xza_MixRtBasicZ(FileXMin:FileXMax, FileZMin:FileZMax, s), gt_hist(7) )
    end do

    call HistoryPut( 'EffMolWtBasicZ', xz_EffMolWtBasicZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(7) )
    
  end subroutine HistoryFile_Open
Subroutine :
Time :real(8), intent(in)
xz_PotTemp(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
xz_Exner(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
xza_MixRt(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum) :real(8), intent(in)
xz_Km(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)
xz_Kh(DimXMin:DimXMax, DimZMin:DimZMax) :real(8), intent(in)

予報変数のヒストリファイルへの出力. 出力時には半格子点の位置でプロット.

[Source]

  subroutine HistoryFile_OutPut( Time, xz_PotTemp, xz_Exner, pz_VelX, xr_VelZ, xza_MixRt, xz_Km, xz_Kh )
    !
    !予報変数のヒストリファイルへの出力. 出力時には半格子点の位置でプロット. 
    !
    
    !モジュール読み込み
    use average,   only: xz_avr_pz, xz_avr_xr

    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in) :: Time
    real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xz_Exner(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xz_PotTemp(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xz_Km(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xz_Kh(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8), intent(in) :: xza_MixRt(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum)

    real(8)             :: xz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
    real(8)             :: xz_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
    integer             :: s

    !----------------------------------------------------------------
    ! 格子点位置を変換
    !----------------------------------------------------------------
    xz_VelX = xz_avr_pz( pz_VelX )
    xz_VelZ = xz_avr_xr( xr_VelZ )

    !----------------------------------------------------------------
    ! 値を出力
    !----------------------------------------------------------------

    do s = 1, 10 + SpcNum
      call HistoryPut( 't', Time, gt_hist(s) )
    end do
    
    call HistoryPut( 'Exner', xz_Exner(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(1) )

    call HistoryPut( 'PotTemp', xz_PotTemp(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(2) )

    call HistoryPut( 'VelX', xz_VelX(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(3) )
    
    call HistoryPut( 'VelZ', xz_VelZ(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(4) )

    call HistoryPut( 'Km', xz_Km(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(5) )
    
    call HistoryPut( 'Kh', xz_Kh(FileXMin:FileXMax, FileZMin:FileZMax), gt_hist(6) )
    
    do s = 1, SpcNum
      call HistoryPut( trim(SpcWetSymbol(s)), xza_MixRt(FileXMin:FileXMax, FileZMin:FileZMax, s), gt_hist(8+s) )
    end do


    call HistoryPut( 'MixRtFluxBulk', xza_Flux(FileXMin:FileXMax, FileZMin, 1), gt_hist(8+SpcNum+1) )


    call HistoryPut( 'HeatFluxBulk', xz_Flux(FileXMin:FileXMax, FileZMin), gt_hist(8+SpcNum+1) )

    call HistoryPut( 'MomFluxBulk', pz_MomFlux(FileXMin:FileXMax, FileZMin), gt_hist(8+SpcNum+1) )

  do s = 1, RainNum
    call HistoryPut( 'FallRain', xza_Rain(FileXMin:FileXMax, FileZMin:FileZMax, IdxR(s)), gt_hist(8+SpcNum+2) )
  end do

    !----------------------------------------------------------------
    ! 解析値を出力
    !----------------------------------------------------------------
    call StorePotTempMeanX()
    call StoreMixRtMeanX()
    call StoreMomMeanX()
    call StoreBuoyMeanX()
    call StoreStabMeanX()

    call HistoryPut( 'BuoyTemp', z_BuoyTemp(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'BuoyMolWt', z_BuoyMolWt(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'BuoyDrag', z_BuoyDrag(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'StabTemp', z_StabTemp(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'StabMolWt', z_StabMolWt(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempAdv', z_Adv(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempTurb', z_Turb(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempDisp', z_Disp(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempDiff', z_Diff(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempRad', z_Rad(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempCond', z_Cond(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempFlux', z_Flux(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'PotTempDamp', z_Damp(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'Mom_Adv', z_MomAdv(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'Mom_Turb', z_MomTurb(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'Mom_Diff', z_MomDiff(FileZMin:FileZMax), gt_hist(8) )

    call HistoryPut( 'Mom_Flux', z_MomFlux(FileZMin:FileZMax), gt_hist(8) )

    do s = 1, SpcNum
      call HistoryPut( trim(SpcWetSymbol(s))//'_Adv', za_Adv(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Turb', za_Turb(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Diff', za_Diff(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Flux', za_Flux(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Rain', za_Rain(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Fill1', za_Fill1(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Fill2', za_Fill2(FileZMin:FileZMax, s), gt_hist(8) )

      call HistoryPut( trim(SpcWetSymbol(s))//'_Cond', za_cond(FileZMin:FileZMax, s), gt_hist(8) )

!      call HistoryPut(                      &
!        & trim(SpcWetSymbol(s))//'_Asln',    &
!        & za_Asln(FileZMin:FileZMax, s),   &
!        & gt_hist(8) )

    end do

  end subroutine HistoryFile_OutPut