source: trunk/LMDZ.VENUS/libf/phyvenus/coefkzmin.F @ 134

Last change on this file since 134 was 101, checked in by slebonnois, 14 years ago

SL: modifications pour arriver a compiler le gcm VENUS !
Ca marche !
A noter: modifs de makelmdz

File size: 3.8 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/coefkzmin.F,v 1.1.1.1 2004/05/19 12:53:08 lmdzadmin Exp $
3!
4       SUBROUTINE coefkzmin(ngrid,ypaprs,ypplay,yu,yv,yt,ycoefm
5     .   ,km,kn)
6c      SUBROUTINE coefkzmin(ngrid,zlev,teta,ustar,km,kn)
7
8      use dimphy
9      IMPLICIT NONE
10
11#include "dimensions.h"
12#include "YOMCST.h"
13
14c.......................................................................
15c  Entrees modifies en attendant une version ou les zlev, et zlay soient
16c  disponibles.
17
18      REAL  ycoefm(klon,klev)
19
20      REAL yu(klon,klev), yv(klon,klev)
21      REAL yt(klon,klev)
22      REAL ypaprs(klon,klev+1), ypplay(klon,klev)
23      REAL yustar(klon)
24      real yzlay(klon,klev),yzlev(klon,klev+1),yteta(klon,klev)
25
26      integer i
27
28c.......................................................................
29c
30c  En entree :
31c  -----------
32c
33c zlev : altitude a chaque niveau (interface inferieure de la couche
34c        de meme indice)
35c ustar : u*
36c
37c teta : temperature potentielle au centre de chaque couche
38c        (en entree : la valeur au debut du pas de temps)
39c
40c  en sortier :
41c  ------------
42c
43c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
44c      couche)
45c      (en sortie : la valeur a la fin du pas de temps)
46c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
47c      (en sortie : la valeur a la fin du pas de temps)
48c
49c.......................................................................
50
51      real ustar(klon)
52      real kmin,qmin,pblhmin(klon),coriol(klon)
53      REAL zlev(klon,klev+1)
54      REAL teta(klon,klev)
55
56      REAL km(klon,klev+1)
57      REAL kn(klon,klev+1)
58      integer l_mix,ngrid
59
60
61      integer ig,k
62
63      real kap
64      save kap
65      data kap/0.4/
66
67c.......................................................................
68c  en attendant une version ou les zlev, et zlay soient
69c  disponibles.
70c  Debut de la partie qui doit etre unclue a terme dans clmain.
71c
72         do i=1,ngrid
73            yzlay(i,1)=RD*yt(i,1)/(0.5*(ypaprs(i,1)+ypplay(i,1)))
74     .                *(ypaprs(i,1)-ypplay(i,1))/RG
75         enddo
76         do k=2,klev
77            do i=1,ngrid
78               yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))
79     s                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
80            enddo
81         enddo
82         do k=1,klev
83            do i=1,ngrid
84cATTENTION:on passe la temperature potentielle virt. pour le calcul de K
85             yteta(i,k)=yt(i,k)*(ypaprs(i,1)/ypplay(i,k))**rkappa
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.