/[lmdze]/trunk/filtrez/filtreg_scal.f
ViewVC logotype

Contents of /trunk/filtrez/filtreg_scal.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 32 - (show annotations)
Tue Apr 6 17:52:58 2010 UTC (14 years, 1 month ago) by guez
Original Path: trunk/libf/filtrez/filtreg.f90
File size: 6342 byte(s)
Split "stringop.f90" into single-procedure files. Gathered files in directory
"IOIPSL/Stringop".

Split "flincom.f90" into "flincom.f90" and "flinget.f90". Removed
unused procedures from module "flincom". Removed unused argument
"filename" of procedure "flinopen_nozoom".

Removed unused files.

Split "grid_change.f90" into "grid_change.f90" and
"gr_phy_write_3d.f90".

Removed unused procedures from modules "calendar", "ioipslmpp",
"grid_atob", "gath_cpl" and "getincom". Removed unused procedures in
files "ppm3d.f" and "thermcell.f".

Split "mathelp.f90" into "mathelp.f90" and "mathop.f90".

Removed unused variable "dpres" of module "comvert".

Use argument "itau" instead of local variables "iadvtr" and "first" to
control algorithm in procedure "fluxstokenc".

Removed unused arguments of procedure "integrd".

Removed useless computations at the end of procedure "leapfrog".

Merged common block "matrfil" into module "parafilt".

1 module filtreg_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE filtreg(champ, nlat, nbniv, ifiltre, iaire, griscal, iter)
8
9 ! From filtrez/filtreg.F, version 1.1.1.1, 2004/05/19 12:53:09
10
11 ! Author: P. Le Van
12 ! Objet : filtre matriciel longitudinal, avec les matrices précalculées
13 ! pour l'opérateur filtre.
14
15 USE dimens_m, ONLY : iim, jjm
16 USE parafilt, ONLY: matriceun, matriceus, matricevn, matricevs, matrinvn, &
17 matrinvs
18 USE coefils, ONLY : jfiltnu, jfiltnv, jfiltsu, jfiltsv, sddu, sddv, &
19 unsddu, unsddv
20
21 INTEGER, intent(in):: nlat ! nombre de latitudes a filtrer
22 integer, intent(in):: nbniv ! nombre de niveaux verticaux a filtrer
23
24 REAL, intent(inout):: champ(iim + 1, nlat, nbniv)
25 ! en entrée : champ à filtrer, en sortie : champ filtré
26
27 integer, intent(in):: ifiltre
28 ! +1 Transformee directe
29 ! -1 Transformee inverse
30 ! +2 Filtre directe
31 ! -2 Filtre inverse
32 ! Variable Intensive
33 ! ifiltre = 1 filtre directe
34 ! ifiltre =-1 filtre inverse
35 ! Variable Extensive
36 ! ifiltre = 2 filtre directe
37 ! ifiltre =-2 filtre inverse
38
39 integer, intent(in):: iaire
40 ! 1 si champ intensif
41 ! 2 si champ extensif (pondere par les aires)
42
43 integer, intent(in):: iter
44 ! 1 filtre simple
45
46 LOGICAL, intent(in):: griscal
47
48 ! Variables local to the procedure:
49
50 INTEGER jdfil1, jdfil2, jffil1, jffil2, jdfil, jffil
51 INTEGER i, j, l, k
52 REAL eignq(iim), sdd1(iim), sdd2(iim)
53 INTEGER hemisph
54
55 !-----------------------------------------------------------
56
57 IF (ifiltre==1 .OR. ifiltre==-1) STOP &
58 'Pas de transformee simple dans cette version'
59
60 IF (iter==2) THEN
61 PRINT *, ' Pas d iteration du filtre dans cette version !', &
62 ' Utiliser old_filtreg et repasser !'
63 STOP
64 END IF
65
66 IF (ifiltre==-2 .AND. .NOT. griscal) THEN
67 PRINT *, ' Cette routine ne calcule le filtre inverse que ', &
68 ' sur la grille des scalaires !'
69 STOP
70 END IF
71
72 IF (ifiltre/=2 .AND. ifiltre/=-2) THEN
73 PRINT *, ' Probleme dans filtreg car ifiltre NE 2 et NE -2', &
74 ' corriger et repasser !'
75 STOP
76 END IF
77
78 IF (griscal) THEN
79 IF (nlat /= jjm + 1) THEN
80 PRINT 1111
81 STOP
82 ELSE
83
84 IF (iaire==1) THEN
85 sdd1 = sddv
86 sdd2 = unsddv
87 ELSE
88 sdd1 = unsddv
89 sdd2 = sddv
90 END IF
91
92 jdfil1 = 2
93 jffil1 = jfiltnu
94 jdfil2 = jfiltsu
95 jffil2 = jjm
96 END IF
97 ELSE
98 IF (nlat/=jjm) THEN
99 PRINT 2222
100 STOP
101 ELSE
102
103 IF (iaire==1) THEN
104 sdd1 = sddu
105 sdd2 = unsddu
106 ELSE
107 sdd1 = unsddu
108 sdd2 = sddu
109 END IF
110
111 jdfil1 = 1
112 jffil1 = jfiltnv
113 jdfil2 = jfiltsv
114 jffil2 = jjm
115 END IF
116 END IF
117
118
119 DO hemisph = 1, 2
120
121 IF (hemisph==1) THEN
122 jdfil = jdfil1
123 jffil = jffil1
124 ELSE
125 jdfil = jdfil2
126 jffil = jffil2
127 END IF
128
129
130 DO l = 1, nbniv
131 DO j = jdfil, jffil
132
133
134 DO i = 1, iim
135 champ(i, j, l) = champ(i, j, l)*sdd1(i)
136 END DO
137
138
139 IF (hemisph==1) THEN
140
141 IF (ifiltre==-2) THEN
142 DO k = 1, iim
143 eignq(k) = 0.0
144 END DO
145 DO k = 1, iim
146 DO i = 1, iim
147 eignq(k) = eignq(k) + matrinvn(k, i, j)*champ(i, j, l)
148 END DO
149 END DO
150 ELSE IF (griscal) THEN
151 DO k = 1, iim
152 eignq(k) = 0.0
153 END DO
154 DO i = 1, iim
155 DO k = 1, iim
156 eignq(k) = eignq(k) + matriceun(k, i, j) &
157 * champ(i, j, l)
158 END DO
159 END DO
160 ELSE
161 DO k = 1, iim
162 eignq(k) = 0.0
163 END DO
164 DO i = 1, iim
165 DO k = 1, iim
166 eignq(k) = eignq(k) + matricevn(k, i, j) &
167 * champ(i, j, l)
168 END DO
169 END DO
170 END IF
171
172 ELSE
173
174 IF (ifiltre==-2) THEN
175 DO k = 1, iim
176 eignq(k) = 0.0
177 END DO
178 DO i = 1, iim
179 DO k = 1, iim
180 eignq(k) = eignq(k) + matrinvs(k, i, j-jfiltsu+1) &
181 *champ(i, j, l)
182 END DO
183 END DO
184 ELSE IF (griscal) THEN
185 DO k = 1, iim
186 eignq(k) = 0.0
187 END DO
188 DO i = 1, iim
189 DO k = 1, iim
190 eignq(k) = eignq(k) + matriceus(k, i, j-jfiltsu+1) &
191 *champ(i, j , l)
192 END DO
193 END DO
194 ELSE
195 DO k = 1, iim
196 eignq(k) = 0.0
197 END DO
198 DO i = 1, iim
199 DO k = 1, iim
200 eignq(k) = eignq(k) + matricevs(k, i, j-jfiltsv+1) &
201 *champ(i, j , l)
202 END DO
203 END DO
204 END IF
205
206 END IF
207
208 IF (ifiltre==2) THEN
209 DO i = 1, iim
210 champ(i, j, l) = (champ(i, j, l)+eignq(i))*sdd2(i)
211 end DO
212 ELSE
213 DO i = 1, iim
214 champ(i, j, l) = (champ(i, j, l)-eignq(i))*sdd2(i)
215 end DO
216 END IF
217
218 champ(iim + 1, j, l) = champ(1, j, l)
219
220 END DO
221
222 END DO
223
224 end DO
225
226 1111 FORMAT (//20X, 'ERREUR dans le dimensionnement du tableau &
227 & CHAMP a filtrer, sur la grille des scalaires'/)
228 2222 FORMAT (//20X, 'ERREUR dans le dimensionnement du tableau &
229 &CHAMP a filtrer, sur la grille de V ou de Z'/)
230
231 END SUBROUTINE filtreg
232
233 end module filtreg_m

  ViewVC Help
Powered by ViewVC 1.1.21