source: LMDZ4/trunk/libf/phytherm/thermcell_dry.F90 @ 832

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

Rajout de la physique utilisant les thermiques FH
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1       SUBROUTINE thermcell_dry(ngrid,nlay,zlev,pphi,ztv,entr_star,  &
2     &                            lentr,lmin,zmax,wmax,lev_out)
3
4!--------------------------------------------------------------------------
5!thermcell_dry: calcul de zmax et wmax du thermique sec
6!--------------------------------------------------------------------------
7       IMPLICIT NONE
8#include "YOMCST.h"       
9       INTEGER l,ig
10
11       INTEGER ngrid,nlay
12       REAL zlev(ngrid,nlay+1)
13       REAL pphi(ngrid,nlay)
14       REAl ztv(ngrid,nlay)
15       REAL entr_star(ngrid,nlay)
16       INTEGER lentr(ngrid)
17      integer lev_out                           ! niveau pour les print
18
19       REAL zmax(ngrid)
20       REAL wmax(ngrid)
21
22!variables locales
23       REAL zw2(ngrid,nlay+1)
24       REAL f_star(ngrid,nlay+1)
25       REAL ztva(ngrid,nlay+1)
26       REAL wmaxa(ngrid)
27       REAL wa_moy(ngrid,nlay+1)
28       REAL linter(ngrid),zlevinter(ngrid)
29       INTEGER lmix(ngrid),lmax(ngrid),lmin(ngrid)
30
31!initialisations
32       do ig=1,ngrid
33          do l=1,nlay+1
34             zw2(ig,l)=0.
35             f_star(ig,l)=0.
36             wa_moy(ig,l)=0.
37          enddo
38       enddo
39       do ig=1,ngrid
40          do l=1,nlay
41             ztva(ig,l)=ztv(ig,l)
42          enddo
43       enddo
44       do ig=1,ngrid
45          wmax(ig)=0.
46          wmaxa(ig)=0.
47       enddo
48!calcul de la vitesse a partir de la CAPE en melangeant thetav
49       do l=1,nlay-2
50         do ig=1,ngrid
51            if (ztv(ig,l).gt.ztv(ig,l+1)  &
52     &         .and.entr_star(ig,l).gt.1.e-10  &
53     &         .and.zw2(ig,l).lt.1e-10) then
54               f_star(ig,l+1)=entr_star(ig,l)
55!
56               zw2(ig,l+1)=2.*RG*(ztv(ig,l)-ztv(ig,l+1))/ztv(ig,l+1)  &
57     &                     *(zlev(ig,l+1)-zlev(ig,l))  &
58     &                     *0.4*pphi(ig,l)/(pphi(ig,l+1)-pphi(ig,l))
59            else if ((zw2(ig,l).ge.1e-10).and.  &
60     &               (f_star(ig,l)+entr_star(ig,l).gt.1.e-10)) then
61               f_star(ig,l+1)=f_star(ig,l)+entr_star(ig,l)
62               ztva(ig,l)=(f_star(ig,l)*ztva(ig,l-1)+entr_star(ig,l)  &
63     &                    *ztv(ig,l))/f_star(ig,l+1)
64               zw2(ig,l+1)=zw2(ig,l)*(f_star(ig,l)/f_star(ig,l+1))**2+  &
65     &                     2.*RG*(ztva(ig,l)-ztv(ig,l))/ztv(ig,l)  &
66     &                     *(zlev(ig,l+1)-zlev(ig,l))
67            endif
68! determination de zmax continu par interpolation lineaire
69            if (zw2(ig,l+1).lt.0.) then
70               linter(ig)=(l*(zw2(ig,l+1)-zw2(ig,l))  &
71     &           -zw2(ig,l))/(zw2(ig,l+1)-zw2(ig,l))
72               zw2(ig,l+1)=0.
73            else
74               wa_moy(ig,l+1)=sqrt(zw2(ig,l+1))
75            endif
76
77            if (wa_moy(ig,l+1).gt.wmaxa(ig)) then
78!   lmix est le niveau de la couche ou w (wa_moy) est maximum
79               lmix(ig)=l+1
80               wmaxa(ig)=wa_moy(ig,l+1)
81            endif
82         enddo
83      enddo
84       if (lev_out.ge.1) print*,'fin calcul zw2'
85!
86! Calcul de la couche correspondant a la hauteur du thermique
87      do ig=1,ngrid
88         lmax(ig)=lentr(ig)
89      enddo
90      do ig=1,ngrid
91         do l=nlay,lentr(ig)+1,-1
92            if (zw2(ig,l).le.1.e-10) then
93               lmax(ig)=l-1
94            endif
95         enddo
96      enddo
97!   
98! Determination de zw2 max
99      do ig=1,ngrid
100         wmax(ig)=0.
101      enddo
102
103      do l=1,nlay
104         do ig=1,ngrid
105            if (l.le.lmax(ig)) then
106                zw2(ig,l)=sqrt(zw2(ig,l))
107                wmax(ig)=max(wmax(ig),zw2(ig,l))
108            else
109                 zw2(ig,l)=0.
110            endif
111          enddo
112      enddo
113
114!   Longueur caracteristique correspondant a la hauteur des thermiques.
115      do  ig=1,ngrid
116         zmax(ig)=0.
117         zlevinter(ig)=zlev(ig,1)
118      enddo
119      do  ig=1,ngrid
120! calcul de zlevinter
121          zlevinter(ig)=(zlev(ig,lmax(ig)+1)-zlev(ig,lmax(ig)))*  &
122     &    linter(ig)+zlev(ig,lmax(ig))-lmax(ig)*(zlev(ig,lmax(ig)+1)  &
123     &    -zlev(ig,lmax(ig)))
124           zmax(ig)=max(zmax(ig),zlevinter(ig)-zlev(ig,lmin(ig)))
125      enddo
126!on stoppe après les calculs de zmax et wmax
127     
128      RETURN
129      END
Note: See TracBrowser for help on using the repository browser.