source: trunk/LMDZ.GENERIC/libf/phystd/thermcell_alim.F90 @ 2069

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

f0 is now allocated only if calltherm=true.
Useless thermal plume model flag "iflag_thermals_alim" is removed.

File size: 2.8 KB
Line 
1!
2!
3!
4      SUBROUTINE thermcell_alim(ngrid,klev,ztv,zlev,alim_star,lalim,lmin)
5     
6     
7      USE thermcell_mod, ONLY: linf, d_temp
8     
9      IMPLICIT NONE
10     
11!==============================================================================
12! FH : 2015/11/06
13! thermcell_alim: calcule la distribution verticale de l'alimentation
14! laterale a la base des panaches thermiques
15!==============================================================================
16     
17     
18!==============================================================================
19! Declaration
20!==============================================================================
21     
22!      inputs:
23!      -------
24     
25      INTEGER, INTENT(IN) :: ngrid
26      INTEGER, INTENT(IN) :: klev
27      INTEGER, INTENT(IN) :: lmin(ngrid)        ! plume initial level
28     
29      REAL, INTENT(IN) :: ztv(ngrid,klev)       ! Large scale virtual potential temperature
30! Virtual potential temperature offset in linf layer
31      REAL, INTENT(IN) :: zlev(ngrid,klev+1)    ! levels altitude
32     
33!      outputs:
34!      --------
35     
36      INTEGER, INTENT(OUT) :: lalim(ngrid)      ! alimentation maximal level
37     
38      REAL, INTENT(OUT) :: alim_star(ngrid,klev)
39     
40!      local:
41!      ------
42     
43      INTEGER :: ig, l
44     
45      REAL :: alim_star_tot(ngrid)              ! integrated alimentation
46      REAL :: ztv2(ngrid,klev)                  ! ztv + d_temp
47     
48!==============================================================================
49! Initialization
50!==============================================================================
51     
52      lalim(:) = 1
53     
54      alim_star_tot(:) = 0.
55     
56      ztv2(:,:) = ztv(:,:)
57      ztv2(:,linf) = ztv2(:,linf) + d_temp
58     
59!==============================================================================
60! Alimentation computation
61!==============================================================================
62     
63      DO l=lmin(ig),klev-1
64         DO ig=1,ngrid
65            IF ((ztv2(ig,l)>ztv2(ig,l+1)).and.(ztv2(ig,lmin(ig))>=ztv2(ig,l))) THEN
66               alim_star(ig,l) = MAX( (ztv2(ig,l) - ztv2(ig,l+1)), 0.)  &
67               &               * sqrt(zlev(ig,l+1))
68               lalim(ig) = l + 1
69               alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig,l)
70            ELSE
71               alim_star(ig,l) = 0.
72            ENDIF
73         ENDDO
74      ENDDO
75     
76!------------------------------------------------------------------------------
77! Alimentation normalization
78!------------------------------------------------------------------------------
79     
80      DO l=1,klev
81         DO ig=1,ngrid
82            IF (alim_star_tot(ig) > 1.e-10 ) THEN
83               alim_star(ig,l) = alim_star(ig,l) / alim_star_tot(ig)
84            ENDIF
85         ENDDO
86      ENDDO
87     
88      alim_star_tot(:) = 1.
89     
90     
91RETURN
92END
Note: See TracBrowser for help on using the repository browser.