C WEXP      SOURCE    CHAT      05/01/13    04:11:35     5004
      SUBROUTINE WEXP(INV,N,W)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-V)
      IMPLICIT COMPLEX*16 (W-Z)
      COMPLEX*16 RLTOCX
      LOGICAL INV
C
C=======================================================================
C  =  CALCUL DES EXP. COMPLEXES EN SIMPLE PRECISION                    =
C  =   (POUR CALCUL DE TRANSFORMEES DE FOURIER RAPIDES)                =
C  =                                                                   =
C  =                                                                   =
C  =    INV = .FALSE. :  TRANSFORMEE DIRECTE                           =
C  =    INV = .TRUE.  :  TRANSFORMEE INVERSE                           =
C  =    N             :  NOMBRE ENTIER DE POINTS SUR LESQUELS ON VEUT  =
C  =                     FAIRE LA TRANSFORMATION                       =
C  =    W             :  TABLEAU COMPLEXE DE DIMENSION N2=N/2 QUI      =
C  =                     CONTIENDRA A LA SORTIE LES EXPONENTIELLES     =
C  =                                                                   =
C  =  CREATION      : 13/04/87                                         =
C  =  PROGRAMMATION : BEAUFILS  ( D'APRES TFF DE BIBLIO DEMT/SMTS )    =
C  =                                      ECRIT PAR LEPAREUX           =
C=======================================================================
C

-INC PPARAM
-INC CCOPTIO
-INC CCREEL
C
      DIMENSION W(*)
C
      N2=N/2
      IF(IIMPI.EQ.1) WRITE(IOIMP,*)' NOMBRE DE POINTS ',N
      ARG=-2.*XPI/REAL(N)
C     IF(IIMPI.EQ.1) WRITE(IOIMP,*)' ARGUMENT         ',ARG
      W(1)=(1.,0.)
C     IF(IIMPI.EQ.1) WRITE(IOIMP,*)' W(1)             ',W(1)
      PREEL=COS(ARG)
      PIMAG=SIN(ARG)
      W(2)=RLTOCX(PREEL,PIMAG)
C     IF(IIMPI.EQ.1) WRITE(IOIMP,*)' W(2)             ',W(2)
      IF(INV) THEN
*         CALL COCOMP(W(2),WW)
          WW=CONJG(W(2))
          W(2)=WW
      ENDIF
C     IF(IIMPI.EQ.1) WRITE(IOIMP,*)' W(2)             ',W(2)
      DO 10 I=3,N2
      W(I)=W(2)*W(I-1)
  10  CONTINUE
C     IF(IIMPI.EQ.1) WRITE(IOIMP,1000)(W(I),I=1,N2)
1000  FORMAT(2(1PE12.5))
C
      RETURN
      END



