Ignore:
Timestamp:
Mar 19, 2009, 11:38:04 AM (15 years ago)
Author:
idelkadi
Message:

Corrections sur les wakes et la convection pour surmonter le probleme de l'eau negative

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/cv3_routines.F

    r1044 r1127  
    11!
    2 ! $Header$
     2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cv3_routines.F,v 1.16 2008-11-06 16:29:35 lmdzadmin Exp $
    33!
    44c
     
    120120
    121121c ori      do 110 k=1,nlp
    122       do 110 k=1,nl ! convect3
     122! abderr     do 110 k=1,nl ! convect3
     123       do 110 k=1,nlp
     124     
    123125        do 100 i=1,len
    124126cdebug          lv(i,k)= lv0-clmcpv*(t(i,k)-t0)
     
    22562258      SUBROUTINE cv3_yield(nloc,ncum,nd,na,ntra
    22572259     :                    ,icb,inb,delt
    2258      :                    ,t,rr,t_wake,rr_wake,u,v,tra
     2260     :                    ,t,rr,t_wake,rr_wake,s_wake,u,v,tra
    22592261     :                    ,gz,p,ph,h,hp,lv,cpn,th,th_wake
    22602262     :                    ,ep,clw,m,tp,mp,rp,up,vp,trap
     
    22832285      real t(nloc,nd), rr(nloc,nd), u(nloc,nd), v(nloc,nd)
    22842286      real t_wake(nloc,nd), rr_wake(nloc,nd)
     2287      real s_wake(nloc)
    22852288      real tra(nloc,nd,ntra), sig(nloc,nd)
    22862289      real gz(nloc,na), ph(nloc,nd+1), h(nloc,na), hp(nloc,na)
     
    23272330      real esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc)
    23282331      real th_wake(nloc,nd)
     2332      real alpha_qpos(nloc)
    23292333      real qcond(nloc,nd), nqcond(nloc,nd), wa(nloc,nd)  ! cld
    23302334      real siga(nloc,nd), sax(nloc,nd), mac(nloc,nd)      ! cld
     
    29612965c   ***          integrated enthalpy and water tendencies         ***
    29622966c
     2967c Correction bug le 18-03-09
    29632968      do 503 il=1,ncum
    29642969      IF (iflag(il) .le. 1) THEN
    2965       ax=0.1*ment(il,inb(il),inb(il))*(hp(il,inb(il))-h(il,inb(il))
    2966      : +t(il,inb(il))*(cpv-cpd)
     2970       ax=0.1*ment(il,inb(il),inb(il))*(hp(il,inb(il))
     2971     : -h(il,inb(il))+t(il,inb(il))*(cpv-cpd)
    29672972     : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
    29682973     :  /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
     
    30653070       enddo
    30663071      enddo
     3072
     3073c
     3074c   ***   Check that moisture stays positive. If not, scale tendencies
     3075c        in order to ensure moisture positivity
     3076      DO il = 1,ncum
     3077       IF (iflag(il) .le. 1) THEN
     3078        alpha_qpos(il) = max(1. , -delt*fr(il,1)/
     3079     :     (s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
     3080       ENDIF
     3081      ENDDO
     3082      DO i = 2,nl
     3083       DO il = 1,ncum
     3084        IF (iflag(il) .le. 1) THEN
     3085        alpha_qpos(il) = max(alpha_qpos(il) , -delt*fr(il,i)/
     3086     :     (s_wake(il)*rr_wake(il,i)+(1.-s_wake(il))*rr(il,i)))
     3087        ENDIF
     3088       ENDDO
     3089      ENDDO
     3090      DO il = 1,ncum
     3091       IF (iflag(il) .le. 1 .and. alpha_qpos(il) .gt. 1.001) THEN
     3092        alpha_qpos(il) = alpha_qpos(il)*1.1
     3093       ENDIF
     3094      ENDDO
     3095      DO il = 1,ncum
     3096       IF (iflag(il) .le. 1) THEN
     3097        sigd(il) = sigd(il)/alpha_qpos(il)
     3098        precip(il) = precip(il)/alpha_qpos(il)
     3099       ENDIF
     3100      ENDDO
     3101      DO i = 1,nl
     3102       DO il = 1,ncum
     3103        IF (iflag(il) .le. 1) THEN
     3104         fr(il,i) = fr(il,i)/alpha_qpos(il)
     3105         ft(il,i) = ft(il,i)/alpha_qpos(il)
     3106         fqd(il,i) = fqd(il,i)/alpha_qpos(il)
     3107         ftd(il,i) = ftd(il,i)/alpha_qpos(il)
     3108         fu(il,i) = fu(il,i)/alpha_qpos(il)
     3109         fv(il,i) = fv(il,i)/alpha_qpos(il)
     3110         m(il,i) = m(il,i)/alpha_qpos(il)
     3111         mp(il,i) = mp(il,i)/alpha_qpos(il)
     3112         Vprecip(il,i) = Vprecip(il,i)/alpha_qpos(il)
     3113        ENDIF
     3114       ENDDO
     3115      ENDDO
     3116      DO i = 1,nl
     3117      DO j = 1,nl
     3118       DO il = 1,ncum
     3119        IF (iflag(il) .le. 1) THEN
     3120         ment(il,i,j) = ment(il,i,j)/alpha_qpos(il)
     3121        ENDIF
     3122       ENDDO
     3123      ENDDO
     3124      ENDDO
     3125      DO j = 1,ntra
     3126      DO i = 1,nl
     3127       DO il = 1,ncum
     3128        IF (iflag(il) .le. 1) THEN
     3129         ftra(il,i,j) = ftra(il,i,j)/alpha_qpos(il)
     3130        ENDIF
     3131       ENDDO
     3132      ENDDO
     3133      ENDDO
     3134
    30673135c
    30683136c   ***           reset counter and return           ***
Note: See TracChangeset for help on using the changeset viewer.