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

Contents of /trunk/libf/phylmd/coefkzmin.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (show annotations)
Thu Jan 6 17:52:19 2011 UTC (13 years, 3 months ago) by guez
File size: 4119 byte(s)
Extracted ASCII art from "inigeom" into a separate text file in the
documentation.

"test_disvert" now creates a separate file for layer thicknesses.

Moved variables from module "yomcst" to module "suphec_m" because this
is where those variables are defined. Kept in "yomcst" only parameters
of Earth orbit. Gave the attribute "parameter" to some variables of
module "suphec_m".

Variables of module "yoethf" were defined in procedure "suphec". Moved
these definitions to a new procedure "yoethf" in module "yoethf_m".

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

  ViewVC Help
Powered by ViewVC 1.1.21