source: LMDZ4/branches/V3_test/libf/phylmd/coefkzmin.F @ 3947

Last change on this file since 3947 was 704, checked in by Laurent Fairhead, 18 years ago

Inclusion des modifs de Y. Meurdesoif pour la version V3
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
RevLine 
[524]1!
2! $Header$
3!
4       SUBROUTINE coefkzmin(ngrid,ypaprs,ypplay,yu,yv,yt,yq,ycoefm
5     .   ,km,kn)
6c      SUBROUTINE coefkzmin(ngrid,zlev,teta,ustar,km,kn)
[704]7      USE dimphy
[524]8      IMPLICIT NONE
9
[704]10cym#include "dimensions.h"
11cym#include "dimphy.h"
[524]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), yq(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 nlay,nlev
[704]62cym      PARAMETER (nlay=klev)
63cym      PARAMETER (nlev=klev+1)
[524]64
65      integer ig,k
66
[704]67      real,parameter :: kap=0.4
[524]68
69      real frif,falpha,fsm
70      real fl,zzz,zl0,zq2,zn2
71
[704]72      nlay=klev
73      nlev=klev+1
[524]74c.......................................................................
75c  en attendant une version ou les zlev, et zlay soient
76c  disponibles.
77c  Debut de la partie qui doit etre unclue a terme dans clmain.
78c
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
91cATTENTION: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
107cIM 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
111c  Fin de la partie qui doit etre unclue a terme dans clmain.
112
113Cette routine est ecrite pour avoir en entree ustar, teta et zlev
114c  Ici, on a inclut le calcul de ces trois variables dans la routine
115c  coefkzmin en attendant une nouvelle version de la couche limite
116c  ou ces variables seront disponibles.
117
118c 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
Note: See TracBrowser for help on using the repository browser.