4 SUBROUTINE vdif_kcay(ngrid,dt,g,rconst,plev,temp
5 s ,zlev,
zlay,
u,
v,
teta,cd,q2,q2diag,km,kn,ustar
37 real ustar(klon),snstable
38 REAL zlev(klon,
klev+1)
44 REAL q2(klon,
klev+1),q2s(klon,
klev+1)
45 REAL q2diag(klon,
klev+1)
48 real sq(klon),sqz(klon),zz(klon,
klev+1),zq,long0(klon)
63 INTEGER nlay,nlev,ngrid
65 REAL unsdzdec(klon,
klev+1)
77 REAL kmpre(klon,
klev+1)
86 REAL long(klon,
klev+1)
110 REAL mpre(klon,
klev+1)
136 REAL snq2(klon,
klev+1)
138 REAL smq2(klon,
klev+1)
181 INTEGER ilay,ilev,igrid
202 & cn1=a2*(1.e+0 -6.e+0 *a1/b1)
205 & cn2=-3.e+0 *a2*(6.e+0 *a1+b2)
208 & cm1=a1*(1.e+0 -3.e+0 *c1-6.e+0 *a1/b1)
211 & cm2=a1*(-3.e+0 *a2*((b2-3.e+0 *a2)*(1.e+0 -6.e+0 *a1/b1)
212 & -3.e+0 *c1*(b2+6.e+0 *a1)))
215 & cm3=-3.e+0 *a2*(6.e+0 *a1+b2)
234 s ,zlev,
zlay,
u,
v,
teta,cd,q2diag,km,kn,ustar
236 if (first.and.1.eq.1)
then
243 q2(igrid,ilev)=amax1(q2(igrid,ilev),q2min)
244 q(igrid,ilev)=sqrt(q2(igrid,ilev))
249 tmp1=cd(igrid)*(
u(igrid,1)**2+
v(igrid,1)**2)
250 q2(igrid,1)=b1**(2.e+0/3.e+0)*tmp1
251 q2(igrid,1)=amax1(q2(igrid,1),q2min)
252 q(igrid,1)=sqrt(q2(igrid,1))
264 & +(
zlay(igrid,
nlay) - zlev(igrid,nlev-1) )
271 unsdz(igrid,ilay)=1.e+0/(zlev(igrid,ilay+1)-zlev(igrid,ilay))
275 unsdzdec(igrid,1)=1.e+0/(
zlay(igrid,1)-zlev(igrid,1))
279 unsdzdec(igrid,ilay)=1.e+0/(
zlay(igrid,ilay)-
zlay(igrid,ilay-1))
291 m2(igrid,1)=(unsdzdec(igrid,1)
293 & +(unsdzdec(igrid,1)
295 m(igrid,1)=sqrt(m2(igrid,1))
296 mpre(igrid,1)=
m(igrid,1)
304 n2(igrid,ilev)=
g*unsdzdec(igrid,ilev)
305 & *(
teta(igrid,ilev)-
teta(igrid,ilev-1))
306 & /(
teta(igrid,ilev)+
teta(igrid,ilev-1)) *2.e+0
317 IF (n2(igrid,ilev).lt.0.e+0)
THEN
321 m2(igrid,ilev)=(unsdzdec(igrid,ilev)
322 & *(
u(igrid,ilev)-
u(igrid,ilev-1)))**2
323 & +(unsdzdec(igrid,ilev)
324 & *(
v(igrid,ilev)-
v(igrid,ilev-1)))**2
325 m(igrid,ilev)=sqrt(m2(igrid,ilev))
326 mpre(igrid,ilev)=
m(igrid,ilev)
334 m2(igrid,nlev)=m2(igrid,nlev-1)
335 m(igrid,nlev)=
m(igrid,nlev-1)
336 mpre(igrid,nlev)=
m(igrid,nlev)
350 zq=sqrt(q2(igrid,ilev))
352 . =sqz(igrid)+zq*zlev(igrid,ilev)
353 . *(
zlay(igrid,ilev)-
zlay(igrid,ilev-1))
354 sq(igrid)=sq(igrid)+zq*(
zlay(igrid,ilev)-
zlay(igrid,ilev-1))
358 long0(igrid)=0.2*sqz(igrid)/sq(igrid)
360 else if (l_mix.eq.3)
then
371 tmp1=
kappa*(zlev(igrid,ilev)-zlev(igrid,1))
372 if (l_mix.ge.10)
then
373 long(igrid,ilev)=l_mix
375 long(igrid,ilev)=tmp1/(1.e+0 + tmp1/long0(igrid))
377 long(igrid,ilev)=max(min(long(igrid,ilev)
378 s ,0.5*sqrt(q2(igrid,ilev))/sqrt(max(n2(igrid,ilev),1.e-10)))
381 gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
383 gm=long(igrid,ilev)**2 / q2(igrid,ilev)
388 long(igrid,ilev)=long(igrid,ilev)
389 long(igrid,ilev)=long(igrid,ilev)
391 IF (gn.lt.gnmin)
THEN
396 IF (gn.gt.gnmax)
THEN
401 sn(igrid,ilev)=cn1/(1.e+0 +cn2*gn)
407 IF ((gninf).or.(gnsup))
THEN
408 snq2(igrid,ilev)=0.e+0
409 smq2(igrid,ilev)=0.e+0
413 & *(-cn1*cn2/(1.e+0 +cn2*gn)**2 )
416 & *( cm2*(1.e+0 +cm3*gn)
418 & -( cm3*(1.e+0 +cm4*gn)
419 & +cm4*(1.e+0 +cm3*gn) )
422 & *(1.e+0 +cm4*gn) )**2
438 IF (snq2(igrid,ilev)*sn(igrid,ilev).le.0.e+0)
439 & snq2(igrid,ilev)=0.e+0
440 IF (smq2(igrid,ilev)*sm(igrid,ilev).le.0.e+0)
441 & smq2(igrid,ilev)=0.e+0
447 snstable=1.-zlev(igrid,ilev)
448 s /(700.*max(ustar(igrid),0.0001))
449 snstable=1.-zlev(igrid,ilev)/400.
450 snstable=max(snstable,0.)
451 snstable=snstable*snstable
454 if (sn(igrid,ilev).lt.snstable)
then
455 sn(igrid,ilev)=snstable
459 if (sm(igrid,ilev).lt.snstable)
then
460 sm(igrid,ilev)=snstable
480 kmpre(igrid,1)=km(igrid,1)
488 kn(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)
490 km(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)
492 kmpre(igrid,ilev)=km(igrid,ilev)
500 kn(igrid,nlev)=kn(igrid,nlev-1)
501 km(igrid,nlev)=km(igrid,nlev-1)
502 kmpre(igrid,nlev)=km(igrid,nlev)
510 DO 10001 ilev=2,nlev-1
512 DO 10002 igrid=1,ngrid
519 knq3=kn(igrid,ilev)*snq2(igrid,ilev)
521 kmq3=km(igrid,ilev)*smq2(igrid,ilev)
529 tmp1=
dt*2.e+0 *km(igrid,ilev)*m2(igrid,ilev)
530 tmp2=
dt*2.e+0 *kmq3*m2(igrid,ilev)
532 & +
dt*2.e+0 *km(igrid,ilev)*m2(igrid,ilev)
533 & -
dt*2.e+0 *kmq3*m2(igrid,ilev)
535 & +
dt*2.e+0 *kmq3*m2(igrid,ilev)
538 & -
dt*2.e+0 *kn(igrid,ilev)*n2(igrid,ilev)
539 & +
dt*2.e+0 *knq3*n2(igrid,ilev)
541 & -
dt*2.e+0 *knq3*n2(igrid,ilev)
544 & -
dt*2.e+0 *
q(igrid,ilev)**3 / (b1*long(igrid,ilev))
555 tmp2=termqm2+termq3m2
556 m2cstat=m2(igrid,ilev)
557 & -(tmp1+tmp2)/(
dt*2.e+0*km(igrid,ilev))
566 kmcstat=1.e+0 / mcstat
567 & *( unsdz(igrid,ilev)*kmpre(igrid,ilev+1)
568 & *mpre(igrid,ilev+1)
569 & +unsdz(igrid,ilev-1)
571 & *( sqrt(
u(igrid,3)**2+
v(igrid,3)**2)
572 & -mcstat/unsdzdec(igrid,ilev)
573 & -mpre(igrid,ilev+1)/unsdzdec(igrid,ilev+1) )**2)
574 & /( unsdz(igrid,ilev)+unsdz(igrid,ilev-1) )
576 kmcstat=1.e+0 / mcstat
577 & *( unsdz(igrid,ilev)*kmpre(igrid,ilev+1)
578 & *mpre(igrid,ilev+1)
579 & +unsdz(igrid,ilev-1)*kmpre(igrid,ilev-1)
580 & *mpre(igrid,ilev-1) )
581 & /( unsdz(igrid,ilev)+unsdz(igrid,ilev-1) )
584 & /( sm(igrid,ilev)/q2(igrid,ilev) )
586 qcstat=tmp2**(1.e+0/3.e+0)
595 q2(igrid,ilev)=q2cstat
601 m2(igrid,ilev)=m2cstat
607 IF (q2(igrid,ilev).lt.q2min)
THEN
609 q(igrid,ilev)=sqrt(q2min)
617 gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
619 IF (gn.lt.gnmin) gn=gnmin
620 IF (gn.gt.gnmax) gn=gnmax
621 sn(igrid,ilev)=cn1/(1.e+0 +cn2*gn)
624 & /( (1.e+0 +cm3*gn)*(1.e+0 +cm4*gn) )
625 kn(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)
627 km(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)
648 q2(igrid,nlev)=q2(igrid,nlev-1)
649 q(igrid,nlev)=
q(igrid,nlev-1)
650 kn(igrid,nlev)=kn(igrid,nlev-1)
651 km(igrid,nlev)=km(igrid,nlev-1)
658 sss=sss+plev(1,ilev-1)-plev(1,ilev+1)
659 sssq=sssq+(plev(1,ilev-1)-plev(1,ilev+1))*q2(1,ilev)
684 sss=sss+plev(1,ilev-1)-plev(1,ilev+1)
685 sssq=sssq+(plev(1,ilev-1)-plev(1,ilev+1))*q2(1,ilev)
687 print*,
'Q2moy apres',sssq/sss
692 q2(igrid,ilev)=max(q2(igrid,ilev),q2min)
693 q(igrid,ilev)=sqrt(q2(igrid,ilev))
700 gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
702 IF (gn.lt.gnmin) gn=gnmin
703 IF (gn.gt.gnmax) gn=gnmax
704 sn(igrid,ilev)=cn1/(1.e+0 +cn2*gn)
707 & /( (1.e+0 +cm3*gn)*(1.e+0 +cm4*gn) )
712 snstable=1.-zlev(igrid,ilev)
713 s /(700.*max(ustar(igrid),0.0001))
714 snstable=1.-zlev(igrid,ilev)/400.
715 snstable=max(snstable,0.)
716 snstable=snstable*snstable
719 if (sn(igrid,ilev).lt.snstable)
then
720 sn(igrid,ilev)=snstable
724 if (sm(igrid,ilev).lt.snstable)
then
725 sm(igrid,ilev)=snstable
732 kn(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)
734 km(igrid,ilev)=long(igrid,ilev)*
q(igrid,ilev)