source: trunk/LMDZ.COMMON/libf/dyn3d_common/inigeom.F @ 3000

Last change on this file since 3000 was 1441, checked in by emillour, 9 years ago

Updates in common dynamics (seq and ) to keep up with updates
in LMDZ5 (up to LMDZ5 trunk, rev 2250):

  • compilation:
  • added test in grid/dimension/makdim to check that # of longitudes is a multiple of 8
  • dyn3d_common:

Bug correction concerning zoom (cf LMDZ5 rev 2218)

  • coefpoly.F becomes coefpoly_m.F90 (in misc)
  • fxhyp.F => fxhyp_m.F90 , fyhyp.F => fyhyp_m.F90
  • new routines for zoom: invert_zoom_x_m.F90 and principal_cshift_m.F90
  • inigeom.F adapted to new zoom definition routines
  • fluxstokenc.F : got rid of calls to initial0()
  • dyn3d:
  • advtrac.F90 : got rid of calls to initial0()
  • conf_gcm.F90 : cosmetic changes and change in default dzoomx,dzoomy values
  • guide_mod.F90 : followed updates from Earth Model
  • gcm.F is now gcm.F90
  • dyn3dpar:
  • advtrac_p.F90, covcont_p.F90, mod_hallo.F90 : cosmetic changes
  • conf_gcm.F90 : cosmetic and changed in default dzoomx,dzoomy values
  • parallel_lmdz.F90 : updates to keep up with Earth model
  • misc:
  • arth.F90 becomes arth_m.F90
  • wxios.F90 updated wrt Earth model changes
  • nrtype.F90 and coefpoly_m.F90 added
  • ran1.F, sort.F, minmax.F, minmax2.F, juldate.F moved over from dyn3d_common

EM

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