1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
C
C Copyright (c) 1997 Silvano Bonazzola
C
C This file is part of LORENE.
C
C LORENE is free software; you can redistribute it and/or modify
C it under the terms of the GNU General Public License as published by
C the Free Software Foundation; either version 2 of the License, or
C (at your option) any later version.
C
C LORENE is distributed in the hope that it will be useful,
C but WITHOUT ANY WARRANTY; without even the implied warranty of
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
C GNU General Public License for more details.
C
C You should have received a copy of the GNU General Public License
C along with LORENE; if not, write to the Free Software
C Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
C
C
SUBROUTINE TFM2S(N,N64,Y,CC)
implicit double precision (a-h,o-z)
C
C ROUTINE POUR LE CALCUL DE LES TF DE N64 FONCTIONS
C A LA FOIS.
C
C ARGUMENTS DE LA ROUTINE:
C
C N = NOMBRE DES DEGRES DE LIBERTEE. N DOIT
C ETRE= A 2**p*3**q*5**r AVEC p,q,r NOMBRS
C ENTIERS (p.NE.0).
C
C N64 = NOMBRES DES FONCTIONS DONT ON VEUT CALCULER
C LES TF.
C Y = TABLEAU CONTENANT EN IMPUT LES ECHANTILLONS DES FON-
C CTIONS. Y DOIT AVOIR (N+4)*(N64+1) DIMENSIONS.
C LES N ECHANTILLONS DES N64 FONCTIONS SONT
C STOCKES EN PARALLEL OU EN SERIE. EN PARALEL
C ON A:
C Y(1),Y(2),...Y(N64) CONTIENT LES VALEURES
C DES N64 FONCTIONS DANS LE POINT X=0,
C Y(1+N64),Y(2+N64),...Y(N64+N64)
C LES VALEURES DES FONCTIONS POUR X=2*PI/N
C Y(1+2*N64),Y(2+2*N64),...Y(N64+2*N64)
C LES VALEURES POUR X=(2*PI/N)*2 ET AINSI DE
C JUSQU' A X=(2*PI/N)*(N-1).
C
C CC = OUTPUT: LES COEEFICIENTS DE CC IMPAIRES CONTIENENT
C LES COSINUS ET LES COEFFICIENTS PAIRES LES SINUS.
C (CC(2)=0 PAR DEFINITION. L'ARGUMENT DE CC EST DONC
C COMPRIS ENTRE 1 ET N+1.
C
C Routine testee le 14/9/1985
C
C
C $Id: tfm2s.f,v 1.2 2012/03/30 12:12:44 j_novak Exp $
C $Log: tfm2s.f,v $
C Revision 1.2 2012/03/30 12:12:44 j_novak
C Cleaning of fortran files
C
C Revision 1.1.1.1 2001/11/20 15:19:31 e_gourgoulhon
C LORENE
C
c Revision 1.1 1997/10/23 08:33:15 eric
c Initial revision
c
C
C $Header: /cvsroot/Lorene/F77/Source/Poisson2d/tfm2s.f,v 1.2 2012/03/30 12:12:44 j_novak Exp $
C
C
character*120 header
data header/'$Header: /cvsroot/Lorene/F77/Source/Poisson2d/tfm2s.f,v 1.2 2012/03/30 12:12:44 j_novak Exp $'/
DIMENSION CC(*),Y(*),IFAX(64),TRIGS(1600)
DATA NDIM/0/
DATA NFON/0/
DATA JJJ/0/
save NFON,NDIM,N65,N63,N6565,NM65,N66,ifax,trigs
N1040=1040
IF(N.GT.N1040) THEN
PRINT 800,N
800 FORMAT(10X,'DIMENSION INSUFFISANTES DANS LA ROUTINE'
, ,' TFM, N=',I5,' > A LA DIMENSION DE TRIGS*2/3=',I5)
ENDIF
C
IF(N.EQ.NDIM) GO TO 1
CALL FAX(IFAX,N,3)
CALL FFTRIG(TRIGS,N,3)
1 CONTINUE
C
IF(NFON.EQ.N64.AND.NDIM.EQ.N) GO TO 4
NFON=N64
NDIM=N
N65=N64
IF((N64/8)*8.EQ.N64)N65=N64+1
N63=N64-1
N6565=N65+N65
NM65=N*N65
N66=N65+1
4 CONTINUE
C
DO 10 L=1,NM65
CC(L)=Y(L)*2
10 CONTINUE
C
C CALCUL DE LA TF EN PARALLEL
C
CALL FFT991(CC,Y,TRIGS,IFAX,N65,1,N,N64,-1)
C
101 FORMAT(1X,'TFM')
100 FORMAT(1X,'TFM',10D12.4)
CC
RETURN
END
|