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,yq,ycoefm |
5 |
. ,km,kn) |
6 |
c SUBROUTINE coefkzmin(ngrid,zlev,teta,ustar,km,kn) |
7 |
use dimens_m |
8 |
use dimphy |
9 |
use SUPHEC_M |
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 |