/[lmdze]/trunk/Sources/phylmd/coefkzmin.f
ViewVC logotype

Annotation of /trunk/Sources/phylmd/coefkzmin.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21