* PACKAGE IWRRST    !" リスタートファイルの出力(GTOOL3 版)
*
*  [HIS] 95/08/16 (takepiro) 
*        96/03/08 (takepiro) 倍精度対応
***********************************************************************
      SUBROUTINE  WRRSTR         !" リスタートファイル書き込み
     I                ( PSI   , ZETA  , T  , 
     I                  IT                    )
*
* [PARAM]
#include        "zcdim.F"            !" 格子点数, 波数
#include        "zhdim.F"            !" 文字列文字数
*
* [INPUT]
      REAL PSI  ( 0:NX+1 , 0:NZ+1 ) !" 流線関数(現在の値)
      REAL ZETA ( 0:NX+1 , 0:NZ+1 ) !" 渦度(現在の値)
      REAL T    ( 0:NX+1 , 0:NZ+1 ) !" 温度(現在の値)
*
      INTEGER IT                !" ループカウンタ
*
* [INTERNAL WORK]
      CHARACTER HEADP(NDC)*(NCC) !" GTOOL3 ヘッダ(流線関数)
      CHARACTER HEADZ(NDC)*(NCC) !" GTOOL3 ヘッダ(渦度)
      CHARACTER HEADT(NDC)*(NCC) !" GTOOL3 ヘッダ(温度)
*
      INTEGER   IERR            !" エラーフラッグ
      INTEGER   IFILED          !" デフォルト装置番号
      CHARACTER HACT*(NCC)      !" 動作指定(読み/書き)
      CHARACTER HFORM*(NCC)     !" 出力書式
*     
      INTEGER   IFNM, JFNM      !" NAMELIST 入出力装置番号
*
* [INTERNAL SAVE]
      INTEGER   JFILE           !" 出力装置番号
      INTEGER   MODE            !" 出力モード(1 でITEM,TIMEを表示)
      INTEGER   NOEND           !" END OF FILE の処理(0 で行わない)
      LOGICAL   OFIRST
*
* [NAMELIST]
      CHARACTER FILE*(NFILN)    !" リスタート出力ファイル
      CHARACTER DFMT*(NCC)      !" データ形式
*
* [NAMELIST DEFAULT]
      NAMELIST /NMRSTR/  FILE , DFMT 
      DATA      FILE ,        DFMT
     &         /'momoko.rst', 'UR4'  /
*
      DATA      IFILED,    HACT,     HFORM 
     &         /   50,  'WRITE', 'UNFORMATTED' /
      DATA      MODE, NOEND
     &         /   1,    0 /
      DATA      OFIRST   /.TRUE./
*
      SAVE  JFILE, MODE, NOEND, OFIRST
*
*"               < 1. NAMELIST 読みとり, ファイルオープン >
*
      IF ( OFIRST ) THEN
         OFIRST = .FALSE.
         CALL REWNML ( IFNM, JFNM )
         READ  ( IFNM, NMRSTR , END=1190 )
 1190    WRITE ( JFNM, NMRSTR )
*
         CALL GFOPEN
     O      ( JFILE , IERR ,
     I         FILE , IFILED , HACT , HFORM )
      ENDIF
*
*"               < 2. ヘッダー設定 >
*
      CALL SETHDR
     O     ( HEADP, HEADZ, HEADT ,
     I       IT   , DFMT          )
*
*"               < 3. 出力 >
*
      CALL WRRSTZ
     I      ( HEADP , PSI  , 
     O        JFILE , MODE , NOEND )
*
      CALL WRRSTZ
     I      ( HEADZ , ZETA  , 
     O        JFILE , MODE  , NOEND )
*
      CALL WRRSTZ
     I      ( HEADT , T    , 
     O        JFILE , MODE , NOEND )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE WRRSTZ
     I           ( HHEAD , GDATA , 
     O             JFILE , MODE  , NOEND )
*
* [PARAM]
#include        "zcdim.F"            !" 格子点数, 波数
#include        "zhdim.F"            !" 文字列文字数
*
* [INPUT]
      CHARACTER HHEAD(NDC)*(NCC) !" GTOOL3 ヘッダ
      REAL      GDATA ( 0:NX+1 , 0:NZ+1 ) !" 物理量
*
      INTEGER   JFILE           !" 出力装置番号
      INTEGER   MODE            !" 出力モード(1 でITEM,TIMEを表示)
      INTEGER   NOEND           !" END OF FILE の処理(0 で行わない)

* [INTERNAL WORK]
      REAL GODATA(   NX+1 , 0:NZ+1 ) !" 出力用物理量
      INTEGER IX, IZ
*
      DO 1000 IZ=0, NZ+1
         DO 1010 IX = 1, NX+1
            GODATA( IX, IZ ) = GDATA( IX, IZ )
 1010    CONTINUE 
 1000 CONTINUE 
*
*"    CALL GFWRIT
      CALL ZFWRIT                       !" 自動倍精度対応ルーチン
     I      ( HHEAD , GODATA , 
     O        JFILE , MODE   , NOEND )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE SETHDR         !" 各物理量のヘッダー設定
     O           ( HEADP, HEADZ, HEADT ,
     I             IT   , HDFMT          )
*
* [PARAM]
#include        "zhdim.F"            !" 文字列文字数
*
* [OUTPUT]
      CHARACTER HEADP(NDC)*(NCC) !" GTOOL3 ヘッダ(流線関数)
      CHARACTER HEADZ(NDC)*(NCC) !" GTOOL3 ヘッダ(渦度)
      CHARACTER HEADT(NDC)*(NCC) !" GTOOL3 ヘッダ(温度)
*
* [INPUT]
      INTEGER IT                !" ループカウンタ
      CHARACTER  HDFMT  * (*)   !" データフォーマット
*
* [INTERNAL WORK]
      REAL       TIMS
      REAL       DT
      INTEGER    ITS
*
      CHARACTER  HITEM  * (NCC) !" 識別名称
      CHARACTER  HTITL  * (NCC) !" タイトル
*
* [INTERNAL SAVE]
      CHARACTER  HUNIT  * (NCC) !" 単位
*
      CHARACTER  HDATE  *(NCC)  !" 時刻(yyyymmddhhmmss)
      CHARACTER  HUTIM  *(NCC)  !" 時刻単位
      INTEGER    ITDUR          !" 代表する時間
*
      REAL       DMIN           !" レンジ(最小)
      REAL       DMAX           !" レンジ(最大)
      REAL       DIVS           !" 間隔(小)
      REAL       DIVL           !" 間隔(大)
      INTEGER    ISTYP          !" スケーリングタイプ
*
      LOGICAL    OFIRST
      DATA       OFIRST /.TRUE./
*
      DATA     HUNIT
     &      / 'Non-dim' /
      DATA     HDATE, HUTIM
     &      / '19900101000000', 'STEP' /
      DATA    DMIN, DMAX, DIVS, DIVL, ISTYP
     &     / -10.0, 10.0,  0.2, 1.0,    1 /
*
      SAVE    HUNIT , 
     &        HDATE , HUTIM , ITDUR ,
     &        DMIN  , DMAX  , DIVS  , DIVL  , ISTYP , 
     &        OFIRST
*
      IF ( OFIRST ) THEN
         OFIRST = .FALSE. 
         CALL ATPGET            !" 時刻設定情報参照
     O      ( TIMS , ITS , DT )
         ITDUR = NINT( 1.0 / DT )  !" 代表時間は 1 無次元時間
      ENDIF
*
      HITEM  = 'PSI'
      HTITL  = 'Stream Function'
*
      CALL SETHDD   !" ヘッダー設定
     O     ( HEADP ,
     I       HITEM , HTITL , HUNIT , 
     I       IT    , HDATE , HUTIM , ITDUR ,
     I       HDFMT , 
     I       DMIN  , DMAX  , DIVS  , DIVL  , ISTYP )
*
      HITEM  = 'ZETA'
      HTITL  = 'Vorticity'
*
      CALL SETHDD   !" ヘッダー設定
     O     ( HEADZ ,
     I       HITEM , HTITL , HUNIT , 
     I       IT    , HDATE , HUTIM , ITDUR ,
     I       HDFMT , 
     I       DMIN  , DMAX  , DIVS  , DIVL  , ISTYP )
*
      HITEM  = 'T'
      HTITL  = 'Temperature'
*
      CALL SETHDD   !" ヘッダー設定
     O     ( HEADT ,
     I       HITEM , HTITL , HUNIT , 
     I       IT    , HDATE , HUTIM , ITDUR ,
     I       HDFMT , 
     I       DMIN  , DMAX  , DIVS  , DIVL  , ISTYP )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE SETHDD   !" ヘッダー設定
     O           ( HHEAD ,
     I             HITEM , HTITL , HUNIT , 
     I             ITIME , HDATE , HUTIM , ITDUR ,
     I             HDFMT , 
     I             DMIN  , DMAX  , DIVS  , DIVL  , ISTYP )
*
* [PARAM]
#include        "zcdim.F"            !" 格子点数, 波数
#include        "zhdim.F"            !" 文字列文字数
*
* [OUTPUT]
      CHARACTER  HHEAD (NDC)*(NCC)
*
* [INPUT]
      CHARACTER  HITEM  * (NCC) !" 識別名称
      CHARACTER  HTITL  * (NCC) !" タイトル
      CHARACTER  HUNIT  * (NCC) !" 単位
*
      INTEGER    ITIME          !" 時刻(通し)
      CHARACTER  HDATE  * (NCC) !" 時刻(yyyymmddhhmmss)
      CHARACTER  HUTIM  * (NCC) !" 時刻単位
      INTEGER    ITDUR          !" 代表する時間
*
      CHARACTER  HDFMT  * (NCC) !" データフォーマット
*
      REAL       DMIN           !" レンジ(最小)
      REAL       DMAX           !" レンジ(最大)
      REAL       DIVS           !" 間隔(小)
      REAL       DIVL           !" 間隔(大)
      INTEGER    ISTYP          !" スケーリングタイプ
*
* [INTERNAL WORK]
      CHARACTER  HDSET  * (NCC) !" データセット名
*
      INTEGER    IFNUM          !" ファイル番号(意味無し?)
      INTEGER    IDNUM          !" データ番号(意味無し?)
*
      CHARACTER  HAITM1 * (NCC) !" 軸1の格子名称
      INTEGER    IASTR1         !" 軸1の格子始め
      INTEGER    IAEND1         !" 軸1の格子終り
*
      CHARACTER  HAITM2 * (NCC) !" 軸2の格子名称
      INTEGER    IASTR2         !" 軸2の格子始め
      INTEGER    IAEND2         !" 軸2の格子終り
*
      CHARACTER  HAITM3 * (NCC) !" 軸3の格子名称
      INTEGER    IASTR3         !" 軸3の格子始め
      INTEGER    IAEND3         !" 軸3の格子終り
*
      REAL       VMISS          !" 欠損値の値
*
      CHARACTER  HCDATE *(NCC)  !" データ作成日付
      CHARACTER  HCSIGN *(NCC)  !" データ作成者
*
      DATA  IFNUM, IDNUM /  1, 1/
      DATA  HAITM1, IASTR1, IAEND1
     &     /  ' ' ,    1  ,   1  /
      DATA  HAITM2, IASTR2, IAEND2
     &     /  ' ' ,    1  ,   1  /
      DATA  HAITM3, IASTR3, IAEND3
     &     /  ' ' ,    1  ,   1  /
*
*"          < 1. 軸ファイル情報設定 >
*
      CALL ACNGET
     O     ( HAITM1 , HAITM3 )
*
      IASTR1=1
      IAEND1=NX+1
      IASTR3=1
      IAEND3=NZ+2
*
*"          < 2. GTOOL3 管理情報 : データ作成者, 日付, 実験名 >
*
      CALL GUQNOW
     O      ( HCDATE )
*
      CALL GTCGET
     I      ( 'MYSIGN',
     O         HCSIGN   )
*
      CALL GTCGET
     I      ( 'DDSET',
     O         HDSET   )
*
*"    CALL GTPGET
      CALL ZTPGET                       !" 自動倍精度対応ルーチン
     I      ( 'MISS',
     O         VMISS  )
*
*"          < 3. ヘッダーのパック >
*
*"    CALL GHPACK
      CALL ZHPACK                       !" 自動倍精度対応ルーチン
     O         ( HHEAD ,
     I           HDSET , HITEM , IFNUM , IDNUM ,
     I           HTITL , HUNIT ,
     I           ITIME , HDATE , HUTIM , ITDUR ,
     I           HAITM1, IASTR1, IAEND1,
     I           HAITM2, IASTR2, IAEND2,
     I           HAITM3, IASTR3, IAEND3,
     I           HDFMT , VMISS ,
     I           DMIN  , DMAX  , DIVS  , DIVL  , ISTYP ,
     I           HCDATE, HCSIGN                         )
*
      RETURN
      END
