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

Last change on this file since 900 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: 2.7 KB
Line 
1      SUBROUTINE thermcell_init(ngrid,nlay,ztv,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      INTEGER l,ig
9!arguments d entree
10      INTEGER ngrid,nlay
11      REAL ztv(ngrid,nlay)
12      REAL zlev(ngrid,nlay)
13!arguments de sortie
14      INTEGER lalim(ngrid)
15      INTEGER lmin(ngrid)
16      REAL alim_star(ngrid,nlay)
17      REAL alim_star_tot(ngrid)
18      integer lev_out                           ! niveau pour les print
19     
20!CR: ponderation entrainement des couches instables
21!def des alim_star tels que alim=f*alim_star     
22
23      do l=1,nlay
24         do ig=1,ngrid
25            alim_star(ig,l)=0.
26         enddo
27      enddo
28! determination de la longueur de la couche d entrainement
29      do ig=1,ngrid
30         lalim(ig)=1
31      enddo
32
33!on ne considere que les premieres couches instables
34      do l=nlay-2,1,-1
35         do ig=1,ngrid
36            if (ztv(ig,l).gt.ztv(ig,l+1).and.  &
37     &          ztv(ig,l+1).le.ztv(ig,l+2)) then
38               lalim(ig)=l+1
39            endif
40          enddo
41      enddo
42
43! determination du lmin: couche d ou provient le thermique
44
45      do ig=1,ngrid
46! FH initialisation de lmin a nlay plutot que 1.
47!        lmin(ig)=nlay
48         lmin(ig)=1
49      enddo
50      do l=nlay,2,-1
51         do ig=1,ngrid
52            if (ztv(ig,l-1).gt.ztv(ig,l)) then
53               lmin(ig)=l-1
54            endif
55         enddo
56      enddo
57!
58! definition de l'entrainement des couches
59      do l=1,nlay-1
60         do ig=1,ngrid
61            if (ztv(ig,l).gt.ztv(ig,l+1).and.  &
62     &          l.ge.lmin(ig).and.l.lt.lalim(ig)) then
63!def possibles pour alim_star: zdthetadz, dthetadz, zdtheta
64             alim_star(ig,l)=MAX((ztv(ig,l)-ztv(ig,l+1)),0.)  &
65     &                       *sqrt(zlev(ig,l+1))
66            endif
67         enddo
68      enddo
69     
70! pas de thermique si couche 1 stable
71      do ig=1,ngrid
72!CRnouveau test
73        if (alim_star(ig,1).lt.1.e-10) then
74            do l=1,nlay
75                alim_star(ig,l)=0.
76            enddo
77            lmin(ig)=1
78         endif
79      enddo
80! calcul de l alimentation totale
81      do ig=1,ngrid
82         alim_star_tot(ig)=0.
83      enddo
84      do l=1,nlay
85         do ig=1,ngrid
86            alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,l)
87         enddo
88      enddo
89!
90! Calcul entrainement normalise
91      do l=1,nlay
92         do ig=1,ngrid
93            if (alim_star_tot(ig).gt.1.e-10) then
94               alim_star(ig,l)=alim_star(ig,l)/alim_star_tot(ig)
95            endif
96         enddo
97      enddo
98       
99      return
100      end 
Note: See TracBrowser for help on using the repository browser.