Ignore:
Timestamp:
Jan 10, 2019, 3:44:36 PM (6 years ago)
Author:
aboissinot
Message:

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

Location:
trunk/LMDZ.GENERIC/libf/phystd
Files:
3 edited

Legend:

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

    r2060 r2064  
    33!
    44      SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,             &
    5       &                    lalim,alim_star,f_star,zmax,wmax,f,lev_out)
    6      
     5      &                            lalim,alim_star,f_star,                    &
     6      &                            zmax,wmax,f,lev_out)
    77     
    88!==============================================================================
     
    7777      DO ig=1,ngrid
    7878         IF (lalim(ig)>llmax) THEN
    79             llmax=lalim(ig)
     79            llmax = lalim(ig)
    8080         ENDIF
    8181      ENDDO
     
    8888         DO ig=1,ngrid
    8989            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)
     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)
    9393            ENDIF
    9494         ENDDO
     
    9797      DO ig=1,ngrid
    9898         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))
     99            f(ig) = wmax(ig) * alim_star_tot(ig)                              &
     100            &     / (max(500.,zmax(ig)) * r_aspect_thermals * alim_star2(ig))
    101101         ENDIF
    102102      ENDDO
  • trunk/LMDZ.GENERIC/libf/phystd/thermcell_main.F90

    r2060 r2064  
    2020      &                  ,alp_bl_conv,alp_bl_stat)
    2121!!! fin nrlmd le 10/04/2012
    22      
    2322     
    2423!==============================================================================
     
    517516     
    518517      IF (iflag_thermals_closure.eq.1) THEN
    519          CALL thermcell_closure(ngrid,nlay,r_aspect_thermals,ptimestep,rho,   &
    520          &                      zlev,lalim,alim_star_clos,f_star,             &
     518         CALL thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,                &
     519         &                      lalim,alim_star_clos,f_star,                  &
    521520         &                      zmax_sec,wmax_sec,f,lev_out)
    522521      ELSEIF (iflag_thermals_closure.eq.2) THEN
    523          CALL thermcell_closure(ngrid,nlay,r_aspect_thermals,ptimestep,rho,   &
    524          &                      zlev,lalim,alim_star,f_star,                  &
     522         CALL thermcell_closure(ngrid,nlay,ptimestep,rho,zlev,                &
     523         &                      lalim,alim_star,f_star,                       &
    525524         &                      zmax,wmax,f,lev_out)
     525      ELSE
     526         print *, 'ERROR: no closure had been selected!'
     527         call abort
    526528      ENDIF
    527529     
     
    562564      IF (tau_thermals>1.) THEN
    563565         lambda = exp(-ptimestep/tau_thermals)
    564          fm0 = (1.-lambda)*fm+lambda*fm0
    565          entr0 = (1.-lambda)*entr+lambda*entr0
    566          detr0 = (1.-lambda)*detr+lambda*detr0
     566         fm0   = (1.-lambda) * fm   + lambda * fm0
     567         entr0 = (1.-lambda) * entr + lambda * entr0
     568         detr0 = (1.-lambda) * detr + lambda * detr0
    567569      ELSE
    568          fm0 = fm
     570         fm0   = fm
    569571         entr0 = entr
    570572         detr0 = detr
     
    659661         enddo
    660662         
    661          ierr=0
     663         ierr = 0
    662664         
    663665         do ig=1,ngrid
  • trunk/LMDZ.GENERIC/libf/phystd/thermcell_mod.F90

    r2060 r2064  
    3939! AB : linf is used to set the lowest possible first level because we allow it
    4040!      to begin higher than the surface. It is set to 2 in order to remove the
    41 !      first layer for gas giant. If there is a surface, it has to be set to 1.
     41!      first layer for gas giant.
     42!      If there is a surface, it has to be set to 1.
     43!      If someone want to call more than once the thermal plume model in one
     44!      or more grid point, this variable must become a saved array of INTEGER
     45!      with size ngrid.
    4246!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    4347INTEGER,PARAMETER :: linf                       = 2
     
    5963!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6064! AB : Parameters needed only for a loop in thermcell_alp (diagnoses).
    61 !      Maybe to remove.
     65!      Maybe to be removed.
    6266!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6367INTEGER,PARAMETER :: nbsrf                      = 1
     
    6569
    6670CONTAINS
    67 
    68    SUBROUTINE init_thermcell_mod(g, rcp, r, pi, T_h2o_ice_liq, RV)
    69    
    70    IMPLICIT NONE
    71    
    72    REAL g
    73    REAL rcp
    74    REAL r
    75    REAL pi
    76    REAL T_h2o_ice_liq
    77    REAL RV
    78    
    79    RTT = T_h2o_ice_liq
    80    RG = g
    81    RKAPPA = rcp
    82    RPI = pi
    83    RD = r
    84    
    85    RETURN
    86    END SUBROUTINE init_thermcell_mod
     71     
     72      SUBROUTINE init_thermcell_mod(g, rcp, r, pi, T_h2o_ice_liq, RV)
     73      
     74      IMPLICIT NONE
     75      
     76      REAL g
     77      REAL rcp
     78      REAL r
     79      REAL pi
     80      REAL T_h2o_ice_liq
     81      REAL RV
     82      
     83      RTT = T_h2o_ice_liq
     84      RG = g
     85      RKAPPA = rcp
     86      RPI = pi
     87      RD = r
     88      
     89      RETURN
     90      END SUBROUTINE init_thermcell_mod
    8791
    8892END MODULE thermcell_mod
Note: See TracChangeset for help on using the changeset viewer.