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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 22 - (show annotations)
Fri Jul 31 15:18:47 2009 UTC (14 years, 9 months ago) by guez
File size: 22124 byte(s)
Superficial modifications
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*(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