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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21