4 SUBROUTINE vdif_kcay(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, &
5 teta, cd, q2, q2diag, km, kn, ustar, l_mix)
32 REAL ustar(
klon), snstable
58 INTEGER nlay, nlev, ngrid
146 REAL a1, a2, b1, b2, c1
148 REAL cm1, cm2, cm3, cm4
176 INTEGER ilay, ilev, igrid
198 parameter(cm1=a1*(1.e+0-3.e+0*c1-6.e+0*a1/b1))
199 parameter(cm2=a1*(-3.e+0*a2*((b2-3.e+0*a2)*(1.e+0-6.e+0*a1/b1)- &
200 3.e+0*c1*(b2+6.e+0*a1))))
216 CALL yamada(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, &
217 q2diag, km, kn, ustar, l_mix)
218 IF (first .AND. 1==1)
THEN
225 q2(igrid, ilev) = amax1(q2(igrid,ilev), q2min)
226 q(igrid, ilev) = sqrt(q2(igrid,ilev))
231 tmp1 = cd(igrid)*(u(igrid,1)**2+v(igrid,1)**2)
232 q2(igrid, 1) = b1**(2.e+0/3.e+0)*tmp1
233 q2(igrid, 1) = amax1(q2(igrid,1), q2min)
234 q(igrid, 1) = sqrt(q2(igrid,1))
245 zlev(igrid, nlev) = zlay(igrid, nlay) + (zlay(igrid,nlay)-zlev(igrid,nlev &
253 unsdz(igrid, ilay) = 1.e+0/(zlev(igrid,ilay+1)-zlev(igrid,ilay))
257 unsdzdec(igrid, 1) = 1.e+0/(zlay(igrid,1)-zlev(igrid,1))
261 unsdzdec(igrid, ilay) = 1.e+0/(zlay(igrid,ilay)-zlay(igrid,ilay-1))
265 unsdzdec(igrid, nlay+1) = 1.e+0/(zlev(igrid,nlay+1)-zlay(igrid,nlay))
273 m2(igrid, 1) = (unsdzdec(igrid,1)*u(igrid,1))**2 + &
274 (unsdzdec(igrid,1)*v(igrid,1))**2
275 m(igrid, 1) = sqrt(m2(igrid,1))
276 mpre(igrid, 1) = m(igrid, 1)
280 DO ilev = 2, nlev - 1
284 n2(igrid, ilev) = g*unsdzdec(igrid, ilev)*(teta(igrid,ilev)-teta(igrid, &
285 ilev-1))/(teta(igrid,ilev)+teta(igrid,ilev-1))*2.e+0
296 IF (n2(igrid,ilev)<0.e+0)
THEN
297 n2(igrid, ilev) = 0.e+0
300 m2(igrid, ilev) = (unsdzdec(igrid,ilev)*(u(igrid,ilev)-u(igrid, &
301 ilev-1)))**2 + (unsdzdec(igrid,ilev)*(v(igrid,ilev)-v(igrid, &
303 m(igrid, ilev) = sqrt(m2(igrid,ilev))
304 mpre(igrid, ilev) = m(igrid, ilev)
312 m2(igrid, nlev) = m2(igrid, nlev-1)
313 m(igrid, nlev) = m(igrid, nlev-1)
314 mpre(igrid, nlev) = m(igrid, nlev)
326 DO ilev = 2, nlev - 1
328 zq = sqrt(q2(igrid,ilev))
329 sqz(igrid) = sqz(igrid) + zq*zlev(igrid, ilev)*(zlay(igrid,ilev)-zlay &
331 sq(igrid) = sq(igrid) + zq*(zlay(igrid,ilev)-zlay(igrid,ilev-1))
335 long0(igrid) = 0.2*sqz(igrid)/sq(igrid)
337 ELSE IF (l_mix==3)
THEN
338 long0(igrid) = long00
344 DO ilev = 2, nlev - 1
348 tmp1 = kappa*(zlev(igrid,ilev)-zlev(igrid,1))
350 long(igrid, ilev) = l_mix
352 long(igrid, ilev) = tmp1/(1.e+0+tmp1/long0(igrid))
354 long(igrid, ilev) = max(min(long(igrid,ilev),0.5*sqrt(q2(igrid,ilev))/ &
355 sqrt(max(n2(igrid,ilev),1.e-10))), 5.)
357 gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
358 gm = long(igrid, ilev)**2/q2(igrid, ilev)*m2(igrid, ilev)
362 long(igrid, ilev) = long(igrid, ilev)
363 long(igrid, ilev) = long(igrid, ilev)
375 sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
376 sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
378 IF ((gninf) .OR. (gnsup))
THEN
379 snq2(igrid, ilev) = 0.e+0
380 smq2(igrid, ilev) = 0.e+0
382 snq2(igrid, ilev) = -gn*(-cn1*cn2/(1.e+0+cn2*gn)**2)
383 smq2(igrid, ilev) = -gn*(cm2*(1.e+0+cm3*gn)*(1.e+0+cm4*gn)-(cm3*( &
384 1.e+0+cm4*gn)+cm4*(1.e+0+cm3*gn))*(cm1+cm2*gn))/((1.e+0+cm3*gn)*( &
401 IF (snq2(igrid,ilev)*sn(igrid,ilev)<=0.e+0) snq2(igrid, ilev) = 0.e+0
402 IF (smq2(igrid,ilev)*sm(igrid,ilev)<=0.e+0) smq2(igrid, ilev) = 0.e+0
408 snstable = 1. - zlev(igrid, ilev)/(700.*max(ustar(igrid),0.0001))
409 snstable = 1. - zlev(igrid, ilev)/400.
410 snstable = max(snstable, 0.)
411 snstable = snstable*snstable
414 IF (sn(igrid,ilev)<snstable)
THEN
415 sn(igrid, ilev) = snstable
416 snq2(igrid, ilev) = 0.
419 IF (sm(igrid,ilev)<snstable)
THEN
420 sm(igrid, ilev) = snstable
421 smq2(igrid, ilev) = 0.
440 kmpre(igrid, 1) = km(igrid, 1)
444 DO ilev = 2, nlev - 1
448 kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
449 km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sm(igrid, ilev)
450 kmpre(igrid, ilev) = km(igrid, ilev)
458 kn(igrid, nlev) = kn(igrid, nlev-1)
459 km(igrid, nlev) = km(igrid, nlev-1)
460 kmpre(igrid, nlev) = km(igrid, nlev)
468 DO ilev = 2, nlev - 1
477 knq3 = kn(igrid, ilev)*snq2(igrid, ilev)/sn(igrid, ilev)
478 kmq3 = km(igrid, ilev)*smq2(igrid, ilev)/sm(igrid, ilev)
485 tmp1 = dt*2.e+0*km(igrid, ilev)*m2(igrid, ilev)
486 tmp2 = dt*2.e+0*kmq3*m2(igrid, ilev)
487 termqm2 = termqm2 + dt*2.e+0*km(igrid, ilev)*m2(igrid, ilev) - &
488 dt*2.e+0*kmq3*m2(igrid, ilev)
489 termq3m2 = termq3m2 + dt*2.e+0*kmq3*m2(igrid, ilev)
491 termq = termq - dt*2.e+0*kn(igrid, ilev)*n2(igrid, ilev) + &
492 dt*2.e+0*knq3*n2(igrid, ilev)
493 termq3 = termq3 - dt*2.e+0*knq3*n2(igrid, ilev)
495 termq3 = termq3 - dt*2.e+0*q(igrid, ilev)**3/(b1*long(igrid,ilev))
505 tmp1 = termq + termq3
506 tmp2 = termqm2 + termq3m2
507 m2cstat = m2(igrid, ilev) - (tmp1+tmp2)/(dt*2.e+0*km(igrid,ilev))
508 mcstat = sqrt(m2cstat)
516 kmcstat = 1.e+0/mcstat*(unsdz(igrid,ilev)*kmpre(igrid,ilev+1)*mpre( &
517 igrid,ilev+1)+unsdz(igrid,ilev-1)*cd(igrid)*(sqrt(u(igrid,3)**2+ &
518 v(igrid,3)**2)-mcstat/unsdzdec(igrid,ilev)-mpre(igrid, &
519 ilev+1)/unsdzdec(igrid,ilev+1))**2)/(unsdz(igrid,ilev)+unsdz(igrid, &
522 kmcstat = 1.e+0/mcstat*(unsdz(igrid,ilev)*kmpre(igrid,ilev+1)*mpre( &
523 igrid,ilev+1)+unsdz(igrid,ilev-1)*kmpre(igrid,ilev-1)*mpre(igrid, &
524 ilev-1))/(unsdz(igrid,ilev)+unsdz(igrid,ilev-1))
526 tmp2 = kmcstat/(sm(igrid,ilev)/q2(igrid,ilev))/long(igrid, ilev)
527 qcstat = tmp2**(1.e+0/3.e+0)
535 q(igrid, ilev) = qcstat
536 q2(igrid, ilev) = q2cstat
537 m(igrid, ilev) = mcstat
542 m2(igrid, ilev) = m2cstat
548 IF (q2(igrid,ilev)<q2min)
THEN
549 q2(igrid, ilev) = q2min
550 q(igrid, ilev) = sqrt(q2min)
558 gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
559 IF (gn<gnmin) gn = gnmin
560 IF (gn>gnmax) gn = gnmax
561 sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
562 sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
563 kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
564 km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sm(igrid, ilev)
584 q2(igrid, nlev) = q2(igrid, nlev-1)
585 q(igrid, nlev) = q(igrid, nlev-1)
586 kn(igrid, nlev) = kn(igrid, nlev-1)
587 km(igrid, nlev) = km(igrid, nlev-1)
593 DO ilev = 2,
klev - 1
594 sss = sss + plev(1, ilev-1) - plev(1, ilev+1)
595 sssq = sssq + (plev(1,ilev-1)-plev(1,ilev+1))*q2(1, ilev)
619 DO ilev = 2,
klev - 1
620 sss = sss + plev(1, ilev-1) - plev(1, ilev+1)
621 sssq = sssq + (plev(1,ilev-1)-plev(1,ilev+1))*q2(1, ilev)
623 print *,
'Q2moy apres', sssq/sss
628 q2(igrid, ilev) = max(q2(igrid,ilev), q2min)
629 q(igrid, ilev) = sqrt(q2(igrid,ilev))
636 gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
637 IF (gn<gnmin) gn = gnmin
638 IF (gn>gnmax) gn = gnmax
639 sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
640 sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
645 snstable = 1. - zlev(igrid, ilev)/(700.*max(ustar(igrid),0.0001))
646 snstable = 1. - zlev(igrid, ilev)/400.
647 snstable = max(snstable, 0.)
648 snstable = snstable*snstable
651 IF (sn(igrid,ilev)<snstable)
THEN
652 sn(igrid, ilev) = snstable
653 snq2(igrid, ilev) = 0.
656 IF (sm(igrid,ilev)<snstable)
THEN
657 sm(igrid, ilev) = snstable
658 smq2(igrid, ilev) = 0.
664 kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
665 km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)
!$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
subroutine yamada(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, q2, km, kn, ustar, l_mix)
subroutine vdif_kcay(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, q2, q2diag, km, kn, ustar, l_mix)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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