*"表題 時間単位の変換 GTOOL3(GUCT2R)
*
*"履歴 90/08/18 沼口  敦
*
*
*********************************************************************
*"          << 時間単位の変換 HUNIT → HUNITY: 実数 >>
*"         ( 秒・分・時・日・ステップ 相互間 )
*********************************************************************
      SUBROUTINE GUCT2R
     I         ( KT    , HUNIT  , HUNITY, IDELT  ,
     O           RT                                )
*
      INTEGER    KT                !" 入力時刻：単位 HUNIT
      CHARACTER  HUNIT *(*)        !" 入力 KT の単位
      CHARACTER  HUNITY*(*)        !" 変換すべき単位
      INTEGER    IDELT             !" １ステップの秒数
      REAL       RT                !" 出力時刻：単位 HUNITY
      INTEGER    IT                !" 出力時刻：単位 HUNITY
*
      REAL*8     WS                !" 時刻：単位 秒
      REAL*8     WT                !" 時刻：単位 HUNITY
*
      CALL  GUCT2S
     I         ( KT    , HUNIT  , IDELT  ,
     O           WS                       )
*
      CALL  GUCS2T
     I         ( WS    , HUNITY , IDELT  ,
     O           WT                       )
*
      RT = WT
*
      RETURN
*====================================================================
*"          << 時間単位の変換 HUNIT → HUNITY: 整数 >>
*"         ( 秒・分・時・日・ステップ 相互間 )
*====================================================================
      ENTRY      GUCT2I
     I         ( KT    , HUNIT  , HUNITY, IDELT  ,
     O           IT                                )
*
      CALL  GUCT2S
     I         ( KT    , HUNIT  , IDELT  ,
     O           WS                       )
*
      CALL  GUCS2T
     I         ( WS    , HUNITY , IDELT  ,
     O           WT                       )
*
      IT = NINT( WT )
*
      RETURN
      END
*********************************************************************
*"          << 時間単位の変換 HUNIT → 秒(倍精度) >>
*"         ( 秒・分・時・日・ステップ )
*********************************************************************
      SUBROUTINE GUCT2S
     I         ( KT    , HUNIT  , IDELT  ,
     O           WS                       )
*
      INTEGER    KT                !" 入力時刻：単位 HUNIT
      CHARACTER  HUNIT *(*)        !" 入力 KT の単位
      INTEGER    IDELT             !" １ステップの秒数
      REAL*8     WS                !" 時刻：単位 秒
*
      CHARACTER  HMSG*80
*
*"         < 1. 秒に換算 >
*
      IF      (    ( HUNIT       .EQ. 'STEP' )
     &         .OR.( HUNIT       .EQ. 'step' )  ) THEN
*
*"         < 1.1 step のとき Δｔを単位とする >
*
        WS = DBLE(KT) * DBLE(IDELT)
*
*"         < 1.2 sec, min, hour, dayとして換算 >
*
      ELSE IF (    ( HUNIT (1:1) .EQ. 'S' )
     &         .OR.( HUNIT (1:1) .EQ. 's' )  ) THEN
        WS = KT
*
      ELSE IF (    ( HUNIT (1:1) .EQ. 'M' )
     &         .OR.( HUNIT (1:1) .EQ. 'm' )  ) THEN
        WS = DBLE(KT) *60.D0
*
      ELSE IF (    ( HUNIT (1:1) .EQ. 'H' )
     &         .OR.( HUNIT (1:1) .EQ. 'h' )  ) THEN
        WS = DBLE(KT) *60.D0*60.D0
*
      ELSE IF (    ( HUNIT (1:1) .EQ. 'D' )
     &         .OR.( HUNIT (1:1) .EQ. 'd' )  ) THEN
        WS = DBLE(KT) *60.D0*60.D0*24.D0
*
      ELSE
*"         < 1.3 それ以外は時とする >
*
        WS = DBLE(KT)*60.D0*60.D0
*
        NHU = LENC( HUNIT )
        HMSG = 'IRREGAL INPUT TIME UNIT '//HUNIT(1:NHU)//
     &         ', <HOUR> ASSUMED.'
        CALL MSGDMP( 'W', 'GUCT2S', HMSG )
      ENDIF
*
      RETURN
      END
*********************************************************************
*"          << 時間単位の変換 秒倍精度 → HUNITY 倍精度 >>
*"         ( 秒・分・時・日・ステップ 相互間 )
*********************************************************************
      SUBROUTINE GUCS2T
     I         ( WS    , HUNITY, IDELT  ,
     O           WT                       )
*
      REAL*8     WS                !" 入力時刻：単位 HUNIT
      CHARACTER  HUNITY*(*)        !" 変換すべき単位
      INTEGER    IDELT             !" １ステップの秒数
      REAL*8     WT                !" 出力時刻：単位 HUNITY
*
      CHARACTER  HMSG*80
*
*"         < 2. 求める単位に換算 >
*
      IF      (    ( HUNITY      .EQ. 'STEP' )
     &         .OR.( HUNITY      .EQ. 'step' )  ) THEN
*
*"         < 2.1 step のとき Δｔを単位とする >
*
        WT = WS / DBLE( IDELT )
*
*"         < 2.2 sec, min, hour, dayへ換算 >
*
      ELSE IF (    ( HUNITY (1:1) .EQ. 'S' )
     &         .OR.( HUNITY (1:1) .EQ. 's' )  ) THEN
        WT = WS
*
      ELSE IF (    ( HUNITY (1:1) .EQ. 'M' )
     &         .OR.( HUNITY (1:1) .EQ. 'm' )  ) THEN
        WT = WS / 60.D0
*
      ELSE IF (    ( HUNITY (1:1) .EQ. 'H' )
     &         .OR.( HUNITY (1:1) .EQ. 'h' )  ) THEN
        WT = WS / ( 60.D0*60.D0 )
*
      ELSE IF (    ( HUNITY (1:1) .EQ. 'D' )
     &         .OR.( HUNITY (1:1) .EQ. 'd' )  ) THEN
        WT = WS / ( 60.D0*60.D0*24.D0 )
*
      ELSE
*"         < 2.3 それ以外は時へ換算 >
*
        WT = WS / ( 60.D0*60.D0 )
*
        NHU = LENC( HUNITY )
        HMSG = 'IRREGAL OUTPUT TIME UNIT '//HUNITY(1:NHU)//
     &         ', <HOUR> ASSUMED.'
        CALL MSGDMP( 'W', 'GUCS2T', HMSG )
*
      ENDIF
*
      RETURN
      END
