4 SUBROUTINE prather (q,w,masse,pbaru,pbarv,nt,dt)
21 #include "dimensions.h"
50 real sxn(iip1),sxs(iip1)
52 real sinlon(iip1),sinlondlon(iip1)
53 real coslon(iip1),coslondlon(iip1)
56 save sinlon,coslon,sinlondlon,coslondlon
57 real dyn1,dyn2,dys1,dys2,qpn,qps,dqzpn,dqzps
62 EXTERNAL ssum, ismin,ismax
69 data qmin,qmax/-1.e33,1.e33/
82 print*,
'SCHEMA PRATHER'
85 coslon(i)=cos(
rlonv(i))
86 sinlon(i)=sin(
rlonv(i))
90 coslon(1)=coslon(iip1)
91 coslondlon(1)=coslondlon(iip1)
92 sinlon(1)=sinlon(iip1)
93 sinlondlon(1)=sinlondlon(iip1)
118 sm( i,j,
llm+1-l ) =masse(i,j,l)
130 s0( i,j,l) = q( i,j,
llm+1-l,0 )*sm(i,j,l)
131 sx( i,j,l) = q( i,j,
llm+1-l,1 )*sm(i,j,l)
132 sy( i,j,l) = q( i,j,
llm+1-l,2)*sm(i,j,l)
133 sz( i,j,l) = q( i,j,
llm+1-l,3)*sm(i,j,l)
134 sxx( i,j,l) = q( i,j,
llm+1-l,4)*sm(i,j,l)
135 sxy( i,j,l) = q( i,j,
llm+1-l,5)*sm(i,j,l)
136 sxz( i,j,l) = q( i,j,
llm+1-l,6)*sm(i,j,l)
137 syy( i,j,l) = q( i,j,
llm+1-l,7)*sm(i,j,l)
138 syz( i,j,l) = q( i,j,
llm+1-l,8)*sm(i,j,l)
139 szz( i,j,l) = q( i,j,
llm+1-l,9)*sm(i,j,l)
148 call advxp(
limit,0.5*dt,pbaru,sm,s0,sx,sy,sz
149 . ,sxx,sxy,sxz,syy,syz,szz,1 )
158 call advyp(
limit,.5*dt*nt,pbarv,sm,s0,sx,sy,sz
159 . ,sxx,sxy,sxz,syy,syz,szz,1 )
176 . ,sxx,sxy,sxz,syy,syz,szz,1 )
187 call advyp(
limit,.5*dt*nt,pbarv,sm,s0,sx,sy,sz
188 . ,sxx,sxy,sxz,syy,syz,szz,1 )
192 s0( iip1,j,l)=s0( 1,j,l )
193 sx( iip1,j,l)=sx( 1,j,l )
194 sy( iip1,j,l)=sy( 1,j,l )
195 sz( iip1,j,l)=sz( 1,j,l )
196 sxx( iip1,j,l)=sxx( 1,j,l )
197 sxy( iip1,j,l)=sxy( 1,j,l)
198 sxz( iip1,j,l)=sxz( 1,j,l )
199 syy( iip1,j,l)=syy( 1,j,l )
200 syz( iip1,j,l)=syz( 1,j,l)
201 szz( iip1,j,l)=szz( 1,j,l )
205 call advxp(
limit,0.5*dt,pbaru,sm,s0,sx,sy,sz
206 . ,sxx,sxy,sxz,syy,syz,szz,1 )
216 q( i,j,
llm+1-l,0 )=s0( i,j,l )/sm(i,j,l)
217 q( i,j,
llm+1-l,1 ) = sx( i,j,l )/sm(i,j,l)
218 q( i,j,
llm+1-l,2 ) = sy( i,j,l )/sm(i,j,l)
219 q( i,j,
llm+1-l,3 ) = sz( i,j,l )/sm(i,j,l)
220 q( i,j,
llm+1-l,4 ) = sxx( i,j,l )/sm(i,j,l)
221 q( i,j,
llm+1-l,5 ) = sxy( i,j,l )/sm(i,j,l)
222 q( i,j,
llm+1-l,6 ) = sxz( i,j,l )/sm(i,j,l)
223 q( i,j,
llm+1-l,7 ) = syy( i,j,l )/sm(i,j,l)
224 q( i,j,
llm+1-l,8 ) = syz( i,j,l )/sm(i,j,l)
225 q( i,j,
llm+1-l,9 ) = szz( i,j,l )/sm(i,j,l)
239 masn=ssum(
iim,sm(1,1,l),1)
241 qpn=ssum(
iim,s0(1,1,l),1)/masn
242 qps=ssum(
iim,s0(1,
jjp1,l),1)/mass
243 dqzpn=ssum(
iim,sz(1,1,l),1)/masn
244 dqzps=ssum(
iim,sz(1,
jjp1,l),1)/mass
246 q( i,1,
llm+1-l,3)=dqzpn
248 q( i,1,
llm+1-l,0)=qpn
260 zz=s0(i,2,l)/sm(i,2,l)-q(i,1,
llm+1-l,0)
261 dyn1=dyn1+sinlondlon(i)*zz
262 dyn2=dyn2+coslondlon(i)*zz
263 zz=q(i,
jjp1,
llm+1-l,0)-s0(i,jjm,l)/sm(i,jjm,l)
264 dys1=dys1+sinlondlon(i)*zz
265 dys2=dys2+coslondlon(i)*zz
269 $ (sinlon(i)*dyn1+coslon(i)*dyn2)/2.
270 q(i,1,
llm+1-l,0)=q(i,1,
llm+1-l,0)
273 $ (sinlon(i)*dys1+coslon(i)*dys2)/2.
277 q(iip1,1,
llm+1-l,0)=q(1,1,
llm+1-l,0)
280 sxn(i)=q(i+1,1,
llm+1-l,0)-q(i,1,
llm+1-l,0)
286 q(i+1,1,
llm+1-l,1)=0.25*(sxn(i)+sxn(i+1))
287 q(i+1,
jjp1,
llm+1-l,1)=0.25*(sxs(i)+sxs(i+1))
289 q(1,1,
llm+1-l,1)=q(iip1,1,
llm+1-l,1)
315 q(iip1,j,l,0)=q(1,j,l,0)
316 q(iip1,j,
llm+1-l,0)=q(1,j,
llm+1-l,0)
317 q(iip1,j,
llm+1-l,1)=q(1,j,
llm+1-l,1)
318 q(iip1,j,
llm+1-l,2)=q(1,j,
llm+1-l,2)
319 q(iip1,j,
llm+1-l,3)=q(1,j,
llm+1-l,3)
320 q(iip1,j,
llm+1-l,4)=q(1,j,
llm+1-l,4)
321 q(iip1,j,
llm+1-l,5)=q(1,j,
llm+1-l,5)
322 q(iip1,j,
llm+1-l,6)=q(1,j,
llm+1-l,6)
323 q(iip1,j,
llm+1-l,7)=q(1,j,
llm+1-l,7)
324 q(iip1,j,
llm+1-l,8)=q(1,j,
llm+1-l,8)
325 q(iip1,j,
llm+1-l,9)=q(1,j,
llm+1-l,9)
331 IF (q(i,j,l,0).lt.0.)
THEN
332 print*,
'------------ BIP-----------'
333 print*,
'S0(',i,j,l,
')=',q(i,j,l,0),
335 print*,
'SX(',i,j,l,
')=',q(i,j,l,1)
336 print*,
'SY(',i,j,l,
')=',q(i,j,l,2),
338 print*,
'SZ(',i,j,l,
')=',q(i,j,l,3)
347 IF (q(i,j,l,0).lt.0.)
THEN
348 print*,
'------------ BIP 2-----------'
349 print*,
'S0(',i,j,l,
')=',q(i,j,l,0)
350 print*,
'SX(',i,j,l,
')=',q(i,j,l,1)
351 print*,
'SY(',i,j,l,
')=',q(i,j,l,2)
352 print*,
'SZ(',i,j,l,
')=',q(i,j,l,3)
!$Header llmm1 INTEGER ip1jmp1
subroutine advzp(LIMIT, DTZ, W, SM, S0, SSX, SY, SZ, SSXX, SSXY, SSXZ, SYY, SYZ, SZZ, ntra)
!$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
!$Id mode_top_bound COMMON comconstr && pi
!$Header llmm1 INTEGER ip1jm
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Header!CDK comgeom COMMON comgeom rlonu
subroutine prather(q, w, masse, pbaru, pbarv, nt, dt)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
c c zjulian c cym CALL iim cym klev iim
subroutine advyp(LIMIT, DTY, PBARV, SM, S0, SSX, SY, SZ, SSXX, SSXY, SSXZ, SYY, SYZ, SZZ, ntra)
!$Header!CDK comgeom COMMON comgeom rlonv