Ignore:
Timestamp:
Apr 29, 2019, 10:07:47 AM (6 years ago)
Author:
aboissinot
Message:

Fix in convadj.F
New version of the thermal plume model (new entrainment and detrainment formulae, alimentation is removed)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/thermcell_closure.F90

    r2064 r2127  
    22!
    33!
    4       SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,             &
    5       &                            lalim,alim_star,f_star,                    &
    6       &                            zmax,wmax,f,lev_out)
     4SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,                   &
     5                             lmax,alim_star,zmax,wmax,f)
    76     
    8 !==============================================================================
    9 !thermcell_closure: fermeture, determination de f
     7!===============================================================================
     8!  Purpose: fermeture, determination de f
    109!
    1110! Modification 7 septembre 2009
     
    1514! l'idee etant que le choix se fasse a l'appel de thermcell_closure
    1615! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if
    17 !==============================================================================
     16!===============================================================================
    1817     
    1918      USE thermcell_mod
     
    2221     
    2322     
    24 !=============================================================================
     23!===============================================================================
    2524! Declaration
    26 !=============================================================================
     25!===============================================================================
    2726     
    28 !      inputs:
    29 !      -------
     27!     Inputs:
     28!     -------
    3029     
    31       INTEGER ngrid,nlay
    32       INTEGER lalim(ngrid)
    33       INTEGER lev_out                           ! niveau pour les print
     30      INTEGER ngrid, nlay
     31      INTEGER lmax(ngrid)
    3432     
    35       REAL alim_star(ngrid,nlay)
    36       REAL f_star(ngrid,nlay+1)
     33      REAL ptimestep
    3734      REAL rho(ngrid,nlay)
    3835      REAL zlev(ngrid,nlay)
     36      REAL alim_star(ngrid,nlay)
    3937      REAL zmax(ngrid)
    4038      REAL wmax(ngrid)
    41       REAL ptimestep
    4239     
    43 !      outputs:
    44 !      --------
     40!     Outputs:
     41!     --------
    4542     
    4643      REAL f(ngrid)
    4744     
    48 !      local:
    49 !      ------
     45!     Local:
     46!     ------
    5047     
    51       INTEGER ig,k
     48      INTEGER ig, l
    5249      INTEGER llmax
    5350     
     
    5653      REAL zdenom(ngrid)
    5754     
    58 !==============================================================================
     55!===============================================================================
    5956! Initialization
    60 !==============================================================================
     57!===============================================================================
    6158     
    6259      alim_star2(:) = 0.
     
    6764      llmax = 1
    6865     
    69 !==============================================================================
     66!===============================================================================
    7067! Closure
    71 !==============================================================================
     68!===============================================================================
    7269     
    73 !------------------------------------------------------------------------------
    74 ! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine
    75 !------------------------------------------------------------------------------
     70!-------------------------------------------------------------------------------
     71! Indice vertical max atteint par les thermiques sur le domaine
     72!-------------------------------------------------------------------------------
    7673     
    7774      DO ig=1,ngrid
    78          IF (lalim(ig)>llmax) THEN
    79             llmax = lalim(ig)
     75         IF (lmax(ig).GT.llmax) THEN
     76            llmax = lmax(ig)
    8077         ENDIF
    8178      ENDDO
    8279     
    83 !------------------------------------------------------------------------------
     80!-------------------------------------------------------------------------------
    8481! Calcul des integrales sur la verticale de alim_star et de alim_star^2/(rho dz)
    85 !------------------------------------------------------------------------------
     82!-------------------------------------------------------------------------------
    8683     
    87       DO k=1,llmax-1
     84      DO l=1,llmax-1
    8885         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)
     86            IF (l < lmax(ig)) THEN
     87               alim_star2(ig) = alim_star2(ig) + alim_star(ig,l)**2           &
     88               &              / (rho(ig,l) * (zlev(ig,l+1) - zlev(ig,l)))
     89               alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig,l)
    9390            ENDIF
    9491         ENDDO
     
    9693     
    9794      DO ig=1,ngrid
    98          IF (alim_star2(ig)>1.e-10) THEN
     95         IF (alim_star2(ig).GT.0.) THEN
    9996            f(ig) = wmax(ig) * alim_star_tot(ig)                              &
    100             &     / (max(500.,zmax(ig)) * r_aspect_thermals * alim_star2(ig))
     97            &     / (max(1.,zmax(ig)) * r_aspect_thermals * alim_star2(ig))
     98         ELSE
     99            f(ig) = 0.
    101100         ENDIF
    102101      ENDDO
    103102     
     103     
    104104RETURN
    105105END
Note: See TracChangeset for help on using the changeset viewer.