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

  ViewVC Help
Powered by ViewVC 1.1.21