source: flex_extract.git/Source/Fortran/grphreal.f90 @ dfa7dbd

ctbtodev
Last change on this file since dfa7dbd was dfa7dbd, checked in by pesei <petra seibert -@…>, 5 years ago

changes in the Fortran part and associated regression test

2019-08-21 PS
introduce the "new" versions of source files:

all .f90 free format
code beautification
regression test is OK

make new local gfortran makefiles, remove parameters not needed
anymore

change filenames rwgrib.f90 (all lower), preconvert to calc_etadot,
adapt messages and comments in calc_etadot.f90
adapt all makefiles to new filenames
adapt success message of logfiles in regression test references
redo regression test OK

provide softlinks for standards:

calc_etadot.out -> calc_etadot_fast.out
makefile_local_gfortran -> makefile_fast

provide changelog.txt in Fortran
provide readme.txt in Regression/FortranEtadot?

  • Property mode set to 100644
File size: 4.8 KB
Line 
1MODULE GRTOPH
2
3  USE PHTOGR
4
5CONTAINS
6
7  SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL)
8
9!! WRONG>>> DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
10!! FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
11!! RAUM AUF KUGELKOORDINATEN DURCH
12
13! CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
14!          CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
15! CXM   = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
16! FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
17! WSAVE  = Working Array fuer Fouriertransformation
18! Z   = LEGENDREFUNKTIONSWERTE
19!
20! MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
21! MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
22! MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
23! MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
24
25    IMPLICIT REAL (A-H,O-Z)
26
27!   Anzahl der Gitterpunkte pro Breitenkreis des reduzierten
28!   Gauss'schen Gitters
29    INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB)
30
31!   FELD DER LEGENDREPOLYNOME FUER EINE BREITE
32    REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
33
34!   LOGICAL*1 USED(((216*217)/2+1)*160)
35
36    DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
37    REAL FELD(MAXL,MLEVEL)
38    DIMENSION WSAVE(8*MAXB+15,MAXB/2)
39    REAL W(MAXB)
40    DIMENSION IND(MAXB)
41
42    IND(1)=0
43    DO 6 J=2,MAXB/2
44      IND(j)=IND(J-1)+MLAT(J-1)
456   CONTINUE
46!$OMP PARALLEL DO SCHEDULE(DYNAMIC)
47    DO 16 L=1,MLEVEL
48      CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL)
4916  CONTINUE
50!$omp end parallel do
51
52    RETURN
53
54  END SUBROUTINE GRPH213
55
56  SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT,MNAUF,MAXL,MAXB,MLEVEL)
57
58!! DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
59!! FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
60!! RAUM AUF KUGELKOORDINATEN DURCH
61!
62! CXMN  = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
63!         CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
64! CXM   = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
65! FELD  = FELD DER METEOROLOGISCHEN VARIABLEN
66! WSAVE = Working Array fuer Fouriertransformation
67! Z     = LEGENDREFUNKTIONSWERTE
68!
69! MNAUF ANZAHL DER FOURIERKOEFFIZIENTEN
70! MAXL  ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
71! MAXB  ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
72! MLEVEL ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
73
74    IMPLICIT REAL (A-H,O-Z)
75
76!   FELD DER FOURIERKOEFFIZIENTEN
77    REAL CXMS(4*(MNAUF+1))
78    REAL CXMA(4*(MNAUF+1))
79    REAL,ALLOCATABLE :: CXM(:,:)
80
81!   Anzahl der Gitterpunkte pro Breitenkreis des reduzierten
82!   Gauss'schen Gitters
83    INTEGER MLAT(MAXB),ISIZE
84
85!   FELD DER LEGENDREPOLYNOME FUER EINE BREITE
86    REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
87
88!   LOGICAL*1 USED(((216*217)/2+1)*160)
89
90    REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
91    REAL FELD(MAXL,MLEVEL)
92    REAL WSAVE(8*MAXB+15,MAXB/2)
93    INTEGER IFAX(10,MAXB)
94    REAL W(MAXB)
95    INTEGER IND(MAXB)
96
97    ALLOCATE(CXM( 4*MAXB,MAXB))
98    DO 5 J=1,MAXB/2
99      CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L)
100      CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
101      CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L)
102      CALL RFOUFTR(CXMA,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
103      DO 4 I=1,2*(MNAUF+1)
104        CXM(I,J)=CXMS(I)+CXMA(I)
105        CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I)
1064     CONTINUE
1075   CONTINUE
108    CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB)
109
110    DEALLOCATE(CXM)
111
112    RETURN
113   
114  END SUBROUTINE GRPHSUB
115!
116  SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB)
117
118!!     DIESE ROUTINE BERECHNET DIE KFFKs CXMN
119
120    IMPLICIT REAL (A-H,O-Z)
121    INTEGER MLAT(MAXB)
122    DIMENSION CXM(0:4*MAXB-1,MAXB)
123    DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1)
124    REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
125    REAL*8 W(MAXB),CR,CI,HILF
126    LOGICAL EVEN
127
128
129    LL=0
130    LLP=0
131    DO 1 I=0,MNAUF
132      KM=0
1339     KM=KM+1
134      IF (MLAT(KM) .LE. 2*I) THEN
135        GOTO 9
136      END IF
137      DO 2 J=I,MNAUF
138        CR=0
139        CI=0
140        EVEN=MOD(I+J,2) .EQ. 0
141        IF (EVEN) THEN
142          DO 3 K=KM,MAXB/2
143            HILF=W(K)*Z(K,LLP)
144            CR=CR+CXM(2*I,K)*HILF
145            CI=CI+CXM(2*I+1,K)*HILF
1463         CONTINUE
147        ELSE
148          DO 4 K=KM,MAXB/2
149            HILF=W(K)*Z(K,LLP)
150            CR=CR+CXM(2*I,MAXB+1-K)*HILF
151            CI=CI+CXM(2*I+1,MAXB+1-K)*HILF
1524         CONTINUE
153        END IF
1545       CXMN(2*LL)=CR
155        CXMN(2*LL+1)=CI
156        LL=LL+1
157        LLP=LLP+1
1582     CONTINUE
159      LLP=LLP+2
1601   CONTINUE
161    RETURN
162   
163  END SUBROUTINE LGTR213
164
165  SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN)
166!
167! BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS
168
169    IMPLICIT REAL (A-H,O-Z)
170    DIMENSION CXM(0:2*MAXL-1)
171    DIMENSION FELD(MAXL),TRIGS(2*MAXL)
172    DIMENSION WSAVE(MAXAUF)
173    INTEGER IFAX(10)
174
175! NORMIERUNG...
176    WSAVE(1)=CXM(MAXL-1)
177
178    CXM(1:MAXL)=CXM(0:MAXL-1)/2
179    CXM(0)=WSAVE(1)/2
180!    CALL CFFTF(MAXL,CXM,WSAVE)
181    CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1)
182    RETURN
183  END SUBROUTINE RFOUFTR
184
185END MODULE GRTOPH
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG