source: lmdz_wrf/WRFV3/lmdz/coefkzmin.F90 @ 1

Last change on this file since 1 was 1, checked in by lfita, 10 years ago
  • -- --- Opening of the WRF+LMDZ coupling repository --- -- -

WRF: version v3.3
LMDZ: version v1818

More details in:

File size: 4.3 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      PRINT *,'    Lluis in coefkzmin'
63
64      nlay=klev
65      nlev=klev+1
66!c.......................................................................
67!c  en attendant une version ou les zlev, et zlay soient
68!c  disponibles.
69!c  Debut de la partie qui doit etre unclue a terme dans clmain.
70!c
71         do i=1,knon
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,knon
77               yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))                    &
78       &                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
79            enddo
80         enddo
81         do k=1,klev
82            do i=1,knon
83!cATTENTION: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       &          *(1.+0.61*yq(i,k))
86            enddo
87         enddo
88         do i=1,knon
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,knon
94               yzlev(i,k)=0.5*(yzlay(i,k)+yzlay(i,k-1))
95            enddo
96         enddo
97
98      yustar(1:knon) =SQRT(ycdragm(1:knon)*                                          &
99       &       (yu(1:knon,1)*yu(1:knon,1)+yv(1:knon,1)*yv(1:knon,1)))
100      PRINT *,'    Lluis k yzlay yteta yzlev ycdragm yu yv yustar__________'
101      DO k=1,klev
102        PRINT *,k, yzlay(1,k), yteta(1,k), yzlev(1,k), ycdragm(1), yu(1,1), yv(1,1), yustar(1)
103      END DO
104
105!c  Fin de la partie qui doit etre unclue a terme dans clmain.
106
107!Cette routine est ecrite pour avoir en entree ustar, teta et zlev
108!c  Ici, on a inclut le calcul de ces trois variables dans la routine
109!c  coefkzmin en attendant une nouvelle version de la couche limite
110!c  ou ces variables seront disponibles.
111
112!c Debut de la routine coefkzmin proprement dite.
113
114      ustar=yustar
115      teta=yteta
116      zlev=yzlev
117
118      do ig=1,knon
119         coriol(ig)=1.e-4
120         pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5)
121      enddo
122      PRINT *,'    Fin of coefkzmin k ustar zlev pblhmin qmin kap kn km _____'
123         
124      do k=2,klev
125         do ig=1,knon
126            if (teta(ig,2).gt.teta(ig,1)) then
127               qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
128               kmin=kap*zlev(ig,k)*qmin
129            else
130               kmin=0. ! kmin n'est utilise que pour les SL stables.
131            endif
132            kn(ig,k)=kmin
133            km(ig,k)=kmin
134            IF (ig == 1) PRINT *,'    ',k,ustar(ig),zlev(ig,k),pblhmin(ig),&
135              qmin,kap,kn(ig,k),km(ig,k)
136         enddo
137      enddo
138
139
140      return
141      end
Note: See TracBrowser for help on using the repository browser.