* PACKAGE IRWSTR  !" BARO 初期値入出力(簡単版)
*
*"  [HIS] 96/08/23(takepiro)
*
**********************************************************************
      SUBROUTINE IRSTRT      !"  初期値の読み込み 
     O         ( GAU   , GAV   , GAVOR , 
     O           GBU   , GBV   , GBVOR , 
     O           ITA   , ITB   , IDATEA, IDATEB, ISTEP ,
     I           ITSTRT )
*
#if   SYS_IBMS
      INCLUDE   (ZCDIM)                  !" 格子点数, 波数
      INCLUDE   (ZHDIM)                  !" 文字列文字数
#else
#include        "zcdim.F"                    !" 格子点数, 波数
#include        "zhdim.F"                    !" 文字列文字数
#endif
*
      REAL       GAU   ( IDIM, JDIM, KMAX )  !" 西風  ｕ(t)
      REAL       GBU   ( IDIM, JDIM, KMAX )  !" 西風  ｕ(t-Δt)
      REAL       GAV   ( IDIM, JDIM, KMAX )  !" 南風  ｖ(t)
      REAL       GBV   ( IDIM, JDIM, KMAX )  !" 南風  ｖ(t-Δt)
      REAL       GAVOR ( IDIM, JDIM, KMAX )  !" 渦度  ζ(t)
      REAL       GBVOR ( IDIM, JDIM, KMAX )  !" 渦度  ζ(t-Δt)
*
      INTEGER    ISTEP                       !" 通しステップ数
      INTEGER    ITA                         !" 通し時間(t)
      INTEGER    ITB                         !" 通し時間(t-Δt)
      INTEGER    IDATEA( 6 )                 !" 時刻：年月日時分秒
      INTEGER    IDATEB( 6 )                 !" 時刻：年月日時分秒
      INTEGER    ITSTRT                      !" 積分スタート時間
*
*   [INTERNAL WORK]
      INTEGER    ITINIT                      !" 初期データ時刻
      INTEGER    IFLSTR                      !" 装置番号
      INTEGER    IFPAR, JFPAR                !" NAMELIST 装置番号
      INTEGER    IOS                         !" ファイルオープン状況
*
*   [INTERNAL PARAM]
      CHARACTER  FILE *(NFILN)         !" 入力ファイル：初期値
      CHARACTER  TUNIT  *4             !" 時刻単位
      INTEGER    TINIT                 !" 初期データ時刻
*
      NAMELIST /NMINIT/ FILE, TUNIT, TINIT
*
      DATA       FILE   / ' ' /
      DATA       TUNIT  / 'DAY ' /
      DATA       TINIT  / -999 /
*      
      DATA       IFLSTR / 95 /
*
*"          < 0.  初期値データの設定 >
*
      CALL   REWNML ( IFPAR , JFPAR )
      READ   ( IFPAR, NMINIT, END=190 )
  190 WRITE  ( JFPAR, NMINIT )
*
      IF ( TINIT .NE. -999 ) THEN
         CALL ACTIME ( TINIT, TUNIT, '#', ITINIT  )
      ELSE
         ITINIT = ITSTRT
      ENDIF
*
      OPEN ( UNIT=IFLSTR, FILE=FILE, STATUS='OLD', IOSTAT=IOS )
      IF ( IOS .GT. 0 ) THEN
         WRITE ( 6, * ) 'IOSTAT = ', IOS
         CALL MSGDMP ( 'E','IWRSTR','CANNOT OPEN A INIT FILE')
      ENDIF
*
*"          < 1.  初期値の読み込み (GB) >
*
      WRITE ( 6,* ) ' TRY TO READ HIST AT T = ', ITINIT
*
      CALL GDREAD
     O         ( GBU   , 
     I           ITB   , IDATEB , ISTEP , 
     I           IFLSTR ) 
*
      CALL GDREAD
     O         ( GBV   , 
     I           ITB   , IDATEB , ISTEP , 
     I           IFLSTR ) 
*
      CALL GDREAD
     O         ( GBVOR   , 
     I           ITB   , IDATEB , ISTEP , 
     I           IFLSTR ) 
*
      IF( ITB .NE. ITINIT ) THEN
         CALL MSGDMP( 'M','IRSTRT','DATA AND INIT TIME DIFFERENT' )
         WRITE( 6, * ) 'ITB = ', ITB, 'ITINIT = ', ITINIT
      ENDIF
*
*"          < 2. 初期値の読み込み (GA) >
*
      CALL GDREAD
     O         ( GAU   , 
     I           ITA   , IDATEA, ISTEP , 
     I           IFLSTR ) 
*
      CALL GDREAD
     O         ( GAV   , 
     I           ITA   , IDATEA, ISTEP , 
     I           IFLSTR ) 
*
      CALL GDREAD
     O         ( GAVOR   , 
     I           ITA   , IDATEA, ISTEP , 
     I           IFLSTR ) 
*
      CLOSE ( IFLSTR )
*
      RETURN
      END
***********************************************************************
      SUBROUTINE IWRSTR      !"  リスタート・ファイルの書き込み 
     I         ( GAU   , GAV   , GAVOR , 
     I           GBU   , GBV   , GBVOR ,
     I           ITA   , ITB   , IDATEA, IDATEB, ISTEP )
*
#if   SYS_IBMS
      INCLUDE   (ZCDIM)                      !" 格子点数，波数
      INCLUDE   (ZHDIM)                  !" 文字列文字数
#else
#include        "zcdim.F"                    !" 格子点数，波数
#include        "zhdim.F"                    !" 文字列文字数
#endif
*
      REAL       GAU   ( IDIM, JDIM, KMAX )  !" 西風  ｕ(t)
      REAL       GBU   ( IDIM, JDIM, KMAX )  !" 西風  ｕ(t-Δt)
      REAL       GAV   ( IDIM, JDIM, KMAX )  !" 南風  ｖ(t)
      REAL       GBV   ( IDIM, JDIM, KMAX )  !" 南風  ｖ(t-Δt)
      REAL       GAVOR ( IDIM, JDIM, KMAX )  !" 渦度  ζ(t)
      REAL       GBVOR ( IDIM, JDIM, KMAX )  !" 渦度  ζ(t-Δt)
*
      INTEGER    ISTEP                       !" 通しステップ数
      INTEGER    ITA                         !" 通し時間(t)
      INTEGER    ITB                         !" 通し時間(t-Δt)
      INTEGER    IDATEA( 6 )                 !" 時刻：年月日時分秒
      INTEGER    IDATEB( 6 )                 !" 時刻：年月日時分秒
*
*    [INTERNAL WORK]
      INTEGER    IFPAR, JFPAR                !" NAMELIST 装置番号
      INTEGER    IOS                         !" ファイルオープン状況
*
*    [INTERNAL PARAM]
      CHARACTER  FILE   *(NFILN)       !" 出力ファイル：再出発
      CHARACTER  DFMT  *(NCC)          !" 出力フォーマット
      DATA       FILE   / '  ' /
      DATA       DFMT   / 'UR8' /
      INTEGER    JFLRST
      DATA       JFLRST / 50 /
*
      LOGICAL    OFIRST
      DATA       OFIRST / .TRUE. /
      SAVE       OFIRST, JFLRST, FILE, DFMT
*
      NAMELIST  /NMRSTR/ FILE, DFMT
*    
      IF ( OFIRST ) THEN
         OFIRST = .FALSE.
*
         CALL   REWNML ( IFPAR , JFPAR )
         READ   ( IFPAR, NMRSTR, END=1090 )
 1090    WRITE  ( JFPAR, NMRSTR )         
*
         OPEN ( UNIT=JFLRST, FILE=FILE, IOSTAT=IOS )
         IF ( IOS .GT. 0 ) THEN
            WRITE ( 6, * ) 'IOSTAT = ', IOS
            CALL MSGDMP( 'E','IWRSTR','CANNOT OPEN A RESTART FILE')
         ENDIF
      ENDIF
*
*"          < 1. ファイル出力 (GB) >
*
      CALL GDWRIT
     I        ( GBU   ,
     I         'GBU'  , 'u-velocity @ t   ','m/s' ,
     I          ITB   , IDATEB, ISTEP , 
     I          JFLRST ) 
*
      CALL GDWRIT
     I        ( GBV   ,
     I         'GBV'  , 'v-velocity @ t   ','m/s' ,
     I          ITB   , IDATEB, ISTEP , 
     I          JFLRST ) 
*
      CALL GDWRIT
     I        ( GBVOR   ,
     I         'GBVOR'  , 'vorticity @ t   ','1/s' ,
     I          ITB   , IDATEB, ISTEP , 
     I          JFLRST ) 
*
*"          < 2. ファイル出力 (GA) >
*
      CALL GDWRIT
     I        ( GAU   ,
     I         'GAU'  , 'u-velocity @ t+dt   ','m/s' ,
     I          ITA   , IDATEA, ISTEP , 
     I          JFLRST ) 
*
      CALL GDWRIT
     I        ( GAV   ,
     I         'GAV'  , 'v-velocity @ t+dt   ','m/s' ,
     I          ITA   , IDATEA, ISTEP , 
     I          JFLRST )
*
      CALL GDWRIT
     I        ( GAVOR ,
     I         'GAVOR', 'vorticity @ t+dt   ','1/s' ,
     I          ITA   , IDATEA, ISTEP , 
     I          JFLRST )
*
      RETURN
      END
**********************************************************************
      SUBROUTINE GDWRIT
     I        ( GDATA ,
     I          ITEM  , TITLE , UNIT  ,
     I          IT    , IDATE , ISTEP , 
     I          JFLRST ) 
*
#if   SYS_IBMS
      INCLUDE   (ZCDIM)                      !" 格子点数，波数
      INCLUDE   (ZHDIM)                  !" 文字列文字数
#else
#include        "zcdim.F"                    !" 格子点数，波数
#include        "zhdim.F"                    !" 文字列文字数
#endif
*
      REAL       GDATA   ( IDIM, JDIM, KMAX ) !" データ
      INTEGER    ISTEP                        !" 通しステップ数
      INTEGER    IT                           !" 通し時間(t)
      INTEGER    IDATE( 6 )                   !" 時刻：年月日時分秒
      CHARACTER  ITEM  *(*)                   !" 変数名
      CHARACTER  TITLE *(*)                   !" 表題
      CHARACTER  UNIT  *(*)                   !" 単位
      CHARACTER  HITEM  *(NCC)                !" 変数名
      CHARACTER  HTITLE *(NCC)                !" 表題
      CHARACTER  HUNIT  *(NCC)                !" 単位
      INTEGER    IFLSTR, JFLRST
*
*   [INTERNAL WORK]
      CHARACTER  HCOMM * 2                    !" コメント記号
      CHARACTER  HSTRT * 5                    !" スタート記号
      CHARACTER  HFMT * (NCC)                 !" 出力/入力書式
      CHARACTER  HDUMY * 2                    !" ダミー
      DATA       HCOMM / '# ' /
      DATA       HSTRT / '#####' /
      DATA       HFMT / '(3E15.7)'/ 
C      DATA       HFMT / '*' /
      INTEGER    I, J, K
*
      REAL       ALON  ( IDIM )              !" 経度
      REAL       DLON  ( IDIM )              !" 経度荷重
      REAL       ALAT  ( JDIM )              !" 緯度
      REAL       DLAT  ( JDIM )              !" 緯度荷重
*
      REAL       PI
*
      HITEM = ITEM
      HUNIT = UNIT
      HTITLE = TITLE
*
*"          << 1. 座標取得 >>
*
      CALL ACRGET
     O         ( ALON  , DLON  ,
     O           ALAT  , DLAT   )
*
      PI = 4 * ATAN(1.0)
      DO 100 I = 1, IDIM
         ALON(I) = ALON(I) * 180.0 / PI
 100  CONTINUE 
      DO 110 J = 1, JDIM
         ALAT(J) = ALAT(J) * 180.0 / PI
 110  CONTINUE 
*
*"          << 2. 出力 >>
*
      WRITE ( JFLRST, * ) HSTRT
      WRITE ( JFLRST, * ) HCOMM, HITEM, HUNIT
      WRITE ( JFLRST, * ) HCOMM, IT,  ISTEP
      WRITE ( JFLRST, * ) HCOMM, (IDATE(I), I=1,6)
      WRITE ( JFLRST, * ) HCOMM
*
      DO 1100 K = 1, KMAX
        DO 1100 J = 1, JDIM
           DO 1100 I = 1, IDIM
              WRITE ( JFLRST, HFMT ) ALON( I ), ALAT( J ), GDATA(I,J,K)
 1100 CONTINUE 
*
      RETURN
*======================================================================
      ENTRY GDREAD
     O         ( GDATA , 
     I           IT    , IDATE , ISTEP , 
     I           IFLSTR ) 
*
c$$$      READ ( IFLSTR, * ) HDUMY
c$$$      READ ( IFLSTR, * ) HDUMY, HITEM, HUNIT
c$$$      READ ( IFLSTR, * ) HDUMY, IT,   ISTEP
c$$$      READ ( IFLSTR, * ) HDUMY, (IDATE(I), I=1,6)
c$$$      READ ( IFLSTR, * ) HDUMY
      READ ( IFLSTR, * ) HDUMY
      READ ( IFLSTR, * ) HDUMY
      READ ( IFLSTR, * ) HDUMY, IT,   ISTEP
      READ ( IFLSTR, * ) HDUMY, (IDATE(I), I=1,6)
      READ ( IFLSTR, * ) HDUMY
*
c$$$      ITEM = HITEM
c$$$      UNIT = HUNIT
c$$$      TITLE = HTITLE
*
      DO 1200 K = 1, KMAX
        DO 1200 J = 1, JDIM
           DO 1200 I = 1, IDIM
              READ ( IFLSTR, HFMT ) ALON( I ), ALAT( J ), GDATA(I,J,K)
 1200 CONTINUE 
*
      RETURN
      END

