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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 22 - (hide annotations)
Fri Jul 31 15:18:47 2009 UTC (14 years, 10 months ago) by guez
File size: 22124 byte(s)
Superficial modifications
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     cv_2d(i,j) = 0.5*(cvij2(i,j)+cvij3(i,j)+cvij1(i,j+1)+cvij4(i,j+1))
537     cvu(i,j) = 0.5*(cvij1(i,j)+cvij4(i,j)+cvij2(i,j)+cvij3(i,j))
538     cuv(i,j) = 0.5*(cuij2(i,j)+cuij3(i,j)+cuij1(i,j+1)+cuij4(i,j+1))
539     unscv2_2d(i,j) = 1./(cv_2d(i,j)*cv_2d(i,j))
540     END DO
541     DO i = 1, iim
542     cuvsurcv_2d(i,j) = airev_2d(i,j)*unscv2_2d(i,j)
543     cvsurcuv_2d(i,j) = 1./cuvsurcv_2d(i,j)
544     cuvscvgam1_2d(i,j) = cuvsurcv_2d(i,j)**(-gamdi_gdiv)
545     cuvscvgam2_2d(i,j) = cuvsurcv_2d(i,j)**(-gamdi_h)
546     cvscuvgam_2d(i,j) = cvsurcuv_2d(i,j)**(-gamdi_grot)
547     END DO
548     cv_2d(iip1,j) = cv_2d(1,j)
549     cvu(iip1,j) = cvu(1,j)
550     unscv2_2d(iip1,j) = unscv2_2d(1,j)
551     cuv(iip1,j) = cuv(1,j)
552     cuvsurcv_2d(iip1,j) = cuvsurcv_2d(1,j)
553     cvsurcuv_2d(iip1,j) = cvsurcuv_2d(1,j)
554     cuvscvgam1_2d(iip1,j) = cuvscvgam1_2d(1,j)
555     cuvscvgam2_2d(iip1,j) = cuvscvgam2_2d(1,j)
556     cvscuvgam_2d(iip1,j) = cvscuvgam_2d(1,j)
557     END DO
558    
559     DO j = 2, jjm
560     DO i = 1, iim
561     cu_2d(i,j) = 0.5*(cuij1(i,j)+cuij4(i+1,j)+cuij2(i,j)+cuij3(i+1,j))
562     unscu2_2d(i,j) = 1./(cu_2d(i,j)*cu_2d(i,j))
563     cvusurcu_2d(i,j) = aireu_2d(i,j)*unscu2_2d(i,j)
564     cusurcvu_2d(i,j) = 1./cvusurcu_2d(i,j)
565     cvuscugam1_2d(i,j) = cvusurcu_2d(i,j)**(-gamdi_gdiv)
566     cvuscugam2_2d(i,j) = cvusurcu_2d(i,j)**(-gamdi_h)
567     cuscvugam_2d(i,j) = cusurcvu_2d(i,j)**(-gamdi_grot)
568     END DO
569     cu_2d(iip1,j) = cu_2d(1,j)
570     unscu2_2d(iip1,j) = unscu2_2d(1,j)
571     cvusurcu_2d(iip1,j) = cvusurcu_2d(1,j)
572     cusurcvu_2d(iip1,j) = cusurcvu_2d(1,j)
573     cvuscugam1_2d(iip1,j) = cvuscugam1_2d(1,j)
574     cvuscugam2_2d(iip1,j) = cvuscugam2_2d(1,j)
575     cuscvugam_2d(iip1,j) = cuscvugam_2d(1,j)
576     END DO
577    
578    
579     ! .... calcul aux poles ....
580    
581     DO i = 1, iip1
582     cu_2d(i,1) = 0.
583     unscu2_2d(i,1) = 0.
584     cvu(i,1) = 0.
585    
586     cu_2d(i,jjp1) = 0.
587     unscu2_2d(i,jjp1) = 0.
588     cvu(i,jjp1) = 0.
589     END DO
590    
591     ! ..............................................................
592    
593     DO j = 1, jjm
594     DO i = 1, iim
595     airvscu2_2d(i,j) = airev_2d(i,j)/(cuv(i,j)*cuv(i,j))
596     aivscu2gam_2d(i,j) = airvscu2_2d(i,j)**(-gamdi_grot)
597     END DO
598     airvscu2_2d(iip1,j) = airvscu2_2d(1,j)
599     aivscu2gam_2d(iip1,j) = aivscu2gam_2d(1,j)
600     END DO
601    
602     DO j = 2, jjm
603     DO i = 1, iim
604     airuscv2_2d(i,j) = aireu_2d(i,j)/(cvu(i,j)*cvu(i,j))
605     aiuscv2gam_2d(i,j) = airuscv2_2d(i,j)**(-gamdi_grot)
606     END DO
607     airuscv2_2d(iip1,j) = airuscv2_2d(1,j)
608     aiuscv2gam_2d(iip1,j) = aiuscv2gam_2d(1,j)
609     END DO
610    
611    
612     ! calcul des aires aux poles :
613     ! -----------------------------
614    
615     apoln = sum(aire_2d(:iim, 1))
616     apols = sum(aire_2d(:iim, jjp1))
617     unsapolnga1 = 1./(apoln**(-gamdi_gdiv))
618     unsapolsga1 = 1./(apols**(-gamdi_gdiv))
619     unsapolnga2 = 1./(apoln**(-gamdi_h))
620     unsapolsga2 = 1./(apols**(-gamdi_h))
621    
622     !----------------------------------------------------------------
623     ! gtitre='Coriolis version ancienne'
624     ! gfichier='fext1'
625     ! CALL writestd(fext_2d,iip1*jjm)
626    
627     ! changement F. Hourdin calcul conservatif pour fext_2d
628     ! constang_2d contient le produit a * cos ( latitude ) * omega
629    
630     DO i = 1, iim
631     constang_2d(i,1) = 0.
632     END DO
633     DO j = 1, jjm - 1
634     DO i = 1, iim
635     constang_2d(i,j+1) = rad*omeg*cu_2d(i,j+1)*cos(rlatu(j+1))
636     END DO
637     END DO
638     DO i = 1, iim
639     constang_2d(i,jjp1) = 0.
640     END DO
641    
642     ! periodicite en longitude
643    
644     DO j = 1, jjm
645     fext_2d(iip1,j) = fext_2d(1,j)
646     END DO
647     DO j = 1, jjp1
648     constang_2d(iip1,j) = constang_2d(1,j)
649     END DO
650    
651     ! fin du changement
652    
653    
654     !----------------------------------------------------------------
655    
656     WRITE (6,*) ' *** Coordonnees de la grille *** '
657     WRITE (6,995)
658    
659     WRITE (6,*) ' LONGITUDES aux pts. V ( degres ) '
660     WRITE (6,995)
661     DO i = 1, iip1
662     rlonvv(i) = rlonv(i)*180./pi
663     END DO
664     WRITE (6,400) rlonvv
665    
666     WRITE (6,995)
667     WRITE (6,*) ' LATITUDES aux pts. V ( degres ) '
668     WRITE (6,995)
669     DO i = 1, jjm
670     rlatuu(i) = rlatv(i)*180./pi
671     END DO
672     WRITE (6,400) (rlatuu(i),i=1,jjm)
673    
674     DO i = 1, iip1
675     rlonvv(i) = rlonu(i)*180./pi
676     END DO
677     WRITE (6,995)
678     WRITE (6,*) ' LONGITUDES aux pts. U ( degres ) '
679     WRITE (6,995)
680     WRITE (6,400) rlonvv
681     WRITE (6,995)
682    
683     WRITE (6,*) ' LATITUDES aux pts. U ( degres ) '
684     WRITE (6,995)
685     DO i = 1, jjp1
686     rlatuu(i) = rlatu(i)*180./pi
687     END DO
688     WRITE (6,400) (rlatuu(i),i=1,jjp1)
689     WRITE (6,995)
690    
691     400 FORMAT (1X,8F8.2)
692     990 FORMAT (//)
693     995 FORMAT (/)
694    
695     END SUBROUTINE inigeom

  ViewVC Help
Powered by ViewVC 1.1.21