* PACKAGE DCHEB  !" 力学 チェビシェフ関数展開
*
*"  [HIS] 92/09/18(takepiro)
*"        92/11/09(takepiro)
*
**********************************************************************
      SUBROUTINE C2W     !" チェビシェフ変換 (→格子)
     M         ( WDATA ,
     I           CDATA ,
     I           HGRAD , HFUNC , KMAXD )
*
*   [PARAM] 
#ifdef SYS_IBMS
      INCLUDE   (ZCDIM)                      !" 格子点数，波数
      INCLUDE   (ZCCOM)                      !" 標準物理定数
#else
#include        "zcdim.F"                    !" 格子点数，波数
#include        "zccom.F"                    !" 標準物理定数
#endif
*
      INTEGER    KMAXD
*
*   [MODIFY] 
      REAL       WDATA ( NMDIM, KMAXD )      !" 動径格子点データ
*
*   [INPUT] 
      REAL       CDATA ( NMDIM, KMAXD )      !" 動径チェビシェフデータ
      CHARACTER  HGRAD*4                     !" 微分フラグ
      CHARACTER  HFUNC*4                     !" 符号フラグ
*
*
*   [INTERNAL WORK] 
      DOUBLE PRECISION  QCHEB ( 0:KDIM, 0:KDIM )    !" チェビシェフ関数 Tj(x_k)
      DOUBLE PRECISION  QXSI  ( 0:KDIM  )    !" チェビシェフポイント x_k
      DOUBLE PRECISION  DRFAC                !" 微分のファクター
*
      REAL       WORK  ( NMDIM, KMAX )       !" 作業領域
      REAL       CHEB  ( NMDIM, KMAX )       !" 作業領域
*
      DOUBLE PRECISION  PI
      INTEGER    J, K
      LOGICAL    OFRSTG , OFRSTC
      DATA       OFRSTG , OFRSTC / .TRUE., .TRUE. /
*
      SAVE
*
*"   < 0. チェビシェフポイントの計算 > 
*
      IF ( OFRSTC ) THEN
         OFRSTC = .FALSE. 
*
         DRFAC = 2. / ( ERO - ERI )
         PI = 4.0 * ATAN ( 1.0 )
         DO 8100 K = 0, KDIM
            QXSI ( K ) = COS( PI* K / KDIM ) !" チェビシェフポイント
 8100    CONTINUE
      ENDIF
*
      CALL CHBC2G
     M       (  WDATA , 
     I          CDATA , 
     C          QXSI  , DRFAC ,
     F          HGRAD , HFUNC , 
     D          NMDIM , KMAX  , 
     W          CHEB  , WORK       )
*
      RETURN
*======================================================================
      ENTRY      W2C      !"  チェビシェフ変換 (格子→スペクトル) 
     M         ( CDATA ,
     I           WDATA ,
     I           HGRAD , HFUNC , KMAXD )
*
*"   < 0. 微分のファクター, チェビシェフ関数の計算 > 
*
      IF ( OFRSTG ) THEN
         OFRSTG = .FALSE. 
*
         DRFAC = 2. / ( ERO - ERI )
         PI = 4.D0 * ATAN ( 1.D0 )
         DO 100 K = 0, KDIM
            DO 100 J = 0, KDIM
               QCHEB( J, K ) = COS( J * PI * K / KDIM )
 100    CONTINUE
      ENDIF
*
      CALL CHBG2C
     M       (  CDATA , 
     I          WDATA , 
     C          QCHEB , DRFAC ,
     F          HGRAD , HFUNC , 
     D          NMDIM , KMAX  , 
     W          CHEB  , WORK       )
*
      RETURN
      END
**********************************************************************
      SUBROUTINE CDERIV     !" チェビシェフ微分
     O         ( CDDATA ,
     I           CDATA ,
     I           KMAXD )
*
*   [PARAM] 
#ifdef SYS_IBMS
      INCLUDE   (ZCDIM)                      !" 格子点数，波数
      INCLUDE   (ZCCOM)                      !" 標準物理定数
#else
#include        "zcdim.F"                    !" 格子点数，波数
#include        "zccom.F"                    !" 標準物理定数
#endif
*
      INTEGER    KMAXD
*
*   [OUTPUT] 
      REAL       CDDATA ( NMDIM, KMAXD )      !" 動径格子点データ
*
*   [INPUT] 
      REAL       CDATA ( NMDIM, KMAXD )      !" 動径チェビシェフデータ
*
      DOUBLE PRECISION  DRFAC                !" 微分のファクター
      LOGICAL    OFIRST
      DATA       OFIRST / .TRUE. /
*
      IF ( OFIRST ) THEN
         OFIRST = .FALSE. 
         DRFAC = 2. / ( ERO - ERI )
      ENDIF
*
      CALL CHBDER
     O              ( CDDATA, 
     I                CDATA , DRFAC , 
     M                NMDIM , KMAXD    )
*
      RETURN
      END

