source: LMDZ4/branches/LMDZ4_par_0/libf/phylmd/coefkzmin.F @ 5080

Last change on this file since 5080 was 634, checked in by Laurent Fairhead, 20 years ago

Modifications faites à la physique pour la rendre parallele YM
Une branche de travail LMDZ4_par_0 a été créée provisoirement afin de tester
les modifs pleinement avant leurs inclusions dans le tronc principal
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
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)
7      USE dimphy
8      IMPLICIT NONE
9
10cym#include "dimensions.h"
11cym#include "dimphy.h"
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
62cym      PARAMETER (nlay=klev)
63cym      PARAMETER (nlev=klev+1)
64
65      integer ig,k
66
67      real kap
68      save kap
69      data kap/0.4/
70
71      real frif,falpha,fsm
72      real fl,zzz,zl0,zq2,zn2
73
74      nlay=klev
75      nlev=klev+1
76c.......................................................................
77c  en attendant une version ou les zlev, et zlay soient
78c  disponibles.
79c  Debut de la partie qui doit etre unclue a terme dans clmain.
80c
81         do i=1,ngrid
82            yzlay(i,1)=RD*yt(i,1)/(0.5*(ypaprs(i,1)+ypplay(i,1)))
83     .                *(ypaprs(i,1)-ypplay(i,1))/RG
84         enddo
85         do k=2,klev
86            do i=1,ngrid
87               yzlay(i,k)=yzlay(i,k-1)+RD*0.5*(yt(i,k-1)+yt(i,k))
88     s                /ypaprs(i,k)*(ypplay(i,k-1)-ypplay(i,k))/RG
89            enddo
90         enddo
91         do k=1,klev
92            do i=1,ngrid
93cATTENTION:on passe la temperature potentielle virt. pour le calcul de K
94             yteta(i,k)=yt(i,k)*(ypaprs(i,1)/ypplay(i,k))**rkappa
95     s          *(1.+0.61*yq(i,k))
96            enddo
97         enddo
98         do i=1,ngrid
99            yzlev(i,1)=0.
100            yzlev(i,klev+1)=2.*yzlay(i,klev)-yzlay(i,klev-1)
101         enddo
102         do k=2,klev
103            do i=1,ngrid
104               yzlev(i,k)=0.5*(yzlay(i,k)+yzlay(i,k-1))
105            enddo
106         enddo
107
108
109cIM cf FH   yustar(:) =SQRT(ycoefm(:,1)*(yu(:,1)*yu(:,1)+yv(:,1)*yv(:,1)))
110      yustar(1:ngrid) =SQRT(ycoefm(1:ngrid,1)*
111     $       (yu(1:ngrid,1)*yu(1:ngrid,1)+yv(1:ngrid,1)*yv(1:ngrid,1)))
112
113c  Fin de la partie qui doit etre unclue a terme dans clmain.
114
115Cette routine est ecrite pour avoir en entree ustar, teta et zlev
116c  Ici, on a inclut le calcul de ces trois variables dans la routine
117c  coefkzmin en attendant une nouvelle version de la couche limite
118c  ou ces variables seront disponibles.
119
120c Debut de la routine coefkzmin proprement dite.
121
122      ustar=yustar
123      teta=yteta
124      zlev=yzlev
125
126      do ig=1,ngrid
127      coriol(ig)=1.e-4
128      pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5)
129      enddo
130     
131      do k=2,klev
132         do ig=1,ngrid
133            if (teta(ig,2).gt.teta(ig,1)) then
134               qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2
135               kmin=kap*zlev(ig,k)*qmin
136            else
137               kmin=0. ! kmin n'est utilise que pour les SL stables.
138            endif
139            kn(ig,k)=kmin
140            km(ig,k)=kmin
141         enddo
142      enddo
143
144
145      return
146      end
Note: See TracBrowser for help on using the repository browser.