source: LMDZ4/branches/LMDZ4_V2_patch/libf/phylmd/vdif_kcay.F @ 5319

Last change on this file since 5319 was 541, checked in by lmdzadmin, 20 years ago

Convergence avec la version d'Olivia Coindreau incluant:

  • le offline
  • les thermiques
  • mellor & yamada dans la couche limite

LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 25.1 KB
Line 
1!
2! $Header$
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      IMPLICIT NONE
8c.......................................................................
9#include "dimensions.h"
10#include "dimphy.h"
11c.......................................................................
12c
13c dt : pas de temps
14c g  : g
15c zlev : altitude a chaque niveau (interface inferieure de la couche
16c        de meme indice)
17c zlay : altitude au centre de chaque couche
18c u,v : vitesse au centre de chaque couche
19c       (en entree : la valeur au debut du pas de temps)
20c teta : temperature potentielle au centre de chaque couche
21c        (en entree : la valeur au debut du pas de temps)
22c cd : cdrag
23c      (en entree : la valeur au debut du pas de temps)
24c q2 : $q^2$ au bas de chaque couche
25c      (en entree : la valeur au debut du pas de temps)
26c      (en sortie : la valeur a la fin du pas de temps)
27c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
28c      couche)
29c      (en sortie : la valeur a la fin du pas de temps)
30c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
31c      (en sortie : la valeur a la fin du pas de temps)
32c
33c.......................................................................
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
50c.......................................................................
51c
52c nlay : nombre de couches       
53c nlev : nombre de niveaux
54c ngrid : nombre de points de grille       
55c unsdz : 1 sur l'epaisseur de couche
56c unsdzdec : 1 sur la distance entre le centre de la couche et le
57c            centre de la couche inferieure
58c q : echelle de vitesse au bas de chaque couche
59c     (valeur a la fin du pas de temps)
60c
61c.......................................................................
62      INTEGER nlay,nlev,ngrid
63      REAL unsdz(klon,klev)
64      REAL unsdzdec(klon,klev+1)
65      REAL q(klon,klev+1)
66
67c.......................................................................
68c
69c kmpre : km au debut du pas de temps
70c qcstat : q : solution stationnaire du probleme couple
71c          (valeur a la fin du pas de temps)
72c q2cstat : q2 : solution stationnaire du probleme couple
73c           (valeur a la fin du pas de temps)
74c
75c.......................................................................
76      REAL kmpre(klon,klev+1)
77      REAL qcstat
78      REAL q2cstat
79      real sss,sssq
80c.......................................................................
81c
82c long : longueur de melange calculee selon Blackadar
83c
84c.......................................................................
85      REAL long(klon,klev+1)
86c.......................................................................
87c
88c kmq3 : terme en q^3 dans le developpement de km
89c        (valeur au debut du pas de temps)
90c kmcstat : valeur de km solution stationnaire du systeme {q2 ; du/dz}
91c           (valeur a la fin du pas de temps)
92c knq3 : terme en q^3 dans le developpement de kn
93c mcstat : valeur de m solution stationnaire du systeme {q2 ; du/dz}
94c          (valeur a la fin du pas de temps)
95c m2cstat : valeur de m2 solution stationnaire du systeme {q2 ; du/dz}
96c           (valeur a la fin du pas de temps)
97c m : valeur a la fin du pas de temps
98c mpre : valeur au debut du pas de temps
99c m2 : valeur a la fin du pas de temps
100c n2 : valeur a la fin du pas de temps
101c
102c.......................................................................
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)
112c.......................................................................
113c
114c gn : intermediaire pour les coefficients de stabilite
115c gnmin : borne inferieure de gn (-0.23 ou -0.28)
116c gnmax : borne superieure de gn (0.0233)
117c gninf : vrai si gn est en dessous de sa borne inferieure
118c gnsup : vrai si gn est en dessus de sa borne superieure
119c gm : drole d'objet bien utile
120c ri : nombre de Richardson
121c sn : coefficient de stabilite pour n
122c snq2 : premier terme du developement limite de sn en q2
123c sm : coefficient de stabilite pour m
124c smq2 : premier terme du developement limite de sm en q2
125c
126c.......................................................................
127      REAL gn
128      REAL gnmin
129      REAL gnmax
130      LOGICAL gninf
131      LOGICAL gnsup
132      REAL gm
133c      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)
138c.......................................................................
139c
140c kappa : consatnte de Von Karman (0.4)
141c long00 : longueur de reference pour le calcul de long (160)
142c a1,a2,b1,b2,c1 : constantes d'origine pour les  coefficients
143c                  de stabilite (0.92/0.74/16.6/10.1/0.08)
144c cn1,cn2 : constantes pour sn
145c cm1,cm2,cm3,cm4 : constantes pour sm
146c
147c.......................................................................
148      REAL kappa
149      REAL long00
150      REAL a1,a2,b1,b2,c1
151      REAL cn1,cn2
152      REAL cm1,cm2,cm3,cm4
153c.......................................................................
154c
155c termq : termes en $q$ dans l'equation de q2
156c termq3 : termes en $q^3$ dans l'equation de q2
157c termqm2 : termes en $q*m^2$ dans l'equation de q2
158c termq3m2 : termes en $q^3*m^2$ dans l'equation de q2
159c
160c.......................................................................
161      REAL termq
162      REAL termq3
163      REAL termqm2
164      REAL termq3m2
165c.......................................................................
166c
167c q2min : borne inferieure de q2
168c q2max : borne superieure de q2
169c
170c.......................................................................
171      REAL q2min
172      REAL q2max
173c.......................................................................
174c knmin : borne inferieure de kn
175c kmmin : borne inferieure de km
176c.......................................................................
177      REAL knmin
178      REAL kmmin
179c.......................................................................
180      INTEGER ilay,ilev,igrid
181      REAL tmp1,tmp2
182c.......................................................................
183      PARAMETER (kappa=0.4E+0)
184      PARAMETER (long00=160.E+0)
185c     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)
199c
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./
223c.......................................................................
224c  traitment des valeur de q2 en entree
225c.......................................................................
226c
227c   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
243c
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
250c
251c.......................................................................
252c  les increments verticaux
253c.......................................................................
254c
255c!!!!! allerte !!!!!c
256c!!!!! zlev n'est pas declare a nlev !!!!!c
257c!!!!! ---->
258                                                      DO igrid=1,ngrid
259            zlev(igrid,nlev)=zlay(igrid,nlay)
260     &             +( zlay(igrid,nlay) - zlev(igrid,nlev-1) )
261                                                      ENDDO           
262c!!!!! <----
263c!!!!! allerte !!!!!c
264c
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
281c
282c.......................................................................
283c  le cisaillement et le gradient de temperature
284c.......................................................................
285c
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
294c
295c-----------------------------------------------------------------------
296      DO ilev=2,nlev-1
297                                                      DO igrid=1,ngrid
298c-----------------------------------------------------------------------
299c
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
303c       n2(igrid,ilev)=0.
304c
305c --->
306c       on ne sais traiter que les cas stratifies. et l'ajustement
307c       convectif est cense faire en sorte que seul des configurations
308c       stratifiees soient rencontrees en entree de cette routine.
309c       mais, bon ... on sait jamais (meme on sait que n2 prends
310c       quelques valeurs negatives ... parfois) alors :
311c<---
312c
313        IF (n2(igrid,ilev).lt.0.E+0) THEN
314          n2(igrid,ilev)=0.E+0
315        ENDIF
316c
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)
323c
324c-----------------------------------------------------------------------
325                                                      ENDDO
326      ENDDO
327c-----------------------------------------------------------------------
328c
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
334c
335c.......................................................................
336c  calcul des fonctions de stabilite
337c.......................................................................
338c
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
360c (abd 5 2)      print*,'LONG0=',long0
361
362c-----------------------------------------------------------------------
363      DO ilev=2,nlev-1
364                                                      DO igrid=1,ngrid
365c-----------------------------------------------------------------------
366c
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)
381c
382        gninf=.false.
383        gnsup=.false.
384        long(igrid,ilev)=long(igrid,ilev)
385        long(igrid,ilev)=long(igrid,ilev)
386c
387        IF (gn.lt.gnmin) THEN
388          gninf=.true.
389          gn=gnmin
390        ENDIF
391c
392        IF (gn.gt.gnmax) THEN
393          gnsup=.true.
394          gn=gnmax
395        ENDIF
396c
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) )
402c
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
420c
421c abd
422c        if(ilev.le.57.and.ilev.ge.37) then
423c            print*,'L=',ilev,'   GN=',gn,'  SM=',sm(igrid,ilev)
424c        endif
425c --->
426c       la decomposition de Taylor en q2 n'a de sens que
427c       dans les cas stratifies ou sn et sm sont quasi
428c       proportionnels a q2. ailleurs on laisse le meme
429c       algorithme car l'ajustement convectif fait le travail.
430c       mais c'est delirant quand sn et snq2 n'ont pas le meme
431c       signe : dans ces cas, on ne fait pas la decomposition.
432c<---
433c
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
438c
439C   Correction pour les couches stables.
440C   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
449c 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
462c sn : coefficient de stabilite pour n
463c snq2 : premier terme du developement limite de sn en q2
464c-----------------------------------------------------------------------
465                                                      ENDDO
466      ENDDO
467c-----------------------------------------------------------------------
468c
469c.......................................................................
470c  calcul de km et kn au debut du pas de temps
471c.......................................................................
472c
473                                                      DO igrid=1,ngrid
474      kn(igrid,1)=knmin
475      km(igrid,1)=kmmin
476      kmpre(igrid,1)=km(igrid,1)
477                                                      ENDDO
478c
479c-----------------------------------------------------------------------
480      DO ilev=2,nlev-1
481                                                      DO igrid=1,ngrid
482c-----------------------------------------------------------------------
483c
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)
489c
490c-----------------------------------------------------------------------
491                                                      ENDDO
492      ENDDO
493c-----------------------------------------------------------------------
494c
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
500c
501c.......................................................................
502c  boucle sur les niveaux 2 a nlev-1
503c.......................................................................
504c
505c---->
506      DO 10001 ilev=2,nlev-1
507c---->
508      DO 10002 igrid=1,ngrid
509c
510c.......................................................................
511c
512c  calcul des termes sources et puits de l'equation de q2
513c  ------------------------------------------------------
514c
515        knq3=kn(igrid,ilev)*snq2(igrid,ilev)
516     &                                    /sn(igrid,ilev)
517        kmq3=km(igrid,ilev)*smq2(igrid,ilev)
518     &                                    /sm(igrid,ilev)
519c
520        termq=0.E+0
521        termq3=0.E+0
522        termqm2=0.E+0
523        termq3m2=0.E+0
524c
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)
532c
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)
538c
539        termq3=termq3
540     &    -dt*2.E+0 *q(igrid,ilev)**3 / (b1*long(igrid,ilev))
541c
542c.......................................................................
543c
544c  resolution stationnaire couplee avec le gradient de vitesse local
545c  -----------------------------------------------------------------
546c
547c  -----{on cherche le cisaillement qui annule l'equation de q^2
548c        supposee en q3}
549c
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
556c  abde      print*,'M2 L=',ilev,mpre(igrid,ilev),mcstat
557c
558c  -----{puis on ecrit la valeur de q qui annule l'equation de m
559c        supposee en q3}
560c
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
584c
585c.......................................................................
586c
587c  choix de la solution finale
588c  ---------------------------
589c
590          q(igrid,ilev)=qcstat
591          q2(igrid,ilev)=q2cstat
592          m(igrid,ilev)=mcstat
593c abd       if(ilev.le.57.and.ilev.ge.37) then
594c           print*,'L=',ilev,'   M2=',m2(igrid,ilev),m2cstat,
595c     s     'N2=',n2(igrid,ilev)
596c abd       endif
597          m2(igrid,ilev)=m2cstat
598c
599c --->
600c       pour des raisons simples q2 est minore
601c<---
602c
603        IF (q2(igrid,ilev).lt.q2min) THEN
604          q2(igrid,ilev)=q2min
605          q(igrid,ilev)=sqrt(q2min)
606        ENDIF
607c
608c.......................................................................
609c
610c  calcul final de kn et km
611c  ------------------------
612c
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)
625c abd
626c        if(ilev.le.57.and.ilev.ge.37) then
627c            print*,'L=',ilev,'   GN=',gn,'  SM=',sm(igrid,ilev)
628c        endif
629c
630c.......................................................................
631c
63210002 CONTINUE
633c
63410001 CONTINUE
635c
636c.......................................................................
637c
638c
639                                                      DO igrid=1,ngrid
640      kn(igrid,1)=knmin
641      km(igrid,1)=kmmin
642c     kn(igrid,1)=cd(igrid)
643c     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
649c
650c  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
657c        print*,'Q2moy avant',sssq/sss
658c       print*,'Q2q20 ',(q2(1,ilev),ilev=1,10)
659c       print*,'Q2km0 ',(km(1,ilev),ilev=1,10)
660c   ! C'est quoi ca qu'etait dans l'original???
661c       do igrid=1,ngrid
662c          q2(igrid,1)=10.
663c       enddo
664c        q2s=q2
665c       do iii=1,10
666c       call vdif_q2(dt,g,rconst,plev,temp,km,q2)
667c       do ilev=1,klev+1
668c          write(iii+49,*) q2(1,ilev),zlev(1,ilev)
669c       enddo
670c       enddo
671c       stop
672c       do ilev=1,klev
673c          print*,zlev(1,ilev),q2s(1,ilev),q2(1,ilev)
674c       enddo
675c        q2s=q2-q2s
676c       do ilev=1,klev
677c          print*,q2s(1,ilev),zlev(1,ilev)
678c       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
684c
685c
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
691c.......................................................................
692c
693c  calcul final de kn et km
694c  ------------------------
695c
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) )
704C   Correction pour les couches stables.
705C   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
714c 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
727c 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)
731c
732           enddo
733        enddo
734c       print*,'Q2km1 ',(km(1,ilev),ilev=1,10)
735
736      endif
737
738      RETURN
739      END
Note: See TracBrowser for help on using the repository browser.