source: LMDZ4/trunk/libf/phylmd/thermcell_height.F90 @ 923

Last change on this file since 923 was 878, checked in by Laurent Fairhead, 17 years ago

Bascule de la physique du LMD vers la physique avec thermiques
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1      SUBROUTINE thermcell_height(ngrid,nlay,lalim,lmin,linter,lmix,  &
2     &           zw2,zlev,lmax,zmax,zmax0,zmix,wmax,lev_out)                           
3
4!-----------------------------------------------------------------------------
5!thermcell_height: calcul des caracteristiques du thermique: zmax,wmax,zmix
6!-----------------------------------------------------------------------------
7      IMPLICIT NONE
8
9      INTEGER ig,l
10      INTEGER ngrid,nlay
11      INTEGER lalim(ngrid),lmin(ngrid)
12      INTEGER lmix(ngrid)
13      REAL linter(ngrid)
14      integer lev_out                           ! niveau pour les print
15
16      REAL zw2(ngrid,nlay+1)
17      REAL zlev(ngrid,nlay+1)
18
19      REAL wmax(ngrid)
20      INTEGER lmax(ngrid)
21      REAL zmax(ngrid)
22      REAL zmax0(ngrid)
23      REAL zmix(ngrid)
24
25      REAL zlevinter(ngrid)
26
27!calcul de la hauteur max du thermique
28      do ig=1,ngrid
29         lmax(ig)=lalim(ig)
30      enddo
31      do ig=1,ngrid
32         do l=nlay,lalim(ig)+1,-1
33            if (zw2(ig,l).le.1.e-10) then
34               lmax(ig)=l-1
35            endif
36         enddo
37      enddo
38! pas de thermique si couche 1 stable
39      do ig=1,ngrid
40         if (lmin(ig).gt.1) then
41             lmax(ig)=1
42             lmin(ig)=1
43             lalim(ig)=1
44         endif
45      enddo
46!   
47! Determination de zw2 max
48      do ig=1,ngrid
49         wmax(ig)=0.
50      enddo
51
52      do l=1,nlay
53         do ig=1,ngrid
54            if (l.le.lmax(ig)) then
55                if (zw2(ig,l).lt.0.)then
56                  print*,'pb2 zw2<0'
57                endif
58                zw2(ig,l)=sqrt(zw2(ig,l))
59                wmax(ig)=max(wmax(ig),zw2(ig,l))
60            else
61                 zw2(ig,l)=0.
62            endif
63          enddo
64      enddo
65
66!   Longueur caracteristique correspondant a la hauteur des thermiques.
67      do  ig=1,ngrid
68         zmax(ig)=0.
69         zlevinter(ig)=zlev(ig,1)
70      enddo
71      do  ig=1,ngrid
72! calcul de zlevinter
73          zlevinter(ig)=(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*  &
74     &    linter(ig)+zlev(ig,lmax(ig))-lmax(ig)*(zlev(ig,lmax(ig)+1)  &
75     &    -zlev(ig,lmax(ig)))
76!pour le cas ou on prend tjs lmin=1
77!       zmax(ig)=max(zmax(ig),zlevinter(ig)-zlev(ig,lmin(ig)))
78       zmax(ig)=max(zmax(ig),zlevinter(ig)-zlev(ig,1))
79       zmax0(ig)=zmax(ig)
80      enddo
81!
82! def de  zmix continu (profil parabolique des vitesses)
83      do ig=1,ngrid
84           if (lmix(ig).gt.1) then
85! test
86              if (((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))  &
87     &        *((zlev(ig,lmix(ig)))-(zlev(ig,lmix(ig)+1)))  &
88     &        -(zw2(ig,lmix(ig))-zw2(ig,lmix(ig)+1))  &
89     &        *((zlev(ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))).gt.1e-10)  &
90     &        then
91!             
92            zmix(ig)=((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))  &
93     &        *((zlev(ig,lmix(ig)))**2-(zlev(ig,lmix(ig)+1))**2)  &
94     &        -(zw2(ig,lmix(ig))-zw2(ig,lmix(ig)+1))  &
95     &        *((zlev(ig,lmix(ig)-1))**2-(zlev(ig,lmix(ig)))**2))  &
96     &        /(2.*((zw2(ig,lmix(ig)-1)-zw2(ig,lmix(ig)))  &
97     &        *((zlev(ig,lmix(ig)))-(zlev(ig,lmix(ig)+1)))  &
98     &        -(zw2(ig,lmix(ig))-zw2(ig,lmix(ig)+1))  &
99     &        *((zlev(ig,lmix(ig)-1))-(zlev(ig,lmix(ig))))))
100              else
101              zmix(ig)=zlev(ig,lmix(ig))
102              print*,'pb zmix'
103              endif
104          else
105              zmix(ig)=0.
106          endif
107!test
108         if ((zmax(ig)-zmix(ig)).le.0.) then
109            zmix(ig)=0.9*zmax(ig)
110!            print*,'pb zmix>zmax'
111         endif
112      enddo
113!
114! calcul du nouveau lmix correspondant
115      do ig=1,ngrid
116         do l=1,nlay
117            if (zmix(ig).ge.zlev(ig,l).and.  &
118     &          zmix(ig).lt.zlev(ig,l+1)) then
119              lmix(ig)=l
120             endif
121          enddo
122      enddo
123!
124      return
125      end
Note: See TracBrowser for help on using the repository browser.