source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/dyn/divergf_p.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 6.2 KB
Line 
1      SUBROUTINE divergf_p(klevel,x,y,div)
2c
3c     P. Le Van
4c
5c  *********************************************************************
6c  ... calcule la divergence a tous les niveaux d'1 vecteur de compos.
7c     x et y...
8c              x et y  etant des composantes covariantes   ...
9c  *********************************************************************
10      USE parallel_lmdz
11      IMPLICIT NONE
12c
13c      x  et  y  sont des arguments  d'entree pour le s-prog
14c        div      est  un argument  de sortie pour le s-prog
15c
16c
17c   ---------------------------------------------------------------------
18c
19c    ATTENTION : pendant ce s-pg , ne pas toucher au COMMON/scratch/  .
20c
21c   ---------------------------------------------------------------------
22!-----------------------------------------------------------------------
23!   INCLUDE 'dimensions.h'
24!
25!   dimensions.h contient les dimensions du modele
26!   ndm est tel que iim=2**ndm
27!-----------------------------------------------------------------------
28
29      INTEGER iim,jjm,llm,ndm
30
31      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
32
33!-----------------------------------------------------------------------
34!
35! $Header$
36!
37!
38!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
39!                 veillez  n'utiliser que des ! pour les commentaires
40!                 et  bien positionner les & des lignes de continuation
41!                 (les placer en colonne 6 et en colonne 73)
42!
43!
44!-----------------------------------------------------------------------
45!   INCLUDE 'paramet.h'
46
47      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
48      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
49      INTEGER  ijmllm,mvar
50      INTEGER jcfil,jcfllm
51
52      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
53     &    ,jjp1=jjm+1-1/jjm)
54      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
55      PARAMETER( kftd  = iim/2 -ndm )
56      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
57      PARAMETER( ip1jmi1= ip1jm - iip1 )
58      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
59      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
60      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
61
62!-----------------------------------------------------------------------
63!
64! $Header$
65!
66!CDK comgeom
67      COMMON/comgeom/                                                   &
68     & cu(ip1jmp1),cv(ip1jm),unscu2(ip1jmp1),unscv2(ip1jm),             &
69     & aire(ip1jmp1),airesurg(ip1jmp1),aireu(ip1jmp1),                  &
70     & airev(ip1jm),unsaire(ip1jmp1),apoln,apols,                       &
71     & unsairez(ip1jm),airuscv2(ip1jm),airvscu2(ip1jm),                 &
72     & aireij1(ip1jmp1),aireij2(ip1jmp1),aireij3(ip1jmp1),              &
73     & aireij4(ip1jmp1),alpha1(ip1jmp1),alpha2(ip1jmp1),                &
74     & alpha3(ip1jmp1),alpha4(ip1jmp1),alpha1p2(ip1jmp1),               &
75     & alpha1p4(ip1jmp1),alpha2p3(ip1jmp1),alpha3p4(ip1jmp1),           &
76     & fext(ip1jm),constang(ip1jmp1),rlatu(jjp1),rlatv(jjm),            &
77     & rlonu(iip1),rlonv(iip1),cuvsurcv(ip1jm),cvsurcuv(ip1jm),         &
78     & cvusurcu(ip1jmp1),cusurcvu(ip1jmp1),cuvscvgam1(ip1jm),           &
79     & cuvscvgam2(ip1jm),cvuscugam1(ip1jmp1),                           &
80     & cvuscugam2(ip1jmp1),cvscuvgam(ip1jm),cuscvugam(ip1jmp1),         &
81     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2,                 &
82     & unsair_gam1(ip1jmp1),unsair_gam2(ip1jmp1),unsairz_gam(ip1jm),    &
83     & aivscu2gam(ip1jm),aiuscv2gam(ip1jm),xprimu(iip1),xprimv(iip1)
84
85!
86        REAL                                                            &
87     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,unsaire,apoln     ,&
88     & apols,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4,&
89     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 ,&
90     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     ,&
91     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1,unsapolnga2&
92     & ,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2,unsairz_gam    ,&
93     & aivscu2gam ,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu,cusurcvu,xprimu&
94     & , xprimv
95!
96c
97c    ..........          variables en arguments    ...................
98c
99      INTEGER klevel
100      REAL x( ip1jmp1,klevel ),y( ip1jm,klevel ),div( ip1jmp1,klevel )
101      INTEGER   l,ij
102c
103c    ...............     variables  locales   .........................
104
105      REAL aiy1( iip1 ) , aiy2( iip1 )
106      REAL sumypn,sumyps
107c    ...................................................................
108c
109      EXTERNAL  SSUM
110      REAL      SSUM
111      INTEGER :: ijb,ije,jjb,jje
112c
113c
114      ijb=ij_begin
115      ije=ij_end
116      if (pole_nord) ijb=ij_begin+iip1
117      if(pole_sud)  ije=ij_end-iip1
118
119c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
120      DO 10 l = 1,klevel
121c
122        DO  ij = ijb, ije - 1
123         div( ij + 1, l )     = 
124     *   cvusurcu( ij+1 ) * x( ij+1,l ) - cvusurcu( ij ) * x( ij , l) +
125     *   cuvsurcv(ij-iim) * y(ij-iim,l) - cuvsurcv(ij+1) * y(ij+1,l) 
126        ENDDO
127
128c
129c     ....  correction pour  div( 1,j,l)  ......
130c     ....   div(1,j,l)= div(iip1,j,l) ....
131c
132CDIR$ IVDEP
133        DO  ij = ijb,ije,iip1
134         div( ij,l ) = div( ij + iim,l )
135        ENDDO
136c
137c     ....  calcul  aux poles  .....
138c
139        if (pole_nord) then
140       
141          DO  ij  = 1,iim
142           aiy1(ij) =    cuvsurcv(    ij       ) * y(     ij     , l )
143          ENDDO
144          sumypn = SSUM ( iim,aiy1,1 ) / apoln
145
146c
147          DO  ij = 1,iip1
148           div(     ij    , l ) = - sumypn
149          ENDDO
150         
151        endif
152       
153        if (pole_sud) then
154       
155          DO  ij  = 1,iim
156           aiy2(ij) =    cuvsurcv( ij+ ip1jmi1 ) * y( ij+ ip1jmi1, l )
157          ENDDO
158          sumyps = SSUM ( iim,aiy2,1 ) / apols
159c
160          DO  ij = 1,iip1
161           div( ij + ip1jm, l ) =   sumyps
162          ENDDO
163         
164        endif
165       
166  10    CONTINUE
167c$OMP END DO NOWAIT
168
169c
170        jjb=jj_begin
171        jje=jj_end
172        if (pole_sud) jje=jj_end-1
173       
174        CALL filtreg_p( div,jjb,jje, jjp1, klevel, 2, 2, .TRUE., 1 )
175     
176c
177c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
178        DO l = 1, klevel
179           DO ij = ijb,ije
180            div(ij,l) = div(ij,l) * unsaire(ij) 
181          ENDDO
182        ENDDO
183c$OMP END DO NOWAIT
184c
185       RETURN
186       END
Note: See TracBrowser for help on using the repository browser.