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

Last change on this file since 2064 was 2064, checked in by aboissinot, 6 years ago

Fix a bug in thermcell_closure arguments which implies wrong fluxes normalization.

File size: 3.3 KB
Line 
1!
2!
3!
4      SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,             &
5      &                            lalim,alim_star,f_star,                    &
6      &                            zmax,wmax,f,lev_out)
7     
8!==============================================================================
9!thermcell_closure: fermeture, determination de f
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
16! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if
17!==============================================================================
18     
19      USE thermcell_mod
20     
21      IMPLICIT NONE
22     
23     
24!=============================================================================
25! Declaration
26!=============================================================================
27     
28!      inputs:
29!      -------
30     
31      INTEGER ngrid,nlay
32      INTEGER lalim(ngrid)
33      INTEGER lev_out                           ! niveau pour les print
34     
35      REAL alim_star(ngrid,nlay)
36      REAL f_star(ngrid,nlay+1)
37      REAL rho(ngrid,nlay)
38      REAL zlev(ngrid,nlay)
39      REAL zmax(ngrid)
40      REAL wmax(ngrid)
41      REAL ptimestep
42     
43!      outputs:
44!      --------
45     
46      REAL f(ngrid)
47     
48!      local:
49!      ------
50     
51      INTEGER ig,k
52      INTEGER llmax
53     
54      REAL alim_star_tot(ngrid)
55      REAL alim_star2(ngrid)
56      REAL zdenom(ngrid)
57     
58!==============================================================================
59! Initialization
60!==============================================================================
61     
62      alim_star2(:) = 0.
63      alim_star_tot(:) = 0.
64     
65      f(:) = 0.
66     
67      llmax = 1
68     
69!==============================================================================
70! Closure
71!==============================================================================
72     
73!------------------------------------------------------------------------------
74! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine
75!------------------------------------------------------------------------------
76     
77      DO ig=1,ngrid
78         IF (lalim(ig)>llmax) THEN
79            llmax = lalim(ig)
80         ENDIF
81      ENDDO
82     
83!------------------------------------------------------------------------------
84! Calcul des integrales sur la verticale de alim_star et de alim_star^2/(rho dz)
85!------------------------------------------------------------------------------
86     
87      DO k=1,llmax-1
88         DO ig=1,ngrid
89            IF (k<lalim(ig)) THEN
90               alim_star2(ig) = alim_star2(ig) + alim_star(ig,k)**2           &
91               &              / (rho(ig,k) * (zlev(ig,k+1) - zlev(ig,k)))
92               alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig,k)
93            ENDIF
94         ENDDO
95      ENDDO
96     
97      DO ig=1,ngrid
98         IF (alim_star2(ig)>1.e-10) THEN
99            f(ig) = wmax(ig) * alim_star_tot(ig)                              &
100            &     / (max(500.,zmax(ig)) * r_aspect_thermals * alim_star2(ig))
101         ENDIF
102      ENDDO
103     
104RETURN
105END
Note: See TracBrowser for help on using the repository browser.