source: trunk/LMDZ.GENERIC/libf/phystd/thermcell_closure.F90 @ 2176

Last change on this file since 2176 was 2145, checked in by aboissinot, 5 years ago

Some temporary outputs in thermcell_closure are removed and a bug in
thermcell_plume is fixed.

File size: 3.4 KB
RevLine 
[2060]1!
2!
3!
[2127]4SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,                   &
[2143]5                             lmax,alim_star,zmin,zmax,wmax,f)
[2060]6     
[2143]7     
[2127]8!===============================================================================
9!  Purpose: fermeture, determination de f
[2060]10!
11! Modification 7 septembre 2009
12! 1. On enleve alim_star_tot des arguments pour le recalculer et etre ainis
13! coherent avec l'integrale au numerateur.
14! 2. On ne garde qu'une version des couples wmax,zmax et wmax_sec,zmax_sec
15! l'idee etant que le choix se fasse a l'appel de thermcell_closure
[2143]16! 3. Vectorisation en mettant les boucles en l a l'exterieur avec des if
[2127]17!===============================================================================
[2060]18     
19      USE thermcell_mod
20     
21      IMPLICIT NONE
22     
23     
[2127]24!===============================================================================
[2060]25! Declaration
[2127]26!===============================================================================
[2060]27     
[2127]28!     Inputs:
29!     -------
[2060]30     
[2127]31      INTEGER ngrid, nlay
32      INTEGER lmax(ngrid)
[2060]33     
[2127]34      REAL ptimestep
[2060]35      REAL rho(ngrid,nlay)
36      REAL zlev(ngrid,nlay)
[2127]37      REAL alim_star(ngrid,nlay)
[2143]38      REAL zmin(ngrid)
[2060]39      REAL zmax(ngrid)
40      REAL wmax(ngrid)
41     
[2127]42!     Outputs:
43!     --------
[2060]44     
45      REAL f(ngrid)
46     
[2127]47!     Local:
48!     ------
[2060]49     
[2127]50      INTEGER ig, l
[2060]51      INTEGER llmax
52     
53      REAL alim_star_tot(ngrid)
54      REAL alim_star2(ngrid)
[2143]55      REAL plume_height(ngrid)
[2060]56     
[2127]57!===============================================================================
[2060]58! Initialization
[2127]59!===============================================================================
[2060]60     
61      alim_star2(:) = 0.
62      alim_star_tot(:) = 0.
63     
64      f(:) = 0.
65     
66      llmax = 1
67     
[2143]68      DO ig=1,ngrid
69         plume_height(ig) = zmax(ig) - zmin(ig)
70      ENDDO
71     
[2127]72!===============================================================================
[2060]73! Closure
[2127]74!===============================================================================
[2060]75     
[2127]76!-------------------------------------------------------------------------------
77! Indice vertical max atteint par les thermiques sur le domaine
78!-------------------------------------------------------------------------------
[2060]79     
80      DO ig=1,ngrid
[2143]81         IF (lmax(ig) > llmax) THEN
[2127]82            llmax = lmax(ig)
[2060]83         ENDIF
84      ENDDO
85     
[2127]86!-------------------------------------------------------------------------------
[2060]87! Calcul des integrales sur la verticale de alim_star et de alim_star^2/(rho dz)
[2127]88!-------------------------------------------------------------------------------
[2060]89     
[2127]90      DO l=1,llmax-1
[2060]91         DO ig=1,ngrid
[2127]92            IF (l < lmax(ig)) THEN
93               alim_star2(ig) = alim_star2(ig) + alim_star(ig,l)**2           &
[2143]94               &              / (rho(ig,l) * (zlev(ig,l+1) - zlev(ig,l)))        ! => intergration is ok because alim_star = a* dz
[2127]95               alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig,l)
[2060]96            ENDIF
97         ENDDO
98      ENDDO
99     
100      DO ig=1,ngrid
[2143]101         IF ((alim_star2(ig) > 0.).and.(plume_height(ig) > 0.)) THEN
102            f(ig) = wmax(ig) * alim_star_tot(ig)                              &  ! => normalization is ok
103            &     / (plume_height(ig) * r_aspect_thermals * alim_star2(ig))
[2127]104         ELSE
105            f(ig) = 0.
[2060]106         ENDIF
107      ENDDO
108     
[2127]109     
[2060]110RETURN
111END
Note: See TracBrowser for help on using the repository browser.