source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/dyn3d_common/inigeom.F @ 298

Last change on this file since 298 was 298, checked in by milmd, 10 years ago

Less output messages are written. On 20000 cores it is better. In LMDZ, only master of MPI and OpenMP can write.

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