source: LMDZ4/trunk/libf/phylmd/coefkzmin.F @ 594

Last change on this file since 594 was 524, checked in by lmdzadmin, 20 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1!
2! $Header$
3!
4       SUBROUTINE coefkzmin(ngrid,ypaprs,ypplay,yu,yv,yt,yq,ycoefm
5     .   ,km,kn)
6c      SUBROUTINE coefkzmin(ngrid,zlev,teta,ustar,km,kn)
7      IMPLICIT NONE
8
9#include "dimensions.h"
10#include "dimphy.h"
11#include "YOMCST.h"
12
13c.......................................................................
14c  Entrees modifies en attendant une version ou les zlev, et zlay soient
15c  disponibles.
16
17      REAL  ycoefm(klon,klev)
18
19      REAL yu(klon,klev), yv(klon,klev)
20      REAL yt(klon,klev), yq(klon,klev)
21      REAL ypaprs(klon,klev+1), ypplay(klon,klev)
22      REAL yustar(klon)
23      real yzlay(klon,klev),yzlev(klon,klev+1),yteta(klon,klev)
24
25      integer i
26
27c.......................................................................
28c
29c  En entree :
30c  -----------
31c
32c zlev : altitude a chaque niveau (interface inferieure de la couche
33c        de meme indice)
34c ustar : u*
35c
36c teta : temperature potentielle au centre de chaque couche
37c        (en entree : la valeur au debut du pas de temps)
38c
39c  en sortier :
40c  ------------
41c
42c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
43c      couche)
44c      (en sortie : la valeur a la fin du pas de temps)
45c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
46c      (en sortie : la valeur a la fin du pas de temps)
47c
48c.......................................................................
49
50      real ustar(klon)
51      real kmin,qmin,pblhmin(klon),coriol(klon)
52      REAL zlev(klon,klev+1)
53      REAL teta(klon,klev)
54
55      REAL km(klon,klev+1)
56      REAL kn(klon,klev+1)
57      integer l_mix,ngrid
58
59
60      integer nlay,nlev
61      PARAMETER (nlay=klev)
62      PARAMETER (nlev=klev+1)
63
64      integer ig,k
65
66      real kap
67      save kap
68      data kap/0.4/
69
70      real frif,falpha,fsm
71      real fl,zzz,zl0,zq2,zn2
72
73
74c.......................................................................
75c  en attendant une version ou les zlev, et zlay soient
76c  disponibles.
77c  Debut de la partie qui doit etre unclue a terme dans clmain.
78c
79         do i=1,ngrid
80            yzlay(i,1)=RD*yt(i,1)/(0.5*(ypaprs(i,1)+ypplay(i,1)))
81     .                *(ypaprs(i,1)-ypplay(i,1))/RG
82         enddo
83         do k=2,klev
84            do i=1,ngrid
85               yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))
86     s                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
87            enddo
88         enddo
89         do k=1,klev
90            do i=1,ngrid
91cATTENTION:on passe la temperature potentielle virt. pour le calcul de K
92             yteta(i,k)=yt(i,k)*(ypaprs(i,1)/ypplay(i,k))**rkappa
93     s          *(1.+0.61*yq(i,k))
94            enddo
95         enddo
96         do i=1,ngrid
97            yzlev(i,1)=0.
98            yzlev(i,klev+1)=2.*yzlay(i,klev)-yzlay(i,klev-1)
99         enddo
100         do k=2,klev
101            do i=1,ngrid
102               yzlev(i,k)=0.5*(yzlay(i,k)+yzlay(i,k-1))
103            enddo
104         enddo
105
106
107cIM cf FH   yustar(:) =SQRT(ycoefm(:,1)*(yu(:,1)*yu(:,1)+yv(:,1)*yv(:,1)))
108      yustar(1:ngrid) =SQRT(ycoefm(1:ngrid,1)*
109     $       (yu(1:ngrid,1)*yu(1:ngrid,1)+yv(1:ngrid,1)*yv(1:ngrid,1)))
110
111c  Fin de la partie qui doit etre unclue a terme dans clmain.
112
113Cette routine est ecrite pour avoir en entree ustar, teta et zlev
114c  Ici, on a inclut le calcul de ces trois variables dans la routine
115c  coefkzmin en attendant une nouvelle version de la couche limite
116c  ou ces variables seront disponibles.
117
118c Debut de la routine coefkzmin proprement dite.
119
120      ustar=yustar
121      teta=yteta
122      zlev=yzlev
123
124      do ig=1,ngrid
125      coriol(ig)=1.e-4
126      pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5)
127      enddo
128     
129      do k=2,klev
130         do ig=1,ngrid
131            if (teta(ig,2).gt.teta(ig,1)) then
132               qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
133               kmin=kap*zlev(ig,k)*qmin
134            else
135               kmin=0. ! kmin n'est utilise que pour les SL stables.
136            endif
137            kn(ig,k)=kmin
138            km(ig,k)=kmin
139         enddo
140      enddo
141
142
143      return
144      end
Note: See TracBrowser for help on using the repository browser.