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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/dyn3d/inigeom.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/libf/dyn3d/inigeom.f90 revision 60 by guez, Mon Jan 30 14:37:26 2012 UTC
# Line 1  Line 1 
1        SUBROUTINE inigeom  module inigeom_m
2  c  
3  c     Auteur :  P. Le Van    IMPLICIT NONE
4  c  
5  c   ............      Version  du 01/04/2001     ...................  contains
 c  
 c  Calcul des elongations cuij1,.cuij4 , cvij1,..cvij4  aux memes en-  
 c     endroits que les aires aireij1_2d,..aireij4_2d .  
   
 c  Choix entre f(y) a derivee sinusoid. ou a derivee tangente hyperbol.  
 C Possibilité d'appeler une fonction "f(y)" à  
 C dérivée tangente hyperbolique à la place de la fonction à dérivée  
 C sinusoïdale.  
 c  
 c  
       use dimens_m  
       use paramet_m  
       use comconst  
       use comdissnew  
       use logic  
       use comgeom  
       use serre  
       IMPLICIT NONE  
 c  
   
 c------------------------------------------------------------------  
 c   ....  Variables  locales   ....  
 c  
       INTEGER  i,j,itmax,itmay,iter  
       REAL cvu(iip1,jjp1),cuv(iip1,jjm)  
       REAL ai14,ai23,airez,rlatp,rlatm,xprm,xprp,un4rad2,yprp,yprm  
       REAL eps,x1,xo1,f,df,xdm,y1,yo1,ydm  
       REAL coslatm,coslatp,radclatm,radclatp  
       REAL cuij1(iip1,jjp1),cuij2(iip1,jjp1),cuij3(iip1,jjp1),  
      *     cuij4(iip1,jjp1)  
       REAL cvij1(iip1,jjp1),cvij2(iip1,jjp1),cvij3(iip1,jjp1),  
      *     cvij4(iip1,jjp1)  
       REAL rlonvv(iip1),rlatuu(jjp1)  
       REAL rlatu1(jjm),yprimu1(jjm),rlatu2(jjm),yprimu2(jjm) ,  
      *     yprimv(jjm),yprimu(jjp1)  
       REAL gamdi_gdiv, gamdi_grot, gamdi_h  
   
       REAL rlonm025(iip1),xprimm025(iip1), rlonp025(iip1),  
      ,  xprimp025(iip1)  
       SAVE rlatu1,yprimu1,rlatu2,yprimu2,yprimv,yprimu  
       SAVE rlonm025,xprimm025,rlonp025,xprimp025  
   
       REAL      SSUM  
 c  
 c  
 c   ------------------------------------------------------------------  
 c   -                                                                -  
 c   calcul des coeff. ( cu_2d, cv_2d , 1./cu_2d**2,  1./cv_2d**2  )  
 c   -                                                                -  
 c   ------------------------------------------------------------------  
 c  
 c les coef. ( cu_2d, cv_2d ) permettent de passer des vitesses naturelles  
 c      aux vitesses covariantes et contravariantes , ou vice-versa ...  
 c  
 c  
 c on a :  u (covariant) = cu_2d * u (naturel)   , u(contrav)= u(nat)/cu_2d  
 c         v (covariant) = cv_2d * v (naturel)   , v(contrav)= v(nat)/cv_2d  
 c  
 c       on en tire :  u(covariant) = cu_2d * cu_2d * u(contravariant)  
 c                     v(covariant) = cv_2d * cv_2d * v(contravariant)  
 c  
 c  
 c     on a l'application (  x(X) , y(Y) )   avec - im/2 +1 <  X  < im/2  
 c                                                          =     =  
 c                                           et   - jm/2    <  Y  < jm/2  
 c                                                          =     =  
 c  
 c      ...................................................  
 c      ...................................................  
 c      .  x  est la longitude du point  en radians       .  
 c      .  y  est la  latitude du point  en radians       .  
 c      .                                                 .  
 c      .  on a :  cu_2d(i,j) = rad * COS(y) * dx/dX         .  
 c      .          cv( j ) = rad          * dy/dY         .  
 c      .        aire_2d(i,j) =  cu_2d(i,j) * cv(j)             .  
 c      .                                                 .  
 c      . y, dx/dX, dy/dY calcules aux points concernes   .  
 c      .                                                 .  
 c      ...................................................  
 c      ...................................................  
 c  
 c  
 c  
 c                                                           ,  
 c    cv , bien que dependant de j uniquement,sera ici indice aussi en i  
 c          pour un adressage plus facile en  ij  .  
 c  
 c  
 c  
 c  **************  aux points  u  et  v ,           *****************  
 c      xprimu et xprimv sont respectivement les valeurs de  dx/dX  
 c      yprimu et yprimv    .  .  .  .  .  .  .  .  .  .  .  dy/dY  
 c      rlatu  et  rlatv    .  .  .  .  .  .  .  .  .  .  .la latitude  
 c      cvu    et   cv_2d      .  .  .  .  .  .  .  .  .  .  .    cv_2d  
 c  
 c  **************  aux points u, v, scalaires, et z  ****************  
 c      cu_2d, cuv, cuscal, cuz sont respectiv. les valeurs de    cu_2d  
 c  
 c  
 c  
 c         Exemple de distribution de variables sur la grille dans le  
 c             domaine de travail ( X,Y ) .  
 c     ................................................................  
 c                  DX=DY= 1  
 c  
 c    
 c        +     represente  un  point scalaire ( p.exp  la pression )  
 c        >     represente  la composante zonale du  vent  
 c        V     represente  la composante meridienne du vent  
 c        o     represente  la  vorticite  
 c  
 c     ----  , car aux poles , les comp.zonales covariantes sont nulles  
 c  
 c  
 c  
 c         i ->  
 c  
 c         1      2      3      4      5      6      7      8  
 c  j  
 c  v  1   + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --  
 c  
 c         V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o  
 c  
 c     2   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >  
 c  
 c         V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o  
 c  
 c     3   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >  
 c  
 c         V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o  
 c  
 c     4   +   >  +   >  +   >  +   >  +   >  +   >  +   >  +  >  
 c  
 c         V   o  V   o  V   o  V   o  V   o  V   o  V   o  V  o  
 c  
 c     5   + ---- + ---- + ---- + ---- + ---- + ---- + ---- + --  
 c  
 c  
 c      Ci-dessus,  on voit que le nombre de pts.en longitude est egal  
 c                 a   IM = 8  
 c      De meme ,   le nombre d'intervalles entre les 2 poles est egal  
 c                 a   JM = 4  
 c  
 c      Les points scalaires ( + ) correspondent donc a des valeurs  
 c       entieres  de  i ( 1 a IM )   et  de  j ( 1 a  JM +1 )   .  
 c  
 c      Les vents    U       ( > ) correspondent a des valeurs  semi-  
 c       entieres  de i ( 1+ 0.5 a IM+ 0.5) et entieres de j ( 1 a JM+1)  
 c  
 c      Les vents    V       ( V ) correspondent a des valeurs entieres  
 c     de     i ( 1 a  IM ) et semi-entieres de  j ( 1 +0.5  a JM +0.5)  
 c  
 c  
 c  
       print *, "Call sequence information: inigeom"  
       print 3  
  3    FORMAT('Calcul des elongations cu_2d et cv_2d  comme sommes ',  
      $     'des 4 '  
      *  / 5x,  
      $   ' elong. cuij1, .. 4  , cvij1,.. 4  qui les entourent , aux '  
      * / 5x,' memes endroits que les aires aireij1_2d,...j4   . ' / )  
 c  
 c  
       IF( nitergdiv.NE.2 ) THEN  
         gamdi_gdiv = coefdis/ ( float(nitergdiv) -2. )  
       ELSE  
         gamdi_gdiv = 0.  
       ENDIF  
       IF( nitergrot.NE.2 ) THEN  
         gamdi_grot = coefdis/ ( float(nitergrot) -2. )  
       ELSE  
         gamdi_grot = 0.  
       ENDIF  
       IF( niterh.NE.2 ) THEN  
         gamdi_h = coefdis/ ( float(niterh) -2. )  
       ELSE  
         gamdi_h = 0.  
       ENDIF  
   
       WRITE(6,*) ' gamdi_gd ',gamdi_gdiv,gamdi_grot,gamdi_h,coefdis,  
      *  nitergdiv,nitergrot,niterh  
 c  
       pi    = 2.* ASIN(1.)  
 c  
       WRITE(6,990)  
   
 c     ----------------------------------------------------------------  
 c  
       IF( .NOT.fxyhypb )   THEN  
 c  
 c  
        IF( ysinus )  THEN  
 c  
         WRITE(6,*) ' ***  Inigeom ,  Y = Sinus ( Latitude ) *** '  
 c  
 c   .... utilisation de f(x,y )  avec  y  =  sinus de la latitude  ...  
   
         CALL  fxysinus (rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,  
      ,                    rlatu2,yprimu2,  
      ,  rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025  
      $       ,xprimp025)  
6    
7      SUBROUTINE inigeom
8    
9        ! Auteur : P. Le Van
10    
11        ! Calcul des élongations cuij1, ..., cuij4, cvij1, ..., cvij4 aux mêmes
12        ! endroits que les aires aireij1_2d, ..., aireij4_2d.
13    
14        ! Choix entre une fonction "f(y)" à dérivée sinusoïdale ou à
15        ! dérivée tangente hyperbolique. Calcul des coefficients cu_2d,
16        ! cv_2d, 1. / cu_2d**2, 1. / cv_2d**2. Les coefficients cu_2d et cv_2d
17        ! permettent de passer des vitesses naturelles aux vitesses
18        ! covariantes et contravariantes, ou vice-versa.
19    
20        ! On a :
21        ! u(covariant) = cu_2d * u(naturel), u(contravariant) = u(naturel) / cu_2d
22        ! v(covariant) = cv_2d * v(naturel), v(contravariant) = v(naturel) / cv_2d
23    
24        ! On en tire :
25        ! u(covariant) = cu_2d * cu_2d * u(contravariant)
26        ! v(covariant) = cv_2d * cv_2d * v(contravariant)
27    
28        ! On a l'application (x(X), y(Y)) avec - im / 2 + 1 <= X <= im / 2
29        ! et - jm / 2 <= Y <= jm / 2
30    
31        ! x est la longitude du point en radians.
32        ! y est la latitude du point en radians.
33        !
34        ! On a : cu_2d(i, j) = rad * cos(y) * dx / dX
35        ! cv(j) = rad * dy / dY
36        ! aire_2d(i, j) = cu_2d(i, j) * cv(j)
37        !
38        ! y, dx / dX, dy / dY calculés aux points concernés. cv, bien que
39        ! dépendant de j uniquement, sera ici indicé aussi en i pour un
40        ! adressage plus facile en ij.
41    
42        ! xprimu et xprimv sont respectivement les valeurs de dx / dX aux
43        ! points u et v. yprimu et yprimv sont respectivement les valeurs
44        ! de dy / dY aux points u et v. rlatu et rlatv sont respectivement
45        ! les valeurs de la latitude aux points u et v. cvu et cv_2d sont
46        ! respectivement les valeurs de cv_2d aux points u et v.
47    
48        ! cu_2d, cuv, cuscal, cuz sont respectivement les valeurs de cu_2d
49        ! aux points u, v, scalaires, et z. Cf. "inigeom.txt".
50    
51        USE comconst, ONLY : g, omeg, rad
52        USE comgeom, ONLY : airesurg_2d, aireu_2d, airev_2d, aire_2d, &
53             alpha1p2_2d, alpha1p4_2d, alpha1_2d, &
54             alpha2p3_2d, alpha2_2d, alpha3p4_2d, alpha3_2d, alpha4_2d, apoln, &
55             apols, constang_2d, cuscvugam_2d, cusurcvu_2d, cuvscvgam1_2d, &
56             cuvscvgam2_2d, cuvsurcv_2d, cu_2d, cvscuvgam_2d, cvsurcuv_2d, &
57             cvuscugam1_2d, cvuscugam2_2d, cvusurcu_2d, cv_2d, fext_2d, rlatu, &
58             rlatv, rlonu, rlonv, unsairez_2d, unsaire_2d, unsairz_gam_2d, &
59             unsair_gam1_2d, unsair_gam2_2d, unsapolnga1, unsapolnga2, &
60             unsapolsga1, unsapolsga2, unscu2_2d, unscv2_2d, xprimu, xprimv
61        USE comdissnew, ONLY : coefdis, nitergdiv, nitergrot, niterh
62        use conf_gcm_m, ONLY : fxyhypb, ysinus
63        USE dimens_m, ONLY : iim, jjm
64        use fxy_m, only: fxy
65        use jumble, only: new_unit
66        use nr_util, only: pi
67        USE paramet_m, ONLY : iip1, jjp1
68        USE serre, ONLY : alphax, alphay, clat, clon, dzoomx, dzoomy, grossismx, &
69             grossismy, pxo, pyo, taux, tauy, transx, transy
70    
71        ! Variables locales
72    
73        INTEGER i, j, itmax, itmay, iter, unit
74        REAL cvu(iip1, jjp1), cuv(iip1, jjm)
75        REAL ai14, ai23, airez, un4rad2
76        REAL eps, x1, xo1, f, df, xdm, y1, yo1, ydm
77        REAL coslatm, coslatp, radclatm, radclatp
78        REAL, dimension(iip1, jjp1):: cuij1, cuij2, cuij3, cuij4 ! in m
79        REAL, dimension(iip1, jjp1):: cvij1, cvij2, cvij3, cvij4 ! in m
80        REAL rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm)
81        real yprimv(jjm), yprimu(jjp1)
82        REAL gamdi_gdiv, gamdi_grot, gamdi_h
83        REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
84        real, dimension(iim + 1, jjm + 1):: aireij1_2d, aireij2_2d, aireij3_2d, &
85             aireij4_2d ! in m2
86        real airuscv2_2d(iim + 1, jjm)
87        real airvscu2_2d(iim + 1, jjm), aiuscv2gam_2d(iim + 1, jjm)
88        real aivscu2gam_2d(iim + 1, jjm)
89    
90        !------------------------------------------------------------------
91    
92        PRINT *, 'Call sequence information: inigeom'
93    
94        IF (nitergdiv/=2) THEN
95           gamdi_gdiv = coefdis / (real(nitergdiv)-2.)
96        ELSE
97           gamdi_gdiv = 0.
98        END IF
99        IF (nitergrot/=2) THEN
100           gamdi_grot = coefdis / (real(nitergrot)-2.)
101        ELSE
102           gamdi_grot = 0.
103        END IF
104        IF (niterh/=2) THEN
105           gamdi_h = coefdis / (real(niterh)-2.)
106        ELSE
107           gamdi_h = 0.
108        END IF
109    
110        print *, 'gamdi_gdiv = ', gamdi_gdiv
111        print *, "gamdi_grot = ", gamdi_grot
112        print *, "gamdi_h = ", gamdi_h
113    
114        IF (.NOT. fxyhypb) THEN
115           IF (ysinus) THEN
116              print *, ' Inigeom, Y = Sinus (Latitude) '
117              ! utilisation de f(x, y) avec y = sinus de la latitude
118              CALL fxysinus(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, &
119                   rlatu2, yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, &
120                   xprimm025, rlonp025, xprimp025)
121         ELSE         ELSE
122  c            print *, 'Inigeom, Y = Latitude, der. sinusoid .'
123          WRITE(6,*) '*** Inigeom ,  Y = Latitude  , der. sinusoid . ***'            ! utilisation de f(x, y) a tangente sinusoidale, y etant la latit
124    
125  c utilisation  de f(x,y) a tangente sinusoidale , y etant la latit. ..            pxo = clon * pi / 180.
126  c            pyo = 2. * clat * pi / 180.
   
         pxo   = clon *pi /180.  
         pyo   = 2.* clat* pi /180.  
 c  
 c  ....  determination de  transx ( pour le zoom ) par Newton-Raphson .  
 c  
         itmax = 10  
         eps   = .1e-7  
 c  
         xo1 = 0.  
         DO 10 iter = 1, itmax  
         x1  = xo1  
         f   = x1+ alphax *SIN(x1-pxo)  
         df  = 1.+ alphax *COS(x1-pxo)  
         x1  = x1 - f/df  
         xdm = ABS( x1- xo1 )  
         IF( xdm.LE.eps )GO TO 11  
         xo1 = x1  
  10     CONTINUE  
  11     CONTINUE  
 c  
         transx = xo1  
   
         itmay = 10  
         eps   = .1e-7  
 C  
         yo1  = 0.  
         DO 15 iter = 1,itmay  
         y1   = yo1  
         f    = y1 + alphay* SIN(y1-pyo)  
         df   = 1. + alphay* COS(y1-pyo)  
         y1   = y1 -f/df  
         ydm  = ABS(y1-yo1)  
         IF(ydm.LE.eps) GO TO 17  
         yo1  = y1  
  15     CONTINUE  
 c  
  17     CONTINUE  
         transy = yo1  
   
         CALL fxy ( rlatu,yprimu,rlatv,yprimv,rlatu1,yprimu1,  
      ,              rlatu2,yprimu2,  
      ,  rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025  
      $       ,xprimp025)  
   
        ENDIF  
 c  
       ELSE  
 c  
 c ....  Utilisation  de fxyhyper , f(x,y) a derivee tangente hyperbol.  
 c   ..................................................................  
127    
128        WRITE(6,*)            ! determination de transx (pour le zoom) par Newton-Raphson
129       $        '*** Inigeom , Y = Latitude  , der.tg. hyperbolique ***'  
130              itmax = 10
131              eps = .1E-7
132    
133              xo1 = 0.
134              DO iter = 1, itmax
135                 x1 = xo1
136                 f = x1 + alphax * sin(x1-pxo)
137                 df = 1. + alphax * cos(x1-pxo)
138                 x1 = x1 - f / df
139                 xdm = abs(x1-xo1)
140                 IF (xdm<=eps) EXIT
141                 xo1 = x1
142              END DO
143    
144              transx = xo1
145    
146              itmay = 10
147              eps = .1E-7
148    
149              yo1 = 0.
150              DO iter = 1, itmay
151                 y1 = yo1
152                 f = y1 + alphay * sin(y1-pyo)
153                 df = 1. + alphay * cos(y1-pyo)
154                 y1 = y1 - f / df
155                 ydm = abs(y1-yo1)
156                 IF (ydm<=eps) EXIT
157                 yo1 = y1
158              END DO
159    
160              transy = yo1
161    
162              CALL fxy(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, &
163                   yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, &
164                   rlonp025, xprimp025)
165           END IF
166        ELSE
167           ! Utilisation de fxyhyper, f(x, y) à dérivée tangente hyperbolique
168           print *, 'Inigeom, Y = Latitude, dérivée tangente hyperbolique'
169           CALL fxyhyper(clat, grossismy, dzoomy, tauy, clon, grossismx, dzoomx, &
170                taux, rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, &
171                yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, &
172                rlonp025, xprimp025)
173        END IF
174    
175        rlatu(1) = pi / 2.
176        rlatu(jjp1) = -rlatu(1)
177    
178        ! Calcul aux pôles
179    
180        yprimu(1) = 0.
181        yprimu(jjp1) = 0.
182    
183        un4rad2 = 0.25 * rad * rad
184    
185        ! Cf. "inigeom.txt". Calcul des quatre aires élémentaires
186        ! aireij1_2d, aireij2_2d, aireij3_2d, aireij4_2d qui entourent
187        ! chaque aire_2d(i, j), ainsi que les quatre élongations
188        ! élémentaires cuij et les quatre élongations cvij qui sont
189        ! calculées aux mêmes endroits que les aireij.
190    
191        coslatm = cos(rlatu1(1))
192        radclatm = 0.5 * rad * coslatm
193    
194        aireij1_2d(:iim, 1) = 0.
195        aireij2_2d(:iim, 1) = un4rad2 * coslatm * xprimp025(:iim) * yprimu1(1)
196        aireij3_2d(:iim, 1) = un4rad2 * coslatm * xprimm025(:iim) * yprimu1(1)
197        aireij4_2d(:iim, 1) = 0.
198    
199        cuij1(:iim, 1) = 0.
200        cuij2(:iim, 1) = radclatm * xprimp025(:iim)
201        cuij3(:iim, 1) = radclatm * xprimm025(:iim)
202        cuij4(:iim, 1) = 0.
203    
204        cvij1(:iim, 1) = 0.
205        cvij2(:iim, 1) = 0.5 * rad * yprimu1(1)
206        cvij3(:iim, 1) = cvij2(:iim, 1)
207        cvij4(:iim, 1) = 0.
208    
209        do j = 2, jjm
210           coslatm = cos(rlatu1(j))
211           coslatp = cos(rlatu2(j-1))
212           radclatp = 0.5 * rad * coslatp
213           radclatm = 0.5 * rad * coslatm
214           ai14 = un4rad2 * coslatp * yprimu2(j-1)
215           ai23 = un4rad2 * coslatm * yprimu1(j)
216    
217           aireij1_2d(:iim, j) = ai14 * xprimp025(:iim)
218           aireij2_2d(:iim, j) = ai23 * xprimp025(:iim)
219           aireij3_2d(:iim, j) = ai23 * xprimm025(:iim)
220           aireij4_2d(:iim, j) = ai14 * xprimm025(:iim)
221           cuij1(:iim, j) = radclatp * xprimp025(:iim)
222           cuij2(:iim, j) = radclatm * xprimp025(:iim)
223           cuij3(:iim, j) = radclatm * xprimm025(:iim)
224           cuij4(:iim, j) = radclatp * xprimm025(:iim)
225           cvij1(:iim, j) = 0.5 * rad * yprimu2(j-1)
226           cvij2(:iim, j) = 0.5 * rad * yprimu1(j)
227           cvij3(:iim, j) = cvij2(:iim, j)
228           cvij4(:iim, j) = cvij1(:iim, j)
229        end do
230    
231        coslatp = cos(rlatu2(jjm))
232        radclatp = 0.5 * rad * coslatp
233    
234        aireij1_2d(:iim, jjp1) = un4rad2 * coslatp * xprimp025(:iim) * yprimu2(jjm)
235        aireij2_2d(:iim, jjp1) = 0.
236        aireij3_2d(:iim, jjp1) = 0.
237        aireij4_2d(:iim, jjp1) = un4rad2 * coslatp * xprimm025(:iim) * yprimu2(jjm)
238    
239        cuij1(:iim, jjp1) = radclatp * xprimp025(:iim)
240        cuij2(:iim, jjp1) = 0.
241        cuij3(:iim, jjp1) = 0.
242        cuij4(:iim, jjp1) = radclatp * xprimm025(:iim)
243    
244        cvij1(:iim, jjp1) = 0.5 * rad * yprimu2(jjm)
245        cvij2(:iim, jjp1) = 0.
246        cvij3(:iim, jjp1) = 0.
247        cvij4(:iim, jjp1) = cvij1(:iim, jjp1)
248    
249        ! Périodicité :
250    
251         CALL fxyhyper( clat, grossismy, dzoomy, tauy    ,      cvij1(iip1, :) = cvij1(1, :)
252       ,                clon, grossismx, dzoomx, taux    ,      cvij2(iip1, :) = cvij2(1, :)
253       , rlatu,yprimu,rlatv, yprimv,rlatu1, yprimu1,rlatu2,yprimu2  ,      cvij3(iip1, :) = cvij3(1, :)
254       , rlonu,xprimu,rlonv,xprimv,rlonm025,xprimm025,rlonp025      cvij4(iip1, :) = cvij4(1, :)
255       $     ,xprimp025 )  
256        cuij1(iip1, :) = cuij1(1, :)
257          cuij2(iip1, :) = cuij2(1, :)
258        ENDIF      cuij3(iip1, :) = cuij3(1, :)
259  c      cuij4(iip1, :) = cuij4(1, :)
260  c  -------------------------------------------------------------------  
261        aireij1_2d(iip1, :) = aireij1_2d(1, :)
262  c      aireij2_2d(iip1, :) = aireij2_2d(1, :)
263        rlatu(1)    =     ASIN(1.)      aireij3_2d(iip1, :) = aireij3_2d(1, :)
264        rlatu(jjp1) =  - rlatu(1)      aireij4_2d(iip1, :) = aireij4_2d(1, :)
265  c  
266  c      DO j = 1, jjp1
267  c   ....  calcul  aux  poles  ....         DO i = 1, iim
268  c            aire_2d(i, j) = aireij1_2d(i, j) + aireij2_2d(i, j) &
269        yprimu(1)      = 0.                 + aireij3_2d(i, j) + aireij4_2d(i, j)
270        yprimu(jjp1)   = 0.            alpha1_2d(i, j) = aireij1_2d(i, j) / aire_2d(i, j)
271  c            alpha2_2d(i, j) = aireij2_2d(i, j) / aire_2d(i, j)
272  c            alpha3_2d(i, j) = aireij3_2d(i, j) / aire_2d(i, j)
273        un4rad2 = 0.25 * rad * rad            alpha4_2d(i, j) = aireij4_2d(i, j) / aire_2d(i, j)
274  c            alpha1p2_2d(i, j) = alpha1_2d(i, j) + alpha2_2d(i, j)
275  c   -------------------------------------------------------------            alpha1p4_2d(i, j) = alpha1_2d(i, j) + alpha4_2d(i, j)
276  c   -------------------------------------------------------------            alpha2p3_2d(i, j) = alpha2_2d(i, j) + alpha3_2d(i, j)
277  c                                                                    -            alpha3p4_2d(i, j) = alpha3_2d(i, j) + alpha4_2d(i, j)
278  c calcul  des aires ( aire_2d,aireu_2d,airev_2d, 1./aire_2d, 1./airez )         END DO
279  c   -      et de   fext_2d ,  force de coriolis  extensive  .  
280  c   -                                                           aire_2d(iip1, j) = aire_2d(1, j)
281  c   -------------------------------------------------------------         alpha1_2d(iip1, j) = alpha1_2d(1, j)
282  c   -------------------------------------------------------------         alpha2_2d(iip1, j) = alpha2_2d(1, j)
283  c         alpha3_2d(iip1, j) = alpha3_2d(1, j)
284  c         alpha4_2d(iip1, j) = alpha4_2d(1, j)
285  c         alpha1p2_2d(iip1, j) = alpha1p2_2d(1, j)
286  c   A 1 point scalaire P (i,j) de la grille, reguliere en (X,Y) , sont         alpha1p4_2d(iip1, j) = alpha1p4_2d(1, j)
287  c   affectees 4 aires entourant P , calculees respectivement aux points         alpha2p3_2d(iip1, j) = alpha2p3_2d(1, j)
288  c            ( i + 1/4, j - 1/4 )    :    aireij1_2d (i,j)         alpha3p4_2d(iip1, j) = alpha3p4_2d(1, j)
289  c            ( i + 1/4, j + 1/4 )    :    aireij2_2d (i,j)      END DO
290  c            ( i - 1/4, j + 1/4 )    :    aireij3_2d (i,j)  
291  c            ( i - 1/4, j - 1/4 )    :    aireij4_2d (i,j)      DO j = 1, jjp1
292  c         DO i = 1, iim
293  c           ,            aireu_2d(i, j) = aireij1_2d(i, j) + aireij2_2d(i, j) + &
294  c Les cotes de chacun de ces 4 carres etant egaux a 1/2 suivant (X,Y).                 aireij4_2d(i + 1, j) + aireij3_2d(i + 1, j)
295  c   Chaque aire centree en 1 point scalaire P(i,j) est egale a la somme            unsaire_2d(i, j) = 1. / aire_2d(i, j)
296  c des 4 aires  aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d qui sont affectees au            unsair_gam1_2d(i, j) = unsaire_2d(i, j)**(-gamdi_gdiv)
297  c   point (i,j) .            unsair_gam2_2d(i, j) = unsaire_2d(i, j)**(-gamdi_h)
298  c   On definit en outre les coefficients  alpha comme etant egaux a            airesurg_2d(i, j) = aire_2d(i, j) / g
299  c (aireij / aire_2d), c.a.d par exp.  alpha1_2d(i,j)=aireij1_2d(i,j)/aire_2d(i,j)         END DO
300  c         aireu_2d(iip1, j) = aireu_2d(1, j)
301  c   De meme, toute aire centree en 1 point U est egale a la somme des         unsaire_2d(iip1, j) = unsaire_2d(1, j)
302  c 4 aires aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d entourant le point U .         unsair_gam1_2d(iip1, j) = unsair_gam1_2d(1, j)
303  c    Idem pour  airev_2d, airez .         unsair_gam2_2d(iip1, j) = unsair_gam2_2d(1, j)
304  c         airesurg_2d(iip1, j) = airesurg_2d(1, j)
305  c       On a ,pour chaque maille :    dX = dY = 1      END DO
306  c  
307  c      DO j = 1, jjm
308  c                             . V         DO i = 1, iim
309  c            airev_2d(i, j) = aireij2_2d(i, j) + aireij3_2d(i, j) + &
310  c                 aireij4_2d .        . aireij1_2d                 aireij1_2d(i, j + 1) + aireij4_2d(i, j + 1)
311  c         END DO
312  c                   U .       . P      . U         DO i = 1, iim
313  c            airez = aireij2_2d(i, j) + aireij1_2d(i, j + 1) &
314  c                 aireij3_2d .        . aireij2_2d                 + aireij3_2d(i + 1, j) + aireij4_2d(i + 1, j + 1)
315  c            unsairez_2d(i, j) = 1. / airez
316  c                             . V            unsairz_gam_2d(i, j) = unsairez_2d(i, j)**(-gamdi_grot)
317  c            fext_2d(i, j) = airez * sin(rlatv(j)) * 2. * omeg
318  c         END DO
319  c         airev_2d(iip1, j) = airev_2d(1, j)
320  c         unsairez_2d(iip1, j) = unsairez_2d(1, j)
321  c         fext_2d(iip1, j) = fext_2d(1, j)
322  c ....................................................................         unsairz_gam_2d(iip1, j) = unsairz_gam_2d(1, j)
323  c      END DO
324  c Calcul des 4 aires elementaires aireij1_2d,aireij2_2d,aireij3_2d,aireij4_2d  
325  c qui entourent chaque aire_2d(i,j) , ainsi que les 4 elongations elemen      ! Calcul des élongations cu_2d, cv_2d, cvu
326  c   taires cuij et les 4 elongat. cvij qui sont calculees aux memes  
327  c     endroits  que les aireij   .          DO j = 1, jjm
328  c         DO i = 1, iim
329  c  ....................................................................            cv_2d(i, j) = 0.5 * &
330  c                 (cvij2(i, j) + cvij3(i, j) + cvij1(i, j + 1) + cvij4(i, j + 1))
331  c     .......  do 35  :   boucle sur les  jjm + 1  latitudes   .....            cvu(i, j) = 0.5 * (cvij1(i, j) + cvij4(i, j) + cvij2(i, j) &
332  c                 + cvij3(i, j))
333  c            cuv(i, j) = 0.5 * (cuij2(i, j) + cuij3(i, j) + cuij1(i, j + 1) &
334        DO 35 j = 1, jjp1                 + cuij4(i, j + 1))
335  c            unscv2_2d(i, j) = 1. / cv_2d(i, j)**2
336        IF ( j. eq. 1 )  THEN         END DO
337  c         DO i = 1, iim
338        yprm           = yprimu1(j)            cuvsurcv_2d(i, j) = airev_2d(i, j) * unscv2_2d(i, j)
339        rlatm          = rlatu1(j)            cvsurcuv_2d(i, j) = 1. / cuvsurcv_2d(i, j)
340  c            cuvscvgam1_2d(i, j) = cuvsurcv_2d(i, j)**(-gamdi_gdiv)
341        coslatm        = COS( rlatm )            cuvscvgam2_2d(i, j) = cuvsurcv_2d(i, j)**(-gamdi_h)
342        radclatm       = 0.5* rad * coslatm            cvscuvgam_2d(i, j) = cvsurcuv_2d(i, j)**(-gamdi_grot)
343  c         END DO
344        DO 30 i = 1, iim         cv_2d(iip1, j) = cv_2d(1, j)
345        xprp           = xprimp025( i )         cvu(iip1, j) = cvu(1, j)
346        xprm           = xprimm025( i )         unscv2_2d(iip1, j) = unscv2_2d(1, j)
347        aireij2_2d( i,1 ) = un4rad2 * coslatm  * xprp * yprm         cuv(iip1, j) = cuv(1, j)
348        aireij3_2d( i,1 ) = un4rad2 * coslatm  * xprm * yprm         cuvsurcv_2d(iip1, j) = cuvsurcv_2d(1, j)
349        cuij2  ( i,1 ) = radclatm * xprp         cvsurcuv_2d(iip1, j) = cvsurcuv_2d(1, j)
350        cuij3  ( i,1 ) = radclatm * xprm         cuvscvgam1_2d(iip1, j) = cuvscvgam1_2d(1, j)
351        cvij2  ( i,1 ) = 0.5* rad * yprm         cuvscvgam2_2d(iip1, j) = cuvscvgam2_2d(1, j)
352        cvij3  ( i,1 ) = cvij2(i,1)         cvscuvgam_2d(iip1, j) = cvscuvgam_2d(1, j)
353    30  CONTINUE      END DO
354  c  
355        DO  i = 1, iim      DO j = 2, jjm
356        aireij1_2d( i,1 ) = 0.         DO i = 1, iim
357        aireij4_2d( i,1 ) = 0.            cu_2d(i, j) = 0.5 * (cuij1(i, j) + cuij4(i + 1, j) + cuij2(i, j) &
358        cuij1  ( i,1 ) = 0.                 + cuij3(i + 1, j))
359        cuij4  ( i,1 ) = 0.            unscu2_2d(i, j) = 1. / cu_2d(i, j)**2
360        cvij1  ( i,1 ) = 0.            cvusurcu_2d(i, j) = aireu_2d(i, j) * unscu2_2d(i, j)
361        cvij4  ( i,1 ) = 0.            cusurcvu_2d(i, j) = 1. / cvusurcu_2d(i, j)
362        ENDDO            cvuscugam1_2d(i, j) = cvusurcu_2d(i, j)**(-gamdi_gdiv)
363  c            cvuscugam2_2d(i, j) = cvusurcu_2d(i, j)**(-gamdi_h)
364        END IF            cuscvugam_2d(i, j) = cusurcvu_2d(i, j)**(-gamdi_grot)
365  c         END DO
366        IF ( j. eq. jjp1 )  THEN         cu_2d(iip1, j) = cu_2d(1, j)
367         yprp               = yprimu2(j-1)         unscu2_2d(iip1, j) = unscu2_2d(1, j)
368         rlatp              = rlatu2 (j-1)         cvusurcu_2d(iip1, j) = cvusurcu_2d(1, j)
369  ccc       yprp             = fyprim( FLOAT(j) - 0.25 )         cusurcvu_2d(iip1, j) = cusurcvu_2d(1, j)
370  ccc       rlatp            = fy    ( FLOAT(j) - 0.25 )         cvuscugam1_2d(iip1, j) = cvuscugam1_2d(1, j)
371  c         cvuscugam2_2d(iip1, j) = cvuscugam2_2d(1, j)
372        coslatp             = COS( rlatp )         cuscvugam_2d(iip1, j) = cuscvugam_2d(1, j)
373        radclatp            = 0.5* rad * coslatp      END DO
374  c  
375        DO 31 i = 1,iim      ! Calcul aux pôles
376          xprp              = xprimp025( i )  
377          xprm              = xprimm025( i )      DO i = 1, iip1
378          aireij1_2d( i,jjp1 ) = un4rad2 * coslatp  * xprp * yprp         cu_2d(i, 1) = 0.
379          aireij4_2d( i,jjp1 ) = un4rad2 * coslatp  * xprm * yprp         unscu2_2d(i, 1) = 0.
380          cuij1(i,jjp1)     = radclatp * xprp         cvu(i, 1) = 0.
381          cuij4(i,jjp1)     = radclatp * xprm  
382          cvij1(i,jjp1)     = 0.5 * rad* yprp         cu_2d(i, jjp1) = 0.
383          cvij4(i,jjp1)     = cvij1(i,jjp1)         unscu2_2d(i, jjp1) = 0.
384   31   CONTINUE         cvu(i, jjp1) = 0.
385  c      END DO
386         DO   i    = 1, iim  
387          aireij2_2d( i,jjp1 ) = 0.      DO j = 1, jjm
388          aireij3_2d( i,jjp1 ) = 0.         DO i = 1, iim
389          cvij2  ( i,jjp1 ) = 0.            airvscu2_2d(i, j) = airev_2d(i, j) / (cuv(i, j) * cuv(i, j))
390          cvij3  ( i,jjp1 ) = 0.            aivscu2gam_2d(i, j) = airvscu2_2d(i, j)**(-gamdi_grot)
391          cuij2  ( i,jjp1 ) = 0.         END DO
392          cuij3  ( i,jjp1 ) = 0.         airvscu2_2d(iip1, j) = airvscu2_2d(1, j)
393         ENDDO         aivscu2gam_2d(iip1, j) = aivscu2gam_2d(1, j)
394  c      END DO
395        END IF  
396  c      DO j = 2, jjm
397           DO i = 1, iim
398        IF ( j .gt. 1 .AND. j .lt. jjp1 )  THEN            airuscv2_2d(i, j) = aireu_2d(i, j) / (cvu(i, j) * cvu(i, j))
399  c            aiuscv2gam_2d(i, j) = airuscv2_2d(i, j)**(-gamdi_grot)
400          rlatp    = rlatu2 ( j-1 )         END DO
401          yprp     = yprimu2( j-1 )         airuscv2_2d(iip1, j) = airuscv2_2d(1, j)
402          rlatm    = rlatu1 (  j  )         aiuscv2gam_2d(iip1, j) = aiuscv2gam_2d(1, j)
403          yprm     = yprimu1(  j  )      END DO
404  cc         rlatp    = fy    ( FLOAT(j) - 0.25 )  
405  cc         yprp     = fyprim( FLOAT(j) - 0.25 )      ! Calcul des aires aux pôles :
406  cc         rlatm    = fy    ( FLOAT(j) + 0.25 )  
407  cc         yprm     = fyprim( FLOAT(j) + 0.25 )      apoln = sum(aire_2d(:iim, 1))
408        apols = sum(aire_2d(:iim, jjp1))
409           coslatm  = COS( rlatm )      unsapolnga1 = 1. / (apoln**(-gamdi_gdiv))
410           coslatp  = COS( rlatp )      unsapolsga1 = 1. / (apols**(-gamdi_gdiv))
411           radclatp = 0.5* rad * coslatp      unsapolnga2 = 1. / (apoln**(-gamdi_h))
412           radclatm = 0.5* rad * coslatm      unsapolsga2 = 1. / (apols**(-gamdi_h))
413  c  
414           DO 32 i = 1,iim      ! Changement F. Hourdin calcul conservatif pour fext_2d
415           xprp            = xprimp025( i )      ! constang_2d contient le produit a * cos (latitude) * omega
416           xprm            = xprimm025( i )  
417              DO i = 1, iim
418           ai14            = un4rad2 * coslatp * yprp         constang_2d(i, 1) = 0.
419           ai23            = un4rad2 * coslatm * yprm      END DO
420           aireij1_2d ( i,j ) = ai14 * xprp      DO j = 1, jjm - 1
421           aireij2_2d ( i,j ) = ai23 * xprp         DO i = 1, iim
422           aireij3_2d ( i,j ) = ai23 * xprm            constang_2d(i, j + 1) = rad * omeg * cu_2d(i, j + 1) &
423           aireij4_2d ( i,j ) = ai14 * xprm                 * cos(rlatu(j + 1))
424           cuij1   ( i,j ) = radclatp * xprp         END DO
425           cuij2   ( i,j ) = radclatm * xprp      END DO
426           cuij3   ( i,j ) = radclatm * xprm      DO i = 1, iim
427           cuij4   ( i,j ) = radclatp * xprm         constang_2d(i, jjp1) = 0.
428           cvij1   ( i,j ) = 0.5* rad * yprp      END DO
429           cvij2   ( i,j ) = 0.5* rad * yprm  
430           cvij3   ( i,j ) = cvij2(i,j)      ! Périodicité en longitude
431           cvij4   ( i,j ) = cvij1(i,j)  
432    32     CONTINUE      DO j = 1, jjm
433  c         fext_2d(iip1, j) = fext_2d(1, j)
434        END IF      END DO
435  c      DO j = 1, jjp1
436  c    ........       periodicite   ............         constang_2d(iip1, j) = constang_2d(1, j)
437  c      END DO
438           cvij1   (iip1,j) = cvij1   (1,j)  
439           cvij2   (iip1,j) = cvij2   (1,j)      call new_unit(unit)
440           cvij3   (iip1,j) = cvij3   (1,j)      open(unit, file="longitude_latitude.txt", status="replace", action="write")
441           cvij4   (iip1,j) = cvij4   (1,j)      write(unit, fmt=*) '"longitudes at V points (degrees)"', rlonv * 180. / pi
442           cuij1   (iip1,j) = cuij1   (1,j)      write(unit, fmt=*) '"latitudes at V points (degrees)"', rlatv * 180. / pi
443           cuij2   (iip1,j) = cuij2   (1,j)      write(unit, fmt=*) '"longitudes at U points (degrees)"', rlonu * 180. / pi
444           cuij3   (iip1,j) = cuij3   (1,j)      write(unit, fmt=*) '"latitudes at U points (degrees)"', rlatu * 180. / pi
445           cuij4   (iip1,j) = cuij4   (1,j)      close(unit)
446           aireij1_2d (iip1,j) = aireij1_2d (1,j )  
447           aireij2_2d (iip1,j) = aireij2_2d (1,j )    END SUBROUTINE inigeom
448           aireij3_2d (iip1,j) = aireij3_2d (1,j )  
449           aireij4_2d (iip1,j) = aireij4_2d (1,j )  end module inigeom_m
           
   35  CONTINUE  
 c  
 c    ..............................................................  
 c  
       DO 37 j = 1, jjp1  
       DO 36 i = 1, iim  
       aire_2d    ( i,j )  = aireij1_2d(i,j) + aireij2_2d(i,j)  
      *        + aireij3_2d(i,j) + aireij4_2d(i,j)  
       alpha1_2d  ( i,j )  = aireij1_2d(i,j) / aire_2d(i,j)  
       alpha2_2d  ( i,j )  = aireij2_2d(i,j) / aire_2d(i,j)  
       alpha3_2d  ( i,j )  = aireij3_2d(i,j) / aire_2d(i,j)  
       alpha4_2d  ( i,j )  = aireij4_2d(i,j) / aire_2d(i,j)  
       alpha1p2_2d( i,j )  = alpha1_2d (i,j) + alpha2_2d (i,j)  
       alpha1p4_2d( i,j )  = alpha1_2d (i,j) + alpha4_2d (i,j)  
       alpha2p3_2d( i,j )  = alpha2_2d (i,j) + alpha3_2d (i,j)  
       alpha3p4_2d( i,j )  = alpha3_2d (i,j) + alpha4_2d (i,j)  
   36  CONTINUE  
 c  
 c  
       aire_2d    (iip1,j) = aire_2d    (1,j)  
       alpha1_2d  (iip1,j) = alpha1_2d  (1,j)  
       alpha2_2d  (iip1,j) = alpha2_2d  (1,j)  
       alpha3_2d  (iip1,j) = alpha3_2d  (1,j)  
       alpha4_2d  (iip1,j) = alpha4_2d  (1,j)  
       alpha1p2_2d(iip1,j) = alpha1p2_2d(1,j)  
       alpha1p4_2d(iip1,j) = alpha1p4_2d(1,j)  
       alpha2p3_2d(iip1,j) = alpha2p3_2d(1,j)  
       alpha3p4_2d(iip1,j) = alpha3p4_2d(1,j)  
   37  CONTINUE  
 c  
   
       DO 42 j = 1,jjp1  
       DO 41 i = 1,iim  
       aireu_2d       (i,j)= aireij1_2d(i,j) + aireij2_2d(i,j)  
      *        + aireij4_2d(i+1,j) +aireij3_2d(i+1,j)  
       unsaire_2d    ( i,j)= 1./ aire_2d(i,j)  
       unsair_gam1_2d( i,j)= unsaire_2d(i,j)** ( - gamdi_gdiv )  
       unsair_gam2_2d( i,j)= unsaire_2d(i,j)** ( - gamdi_h    )  
       airesurg_2d   ( i,j)= aire_2d(i,j)/ g  
   41  CONTINUE  
       aireu_2d     (iip1,j)  = aireu_2d  (1,j)  
       unsaire_2d   (iip1,j)  = unsaire_2d(1,j)  
       unsair_gam1_2d(iip1,j) = unsair_gam1_2d(1,j)  
       unsair_gam2_2d(iip1,j) = unsair_gam2_2d(1,j)  
       airesurg_2d   (iip1,j) = airesurg_2d(1,j)  
   42  CONTINUE  
 c  
 c  
       DO 48 j = 1,jjm  
 c  
         DO i=1,iim  
          airev_2d     (i,j) = aireij2_2d(i,j)+ aireij3_2d(i,j)  
      *          + aireij1_2d(i,j+1) +aireij4_2d(i,j+1)  
         ENDDO  
          DO i=1,iim  
           airez         = aireij2_2d(i,j)+aireij1_2d(i,j+1)  
      *           +aireij3_2d(i+1,j) +aireij4_2d(i+1,j+1)  
           unsairez_2d(i,j) = 1./ airez  
           unsairz_gam_2d(i,j)= unsairez_2d(i,j)** ( - gamdi_grot )  
           fext_2d    (i,j)   = airez * SIN(rlatv(j))* 2.* omeg  
          ENDDO  
         airev_2d     (iip1,j)  = airev_2d(1,j)  
         unsairez_2d  (iip1,j)  = unsairez_2d(1,j)  
         fext_2d      (iip1,j)  = fext_2d(1,j)  
         unsairz_gam_2d(iip1,j) = unsairz_gam_2d(1,j)  
 c  
   48  CONTINUE  
 c  
 c  
 c    .....      Calcul  des elongations cu_2d,cv_2d, cvu     .........  
 c  
       DO    j   = 1, jjm  
        DO   i  = 1, iim  
        cv_2d(i,j) = 0.5  
      $         *( cvij2(i,j)+cvij3(i,j)+cvij1(i,j+1)+cvij4(i,j+1))  
        cvu(i,j)= 0.5 *( cvij1(i,j)+cvij4(i,j)+cvij2(i,j)  +cvij3(i,j) )  
        cuv(i,j)= 0.5  
      $      *( cuij2(i,j)+cuij3(i,j)+cuij1(i,j+1)+cuij4(i,j+1))  
        unscv2_2d(i,j) = 1./ ( cv_2d(i,j)*cv_2d(i,j) )  
        ENDDO  
        DO   i  = 1, iim  
        cuvsurcv_2d (i,j)    = airev_2d(i,j)  * unscv2_2d(i,j)  
        cvsurcuv_2d (i,j)    = 1./cuvsurcv_2d(i,j)  
        cuvscvgam1_2d(i,j)   = cuvsurcv_2d (i,j) ** ( - gamdi_gdiv )  
        cuvscvgam2_2d(i,j)   = cuvsurcv_2d (i,j) ** ( - gamdi_h )  
        cvscuvgam_2d(i,j)    = cvsurcuv_2d (i,j) ** ( - gamdi_grot )  
        ENDDO  
        cv_2d       (iip1,j)  = cv_2d       (1,j)  
        cvu      (iip1,j)  = cvu      (1,j)  
        unscv2_2d   (iip1,j)  = unscv2_2d   (1,j)  
        cuv      (iip1,j)  = cuv      (1,j)  
        cuvsurcv_2d (iip1,j)  = cuvsurcv_2d (1,j)  
        cvsurcuv_2d (iip1,j)  = cvsurcuv_2d (1,j)  
        cuvscvgam1_2d(iip1,j) = cuvscvgam1_2d(1,j)  
        cuvscvgam2_2d(iip1,j) = cuvscvgam2_2d(1,j)  
        cvscuvgam_2d(iip1,j)  = cvscuvgam_2d(1,j)  
       ENDDO  
   
       DO  j     = 2, jjm  
         DO   i  = 1, iim  
         cu_2d(i,j) = 0.5  
      $          *(cuij1(i,j)+cuij4(i+1,j)+cuij2(i,j)+cuij3(i+1,j))  
         unscu2_2d    (i,j)  = 1./ ( cu_2d(i,j) * cu_2d(i,j) )  
         cvusurcu_2d  (i,j)  =  aireu_2d(i,j) * unscu2_2d(i,j)  
         cusurcvu_2d  (i,j)  = 1./ cvusurcu_2d(i,j)  
         cvuscugam1_2d (i,j) = cvusurcu_2d(i,j) ** ( - gamdi_gdiv )  
         cvuscugam2_2d (i,j) = cvusurcu_2d(i,j) ** ( - gamdi_h    )  
         cuscvugam_2d (i,j)  = cusurcvu_2d(i,j) ** ( - gamdi_grot )  
         ENDDO  
         cu_2d       (iip1,j)  = cu_2d(1,j)  
         unscu2_2d   (iip1,j)  = unscu2_2d(1,j)  
         cvusurcu_2d (iip1,j)  = cvusurcu_2d(1,j)  
         cusurcvu_2d (iip1,j)  = cusurcvu_2d(1,j)  
         cvuscugam1_2d(iip1,j) = cvuscugam1_2d(1,j)  
         cvuscugam2_2d(iip1,j) = cvuscugam2_2d(1,j)  
         cuscvugam_2d (iip1,j) = cuscvugam_2d(1,j)  
       ENDDO  
   
 c  
 c   ....  calcul aux  poles  ....  
 c  
       DO    i      =  1, iip1  
         cu_2d    ( i, 1 )  =   0.  
         unscu2_2d( i, 1 )  =   0.  
         cvu   ( i, 1 )  =   0.  
 c  
         cu_2d    (i, jjp1) =   0.  
         unscu2_2d(i, jjp1) =   0.  
         cvu   (i, jjp1) =   0.  
       ENDDO  
 c  
 c    ..............................................................  
 c  
       DO j = 1, jjm  
         DO i= 1, iim  
          airvscu2_2d  (i,j) = airev_2d(i,j)/ ( cuv(i,j) * cuv(i,j) )  
          aivscu2gam_2d(i,j) = airvscu2_2d(i,j)** ( - gamdi_grot )  
         ENDDO  
          airvscu2_2d  (iip1,j)  = airvscu2_2d(1,j)  
          aivscu2gam_2d(iip1,j)  = aivscu2gam_2d(1,j)  
       ENDDO  
   
       DO j=2,jjm  
         DO i=1,iim  
          airuscv2_2d   (i,j)    = aireu_2d(i,j)/ ( cvu(i,j) * cvu(i,j) )  
          aiuscv2gam_2d (i,j)    = airuscv2_2d(i,j)** ( - gamdi_grot )  
         ENDDO  
          airuscv2_2d  (iip1,j)  = airuscv2_2d  (1,j)  
          aiuscv2gam_2d(iip1,j)  = aiuscv2gam_2d(1,j)  
       ENDDO  
   
 c  
 c   calcul des aires aux  poles :  
 c   -----------------------------  
 c  
       apoln       = SSUM(iim,aire_2d(1,1),1)  
       apols       = SSUM(iim,aire_2d(1,jjp1),1)  
       unsapolnga1 = 1./ ( apoln ** ( - gamdi_gdiv ) )  
       unsapolsga1 = 1./ ( apols ** ( - gamdi_gdiv ) )  
       unsapolnga2 = 1./ ( apoln ** ( - gamdi_h    ) )  
       unsapolsga2 = 1./ ( apols ** ( - gamdi_h    ) )  
 c  
 c----------------------------------------------------------------  
 c     gtitre='Coriolis version ancienne'  
 c     gfichier='fext1'  
 c     CALL writestd(fext_2d,iip1*jjm)  
 c  
 c   changement F. Hourdin calcul conservatif pour fext_2d  
 c   constang_2d contient le produit a * cos ( latitude ) * omega  
 c  
       DO i=1,iim  
          constang_2d(i,1) = 0.  
       ENDDO  
       DO j=1,jjm-1  
         DO i=1,iim  
          constang_2d(i,j+1) = rad*omeg*cu_2d(i,j+1)*COS(rlatu(j+1))  
         ENDDO  
       ENDDO  
       DO i=1,iim  
          constang_2d(i,jjp1) = 0.  
       ENDDO  
 c  
 c   periodicite en longitude  
 c  
       DO j=1,jjm  
         fext_2d(iip1,j)     = fext_2d(1,j)  
       ENDDO  
       DO j=1,jjp1  
         constang_2d(iip1,j) = constang_2d(1,j)  
       ENDDO  
   
 c fin du changement  
   
 c  
 c----------------------------------------------------------------  
 c  
        WRITE(6,*) '   ***  Coordonnees de la grille  *** '  
        WRITE(6,995)  
 c  
        WRITE(6,*) '   LONGITUDES  aux pts.   V  ( degres )  '  
        WRITE(6,995)  
         DO i=1,iip1  
          rlonvv(i) = rlonv(i)*180./pi  
         ENDDO  
        WRITE(6,400) rlonvv  
 c  
        WRITE(6,995)  
        WRITE(6,*) '   LATITUDES   aux pts.   V  ( degres )  '  
        WRITE(6,995)  
         DO i=1,jjm  
          rlatuu(i)=rlatv(i)*180./pi  
         ENDDO  
        WRITE(6,400) (rlatuu(i),i=1,jjm)  
 c  
         DO i=1,iip1  
           rlonvv(i)=rlonu(i)*180./pi  
         ENDDO  
        WRITE(6,995)  
        WRITE(6,*) '   LONGITUDES  aux pts.   U  ( degres )  '  
        WRITE(6,995)  
        WRITE(6,400) rlonvv  
        WRITE(6,995)  
   
        WRITE(6,*) '   LATITUDES   aux pts.   U  ( degres )  '  
        WRITE(6,995)  
         DO i=1,jjp1  
          rlatuu(i)=rlatu(i)*180./pi  
         ENDDO  
        WRITE(6,400) (rlatuu(i),i=1,jjp1)  
        WRITE(6,995)  
 c  
 444    format(f10.3,f6.0)  
 400    FORMAT(1x,8f8.2)  
 990    FORMAT(//)  
 995    FORMAT(/)  
 c  
       RETURN  
       END  

Legend:
Removed from v.3  
changed lines
  Added in v.60

  ViewVC Help
Powered by ViewVC 1.1.21