/[lmdze]/trunk/phylmd/vdif_kcay.f
ViewVC logotype

Annotation of /trunk/phylmd/vdif_kcay.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/phylmd/vdif_kcay.f
File size: 25740 byte(s)
Initial import
1 guez 3 !
2     ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/vdif_kcay.F,v 1.1 2004/06/22 11:45:36 lmdzadmin Exp $
3     !
4     SUBROUTINE vdif_kcay(ngrid,dt,g,rconst,plev,temp
5     s ,zlev,zlay,u,v,teta,cd,q2,q2diag,km,kn,ustar
6     s ,l_mix)
7     use dimens_m
8     use dimphy
9     IMPLICIT NONE
10     c.......................................................................
11     c.......................................................................
12     c
13     c dt : pas de temps
14     c g : g
15     c zlev : altitude a chaque niveau (interface inferieure de la couche
16     c de meme indice)
17     c zlay : altitude au centre de chaque couche
18     c u,v : vitesse au centre de chaque couche
19     c (en entree : la valeur au debut du pas de temps)
20     c teta : temperature potentielle au centre de chaque couche
21     c (en entree : la valeur au debut du pas de temps)
22     c cd : cdrag
23     c (en entree : la valeur au debut du pas de temps)
24     c q2 : $q^2$ au bas de chaque couche
25     c (en entree : la valeur au debut du pas de temps)
26     c (en sortie : la valeur a la fin du pas de temps)
27     c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
28     c couche)
29     c (en sortie : la valeur a la fin du pas de temps)
30     c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
31     c (en sortie : la valeur a la fin du pas de temps)
32     c
33     c.......................................................................
34     REAL dt,g,rconst
35     real plev(klon,klev+1),temp(klon,klev)
36     real ustar(klon),snstable
37     REAL zlev(klon,klev+1)
38     REAL zlay(klon,klev)
39     REAL u(klon,klev)
40     REAL v(klon,klev)
41     REAL teta(klon,klev)
42     REAL cd(klon)
43     REAL q2(klon,klev+1),q2s(klon,klev+1)
44     REAL q2diag(klon,klev+1)
45     REAL km(klon,klev+1)
46     REAL kn(klon,klev+1)
47     real sq(klon),sqz(klon),zz(klon,klev+1),zq,long0(klon)
48    
49     integer l_mix,iii
50     c.......................................................................
51     c
52     c nlay : nombre de couches
53     c nlev : nombre de niveaux
54     c ngrid : nombre de points de grille
55     c unsdz : 1 sur l'epaisseur de couche
56     c unsdzdec : 1 sur la distance entre le centre de la couche et le
57     c centre de la couche inferieure
58     c q : echelle de vitesse au bas de chaque couche
59     c (valeur a la fin du pas de temps)
60     c
61     c.......................................................................
62     INTEGER nlay,nlev,ngrid
63     REAL unsdz(klon,klev)
64     REAL unsdzdec(klon,klev+1)
65     REAL q(klon,klev+1)
66    
67     c.......................................................................
68     c
69     c kmpre : km au debut du pas de temps
70     c qcstat : q : solution stationnaire du probleme couple
71     c (valeur a la fin du pas de temps)
72     c q2cstat : q2 : solution stationnaire du probleme couple
73     c (valeur a la fin du pas de temps)
74     c
75     c.......................................................................
76     REAL kmpre(klon,klev+1)
77     REAL qcstat
78     REAL q2cstat
79     real sss,sssq
80     c.......................................................................
81     c
82     c long : longueur de melange calculee selon Blackadar
83     c
84     c.......................................................................
85     REAL long(klon,klev+1)
86     c.......................................................................
87     c
88     c kmq3 : terme en q^3 dans le developpement de km
89     c (valeur au debut du pas de temps)
90     c kmcstat : valeur de km solution stationnaire du systeme {q2 ; du/dz}
91     c (valeur a la fin du pas de temps)
92     c knq3 : terme en q^3 dans le developpement de kn
93     c mcstat : valeur de m solution stationnaire du systeme {q2 ; du/dz}
94     c (valeur a la fin du pas de temps)
95     c m2cstat : valeur de m2 solution stationnaire du systeme {q2 ; du/dz}
96     c (valeur a la fin du pas de temps)
97     c m : valeur a la fin du pas de temps
98     c mpre : valeur au debut du pas de temps
99     c m2 : valeur a la fin du pas de temps
100     c n2 : valeur a la fin du pas de temps
101     c
102     c.......................................................................
103     REAL kmq3
104     REAL kmcstat
105     REAL knq3
106     REAL mcstat
107     REAL m2cstat
108     REAL m(klon,klev+1)
109     REAL mpre(klon,klev+1)
110     REAL m2(klon,klev+1)
111     REAL n2(klon,klev+1)
112     c.......................................................................
113     c
114     c gn : intermediaire pour les coefficients de stabilite
115     c gnmin : borne inferieure de gn (-0.23 ou -0.28)
116     c gnmax : borne superieure de gn (0.0233)
117     c gninf : vrai si gn est en dessous de sa borne inferieure
118     c gnsup : vrai si gn est en dessus de sa borne superieure
119     c gm : drole d'objet bien utile
120     c ri : nombre de Richardson
121     c sn : coefficient de stabilite pour n
122     c snq2 : premier terme du developement limite de sn en q2
123     c sm : coefficient de stabilite pour m
124     c smq2 : premier terme du developement limite de sm en q2
125     c
126     c.......................................................................
127     REAL gn
128     REAL gnmin
129     REAL gnmax
130     LOGICAL gninf
131     LOGICAL gnsup
132     REAL gm
133     c REAL ri(klon,klev+1)
134     REAL sn(klon,klev+1)
135     REAL snq2(klon,klev+1)
136     REAL sm(klon,klev+1)
137     REAL smq2(klon,klev+1)
138     c.......................................................................
139     c
140     c kappa : consatnte de Von Karman (0.4)
141     c long00 : longueur de reference pour le calcul de long (160)
142     c a1,a2,b1,b2,c1 : constantes d'origine pour les coefficients
143     c de stabilite (0.92/0.74/16.6/10.1/0.08)
144     c cn1,cn2 : constantes pour sn
145     c cm1,cm2,cm3,cm4 : constantes pour sm
146     c
147     c.......................................................................
148     REAL kappa
149     REAL long00
150     REAL a1,a2,b1,b2,c1
151     REAL cn1,cn2
152     REAL cm1,cm2,cm3,cm4
153     c.......................................................................
154     c
155     c termq : termes en $q$ dans l'equation de q2
156     c termq3 : termes en $q^3$ dans l'equation de q2
157     c termqm2 : termes en $q*m^2$ dans l'equation de q2
158     c termq3m2 : termes en $q^3*m^2$ dans l'equation de q2
159     c
160     c.......................................................................
161     REAL termq
162     REAL termq3
163     REAL termqm2
164     REAL termq3m2
165     c.......................................................................
166     c
167     c q2min : borne inferieure de q2
168     c q2max : borne superieure de q2
169     c
170     c.......................................................................
171     REAL q2min
172     REAL q2max
173     c.......................................................................
174     c knmin : borne inferieure de kn
175     c kmmin : borne inferieure de km
176     c.......................................................................
177     REAL knmin
178     REAL kmmin
179     c.......................................................................
180     INTEGER ilay,ilev,igrid
181     REAL tmp1,tmp2
182     c.......................................................................
183     PARAMETER (kappa=0.4E+0)
184     PARAMETER (long00=160.E+0)
185     c PARAMETER (gnmin=-10.E+0)
186     PARAMETER (gnmin=-0.28)
187     PARAMETER (gnmax=0.0233E+0)
188     PARAMETER (a1=0.92E+0)
189     PARAMETER (a2=0.74E+0)
190     PARAMETER (b1=16.6E+0)
191     PARAMETER (b2=10.1E+0)
192     PARAMETER (c1=0.08E+0)
193     PARAMETER (knmin=1.E-5)
194     PARAMETER (kmmin=1.E-5)
195     PARAMETER (q2min=1.e-5)
196     PARAMETER (q2max=1.E+2)
197     PARAMETER (nlay=klev)
198     PARAMETER (nlev=klev+1)
199     c
200     PARAMETER (
201     & cn1=a2*(1.E+0 -6.E+0 *a1/b1)
202     & )
203     PARAMETER (
204     & cn2=-3.E+0 *a2*(6.E+0 *a1+b2)
205     & )
206     PARAMETER (
207     & cm1=a1*(1.E+0 -3.E+0 *c1-6.E+0 *a1/b1)
208     & )
209     PARAMETER (
210     & cm2=a1*(-3.E+0 *a2*((b2-3.E+0 *a2)*(1.E+0 -6.E+0 *a1/b1)
211     & -3.E+0 *c1*(b2+6.E+0 *a1)))
212     & )
213     PARAMETER (
214     & cm3=-3.E+0 *a2*(6.E+0 *a1+b2)
215     & )
216     PARAMETER (
217     & cm4=-9.E+0 *a1*a2
218     & )
219    
220     logical first
221     save first
222     data first/.true./
223     c.......................................................................
224     c traitment des valeur de q2 en entree
225     c.......................................................................
226     c
227     c Initialisation de q2
228    
229     call yamada(ngrid,dt,g,rconst,plev,temp
230     s ,zlev,zlay,u,v,teta,cd,q2diag,km,kn,ustar
231     s ,l_mix)
232     if (first.and.1.eq.1) then
233     first=.false.
234     q2=q2diag
235     endif
236    
237     DO ilev=1,nlev
238     DO igrid=1,ngrid
239     q2(igrid,ilev)=amax1(q2(igrid,ilev),q2min)
240     q(igrid,ilev)=sqrt(q2(igrid,ilev))
241     ENDDO
242     ENDDO
243     c
244     DO igrid=1,ngrid
245     tmp1=cd(igrid)*(u(igrid,1)**2+v(igrid,1)**2)
246     q2(igrid,1)=b1**(2.E+0/3.E+0)*tmp1
247     q2(igrid,1)=amax1(q2(igrid,1),q2min)
248     q(igrid,1)=sqrt(q2(igrid,1))
249     ENDDO
250     c
251     c.......................................................................
252     c les increments verticaux
253     c.......................................................................
254     c
255     c!!!!! allerte !!!!!c
256     c!!!!! zlev n'est pas declare a nlev !!!!!c
257     c!!!!! ---->
258     DO igrid=1,ngrid
259     zlev(igrid,nlev)=zlay(igrid,nlay)
260     & +( zlay(igrid,nlay) - zlev(igrid,nlev-1) )
261     ENDDO
262     c!!!!! <----
263     c!!!!! allerte !!!!!c
264     c
265     DO ilay=1,nlay
266     DO igrid=1,ngrid
267     unsdz(igrid,ilay)=1.E+0/(zlev(igrid,ilay+1)-zlev(igrid,ilay))
268     ENDDO
269     ENDDO
270     DO igrid=1,ngrid
271     unsdzdec(igrid,1)=1.E+0/(zlay(igrid,1)-zlev(igrid,1))
272     ENDDO
273     DO ilay=2,nlay
274     DO igrid=1,ngrid
275     unsdzdec(igrid,ilay)=1.E+0/(zlay(igrid,ilay)-zlay(igrid,ilay-1))
276     ENDDO
277     ENDDO
278     DO igrid=1,ngrid
279     unsdzdec(igrid,nlay+1)=1.E+0/(zlev(igrid,nlay+1)-zlay(igrid,nlay))
280     ENDDO
281     c
282     c.......................................................................
283     c le cisaillement et le gradient de temperature
284     c.......................................................................
285     c
286     DO igrid=1,ngrid
287     m2(igrid,1)=(unsdzdec(igrid,1)
288     & *u(igrid,1))**2
289     & +(unsdzdec(igrid,1)
290     & *v(igrid,1))**2
291     m(igrid,1)=sqrt(m2(igrid,1))
292     mpre(igrid,1)=m(igrid,1)
293     ENDDO
294     c
295     c-----------------------------------------------------------------------
296     DO ilev=2,nlev-1
297     DO igrid=1,ngrid
298     c-----------------------------------------------------------------------
299     c
300     n2(igrid,ilev)=g*unsdzdec(igrid,ilev)
301     & *(teta(igrid,ilev)-teta(igrid,ilev-1))
302     & /(teta(igrid,ilev)+teta(igrid,ilev-1)) *2.E+0
303     c n2(igrid,ilev)=0.
304     c
305     c --->
306     c on ne sais traiter que les cas stratifies. et l'ajustement
307     c convectif est cense faire en sorte que seul des configurations
308     c stratifiees soient rencontrees en entree de cette routine.
309     c mais, bon ... on sait jamais (meme on sait que n2 prends
310     c quelques valeurs negatives ... parfois) alors :
311     c<---
312     c
313     IF (n2(igrid,ilev).lt.0.E+0) THEN
314     n2(igrid,ilev)=0.E+0
315     ENDIF
316     c
317     m2(igrid,ilev)=(unsdzdec(igrid,ilev)
318     & *(u(igrid,ilev)-u(igrid,ilev-1)))**2
319     & +(unsdzdec(igrid,ilev)
320     & *(v(igrid,ilev)-v(igrid,ilev-1)))**2
321     m(igrid,ilev)=sqrt(m2(igrid,ilev))
322     mpre(igrid,ilev)=m(igrid,ilev)
323     c
324     c-----------------------------------------------------------------------
325     ENDDO
326     ENDDO
327     c-----------------------------------------------------------------------
328     c
329     DO igrid=1,ngrid
330     m2(igrid,nlev)=m2(igrid,nlev-1)
331     m(igrid,nlev)=m(igrid,nlev-1)
332     mpre(igrid,nlev)=m(igrid,nlev)
333     ENDDO
334     c
335     c.......................................................................
336     c calcul des fonctions de stabilite
337     c.......................................................................
338     c
339     if (l_mix.eq.4) then
340     DO igrid=1,ngrid
341     sqz(igrid)=1.e-10
342     sq(igrid)=1.e-10
343     ENDDO
344     do ilev=2,nlev-1
345     DO igrid=1,ngrid
346     zq=sqrt(q2(igrid,ilev))
347     sqz(igrid)
348     . =sqz(igrid)+zq*zlev(igrid,ilev)
349     . *(zlay(igrid,ilev)-zlay(igrid,ilev-1))
350     sq(igrid)=sq(igrid)+zq*(zlay(igrid,ilev)-zlay(igrid,ilev-1))
351     ENDDO
352     enddo
353     DO igrid=1,ngrid
354     long0(igrid)=0.2*sqz(igrid)/sq(igrid)
355     ENDDO
356     else if (l_mix.eq.3) then
357     long0(igrid)=long00
358     endif
359    
360     c (abd 5 2) print*,'LONG0=',long0
361    
362     c-----------------------------------------------------------------------
363     DO ilev=2,nlev-1
364     DO igrid=1,ngrid
365     c-----------------------------------------------------------------------
366     c
367     tmp1=kappa*(zlev(igrid,ilev)-zlev(igrid,1))
368     if (l_mix.ge.10) then
369     long(igrid,ilev)=l_mix
370     else
371     long(igrid,ilev)=tmp1/(1.E+0 + tmp1/long0(igrid))
372     endif
373     long(igrid,ilev)=max(min(long(igrid,ilev)
374     s ,0.5*sqrt(q2(igrid,ilev))/sqrt(max(n2(igrid,ilev),1.e-10)))
375     s ,5.)
376    
377     gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
378     & * n2(igrid,ilev)
379     gm=long(igrid,ilev)**2 / q2(igrid,ilev)
380     & * m2(igrid,ilev)
381     c
382     gninf=.false.
383     gnsup=.false.
384     long(igrid,ilev)=long(igrid,ilev)
385     long(igrid,ilev)=long(igrid,ilev)
386     c
387     IF (gn.lt.gnmin) THEN
388     gninf=.true.
389     gn=gnmin
390     ENDIF
391     c
392     IF (gn.gt.gnmax) THEN
393     gnsup=.true.
394     gn=gnmax
395     ENDIF
396     c
397     sn(igrid,ilev)=cn1/(1.E+0 +cn2*gn)
398     sm(igrid,ilev)=
399     & (cm1+cm2*gn)
400     & /( (1.E+0 +cm3*gn)
401     & *(1.E+0 +cm4*gn) )
402     c
403     IF ((gninf).or.(gnsup)) THEN
404     snq2(igrid,ilev)=0.E+0
405     smq2(igrid,ilev)=0.E+0
406     ELSE
407     snq2(igrid,ilev)=
408     & -gn
409     & *(-cn1*cn2/(1.E+0 +cn2*gn)**2 )
410     smq2(igrid,ilev)=
411     & -gn
412     & *( cm2*(1.E+0 +cm3*gn)
413     & *(1.E+0 +cm4*gn)
414     & -( cm3*(1.E+0 +cm4*gn)
415     & +cm4*(1.E+0 +cm3*gn) )
416     & *(cm1+cm2*gn) )
417     & /( (1.E+0 +cm3*gn)
418     & *(1.E+0 +cm4*gn) )**2
419     ENDIF
420     c
421     c abd
422     c if(ilev.le.57.and.ilev.ge.37) then
423     c print*,'L=',ilev,' GN=',gn,' SM=',sm(igrid,ilev)
424     c endif
425     c --->
426     c la decomposition de Taylor en q2 n'a de sens que
427     c dans les cas stratifies ou sn et sm sont quasi
428     c proportionnels a q2. ailleurs on laisse le meme
429     c algorithme car l'ajustement convectif fait le travail.
430     c mais c'est delirant quand sn et snq2 n'ont pas le meme
431     c signe : dans ces cas, on ne fait pas la decomposition.
432     c<---
433     c
434     IF (snq2(igrid,ilev)*sn(igrid,ilev).le.0.E+0)
435     & snq2(igrid,ilev)=0.E+0
436     IF (smq2(igrid,ilev)*sm(igrid,ilev).le.0.E+0)
437     & smq2(igrid,ilev)=0.E+0
438     c
439     C Correction pour les couches stables.
440     C Schema repris de JHoltzlag Boville, lui meme venant de...
441    
442     if (1.eq.1) then
443     snstable=1.-zlev(igrid,ilev)
444     s /(700.*max(ustar(igrid),0.0001))
445     snstable=1.-zlev(igrid,ilev)/400.
446     snstable=max(snstable,0.)
447     snstable=snstable*snstable
448    
449     c abde print*,'SN ',ilev,sn(1,ilev),snstable
450     if (sn(igrid,ilev).lt.snstable) then
451     sn(igrid,ilev)=snstable
452     snq2(igrid,ilev)=0.
453     endif
454    
455     if (sm(igrid,ilev).lt.snstable) then
456     sm(igrid,ilev)=snstable
457     smq2(igrid,ilev)=0.
458     endif
459    
460     endif
461    
462     c sn : coefficient de stabilite pour n
463     c snq2 : premier terme du developement limite de sn en q2
464     c-----------------------------------------------------------------------
465     ENDDO
466     ENDDO
467     c-----------------------------------------------------------------------
468     c
469     c.......................................................................
470     c calcul de km et kn au debut du pas de temps
471     c.......................................................................
472     c
473     DO igrid=1,ngrid
474     kn(igrid,1)=knmin
475     km(igrid,1)=kmmin
476     kmpre(igrid,1)=km(igrid,1)
477     ENDDO
478     c
479     c-----------------------------------------------------------------------
480     DO ilev=2,nlev-1
481     DO igrid=1,ngrid
482     c-----------------------------------------------------------------------
483     c
484     kn(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
485     & *sn(igrid,ilev)
486     km(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
487     & *sm(igrid,ilev)
488     kmpre(igrid,ilev)=km(igrid,ilev)
489     c
490     c-----------------------------------------------------------------------
491     ENDDO
492     ENDDO
493     c-----------------------------------------------------------------------
494     c
495     DO igrid=1,ngrid
496     kn(igrid,nlev)=kn(igrid,nlev-1)
497     km(igrid,nlev)=km(igrid,nlev-1)
498     kmpre(igrid,nlev)=km(igrid,nlev)
499     ENDDO
500     c
501     c.......................................................................
502     c boucle sur les niveaux 2 a nlev-1
503     c.......................................................................
504     c
505     c---->
506     DO 10001 ilev=2,nlev-1
507     c---->
508     DO 10002 igrid=1,ngrid
509     c
510     c.......................................................................
511     c
512     c calcul des termes sources et puits de l'equation de q2
513     c ------------------------------------------------------
514     c
515     knq3=kn(igrid,ilev)*snq2(igrid,ilev)
516     & /sn(igrid,ilev)
517     kmq3=km(igrid,ilev)*smq2(igrid,ilev)
518     & /sm(igrid,ilev)
519     c
520     termq=0.E+0
521     termq3=0.E+0
522     termqm2=0.E+0
523     termq3m2=0.E+0
524     c
525     tmp1=dt*2.E+0 *km(igrid,ilev)*m2(igrid,ilev)
526     tmp2=dt*2.E+0 *kmq3*m2(igrid,ilev)
527     termqm2=termqm2
528     & +dt*2.E+0 *km(igrid,ilev)*m2(igrid,ilev)
529     & -dt*2.E+0 *kmq3*m2(igrid,ilev)
530     termq3m2=termq3m2
531     & +dt*2.E+0 *kmq3*m2(igrid,ilev)
532     c
533     termq=termq
534     & -dt*2.E+0 *kn(igrid,ilev)*n2(igrid,ilev)
535     & +dt*2.E+0 *knq3*n2(igrid,ilev)
536     termq3=termq3
537     & -dt*2.E+0 *knq3*n2(igrid,ilev)
538     c
539     termq3=termq3
540     & -dt*2.E+0 *q(igrid,ilev)**3 / (b1*long(igrid,ilev))
541     c
542     c.......................................................................
543     c
544     c resolution stationnaire couplee avec le gradient de vitesse local
545     c -----------------------------------------------------------------
546     c
547     c -----{on cherche le cisaillement qui annule l'equation de q^2
548     c supposee en q3}
549     c
550     tmp1=termq+termq3
551     tmp2=termqm2+termq3m2
552     m2cstat=m2(igrid,ilev)
553     & -(tmp1+tmp2)/(dt*2.E+0*km(igrid,ilev))
554     mcstat=sqrt(m2cstat)
555    
556     c abde print*,'M2 L=',ilev,mpre(igrid,ilev),mcstat
557     c
558     c -----{puis on ecrit la valeur de q qui annule l'equation de m
559     c supposee en q3}
560     c
561     IF (ilev.eq.2) THEN
562     kmcstat=1.E+0 / mcstat
563     & *( unsdz(igrid,ilev)*kmpre(igrid,ilev+1)
564     & *mpre(igrid,ilev+1)
565     & +unsdz(igrid,ilev-1)
566     & *cd(igrid)
567     & *( sqrt(u(igrid,3)**2+v(igrid,3)**2)
568     & -mcstat/unsdzdec(igrid,ilev)
569     & -mpre(igrid,ilev+1)/unsdzdec(igrid,ilev+1) )**2)
570     & /( unsdz(igrid,ilev)+unsdz(igrid,ilev-1) )
571     ELSE
572     kmcstat=1.E+0 / mcstat
573     & *( unsdz(igrid,ilev)*kmpre(igrid,ilev+1)
574     & *mpre(igrid,ilev+1)
575     & +unsdz(igrid,ilev-1)*kmpre(igrid,ilev-1)
576     & *mpre(igrid,ilev-1) )
577     & /( unsdz(igrid,ilev)+unsdz(igrid,ilev-1) )
578     ENDIF
579     tmp2=kmcstat
580     & /( sm(igrid,ilev)/q2(igrid,ilev) )
581     & /long(igrid,ilev)
582     qcstat=tmp2**(1.E+0/3.E+0)
583     q2cstat=qcstat**2
584     c
585     c.......................................................................
586     c
587     c choix de la solution finale
588     c ---------------------------
589     c
590     q(igrid,ilev)=qcstat
591     q2(igrid,ilev)=q2cstat
592     m(igrid,ilev)=mcstat
593     c abd if(ilev.le.57.and.ilev.ge.37) then
594     c print*,'L=',ilev,' M2=',m2(igrid,ilev),m2cstat,
595     c s 'N2=',n2(igrid,ilev)
596     c abd endif
597     m2(igrid,ilev)=m2cstat
598     c
599     c --->
600     c pour des raisons simples q2 est minore
601     c<---
602     c
603     IF (q2(igrid,ilev).lt.q2min) THEN
604     q2(igrid,ilev)=q2min
605     q(igrid,ilev)=sqrt(q2min)
606     ENDIF
607     c
608     c.......................................................................
609     c
610     c calcul final de kn et km
611     c ------------------------
612     c
613     gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
614     & * n2(igrid,ilev)
615     IF (gn.lt.gnmin) gn=gnmin
616     IF (gn.gt.gnmax) gn=gnmax
617     sn(igrid,ilev)=cn1/(1.E+0 +cn2*gn)
618     sm(igrid,ilev)=
619     & (cm1+cm2*gn)
620     & /( (1.E+0 +cm3*gn)*(1.E+0 +cm4*gn) )
621     kn(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
622     & *sn(igrid,ilev)
623     km(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
624     & *sm(igrid,ilev)
625     c abd
626     c if(ilev.le.57.and.ilev.ge.37) then
627     c print*,'L=',ilev,' GN=',gn,' SM=',sm(igrid,ilev)
628     c endif
629     c
630     c.......................................................................
631     c
632     10002 CONTINUE
633     c
634     10001 CONTINUE
635     c
636     c.......................................................................
637     c
638     c
639     DO igrid=1,ngrid
640     kn(igrid,1)=knmin
641     km(igrid,1)=kmmin
642     c kn(igrid,1)=cd(igrid)
643     c km(igrid,1)=cd(igrid)
644     q2(igrid,nlev)=q2(igrid,nlev-1)
645     q(igrid,nlev)=q(igrid,nlev-1)
646     kn(igrid,nlev)=kn(igrid,nlev-1)
647     km(igrid,nlev)=km(igrid,nlev-1)
648     ENDDO
649     c
650     c CALCUL DE LA DIFFUSION VERTICALE DE Q2
651     if (1.eq.1) then
652    
653     do ilev=2,klev-1
654     sss=sss+plev(1,ilev-1)-plev(1,ilev+1)
655     sssq=sssq+(plev(1,ilev-1)-plev(1,ilev+1))*q2(1,ilev)
656     enddo
657     c print*,'Q2moy avant',sssq/sss
658     c print*,'Q2q20 ',(q2(1,ilev),ilev=1,10)
659     c print*,'Q2km0 ',(km(1,ilev),ilev=1,10)
660     c ! C'est quoi ca qu'etait dans l'original???
661     c do igrid=1,ngrid
662     c q2(igrid,1)=10.
663     c enddo
664     c q2s=q2
665     c do iii=1,10
666     c call vdif_q2(dt,g,rconst,plev,temp,km,q2)
667     c do ilev=1,klev+1
668     c write(iii+49,*) q2(1,ilev),zlev(1,ilev)
669     c enddo
670     c enddo
671     c stop
672     c do ilev=1,klev
673     c print*,zlev(1,ilev),q2s(1,ilev),q2(1,ilev)
674     c enddo
675     c q2s=q2-q2s
676     c do ilev=1,klev
677     c print*,q2s(1,ilev),zlev(1,ilev)
678     c enddo
679     do ilev=2,klev-1
680     sss=sss+plev(1,ilev-1)-plev(1,ilev+1)
681     sssq=sssq+(plev(1,ilev-1)-plev(1,ilev+1))*q2(1,ilev)
682     enddo
683     print*,'Q2moy apres',sssq/sss
684     c
685     c
686     do ilev=1,nlev
687     do igrid=1,ngrid
688     q2(igrid,ilev)=max(q2(igrid,ilev),q2min)
689     q(igrid,ilev)=sqrt(q2(igrid,ilev))
690    
691     c.......................................................................
692     c
693     c calcul final de kn et km
694     c ------------------------
695     c
696     gn=-long(igrid,ilev)**2 / q2(igrid,ilev)
697     & * n2(igrid,ilev)
698     IF (gn.lt.gnmin) gn=gnmin
699     IF (gn.gt.gnmax) gn=gnmax
700     sn(igrid,ilev)=cn1/(1.E+0 +cn2*gn)
701     sm(igrid,ilev)=
702     & (cm1+cm2*gn)
703     & /( (1.E+0 +cm3*gn)*(1.E+0 +cm4*gn) )
704     C Correction pour les couches stables.
705     C Schema repris de JHoltzlag Boville, lui meme venant de...
706    
707     if (1.eq.1) then
708     snstable=1.-zlev(igrid,ilev)
709     s /(700.*max(ustar(igrid),0.0001))
710     snstable=1.-zlev(igrid,ilev)/400.
711     snstable=max(snstable,0.)
712     snstable=snstable*snstable
713    
714     c abde print*,'SN ',ilev,sn(1,ilev),snstable
715     if (sn(igrid,ilev).lt.snstable) then
716     sn(igrid,ilev)=snstable
717     snq2(igrid,ilev)=0.
718     endif
719    
720     if (sm(igrid,ilev).lt.snstable) then
721     sm(igrid,ilev)=snstable
722     smq2(igrid,ilev)=0.
723     endif
724    
725     endif
726    
727     c sn : coefficient de stabilite pour n
728     kn(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
729     & *sn(igrid,ilev)
730     km(igrid,ilev)=long(igrid,ilev)*q(igrid,ilev)
731     c
732     enddo
733     enddo
734     c print*,'Q2km1 ',(km(1,ilev),ilev=1,10)
735    
736     endif
737    
738     RETURN
739     END

  ViewVC Help
Powered by ViewVC 1.1.21