/[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/CV3_routines/cv3_mixing.f revision 178 by guez, Fri Mar 11 18:47:26 2016 UTC trunk/phylmd/CV30_routines/cv30_mixing.f90 revision 332 by guez, Tue Aug 13 09:19:22 2019 UTC
# Line 1  Line 1 
1  module cv3_mixing_m  module cv30_mixing_m
2    
3    implicit none    implicit none
4    
5  contains  contains
6    
7    SUBROUTINE cv3_mixing(nloc, ncum, nd, na, icb, nk, inb, t, rr, rs, u, v, h, &    SUBROUTINE cv30_mixing(icb, inb, t, rr, rs, u, v, h, lv, hp, ep, clw, m, &
8         lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, sij, elij, &         sig, ment, qent, uent, vent, nent, sij, elij, ments, qents)
9         ments, qents)  
10      use cv3_param_m      ! MIXING
     use cvthermo  
11    
     !---------------------------------------------------------------------  
12      ! a faire:      ! a faire:
13      ! - changer rr(il, 1) -> qnk(il)      ! - changer rr(il, 1) -> qnk(il)
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
17        USE dimphy, ONLY: klev, klon
18        use suphec_m, only: rcpd, rcpv, rv
19    
20      ! inputs:      ! inputs:
21      integer, intent(in):: ncum, nd, na, nloc  
22      integer icb(nloc), inb(nloc), nk(nloc)      integer, intent(in):: icb(:) ! (ncum) {2 <= icb <= nl - 3}
23      real sig(nloc, nd)  
24      real t(nloc, nd), rr(nloc, nd), rs(nloc, nd)      integer, intent(in):: inb(:) ! (ncum)
25      real u(nloc, nd), v(nloc, nd)      ! first model level above the level of neutral buoyancy of the
26      real lv(nloc, na), h(nloc, na), hp(nloc, na)      ! parcel (1 <= inb <= nl - 1)
27      real ep(nloc, na), clw(nloc, na)  
28      real m(nloc, na) ! input of convect3      real, intent(in):: t(klon, klev), rr(klon, klev), rs(klon, klev)
29        real u(klon, klev), v(klon, klev)
30        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)
34        real m(klon, klev) ! input of convect3
35        real sig(klon, klev)
36    
37      ! outputs:      ! outputs:
38      real ment(nloc, na, na), qent(nloc, na, na)      real ment(klon, klev, klev), qent(klon, klev, klev)
39      real uent(nloc, na, na), vent(nloc, na, na)      real uent(klon, klev, klev), vent(klon, klev, klev)
40      real sij(nloc, na, na), elij(nloc, na, na)      integer, intent(out):: nent(:, 2:) ! (ncum, 2:nl - 1)
41      real ments(nloc, nd, nd), qents(nloc, nd, nd)      real sij(klon, klev, klev), elij(klon, klev, klev)
42      integer nent(nloc, nd)      real ments(klon, klev, klev), qents(klon, klev, klev)
43    
44      ! local variables:      ! Local:
45      integer i, j, k, il, im, jm      integer ncum, i, j, k, il, im, jm
46      integer num1, num2      integer num1, num2
47      real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp      real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
48      real alt, smid, sjmin, sjmax, delp, delm      real alt, smid, sjmin, sjmax, delp, delm
49      real asij(nloc), smax(nloc), scrit(nloc)      real asij(klon), smax(klon), scrit(klon)
50      real asum(nloc, nd), bsum(nloc, nd), csum(nloc, nd)      real asum(klon, klev), bsum(klon, klev), csum(klon, klev)
51      real wgh      real wgh
52      real zm(nloc, na)      real zm(klon, klev)
53      logical lwork(nloc)      logical lwork(klon)
54    
55      ! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS      !-------------------------------------------------------------------------
56    
57      do j=1, nl      ncum = size(icb)
        do i=1, ncum  
           nent(i, j)=0  
           ! in convect3, m is computed in cv3_closure  
           ! ori m(i, 1)=0.0  
        end do  
     end do  
58    
59      do j=1, nl      ! INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
60         do k=1, nl  
61            do i=1, ncum      nent = 0
62               qent(i, k, j)=rr(i, j)  
63               uent(i, k, j)=u(i, j)      do j = 1, nl
64               vent(i, k, j)=v(i, j)         do k = 1, nl
65               elij(i, k, j)=0.0            do i = 1, ncum
66               !ym ment(i, k, j)=0.0               qent(i, k, j) = rr(i, j)
67               !ym sij(i, k, j)=0.0               uent(i, k, j) = u(i, j)
68                 vent(i, k, j) = v(i, j)
69                 elij(i, k, j) = 0.0
70            end do            end do
71         end do         end do
72      end do      end do
73    
74      !ym      ment(1:ncum, 1:klev, 1:klev) = 0.0
75      ment(1:ncum, 1:nd, 1:nd)=0.0      sij(1:ncum, 1:klev, 1:klev) = 0.0
     sij(1:ncum, 1:nd, 1:nd)=0.0  
76    
77      zm(:, :)=0.      zm(:, :) = 0.
78    
79      ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING      ! CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
80      ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING      ! RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
81      ! --- FRACTION (sij)      ! FRACTION (sij)
82    
83      do i=minorig+1, nl      do i = minorig + 1, nl
84    
85         do j=minorig, nl         do j = minorig, nl
86            do il=1, ncum            do il = 1, ncum
87               if((i >= icb(il)).and.(i <= inb(il)).and. &               if((i >= icb(il)).and.(i <= inb(il)).and. &
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*t(il, j)*t(il, j)*cpd)                  bf2 = 1. + lv(il, j) * lv(il, j) * rs(il, j) / (rv &
92                  anum=h(il, j)-hp(il, i)+(cpv-cpd)*t(il, j)*(rti-rr(il, j))                       * t(il, j) * t(il, j) * rcpd)
93                  denom=h(il, i)-hp(il, i)+(cpd-cpv)*(rr(il, i)-rti)*t(il, j)                  anum = h(il, j) - hp(il, i) + (rcpv - rcpd) * t(il, j) * (rti &
94                  dei=denom                       - rr(il, j))
95                  if(abs(dei) < 0.01)dei=0.01                  denom = h(il, i) - hp(il, i) + (rcpd - rcpv) * (rr(il, i) &
96                  sij(il, i, j)=anum/dei                       - rti) * t(il, j)
97                  sij(il, i, i)=1.0                  dei = denom
98                  altem=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti-rs(il, j)                  if(abs(dei) < 0.01)dei = 0.01
99                  altem=altem/bf2                  sij(il, i, j) = anum / dei
100                  cwat=clw(il, j)*(1.-ep(il, j))                  sij(il, i, i) = 1.0
101                  stemp=sij(il, i, j)                  altem = sij(il, i, j) * rr(il, i) + (1. - sij(il, i, j)) &
102                         * rti - rs(il, j)
103                    altem = altem / bf2
104                    cwat = clw(il, j) * (1. - ep(il, j))
105                    stemp = sij(il, i, j)
106                  if((stemp < 0.0.or.stemp > 1.0.or.altem > cwat) &                  if((stemp < 0.0.or.stemp > 1.0.or.altem > cwat) &
107                       .and.j > i)then                       .and.j > i)then
108                     anum=anum-lv(il, j)*(rti-rs(il, j)-cwat*bf2)                     anum = anum - lv(il, j) * (rti - rs(il, j) - cwat * bf2)
109                     denom=denom+lv(il, j)*(rr(il, i)-rti)                     denom = denom + lv(il, j) * (rr(il, i) - rti)
110                     if(abs(denom) < 0.01)denom=0.01                     if(abs(denom) < 0.01)denom = 0.01
111                     sij(il, i, j)=anum/denom                     sij(il, i, j) = anum / denom
112                     altem=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti-rs(il, j)                     altem = sij(il, i, j) * rr(il, i) + (1. - sij(il, i, j)) &
113                     altem=altem-(bf2-1.)*cwat                          * rti - rs(il, j)
114                       altem = altem - (bf2 - 1.) * cwat
115                  end if                  end if
116                  if(sij(il, i, j) > 0.0.and.sij(il, i, j) < 0.95)then                  if(sij(il, i, j) > 0.0.and.sij(il, i, j) < 0.95)then
117                     qent(il, i, j)=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti                     qent(il, i, j) = sij(il, i, j) * rr(il, i) + (1. &
118                     uent(il, i, j)=sij(il, i, j)*u(il, i)+(1.-sij(il, i, j))*u(il, nk(il))                          - sij(il, i, j)) * rti
119                     vent(il, i, j)=sij(il, i, j)*v(il, i)+(1.-sij(il, i, j))*v(il, nk(il))                     uent(il, i, j) = sij(il, i, j) * u(il, i) + (1. &
120                     elij(il, i, j)=altem                          - sij(il, i, j)) * u(il, minorig)
121                     elij(il, i, j)=amax1(0.0, elij(il, i, j))                     vent(il, i, j) = sij(il, i, j) * v(il, i) + (1. &
122                     ment(il, i, j)=m(il, i)/(1.-sij(il, i, j))                          - sij(il, i, j)) * v(il, minorig)
123                     nent(il, i)=nent(il, i)+1                     elij(il, i, j) = altem
124                       elij(il, i, j) = amax1(0.0, elij(il, i, j))
125                       ment(il, i, j) = m(il, i) / (1. - sij(il, i, j))
126                       nent(il, i) = nent(il, i) + 1
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    
134         ! *** if no air can entrain at level i assume that updraft detrains ***         ! if no air can entrain at level i assume that updraft detrains
135         ! *** at that level and calculate detrained air flux and properties ***         ! at that level and calculate detrained air flux and properties
136    
137         !@ do 170 i=icb(il), inb(il)         do il = 1, ncum
138              if (i >= icb(il) .and. i <= inb(il)) then
139         do il=1, ncum               if (nent(il, i) == 0) then
140            if ((i >= icb(il)).and.(i <= inb(il)).and.(nent(il, i) == 0)) then                  ment(il, i, i) = m(il, i)
141               !@ if(nent(il, i) == 0)then                  qent(il, i, i) = rr(il, minorig) - ep(il, i) * clw(il, i)
142               ment(il, i, i)=m(il, i)                  uent(il, i, i) = u(il, minorig)
143               qent(il, i, i)=rr(il, nk(il))-ep(il, i)*clw(il, i)                  vent(il, i, i) = v(il, minorig)
144               uent(il, i, i)=u(il, nk(il))                  elij(il, i, i) = clw(il, i)
145               vent(il, i, i)=v(il, nk(il))                  sij(il, i, i) = 0.0
146               elij(il, i, i)=clw(il, i)               end if
              !MAF sij(il, i, i)=1.0  
              sij(il, i, i)=0.0  
147            end if            end if
148         end do         end do
149      end do      end do
150    
151      ! --- NORMALIZE ENTRAINED AIR MASS FLUXES      ! NORMALIZE ENTRAINED AIR MASS FLUXES
152      ! --- TO REPRESENT EQUAL PROBABILITIES OF MIXING      ! TO REPRESENT EQUAL PROBABILITIES OF MIXING
153    
154      call zilch(asum, nloc*nd)      asum = 0.
155      call zilch(csum, nloc*nd)      csum = 0.
     call zilch(csum, nloc*nd)  
156    
157      do il=1, ncum      do il = 1, ncum
158         lwork(il) = .FALSE.         lwork(il) = .FALSE.
159      enddo      enddo
160    
161      DO i=minorig+1, nl      DO i = minorig + 1, nl
162    
163         num1=0         num1 = 0
164         do il=1, ncum         do il = 1, ncum
165            if (i >= icb(il) .and. i <= inb(il)) num1=num1+1            if (i >= icb(il) .and. i <= inb(il)) num1 = num1 + 1
166         enddo         enddo
167         if (num1 <= 0) cycle         if (num1 <= 0) cycle
168    
169         do il=1, ncum         do il = 1, ncum
170            if (i >= icb(il) .and. i <= inb(il)) then            if (i >= icb(il) .and. i <= inb(il)) then
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)
180               if(scrit(il) <= 0.0.or.alt <= 0.0)scrit(il)=1.0               if(scrit(il) <= 0.0.or.alt <= 0.0)scrit(il) = 1.0
181               smax(il)=0.0               smax(il) = 0.0
182               asij(il)=0.0               asij(il) = 0.0
183            endif            endif
184         end do         end do
185    
186         do j=nl, minorig, -1         do j = nl, minorig, - 1
187    
188            num2=0            num2 = 0
189            do il=1, ncum            do il = 1, ncum
190               if (i >= icb(il) .and. i <= inb(il) .and. &               if (i >= icb(il) .and. i <= inb(il) .and. &
191                    j >= (icb(il)-1) .and. j <= inb(il) &                    j >= (icb(il) - 1) .and. j <= inb(il) &
192                    .and. lwork(il)) num2=num2+1                    .and. lwork(il)) num2 = num2 + 1
193            enddo            enddo
194            if (num2 <= 0) cycle            if (num2 <= 0) cycle
195    
196            do il=1, ncum            do il = 1, ncum
197               if (i >= icb(il) .and. i <= inb(il) .and. &               if (i >= icb(il) .and. i <= inb(il) .and. &
198                    j >= (icb(il)-1) .and. j <= inb(il) &                    j >= (icb(il) - 1) .and. j <= inb(il) &
199                    .and. lwork(il)) then                    .and. lwork(il)) then
200    
201                  if(sij(il, i, j) > 1.0e-16.and.sij(il, i, j) < 0.95)then                  if(sij(il, i, j) > 1.0e-16.and.sij(il, i, j) < 0.95)then
202                     wgh=1.0                     wgh = 1.0
203                     if(j > i)then                     if(j > i)then
204                        sjmax=amax1(sij(il, i, j+1), smax(il))                        sjmax = amax1(sij(il, i, j + 1), smax(il))
205                        sjmax=amin1(sjmax, scrit(il))                        sjmax = amin1(sjmax, scrit(il))
206                        smax(il)=amax1(sij(il, i, j), smax(il))                        smax(il) = amax1(sij(il, i, j), smax(il))
207                        sjmin=amax1(sij(il, i, j-1), smax(il))                        sjmin = amax1(sij(il, i, j - 1), smax(il))
208                        sjmin=amin1(sjmin, scrit(il))                        sjmin = amin1(sjmin, scrit(il))
209                        if(sij(il, i, j) < (smax(il)-1.0e-16))wgh=0.0                        if(sij(il, i, j) < (smax(il) - 1.0e-16))wgh = 0.0
210                        smid=amin1(sij(il, i, j), scrit(il))                        smid = amin1(sij(il, i, j), scrit(il))
211                     else                     else
212                        sjmax=amax1(sij(il, i, j+1), scrit(il))                        sjmax = amax1(sij(il, i, j + 1), scrit(il))
213                        smid=amax1(sij(il, i, j), scrit(il))                        smid = amax1(sij(il, i, j), scrit(il))
214                        sjmin=0.0                        sjmin = 0.0
215                        if(j > 1)sjmin=sij(il, i, j-1)                        if(j > 1)sjmin = sij(il, i, j - 1)
216                        sjmin=amax1(sjmin, scrit(il))                        sjmin = amax1(sjmin, scrit(il))
217                     endif                     endif
218                     delp=abs(sjmax-smid)                     delp = abs(sjmax - smid)
219                     delm=abs(sjmin-smid)                     delm = abs(sjmin - smid)
220                     asij(il)=asij(il)+wgh*(delp+delm)                     asij(il) = asij(il) + wgh * (delp + delm)
221                     ment(il, i, j)=ment(il, i, j)*(delp+delm)*wgh                     ment(il, i, j) = ment(il, i, j) * (delp + delm) * wgh
222                  endif                  endif
223               endif               endif
224            end do            end do
225    
226         end do         end do
227    
228         do il=1, ncum         do il = 1, ncum
229            if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then            if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then
230               asij(il)=amax1(1.0e-16, asij(il))               asij(il) = amax1(1.0e-16, asij(il))
231               asij(il)=1.0/asij(il)               asij(il) = 1.0 / asij(il)
232               asum(il, i)=0.0               asum(il, i) = 0.0
233               bsum(il, i)=0.0               bsum(il, i) = 0.0
234               csum(il, i)=0.0               csum(il, i) = 0.0
235            endif            endif
236         enddo         enddo
237    
238         do j=minorig, nl         do j = minorig, nl
239            do il=1, ncum            do il = 1, ncum
240               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
241                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then                    .and. j >= (icb(il) - 1) .and. j <= inb(il)) then
242                  ment(il, i, j)=ment(il, i, j)*asij(il)                  ment(il, i, j) = ment(il, i, j) * asij(il)
243               endif               endif
244            enddo            enddo
245         end do         end do
246    
247         do j=minorig, nl         do j = minorig, nl
248            do il=1, ncum            do il = 1, ncum
249               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
250                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then                    .and. j >= (icb(il) - 1) .and. j <= inb(il)) then
251                  asum(il, i)=asum(il, i)+ment(il, i, j)                  asum(il, i) = asum(il, i) + ment(il, i, j)
252                  ment(il, i, j)=ment(il, i, j)*sig(il, j)                  ment(il, i, j) = ment(il, i, j) * sig(il, j)
253                  bsum(il, i)=bsum(il, i)+ment(il, i, j)                  bsum(il, i) = bsum(il, i) + ment(il, i, j)
254               endif               endif
255            enddo            enddo
256         end do         end do
257    
258         do il=1, ncum         do il = 1, ncum
259            if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then            if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then
260               bsum(il, i)=amax1(bsum(il, i), 1.0e-16)               bsum(il, i) = amax1(bsum(il, i), 1.0e-16)
261               bsum(il, i)=1.0/bsum(il, i)               bsum(il, i) = 1.0 / bsum(il, i)
262            endif            endif
263         enddo         enddo
264    
265         do j=minorig, nl         do j = minorig, nl
266            do il=1, ncum            do il = 1, ncum
267               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
268                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then                    .and. j >= (icb(il) - 1) .and. j <= inb(il)) then
269                  ment(il, i, j)=ment(il, i, j)*asum(il, i)*bsum(il, i)                  ment(il, i, j) = ment(il, i, j) * asum(il, i) * bsum(il, i)
270               endif               endif
271            enddo            enddo
272         end do         end do
273    
274         do j=minorig, nl         do j = minorig, nl
275            do il=1, ncum            do il = 1, ncum
276               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
277                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then                    .and. j >= (icb(il) - 1) .and. j <= inb(il)) then
278                  csum(il, i)=csum(il, i)+ment(il, i, j)                  csum(il, i) = csum(il, i) + ment(il, i, j)
279               endif               endif
280            enddo            enddo
281         end do         end do
282    
283         do il=1, ncum         do il = 1, ncum
284            if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &            if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
285                 .and. csum(il, i) < m(il, i)) then                 .and. csum(il, i) < m(il, i)) then
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               !MAF sij(il, i, i)=1.0               sij(il, i, i) = 0.0
              sij(il, i, i)=0.0  
293            endif            endif
294         enddo ! il         enddo ! il
295    
296      end DO      end DO
297    
298      ! MAF: renormalisation de MENT      ! MAF: renormalisation de MENT
299      do jm=1, nd      do jm = 1, klev
300         do im=1, nd         do im = 1, klev
301            do il=1, ncum            do il = 1, ncum
302               zm(il, im)=zm(il, im)+(1.-sij(il, im, jm))*ment(il, im, jm)               zm(il, im) = zm(il, im) + (1. - sij(il, im, jm)) * ment(il, im, jm)
303            end do            end do
304         end do         end do
305      end do      end do
306    
307      do jm=1, nd      do jm = 1, klev
308         do im=1, nd         do im = 1, klev
309            do il=1, ncum            do il = 1, ncum
310               if(zm(il, im) /= 0.) then               if(zm(il, im) /= 0.) then
311                  ment(il, im, jm)=ment(il, im, jm)*m(il, im)/zm(il, im)                  ment(il, im, jm) = ment(il, im, jm) * m(il, im) / zm(il, im)
312               endif               endif
313            end do            end do
314         end do         end do
315      end do      end do
316    
317      do jm=1, nd      do jm = 1, klev
318         do im=1, nd         do im = 1, klev
319            do il=1, ncum            do il = 1, ncum
320               qents(il, im, jm)=qent(il, im, jm)               qents(il, im, jm) = qent(il, im, jm)
321               ments(il, im, jm)=ment(il, im, jm)               ments(il, im, jm) = ment(il, im, jm)
322            end do            end do
323         enddo         enddo
324      enddo      enddo
325    
326    end SUBROUTINE cv3_mixing    end SUBROUTINE cv30_mixing
327    
328  end module cv3_mixing_m  end module cv30_mixing_m

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

  ViewVC Help
Powered by ViewVC 1.1.21