Ignore:
Timestamp:
Mar 19, 2014, 3:14:30 PM (10 years ago)
Author:
fhourdin
Message:

Reactivation du calcul d'un zmax continu pour les thermiques

(thermcell_height.F90, thermcell_plume.F90, thermcell_dry.F90)
ouvre la voie à la réactivation d'une fermeture humide des thermiques
iflag_thermals_closure=2
(conf_phys_m.F90, thermcell.h, thermcell_main.F90)

Modification liée à la conservation de l'eau

(add_phys_tend.F90, add_pbl_tend.F90, physiq.F90)

Modifications liées au déclenchement stochastique

  1. possibilité de revenir à la Ale déterministe pour le criter ALE>|CIN| iflag_trig_bl=2, 1 par défaut)
  2. possibilité d'activer une fermeture statistique où ALP est divisé par la probabilité de déclenchement iflag_clos_bl=1 (0 par défaut, ancienne option 1 passée en =2)

Modification de l'entrainemement dans la version "stratocumulus" du

modèle du thermique (quand iflag_thermals_ed=8).
(modifie thermcell_plume.F90)

Catherine, Jean-Yves et Frédéric

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/add_phys_tend.F90

    r1907 r1998  
    22! $Id$
    33!
    4 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,text)
     4SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,paprs,text)
    55!======================================================================
    66! Ajoute les tendances des variables physiques aux variables
     
    1919IMPLICIT none
    2020#include "iniprint.h"
     21#include "YOMCST.h"
    2122
    2223! Arguments :
     
    2425REAL zdu(klon,klev),zdv(klon,klev)
    2526REAL zdt(klon,klev),zdq(klon,klev),zdql(klon,klev)
     27REAL paprs(klon,klev+1)
    2628CHARACTER*(*) text
    2729
     
    2931!--------
    3032REAL zt,zq
     33REAL zq_int, zqp_int, zq_new
     34
     35REAL zqp(klev)
    3136
    3237INTEGER i, k,j
     
    3540INTEGER kadrs(klon*klev)
    3641INTEGER kqadrs(klon*klev)
     42
     43LOGICAL done(klon)
    3744
    3845integer debug_level
     
    107114!=====================================================================================
    108115IF (jqbad .GT. 0) THEN
     116      done(:) = .false.                         !jyg
    109117      DO j = 1, jqbad
    110          i=jqadrs(j)
    111          if(prt_level.ge.debug_level) THEN
    112           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
    113           print*,'l    T     dT       Q     dQ    '
    114          endif
    115          DO k = 1, klev
    116            zq=q_seri(i,k)+zdq(i,k)
    117            if (zq.lt.1.e-15) then
    118               if (q_seri(i,k).lt.1.e-15) then
    119                if(prt_level.ge.debug_level) THEN
    120                 print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
    121                endif
    122                q_seri(i,k)=1.e-15
    123                zdq(i,k)=(1.e-15-q_seri(i,k))
    124               endif
    125            endif
     118        i=jqadrs(j)
     119        IF (.NOT.done(i)) THEN                  !jyg
     120          if(prt_level.ge.debug_level) THEN
     121           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
     122           print*,'l    T     dT       Q     dQ    '
     123           DO k = 1, klev
     124              write(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
     125           ENDDO
     126          endif
     127!jyg<20140228 Corrections pour conservation de l'eau
     128          DO k = 1, klev
     129            zqp(k) = max(q_seri(i,k),1.e-15)
     130          ENDDO
     131          zq_int  = 0.
     132          zqp_int = 0.
     133          DO k = 1, klev
     134            zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
     135            zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
     136          ENDDO
     137          if(prt_level.ge.debug_level) THEN
     138           print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
     139                                i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
     140          endif
     141          DO k = 1, klev
     142            zq_new = zqp(k)*zq_int/zqp_int
     143            zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
     144            q_seri(i,k) = zq_new
     145          ENDDO
     146          done(i) = .true.
     147        ENDIF !(.NOT.done(i))
     148
     149!         DO k = 1, klev
    126150!           zq=q_seri(i,k)+zdq(i,k)
    127151!           if (zq.lt.1.e-15) then
    128 !              zdq(i,k)=(1.e-15-q_seri(i,k))
     152!              if (q_seri(i,k).lt.1.e-15) then
     153!               if(prt_level.ge.debug_level) THEN
     154!                print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
     155!               endif
     156!               q_seri(i,k)=1.e-15
     157!               zdq(i,k)=(1.e-15-q_seri(i,k))
     158!              endif
    129159!           endif
    130          ENDDO
     160!!           zq=q_seri(i,k)+zdq(i,k)
     161!!           if (zq.lt.1.e-15) then
     162!!              zdq(i,k)=(1.e-15-q_seri(i,k))
     163!!           endif
     164!         ENDDO
     165!jyg>
    131166      ENDDO
    132167ENDIF
Note: See TracChangeset for help on using the changeset viewer.