source: lmdz_wrf/branches/LMDZ_WRFmeas/WRFV3/lmdz/coefkzmin.F90 @ 25

Last change on this file since 25 was 7, checked in by lfita, 10 years ago

Removing checking prints from the development process

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