Ignore:
Timestamp:
Apr 9, 2009, 12:11:35 PM (15 years ago)
Author:
Laurent Fairhead
Message:

Réintegration dans le tronc des modifications issues de la branche LMDZ-dev
comprises entre la révision 1074 et 1145
Validation: une simulation de 1 jour en séquentiel sur PC donne les mêmes
résultats entre la trunk et la dev
LF

Location:
LMDZ4/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk

  • LMDZ4/trunk/libf/phylmd/cv3_routines.F

    r1044 r1146  
    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        if (cvflag_grav) then
     2971      ax=0.01*grav*ment(il,inb(il),inb(il))*(hp(il,inb(il))
     2972     : -h(il,inb(il))+t(il,inb(il))*(cpv-cpd)
    29672973     : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
    29682974     :  /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
     
    29722978     :    *(ph(il,inb(il)-1)-ph(il,inb(il))))
    29732979
     2980      bx=0.01*grav*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il))
     2981     :    -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
     2982      fr(il,inb(il))=fr(il,inb(il))-bx
     2983      fr(il,inb(il)-1)=fr(il,inb(il)-1)
     2984     :   +bx*(ph(il,inb(il))-ph(il,inb(il)+1))
     2985     :      /(ph(il,inb(il)-1)-ph(il,inb(il)))
     2986
     2987      cx=0.01*grav*ment(il,inb(il),inb(il))*(uent(il,inb(il),inb(il))
     2988     :       -u(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
     2989      fu(il,inb(il))=fu(il,inb(il))-cx
     2990      fu(il,inb(il)-1)=fu(il,inb(il)-1)
     2991     :     +cx*(ph(il,inb(il))-ph(il,inb(il)+1))
     2992     :        /(ph(il,inb(il)-1)-ph(il,inb(il)))
     2993
     2994      dx=0.01*grav*ment(il,inb(il),inb(il))*(vent(il,inb(il),inb(il))
     2995     :      -v(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
     2996      fv(il,inb(il))=fv(il,inb(il))-dx
     2997      fv(il,inb(il)-1)=fv(il,inb(il)-1)
     2998     :    +dx*(ph(il,inb(il))-ph(il,inb(il)+1))
     2999     :       /(ph(il,inb(il)-1)-ph(il,inb(il)))
     3000       else
     3001       ax=0.1*ment(il,inb(il),inb(il))*(hp(il,inb(il))
     3002     : -h(il,inb(il))+t(il,inb(il))*(cpv-cpd)
     3003     : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
     3004     :  /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
     3005      ft(il,inb(il))=ft(il,inb(il))-ax
     3006      ft(il,inb(il)-1)=ft(il,inb(il)-1)+ax*cpn(il,inb(il))
     3007     :    *(ph(il,inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)
     3008     :    *(ph(il,inb(il)-1)-ph(il,inb(il))))
     3009
    29743010      bx=0.1*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il))
    29753011     :    -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
     
    29923028     :    +dx*(ph(il,inb(il))-ph(il,inb(il)+1))
    29933029     :       /(ph(il,inb(il)-1)-ph(il,inb(il)))
     3030       endif
    29943031      ENDIF    !iflag
    29953032503   continue
     
    30653102       enddo
    30663103      enddo
     3104
     3105c
     3106c   ***   Check that moisture stays positive. If not, scale tendencies
     3107c        in order to ensure moisture positivity
     3108      DO il = 1,ncum
     3109       IF (iflag(il) .le. 1) THEN
     3110        alpha_qpos(il) = max(1. , -delt*fr(il,1)/
     3111     :     (s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
     3112       ENDIF
     3113      ENDDO
     3114      DO i = 2,nl
     3115       DO il = 1,ncum
     3116        IF (iflag(il) .le. 1) THEN
     3117        alpha_qpos(il) = max(alpha_qpos(il) , -delt*fr(il,i)/
     3118     :     (s_wake(il)*rr_wake(il,i)+(1.-s_wake(il))*rr(il,i)))
     3119        ENDIF
     3120       ENDDO
     3121      ENDDO
     3122      DO il = 1,ncum
     3123       IF (iflag(il) .le. 1 .and. alpha_qpos(il) .gt. 1.001) THEN
     3124        alpha_qpos(il) = alpha_qpos(il)*1.1
     3125       ENDIF
     3126      ENDDO
     3127      DO il = 1,ncum
     3128       IF (iflag(il) .le. 1) THEN
     3129        sigd(il) = sigd(il)/alpha_qpos(il)
     3130        precip(il) = precip(il)/alpha_qpos(il)
     3131       ENDIF
     3132      ENDDO
     3133      DO i = 1,nl
     3134       DO il = 1,ncum
     3135        IF (iflag(il) .le. 1) THEN
     3136         fr(il,i) = fr(il,i)/alpha_qpos(il)
     3137         ft(il,i) = ft(il,i)/alpha_qpos(il)
     3138         fqd(il,i) = fqd(il,i)/alpha_qpos(il)
     3139         ftd(il,i) = ftd(il,i)/alpha_qpos(il)
     3140         fu(il,i) = fu(il,i)/alpha_qpos(il)
     3141         fv(il,i) = fv(il,i)/alpha_qpos(il)
     3142         m(il,i) = m(il,i)/alpha_qpos(il)
     3143         mp(il,i) = mp(il,i)/alpha_qpos(il)
     3144         Vprecip(il,i) = Vprecip(il,i)/alpha_qpos(il)
     3145        ENDIF
     3146       ENDDO
     3147      ENDDO
     3148      DO i = 1,nl
     3149      DO j = 1,nl
     3150       DO il = 1,ncum
     3151        IF (iflag(il) .le. 1) THEN
     3152         ment(il,i,j) = ment(il,i,j)/alpha_qpos(il)
     3153        ENDIF
     3154       ENDDO
     3155      ENDDO
     3156      ENDDO
     3157      DO j = 1,ntra
     3158      DO i = 1,nl
     3159       DO il = 1,ncum
     3160        IF (iflag(il) .le. 1) THEN
     3161         ftra(il,i,j) = ftra(il,i,j)/alpha_qpos(il)
     3162        ENDIF
     3163       ENDDO
     3164      ENDDO
     3165      ENDDO
     3166
    30673167c
    30683168c   ***           reset counter and return           ***
Note: See TracChangeset for help on using the changeset viewer.