Changeset 1146 for LMDZ4/trunk/libf/phylmd/cv3_routines.F
- Timestamp:
- Apr 9, 2009, 12:11:35 PM (15 years ago)
- Location:
- LMDZ4/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk
-
Property
svn:mergeinfo
set to
/LMDZ4/branches/LMDZ4-dev merged eligible
-
Property
svn:mergeinfo
set to
-
LMDZ4/trunk/libf/phylmd/cv3_routines.F
r1044 r1146 1 1 ! 2 ! $Header $2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cv3_routines.F,v 1.16 2008-11-06 16:29:35 lmdzadmin Exp $ 3 3 ! 4 4 c … … 120 120 121 121 c 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 123 125 do 100 i=1,len 124 126 cdebug lv(i,k)= lv0-clmcpv*(t(i,k)-t0) … … 2256 2258 SUBROUTINE cv3_yield(nloc,ncum,nd,na,ntra 2257 2259 : ,icb,inb,delt 2258 : ,t,rr,t_wake,rr_wake, u,v,tra2260 : ,t,rr,t_wake,rr_wake,s_wake,u,v,tra 2259 2261 : ,gz,p,ph,h,hp,lv,cpn,th,th_wake 2260 2262 : ,ep,clw,m,tp,mp,rp,up,vp,trap … … 2283 2285 real t(nloc,nd), rr(nloc,nd), u(nloc,nd), v(nloc,nd) 2284 2286 real t_wake(nloc,nd), rr_wake(nloc,nd) 2287 real s_wake(nloc) 2285 2288 real tra(nloc,nd,ntra), sig(nloc,nd) 2286 2289 real gz(nloc,na), ph(nloc,nd+1), h(nloc,na), hp(nloc,na) … … 2327 2330 real esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc) 2328 2331 real th_wake(nloc,nd) 2332 real alpha_qpos(nloc) 2329 2333 real qcond(nloc,nd), nqcond(nloc,nd), wa(nloc,nd) ! cld 2330 2334 real siga(nloc,nd), sax(nloc,nd), mac(nloc,nd) ! cld … … 2961 2965 c *** integrated enthalpy and water tendencies *** 2962 2966 c 2967 c Correction bug le 18-03-09 2963 2968 do 503 il=1,ncum 2964 2969 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) 2967 2973 : *(rr(il,inb(il))-qent(il,inb(il),inb(il)))) 2968 2974 : /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1))) … … 2972 2978 : *(ph(il,inb(il)-1)-ph(il,inb(il)))) 2973 2979 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 2974 3010 bx=0.1*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il)) 2975 3011 : -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1)) … … 2992 3028 : +dx*(ph(il,inb(il))-ph(il,inb(il)+1)) 2993 3029 : /(ph(il,inb(il)-1)-ph(il,inb(il))) 3030 endif 2994 3031 ENDIF !iflag 2995 3032 503 continue … … 3065 3102 enddo 3066 3103 enddo 3104 3105 c 3106 c *** Check that moisture stays positive. If not, scale tendencies 3107 c 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 3067 3167 c 3068 3168 c *** reset counter and return ***
Note: See TracChangeset
for help on using the changeset viewer.