* PACKAGE IRDRST   !" リスタートファイルの入力(GTOOL3 版)
*
*"  [HIS] 95/08/30 (takepiro) 
*"        96/03/11 (takepiro) 自動倍精度対応
*"        96/03/14 (takepiro) 
***********************************************************************
      SUBROUTINE RDSTRT                      !" 初期値の設定
     I           ( ITREAD,
     O             PSI2  , ZETA2 , T2 ,
     O             PSI1  , ZETA1 , T1  )
*
* [PARAM]
#include        "zcdim.F"            !" 格子点数, 波数
*
* [INPUT]
      INTEGER ITREAD                 !" 読み込むデータの時刻(ステップ)
*
* [OUTPUT]
      REAL PSI2  ( 0:NX+1 , 0:NZ+1 ) !" 流線関数(現在の値)
      REAL ZETA2 ( 0:NX+1 , 0:NZ+1 ) !" 渦度(現在の値)
      REAL T2    ( 0:NX+1 , 0:NZ+1 ) !" 温度(現在の値)
*
      REAL PSI1  ( 0:NX+1 , 0:NZ+1 ) !" 流線関数(1STEP前の値)
      REAL ZETA1 ( 0:NX+1 , 0:NZ+1 ) !" 渦度(1STEP前の値)
      REAL T1    ( 0:NX+1 , 0:NZ+1 ) !" 温度(1STEP前の値)
*
      CALL RDRSTR         !" リスタートファイル読み込み
     I     ( ITREAD,
     O       PSI2  , ZETA2 , T2  )
*
      CALL COPY( PSI1  , PSI2  , (NX+2)*(NZ+2) )
      CALL COPY( ZETA1 , ZETA2 , (NX+2)*(NZ+2) )
      CALL COPY( T1    , T2    , (NX+2)*(NZ+2) )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE  RDRSTR         !" リスタートファイル読み込み
     I              ( ITREAD,
     O                PSI   , ZETA  , T  )
*
* [PARAM]
#include        "zcdim.F"            !" 格子点数, 波数
#include        "zhdim.F"            !" 文字列文字数
*
* [INPUT]
      INTEGER ITREAD                 !" 読み込むデータの時刻(ステップ)
*
* [OUTPUT]
      REAL PSI  ( 0:NX+1 , 0:NZ+1 ) !" 流線関数(現在の値)
      REAL ZETA ( 0:NX+1 , 0:NZ+1 ) !" 渦度(現在の値)
      REAL T    ( 0:NX+1 , 0:NZ+1 ) !" 温度(現在の値)
*
* [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]
      CHARACTER HPSEL * (NCC)   !" 選択欄
      CHARACTER HSEL  * (NCC)   !" 選択するデータ(文字)
      INTEGER   ISEL            !" 選択するデータ(数)
      INTEGER   IFILE           !" 出力装置番号
      INTEGER   MODE            !" 出力モード(1 でITEM,TIMEを表示)
*
* [NAMELIST]
      CHARACTER FILE*(NFILN)    !" リスタート入力ファイル
*
* [NAMELIST DEFAULT]
      NAMELIST /NMINIT/  FILE 
      DATA     FILE   /   'momoko.init'  /
*
      DATA      IFILED,    HACT,     HFORM 
     &         /   50,  'READ', 'UNFORMATTED' /
      DATA      MODE 
     &         /   1 /
*
      SAVE  IFILE, MODE
*
*"               < 1. NAMELIST 読みとり, ファイルオープン >
*
      CALL REWNML ( IFNM, JFNM )
      READ  ( IFNM, NMINIT , END=1190 )
 1190 WRITE ( JFNM, NMINIT )
*
      CALL GFOPEN
     O     ( IFILE , IERR ,
     I        FILE , IFILED , HACT , HFORM )
*
      IF ( IERR .NE. 0 ) THEN
         CALL MSGDMP('E', 'RDRSTR', 
     &      ' ******** NO Initial DATA File ********** ' )
      ENDIF
*
*"               < 2. ファイル読み込み > 
*
      HPSEL = 'ITEM'
      HSEL  = 'PSI'
      CALL RDRSTZ
     O      ( HEADP , PSI   , IERR ,
     I        HPSEL , HSEL  , ISEL ,
     I        IFILE , MODE ,           
     I        ITREAD               )
*
      HSEL  = 'ZETA'
      CALL RDRSTZ
     O      ( HEADZ , ZETA  , IERR ,
     I        HPSEL , HSEL  , ISEL ,
     I        IFILE , MODE ,           
     I        ITREAD               )
*
      HSEL  = 'T'
      CALL RDRSTZ
     O      ( HEADT , T    , IERR ,
     I        HPSEL , HSEL , ISEL ,
     I        IFILE , MODE ,           
     I        ITREAD               )
*
*"               < 4. 後処理 >
*
      CALL GFCLSE( IFILE )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE RDRSTZ        !" リスタートファイルの読み込み, 入れ換え
     O            ( HHEAD , GDATA , IEOD , 
     I              HPSEL , HSEL  , ISEL ,
     I              IFILE , MODE  , 
     I              ITREAD                )
*
* [PARAM]
#include        "zhdim.F"            !" 文字列文字数
#include        "zcdim.F"            !" 格子点数, 波数
*
* [OUTPUT]      
      CHARACTER HHEAD (NDC) * (NCC)      !" ヘッダー
      REAL      GDATA ( 0:NX+1, 0:NZ+1 ) !" データ
      INTEGER   IEOD                     !" データ存在フラグ
*
* [INPUT]
      CHARACTER HPSEL * (NCC)   !" 選択欄
      CHARACTER HSEL  * (NCC)   !" 選択するデータ(文字)
      INTEGER   ISEL            !" 選択するデータ(数)
      INTEGER   IFILE           !" 装置番号
      INTEGER   MODE            !" 表示モード(1:)ON
      INTEGER   ITREAD          !" 読み込むデータの時刻(ステップ) 
*
* [INTERNAL WORK]
      REAL      GIDATA ( NX+1, 0:NZ+1 ) !" 読み込み作業配列
      INTEGER   IX, IZ                  !" ループカウンタ
*
*"    CALL GFRDSL
      CALL ZFRDSL               !" 自動倍精度対応ルーチン
     O      ( HHEAD , GIDATA , IEOD ,
     I        HPSEL , HSEL   , ISEL ,
     I        IFILE , MODE            )
*
      IF ( IEOD .NE. 0 ) THEN   !" データ無し
         CALL MSGDMP('E', 'RDRSTZ', 
     &                ' ******** NO Initial DATA ********** ' )
      ENDIF
*
      DO 1000 IZ = 0, NZ+1
         DO 1000 IX = 1, NX+1
            GDATA ( IX, IZ ) = GIDATA( IX, IZ )
 1000 CONTINUE 
*
      DO 1100 IZ = 0, NZ+1
            GDATA ( 0, IZ ) = GDATA( NX, IZ )
 1100 CONTINUE 
*
      RETURN
      END
