LMDZ
advect_p.F
Go to the documentation of this file.
1 !
2 ! $Header$
3 !
4  SUBROUTINE advect_p(ucov,vcov,teta,w,massebx,masseby,du,dv,dteta)
6  USE write_field_p
7  IMPLICIT NONE
8 c=======================================================================
9 c
10 c Auteurs: P. Le Van , Fr. Hourdin .
11 c -------
12 c
13 c Objet:
14 c ------
15 c
16 c *************************************************************
17 c .... calcul des termes d'advection vertic.pour u,v,teta,q ...
18 c *************************************************************
19 c ces termes sont ajoutes a du,dv,dteta et dq .
20 c Modif F.Forget 03/94 : on retire q de advect
21 c
22 c=======================================================================
23 c-----------------------------------------------------------------------
24 c Declarations:
25 c -------------
26 
27 #include "dimensions.h"
28 #include "paramet.h"
29 #include "comconst.h"
30 #include "comvert.h"
31 #include "comgeom.h"
32 #include "logic.h"
33 #include "ener.h"
34 
35 c Arguments:
36 c ----------
37 
38  REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
39  REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),w(ip1jmp1,llm)
40  REAL dv(ip1jm,llm),du(ip1jmp1,llm),dteta(ip1jmp1,llm)
41 
42 c Local:
43 c ------
44 
45  REAL uav(ip1jmp1,llm),vav(ip1jm,llm),wsur2(ip1jmp1)
46  REAL unsaire2(ip1jmp1), ge(ip1jmp1)
47  REAL deuxjour, ww, gt, uu, vv
48 
49  INTEGER ij,l,ijb,ije
50 
51  EXTERNAL ssum
52  REAL SSUM
53 
54 c-----------------------------------------------------------------------
55 c 2. Calculs preliminaires:
56 c -------------------------
57 
58  IF (conser) THEN
59  deuxjour = 2. * daysec
60 
61  DO 1 ij = 1, ip1jmp1
62  unsaire2(ij) = unsaire(ij) * unsaire(ij)
63  1 CONTINUE
64  END IF
65 
66 
67 c------------------ -yy ----------------------------------------------
68 c . Calcul de u
69 
70  DO l=1,llm
71 
72  ijb=ij_begin
73  ije=ij_end
74  if (pole_nord) ijb=ijb+iip1
75  if (pole_sud) ije=ije-iip1
76 
77 c DO ij = iip2, ip1jmp1
78 c uav(ij,l) = 0.25 * ( ucov(ij,l) + ucov(ij-iip1,l) )
79 c ENDDO
80 
81 c DO ij = iip2, ip1jm
82 c uav(ij,l) = uav(ij,l) + uav(ij+iip1,l)
83 c ENDDO
84 
85  DO ij = ijb, ije
86 
87  uav(ij,l)=0.25*(ucov(ij,l)+ucov(ij-iip1,l))
88  . +0.25*(ucov(ij+iip1,l)+ucov(ij,l))
89  ENDDO
90 
91  if (pole_nord) then
92  DO ij = 1, iip1
93  uav(ij ,l) = 0.
94  ENDDO
95  endif
96 
97  if (pole_sud) then
98  DO ij = 1, iip1
99  uav(ip1jm+ij,l) = 0.
100  ENDDO
101  endif
102 
103  ENDDO
104 
105 c call write_field3d_p('uav',reshape(uav,(/iip1,jjp1,llm/)))
106 
107 c------------------ -xx ----------------------------------------------
108 c . Calcul de v
109 
110  ijb=ij_begin
111  ije=ij_end
112  if (pole_sud) ije=ij_end-iip1
113 
114  DO l=1,llm
115 
116  DO ij = ijb+1, ije
117  vav(ij,l) = 0.25 * ( vcov(ij,l) + vcov(ij-1,l) )
118  ENDDO
119 
120  DO ij = ijb,ije,iip1
121  vav(ij,l) = vav(ij+iim,l)
122  ENDDO
123 
124 
125  DO ij = ijb, ije-1
126  vav(ij,l) = vav(ij,l) + vav(ij+1,l)
127  ENDDO
128 
129  DO ij = ijb, ije, iip1
130  vav(ij+iim,l) = vav(ij,l)
131  ENDDO
132 
133  ENDDO
134 c call write_field3d_p('vav',reshape(vav,(/iip1,jjm,llm/)))
135 c-----------------------------------------------------------------------
136 
137 
138 
139  DO 20 l = 1, llmm1
140 
141 
142 c ...... calcul de - w/2. au niveau l+1 .......
143  ijb=ij_begin
144  ije=ij_end+iip1
145  if (pole_sud) ije=ij_end
146 
147  DO 5 ij = ijb, ije
148  wsur2( ij ) = - 0.5 * w( ij,l+1 )
149  5 CONTINUE
150 
151 
152 c ..................... calcul pour du ..................
153 
154  ijb=ij_begin
155  ije=ij_end
156  if (pole_nord) ijb=ijb+iip1
157  if (pole_sud) ije=ije-iip1
158 
159  DO 6 ij = ijb ,ije-1
160  ww = wsur2( ij ) + wsur2( ij+1 )
161  uu = 0.5 * ( ucov(ij,l) + ucov(ij,l+1) )
162  du(ij,l) = du(ij,l) - ww * ( uu - uav(ij, l ) )/massebx(ij, l )
163  du(ij,l+1)= du(ij,l+1) + ww * ( uu - uav(ij,l+1) )/massebx(ij,l+1)
164  6 CONTINUE
165 
166 c ..... correction pour du(iip1,j,l) ........
167 c ..... du(iip1,j,l)= du(1,j,l) .....
168 
169 CDIR$ IVDEP
170  DO 7 ij = ijb+iip1-1, ije, iip1
171  du( ij, l ) = du( ij -iim, l )
172  du( ij,l+1 ) = du( ij -iim,l+1 )
173  7 CONTINUE
174 
175 c ................. calcul pour dv .....................
176  ijb=ij_begin
177  ije=ij_end
178  if (pole_sud) ije=ij_end-iip1
179 
180  DO 8 ij = ijb, ije
181  ww = wsur2( ij+iip1 ) + wsur2( ij )
182  vv = 0.5 * ( vcov(ij,l) + vcov(ij,l+1) )
183  dv(ij,l) = dv(ij, l ) - ww * (vv - vav(ij, l ) )/masseby(ij, l )
184  dv(ij,l+1)= dv(ij,l+1) + ww * (vv - vav(ij,l+1) )/masseby(ij,l+1)
185  8 CONTINUE
186 
187 c
188 
189 c ............................................................
190 c ............... calcul pour dh ...................
191 c ............................................................
192 
193 c ---z
194 c calcul de - d( teta * w ) qu'on ajoute a dh
195 c ...............
196  ijb=ij_begin
197  ije=ij_end
198 
199  DO 15 ij = ijb, ije
200  ww = wsur2(ij) * (teta(ij,l) + teta(ij,l+1) )
201  dteta(ij, l ) = dteta(ij, l ) - ww
202  dteta(ij,l+1) = dteta(ij,l+1) + ww
203  15 CONTINUE
204 
205 c ym ---> conser a voir plus tard
206 
207 c IF( conser) THEN
208 c
209 c DO 17 ij = 1,ip1jmp1
210 c ge(ij) = wsur2(ij) * wsur2(ij) * unsaire2(ij)
211 c 17 CONTINUE
212 c gt = SSUM( ip1jmp1,ge,1 )
213 c gtot(l) = deuxjour * SQRT( gt/ip1jmp1 )
214 c END IF
215 
216  20 CONTINUE
217 
218  RETURN
219  END
!$Header llmm1 INTEGER ip1jmp1
Definition: paramet.h:14
subroutine advect_p(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta)
Definition: advect_p.F:5
integer, save ij_end
logical, save pole_sud
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
!$Header llmm1 INTEGER ip1jm
Definition: paramet.h:14
!$Id conser
Definition: logic.h:10
logical, save pole_nord
!$Id mode_top_bound COMMON comconstr daysec
Definition: comconst.h:7
integer, save ij_begin
c c zjulian c cym CALL iim cym klev iim
Definition: ini_bilKP_ave.h:24
!$Header!CDK comgeom COMMON comgeom unsaire
Definition: comgeom.h:25
real function ssum(n, sx, incx)
Definition: cray.F:27