source: trunk/LMDZ.VENUS/libf/phyvenus/coefkzmin.F @ 3094

Last change on this file since 3094 was 1530, checked in by emillour, 9 years ago

Venus and Titan GCMs:
Updates in the physics to keep up with updates in LMDZ5 (up to
LMDZ5 trunk, rev 2350) concerning dynamics/physics separation:

  • Adapted makelmdz and makelmdz_fcm script to stop if trying to compile 1d model or newstart or start2archive in parallel.
  • got rid of references to "dimensions.h" in physics. Within physics packages, use nbp_lon (=iim), nbp_lat (=jjmp1) and nbp_lev (=llm) from module mod_grid_phy_lmdz (in phy_common) instead. Only partially done for Titan, because of many hard-coded commons; a necessary first step will be to clean these up (using modules).

EM

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