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

Last change on this file since 938 was 938, checked in by lmdzadmin, 16 years ago

Enleve prints par defaut
IM

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