/[lmdze]/trunk/phylmd/CV30_routines/cv30_mixing.f90
ViewVC logotype

Diff of /trunk/phylmd/CV30_routines/cv30_mixing.f90

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

trunk/Sources/phylmd/CV30_routines/cv30_mixing.f revision 195 by guez, Wed May 18 17:56:44 2016 UTC trunk/phylmd/CV30_routines/cv30_mixing.f90 revision 332 by guez, Tue Aug 13 09:19:22 2019 UTC
# Line 4  module cv30_mixing_m Line 4  module cv30_mixing_m
4    
5  contains  contains
6    
7    SUBROUTINE cv30_mixing(icb, nk, inb, t, rr, rs, u, v, h, lv, hp, ep, clw, &    SUBROUTINE cv30_mixing(icb, inb, t, rr, rs, u, v, h, lv, hp, ep, clw, m, &
8         m, sig, ment, qent, uent, vent, nent, sij, elij, ments, qents)         sig, ment, qent, uent, vent, nent, sij, elij, ments, qents)
9    
10      ! MIXING      ! MIXING
11    
# Line 14  contains Line 14  contains
14      ! - vectorisation de la partie normalisation des flux (do 789)      ! - vectorisation de la partie normalisation des flux (do 789)
15    
16      use cv30_param_m, only: minorig, nl      use cv30_param_m, only: minorig, nl
     use cv_thermo_m, only: cpd, cpv, rrv  
17      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
18        use suphec_m, only: rcpd, rcpv, rv
19    
20      ! inputs:      ! inputs:
21      integer, intent(in):: icb(:), nk(:), inb(:) ! (ncum)  
22      real t(klon, klev), rr(klon, klev), rs(klon, klev)      integer, intent(in):: icb(:) ! (ncum) {2 <= icb <= nl - 3}
23    
24        integer, intent(in):: inb(:) ! (ncum)
25        ! first model level above the level of neutral buoyancy of the
26        ! parcel (1 <= inb <= nl - 1)
27    
28        real, intent(in):: t(klon, klev), rr(klon, klev), rs(klon, klev)
29      real u(klon, klev), v(klon, klev)      real u(klon, klev), v(klon, klev)
30      real h(klon, klev), lv(klon, klev), hp(klon, klev)      real, intent(in):: h(klon, klev)
31        real, intent(in):: lv(:, :) ! (klon, klev)
32        real, intent(in):: hp(klon, klev)
33      real ep(klon, klev), clw(klon, klev)      real ep(klon, klev), clw(klon, klev)
34      real m(klon, klev) ! input of convect3      real m(klon, klev) ! input of convect3
35      real sig(klon, klev)      real sig(klon, klev)
# Line 29  contains Line 37  contains
37      ! outputs:      ! outputs:
38      real ment(klon, klev, klev), qent(klon, klev, klev)      real ment(klon, klev, klev), qent(klon, klev, klev)
39      real uent(klon, klev, klev), vent(klon, klev, klev)      real uent(klon, klev, klev), vent(klon, klev, klev)
40      integer nent(klon, klev)      integer, intent(out):: nent(:, 2:) ! (ncum, 2:nl - 1)
41      real sij(klon, klev, klev), elij(klon, klev, klev)      real sij(klon, klev, klev), elij(klon, klev, klev)
42      real ments(klon, klev, klev), qents(klon, klev, klev)      real ments(klon, klev, klev), qents(klon, klev, klev)
43    
# Line 50  contains Line 58  contains
58    
59      ! INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS      ! INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
60    
61      do j = 1, nl      nent = 0
        do i = 1, ncum  
           nent(i, j) = 0  
        end do  
     end do  
62    
63      do j = 1, nl      do j = 1, nl
64         do k = 1, nl         do k = 1, nl
# Line 84  contains Line 88  contains
88                    (j >= (icb(il) - 1)).and.(j <= inb(il)))then                    (j >= (icb(il) - 1)).and.(j <= inb(il)))then
89    
90                  rti = rr(il, 1) - ep(il, i) * clw(il, i)                  rti = rr(il, 1) - ep(il, i) * clw(il, i)
91                  bf2 = 1. + lv(il, j) * lv(il, j) * rs(il, j) / (rrv &                  bf2 = 1. + lv(il, j) * lv(il, j) * rs(il, j) / (rv &
92                       * t(il, j) * t(il, j) * cpd)                       * t(il, j) * t(il, j) * rcpd)
93                  anum = h(il, j) - hp(il, i) + (cpv - cpd) * t(il, j) * (rti &                  anum = h(il, j) - hp(il, i) + (rcpv - rcpd) * t(il, j) * (rti &
94                       - rr(il, j))                       - rr(il, j))
95                  denom = h(il, i) - hp(il, i) + (cpd - cpv) * (rr(il, i) &                  denom = h(il, i) - hp(il, i) + (rcpd - rcpv) * (rr(il, i) &
96                       - rti) * t(il, j)                       - rti) * t(il, j)
97                  dei = denom                  dei = denom
98                  if(abs(dei) < 0.01)dei = 0.01                  if(abs(dei) < 0.01)dei = 0.01
# Line 113  contains Line 117  contains
117                     qent(il, i, j) = sij(il, i, j) * rr(il, i) + (1. &                     qent(il, i, j) = sij(il, i, j) * rr(il, i) + (1. &
118                          - sij(il, i, j)) * rti                          - sij(il, i, j)) * rti
119                     uent(il, i, j) = sij(il, i, j) * u(il, i) + (1. &                     uent(il, i, j) = sij(il, i, j) * u(il, i) + (1. &
120                          - sij(il, i, j)) * u(il, nk(il))                          - sij(il, i, j)) * u(il, minorig)
121                     vent(il, i, j) = sij(il, i, j) * v(il, i) + (1. &                     vent(il, i, j) = sij(il, i, j) * v(il, i) + (1. &
122                          - sij(il, i, j)) * v(il, nk(il))                          - sij(il, i, j)) * v(il, minorig)
123                     elij(il, i, j) = altem                     elij(il, i, j) = altem
124                     elij(il, i, j) = amax1(0.0, elij(il, i, j))                     elij(il, i, j) = amax1(0.0, elij(il, i, j))
125                     ment(il, i, j) = m(il, i) / (1. - sij(il, i, j))                     ment(il, i, j) = m(il, i) / (1. - sij(il, i, j))
# Line 123  contains Line 127  contains
127                  end if                  end if
128                  sij(il, i, j) = amax1(0.0, sij(il, i, j))                  sij(il, i, j) = amax1(0.0, sij(il, i, j))
129                  sij(il, i, j) = amin1(1.0, sij(il, i, j))                  sij(il, i, j) = amin1(1.0, sij(il, i, j))
130               endif ! new               endif
131            end do            end do
132         end do         end do
133    
# Line 131  contains Line 135  contains
135         ! at that level and calculate detrained air flux and properties         ! at that level and calculate detrained air flux and properties
136    
137         do il = 1, ncum         do il = 1, ncum
138            if ((i >= icb(il)).and.(i <= inb(il)).and.(nent(il, i) == 0)) then            if (i >= icb(il) .and. i <= inb(il)) then
139               ment(il, i, i) = m(il, i)               if (nent(il, i) == 0) then
140               qent(il, i, i) = rr(il, nk(il)) - ep(il, i) * clw(il, i)                  ment(il, i, i) = m(il, i)
141               uent(il, i, i) = u(il, nk(il))                  qent(il, i, i) = rr(il, minorig) - ep(il, i) * clw(il, i)
142               vent(il, i, i) = v(il, nk(il))                  uent(il, i, i) = u(il, minorig)
143               elij(il, i, i) = clw(il, i)                  vent(il, i, i) = v(il, minorig)
144               sij(il, i, i) = 0.0                  elij(il, i, i) = clw(il, i)
145                    sij(il, i, i) = 0.0
146                 end if
147            end if            end if
148         end do         end do
149      end do      end do
# Line 165  contains Line 171  contains
171               lwork(il) = (nent(il, i) /= 0)               lwork(il) = (nent(il, i) /= 0)
172               qp = rr(il, 1) - ep(il, i) * clw(il, i)               qp = rr(il, 1) - ep(il, i) * clw(il, i)
173               anum = h(il, i) - hp(il, i) - lv(il, i) * (qp - rs(il, i)) &               anum = h(il, i) - hp(il, i) - lv(il, i) * (qp - rs(il, i)) &
174                    + (cpv - cpd) * t(il, i) * (qp - rr(il, i))                    + (rcpv - rcpd) * t(il, i) * (qp - rr(il, i))
175               denom = h(il, i) - hp(il, i) + lv(il, i) * (rr(il, i) - qp) &               denom = h(il, i) - hp(il, i) + lv(il, i) * (rr(il, i) - qp) &
176                    + (cpd - cpv) * t(il, i) * (rr(il, i) - qp)                    + (rcpd - rcpv) * t(il, i) * (rr(il, i) - qp)
177               if(abs(denom) < 0.01)denom = 0.01               if(abs(denom) < 0.01)denom = 0.01
178               scrit(il) = anum / denom               scrit(il) = anum / denom
179               alt = qp - rs(il, i) + scrit(il) * (rr(il, i) - qp)               alt = qp - rs(il, i) + scrit(il) * (rr(il, i) - qp)
# Line 280  contains Line 286  contains
286               nent(il, i) = 0               nent(il, i) = 0
287               ment(il, i, i) = m(il, i)               ment(il, i, i) = m(il, i)
288               qent(il, i, i) = rr(il, 1) - ep(il, i) * clw(il, i)               qent(il, i, i) = rr(il, 1) - ep(il, i) * clw(il, i)
289               uent(il, i, i) = u(il, nk(il))               uent(il, i, i) = u(il, minorig)
290               vent(il, i, i) = v(il, nk(il))               vent(il, i, i) = v(il, minorig)
291               elij(il, i, i) = clw(il, i)               elij(il, i, i) = clw(il, i)
292               sij(il, i, i) = 0.0               sij(il, i, i) = 0.0
293            endif            endif

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

  ViewVC Help
Powered by ViewVC 1.1.21