*"表題 格子情報ファイルの読み込み  GTOOL3(GUQAXS)
*
*"履歴 90/09/14 沼口  敦
*
*
*********************************************************************
*"         << 格子情報ファイルの読み込み >>
*********************************************************************
      SUBROUTINE GUQAXS
     I         ( HAXIS , HKIND ,
     O           HHEAD , AXIS  , IEOD  )
*
      CHARACTER  HAXIS *(*)                  !" 格子識別名称
      CHARACTER  HKIND *(*)                  !" LOC/WGT
      CHARACTER  HHEAD ( * )*(*)             !" ヘッダー
      REAL       AXIS  ( * )                 !" 位置/重み
      INTEGER    IEOD                        !" データなしフラグ
      LOGICAL    OEXIST
*
#ifdef SYS_IBMS
      INCLUDE    (GZSIZE)                    !" NCC, NDC
#else
#include         "gzsize.F"                  !" NCC, NDC
#endif
      CHARACTER  HAXF  *(NFILN)
      CHARACTER  HFILE *(NFILN)
*
      IF ( HAXIS .EQ. ' ' ) THEN
         IEOD = 1
                                        RETURN
      ENDIF
*
*"        < 1. 「内部ファイル」からの読み込み >
*
      CALL GUQIAX
     I         ( HAXIS , HKIND ,
     O           HHEAD , AXIS  , IEOD   )
*
      IF ( IEOD .NE. 0  ) THEN
*
         CALL GTPGET( 'WFILE', IFILW )
*
*"         < 2. カレントディレクトリからの読み込み >
*
         IF      ( HKIND(1:1).EQ.'L' ) THEN
            CALL GTCGET( 'FAXLOC1', HAXF  )
         ELSE IF ( HKIND(1:1).EQ.'W' ) THEN
            CALL GTCGET( 'FAXWGT1', HAXF  )
         ELSE
            CALL MSGDMP( 'W','GUQAXS','IRREGAL HKIND: <LOC> ASSUMED.' )
            CALL GTCGET( 'FAXLOC1', HAXF  )
         ENDIF
         NHF   = LENC( HAXF )
         HFILE = HAXF(1:NHF)//HAXIS
*
         INQUIRE ( FILE=HFILE, EXIST=OEXIST )
*
         IF ( OEXIST ) THEN
            CALL GFROPN
     M         ( IFILW ,
     I           HFILE   )
            CALL GFREAD
     O         ( HHEAD , AXIS  , IEOD  ,
     I           IFILW , 0              )
            CALL GFCLSE ( IFILW )
         ENDIF
      ENDIF
*
*"         < 3. デフォルトディレクトリからの読み込み >
*
      IF ( IEOD .NE. 0 ) THEN 
         IF      ( HKIND(1:1).EQ.'L' ) THEN
            CALL GTCGET( 'FAXLOC', HAXF  )
         ELSE IF ( HKIND(1:1).EQ.'W' ) THEN
            CALL GTCGET( 'FAXWGT', HAXF  )
         ELSE
            CALL GTCGET( 'FAXLOC', HAXF  )
         ENDIF
         NHF   = LENC( HAXF )
         HFILE = HAXF(1:NHF)//HAXIS
*
         CALL GFROPN
     M         ( IFILW ,
     I           HFILE   )
         CALL GFREAD
     O         ( HHEAD , AXIS  , IEOD  ,
     I           IFILW , 0              )
         CALL GFCLSE ( IFILW )
*
      ENDIF
*
      RETURN
      END
*********************************************************************
*"         << 格子情報ファイルの読み込み >>
*********************************************************************
      SUBROUTINE GUQAXC
     I         ( HAXIS , HKIND ,
     O           HHEAD , AXIS  , ACYCLE, IAMAX , IEOD  )
*
      CHARACTER  HAXIS *(*)                  !" 格子識別名称
      CHARACTER  HKIND *(*)                  !" LOC/WGT
      CHARACTER  HHEAD ( * )*(*)             !" ヘッダー
      REAL       AXIS  ( * )                 !" 位置/重み
      REAL       ACYCLE                      !" サイクリック値
      INTEGER    IAMAX                       !" 格子点数:非サイクリック
      INTEGER    IEOD                        !" データなしフラグ
      LOGICAL    OCYCL                       !" 周期境界軸スイッチ
#ifdef SYS_IBMS
      INCLUDE    (GZSIZE)                    !" NCC, NDC
#else
#include         "gzsize.F"                  !" NCC, NDC
#endif
      CHARACTER  HAXD *(NCC)
*
      CALL       GUQAXS
     I         ( HAXIS , HKIND ,
     O           HHEAD , AXIS  , IEOD  )
*
      IF ( IEOD .EQ. 0 ) THEN
         CALL GHPGET ( HHEAD, 'AEND1', IAMAX  )
         CALL GHCGET ( HHEAD, 'DSET' , HAXD   )
         OCYCL = ( HAXD(1:1) .EQ. 'C' )
         IF ( OCYCL ) THEN
            IAMAX  = IAMAX - 1
            IF      ( HKIND(1:1).EQ.'L' ) THEN
               ACYCLE = AXIS( IAMAX+1 ) - AXIS( 1 )
            ELSE IF ( HKIND(1:1).EQ.'W' ) THEN
               ACYCLE = 0.
            ELSE
               CALL MSGDMP
     &              ( 'W','GUQAXC','IRREGAL HKIND: <LOC> ASSUMED.' )
               ACYCLE = AXIS( IAMAX+1 ) - AXIS( 1 )
            ENDIF
         ELSE
            ACYCLE = 0.
         ENDIF
      ELSE
         AXIS(1) = 1.
         ACYCLE  = 0.
         IAMAX   = 1
      ENDIF
*
      RETURN
      END
