Index: preproc/src/grphreal.f90
===================================================================
--- preproc/src/grphreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/grphreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,189 @@
+MODULE GRTOPH
+
+  USE PHTOGR
+
+CONTAINS
+  !
+  SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+       MNAUF,MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF KUGELKOORDINATEN DURCH
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !			CXM		 = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !			WSAVE  = Working Array fuer Fouriertransformation
+    !     Z 	 = LEGENDREFUNKTIONSWERTE
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT REAL (A-H,O-Z)
+
+
+    !			Anzahl der Gitterpunkte pro Breitenkreis des reduzierten 
+    !			Gauss'schen Gitters
+    INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB)
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+
+    !      LOGICAL*1 USED(((216*217)/2+1)*160)
+
+    DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    DIMENSION WSAVE(8*MAXB+15,MAXB/2)
+    REAL*8 W(MAXB) 
+    DIMENSION IND(MAXB)
+
+
+    IND(1)=0
+    DO J=2,MAXB/2
+       IND(j)=IND(J-1)+MLAT(J-1)
+    ENDDO
+    !$OMP PARALLEL DO SCHEDULE(DYNAMIC)
+    DO  L=1,MLEVEL
+       CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+            &MNAUF,MAXL,MAXB,MLEVEL)
+    ENDDO
+    !$omp end parallel do
+
+
+    RETURN
+  END SUBROUTINE GRPH213
+  !
+  SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+       &MNAUF,MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF KUGELKOORDINATEN DURCH
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !			CXM		 = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !			WSAVE  = Working Array fuer Fouriertransformation
+    !     Z 	 = LEGENDREFUNKTIONSWERTE
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT REAL (A-H,O-Z)
+
+    !    FELD DER FOURIERKOEFFIZIENTEN
+    REAL CXMS(4*(MNAUF+1))
+    REAL CXMA(4*(MNAUF+1))
+    REAL,ALLOCATABLE :: CXM(:,:)
+
+    !			Anzahl der Gitterpunkte pro Breitenkreis des reduzierten 
+    !			Gauss'schen Gitters
+    INTEGER MLAT(MAXB),ISIZE
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+
+    !      LOGICAL*1 USED(((216*217)/2+1)*160)
+
+    REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    REAL WSAVE(8*MAXB+15,MAXB/2)
+    INTEGER IFAX(10,MAXB)
+    REAL W(MAXB)
+    INTEGER IND(MAXB)
+
+    ALLOCATE(CXM( 4*MAXB,MAXB))
+    DO  J=1,MAXB/2
+       CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L)
+       CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
+       CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L)
+       CALL RFOUFTR(CXMA, &
+            &WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
+       DO  I=1,2*(MNAUF+1)
+          CXM(I,J)=CXMS(I)+CXMA(I)
+          CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I)
+       ENDDO
+    ENDDO
+    CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB)
+
+    DEALLOCATE(CXM)
+
+    RETURN
+  END SUBROUTINE GRPHSUB
+  !
+  SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB)
+    IMPLICIT REAL (A-H,O-Z)
+    INTEGER MLAT(MAXB)
+    DIMENSION CXM(0:4*MAXB-1,MAXB)
+    DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1)
+    REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+    REAL*8 W(MAXB),CR,CI,HILF
+    LOGICAL EVEN
+    !
+    !     DIESE ROUTINE BERECHNET DIE KFFKs CXMN
+    !
+    LL=0
+    LLP=0
+    DO  I=0,MNAUF
+       KM=0
+       DO 
+          KM=KM+1
+          IF(MLAT(KM).GT.2*I) THEN
+             EXIT
+          ENDIF
+       ENDDO
+       DO  J=I,MNAUF
+          CR=0
+          CI=0
+          EVEN=MOD(I+J,2).EQ.0
+          IF(EVEN) THEN
+             DO  K=KM,MAXB/2
+                HILF=W(K)*Z(K,LLP)
+                CR=CR+CXM(2*I,K)*HILF
+                CI=CI+CXM(2*I+1,K)*HILF
+             ENDDO
+          ELSE
+             DO  K=KM,MAXB/2
+                HILF=W(K)*Z(K,LLP)
+                CR=CR+CXM(2*I,MAXB+1-K)*HILF
+                CI=CI+CXM(2*I+1,MAXB+1-K)*HILF
+             ENDDO
+          ENDIF
+          CXMN(2*LL)=CR
+          CXMN(2*LL+1)=CI
+          LL=LL+1
+          LLP=LLP+1
+       ENDDO
+       LLP=LLP+2
+    ENDDO
+    RETURN
+  END SUBROUTINE LGTR213
+  !
+
+  !
+  SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN)
+    !     BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS
+    IMPLICIT REAL (A-H,O-Z)
+    DIMENSION CXM(0:2*MAXL-1)
+    DIMENSION FELD(MAXL),TRIGS(2*MAXL)
+    DIMENSION WSAVE(MAXAUF)
+    INTEGER IFAX(10)
+
+
+    ! NORMIERUNG...
+    WSAVE(1)=CXM(MAXL-1)
+
+    CXM(1:MAXL)=CXM(0:MAXL-1)/2
+    CXM(0)=WSAVE(1)/2
+    CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1)
+    RETURN
+  END SUBROUTINE RFOUFTR
+
+END MODULE GRTOPH
