source: trunk/libf/phyvenus/coefkzmin.F @ 52

Last change on this file since 52 was 3, checked in by slebonnois, 15 years ago

Creation de repertoires:

  • chantiers : pour communiquer sur nos projets de modifs
  • documentation : pour stocker les docs

Ajout de:

  • libf/phytitan : physique de Titan
  • libf/chimtitan: chimie de Titan
  • libf/phyvenus : physique de Venus
File size: 3.9 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      IMPLICIT NONE
8
9#include "dimensions.h"
10#include "dimphy.h"
11#include "YOMCST.h"
12
13c.......................................................................
14c  Entrees modifies en attendant une version ou les zlev, et zlay soient
15c  disponibles.
16
17      REAL  ycoefm(klon,klev)
18
19      REAL yu(klon,klev), yv(klon,klev)
20      REAL yt(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
27c.......................................................................
28c
29c  En entree :
30c  -----------
31c
32c zlev : altitude a chaque niveau (interface inferieure de la couche
33c        de meme indice)
34c ustar : u*
35c
36c teta : temperature potentielle au centre de chaque couche
37c        (en entree : la valeur au debut du pas de temps)
38c
39c  en sortier :
40c  ------------
41c
42c km : diffusivite turbulente de quantite de mouvement (au bas de chaque
43c      couche)
44c      (en sortie : la valeur a la fin du pas de temps)
45c kn : diffusivite turbulente des scalaires (au bas de chaque couche)
46c      (en sortie : la valeur a la fin du pas de temps)
47c
48c.......................................................................
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
70c.......................................................................
71c  en attendant une version ou les zlev, et zlay soient
72c  disponibles.
73c  Debut de la partie qui doit etre unclue a terme dans clmain.
74c
75         do i=1,ngrid
76            yzlay(i,1)=RD*yt(i,1)/(0.5*(ypaprs(i,1)+ypplay(i,1)))
77     .                *(ypaprs(i,1)-ypplay(i,1))/RG
78         enddo
79         do k=2,klev
80            do i=1,ngrid
81               yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))
82     s                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
83            enddo
84         enddo
85         do k=1,klev
86            do i=1,ngrid
87cATTENTION:on passe la temperature potentielle virt. pour le calcul de K
88             yteta(i,k)=yt(i,k)*(ypaprs(i,1)/ypplay(i,k))**rkappa
89            enddo
90         enddo
91         do i=1,ngrid
92            yzlev(i,1)=0.
93            yzlev(i,klev+1)=2.*yzlay(i,klev)-yzlay(i,klev-1)
94         enddo
95         do k=2,klev
96            do i=1,ngrid
97               yzlev(i,k)=0.5*(yzlay(i,k)+yzlay(i,k-1))
98            enddo
99         enddo
100
101
102cIM cf FH   yustar(:) =SQRT(ycoefm(:,1)*(yu(:,1)*yu(:,1)+yv(:,1)*yv(:,1)))
103      yustar(1:ngrid) =SQRT(ycoefm(1:ngrid,1)*
104     $       (yu(1:ngrid,1)*yu(1:ngrid,1)+yv(1:ngrid,1)*yv(1:ngrid,1)))
105
106c  Fin de la partie qui doit etre unclue a terme dans clmain.
107
108Cette routine est ecrite pour avoir en entree ustar, teta et zlev
109c  Ici, on a inclut le calcul de ces trois variables dans la routine
110c  coefkzmin en attendant une nouvelle version de la couche limite
111c  ou ces variables seront disponibles.
112
113c Debut de la routine coefkzmin proprement dite.
114
115      ustar=yustar
116      teta=yteta
117      zlev=yzlev
118
119      do ig=1,ngrid
120      coriol(ig)=1.e-4
121      pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5)
122      enddo
123     
124      do k=2,klev
125         do ig=1,ngrid
126            if (teta(ig,2).gt.teta(ig,1)) then
127               qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
128               kmin=kap*zlev(ig,k)*qmin
129            else
130               kmin=0. ! kmin n'est utilise que pour les SL stables.
131            endif
132            kn(ig,k)=kmin
133            km(ig,k)=kmin
134         enddo
135      enddo
136
137
138      return
139      end
Note: See TracBrowser for help on using the repository browser.