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

Last change on this file since 990 was 782, checked in by Laurent Fairhead, 17 years ago

Adaptation du code a la nouvelle interface avec les surface de Josefine
LF

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