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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 24 - (show annotations)
Wed Mar 3 13:23:49 2010 UTC (14 years, 2 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 SUBROUTINE inigeom
2
3 ! Auteur : P. Le Van
4
5 ! ............ Version du 01/04/2001 ...................
6
7 ! Calcul des elongations cuij1,.cuij4 , cvij1,..cvij4 aux memes en-
8 ! endroits que les aires aireij1_2d,..aireij4_2d .
9
10 ! 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
15
16 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 IMPLICIT NONE
35
36 ! .... 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 itmax = 10
222 eps = .1E-7
223
224 xo1 = 0.
225 DO iter = 1, itmax
226 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 IF (xdm<=eps) EXIT
232 xo1 = x1
233 END DO
234
235 transx = xo1
236
237 itmay = 10
238 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 IF (ydm<=eps) EXIT
248 yo1 = y1
249 END DO
250
251 transy = yo1
252
253 CALL fxy(rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,rlatu2,yprimu2, &
254 rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025,xprimp025)
255
256 END IF
257
258 ELSE
259
260 ! .... Utilisation de fxyhyper , f(x,y) a derivee tangente hyperbol.
261 ! ..................................................................
262
263 WRITE (6,*) '*** Inigeom , Y = Latitude , der.tg. hyperbolique ***'
264
265 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
269
270 END IF
271
272 ! -------------------------------------------------------------------
273
274
275 rlatu(1) = asin(1.)
276 rlatu(jjp1) = -rlatu(1)
277
278
279 ! .... calcul aux poles ....
280
281 yprimu(1) = 0.
282 yprimu(jjp1) = 0.
283
284
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 END DO
366
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 END DO
397
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 END DO
445
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 END DO
464
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 END DO
480
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 END DO
492
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 END DO
503 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 END DO
509
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 END DO
530
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 * &
537 (cvij2(i,j) + cvij3(i,j) + cvij1(i,j+1) + cvij4(i,j+1))
538 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