/[lmdze]/trunk/libf/filtrez/filtreg.f90
ViewVC logotype

Diff of /trunk/libf/filtrez/filtreg.f90

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 53 by guez, Tue Dec 21 15:45:48 2010 UTC revision 54 by guez, Tue Dec 6 15:07:04 2011 UTC
# Line 12  contains Line 12  contains
12      ! pour l'opérateur filtre.      ! pour l'opérateur filtre.
13    
14      USE dimens_m, ONLY : iim, jjm      USE dimens_m, ONLY : iim, jjm
15      USE parafilt, ONLY: matriceun, matriceus, matricevn, matricevs, matrinvn, &      USE coefils, ONLY : sddu, sddv, unsddu, unsddv
16           matrinvs      use inifilr_m, only: jfiltnu, jfiltnv, jfiltsu, jfiltsv, matriceun, &
17      USE coefils, ONLY : jfiltnu, jfiltnv, jfiltsu, jfiltsv, sddu, sddv, &           matriceus, matricevn, matricevs, matrinvn, matrinvs
          unsddu, unsddv  
18    
19      INTEGER, intent(in):: nlat ! nombre de latitudes a filtrer      INTEGER, intent(in):: nlat ! nombre de latitudes a filtrer
20      integer, intent(in):: nbniv ! nombre de niveaux verticaux a filtrer      integer, intent(in):: nbniv ! nombre de niveaux verticaux a filtrer
# Line 53  contains Line 52  contains
52    
53      !-----------------------------------------------------------      !-----------------------------------------------------------
54    
55      IF (ifiltre==1 .OR. ifiltre==-1) STOP &      IF (ifiltre==1 .OR. ifiltre==-1) then
56           'Pas de transformee simple dans cette version'         print *, 'Pas de transformee simple dans cette version'
57           STOP 1
58        end IF
59    
60      IF (iter==2) THEN      IF (iter==2) THEN
61         PRINT *, ' Pas d iteration du filtre dans cette version !', &         PRINT *, ' Pas d iteration du filtre dans cette version !', &
62              ' Utiliser old_filtreg et repasser !'              ' Utiliser old_filtreg et repasser !'
63         STOP         STOP 1
64      END IF      END IF
65    
66      IF (ifiltre==-2 .AND. .NOT. griscal) THEN      IF (ifiltre==-2 .AND. .NOT. griscal) THEN
67         PRINT *, ' Cette routine ne calcule le filtre inverse que ', &         PRINT *, ' Cette routine ne calcule le filtre inverse que ', &
68              ' sur la grille des scalaires !'              ' sur la grille des scalaires !'
69         STOP         STOP 1
70      END IF      END IF
71    
72      IF (ifiltre/=2 .AND. ifiltre/=-2) THEN      IF (ifiltre/=2 .AND. ifiltre/=-2) THEN
73         PRINT *, ' Probleme dans filtreg car ifiltre NE 2 et NE -2', &         PRINT *, ' Probleme dans filtreg car ifiltre NE 2 et NE -2', &
74              ' corriger et repasser !'              ' corriger et repasser !'
75         STOP         STOP 1
76      END IF      END IF
77    
78      IF (griscal) THEN      IF (griscal) THEN
79         IF (nlat /= jjm + 1) THEN         IF (nlat /= jjm + 1) THEN
80            PRINT 1111            PRINT *, 'Erreur dans le dimensionnement du tableau CHAMP a ' &
81            STOP                 // 'filtrer, sur la grille des scalaires'
82              STOP 1
83         ELSE         ELSE
   
84            IF (iaire==1) THEN            IF (iaire==1) THEN
85               sdd1 = sddv               sdd1 = sddv
86               sdd2 = unsddv               sdd2 = unsddv
# Line 94  contains Line 95  contains
95            jffil2 = jjm            jffil2 = jjm
96         END IF         END IF
97      ELSE      ELSE
98         IF (nlat/=jjm) THEN         IF (nlat /= jjm) THEN
99            PRINT 2222            PRINT *, 'Erreur dans le dimensionnement du tableau CHAMP a ' &
100            STOP                 // 'filtrer, sur la grille de V ou de Z'
101              STOP 1
102         ELSE         ELSE
   
103            IF (iaire==1) THEN            IF (iaire==1) THEN
104               sdd1 = sddu               sdd1 = sddu
105               sdd2 = unsddu               sdd2 = unsddu
# Line 114  contains Line 115  contains
115         END IF         END IF
116      END IF      END IF
117    
   
118      DO hemisph = 1, 2      DO hemisph = 1, 2
   
119         IF (hemisph==1) THEN         IF (hemisph==1) THEN
120            jdfil = jdfil1            jdfil = jdfil1
121            jffil = jffil1            jffil = jffil1
# Line 125  contains Line 124  contains
124            jffil = jffil2            jffil = jffil2
125         END IF         END IF
126    
   
127         DO l = 1, nbniv         DO l = 1, nbniv
128            DO j = jdfil, jffil            DO j = jdfil, jffil
   
   
129               DO i = 1, iim               DO i = 1, iim
130                  champ(i, j, l) = champ(i, j, l)*sdd1(i)                  champ(i, j, l) = champ(i, j, l)*sdd1(i)
131               END DO               END DO
132    
   
133               IF (hemisph==1) THEN               IF (hemisph==1) THEN
   
134                  IF (ifiltre==-2) THEN                  IF (ifiltre==-2) THEN
135                     DO k = 1, iim                     DO k = 1, iim
136                        eignq(k) = 0.0                        eignq(k) = 0.
137                     END DO                     END DO
138                     DO k = 1, iim                     DO k = 1, iim
139                        DO i = 1, iim                        DO i = 1, iim
# Line 148  contains Line 142  contains
142                     END DO                     END DO
143                  ELSE IF (griscal) THEN                  ELSE IF (griscal) THEN
144                     DO k = 1, iim                     DO k = 1, iim
145                        eignq(k) = 0.0                        eignq(k) = 0.
146                     END DO                     END DO
147                     DO i = 1, iim                     DO i = 1, iim
148                        DO k = 1, iim                        DO k = 1, iim
# Line 158  contains Line 152  contains
152                     END DO                     END DO
153                  ELSE                  ELSE
154                     DO k = 1, iim                     DO k = 1, iim
155                        eignq(k) = 0.0                        eignq(k) = 0.
156                     END DO                     END DO
157                     DO i = 1, iim                     DO i = 1, iim
158                        DO k = 1, iim                        DO k = 1, iim
# Line 167  contains Line 161  contains
161                        END DO                        END DO
162                     END DO                     END DO
163                  END IF                  END IF
   
164               ELSE               ELSE
   
165                  IF (ifiltre==-2) THEN                  IF (ifiltre==-2) THEN
166                     DO k = 1, iim                     DO k = 1, iim
167                        eignq(k) = 0.0                        eignq(k) = 0.
168                     END DO                     END DO
169                     DO i = 1, iim                     DO i = 1, iim
170                        DO k = 1, iim                        DO k = 1, iim
# Line 182  contains Line 174  contains
174                     END DO                     END DO
175                  ELSE IF (griscal) THEN                  ELSE IF (griscal) THEN
176                     DO k = 1, iim                     DO k = 1, iim
177                        eignq(k) = 0.0                        eignq(k) = 0.
178                     END DO                     END DO
179                     DO i = 1, iim                     DO i = 1, iim
180                        DO k = 1, iim                        DO k = 1, iim
# Line 192  contains Line 184  contains
184                     END DO                     END DO
185                  ELSE                  ELSE
186                     DO k = 1, iim                     DO k = 1, iim
187                        eignq(k) = 0.0                        eignq(k) = 0.
188                     END DO                     END DO
189                     DO i = 1, iim                     DO i = 1, iim
190                        DO k = 1, iim                        DO k = 1, iim
# Line 201  contains Line 193  contains
193                        END DO                        END DO
194                     END DO                     END DO
195                  END IF                  END IF
   
196               END IF               END IF
197    
198               IF (ifiltre==2) THEN               IF (ifiltre==2) THEN
# Line 215  contains Line 206  contains
206               END IF               END IF
207    
208               champ(iim + 1, j, l) = champ(1, j, l)               champ(iim + 1, j, l) = champ(1, j, l)
   
209            END DO            END DO
   
210         END DO         END DO
   
211      end DO      end DO
212    
 1111 FORMAT (//20X, 'ERREUR dans le dimensionnement du tableau &  
          & CHAMP a filtrer, sur la grille des scalaires'/)  
 2222 FORMAT (//20X, 'ERREUR dans le dimensionnement du tableau &  
          &CHAMP a filtrer, sur la grille de V ou de Z'/)  
   
213    END SUBROUTINE filtreg    END SUBROUTINE filtreg
214    
215  end module filtreg_m  end module filtreg_m

Legend:
Removed from v.53  
changed lines
  Added in v.54

  ViewVC Help
Powered by ViewVC 1.1.21