/[lmdze]/trunk/libf/dyn3d/inigeom.f90
ViewVC logotype

Annotation of /trunk/libf/dyn3d/inigeom.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 24 - (hide annotations)
Wed Mar 3 13:23:49 2010 UTC (14 years, 3 months ago) by guez
File size: 22147 byte(s)
Created directory "phylmd/Radlwsw". Split "radlwsw.f" in files
containing a single procedure.

Removed variable "itaufinp1" in "leapfrog".

1 guez 7 SUBROUTINE inigeom
2 guez 3
3 guez 7 ! Auteur : P. Le Van
4 guez 3
5 guez 7 ! ............ Version du 01/04/2001 ...................
6 guez 3
7 guez 7 ! Calcul des elongations cuij1,.cuij4 , cvij1,..cvij4 aux memes en-
8     ! endroits que les aires aireij1_2d,..aireij4_2d .
9 guez 3
10 guez 7 ! Choix entre f(y) a derivee sinusoid. ou a derivee tangente hyperbol.
11     ! Possibilité d'appeler une fonction "f(y)" à
12     ! dérivée tangente hyperbolique à la place de la fonction à dérivée
13     ! sinusoïdale.
14 guez 3
15    
16 guez 22 USE dimens_m, ONLY : iim, jjm
17     USE paramet_m, ONLY : iip1, jjp1
18     USE comconst, ONLY : g, omeg, pi, rad
19     USE comdissnew, ONLY : coefdis, nitergdiv, nitergrot, niterh
20     USE logic, ONLY : fxyhypb, ysinus
21     USE comgeom, ONLY : aireij1_2d, aireij2_2d, aireij3_2d, aireij4_2d, &
22     airesurg_2d, aireu_2d, airev_2d, aire_2d, airuscv2_2d, airvscu2_2d, &
23     aiuscv2gam_2d, aivscu2gam_2d, alpha1p2_2d, alpha1p4_2d, alpha1_2d, &
24     alpha2p3_2d, alpha2_2d, alpha3p4_2d, alpha3_2d, alpha4_2d, apoln, &
25     apols, constang_2d, cuscvugam_2d, cusurcvu_2d, cuvscvgam1_2d, &
26     cuvscvgam2_2d, cuvsurcv_2d, cu_2d, cvscuvgam_2d, cvsurcuv_2d, &
27     cvuscugam1_2d, cvuscugam2_2d, cvusurcu_2d, cv_2d, fext_2d, rlatu, &
28     rlatv, rlonu, rlonv, unsairez_2d, unsaire_2d, unsairz_gam_2d, &
29     unsair_gam1_2d, unsair_gam2_2d, unsapolnga1, unsapolnga2, unsapolsga1, &
30     unsapolsga2, unscu2_2d, unscv2_2d, xprimu, xprimv
31     USE serre, ONLY : alphax, alphay, clat, clon, dzoomx, dzoomy, grossismx, &
32     grossismy, pxo, pyo, taux, tauy, transx, transy
33    
34 guez 7 IMPLICIT NONE
35 guez 3
36 guez 7 ! .... Variables locales ....
37    
38     INTEGER i, j, itmax, itmay, iter
39     REAL cvu(iip1,jjp1), cuv(iip1,jjm)
40     REAL ai14, ai23, airez, rlatp, rlatm, xprm, xprp, un4rad2, yprp, yprm
41     REAL eps, x1, xo1, f, df, xdm, y1, yo1, ydm
42     REAL coslatm, coslatp, radclatm, radclatp
43     REAL cuij1(iip1,jjp1), cuij2(iip1,jjp1), cuij3(iip1,jjp1), &
44     cuij4(iip1,jjp1)
45     REAL cvij1(iip1,jjp1), cvij2(iip1,jjp1), cvij3(iip1,jjp1), &
46     cvij4(iip1,jjp1)
47     REAL rlonvv(iip1), rlatuu(jjp1)
48     REAL rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm), yprimv(jjm), &
49     yprimu(jjp1)
50     REAL gamdi_gdiv, gamdi_grot, gamdi_h
51    
52     REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
53     SAVE rlatu1, yprimu1, rlatu2, yprimu2, yprimv, yprimu
54     SAVE rlonm025, xprimm025, rlonp025, xprimp025
55    
56     ! calcul des coeff. ( cu_2d, cv_2d , 1./cu_2d**2, 1./cv_2d**2 )
57     ! - -
58     ! ------------------------------------------------------------------
59    
60     ! les coef. ( cu_2d, cv_2d ) permettent de passer des vitesses naturelles
61     ! aux vitesses covariantes et contravariantes , ou vice-versa ...
62    
63    
64     ! on a : u (covariant) = cu_2d * u (naturel) , u(contrav)= u(nat)/cu_2d
65     ! v (covariant) = cv_2d * v (naturel) , v(contrav)= v(nat)/cv_2d
66    
67     ! on en tire : u(covariant) = cu_2d * cu_2d * u(contravariant)
68     ! v(covariant) = cv_2d * cv_2d * v(contravariant)
69    
70    
71     ! on a l'application ( x(X) , y(Y) ) avec - im/2 +1 < X < im/2
72     ! = =
73     ! et - jm/2 < Y < jm/2
74     ! = =
75    
76     ! ...................................................
77     ! ...................................................
78     ! . x est la longitude du point en radians .
79     ! . y est la latitude du point en radians .
80     ! . .
81     ! . on a : cu_2d(i,j) = rad * COS(y) * dx/dX .
82     ! . cv( j ) = rad * dy/dY .
83     ! . aire_2d(i,j) = cu_2d(i,j) * cv(j) .
84     ! . .
85     ! . y, dx/dX, dy/dY calcules aux points concernes .
86     ! . .
87     ! ...................................................
88     ! ...................................................
89    
90    
91    
92     ! ,
93     ! cv , bien que dependant de j uniquement,sera ici indice aussi en i
94     ! pour un adressage plus facile en ij .
95    
96    
97    
98     ! ************** aux points u et v , *****************
99     ! xprimu et xprimv sont respectivement les valeurs de dx/dX
100     ! yprimu et yprimv . . . . . . . . . . . dy/dY
101     ! rlatu et rlatv . . . . . . . . . . .la latitude
102     ! cvu et cv_2d . . . . . . . . . . . cv_2d
103    
104     ! ************** aux points u, v, scalaires, et z ****************
105     ! cu_2d, cuv, cuscal, cuz sont respectiv. les valeurs de cu_2d
106    
107    
108    
109     ! Exemple de distribution de variables sur la grille dans le
110     ! domaine de travail ( X,Y ) .
111     ! ................................................................
112     ! DX=DY= 1
113    
114    
115     ! + represente un point scalaire ( p.exp la pression )
116     ! > represente la composante zonale du vent
117     ! V represente la composante meridienne du vent
118     ! o represente la vorticite
119    
120     ! ---- , car aux poles , les comp.zonales covariantes sont nulles
121    
122    
123    
124     ! i ->
125    
126     ! 1 2 3 4 5 6 7 8
127     ! j
128     ! v 1 + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --
129    
130     ! V o V o V o V o V o V o V o V o
131    
132     ! 2 + > + > + > + > + > + > + > + >
133    
134     ! V o V o V o V o V o V o V o V o
135    
136     ! 3 + > + > + > + > + > + > + > + >
137    
138     ! V o V o V o V o V o V o V o V o
139    
140     ! 4 + > + > + > + > + > + > + > + >
141    
142     ! V o V o V o V o V o V o V o V o
143    
144     ! 5 + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --
145    
146    
147     ! Ci-dessus, on voit que le nombre de pts.en longitude est egal
148     ! a IM = 8
149     ! De meme , le nombre d'intervalles entre les 2 poles est egal
150     ! a JM = 4
151    
152     ! Les points scalaires ( + ) correspondent donc a des valeurs
153     ! entieres de i ( 1 a IM ) et de j ( 1 a JM +1 ) .
154    
155     ! Les vents U ( > ) correspondent a des valeurs semi-
156     ! entieres de i ( 1+ 0.5 a IM+ 0.5) et entieres de j ( 1 a JM+1)
157    
158     ! Les vents V ( V ) correspondent a des valeurs entieres
159     ! de i ( 1 a IM ) et semi-entieres de j ( 1 +0.5 a JM +0.5)
160    
161    
162    
163     PRINT *, 'Call sequence information: inigeom'
164     PRINT 3
165     3 FORMAT ('Calcul des elongations cu_2d et cv_2d comme sommes ', &
166     'des 4 '/5X, &
167     ' elong. cuij1, .. 4 , cvij1,.. 4 qui les entourent , aux '/5X, &
168     ' memes endroits que les aires aireij1_2d,...j4 . '/)
169    
170    
171     IF (nitergdiv/=2) THEN
172     gamdi_gdiv = coefdis/(float(nitergdiv)-2.)
173     ELSE
174     gamdi_gdiv = 0.
175     END IF
176     IF (nitergrot/=2) THEN
177     gamdi_grot = coefdis/(float(nitergrot)-2.)
178     ELSE
179     gamdi_grot = 0.
180     END IF
181     IF (niterh/=2) THEN
182     gamdi_h = coefdis/(float(niterh)-2.)
183     ELSE
184     gamdi_h = 0.
185     END IF
186    
187     WRITE (6,*) ' gamdi_gd ', gamdi_gdiv, gamdi_grot, gamdi_h, coefdis, &
188     nitergdiv, nitergrot, niterh
189    
190     pi = 2.*asin(1.)
191    
192     WRITE (6,990)
193    
194     ! ----------------------------------------------------------------
195    
196     IF ( .NOT. fxyhypb) THEN
197    
198    
199     IF (ysinus) THEN
200    
201     WRITE (6,*) ' *** Inigeom , Y = Sinus ( Latitude ) *** '
202    
203     ! .... utilisation de f(x,y ) avec y = sinus de la latitude ...
204    
205     CALL fxysinus(rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,rlatu2, &
206     yprimu2,rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025, &
207     xprimp025)
208    
209     ELSE
210    
211     WRITE (6,*) '*** Inigeom , Y = Latitude , der. sinusoid . ***'
212    
213     ! utilisation de f(x,y) a tangente sinusoidale , y etant la latit. ..
214    
215    
216     pxo = clon*pi/180.
217     pyo = 2.*clat*pi/180.
218    
219     ! .... determination de transx ( pour le zoom ) par Newton-Raphson .
220    
221 guez 3 itmax = 10
222 guez 7 eps = .1E-7
223    
224 guez 3 xo1 = 0.
225 guez 22 DO iter = 1, itmax
226 guez 7 x1 = xo1
227     f = x1 + alphax*sin(x1-pxo)
228     df = 1. + alphax*cos(x1-pxo)
229     x1 = x1 - f/df
230     xdm = abs(x1-xo1)
231 guez 22 IF (xdm<=eps) EXIT
232 guez 7 xo1 = x1
233 guez 22 END DO
234 guez 7
235 guez 3 transx = xo1
236    
237     itmay = 10
238 guez 7 eps = .1E-7
239    
240     yo1 = 0.
241     DO iter = 1, itmay
242     y1 = yo1
243     f = y1 + alphay*sin(y1-pyo)
244     df = 1. + alphay*cos(y1-pyo)
245     y1 = y1 - f/df
246     ydm = abs(y1-yo1)
247 guez 22 IF (ydm<=eps) EXIT
248 guez 7 yo1 = y1
249 guez 22 END DO
250 guez 7
251 guez 3 transy = yo1
252    
253 guez 7 CALL fxy(rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,rlatu2,yprimu2, &
254     rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025,xprimp025)
255 guez 3
256 guez 7 END IF
257 guez 3
258 guez 7 ELSE
259 guez 3
260 guez 7 ! .... Utilisation de fxyhyper , f(x,y) a derivee tangente hyperbol.
261     ! ..................................................................
262 guez 3
263 guez 7 WRITE (6,*) '*** Inigeom , Y = Latitude , der.tg. hyperbolique ***'
264 guez 3
265 guez 7 CALL fxyhyper(clat,grossismy,dzoomy,tauy,clon,grossismx,dzoomx,taux, &
266     rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,rlatu2,yprimu2,rlonu, &
267     xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025,xprimp025)
268 guez 3
269    
270 guez 7 END IF
271 guez 3
272 guez 7 ! -------------------------------------------------------------------
273 guez 3
274    
275 guez 7 rlatu(1) = asin(1.)
276     rlatu(jjp1) = -rlatu(1)
277 guez 3
278    
279 guez 7 ! .... calcul aux poles ....
280 guez 3
281 guez 7 yprimu(1) = 0.
282     yprimu(jjp1) = 0.
283 guez 3
284 guez 7
285     un4rad2 = 0.25*rad*rad
286    
287     ! -------------------------------------------------------------
288     ! -------------------------------------------------------------
289     ! -
290     ! calcul des aires ( aire_2d,aireu_2d,airev_2d, 1./aire_2d, 1./airez )
291     ! - et de fext_2d , force de coriolis extensive .
292     ! -
293     ! -------------------------------------------------------------
294     ! -------------------------------------------------------------
295    
296    
297    
298     ! A 1 point scalaire P (i,j) de la grille, reguliere en (X,Y) , sont
299     ! affectees 4 aires entourant P , calculees respectivement aux points
300     ! ( i + 1/4, j - 1/4 ) : aireij1_2d (i,j)
301     ! ( i + 1/4, j + 1/4 ) : aireij2_2d (i,j)
302     ! ( i - 1/4, j + 1/4 ) : aireij3_2d (i,j)
303     ! ( i - 1/4, j - 1/4 ) : aireij4_2d (i,j)
304    
305     ! ,
306     ! Les cotes de chacun de ces 4 carres etant egaux a 1/2 suivant (X,Y).
307     ! Chaque aire centree en 1 point scalaire P(i,j) est egale a la somme
308     ! des 4 aires aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d qui sont affectees au
309     ! point (i,j) .
310     ! On definit en outre les coefficients alpha comme etant egaux a
311     ! (aireij / aire_2d), c.a.d par exp. alpha1_2d(i,j)=aireij1_2d(i,j)/aire_2d(i,j)
312    
313     ! De meme, toute aire centree en 1 point U est egale a la somme des
314     ! 4 aires aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d entourant le point U.
315     ! Idem pour airev_2d, airez .
316    
317     ! On a ,pour chaque maille : dX = dY = 1
318    
319    
320     ! . V
321    
322     ! aireij4_2d . . aireij1_2d
323    
324     ! U . . P . U
325    
326     ! aireij3_2d . . aireij2_2d
327    
328     ! . V
329    
330    
331    
332    
333    
334     ! ....................................................................
335    
336     ! Calcul des 4 aires elementaires aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d
337     ! qui entourent chaque aire_2d(i,j) , ainsi que les 4 elongations elementaires
338     ! cuij et les 4 elongat. cvij qui sont calculees aux memes
339     ! endroits que les aireij .
340    
341     ! ....................................................................
342    
343     ! ....... do 35 : boucle sur les jjm + 1 latitudes .....
344    
345    
346     DO j = 1, jjp1
347    
348     IF (j==1) THEN
349    
350     yprm = yprimu1(j)
351     rlatm = rlatu1(j)
352    
353     coslatm = cos(rlatm)
354     radclatm = 0.5*rad*coslatm
355    
356     DO i = 1, iim
357     xprp = xprimp025(i)
358     xprm = xprimm025(i)
359     aireij2_2d(i,1) = un4rad2*coslatm*xprp*yprm
360     aireij3_2d(i,1) = un4rad2*coslatm*xprm*yprm
361     cuij2(i,1) = radclatm*xprp
362     cuij3(i,1) = radclatm*xprm
363     cvij2(i,1) = 0.5*rad*yprm
364     cvij3(i,1) = cvij2(i,1)
365 guez 22 END DO
366 guez 7
367     DO i = 1, iim
368     aireij1_2d(i,1) = 0.
369     aireij4_2d(i,1) = 0.
370     cuij1(i,1) = 0.
371     cuij4(i,1) = 0.
372     cvij1(i,1) = 0.
373     cvij4(i,1) = 0.
374     END DO
375    
376     END IF
377    
378     IF (j==jjp1) THEN
379     yprp = yprimu2(j-1)
380     rlatp = rlatu2(j-1)
381     !cc yprp = fyprim( FLOAT(j) - 0.25 )
382     !cc rlatp = fy ( FLOAT(j) - 0.25 )
383    
384     coslatp = cos(rlatp)
385     radclatp = 0.5*rad*coslatp
386    
387     DO i = 1, iim
388     xprp = xprimp025(i)
389     xprm = xprimm025(i)
390     aireij1_2d(i,jjp1) = un4rad2*coslatp*xprp*yprp
391     aireij4_2d(i,jjp1) = un4rad2*coslatp*xprm*yprp
392     cuij1(i,jjp1) = radclatp*xprp
393     cuij4(i,jjp1) = radclatp*xprm
394     cvij1(i,jjp1) = 0.5*rad*yprp
395     cvij4(i,jjp1) = cvij1(i,jjp1)
396 guez 22 END DO
397 guez 7
398     DO i = 1, iim
399     aireij2_2d(i,jjp1) = 0.
400     aireij3_2d(i,jjp1) = 0.
401     cvij2(i,jjp1) = 0.
402     cvij3(i,jjp1) = 0.
403     cuij2(i,jjp1) = 0.
404     cuij3(i,jjp1) = 0.
405     END DO
406    
407     END IF
408    
409    
410     IF (j>1 .AND. j<jjp1) THEN
411    
412     rlatp = rlatu2(j-1)
413     yprp = yprimu2(j-1)
414     rlatm = rlatu1(j)
415     yprm = yprimu1(j)
416     !c rlatp = fy ( FLOAT(j) - 0.25 )
417     !c yprp = fyprim( FLOAT(j) - 0.25 )
418     !c rlatm = fy ( FLOAT(j) + 0.25 )
419     !c yprm = fyprim( FLOAT(j) + 0.25 )
420    
421     coslatm = cos(rlatm)
422     coslatp = cos(rlatp)
423     radclatp = 0.5*rad*coslatp
424     radclatm = 0.5*rad*coslatm
425    
426     DO i = 1, iim
427     xprp = xprimp025(i)
428     xprm = xprimm025(i)
429    
430     ai14 = un4rad2*coslatp*yprp
431     ai23 = un4rad2*coslatm*yprm
432     aireij1_2d(i,j) = ai14*xprp
433     aireij2_2d(i,j) = ai23*xprp
434     aireij3_2d(i,j) = ai23*xprm
435     aireij4_2d(i,j) = ai14*xprm
436     cuij1(i,j) = radclatp*xprp
437     cuij2(i,j) = radclatm*xprp
438     cuij3(i,j) = radclatm*xprm
439     cuij4(i,j) = radclatp*xprm
440     cvij1(i,j) = 0.5*rad*yprp
441     cvij2(i,j) = 0.5*rad*yprm
442     cvij3(i,j) = cvij2(i,j)
443     cvij4(i,j) = cvij1(i,j)
444 guez 22 END DO
445 guez 7
446     END IF
447    
448     ! ........ periodicite ............
449    
450     cvij1(iip1,j) = cvij1(1,j)
451     cvij2(iip1,j) = cvij2(1,j)
452     cvij3(iip1,j) = cvij3(1,j)
453     cvij4(iip1,j) = cvij4(1,j)
454     cuij1(iip1,j) = cuij1(1,j)
455     cuij2(iip1,j) = cuij2(1,j)
456     cuij3(iip1,j) = cuij3(1,j)
457     cuij4(iip1,j) = cuij4(1,j)
458     aireij1_2d(iip1,j) = aireij1_2d(1,j)
459     aireij2_2d(iip1,j) = aireij2_2d(1,j)
460     aireij3_2d(iip1,j) = aireij3_2d(1,j)
461     aireij4_2d(iip1,j) = aireij4_2d(1,j)
462    
463 guez 22 END DO
464 guez 7
465     ! ..............................................................
466    
467     DO j = 1, jjp1
468     DO i = 1, iim
469     aire_2d(i,j) = aireij1_2d(i,j) + aireij2_2d(i,j) + aireij3_2d(i,j) + &
470     aireij4_2d(i,j)
471     alpha1_2d(i,j) = aireij1_2d(i,j)/aire_2d(i,j)
472     alpha2_2d(i,j) = aireij2_2d(i,j)/aire_2d(i,j)
473     alpha3_2d(i,j) = aireij3_2d(i,j)/aire_2d(i,j)
474     alpha4_2d(i,j) = aireij4_2d(i,j)/aire_2d(i,j)
475     alpha1p2_2d(i,j) = alpha1_2d(i,j) + alpha2_2d(i,j)
476     alpha1p4_2d(i,j) = alpha1_2d(i,j) + alpha4_2d(i,j)
477     alpha2p3_2d(i,j) = alpha2_2d(i,j) + alpha3_2d(i,j)
478     alpha3p4_2d(i,j) = alpha3_2d(i,j) + alpha4_2d(i,j)
479 guez 22 END DO
480 guez 7
481    
482     aire_2d(iip1,j) = aire_2d(1,j)
483     alpha1_2d(iip1,j) = alpha1_2d(1,j)
484     alpha2_2d(iip1,j) = alpha2_2d(1,j)
485     alpha3_2d(iip1,j) = alpha3_2d(1,j)
486     alpha4_2d(iip1,j) = alpha4_2d(1,j)
487     alpha1p2_2d(iip1,j) = alpha1p2_2d(1,j)
488     alpha1p4_2d(iip1,j) = alpha1p4_2d(1,j)
489     alpha2p3_2d(iip1,j) = alpha2p3_2d(1,j)
490     alpha3p4_2d(iip1,j) = alpha3p4_2d(1,j)
491 guez 22 END DO
492 guez 7
493    
494     DO j = 1, jjp1
495     DO i = 1, iim
496     aireu_2d(i,j) = aireij1_2d(i,j) + aireij2_2d(i,j) + &
497     aireij4_2d(i+1,j) + aireij3_2d(i+1,j)
498     unsaire_2d(i,j) = 1./aire_2d(i,j)
499     unsair_gam1_2d(i,j) = unsaire_2d(i,j)**(-gamdi_gdiv)
500     unsair_gam2_2d(i,j) = unsaire_2d(i,j)**(-gamdi_h)
501     airesurg_2d(i,j) = aire_2d(i,j)/g
502 guez 22 END DO
503 guez 7 aireu_2d(iip1,j) = aireu_2d(1,j)
504     unsaire_2d(iip1,j) = unsaire_2d(1,j)
505     unsair_gam1_2d(iip1,j) = unsair_gam1_2d(1,j)
506     unsair_gam2_2d(iip1,j) = unsair_gam2_2d(1,j)
507     airesurg_2d(iip1,j) = airesurg_2d(1,j)
508 guez 22 END DO
509 guez 7
510    
511     DO j = 1, jjm
512    
513     DO i = 1, iim
514     airev_2d(i,j) = aireij2_2d(i,j) + aireij3_2d(i,j) + &
515     aireij1_2d(i,j+1) + aireij4_2d(i,j+1)
516     END DO
517     DO i = 1, iim
518     airez = aireij2_2d(i,j) + aireij1_2d(i,j+1) + aireij3_2d(i+1,j) + &
519     aireij4_2d(i+1,j+1)
520     unsairez_2d(i,j) = 1./airez
521     unsairz_gam_2d(i,j) = unsairez_2d(i,j)**(-gamdi_grot)
522     fext_2d(i,j) = airez*sin(rlatv(j))*2.*omeg
523     END DO
524     airev_2d(iip1,j) = airev_2d(1,j)
525     unsairez_2d(iip1,j) = unsairez_2d(1,j)
526     fext_2d(iip1,j) = fext_2d(1,j)
527     unsairz_gam_2d(iip1,j) = unsairz_gam_2d(1,j)
528    
529 guez 22 END DO
530 guez 7
531    
532     ! ..... Calcul des elongations cu_2d,cv_2d, cvu .........
533    
534     DO j = 1, jjm
535     DO i = 1, iim
536 guez 24 cv_2d(i,j) = 0.5 * &
537     (cvij2(i,j) + cvij3(i,j) + cvij1(i,j+1) + cvij4(i,j+1))
538 guez 7 cvu(i,j) = 0.5*(cvij1(i,j)+cvij4(i,j)+cvij2(i,j)+cvij3(i,j))
539     cuv(i,j) = 0.5*(cuij2(i,j)+cuij3(i,j)+cuij1(i,j+1)+cuij4(i,j+1))
540     unscv2_2d(i,j) = 1./(cv_2d(i,j)*cv_2d(i,j))
541     END DO
542     DO i = 1, iim
543     cuvsurcv_2d(i,j) = airev_2d(i,j)*unscv2_2d(i,j)
544     cvsurcuv_2d(i,j) = 1./cuvsurcv_2d(i,j)
545     cuvscvgam1_2d(i,j) = cuvsurcv_2d(i,j)**(-gamdi_gdiv)
546     cuvscvgam2_2d(i,j) = cuvsurcv_2d(i,j)**(-gamdi_h)
547     cvscuvgam_2d(i,j) = cvsurcuv_2d(i,j)**(-gamdi_grot)
548     END DO
549     cv_2d(iip1,j) = cv_2d(1,j)
550     cvu(iip1,j) = cvu(1,j)
551     unscv2_2d(iip1,j) = unscv2_2d(1,j)
552     cuv(iip1,j) = cuv(1,j)
553     cuvsurcv_2d(iip1,j) = cuvsurcv_2d(1,j)
554     cvsurcuv_2d(iip1,j) = cvsurcuv_2d(1,j)
555     cuvscvgam1_2d(iip1,j) = cuvscvgam1_2d(1,j)
556     cuvscvgam2_2d(iip1,j) = cuvscvgam2_2d(1,j)
557     cvscuvgam_2d(iip1,j) = cvscuvgam_2d(1,j)
558     END DO
559    
560     DO j = 2, jjm
561     DO i = 1, iim
562     cu_2d(i,j) = 0.5*(cuij1(i,j)+cuij4(i+1,j)+cuij2(i,j)+cuij3(i+1,j))
563     unscu2_2d(i,j) = 1./(cu_2d(i,j)*cu_2d(i,j))
564     cvusurcu_2d(i,j) = aireu_2d(i,j)*unscu2_2d(i,j)
565     cusurcvu_2d(i,j) = 1./cvusurcu_2d(i,j)
566     cvuscugam1_2d(i,j) = cvusurcu_2d(i,j)**(-gamdi_gdiv)
567     cvuscugam2_2d(i,j) = cvusurcu_2d(i,j)**(-gamdi_h)
568     cuscvugam_2d(i,j) = cusurcvu_2d(i,j)**(-gamdi_grot)
569     END DO
570     cu_2d(iip1,j) = cu_2d(1,j)
571     unscu2_2d(iip1,j) = unscu2_2d(1,j)
572     cvusurcu_2d(iip1,j) = cvusurcu_2d(1,j)
573     cusurcvu_2d(iip1,j) = cusurcvu_2d(1,j)
574     cvuscugam1_2d(iip1,j) = cvuscugam1_2d(1,j)
575     cvuscugam2_2d(iip1,j) = cvuscugam2_2d(1,j)
576     cuscvugam_2d(iip1,j) = cuscvugam_2d(1,j)
577     END DO
578    
579    
580     ! .... calcul aux poles ....
581    
582     DO i = 1, iip1
583     cu_2d(i,1) = 0.
584     unscu2_2d(i,1) = 0.
585     cvu(i,1) = 0.
586    
587     cu_2d(i,jjp1) = 0.
588     unscu2_2d(i,jjp1) = 0.
589     cvu(i,jjp1) = 0.
590     END DO
591    
592     ! ..............................................................
593    
594     DO j = 1, jjm
595     DO i = 1, iim
596     airvscu2_2d(i,j) = airev_2d(i,j)/(cuv(i,j)*cuv(i,j))
597     aivscu2gam_2d(i,j) = airvscu2_2d(i,j)**(-gamdi_grot)
598     END DO
599     airvscu2_2d(iip1,j) = airvscu2_2d(1,j)
600     aivscu2gam_2d(iip1,j) = aivscu2gam_2d(1,j)
601     END DO
602    
603     DO j = 2, jjm
604     DO i = 1, iim
605     airuscv2_2d(i,j) = aireu_2d(i,j)/(cvu(i,j)*cvu(i,j))
606     aiuscv2gam_2d(i,j) = airuscv2_2d(i,j)**(-gamdi_grot)
607     END DO
608     airuscv2_2d(iip1,j) = airuscv2_2d(1,j)
609     aiuscv2gam_2d(iip1,j) = aiuscv2gam_2d(1,j)
610     END DO
611    
612    
613     ! calcul des aires aux poles :
614     ! -----------------------------
615    
616     apoln = sum(aire_2d(:iim, 1))
617     apols = sum(aire_2d(:iim, jjp1))
618     unsapolnga1 = 1./(apoln**(-gamdi_gdiv))
619     unsapolsga1 = 1./(apols**(-gamdi_gdiv))
620     unsapolnga2 = 1./(apoln**(-gamdi_h))
621     unsapolsga2 = 1./(apols**(-gamdi_h))
622    
623     !----------------------------------------------------------------
624     ! gtitre='Coriolis version ancienne'
625     ! gfichier='fext1'
626     ! CALL writestd(fext_2d,iip1*jjm)
627    
628     ! changement F. Hourdin calcul conservatif pour fext_2d
629     ! constang_2d contient le produit a * cos ( latitude ) * omega
630    
631     DO i = 1, iim
632     constang_2d(i,1) = 0.
633     END DO
634     DO j = 1, jjm - 1
635     DO i = 1, iim
636     constang_2d(i,j+1) = rad*omeg*cu_2d(i,j+1)*cos(rlatu(j+1))
637     END DO
638     END DO
639     DO i = 1, iim
640     constang_2d(i,jjp1) = 0.
641     END DO
642    
643     ! periodicite en longitude
644    
645     DO j = 1, jjm
646     fext_2d(iip1,j) = fext_2d(1,j)
647     END DO
648     DO j = 1, jjp1
649     constang_2d(iip1,j) = constang_2d(1,j)
650     END DO
651    
652     ! fin du changement
653    
654    
655     !----------------------------------------------------------------
656    
657     WRITE (6,*) ' *** Coordonnees de la grille *** '
658     WRITE (6,995)
659    
660     WRITE (6,*) ' LONGITUDES aux pts. V ( degres ) '
661     WRITE (6,995)
662     DO i = 1, iip1
663     rlonvv(i) = rlonv(i)*180./pi
664     END DO
665     WRITE (6,400) rlonvv
666    
667     WRITE (6,995)
668     WRITE (6,*) ' LATITUDES aux pts. V ( degres ) '
669     WRITE (6,995)
670     DO i = 1, jjm
671     rlatuu(i) = rlatv(i)*180./pi
672     END DO
673     WRITE (6,400) (rlatuu(i),i=1,jjm)
674    
675     DO i = 1, iip1
676     rlonvv(i) = rlonu(i)*180./pi
677     END DO
678     WRITE (6,995)
679     WRITE (6,*) ' LONGITUDES aux pts. U ( degres ) '
680     WRITE (6,995)
681     WRITE (6,400) rlonvv
682     WRITE (6,995)
683    
684     WRITE (6,*) ' LATITUDES aux pts. U ( degres ) '
685     WRITE (6,995)
686     DO i = 1, jjp1
687     rlatuu(i) = rlatu(i)*180./pi
688     END DO
689     WRITE (6,400) (rlatuu(i),i=1,jjp1)
690     WRITE (6,995)
691    
692     400 FORMAT (1X,8F8.2)
693     990 FORMAT (//)
694     995 FORMAT (/)
695    
696     END SUBROUTINE inigeom

  ViewVC Help
Powered by ViewVC 1.1.21