source: LMDZ.3.3/branches/rel-LF/libf/phylmd/coefkzmin.F @ 5456

Last change on this file since 5456 was 501, checked in by lmdzadmin, 21 years ago

IM: petit bug dimensions tableau yustar IM/FH

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