--- trunk/Sources/phylmd/CV30_routines/cv30_feed.f 2016/05/18 17:56:44 195 +++ trunk/Sources/phylmd/CV30_routines/cv30_feed.f 2016/05/23 13:50:39 196 @@ -4,8 +4,8 @@ contains - SUBROUTINE cv30_feed(t1, q1, qs1, p1, ph1, gz1, nk1, icb1, icbmax, iflag1, & - tnk1, qnk1, gznk1, plcl1) + SUBROUTINE cv30_feed(t1, q1, qs1, p1, ph1, gz1, nk1, icb1, iflag1, tnk1, & + qnk1, gznk1, plcl1) ! Purpose: convective feed @@ -19,9 +19,13 @@ real, intent(in):: gz1(:, :) ! (klon, klev) ! outputs: - integer, intent(out):: nk1(:), icb1(:) ! (klon) - integer, intent(out):: icbmax - integer, intent(inout):: iflag1(klon) + + integer, intent(out):: nk1(:) ! (klon) + + integer, intent(out):: icb1(:) ! (klon) + ! first level above lcl, 2 <= icb1 <= nl - 2 + + integer, intent(out):: iflag1(:) ! (klon) real tnk1(klon), qnk1(klon), gznk1(klon) real, intent(out):: plcl1(klon) @@ -32,6 +36,7 @@ !-------------------------------------------------------------------- + iflag1 = 0 plcl1 = 0. ! Origin level of ascending parcels @@ -48,7 +53,7 @@ ! (within 0.2 % of formula of Bolton, Mon. Wea. Rev., 1980) do i = 1, klon - if (iflag1(i) /= 7) then + if (iflag1(i) == 0) then tnk1(i) = t1(i, nk1(i)) qnk1(i) = q1(i, nk1(i)) gznk1(i) = gz1(i, nk1(i)) @@ -58,13 +63,11 @@ rh(i) = qnk1(i) / qsnk(i) chi(i) = tnk1(i) / (A - B*rh(i) - tnk1(i)) plcl1(i) = pnk(i)*(rh(i)**chi(i)) - if ((plcl1(i) < 200. .or. plcl1(i) >= 2000.) .and. iflag1(i) == 0) & - iflag1(i) = 8 + if (plcl1(i) < 200. .or. plcl1(i) >= 2000.) iflag1(i) = 8 endif end do - ! Calculate first level above lcl (= icb1) - + ! Compute icb1: do i = 1, klon if (plcl1(i) <= ph1(i, nl - 2)) then ! Distinguish this case just so that icb1 = nl - 2, not nl = @@ -77,17 +80,9 @@ end if end do - do i = 1, klon - if ((icb1(i) == nl - 2).and.(iflag1(i) == 0)) iflag1(i) = 9 - end do - - ! Compute icbmax - - icbmax = 2 - - do i = 1, klon - if (iflag1(i) < 7) icbmax = max(icbmax, icb1(i)) - end do + where (icb1 == nl - 2 .and. iflag1 == 0) iflag1 = 9 + ! {(2 <= icb1(i) <= nl - 3 and ph1(i, icb1(i) + 1) < plcl1(i) <= + ! ph1(i, icb1(i))) or iflag1 /= 0} end SUBROUTINE cv30_feed