GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/lmdz_thermcell_closure.F90 Lines: 17 17 100.0 %
Date: 2023-06-30 12:51:15 Branches: 18 18 100.0 %

Line Branch Exec Source
1
MODULE lmdz_thermcell_closure
2
!
3
! $Header$
4
!
5
CONTAINS
6
7
288
      SUBROUTINE thermcell_closure(ngrid,nlay,r_aspect,ptimestep,rho,  &
8
288
     &   zlev,lalim,alim_star,zmax,wmax,f)
9
10
!-------------------------------------------------------------------------
11
!thermcell_closure: fermeture, determination de f
12
!
13
! Modification 7 septembre 2009
14
! 1. On enleve alim_star_tot des arguments pour le recalculer et etre ainis
15
! coherent avec l'integrale au numerateur.
16
! 2. On ne garde qu'une version des couples wmax,zmax et wmax_sec,zmax_sec
17
! l'idee etant que le choix se fasse a l'appel de thermcell_closure
18
! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if
19
!-------------------------------------------------------------------------
20
      IMPLICIT NONE
21
22
! --- arguments ------------------------------------------
23
integer, intent(in) :: ngrid,nlay
24
real, intent(in) :: r_aspect,ptimestep
25
real, intent(in), dimension(ngrid,nlay) :: alim_star,rho,zlev
26
integer, intent(in), dimension(ngrid) :: lalim
27
real, intent(in), dimension(ngrid) :: zmax,wmax
28
29
real, intent(out), dimension(ngrid) :: f
30
31
32
! --- local ------------------------------------------
33
288
real, dimension(ngrid) :: zdenom,alim_star2,alim_star_tot
34
INTEGER llmax
35
INTEGER ig,k
36
37
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38
!print*,'THERMCELL CLOSURE 26E'
39
40
286560
alim_star2(:)=0.
41
286560
alim_star_tot(:)=0.
42
286560
f(:)=0.
43
44
! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine
45
llmax=1
46
286560
do ig=1,ngrid
47
286560
   if (lalim(ig)>llmax) llmax=lalim(ig)
48
enddo
49
50
51
! Calcul des integrales sur la verticale de alim_star et de
52
!   alim_star^2/(rho dz)
53
2115
do k=1,llmax-1
54
1818153
   do ig=1,ngrid
55
1817865
      if (k<lalim(ig)) then
56
         alim_star2(ig)=alim_star2(ig)+alim_star(ig,k)**2  &
57
341470
&                    /(rho(ig,k)*(zlev(ig,k+1)-zlev(ig,k)))
58
341470
         alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,k)
59
      endif
60
   enddo
61
enddo
62
63
64
286560
do ig=1,ngrid
65
286560
   if (alim_star2(ig)>1.e-10) then
66
      f(ig)=wmax(ig)*alim_star_tot(ig)/  &
67
137471
&     (max(500.,zmax(ig))*r_aspect*alim_star2(ig))
68
   endif
69
enddo
70
71
72
73
288
 RETURN
74
      end
75
END MODULE lmdz_thermcell_closure