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

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 5.9 KB
Line 
1      SUBROUTINE gradiv_p(klevel, xcov, ycov, ld, gdx_out, gdy_out )
2c
3c    Auteur :   P. Le Van
4c
5c   ***************************************************************
6c
7c                                ld
8c       calcul  de  (grad (div) )   du vect. v ....
9c
10c     xcov et ycov etant les composant.covariantes de v
11c   ****************************************************************
12c    xcov , ycov et ld  sont des arguments  d'entree pour le s-prog
13c     gdx   et  gdy     sont des arguments de sortie pour le s-prog
14c
15c     
16      USE parallel_lmdz
17      USE times
18      IMPLICIT NONE
19c
20!-----------------------------------------------------------------------
21!   INCLUDE 'dimensions.h'
22!
23!   dimensions.h contient les dimensions du modele
24!   ndm est tel que iim=2**ndm
25!-----------------------------------------------------------------------
26
27      INTEGER iim,jjm,llm,ndm
28
29      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
30
31!-----------------------------------------------------------------------
32!
33! $Header$
34!
35!
36!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
37!                 veillez  n'utiliser que des ! pour les commentaires
38!                 et  bien positionner les & des lignes de continuation
39!                 (les placer en colonne 6 et en colonne 73)
40!
41!
42!-----------------------------------------------------------------------
43!   INCLUDE 'paramet.h'
44
45      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
46      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
47      INTEGER  ijmllm,mvar
48      INTEGER jcfil,jcfllm
49
50      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
51     &    ,jjp1=jjm+1-1/jjm)
52      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
53      PARAMETER( kftd  = iim/2 -ndm )
54      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
55      PARAMETER( ip1jmi1= ip1jm - iip1 )
56      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
57      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
58      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
59
60!-----------------------------------------------------------------------
61!
62! $Header$
63!
64!  Attention : ce fichier include est compatible format fixe/format libre
65!                 veillez à n'utiliser que des ! pour les commentaires
66!                 et à bien positionner les & des lignes de continuation
67!                 (les placer en colonne 6 et en colonne 73)
68!-----------------------------------------------------------------------
69! INCLUDE comdissipn.h
70
71      REAL  tetaudiv, tetaurot, tetah, cdivu, crot, cdivh
72!
73      COMMON/comdissipn/ tetaudiv(llm),tetaurot(llm),tetah(llm)   ,     &
74     &                        cdivu,      crot,         cdivh
75
76!
77!    Les parametres de ce common proviennent des calculs effectues dans
78!             Inidissip  .
79!
80!-----------------------------------------------------------------------
81!
82! $Id: logic.h 1520 2011-05-23 11:37:09Z emillour $
83!
84!
85! NB: keep items of different kinds in seperate common blocs to avoid
86!     "misaligned commons" issues
87!-----------------------------------------------------------------------
88! INCLUDE 'logic.h'
89
90      COMMON/logicl/ purmats,forward,leapf,apphys,                      &
91     &  statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus       &
92     &  ,read_start,ok_guide,ok_strato,tidal,ok_gradsfile               &
93     &  ,ok_limit,ok_etat0,hybrid                                       &
94     &  ,moyzon_mu,moyzon_ch
95
96      COMMON/logici/ iflag_phys,iflag_trac
97     
98      LOGICAL purmats,forward,leapf,apphys,statcl,conser,               &
99     & apdiss,apdelq,saison,ecripar,fxyhypb,ysinus                      &
100     &  ,read_start,ok_guide,ok_strato,tidal,ok_gradsfile               &
101     &  ,ok_limit,ok_etat0
102      logical hybrid ! vertical coordinate is hybrid if true (sigma otherwise)
103                     ! (only used if disvert_type==2)
104      logical moyzon_mu,moyzon_ch ! used for zonal averages in Titan
105
106      integer iflag_phys,iflag_trac
107!$OMP THREADPRIVATE(/logicl/)
108!$OMP THREADPRIVATE(/logici/)
109!-----------------------------------------------------------------------
110
111      INTEGER klevel
112c
113      REAL xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
114      REAL,SAVE :: gdx( ip1jmp1,llm ),   gdy( ip1jm,llm )
115
116      REAL gdx_out( ip1jmp1,klevel ),   gdy_out( ip1jm,klevel )
117
118      REAL,SAVE ::  div(ip1jmp1,llm)
119
120      INTEGER l,ij,iter,ld
121c
122      INTEGER ijb,ije,jjb,jje
123c
124c
125c      CALL SCOPY( ip1jmp1*klevel,xcov,1,gdx,1 )
126c      CALL SCOPY( ip1jm*klevel,  ycov,1,gdy,1 )
127     
128      ijb=ij_begin
129      ije=ij_end
130
131c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
132      DO l = 1,klevel
133        gdx(ijb:ije,l)=xcov(ijb:ije,l)
134      ENDDO
135c$OMP END DO NOWAIT
136     
137      ijb=ij_begin
138      ije=ij_end
139      if(pole_sud) ije=ij_end-iip1
140
141c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
142      DO l = 1,klevel
143        gdy(ijb:ije,l)=ycov(ijb:ije,l)
144      ENDDO
145c$OMP END DO NOWAIT
146
147c
148      DO 10 iter = 1,ld
149
150c$OMP BARRIER
151c$OMP MASTER     
152      call suspend_timer(timer_dissip)
153      call exchange_Hallo(gdy,ip1jm,llm,1,0)
154      call resume_timer(timer_dissip)
155c$OMP END MASTER     
156c$OMP BARRIER
157
158      CALL  diverg_p( klevel,  gdx , gdy, div          )
159     
160      jjb=jj_begin
161      jje=jj_end
162      CALL filtreg_p( div,jjb,jje, jjp1, klevel, 2,1, .true.,2 )
163     
164c      call exchange_Hallo(div,ip1jmp1,llm,0,1)
165
166c$OMP BARRIER
167c$OMP MASTER       
168      call suspend_timer(timer_dissip)
169      call exchange_Hallo(div,ip1jmp1,llm,1,1)
170      call resume_timer(timer_dissip)
171c$OMP END MASTER
172c$OMP BARRIER
173     
174      CALL    grad_p( klevel,  div, gdx, gdy           )
175c
176
177c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
178      DO 5  l = 1, klevel
179     
180      if(pole_sud) ije=ij_end
181      DO 3 ij = ijb, ije
182        gdx_out( ij,l ) = - gdx( ij,l ) * cdivu
183   3  CONTINUE
184   
185      if(pole_sud) ije=ij_end-iip1
186      DO 4 ij = ijb, ije
187        gdy_out( ij,l ) = - gdy( ij,l ) * cdivu
188   4  CONTINUE
189
190   5  CONTINUE
191c$OMP END DO NOWAIT
192c
193  10  CONTINUE
194      RETURN
195      END
Note: See TracBrowser for help on using the repository browser.