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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 3 months ago) by guez
Original Path: trunk/libf/dyn3d/inigeom.f
File size: 23021 byte(s)
Initial import
1 guez 3 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