Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:10 2011
FILE NAME: restartfileio.f90
PROGRAM NAME: restartfileio
DIAGNOSTIC LIST

  LINE  LEVEL( NO.): DIAGNOSTIC MESSAGE

    99  vec  (   4): Vectorized array expression.
   100  vec  (   1): Vectorized loop.
   135  vec  (   4): Vectorized array expression.
   430  vec  (   4): Vectorized array expression.
   430  vec  (   4): Vectorized array expression.
   434  vec  (   4): Vectorized array expression.
   434  vec  (   4): Vectorized array expression.
   438  vec  (   4): Vectorized array expression.
   438  vec  (   4): Vectorized array expression.
   442  vec  (   4): Vectorized array expression.
   442  vec  (   4): Vectorized array expression.
   446  vec  (   4): Vectorized array expression.
   446  vec  (   4): Vectorized array expression.
   450  vec  (   4): Vectorized array expression.
   450  vec  (   4): Vectorized array expression.
   454  vec  (   4): Vectorized array expression.
   454  vec  (   4): Vectorized array expression.
   458  vec  (   4): Vectorized array expression.
   458  vec  (   4): Vectorized array expression.
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:10 2011
FILE NAME: restartfileio.f90
PROGRAM NAME: restartfileio
TRANSFORMATION LIST

  LINE                   FORTRAN STATEMENT

     1  != Module ReStartFileIO
     2  !
     3  ! Authors::   SUGIYAMA Ko-ichiro, ODAKA Masatsugu
     4  ! Version::   $Id: restartfileio.f90,v 1.13 2011-06-21 06:14:51 sugiyama Exp $
     5  ! Tag Name::  $Name: arare5-20111010 $
     6  ! Copyright:: Copyright (C) GFD Dennou Club, 2007. All rights reserved.
     7  ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8  !
     9  !== Overview
    10  !
    11  !リスタート用の場の情報を netCDF ファイルに出力するためのルーチン
    12  !
    13  !== Error Handling
    14  !
    15  !== Known Bugs
    16  !
    17  !== Note
    18  !
    19  !速度を評価する格子位置と, 軸として入力してある座標値は整合的でないことに注意
    20  !
    21  !== Future Plans
    22  !
    23  
    24  module ReStartFileIO
    25    !
    26    !リスタート用の場の情報を netCDF ファイルに出力するためのルーチン
    27    !
    28  
    29    !モジュール読み込み
    30    use gtool_history
    31    use dc_types,  only : DP, STRING
    32    use dc_message,only : MessageNotify
    33    use dc_string, only : toChar
    34    use dc_iounit, only : FileOpen
    35    use mpi_wrapper,   only: myrank, FLAG_LIB_MPI
    36    use axesset,  only: x_X,        &!X 座標軸(スカラー格子点)
    37      &                 y_Y,        &!Y 座標軸(スカラー格子点)
    38      &                 z_Z          !Z 座標軸(スカラー格子点)
    39    use gridset,  only: &
    40      &                 imin,           &!X 方向の配列の下限
    41      &                 imax,           &!X 方向の配列の上限
    42      &                 jmin,           &!Y 方向の配列の下限
    43      &                 jmax,           &!Y 方向の配列の上限
    44      &                 kmin,           &!Z 方向の配列の下限
    45      &                 kmax,           &!Z 方向の配列の上限
    46      &                 ncmax              !凝縮成分の数
    47    use timeset,  only: DelTimeLong, RestartTime
    48    use fileset,  only: &
    49      &                 filetitle,        &!データの表題
    50      &                 filesource,       &!データを作成する手順
    51      &                 FileInstitution    !最終変更者・組織
    52    use basicset, only: basicset_init
    53    use namelist_util, only: namelist_filename
    54  
    55    !暗黙の型宣言禁止
    56    implicit none
    57  
    58    !関数を public に指定
    59    public ReStartFileIO_init
    60    public ReStartFileio_Finalize
    61    public ReStartFileio_BZ_Get
    62    public ReStartFileio_Var_Get
    63  
    64    type(GT_HISTORY), save, public   :: rstat
    65    character(STRING), save, private :: InputFile  = "input.nc"
    66    character(STRING), save, private :: OutputFile = "output.nc"
    67  
    68  contains
    69  
    70    subroutine ReStartFileio_Init
    71      !
    72      !リスタートファイルの書き出し
    73      !
    74  
    75      !暗黙の型宣言禁止
    76      implicit none
    77  
    78      !変数定義
    79      real(4)            :: SpcID(ncmax)
    80      integer            :: N, L, M
    81      integer            :: s
    82      integer            :: unit     !装置番号
    83  
    84      !NAMELIST から情報を取得
    85      NAMELIST /restartfileio_nml/ InputFile, OutputFile
    86  
    87      call FileOpen(unit, file=namelist_filename, mode='r')
    88      read(unit, NML=restartfileio_nml)
    89      close(unit)
    90  
    91      !確認
    92      if (myrank == 0) then
    93        call MessageNotify( "M", &
    94          & "restartfileioIO_init", "InputFile  = %c", c1=trim(InputFile) )
    95        call MessageNotify( "M", &
    96          & "restartfileioIO_init", "OutputFile = %c", c1=trim(OutputFile) )
    97      end if
    98  
    99      SpcID = 0.0d0
   100      do s = 1, ncmax
   101        SpcID(s) = real( s, 4 )
   102      end do
   103  
   104      N = size(x_X, 1)
   105      L = size(y_Y, 1)
   106      M = size(z_Z, 1)
   107  
   108      !-------------------------------------------------------------
   109      ! ヒストリー作成
   110      !-------------------------------------------------------------
   111      call HistoryCreate(                              &
   112        & file = Outputfile,                          &
   113        & title = filetitle,                           &
   114        & source = filesource,                         &
   115        & institution = FileInstitution,               &
   116        & dims=(/'x','y','z','s','t'/),                &
   117        & dimsizes=(/N, L, M, ncmax, 0/),                 &
   118        & longnames=(/'X-coordinate',                  &
   119        &             'Y-coordinate',                  &
   120        &             'Z-coordinate',                  &
   121        &             'Species Num ',                  &
   122        &             'Time        '/),                &
   123        & units=(/'m  ','m  ','m  ','1  ','sec'/),     &
   124        & xtypes=(/'double', 'double', 'double', 'double', 'double'/), &
   125        & flag_mpi_split = FLAG_LIB_MPI,               &
   126        & origin=0.0, interval=1.0,                    &
   127        & history=rstat, quiet=.true. )
   128  
   129      !-------------------------------------------------------------
   130      ! 変数出力
   131      !-------------------------------------------------------------
   132      call HistoryPut('x', x_X, rstat )
   133      call HistoryPut('y', y_Y, rstat )
   134      call HistoryPut('z', z_Z, rstat )
   135      call HistoryPut('s', real(SpcID, 4), rstat )
   136  
   137      !無次元圧力の基本場
   138      call HistoryAddVariable(                             &
   139        & varname='ExnerBZ', dims=(/'x','y','z'/),      &
   140        & longname='nondimensional pressure', units='1',&
   141        & xtype='double', history=rstat )
   142  
   143      !温位の基本場
   144      call HistoryAddVariable(                            &
   145        & varname='PTempBZ', dims=(/'x','y','z'/),    &
   146        & longname='potential temperature',            &
   147        & units='K', xtype='double', history=rstat )
   148  
   149      !密度の基本場
   150      call HistoryAddVariable(                            &
   151        & varname='DensBZ', dims=(/'x','y','z'/),      &
   152        & longname='density',                          &
   153        & units='Kg.m-3', xtype='double', history=rstat )
   154  
   155      !音波速度の基本場
   156      call HistoryAddVariable(                            &
   157        & varname='VelSoundBZ', dims=(/'x','y','z'/),  &
   158        & longname='sound velocity',                   &
   159        & units='m.s-2', xtype='double', history=rstat )
   160  
   161      !温度の基本場
   162      call HistoryAddVariable(                            &
   163        & varname='TempBZ', dims=(/'x','y','z'/),  &
   164        & longname='Temperature of basic state',       &
   165        & units='K', xtype='double', history=rstat )
   166  
   167      !圧力の基本場
   168      call HistoryAddVariable(                            &
   169        & varname='PressBZ', dims=(/'x','y','z'/),  &
   170        & longname='Pressure of basic state',             &
   171        & units='Pa', xtype='double', history=rstat )
   172  
   173      !水蒸気混合比の基本場
   174      call HistoryAddVariable(                            &
   175        & varname='QMixBZ', dims=(/'x','y','z','s'/),  &
   176        & longname='Mixing ratio of Condensible volatiles',        &
   177        & units='kg.kg-1', xtype='double', history=rstat )
   178  
   179      !分子量効果
   180      call HistoryAddVariable(                         &
   181        & varname='EffMolWtBZ', dims=(/'x','y','z'/),  &
   182        & longname='Effect of Mole Weight',            &
   183        & units='1', xtype='double', history=rstat )
   184  
   185      !分子量効果
   186      call HistoryAddVariable(                        &
   187        & varname='HumBZ', dims=(/'x','y','z','s'/),  &
   188        & longname='Humidity',                        &
   189        & units='1', xtype='double', history=rstat )
   190  
   191      !速度
   192      call HistoryAddVariable(                         &
   193        & varname='VelX', dims=(/'x','y','z','t'/),        &
   194        & longname='zonal velocity',                   &
   195        & units='m.s-1',                                 &
   196        & xtype='double', history=rstat )
   197  
   198      !速度
   199      call HistoryAddVariable(                         &
   200        & varname='VelY', dims=(/'x','y','z','t'/),        &
   201        & longname='meridional velocity',              &
   202        & units='m.s-1',                                 &
   203        & xtype='double', history=rstat )
   204  
   205      !速度
   206      call HistoryAddVariable(                         &
   207        & varname='VelZ', dims=(/'x','y','z','t'/),        &
   208        & longname='vertical velocity',                &
   209        & units='m.s-1',                                 &
   210        & xtype='double', history=rstat )
   211  
   212      !無次元圧力
   213      call HistoryAddVariable(                         &
   214        & varname='Exner', dims=(/'x','y','z','t'/),       &
   215        & longname='nondimensional pressure',          &
   216        & units='1',                                   &
   217        & xtype='double', history=rstat )
   218  
   219      !温位の擾乱
   220      call HistoryAddVariable(                         &
   221        & varname='PTemp', dims=(/'x','y','z','t'/),     &
   222        & longname='virtual potential temperature',    &
   223        & units='K',                                   &
   224        & xtype='double', history=rstat )
   225  
   226      !渦粘性係数
   227      call HistoryAddVariable(                         &
   228        & varname='Km', dims=(/'x','y','z','t'/),      &
   229        & longname='Km',                               &
   230        & units='m2.s-1',                              &
   231        & xtype='double', history=rstat )
   232  
   233      !渦粘性係数
   234      call HistoryAddVariable(                         &
   235        & varname='Kh', dims=(/'x','y','z','t'/),      &
   236        & longname='Kh',                               &
   237        & units='m2.s-1',                              &
   238        & xtype='double', history=rstat )
   239  
   240      !雲密度
   241      call HistoryAddVariable(                         &
   242        & varname='CDens', dims=(/'x','y','z','t'/),   &
   243        & longname='CDens',                            &
   244        & units='m2.s-1',                              &
   245        & xtype='double', history=rstat )
   246  
   247      !混合比
   248      call HistoryAddVariable(                         &
   249        & varname='QMix', dims=(/'x','y','z','s','t'/),&
   250        & longname='Mixing Ratio',                     &
   251        & units='kg.kg-1"',                            &
   252        & xtype='double', history=rstat )
   253  
   254    end subroutine ReStartFileio_Init
   255  
   256  
   257    subroutine ReStartFileIO_Finalize
   258      !
   259      !リスタートファイルのクローズ
   260      !
   261  
   262      !モジュール読み込み
   263      use gtool_history
   264  
   265      !暗黙の型宣言禁止
   266      implicit none
   267  
   268      !ファイルを閉じる
   269      call HistoryClose(rstat, quiet=.true.)
   270  
   271    end subroutine ReStartFileIO_Finalize
   272  
   273  
   274    subroutine ReStartFileio_Var_Get(   &
   275      & pyz_VelXB,  pyz_VelXN,    & ! (in)
   276      & xqz_VelYB,  xqz_VelYN,    & ! (in)
   277      & xyr_VelZB,  xyr_VelZN,    & ! (in)
   278      & xyz_PTempB, xyz_PTempN,   & ! (in)
   279      & xyz_ExnerB, xyz_ExnerN,   & ! (in)
   280      & xyzf_QMixB, xyzf_QMixN,   & ! (in)
   281      & xyz_KmB,    xyz_KmN,      & ! (in)
   282      & xyz_KhB,    xyz_KhN,      & ! (in)
   283      & xyz_CDensB, xyz_CDensN  )
   284      !
   285      !リスタートファイルから情報取得
   286      !
   287  
   288      !暗黙の型宣言禁止
   289      implicit none
   290  
   291      !変数定義
   292      real(DP), intent(out) :: pyz_VelXN &
   293        &                     (imin:imax,jmin:jmax,kmin:kmax)
   294      real(DP), intent(out) :: xqz_VelYN &
   295        &                     (imin:imax,jmin:jmax,kmin:kmax)
   296      real(DP), intent(out) :: xyr_VelZN &
   297        &                     (imin:imax,jmin:jmax,kmin:kmax)
   298      real(DP), intent(out) :: xyz_ExnerN &
   299        &                     (imin:imax,jmin:jmax,kmin:kmax)
   300      real(DP), intent(out) :: xyz_PTempN &
   301        &                     (imin:imax,jmin:jmax,kmin:kmax)
   302      real(DP), intent(out) :: xyz_KmN &
   303        &                     (imin:imax,jmin:jmax,kmin:kmax)
   304      real(DP), intent(out) :: xyz_KhN &
   305        &                     (imin:imax,jmin:jmax,kmin:kmax)
   306      real(DP), intent(out) :: xyz_CDensN &
   307        &                     (imin:imax,jmin:jmax,kmin:kmax)
   308      real(DP), intent(out) :: xyzf_QMixN &
   309        &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   310      real(DP), intent(out) :: pyz_VelXB &
   311        &                     (imin:imax,jmin:jmax,kmin:kmax)
   312      real(DP), intent(out) :: xqz_VelYB &
   313        &                     (imin:imax,jmin:jmax,kmin:kmax)
   314      real(DP), intent(out) :: xyr_VelZB &
   315        &                     (imin:imax,jmin:jmax,kmin:kmax)
   316      real(DP), intent(out) :: xyz_ExnerB &
   317        &                     (imin:imax,jmin:jmax,kmin:kmax)
   318      real(DP), intent(out) :: xyz_PTempB &
   319        &                     (imin:imax,jmin:jmax,kmin:kmax)
   320      real(DP), intent(out) :: xyz_KmB &
   321        &                     (imin:imax,jmin:jmax,kmin:kmax)
   322      real(DP), intent(out) :: xyz_KhB &
   323        &                     (imin:imax,jmin:jmax,kmin:kmax)
   324      real(DP), intent(out) :: xyz_CDensB &
   325        &                     (imin:imax,jmin:jmax,kmin:kmax)
   326      real(DP), intent(out) :: xyzf_QMixB &
   327        &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   328  
   329      character(STRING)    :: name               !変数名
   330      character(STRING)    :: TimeN = ""
   331      character(STRING)    :: TimeB = ""
   332  
   333      !-------------------------------------------------------------
   334      ! Get a Value from netCDF File
   335      !-------------------------------------------------------------
   336      if (RestartTime /= 0.0d0) then
   337        timeB = 't=' // toChar( RestartTime - DelTimeLong)
   338        timeN = 't=' // toChar( RestartTime  )
   339      else
   340        timeB = 't=' // toChar( RestartTime )
   341        timeN = 't=' // toChar( RestartTime )
   342      end if
   343  
   344  !    write(*,*) TimeN, TimeB
   345  
   346      name = "PTemp"
   347      call HistoryGet( InputFile, 'PTemp', xyz_PTempB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   348      call HistoryGet( InputFile, 'PTemp', xyz_PTempN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   349  
   350      name = "VelX"
   351      call HistoryGet( InputFile, name, pyz_VelXB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   352      call HistoryGet( InputFile, name, pyz_VelXN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   353  
   354      name = "VelY"
   355      call HistoryGet( InputFile, name, xqz_VelYB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   356      call HistoryGet( InputFile, name, xqz_VelYN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   357  
   358      name = "VelZ"
   359      call HistoryGet( InputFile, name, xyr_VelZB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   360      call HistoryGet( InputFile, name, xyr_VelZN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   361  
   362      name = "Exner"
   363      call HistoryGet( InputFile, name, xyz_ExnerB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   364      call HistoryGet( InputFile, name, xyz_ExnerN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   365  
   366      name = "Km"
   367      call HistoryGet( InputFile, name, xyz_KmB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   368      call HistoryGet( InputFile, name, xyz_KmN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   369  
   370      name = "Kh"
   371      call HistoryGet( InputFile, name, xyz_KhB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   372      call HistoryGet( InputFile, name, xyz_KhN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   373  
   374      name = "CDens"
   375      call HistoryGet( InputFile, name, xyz_CDensB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   376      call HistoryGet( InputFile, name, xyz_CDensN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   377  
   378      name = "QMix"
   379      call HistoryGet( InputFile, name, xyzf_QMixB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   380      call HistoryGet( InputFile, name, xyzf_QMixN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   381  
   382    end subroutine ReStartFileio_Var_Get
   383  
   384  
   385  
   386    subroutine ReStartFileio_BZ_Get()
   387      !
   388      !リスタートファイルから情報取得
   389      !
   390  
   391      !暗黙の型宣言禁止
   392      implicit none
   393  
   394      !変数定義
   395      real(DP)              :: Var3D &
   396        &                     (imin:imax,jmin:jmax,kmin:kmax)
   397      real(DP)              :: Var4D &
   398        &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   399      real(DP)              :: xyz_ExnerBZ &
   400        &                     (imin:imax,jmin:jmax,kmin:kmax)
   401                                                 !基本場のエクスナー関数
   402      real(DP)              :: xyz_DensBZ &
   403        &                     (imin:imax,jmin:jmax,kmin:kmax)
   404                                                 !基本場の密度
   405      real(DP)              :: xyz_PTempBZ &
   406        &                     (imin:imax,jmin:jmax,kmin:kmax)
   407                                                 !基本場の温位
   408      real(DP)              :: xyz_VelSoundBZ &
   409        &                     (imin:imax,jmin:jmax,kmin:kmax)
   410                                                 !基本場の音速
   411      real(DP)              :: xyz_PressBZ &
   412        &                     (imin:imax,jmin:jmax,kmin:kmax)
   413                                                 !基本場の圧力
   414      real(DP)              :: xyz_TempBZ &
   415        &                     (imin:imax,jmin:jmax,kmin:kmax)
   416                                                 !基本場の温度
   417      real(DP)              :: xyzf_QMixBZ &
   418        &                     (imin:imax,jmin:jmax,kmin:kmax, ncmax)
   419                                                 !基本場の混合比
   420      real(DP)              :: xyz_EffMolWtBZ &
   421        &                     (imin:imax,jmin:jmax,kmin:kmax)
   422                                                 !基本場の分子量効果
   423      character(STRING)    :: name               !変数名
   424  
   425      !-------------------------------------------------------------
   426      ! 基本場の取得
   427      !
   428      name = "DensBZ"
   429      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   430      xyz_DensBZ = Var3D
     .           if (xyz_densbz.DSC.U2 + 1 - xyz_densbz.DSC.L2 .gt. 0) then     
     .           J1 = and(xyz_densbz.DSC.U2 + 1 - xyz_densbz.DSC.L2,3)          
     .  !CDIR    NODEP                                                          
     .           do t317 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t319 = 1, xyz_densbz.DSC.U1 + 1 - xyz_densbz.DSC.L1      
     .                 xyz_densbz(xyz_densbz.DSC.L1+t319-1,t317-1+              
     .       1            xyz_densbz.DSC.L2,t315+xyz_densbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t319-1,t317-1+var3d.DSC.L2,t315+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t317 = J1 + 1, xyz_densbz.DSC.U2 + 1 - xyz_densbz.DSC.L2, 4 
     .  !CDIR       NODEP                                                       
     .              do t319 = 1, xyz_densbz.DSC.U1 + 1 - xyz_densbz.DSC.L1      
     .                 xyz_densbz(xyz_densbz.DSC.L1+t319-1,t317-1+              
     .       1            xyz_densbz.DSC.L2,t315+xyz_densbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t319-1,t317-1+var3d.DSC.L2,t315+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_densbz(xyz_densbz.DSC.L1+t319-1,t317+                
     .       1            xyz_densbz.DSC.L2,t315+xyz_densbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t319-1,t317+var3d.DSC.L2,t315+           
     .       3            var3d.DSC.L3)                                         
     .                 xyz_densbz(xyz_densbz.DSC.L1+t319-1,t317+1+              
     .       1            xyz_densbz.DSC.L2,t315+xyz_densbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t319-1,t317+1+var3d.DSC.L2,t315+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_densbz(xyz_densbz.DSC.L1+t319-1,t317+2+              
     .       1            xyz_densbz.DSC.L2,t315+xyz_densbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t319-1,t317+2+var3d.DSC.L2,t315+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   431  
   432      name = "ExnerBZ"
   433      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   434      xyz_ExnerBZ = Var3D
     .        if (xyz_exnerbz.DSC.U2 + 1 - xyz_exnerbz.DSC.L2 .gt. 0) then      
     .           J2 = and(xyz_exnerbz.DSC.U2 + 1 - xyz_exnerbz.DSC.L2,3)        
     .  !CDIR    NODEP                                                          
     .           do t329 = 1, J2                                                
     .  !CDIR       NODEP                                                       
     .              do t331 = 1, xyz_exnerbz.DSC.U1 + 1 - xyz_exnerbz.DSC.L1    
     .                 xyz_exnerbz(xyz_exnerbz.DSC.L1+t331-1,t329-1+            
     .       1            xyz_exnerbz.DSC.L2,t327+xyz_exnerbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t331-1,t329-1+var3d.DSC.L2,t327+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t329=J2+1,xyz_exnerbz.DSC.U2+1-xyz_exnerbz.DSC.L2,4         
     .  !CDIR       NODEP                                                       
     .              do t331 = 1, xyz_exnerbz.DSC.U1 + 1 - xyz_exnerbz.DSC.L1    
     .                 xyz_exnerbz(xyz_exnerbz.DSC.L1+t331-1,t329-1+            
     .       1            xyz_exnerbz.DSC.L2,t327+xyz_exnerbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t331-1,t329-1+var3d.DSC.L2,t327+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_exnerbz(xyz_exnerbz.DSC.L1+t331-1,t329+              
     .       1            xyz_exnerbz.DSC.L2,t327+xyz_exnerbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t331-1,t329+var3d.DSC.L2,t327+           
     .       3            var3d.DSC.L3)                                         
     .                 xyz_exnerbz(xyz_exnerbz.DSC.L1+t331-1,t329+1+            
     .       1            xyz_exnerbz.DSC.L2,t327+xyz_exnerbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t331-1,t329+1+var3d.DSC.L2,t327+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_exnerbz(xyz_exnerbz.DSC.L1+t331-1,t329+2+            
     .       1            xyz_exnerbz.DSC.L2,t327+xyz_exnerbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t331-1,t329+2+var3d.DSC.L2,t327+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   435  
   436      name = "PTempBZ"
   437      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   438      xyz_PTempBZ = Var3D
     .        if (xyz_ptempbz.DSC.U2 + 1 - xyz_ptempbz.DSC.L2 .gt. 0) then      
     .           J3 = and(xyz_ptempbz.DSC.U2 + 1 - xyz_ptempbz.DSC.L2,3)        
     .  !CDIR    NODEP                                                          
     .           do t341 = 1, J3                                                
     .  !CDIR       NODEP                                                       
     .              do t343 = 1, xyz_ptempbz.DSC.U1 + 1 - xyz_ptempbz.DSC.L1    
     .                 xyz_ptempbz(xyz_ptempbz.DSC.L1+t343-1,t341-1+            
     .       1            xyz_ptempbz.DSC.L2,t339+xyz_ptempbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t343-1,t341-1+var3d.DSC.L2,t339+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t341=J3+1,xyz_ptempbz.DSC.U2+1-xyz_ptempbz.DSC.L2,4         
     .  !CDIR       NODEP                                                       
     .              do t343 = 1, xyz_ptempbz.DSC.U1 + 1 - xyz_ptempbz.DSC.L1    
     .                 xyz_ptempbz(xyz_ptempbz.DSC.L1+t343-1,t341-1+            
     .       1            xyz_ptempbz.DSC.L2,t339+xyz_ptempbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t343-1,t341-1+var3d.DSC.L2,t339+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_ptempbz(xyz_ptempbz.DSC.L1+t343-1,t341+              
     .       1            xyz_ptempbz.DSC.L2,t339+xyz_ptempbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t343-1,t341+var3d.DSC.L2,t339+           
     .       3            var3d.DSC.L3)                                         
     .                 xyz_ptempbz(xyz_ptempbz.DSC.L1+t343-1,t341+1+            
     .       1            xyz_ptempbz.DSC.L2,t339+xyz_ptempbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t343-1,t341+1+var3d.DSC.L2,t339+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_ptempbz(xyz_ptempbz.DSC.L1+t343-1,t341+2+            
     .       1            xyz_ptempbz.DSC.L2,t339+xyz_ptempbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t343-1,t341+2+var3d.DSC.L2,t339+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   439  
   440      name = "VelSoundBZ"
   441      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   442      xyz_VelSoundBZ = Var3D
     .        if (xyz_velsoundbz.DSC.U2 + 1 - xyz_velsoundbz.DSC.L2 .gt. 0) then
     .           J4 = and(xyz_velsoundbz.DSC.U2 + 1 - xyz_velsoundbz.DSC.L2,3)  
     .  !CDIR    NODEP                                                          
     .           do t353 = 1, J4                                                
     .  !CDIR       NODEP                                                       
     .              do t355 = 1, xyz_velsoundbz.DSC.U1 + 1 -                    
     .       1         xyz_velsoundbz.DSC.L1                                    
     .                 xyz_velsoundbz(xyz_velsoundbz.DSC.L1+t355-1,t353-1+      
     .       1            xyz_velsoundbz.DSC.L2,t351+xyz_velsoundbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t355-1,t353-1+var3d.DSC.L2,t351+   
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t353 = J4 + 1, xyz_velsoundbz.DSC.U2 + 1 -                  
     .       1      xyz_velsoundbz.DSC.L2, 4                                    
     .  !CDIR       NODEP                                                       
     .              do t355 = 1, xyz_velsoundbz.DSC.U1 + 1 -                    
     .       1         xyz_velsoundbz.DSC.L1                                    
     .                 xyz_velsoundbz(xyz_velsoundbz.DSC.L1+t355-1,t353-1+      
     .       1            xyz_velsoundbz.DSC.L2,t351+xyz_velsoundbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t355-1,t353-1+var3d.DSC.L2,t351+   
     .       3            var3d.DSC.L3)                                         
     .                 xyz_velsoundbz(xyz_velsoundbz.DSC.L1+t355-1,t353+        
     .       1            xyz_velsoundbz.DSC.L2,t351+xyz_velsoundbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t355-1,t353+var3d.DSC.L2,t351+     
     .       3            var3d.DSC.L3)                                         
     .                 xyz_velsoundbz(xyz_velsoundbz.DSC.L1+t355-1,t353+1+      
     .       1            xyz_velsoundbz.DSC.L2,t351+xyz_velsoundbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t355-1,t353+1+var3d.DSC.L2,t351+   
     .       3            var3d.DSC.L3)                                         
     .                 xyz_velsoundbz(xyz_velsoundbz.DSC.L1+t355-1,t353+2+      
     .       1            xyz_velsoundbz.DSC.L2,t351+xyz_velsoundbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t355-1,t353+2+var3d.DSC.L2,t351+   
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   443  
   444      name = "TempBZ"
   445      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   446      xyz_TempBZ = Var3D
     .        if (xyz_tempbz.DSC.U2 + 1 - xyz_tempbz.DSC.L2 .gt. 0) then        
     .           J5 = and(xyz_tempbz.DSC.U2 + 1 - xyz_tempbz.DSC.L2,3)          
     .  !CDIR    NODEP                                                          
     .           do t365 = 1, J5                                                
     .  !CDIR       NODEP                                                       
     .              do t367 = 1, xyz_tempbz.DSC.U1 + 1 - xyz_tempbz.DSC.L1      
     .                 xyz_tempbz(xyz_tempbz.DSC.L1+t367-1,t365-1+              
     .       1            xyz_tempbz.DSC.L2,t363+xyz_tempbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t367-1,t365-1+var3d.DSC.L2,t363+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t365 = J5 + 1, xyz_tempbz.DSC.U2 + 1 - xyz_tempbz.DSC.L2, 4 
     .  !CDIR       NODEP                                                       
     .              do t367 = 1, xyz_tempbz.DSC.U1 + 1 - xyz_tempbz.DSC.L1      
     .                 xyz_tempbz(xyz_tempbz.DSC.L1+t367-1,t365-1+              
     .       1            xyz_tempbz.DSC.L2,t363+xyz_tempbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t367-1,t365-1+var3d.DSC.L2,t363+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_tempbz(xyz_tempbz.DSC.L1+t367-1,t365+                
     .       1            xyz_tempbz.DSC.L2,t363+xyz_tempbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t367-1,t365+var3d.DSC.L2,t363+           
     .       3            var3d.DSC.L3)                                         
     .                 xyz_tempbz(xyz_tempbz.DSC.L1+t367-1,t365+1+              
     .       1            xyz_tempbz.DSC.L2,t363+xyz_tempbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t367-1,t365+1+var3d.DSC.L2,t363+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_tempbz(xyz_tempbz.DSC.L1+t367-1,t365+2+              
     .       1            xyz_tempbz.DSC.L2,t363+xyz_tempbz.DSC.L3) = var3d(    
     .       2            var3d.DSC.L1+t367-1,t365+2+var3d.DSC.L2,t363+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   447  
   448      name = "PressBZ"
   449      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   450      xyz_PressBZ = Var3D
     .        if (xyz_pressbz.DSC.U2 + 1 - xyz_pressbz.DSC.L2 .gt. 0) then      
     .           J6 = and(xyz_pressbz.DSC.U2 + 1 - xyz_pressbz.DSC.L2,3)        
     .  !CDIR    NODEP                                                          
     .           do t377 = 1, J6                                                
     .  !CDIR       NODEP                                                       
     .              do t379 = 1, xyz_pressbz.DSC.U1 + 1 - xyz_pressbz.DSC.L1    
     .                 xyz_pressbz(xyz_pressbz.DSC.L1+t379-1,t377-1+            
     .       1            xyz_pressbz.DSC.L2,t375+xyz_pressbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t379-1,t377-1+var3d.DSC.L2,t375+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t377=J6+1,xyz_pressbz.DSC.U2+1-xyz_pressbz.DSC.L2,4         
     .  !CDIR       NODEP                                                       
     .              do t379 = 1, xyz_pressbz.DSC.U1 + 1 - xyz_pressbz.DSC.L1    
     .                 xyz_pressbz(xyz_pressbz.DSC.L1+t379-1,t377-1+            
     .       1            xyz_pressbz.DSC.L2,t375+xyz_pressbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t379-1,t377-1+var3d.DSC.L2,t375+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_pressbz(xyz_pressbz.DSC.L1+t379-1,t377+              
     .       1            xyz_pressbz.DSC.L2,t375+xyz_pressbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t379-1,t377+var3d.DSC.L2,t375+           
     .       3            var3d.DSC.L3)                                         
     .                 xyz_pressbz(xyz_pressbz.DSC.L1+t379-1,t377+1+            
     .       1            xyz_pressbz.DSC.L2,t375+xyz_pressbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t379-1,t377+1+var3d.DSC.L2,t375+         
     .       3            var3d.DSC.L3)                                         
     .                 xyz_pressbz(xyz_pressbz.DSC.L1+t379-1,t377+2+            
     .       1            xyz_pressbz.DSC.L2,t375+xyz_pressbz.DSC.L3) = var3d(  
     .       2            var3d.DSC.L1+t379-1,t377+2+var3d.DSC.L2,t375+         
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   451  
   452      name = "QMixBZ"
   453      call HistoryGet( InputFile, name, Var4D, flag_mpi_split = FLAG_LIB_MPI )
   454      xyzf_QMixBZ = Var4D
     .        if (xyzf_qmixbz.DSC.U2 + 1 - xyzf_qmixbz.DSC.L2 .gt. 0) then      
     .           J7 = and(xyzf_qmixbz.DSC.U2 + 1 - xyzf_qmixbz.DSC.L2,3)        
     .  !CDIR    NODEP                                                          
     .           do t391 = 1, J7                                                
     .  !CDIR       NODEP                                                       
     .              do t393 = 1, xyzf_qmixbz.DSC.U1 + 1 - xyzf_qmixbz.DSC.L1    
     .                 xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t393-1,t391-1+            
     .       1            xyzf_qmixbz.DSC.L2,t389+xyzf_qmixbz.DSC.L3,t387+1) =  
     .       2            var4d(var4d.DSC.L1+t393-1,t391-1+var4d.DSC.L2,t389+   
     .       3            var4d.DSC.L3,t387+1)                                  
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t391=J7+1,xyzf_qmixbz.DSC.U2+1-xyzf_qmixbz.DSC.L2,4         
     .  !CDIR       NODEP                                                       
     .              do t393 = 1, xyzf_qmixbz.DSC.U1 + 1 - xyzf_qmixbz.DSC.L1    
     .                 xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t393-1,t391-1+            
     .       1            xyzf_qmixbz.DSC.L2,t389+xyzf_qmixbz.DSC.L3,t387+1) =  
     .       2            var4d(var4d.DSC.L1+t393-1,t391-1+var4d.DSC.L2,t389+   
     .       3            var4d.DSC.L3,t387+1)                                  
     .                 xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t393-1,t391+              
     .       1            xyzf_qmixbz.DSC.L2,t389+xyzf_qmixbz.DSC.L3,t387+1) =  
     .       2            var4d(var4d.DSC.L1+t393-1,t391+var4d.DSC.L2,t389+     
     .       3            var4d.DSC.L3,t387+1)                                  
     .                 xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t393-1,t391+1+            
     .       1            xyzf_qmixbz.DSC.L2,t389+xyzf_qmixbz.DSC.L3,t387+1) =  
     .       2            var4d(var4d.DSC.L1+t393-1,t391+1+var4d.DSC.L2,t389+   
     .       3            var4d.DSC.L3,t387+1)                                  
     .                 xyzf_qmixbz(xyzf_qmixbz.DSC.L1+t393-1,t391+2+            
     .       1            xyzf_qmixbz.DSC.L2,t389+xyzf_qmixbz.DSC.L3,t387+1) =  
     .       2            var4d(var4d.DSC.L1+t393-1,t391+2+var4d.DSC.L2,t389+   
     .       3            var4d.DSC.L3,t387+1)                                  
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   455  
   456      name = "EffMolWtBZ"
   457      call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   458      xyz_EffMolWtBZ = Var3D
     .        if (xyz_effmolwtbz.DSC.U2 + 1 - xyz_effmolwtbz.DSC.L2 .gt. 0) then
     .           J8 = and(xyz_effmolwtbz.DSC.U2 + 1 - xyz_effmolwtbz.DSC.L2,3)  
     .  !CDIR    NODEP                                                          
     .           do t405 = 1, J8                                                
     .  !CDIR       NODEP                                                       
     .              do t407 = 1, xyz_effmolwtbz.DSC.U1 + 1 -                    
     .       1         xyz_effmolwtbz.DSC.L1                                    
     .                 xyz_effmolwtbz(xyz_effmolwtbz.DSC.L1+t407-1,t405-1+      
     .       1            xyz_effmolwtbz.DSC.L2,t403+xyz_effmolwtbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t407-1,t405-1+var3d.DSC.L2,t403+   
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t405 = J8 + 1, xyz_effmolwtbz.DSC.U2 + 1 -                  
     .       1      xyz_effmolwtbz.DSC.L2, 4                                    
     .  !CDIR       NODEP                                                       
     .              do t407 = 1, xyz_effmolwtbz.DSC.U1 + 1 -                    
     .       1         xyz_effmolwtbz.DSC.L1                                    
     .                 xyz_effmolwtbz(xyz_effmolwtbz.DSC.L1+t407-1,t405-1+      
     .       1            xyz_effmolwtbz.DSC.L2,t403+xyz_effmolwtbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t407-1,t405-1+var3d.DSC.L2,t403+   
     .       3            var3d.DSC.L3)                                         
     .                 xyz_effmolwtbz(xyz_effmolwtbz.DSC.L1+t407-1,t405+        
     .       1            xyz_effmolwtbz.DSC.L2,t403+xyz_effmolwtbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t407-1,t405+var3d.DSC.L2,t403+     
     .       3            var3d.DSC.L3)                                         
     .                 xyz_effmolwtbz(xyz_effmolwtbz.DSC.L1+t407-1,t405+1+      
     .       1            xyz_effmolwtbz.DSC.L2,t403+xyz_effmolwtbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t407-1,t405+1+var3d.DSC.L2,t403+   
     .       3            var3d.DSC.L3)                                         
     .                 xyz_effmolwtbz(xyz_effmolwtbz.DSC.L1+t407-1,t405+2+      
     .       1            xyz_effmolwtbz.DSC.L2,t403+xyz_effmolwtbz.DSC.L3) =   
     .       2            var3d(var3d.DSC.L1+t407-1,t405+2+var3d.DSC.L2,t403+   
     .       3            var3d.DSC.L3)                                         
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   459  
   460      !----------------------------------------------------------
   461      ! BasicSet モジュールに値を設定
   462      !----------------------------------------------------------
   463      call basicset_init(       &
   464        & xyz_PressBZ,   &
   465        & xyz_ExnerBZ,   &
   466        & xyz_TempBZ,    &
   467        & xyz_PTempBZ, &
   468        & xyz_DensBZ,    &
   469        & xyz_VelSoundBZ,&
   470        & xyzf_QMixBZ,  &
   471        & xyz_EffMolWtBZ &
   472        & )
   473  
   474    end subroutine ReStartFileio_BZ_Get
   475  
   476  end module ReStartFileIO
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:10 2011
FILE NAME: restartfileio.f90
PROGRAM NAME: restartfileio
FORMAT LIST

  LINE    LOOP     FORTRAN STATEMENT

     1:            != Module ReStartFileIO
     2:            !
     3:            ! Authors::   SUGIYAMA Ko-ichiro, ODAKA Masatsugu
     4:            ! Version::   $Id: restartfileio.f90,v 1.13 2011-06-21 06:14:51 sugiyama Exp $ 
     5:            ! Tag Name::  $Name: arare5-20111010 $
     6:            ! Copyright:: Copyright (C) GFD Dennou Club, 2007. All rights reserved.
     7:            ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8:            !
     9:            !== Overview 
    10:            !
    11:            !リスタート用の場の情報を netCDF ファイルに出力するためのルーチン
    12:            !
    13:            !== Error Handling
    14:            !
    15:            !== Known Bugs
    16:            !
    17:            !== Note
    18:            !
    19:            !速度を評価する格子位置と, 軸として入力してある座標値は整合的でないことに注意
    20:            !
    21:            !== Future Plans
    22:            !
    23:            
    24:            module ReStartFileIO
    25:              !
    26:              !リスタート用の場の情報を netCDF ファイルに出力するためのルーチン
    27:              !
    28:            
    29:              !モジュール読み込み
    30:              use gtool_history
    31:              use dc_types,  only : DP, STRING
    32:              use dc_message,only : MessageNotify
    33:              use dc_string, only : toChar
    34:              use dc_iounit, only : FileOpen
    35:              use mpi_wrapper,   only: myrank, FLAG_LIB_MPI
    36:              use axesset,  only: x_X,        &!X 座標軸(スカラー格子点)
    37:                &                 y_Y,        &!Y 座標軸(スカラー格子点)
    38:                &                 z_Z          !Z 座標軸(スカラー格子点)
    39:              use gridset,  only: &
    40:                &                 imin,           &!X 方向の配列の下限
    41:                &                 imax,           &!X 方向の配列の上限
    42:                &                 jmin,           &!Y 方向の配列の下限
    43:                &                 jmax,           &!Y 方向の配列の上限
    44:                &                 kmin,           &!Z 方向の配列の下限
    45:                &                 kmax,           &!Z 方向の配列の上限
    46:                &                 ncmax              !凝縮成分の数
    47:              use timeset,  only: DelTimeLong, RestartTime 
    48:              use fileset,  only: &
    49:                &                 filetitle,        &!データの表題
    50:                &                 filesource,       &!データを作成する手順
    51:                &                 FileInstitution    !最終変更者・組織
    52:              use basicset, only: basicset_init 
    53:              use namelist_util, only: namelist_filename
    54:            
    55:              !暗黙の型宣言禁止
    56:              implicit none
    57:              
    58:              !関数を public に指定
    59:              public ReStartFileIO_init
    60:              public ReStartFileio_Finalize
    61:              public ReStartFileio_BZ_Get
    62:              public ReStartFileio_Var_Get
    63:            
    64:              type(GT_HISTORY), save, public   :: rstat
    65:              character(STRING), save, private :: InputFile  = "input.nc"
    66:              character(STRING), save, private :: OutputFile = "output.nc"
    67:              
    68:            contains
    69:            
    70:              subroutine ReStartFileio_Init
    71:                !
    72:                !リスタートファイルの書き出し
    73:                !
    74:               
    75:                !暗黙の型宣言禁止
    76:                implicit none
    77:            
    78:                !変数定義
    79:                real(4)            :: SpcID(ncmax)
    80:                integer            :: N, L, M
    81:                integer            :: s    
    82:                integer            :: unit     !装置番号
    83:                 
    84:                !NAMELIST から情報を取得
    85:                NAMELIST /restartfileio_nml/ InputFile, OutputFile
    86:                
    87:                call FileOpen(unit, file=namelist_filename, mode='r')
    88:                read(unit, NML=restartfileio_nml)
    89:                close(unit)
    90:                
    91:                !確認
    92:                if (myrank == 0) then 
    93:                  call MessageNotify( "M", &
    94:                    & "restartfileioIO_init", "InputFile  = %c", c1=trim(InputFile) )
    95:                  call MessageNotify( "M", &
    96:                    & "restartfileioIO_init", "OutputFile = %c", c1=trim(OutputFile) )
    97:                end if
    98:            
    99: V======        SpcID = 0.0d0
   100: V------>       do s = 1, ncmax
   101: |                SpcID(s) = real( s, 4 )
   102: V------        end do
   103:                
   104:                N = size(x_X, 1)
   105:                L = size(y_Y, 1)
   106:                M = size(z_Z, 1)
   107:                
   108:                !-------------------------------------------------------------    
   109:                ! ヒストリー作成
   110:                !-------------------------------------------------------------  
   111:                call HistoryCreate(                              &
   112:                  & file = Outputfile,                          &
   113:                  & title = filetitle,                           &
   114:                  & source = filesource,                         &
   115:                  & institution = FileInstitution,               &
   116:                  & dims=(/'x','y','z','s','t'/),                &
   117:                  & dimsizes=(/N, L, M, ncmax, 0/),                 &
   118:                  & longnames=(/'X-coordinate',                  &
   119:                  &             'Y-coordinate',                  &
   120:                  &             'Z-coordinate',                  &
   121:                  &             'Species Num ',                  &
   122:                  &             'Time        '/),                &
   123:                  & units=(/'m  ','m  ','m  ','1  ','sec'/),     &
   124:                  & xtypes=(/'double', 'double', 'double', 'double', 'double'/), &
   125:                  & flag_mpi_split = FLAG_LIB_MPI,               &
   126:                  & origin=0.0, interval=1.0,                    &
   127:                  & history=rstat, quiet=.true. )
   128:                
   129:                !-------------------------------------------------------------  
   130:                ! 変数出力
   131:                !-------------------------------------------------------------
   132:                call HistoryPut('x', x_X, rstat )
   133:                call HistoryPut('y', y_Y, rstat )
   134:                call HistoryPut('z', z_Z, rstat )
   135: V======        call HistoryPut('s', real(SpcID, 4), rstat )
   136:            
   137:                !無次元圧力の基本場
   138:                call HistoryAddVariable(                             &
   139:                  & varname='ExnerBZ', dims=(/'x','y','z'/),      &
   140:                  & longname='nondimensional pressure', units='1',&
   141:                  & xtype='double', history=rstat )
   142:                
   143:                !温位の基本場
   144:                call HistoryAddVariable(                            &
   145:                  & varname='PTempBZ', dims=(/'x','y','z'/),    &
   146:                  & longname='potential temperature',            &
   147:                  & units='K', xtype='double', history=rstat ) 
   148:                
   149:                !密度の基本場
   150:                call HistoryAddVariable(                            &
   151:                  & varname='DensBZ', dims=(/'x','y','z'/),      &
   152:                  & longname='density',                          &
   153:                  & units='Kg.m-3', xtype='double', history=rstat )
   154:                
   155:                !音波速度の基本場
   156:                call HistoryAddVariable(                            &
   157:                  & varname='VelSoundBZ', dims=(/'x','y','z'/),  &
   158:                  & longname='sound velocity',                   &
   159:                  & units='m.s-2', xtype='double', history=rstat )
   160:            
   161:                !温度の基本場
   162:                call HistoryAddVariable(                            &
   163:                  & varname='TempBZ', dims=(/'x','y','z'/),  &
   164:                  & longname='Temperature of basic state',       &
   165:                  & units='K', xtype='double', history=rstat ) 
   166:                
   167:                !圧力の基本場
   168:                call HistoryAddVariable(                            &
   169:                  & varname='PressBZ', dims=(/'x','y','z'/),  &
   170:                  & longname='Pressure of basic state',             &
   171:                  & units='Pa', xtype='double', history=rstat ) 
   172:                
   173:                !水蒸気混合比の基本場
   174:                call HistoryAddVariable(                            &
   175:                  & varname='QMixBZ', dims=(/'x','y','z','s'/),  &
   176:                  & longname='Mixing ratio of Condensible volatiles',        &
   177:                  & units='kg.kg-1', xtype='double', history=rstat ) 
   178:                
   179:                !分子量効果
   180:                call HistoryAddVariable(                         &
   181:                  & varname='EffMolWtBZ', dims=(/'x','y','z'/),  &
   182:                  & longname='Effect of Mole Weight',            &
   183:                  & units='1', xtype='double', history=rstat ) 
   184:            
   185:                !分子量効果
   186:                call HistoryAddVariable(                        &
   187:                  & varname='HumBZ', dims=(/'x','y','z','s'/),  &
   188:                  & longname='Humidity',                        &
   189:                  & units='1', xtype='double', history=rstat ) 
   190:                
   191:                !速度
   192:                call HistoryAddVariable(                         &
   193:                  & varname='VelX', dims=(/'x','y','z','t'/),        &
   194:                  & longname='zonal velocity',                   &
   195:                  & units='m.s-1',                                 &
   196:                  & xtype='double', history=rstat )
   197:                
   198:                !速度
   199:                call HistoryAddVariable(                         &
   200:                  & varname='VelY', dims=(/'x','y','z','t'/),        &
   201:                  & longname='meridional velocity',              &
   202:                  & units='m.s-1',                                 &
   203:                  & xtype='double', history=rstat )
   204:                
   205:                !速度
   206:                call HistoryAddVariable(                         &
   207:                  & varname='VelZ', dims=(/'x','y','z','t'/),        &
   208:                  & longname='vertical velocity',                &
   209:                  & units='m.s-1',                                 &
   210:                  & xtype='double', history=rstat )
   211:                
   212:                !無次元圧力
   213:                call HistoryAddVariable(                         &
   214:                  & varname='Exner', dims=(/'x','y','z','t'/),       &
   215:                  & longname='nondimensional pressure',          &
   216:                  & units='1',                                   &
   217:                  & xtype='double', history=rstat )
   218:                
   219:                !温位の擾乱
   220:                call HistoryAddVariable(                         &
   221:                  & varname='PTemp', dims=(/'x','y','z','t'/),     &
   222:                  & longname='virtual potential temperature',    &
   223:                  & units='K',                                   &
   224:                  & xtype='double', history=rstat )
   225:                
   226:                !渦粘性係数
   227:                call HistoryAddVariable(                         &
   228:                  & varname='Km', dims=(/'x','y','z','t'/),      &
   229:                  & longname='Km',                               &
   230:                  & units='m2.s-1',                              &
   231:                  & xtype='double', history=rstat )
   232:                
   233:                !渦粘性係数
   234:                call HistoryAddVariable(                         &
   235:                  & varname='Kh', dims=(/'x','y','z','t'/),      &
   236:                  & longname='Kh',                               &
   237:                  & units='m2.s-1',                              &
   238:                  & xtype='double', history=rstat )
   239:            
   240:                !雲密度
   241:                call HistoryAddVariable(                         &
   242:                  & varname='CDens', dims=(/'x','y','z','t'/),   &
   243:                  & longname='CDens',                            &
   244:                  & units='m2.s-1',                              &
   245:                  & xtype='double', history=rstat )
   246:                
   247:                !混合比
   248:                call HistoryAddVariable(                         &
   249:                  & varname='QMix', dims=(/'x','y','z','s','t'/),&
   250:                  & longname='Mixing Ratio',                     &
   251:                  & units='kg.kg-1"',                            & 
   252:                  & xtype='double', history=rstat )
   253:                
   254:              end subroutine ReStartFileio_Init
   255:              
   256:              
   257:              subroutine ReStartFileIO_Finalize
   258:                !
   259:                !リスタートファイルのクローズ
   260:                !
   261:                
   262:                !モジュール読み込み
   263:                use gtool_history
   264:                
   265:                !暗黙の型宣言禁止
   266:                implicit none
   267:                
   268:                !ファイルを閉じる
   269:                call HistoryClose(rstat, quiet=.true.)
   270:                
   271:              end subroutine ReStartFileIO_Finalize
   272:              
   273:            
   274:              subroutine ReStartFileio_Var_Get(   &
   275:                & pyz_VelXB,  pyz_VelXN,    & ! (in)
   276:                & xqz_VelYB,  xqz_VelYN,    & ! (in)
   277:                & xyr_VelZB,  xyr_VelZN,    & ! (in)
   278:                & xyz_PTempB, xyz_PTempN,   & ! (in)
   279:                & xyz_ExnerB, xyz_ExnerN,   & ! (in)
   280:                & xyzf_QMixB, xyzf_QMixN,   & ! (in)
   281:                & xyz_KmB,    xyz_KmN,      & ! (in)
   282:                & xyz_KhB,    xyz_KhN,      & ! (in)
   283:                & xyz_CDensB, xyz_CDensN  )
   284:                !
   285:                !リスタートファイルから情報取得
   286:                !
   287:            
   288:                !暗黙の型宣言禁止
   289:                implicit none
   290:            
   291:                !変数定義
   292:                real(DP), intent(out) :: pyz_VelXN &
   293:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   294:                real(DP), intent(out) :: xqz_VelYN &
   295:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   296:                real(DP), intent(out) :: xyr_VelZN &
   297:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   298:                real(DP), intent(out) :: xyz_ExnerN &
   299:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   300:                real(DP), intent(out) :: xyz_PTempN &
   301:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   302:                real(DP), intent(out) :: xyz_KmN &
   303:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   304:                real(DP), intent(out) :: xyz_KhN &
   305:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   306:                real(DP), intent(out) :: xyz_CDensN &
   307:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   308:                real(DP), intent(out) :: xyzf_QMixN &
   309:                  &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   310:                real(DP), intent(out) :: pyz_VelXB &
   311:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   312:                real(DP), intent(out) :: xqz_VelYB &
   313:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   314:                real(DP), intent(out) :: xyr_VelZB &
   315:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   316:                real(DP), intent(out) :: xyz_ExnerB &
   317:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   318:                real(DP), intent(out) :: xyz_PTempB &
   319:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   320:                real(DP), intent(out) :: xyz_KmB &
   321:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   322:                real(DP), intent(out) :: xyz_KhB &
   323:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   324:                real(DP), intent(out) :: xyz_CDensB &
   325:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   326:                real(DP), intent(out) :: xyzf_QMixB &
   327:                  &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   328:            
   329:                character(STRING)    :: name               !変数名
   330:                character(STRING)    :: TimeN = ""
   331:                character(STRING)    :: TimeB = ""
   332:            
   333:                !-------------------------------------------------------------
   334:                ! Get a Value from netCDF File
   335:                !-------------------------------------------------------------    
   336:                if (RestartTime /= 0.0d0) then
   337:                  timeB = 't=' // toChar( RestartTime - DelTimeLong)
   338:                  timeN = 't=' // toChar( RestartTime  )
   339:                else
   340:                  timeB = 't=' // toChar( RestartTime )
   341:                  timeN = 't=' // toChar( RestartTime )
   342:                end if
   343:            
   344:            !    write(*,*) TimeN, TimeB
   345:            
   346:                name = "PTemp"
   347:                call HistoryGet( InputFile, 'PTemp', xyz_PTempB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   348:                call HistoryGet( InputFile, 'PTemp', xyz_PTempN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   349:            
   350:                name = "VelX"
   351:                call HistoryGet( InputFile, name, pyz_VelXB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   352:                call HistoryGet( InputFile, name, pyz_VelXN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   353:            
   354:                name = "VelY"
   355:                call HistoryGet( InputFile, name, xqz_VelYB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   356:                call HistoryGet( InputFile, name, xqz_VelYN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   357:            
   358:                name = "VelZ"
   359:                call HistoryGet( InputFile, name, xyr_VelZB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   360:                call HistoryGet( InputFile, name, xyr_VelZN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   361:            
   362:                name = "Exner"
   363:                call HistoryGet( InputFile, name, xyz_ExnerB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   364:                call HistoryGet( InputFile, name, xyz_ExnerN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   365:            
   366:                name = "Km"
   367:                call HistoryGet( InputFile, name, xyz_KmB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   368:                call HistoryGet( InputFile, name, xyz_KmN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   369:                
   370:                name = "Kh"
   371:                call HistoryGet( InputFile, name, xyz_KhB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   372:                call HistoryGet( InputFile, name, xyz_KhN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   373:            
   374:                name = "CDens"
   375:                call HistoryGet( InputFile, name, xyz_CDensB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   376:                call HistoryGet( InputFile, name, xyz_CDensN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   377:                  
   378:                name = "QMix"
   379:                call HistoryGet( InputFile, name, xyzf_QMixB, range=TimeB, flag_mpi_split = FLAG_LIB_MPI )
   380:                call HistoryGet( InputFile, name, xyzf_QMixN, range=TimeN, flag_mpi_split = FLAG_LIB_MPI )
   381:                
   382:              end subroutine ReStartFileio_Var_Get
   383:                   
   384:            
   385:            
   386:              subroutine ReStartFileio_BZ_Get()
   387:                !
   388:                !リスタートファイルから情報取得
   389:                !
   390:            
   391:                !暗黙の型宣言禁止
   392:                implicit none
   393:            
   394:                !変数定義
   395:                real(DP)              :: Var3D &
   396:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   397:                real(DP)              :: Var4D &
   398:                  &              (imin:imax,jmin:jmax,kmin:kmax,ncmax)
   399:                real(DP)              :: xyz_ExnerBZ &
   400:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   401:                                                           !基本場のエクスナー関数
   402:                real(DP)              :: xyz_DensBZ &
   403:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   404:                                                           !基本場の密度
   405:                real(DP)              :: xyz_PTempBZ &
   406:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   407:                                                           !基本場の温位
   408:                real(DP)              :: xyz_VelSoundBZ &
   409:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   410:                                                           !基本場の音速
   411:                real(DP)              :: xyz_PressBZ &
   412:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   413:                                                           !基本場の圧力
   414:                real(DP)              :: xyz_TempBZ &
   415:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   416:                                                           !基本場の温度
   417:                real(DP)              :: xyzf_QMixBZ &
   418:                  &                     (imin:imax,jmin:jmax,kmin:kmax, ncmax)
   419:                                                           !基本場の混合比
   420:                real(DP)              :: xyz_EffMolWtBZ &
   421:                  &                     (imin:imax,jmin:jmax,kmin:kmax)
   422:                                                           !基本場の分子量効果
   423:                character(STRING)    :: name               !変数名
   424:            
   425:                !-------------------------------------------------------------
   426:                ! 基本場の取得
   427:                !
   428:                name = "DensBZ"
   429:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   430: ++V====        xyz_DensBZ = Var3D
   431:                
   432:                name = "ExnerBZ"
   433:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   434: ++V====        xyz_ExnerBZ = Var3D
   435:                
   436:                name = "PTempBZ"
   437:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   438: ++V====        xyz_PTempBZ = Var3D
   439:                
   440:                name = "VelSoundBZ"
   441:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   442: ++V====        xyz_VelSoundBZ = Var3D
   443:                
   444:                name = "TempBZ"
   445:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   446: ++V====        xyz_TempBZ = Var3D
   447:                
   448:                name = "PressBZ"
   449:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   450: ++V====        xyz_PressBZ = Var3D
   451:                
   452:                name = "QMixBZ"
   453:                call HistoryGet( InputFile, name, Var4D, flag_mpi_split = FLAG_LIB_MPI )
   454: +++V===        xyzf_QMixBZ = Var4D
   455:                
   456:                name = "EffMolWtBZ"
   457:                call HistoryGet( InputFile, name, Var3D, flag_mpi_split = FLAG_LIB_MPI )
   458: ++V====        xyz_EffMolWtBZ = Var3D
   459:                
   460:                !----------------------------------------------------------
   461:                ! BasicSet モジュールに値を設定
   462:                !----------------------------------------------------------
   463:                call basicset_init(       &
   464:                  & xyz_PressBZ,   &
   465:                  & xyz_ExnerBZ,   &
   466:                  & xyz_TempBZ,    &
   467:                  & xyz_PTempBZ, &
   468:                  & xyz_DensBZ,    &
   469:                  & xyz_VelSoundBZ,&
   470:                  & xyzf_QMixBZ,  &
   471:                  & xyz_EffMolWtBZ &
   472:                  & )
   473:                
   474:              end subroutine ReStartFileio_BZ_Get
   475:                   
   476:            end module ReStartFileIO
