/[lmdze]/trunk/Sources/phylmd/CV30_routines/cv30_unsat.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/CV30_routines/cv30_unsat.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 195 by guez, Wed May 18 17:56:44 2016 UTC revision 198 by guez, Tue May 31 16:17:35 2016 UTC
# Line 10  contains Line 10  contains
10      ! Unsaturated (precipitating) downdrafts      ! Unsaturated (precipitating) downdrafts
11    
12      use cv30_param_m, only: nl, sigd      use cv30_param_m, only: nl, sigd
13      use cv_thermo_m, only: cpd, ginv, grav      use cv_thermo_m, only: cpd, ginv
14        use SUPHEC_M, only: rg
15    
16      integer, intent(in):: icb(:) ! (ncum)      integer, intent(in):: icb(:) ! (ncum)
17        ! {2 <= icb <= nl - 3}
18    
19      integer, intent(in):: inb(:) ! (ncum)      integer, intent(in):: inb(:) ! (ncum)
20      ! first model level above the level of neutral buoyancy of the      ! first model level above the level of neutral buoyancy of the
# Line 20  contains Line 22  contains
22    
23      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (ncum, nl)      real, intent(in):: t(:, :), q(:, :), qs(:, :) ! (ncum, nl)
24      real, intent(in):: gz(:, :) ! (klon, klev)      real, intent(in):: gz(:, :) ! (klon, klev)
25      real, intent(in):: u(:, :), v(:, :) ! (klon, klev)      real, intent(in):: u(:, :), v(:, :) ! (ncum, nl)
26      real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa      real, intent(in):: p(:, :) ! (klon, klev) pressure at full level, in hPa
27      real, intent(in):: ph(:, :) ! (klon, klev + 1)      real, intent(in):: ph(:, :) ! (ncum, klev + 1)
28      real, intent(in):: th(:, :) ! (ncum, nl - 1)      real, intent(in):: th(:, :) ! (ncum, nl - 1)
29      real, intent(in):: tv(:, :) ! (klon, klev)      real, intent(in):: tv(:, :) ! (klon, klev)
30      real, intent(in):: lv(:, :) ! (klon, klev)      real, intent(in):: lv(:, :) ! (ncum, nl)
31      real, intent(in):: cpn(:, :) ! (klon, klev)      real, intent(in):: cpn(:, :) ! (klon, klev)
32      real, intent(in):: ep(:, :) ! (ncum, klev)      real, intent(in):: ep(:, :) ! (ncum, klev)
33      real, intent(in):: clw(:, :) ! (ncum, klev)      real, intent(in):: clw(:, :) ! (ncum, klev)
# Line 33  contains Line 35  contains
35      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)      real, intent(in):: ment(:, :, :) ! (ncum, klev, klev)
36      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)      real, intent(in):: elij(:, :, :) ! (ncum, klev, klev)
37      real, intent(in):: delt      real, intent(in):: delt
38      real, intent(in):: plcl(:) ! (klon)      real, intent(in):: plcl(:) ! (ncum)
39    
40      real, intent(out):: mp(:, :) ! (klon, klev)      real, intent(out):: mp(:, :) ! (klon, klev)
41        ! mass flux of the unsaturated downdraft, defined positive downward
42        ! M_p in Emanuel (1991 928)
43    
44      real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl)      real, intent(out):: qp(:, :), up(:, :), vp(:, :) ! (ncum, nl)
45      real, intent(out):: wt(:, :) ! (ncum, nl)      real, intent(out):: wt(:, :) ! (ncum, nl)
46      real, intent(out):: water(:, :), evap(:, :) ! (ncum, nl)  
47        real, intent(out):: water(:, :) ! (ncum, nl)
48        ! precipitation mixing ratio, l_p in Emanuel (1991 928)
49    
50        real, intent(out):: evap(:, :) ! (ncum, nl)
51        ! sigt * rate of evaporation of precipitation, in s-1
52        ! \sigma_s E in Emanuel (1991 928)
53    
54      real, intent(out):: b(:, :) ! (ncum, nl - 1)      real, intent(out):: b(:, :) ! (ncum, nl - 1)
55    
56      ! Local:      ! Local:
# Line 51  contains Line 63  contains
63      integer i, il, imax      integer i, il, imax
64      real tinv, delti      real tinv, delti
65      real afac, afac1, afac2, bfac      real afac, afac1, afac2, bfac
66      real pr1, pr2, sigt, b6, c6, revap, tevap, delth      real pr1, sigt, b6, c6, revap, tevap, delth
67      real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf      real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf
68      real ampmax      real ampmax
69      real lvcp(size(icb), nl) ! (ncum, nl)      real lvcp(size(icb), nl) ! (ncum, nl)
# Line 93  contains Line 105  contains
105         ! and condensed water flux         ! and condensed water flux
106    
107         ! Calculate detrained precipitation         ! Calculate detrained precipitation
108         forall (il = 1:ncum, inb(il) >= i .and. lwork(il)) wdtrain(il) = grav &         forall (il = 1:ncum, inb(il) >= i .and. lwork(il)) wdtrain(il) = rg &
109              * (ep(il, i) * m(il, i) * clw(il, i) &              * (ep(il, i) * m(il, i) * clw(il, i) &
110              + sum(max(elij(il, :i - 1, i) - (1. - ep(il, i)) * clw(il, i), 0.) &              + sum(max(elij(il, :i - 1, i) - (1. - ep(il, i)) * clw(il, i), 0.) &
111              * ment(il, :i - 1, i)))              * ment(il, :i - 1, i)))
# Line 135  contains Line 147  contains
147               afac = max(afac, 0.)               afac = max(afac, 0.)
148               bfac = 1. / (sigd * wt(il, i))               bfac = 1. / (sigd * wt(il, i))
149    
150               ! Prise en compte de la variation progressive de sigt dans               if (i <= icb(il)) then
151               ! les couches icb et icb - 1:                  ! Prise en compte de la variation progressive de sigt dans
152               ! pour plcl <= ph(i + 1), pr1 = 0 et pr2 = 1                  ! les couches icb et icb - 1 :
153               ! pour plcl >= ph(i), pr1 = 1 et pr2 = 0                  ! pour plcl <= ph(i + 1), pr1 = 0
154               ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion \`a cheval                  ! pour plcl >= ph(i), pr1 = 1
155               ! sur le nuage, et pr2 est la proportion sous la base du                  ! pour ph(i + 1) < plcl < ph(i), pr1 est la proportion
156               ! nuage.                  ! \`a cheval sur le nuage.
157               pr1 = max(0., min(1., &                  pr1 = max(0., min(1., &
158                    (plcl(il) - ph(il, i + 1)) / (ph(il, i) - ph(il, i + 1))))                       (plcl(il) - ph(il, i + 1)) / (ph(il, i) - ph(il, i + 1))))
159               pr2 = max(0., min(1., &                  sigt = sigp * pr1 + 1. - pr1
160                    (ph(il, i) - plcl(il)) / (ph(il, i) - ph(il, i + 1))))               else
161               sigt = sigp * pr1 + pr2                  ! {i >= icb(il) + 1}
162                    sigt = sigp
163                 end if
164    
165               b6 = bfac * 50. * sigd * (ph(il, i) - ph(il, i + 1)) * sigt * afac               b6 = bfac * 50. * sigd * (ph(il, i) - ph(il, i + 1)) * sigt * afac
166               c6 = water(il, i + 1) + bfac * wdtrain(il) - 50. * sigd * bfac &               c6 = water(il, i + 1) + bfac * wdtrain(il) - 50. * sigd * bfac &
# Line 209  contains Line 223  contains
223    
224                     mp(il, i) = max(0., mp(il, i))                     mp(il, i) = max(0., mp(il, i))
225    
226                     ! Il y a vraisemblablement une erreur dans la                     ! Il y a vraisemblablement une erreur dans la ligne
227                     ! ligne suivante : il faut diviser par (mp(il,                     ! suivante : il faut diviser par (mp(il, i) * sigd
228                     ! i) * sigd * grav) et non par (mp(il, i) + sigd                     ! * rg) et non par (mp(il, i) + sigd * 0.1).  Et il
229                     ! * 0.1).  Et il faut bien revoir les facteurs                     ! faut bien revoir les facteurs 100.
                    ! 100.  
230                     b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) &                     b(il, i - 1) = b(il, i) + 100. * (p(il, i - 1) - p(il, i)) &
231                          * tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) &                          * tevap / (mp(il, i) + sigd * 0.1) - 10. * (th(il, i) &
232                          - th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd &                          - th(il, i - 1)) * t(il, i) / (lvcp(il, i) * sigd &

Legend:
Removed from v.195  
changed lines
  Added in v.198

  ViewVC Help
Powered by ViewVC 1.1.21