source: LMDZ4/trunk/libf/phylmd/thermcell_init.F90 @ 1291

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

Un peu de nettoyage
ACA/FH/IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.4 KB
Line 
1      SUBROUTINE thermcell_init(ngrid,nlay,ztv,zlay,zlev,  &
2     &                  lalim,lmin,alim_star,alim_star_tot,lev_out)
3
4!----------------------------------------------------------------------
5!thermcell_init: calcul du profil d alimentation du thermique
6!----------------------------------------------------------------------
7      IMPLICIT NONE
8#include "iniprint.h"
9#include "thermcell.h"
10
11      INTEGER l,ig
12!arguments d entree
13      INTEGER ngrid,nlay
14      REAL ztv(ngrid,nlay)
15      REAL zlay(ngrid,nlay)
16      REAL zlev(ngrid,nlay+1)
17!arguments de sortie
18      INTEGER lalim(ngrid)
19      INTEGER lmin(ngrid)
20      REAL alim_star(ngrid,nlay)
21      REAL alim_star_tot(ngrid)
22      integer lev_out                           ! niveau pour les print
23     
24      REAL zzalim(ngrid)
25!CR: ponderation entrainement des couches instables
26!def des alim_star tels que alim=f*alim_star     
27
28      do l=1,nlay
29         do ig=1,ngrid
30            alim_star(ig,l)=0.
31         enddo
32      enddo
33! determination de la longueur de la couche d entrainement
34      do ig=1,ngrid
35         lalim(ig)=1
36      enddo
37
38      if (iflag_thermals_ed.ge.1) then
39!si la première couche est instable, on declenche un thermique
40         do ig=1,ngrid
41            if (ztv(ig,1).gt.ztv(ig,2)) then
42               lmin(ig)=1
43               lalim(ig)=2
44               alim_star(ig,1)=1.
45               alim_star_tot(ig)=alim_star(ig,1)
46               if(prt_level.GE.10) print*,'init',alim_star(ig,1),alim_star_tot(ig)
47            else
48                lmin(ig)=1
49                lalim(ig)=1
50                alim_star(ig,1)=0.
51                alim_star_tot(ig)=0.
52            endif
53         enddo
54 
55         else
56!else iflag_thermals_ed=0 ancienne def de l alim
57
58!on ne considere que les premieres couches instables
59      do l=nlay-2,1,-1
60         do ig=1,ngrid
61            if (ztv(ig,l).gt.ztv(ig,l+1).and.  &
62     &          ztv(ig,l+1).le.ztv(ig,l+2)) then
63               lalim(ig)=l+1
64            endif
65          enddo
66      enddo
67
68! determination du lmin: couche d ou provient le thermique
69
70      do ig=1,ngrid
71! FH initialisation de lmin a nlay plutot que 1.
72!        lmin(ig)=nlay
73         lmin(ig)=1
74      enddo
75      do l=nlay,2,-1
76         do ig=1,ngrid
77            if (ztv(ig,l-1).gt.ztv(ig,l)) then
78               lmin(ig)=l-1
79            endif
80         enddo
81      enddo
82!
83      zzalim(:)=0.
84      do l=1,nlay-1
85         do ig=1,ngrid
86             if (l<lalim(ig)) then
87                zzalim(ig)=zzalim(ig)+zlay(ig,l)*(ztv(ig,l)-ztv(ig,l+1))
88             endif
89          enddo
90      enddo
91      do ig=1,ngrid
92          if (lalim(ig)>1) then
93             zzalim(ig)=zlay(ig,1)+zzalim(ig)/(ztv(ig,1)-ztv(ig,lalim(ig)))
94          else
95             zzalim(ig)=zlay(ig,1)
96          endif
97      enddo
98
99      if(prt_level.GE.10) print*,'ZZALIM LALIM ',zzalim,lalim,zlay(1,lalim(1))
100
101! definition de l'entrainement des couches
102      if (1.eq.1) then
103      do l=1,nlay-1
104         do ig=1,ngrid
105            if (ztv(ig,l).gt.ztv(ig,l+1).and.  &
106     &          l.ge.lmin(ig).and.l.lt.lalim(ig)) then
107!def possibles pour alim_star: zdthetadz, dthetadz, zdtheta
108             alim_star(ig,l)=MAX((ztv(ig,l)-ztv(ig,l+1)),0.)  &
109     &                       *sqrt(zlev(ig,l+1))
110            endif
111         enddo
112      enddo
113      else
114      do l=1,nlay-1
115         do ig=1,ngrid
116            if (ztv(ig,l).gt.ztv(ig,l+1).and.  &
117     &          l.ge.lmin(ig).and.l.lt.lalim(ig)) then
118             alim_star(ig,l)=max(3.*zzalim(ig)-zlay(ig,l),0.) &
119     &        *(zlev(ig,l+1)-zlev(ig,l))
120            endif
121         enddo
122      enddo
123      endif
124     
125! pas de thermique si couche 1 stable
126      do ig=1,ngrid
127!CRnouveau test
128        if (alim_star(ig,1).lt.1.e-10) then
129            do l=1,nlay
130                alim_star(ig,l)=0.
131            enddo
132            lmin(ig)=1
133         endif
134      enddo
135! calcul de l alimentation totale
136      do ig=1,ngrid
137         alim_star_tot(ig)=0.
138      enddo
139      do l=1,nlay
140         do ig=1,ngrid
141            alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,l)
142         enddo
143      enddo
144!
145! Calcul entrainement normalise
146      do l=1,nlay
147         do ig=1,ngrid
148            if (alim_star_tot(ig).gt.1.e-10) then
149               alim_star(ig,l)=alim_star(ig,l)/alim_star_tot(ig)
150            endif
151         enddo
152      enddo
153       
154!on remet alim_star_tot a 1
155      do ig=1,ngrid
156         alim_star_tot(ig)=1.
157      enddo
158
159      endif
160!endif iflag_thermals_ed
161      return
162      end 
Note: See TracBrowser for help on using the repository browser.