Changeset 2393 for LMDZ5/trunk/libf/phylmd/cv3_routines.F90
- Timestamp:
- Nov 18, 2015, 12:25:20 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/cv3_routines.F90
r2376 r2393 41 41 42 42 43 ! Local variables 43 44 CHARACTER (LEN=20) :: modname = 'cv3_param' 44 45 CHARACTER (LEN=80) :: abort_message … … 384 385 IF (ok_new_feed) THEN 385 386 IF (iter==niter) THEN 386 DO k = minorig, n d387 DO k = minorig, nl 387 388 DO i = 1, len 388 389 IF (ph(i,k)>=plclfeed(i)) pfeedmin(i) = ph(i, k) … … 1515 1516 ! ===================================================================== 1516 1517 1517 DO k = 1, n d1518 DO k = 1, nl 1518 1519 DO i = 1, ncum 1519 1520 hp(i, k) = h(i, k) … … 2189 2190 ! MAF: renormalisation de MENT 2190 2191 CALL zilch(zm, nloc*na) 2191 DO jm = 1, n d2192 DO im = 1, n d2192 DO jm = 1, nl 2193 DO im = 1, nl 2193 2194 DO il = 1, ncum 2194 2195 zm(il, im) = zm(il, im) + (1.-sij(il,im,jm))*ment(il, im, jm) … … 2197 2198 END DO 2198 2199 2199 DO jm = 1, n d2200 DO im = 1, n d2200 DO jm = 1, nl 2201 DO im = 1, nl 2201 2202 DO il = 1, ncum 2202 2203 IF (zm(il,im)/=0.) THEN … … 2207 2208 END DO 2208 2209 2209 DO jm = 1, n d2210 DO im = 1, n d2210 DO jm = 1, nl 2211 DO im = 1, nl 2211 2212 DO il = 1, ncum 2212 2213 qents(il, im, jm) = qent(il, im, jm) … … 2226 2227 faci, b, sigd, & 2227 2228 wdtrainA, wdtrainM) ! RomP 2229 USE print_control_mod, ONLY: prt_level, lunout 2228 2230 IMPLICIT NONE 2229 2231 … … 2235 2237 2236 2238 !inputs: 2237 INTEGER ncum, nd, na, ntra, nloc 2238 INTEGER icb(nloc), inb(nloc) 2239 REAL delt, plcl(nloc) 2240 REAL t(nloc, nd), rr(nloc, nd), rs(nloc, nd), gz(nloc, na) 2241 REAL u(nloc, nd), v(nloc, nd) 2239 INTEGER, INTENT (IN) :: ncum, nd, na, ntra, nloc 2240 INTEGER, DIMENSION (nloc), INTENT (IN) :: icb, inb 2241 REAL, INTENT(IN) :: delt 2242 REAL, DIMENSION (nloc), INTENT (IN) :: plcl 2243 REAL, DIMENSION (nloc, nd), INTENT (IN) :: t, rr, rs 2244 REAL, DIMENSION (nloc, na), INTENT (IN) :: gz 2245 REAL, DIMENSION (nloc, nd), INTENT (IN) :: u, v 2242 2246 REAL tra(nloc, nd, ntra) 2243 2247 REAL p(nloc, nd), ph(nloc, nd+1) 2244 REAL ep(nloc, na), sigp(nloc, na), clw(nloc, na) 2245 REAL th(nloc, na), tv(nloc, na), lv(nloc, na), cpn(nloc, na) 2246 REAL lf(nloc, na) 2247 REAL m(nloc, na), ment(nloc, na, na), elij(nloc, na, na) 2248 REAL coef_clos(nloc) 2248 REAL, DIMENSION (nloc, na), INTENT (IN) :: ep, sigp, clw 2249 REAL, DIMENSION (nloc, na), INTENT (IN) :: th, tv, lv, cpn 2250 REAL, DIMENSION (nloc, na), INTENT (IN) :: lf 2251 REAL, DIMENSION (nloc, na), INTENT (IN) :: m 2252 REAL, DIMENSION (nloc, na, na), INTENT (IN) :: ment, elij 2253 REAL, DIMENSION (nloc), INTENT (IN) :: coef_clos 2249 2254 2250 2255 !input/output 2251 INTEGER iflag(nloc)2256 INTEGER, DIMENSION (nloc), INTENT (INOUT) :: iflag(nloc) 2252 2257 2253 2258 !outputs: 2254 REAL mp(nloc, na), rp(nloc, na), up(nloc, na), vp(nloc, na) 2255 REAL water(nloc, na), evap(nloc, na), wt(nloc, na) 2256 REAL ice(nloc, na), fondue(nloc, na), faci(nloc, na) 2257 REAL trap(nloc, na, ntra) 2258 REAL b(nloc, na), sigd(nloc) 2259 REAL, DIMENSION (nloc, na), INTENT (OUT) :: mp, rp, up, vp 2260 REAL, DIMENSION (nloc, na), INTENT (OUT) :: water, evap, wt 2261 REAL, DIMENSION (nloc, na), INTENT (OUT) :: ice, fondue, faci 2262 REAL, DIMENSION (nloc, na, ntra), INTENT (OUT) :: trap 2263 REAL, DIMENSION (nloc, na), INTENT (OUT) :: b 2264 REAL, DIMENSION (nloc), INTENT (OUT) :: sigd 2259 2265 ! 25/08/10 - RomP---- ajout des masses precipitantes ejectees 2260 2266 ! de l ascendance adiabatique et des flux melanges Pa et Pm. 2261 2267 ! Distinction des wdtrain 2262 2268 ! Pa = wdtrainA Pm = wdtrainM 2263 REAL wdtrainA(nloc, na), wdtrainM(nloc, na)2269 REAL, DIMENSION (nloc, na), INTENT (OUT) :: wdtrainA, wdtrainM 2264 2270 2265 2271 !local variables … … 2281 2287 ! ------------------------------------------------------ 2282 2288 2283 delti = 1./delt 2284 tinv = 1./3. 2285 2286 mp(:, :) = 0. 2287 2288 DO i = 1, nl 2289 ! ============================= 2290 ! --- INITIALIZE OUTPUT ARRAYS 2291 ! ============================= 2292 ! (loops up to nl+1) 2293 2294 DO i = 1, nlp 2289 2295 DO il = 1, ncum 2290 2296 mp(il, i) = 0.0 … … 2294 2300 wt(il, i) = 0.001 2295 2301 water(il, i) = 0.0 2296 frac(il, i) = 0.02297 2302 faci(il, i) = 0.0 2298 fraci(il, i) = 0.02299 2303 ice(il, i) = 0.0 2300 prec(il, i) = 0.02301 2304 fondue(il, i) = 0.0 2302 2305 evap(il, i) = 0.0 2303 2306 b(il, i) = 0.0 2307 END DO 2308 END DO 2309 !! RomP >>> 2310 DO i = 1, nlp 2311 DO il = 1, ncum 2312 wdtrainA(il, i) = 0.0 2313 wdtrainM(il, i) = 0.0 2314 END DO 2315 END DO 2316 !! RomP <<< 2317 2318 ! *** Set the fractionnal area sigd of precipitating downdraughts 2319 DO il = 1, ncum 2320 sigd(il) = sigdz*coef_clos(il) 2321 END DO 2322 2323 ! ===================================================================== 2324 ! --- INITIALIZE VARIOUS ARRAYS AND PARAMETERS USED IN THE COMPUTATIONS 2325 ! ===================================================================== 2326 ! (loops up to nl+1) 2327 2328 delti = 1./delt 2329 tinv = 1./3. 2330 2331 DO i = 1, nlp 2332 DO il = 1, ncum 2333 frac(il, i) = 0.0 2334 fraci(il, i) = 0.0 2335 prec(il, i) = 0.0 2304 2336 lvcp(il, i) = lv(il, i)/cpn(il, i) 2305 2337 lfcp(il, i) = lf(il, i)/cpn(il, i) 2306 2338 END DO 2307 2339 END DO 2340 2308 2341 !AC! do k=1,ntra 2309 2342 !AC! do i=1,nd … … 2313 2346 !AC! enddo 2314 2347 !AC! enddo 2315 !! RomP >>>2316 DO i = 1, nd2317 DO il = 1, ncum2318 wdtrainA(il, i) = 0.02319 wdtrainM(il, i) = 0.02320 END DO2321 END DO2322 !! RomP <<<2323 2348 2324 2349 ! *** check whether ep(inb)=0, if so, skip precipitating *** … … 2330 2355 !! if(ep(il,inb(il)).lt.0.0001)lwork(il)=.FALSE. 2331 2356 lwork(il) = ep(il, inb(il)) >= 0.0001 2332 END DO2333 2334 ! *** Set the fractionnal area sigd of precipitating downdraughts2335 DO il = 1, ncum2336 sigd(il) = sigdz*coef_clos(il)2337 2357 END DO 2338 2358 … … 2448 2468 bfac = 1./(sigd(il)*wt(il,i)) 2449 2469 2470 ! 2471 IF (prt_level >= 20) THEN 2472 Print*, 'cv3_unsat after provisional rp estimate: rp, afac, bfac ', & 2473 i, rp(1, i), afac,bfac 2474 ENDIF 2475 ! 2450 2476 !JYG1 2451 2477 ! cc sigt=1.0 … … 2522 2548 evap(il, i) = (wdtrain(il)+sigd(il)*wt(il,i)*(prec(il,i+1)-prec(il,i))) / & 2523 2549 (sigd(il)*(ph(il,i)-ph(il,i+1))*100.) 2550 ! 2551 IF (prt_level >= 20) THEN 2552 Print*, 'cv3_unsat after evap computation: wdtrain, sigd, wt, prec(i+1),prec(i) ', & 2553 i, wdtrain(1), sigd(1), wt(1,i), prec(1,i+1),prec(1,i) 2554 ENDIF 2555 ! 2524 2556 2525 2557 d6 = bfac*wdtrain(il) - 100.*sigd(il)*bfac*(ph(il,i)-ph(il,i+1))*evap(il, i) … … 2721 2753 END DO 2722 2754 ! ---------------------------------------------------------------- 2755 ! 2756 IF (prt_level >= 20) THEN 2757 Print*, 'cv3_unsat after mp computation: mp, b(i), b(i-1) ', & 2758 i, mp(1, i), b(1,i), b(1,max(i-1,1)) 2759 ENDIF 2760 ! 2723 2761 2724 2762 ! *** find mixing ratio of precipitating downdraft *** … … 2904 2942 delti = 1.0/delt 2905 2943 ! print*,'cv3_yield initialisation delt', delt 2906 ! 2944 2907 2945 DO il = 1, ncum 2908 2946 precip(il) = 0.0 2909 Vprecip(il, nd+1) = 0.02910 Vprecipi(il, nd+1) = 0.0 ! jyg: Vprecipi2911 2947 wd(il) = 0.0 ! gust 2912 2948 END DO 2913 2949 2914 DO i = 1, nd 2950 ! Fluxes are on a staggered grid : loops extend up to nl+1 2951 DO i = 1, nlp 2915 2952 DO il = 1, ncum 2916 2953 Vprecip(il, i) = 0.0 2917 2954 Vprecipi(il, i) = 0.0 ! jyg 2955 upwd(il, i) = 0.0 2956 dnwd(il, i) = 0.0 2957 dnwd0(il, i) = 0.0 2958 mip(il, i) = 0.0 2959 END DO 2960 END DO 2961 DO i = 1, nl 2962 DO il = 1, ncum 2918 2963 ft(il, i) = 0.0 2919 2964 fr(il, i) = 0.0 2920 2965 fu(il, i) = 0.0 2921 2966 fv(il, i) = 0.0 2922 upwd(il, i) = 0.02923 dnwd(il, i) = 0.02924 dnwd0(il, i) = 0.02925 mip(il, i) = 0.02926 2967 ftd(il, i) = 0.0 2927 2968 fqd(il, i) = 0.0 … … 3147 3188 IF (num1<=0) GO TO 500 3148 3189 3149 CALL zilch(amp1, ncum) 3150 CALL zilch(ad, ncum) 3190 !jyg< 3191 !! CALL zilch(amp1, ncum) 3192 !! CALL zilch(ad, ncum) 3193 DO il = 1,ncum 3194 amp1(il) = 0. 3195 ad(il) = 0. 3196 ENDDO 3197 !>jyg 3151 3198 3152 3199 DO k = 1, nl + 1 … … 3667 3714 3668 3715 3669 DO i = 1, n d3716 DO i = 1, nl 3670 3717 DO il = 1, ncum 3671 3718 upwd(il, i) = 0.0 … … 3679 3726 END DO 3680 3727 END DO 3681 DO i = nl + 1, nd 3682 DO il = 1, ncum 3683 dnwd0(il, i) = 0. 3684 END DO 3685 END DO 3728 !jyg< (loops stop at nl) 3729 !! DO i = nl + 1, nd 3730 !! DO il = 1, ncum 3731 !! dnwd0(il, i) = 0. 3732 !! END DO 3733 !! END DO 3734 !>jyg 3686 3735 3687 3736 … … 3778 3827 END DO 3779 3828 3780 DO i = nl + 1, nd 3781 DO il = 1, ncum 3782 mip(il, i) = 0. 3783 END DO 3784 END DO 3785 3786 DO i = 1, nd 3829 !jyg< (loops stop at nl) 3830 !! DO i = nl + 1, nd 3831 !! DO il = 1, ncum 3832 !! mip(il, i) = 0. 3833 !! END DO 3834 !! END DO 3835 !>jyg 3836 3837 DO i = 1, nlp 3787 3838 DO il = 1, ncum 3788 3839 ma(il, i) = 0 … … 3798 3849 END DO 3799 3850 3800 DO i = nl + 1, nd 3801 DO il = 1, ncum 3802 ma(il, i) = 0. 3803 END DO 3804 END DO 3851 !jyg< (loops stop at nl) 3852 !! DO i = nl + 1, nd 3853 !! DO il = 1, ncum 3854 !! ma(il, i) = 0. 3855 !! END DO 3856 !! END DO 3857 !>jyg 3805 3858 3806 3859 DO i = 1, nl … … 3836 3889 !! cld 3837 3890 3838 DO i = 1, n d! cld3891 DO i = 1, nl+1 ! cld 3839 3892 DO il = 1, ncum ! cld 3840 3893 mac(il, i) = 0.0 ! cld … … 3978 4031 ! fraction deau condensee dans les melanges convertie en precip : epm 3979 4032 ! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz 3980 DO j = 1, n a3981 DO k = 1, n a4033 DO j = 1, nl 4034 DO k = 1, nl 3982 4035 DO i = 1, ncum 3983 4036 IF (k>=icb(i) .AND. k<=inb(i) .AND. & … … 3994 4047 3995 4048 3996 DO j = 1, n a3997 DO k = 1, n a4049 DO j = 1, nl 4050 DO k = 1, nl 3998 4051 DO i = 1, ncum 3999 4052 IF (k>=icb(i) .AND. k<=inb(i)) THEN … … 4005 4058 END DO 4006 4059 4007 DO j = 1, n a4060 DO j = 1, nl 4008 4061 DO k = 1, j - 1 4009 4062 DO i = 1, ncum … … 4016 4069 4017 4070 ! matrices pour calculer la tendance des concentrations dans cvltr.F90 4018 DO j = 1, n a4019 DO k = 1, n a4071 DO j = 1, nl 4072 DO k = 1, nl 4020 4073 DO i = 1, ncum 4021 4074 da(i, j) = da(i, j) + (1.-sigij(i,k,j))*ment(i, k, j)
Note: See TracChangeset
for help on using the changeset viewer.