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

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

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

trunk/libf/phylmd/CV3_routines/cv3_mixing.f90 revision 47 by guez, Fri Jul 1 15:00:48 2011 UTC trunk/Sources/phylmd/CV30_routines/cv30_mixing.f revision 187 by guez, Mon Mar 21 18:01:02 2016 UTC
# Line 1  Line 1 
1    module cv30_mixing_m
2    
3        SUBROUTINE cv3_mixing(nloc,ncum,nd,na,ntra,icb,nk,inb &    implicit none
4                            ,ph,t,rr,rs,u,v,tra,h,lv,qnk &  
5                            ,hp,tv,tvp,ep,clw,m,sig &  contains
6           ,ment,qent,uent,vent, nent, sij,elij,ments,qents,traent)  
7              use cvparam3    SUBROUTINE cv30_mixing(nloc, ncum, nd, na, icb, nk, inb, t, rr, rs, u, v, h, &
8              use cvthermo         lv, hp, ep, clw, m, sig, ment, qent, uent, vent, nent, sij, elij, &
9        implicit none         ments, qents)
10        use cv30_param_m
11  !---------------------------------------------------------------------      use cvthermo
12  ! a faire:  
13  !     - changer rr(il,1) -> qnk(il)      !---------------------------------------------------------------------
14  !   - vectorisation de la partie normalisation des flux (do 789...)      ! a faire:
15  !---------------------------------------------------------------------      ! - changer rr(il, 1) -> qnk(il)
16        ! - vectorisation de la partie normalisation des flux (do 789)
17        !---------------------------------------------------------------------
18  ! inputs:  
19        integer ncum, nd, na, ntra, nloc      ! inputs:
20        integer icb(nloc), inb(nloc), nk(nloc)      integer, intent(in):: ncum, nd, na, nloc
21        real sig(nloc,nd)      integer, intent(in):: icb(nloc), inb(nloc), nk(nloc)
22        real qnk(nloc)      real sig(nloc, nd)
23        real ph(nloc,nd+1)      real t(nloc, nd), rr(nloc, nd), rs(nloc, nd)
24        real t(nloc,nd), rr(nloc,nd), rs(nloc,nd)      real u(nloc, nd), v(nloc, nd)
25        real u(nloc,nd), v(nloc,nd)      real lv(nloc, na), h(nloc, na), hp(nloc, na)
26        real tra(nloc,nd,ntra) ! input of convect3      real ep(nloc, na), clw(nloc, na)
27        real lv(nloc,na), h(nloc,na), hp(nloc,na)      real m(nloc, na) ! input of convect3
28        real tv(nloc,na), tvp(nloc,na), ep(nloc,na), clw(nloc,na)  
29        real m(nloc,na)        ! input of convect3      ! outputs:
30        real ment(nloc, na, na), qent(nloc, na, na)
31  ! outputs:      real uent(nloc, na, na), vent(nloc, na, na)
32        real ment(nloc,na,na), qent(nloc,na,na)      real sij(nloc, na, na), elij(nloc, na, na)
33        real uent(nloc,na,na), vent(nloc,na,na)      real ments(nloc, nd, nd), qents(nloc, nd, nd)
34        real sij(nloc,na,na), elij(nloc,na,na)      integer nent(nloc, nd)
35        real traent(nloc,nd,nd,ntra)  
36        real ments(nloc,nd,nd), qents(nloc,nd,nd)      ! local variables:
37        real sigij(nloc,nd,nd)      integer i, j, k, il, im, jm
38        integer nent(nloc,nd)      integer num1, num2
39        real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
40  ! local variables:      real alt, smid, sjmin, sjmax, delp, delm
41        integer i, j, k, il, im, jm      real asij(nloc), smax(nloc), scrit(nloc)
42        integer num1, num2      real asum(nloc, nd), bsum(nloc, nd), csum(nloc, nd)
43        real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp      real wgh
44        real alt, smid, sjmin, sjmax, delp, delm      real zm(nloc, na)
45        real asij(nloc), smax(nloc), scrit(nloc)      logical lwork(nloc)
46        real asum(nloc,nd),bsum(nloc,nd),csum(nloc,nd)  
47        real wgh      ! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
48        real zm(nloc,na)  
49        logical lwork(nloc)      do j=1, nl
50           do i=1, ncum
51  !=====================================================================            nent(i, j)=0
52  ! --- INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS            ! in convect3, m is computed in cv30_closure
53  !=====================================================================            ! ori m(i, 1)=0.0
54           end do
55  ! ori        do 360 i=1,ncum*nlp      end do
56          do 361 j=1,nl  
57          do 360 i=1,ncum      do j=1, nl
58            nent(i,j)=0         do k=1, nl
59  ! in convect3, m is computed in cv3_closure            do i=1, ncum
60  ! ori          m(i,1)=0.0               qent(i, k, j)=rr(i, j)
61   360    continue               uent(i, k, j)=u(i, j)
62   361    continue               vent(i, k, j)=v(i, j)
63                 elij(i, k, j)=0.0
64  ! ori      do 400 k=1,nlp               !ym ment(i, k, j)=0.0
65  ! ori       do 390 j=1,nlp               !ym sij(i, k, j)=0.0
66        do 400 j=1,nl            end do
67         do 390 k=1,nl         end do
68            do 385 i=1,ncum      end do
69              qent(i,k,j)=rr(i,j)  
70              uent(i,k,j)=u(i,j)      !ym
71              vent(i,k,j)=v(i,j)      ment(1:ncum, 1:nd, 1:nd)=0.0
72              elij(i,k,j)=0.0      sij(1:ncum, 1:nd, 1:nd)=0.0
73  !ym            ment(i,k,j)=0.0  
74  !ym            sij(i,k,j)=0.0      zm(:, :)=0.
75   385      continue  
76   390    continue      ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
77   400  continue      ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
78        ! --- FRACTION (sij)
79  !ym  
80        ment(1:ncum,1:nd,1:nd)=0.0      do i=minorig+1, nl
81        sij(1:ncum,1:nd,1:nd)=0.0  
82           do j=minorig, nl
83  !      do k=1,ntra            do il=1, ncum
84  !       do j=1,nd  ! instead nlp               if((i >= icb(il)).and.(i <= inb(il)).and. &
85  !        do i=1,nd ! instead nlp                    (j >= (icb(il)-1)).and.(j <= inb(il)))then
86  !         do il=1,ncum  
87  !            traent(il,i,j,k)=tra(il,j,k)                  rti=rr(il, 1)-ep(il, i)*clw(il, i)
88  !         enddo                  bf2=1.+lv(il, j)*lv(il, j)*rs(il, j)/(rrv*t(il, j)*t(il, j)*cpd)
89  !        enddo                  anum=h(il, j)-hp(il, i)+(cpv-cpd)*t(il, j)*(rti-rr(il, j))
90  !       enddo                  denom=h(il, i)-hp(il, i)+(cpd-cpv)*(rr(il, i)-rti)*t(il, j)
91  !      enddo                  dei=denom
92        zm(:,:)=0.                  if(abs(dei) < 0.01)dei=0.01
93                    sij(il, i, j)=anum/dei
94  !=====================================================================                  sij(il, i, i)=1.0
95  ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING                  altem=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti-rs(il, j)
96  ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING                  altem=altem/bf2
97  ! --- FRACTION (sij)                  cwat=clw(il, j)*(1.-ep(il, j))
98  !=====================================================================                  stemp=sij(il, i, j)
99                    if((stemp < 0.0.or.stemp > 1.0.or.altem > cwat) &
100        do 750 i=minorig+1, nl                       .and.j > i)then
101                       anum=anum-lv(il, j)*(rti-rs(il, j)-cwat*bf2)
102         do 710 j=minorig,nl                     denom=denom+lv(il, j)*(rr(il, i)-rti)
103          do 700 il=1,ncum                     if(abs(denom) < 0.01)denom=0.01
104           if( (i.ge.icb(il)).and.(i.le.inb(il)).and. &                     sij(il, i, j)=anum/denom
105              (j.ge.(icb(il)-1)).and.(j.le.inb(il)))then                     altem=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti-rs(il, j)
106                       altem=altem-(bf2-1.)*cwat
107            rti=rr(il,1)-ep(il,i)*clw(il,i)                  end if
108            bf2=1.+lv(il,j)*lv(il,j)*rs(il,j)/(rrv*t(il,j)*t(il,j)*cpd)                  if(sij(il, i, j) > 0.0.and.sij(il, i, j) < 0.95)then
109            anum=h(il,j)-hp(il,i)+(cpv-cpd)*t(il,j)*(rti-rr(il,j))                     qent(il, i, j)=sij(il, i, j)*rr(il, i)+(1.-sij(il, i, j))*rti
110            denom=h(il,i)-hp(il,i)+(cpd-cpv)*(rr(il,i)-rti)*t(il,j)                     uent(il, i, j)=sij(il, i, j)*u(il, i)+(1.-sij(il, i, j))*u(il, nk(il))
111            dei=denom                     vent(il, i, j)=sij(il, i, j)*v(il, i)+(1.-sij(il, i, j))*v(il, nk(il))
112            if(abs(dei).lt.0.01)dei=0.01                     elij(il, i, j)=altem
113            sij(il,i,j)=anum/dei                     elij(il, i, j)=amax1(0.0, elij(il, i, j))
114            sij(il,i,i)=1.0                     ment(il, i, j)=m(il, i)/(1.-sij(il, i, j))
115            altem=sij(il,i,j)*rr(il,i)+(1.-sij(il,i,j))*rti-rs(il,j)                     nent(il, i)=nent(il, i)+1
116            altem=altem/bf2                  end if
117            cwat=clw(il,j)*(1.-ep(il,j))                  sij(il, i, j)=amax1(0.0, sij(il, i, j))
118            stemp=sij(il,i,j)                  sij(il, i, j)=amin1(1.0, sij(il, i, j))
119            if((stemp.lt.0.0.or.stemp.gt.1.0.or.altem.gt.cwat) &               endif ! new
120                         .and.j.gt.i)then            end do
121             anum=anum-lv(il,j)*(rti-rs(il,j)-cwat*bf2)         end do
122             denom=denom+lv(il,j)*(rr(il,i)-rti)  
123             if(abs(denom).lt.0.01)denom=0.01         ! *** if no air can entrain at level i assume that updraft detrains ***
124             sij(il,i,j)=anum/denom         ! *** at that level and calculate detrained air flux and properties ***
125             altem=sij(il,i,j)*rr(il,i)+(1.-sij(il,i,j))*rti-rs(il,j)  
126             altem=altem-(bf2-1.)*cwat         do il=1, ncum
127              if ((i >= icb(il)).and.(i <= inb(il)).and.(nent(il, i) == 0)) then
128                 !@ if(nent(il, i) == 0)then
129                 ment(il, i, i)=m(il, i)
130                 qent(il, i, i)=rr(il, nk(il))-ep(il, i)*clw(il, i)
131                 uent(il, i, i)=u(il, nk(il))
132                 vent(il, i, i)=v(il, nk(il))
133                 elij(il, i, i)=clw(il, i)
134                 !MAF sij(il, i, i)=1.0
135                 sij(il, i, i)=0.0
136            end if            end if
137           if(sij(il,i,j).gt.0.0.and.sij(il,i,j).lt.0.95)then         end do
138            qent(il,i,j)=sij(il,i,j)*rr(il,i)+(1.-sij(il,i,j))*rti      end do
139            uent(il,i,j)=sij(il,i,j)*u(il,i)+(1.-sij(il,i,j))*u(il,nk(il))  
140            vent(il,i,j)=sij(il,i,j)*v(il,i)+(1.-sij(il,i,j))*v(il,nk(il))      ! --- NORMALIZE ENTRAINED AIR MASS FLUXES
141  !!!!      do k=1,ntra      ! --- TO REPRESENT EQUAL PROBABILITIES OF MIXING
142  !!!!      traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)  
143  !!!!     :      +(1.-sij(il,i,j))*tra(il,nk(il),k)      asum = 0.
144  !!!!      end do      csum = 0.
           elij(il,i,j)=altem  
           elij(il,i,j)=amax1(0.0,elij(il,i,j))  
           ment(il,i,j)=m(il,i)/(1.-sij(il,i,j))  
           nent(il,i)=nent(il,i)+1  
          end if  
          sij(il,i,j)=amax1(0.0,sij(il,i,j))  
          sij(il,i,j)=amin1(1.0,sij(il,i,j))  
          endif ! new  
  700   continue  
  710  continue  
   
 !       do k=1,ntra  
 !        do j=minorig,nl  
 !         do il=1,ncum  
 !          if( (i.ge.icb(il)).and.(i.le.inb(il)).and.  
 !     :       (j.ge.(icb(il)-1)).and.(j.le.inb(il)))then  
 !            traent(il,i,j,k)=sij(il,i,j)*tra(il,i,k)  
 !     :            +(1.-sij(il,i,j))*tra(il,nk(il),k)  
 !          endif  
 !         enddo  
 !        enddo  
 !       enddo  
   
 !  
 !   ***   if no air can entrain at level i assume that updraft detrains  ***  
 !   ***   at that level and calculate detrained air flux and properties  ***  
 !  
   
 !@      do 170 i=icb(il),inb(il)  
   
       do 740 il=1,ncum  
       if ((i.ge.icb(il)).and.(i.le.inb(il)).and.(nent(il,i).eq.0)) then  
 !@      if(nent(il,i).eq.0)then  
       ment(il,i,i)=m(il,i)  
       qent(il,i,i)=rr(il,nk(il))-ep(il,i)*clw(il,i)  
       uent(il,i,i)=u(il,nk(il))  
       vent(il,i,i)=v(il,nk(il))  
       elij(il,i,i)=clw(il,i)  
 !MAF      sij(il,i,i)=1.0  
       sij(il,i,i)=0.0  
       end if  
  740  continue  
  750  continue  
   
 !      do j=1,ntra  
 !       do i=minorig+1,nl  
 !        do il=1,ncum  
 !         if (i.ge.icb(il) .and. i.le.inb(il) .and. nent(il,i).eq.0) then  
 !          traent(il,i,i,j)=tra(il,nk(il),j)  
 !         endif  
 !        enddo  
 !       enddo  
 !      enddo  
   
       do 100 j=minorig,nl  
       do 101 i=minorig,nl  
       do 102 il=1,ncum  
       if ((j.ge.(icb(il)-1)).and.(j.le.inb(il)) &  
           .and.(i.ge.icb(il)).and.(i.le.inb(il)))then  
        sigij(il,i,j)=sij(il,i,j)  
       endif  
  102  continue  
  101  continue  
  100  continue  
 !@      enddo  
   
 !@170   continue  
   
 !=====================================================================  
 !   ---  NORMALIZE ENTRAINED AIR MASS FLUXES  
 !   ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING  
 !=====================================================================  
   
 !ym      call zilch(asum,ncum*nd)  
 !ym      call zilch(bsum,ncum*nd)  
 !ym      call zilch(csum,ncum*nd)  
       call zilch(asum,nloc*nd)  
       call zilch(csum,nloc*nd)  
       call zilch(csum,nloc*nd)  
145    
146        do il=1,ncum      do il=1, ncum
147         lwork(il) = .FALSE.         lwork(il) = .FALSE.
148        enddo      enddo
149    
150        DO 789 i=minorig+1,nl      DO i=minorig+1, nl
151    
152        num1=0         num1=0
153        do il=1,ncum         do il=1, ncum
154         if ( i.ge.icb(il) .and. i.le.inb(il) ) num1=num1+1            if (i >= icb(il) .and. i <= inb(il)) num1=num1+1
       enddo  
       if (num1.le.0) goto 789  
   
   
       do 781 il=1,ncum  
        if ( i.ge.icb(il) .and. i.le.inb(il) ) then  
         lwork(il)=(nent(il,i).ne.0)  
         qp=rr(il,1)-ep(il,i)*clw(il,i)  
         anum=h(il,i)-hp(il,i)-lv(il,i)*(qp-rs(il,i)) &  
                  +(cpv-cpd)*t(il,i)*(qp-rr(il,i))  
         denom=h(il,i)-hp(il,i)+lv(il,i)*(rr(il,i)-qp) &  
                  +(cpd-cpv)*t(il,i)*(rr(il,i)-qp)  
         if(abs(denom).lt.0.01)denom=0.01  
         scrit(il)=anum/denom  
         alt=qp-rs(il,i)+scrit(il)*(rr(il,i)-qp)  
         if(scrit(il).le.0.0.or.alt.le.0.0)scrit(il)=1.0  
         smax(il)=0.0  
         asij(il)=0.0  
        endif  
 781   continue  
   
       do 175 j=nl,minorig,-1  
   
       num2=0  
       do il=1,ncum  
        if ( i.ge.icb(il) .and. i.le.inb(il) .and. &  
             j.ge.(icb(il)-1) .and. j.le.inb(il)  &  
             .and. lwork(il) ) num2=num2+1  
       enddo  
       if (num2.le.0) goto 175  
   
       do 782 il=1,ncum  
       if ( i.ge.icb(il) .and. i.le.inb(il) .and. &  
             j.ge.(icb(il)-1) .and. j.le.inb(il)  &  
             .and. lwork(il) ) then  
   
        if(sij(il,i,j).gt.1.0e-16.and.sij(il,i,j).lt.0.95)then  
         wgh=1.0  
         if(j.gt.i)then  
          sjmax=amax1(sij(il,i,j+1),smax(il))  
          sjmax=amin1(sjmax,scrit(il))  
          smax(il)=amax1(sij(il,i,j),smax(il))  
          sjmin=amax1(sij(il,i,j-1),smax(il))  
          sjmin=amin1(sjmin,scrit(il))  
          if(sij(il,i,j).lt.(smax(il)-1.0e-16))wgh=0.0  
          smid=amin1(sij(il,i,j),scrit(il))  
         else  
          sjmax=amax1(sij(il,i,j+1),scrit(il))  
          smid=amax1(sij(il,i,j),scrit(il))  
          sjmin=0.0  
          if(j.gt.1)sjmin=sij(il,i,j-1)  
          sjmin=amax1(sjmin,scrit(il))  
         endif  
         delp=abs(sjmax-smid)  
         delm=abs(sjmin-smid)  
         asij(il)=asij(il)+wgh*(delp+delm)  
         ment(il,i,j)=ment(il,i,j)*(delp+delm)*wgh  
        endif  
       endif  
 782   continue  
   
 175   continue  
   
       do il=1,ncum  
        if (i.ge.icb(il).and.i.le.inb(il).and.lwork(il)) then  
         asij(il)=amax1(1.0e-16,asij(il))  
         asij(il)=1.0/asij(il)  
         asum(il,i)=0.0  
         bsum(il,i)=0.0  
         csum(il,i)=0.0  
        endif  
       enddo  
   
       do 180 j=minorig,nl  
        do il=1,ncum  
         if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il) &  
          .and. j.ge.(icb(il)-1) .and. j.le.inb(il) ) then  
          ment(il,i,j)=ment(il,i,j)*asij(il)  
         endif  
155         enddo         enddo
156  180   continue         if (num1 <= 0) cycle
157    
158        do 190 j=minorig,nl         do il=1, ncum
159         do il=1,ncum            if (i >= icb(il) .and. i <= inb(il)) then
160          if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il) &               lwork(il)=(nent(il, i) /= 0)
161           .and. j.ge.(icb(il)-1) .and. j.le.inb(il) ) then               qp=rr(il, 1)-ep(il, i)*clw(il, i)
162           asum(il,i)=asum(il,i)+ment(il,i,j)               anum=h(il, i)-hp(il, i)-lv(il, i)*(qp-rs(il, i)) &
163           ment(il,i,j)=ment(il,i,j)*sig(il,j)                    +(cpv-cpd)*t(il, i)*(qp-rr(il, i))
164           bsum(il,i)=bsum(il,i)+ment(il,i,j)               denom=h(il, i)-hp(il, i)+lv(il, i)*(rr(il, i)-qp) &
165          endif                    +(cpd-cpv)*t(il, i)*(rr(il, i)-qp)
166         enddo               if(abs(denom) < 0.01)denom=0.01
167  190   continue               scrit(il)=anum/denom
168                 alt=qp-rs(il, i)+scrit(il)*(rr(il, i)-qp)
169                 if(scrit(il) <= 0.0.or.alt <= 0.0)scrit(il)=1.0
170                 smax(il)=0.0
171                 asij(il)=0.0
172              endif
173           end do
174    
175           do j=nl, minorig, -1
176    
177        do il=1,ncum            num2=0
178         if (i.ge.icb(il).and.i.le.inb(il).and.lwork(il)) then            do il=1, ncum
179          bsum(il,i)=amax1(bsum(il,i),1.0e-16)               if (i >= icb(il) .and. i <= inb(il) .and. &
180          bsum(il,i)=1.0/bsum(il,i)                    j >= (icb(il)-1) .and. j <= inb(il) &
181         endif                    .and. lwork(il)) num2=num2+1
182        enddo            enddo
183              if (num2 <= 0) cycle
184        do 195 j=minorig,nl  
185         do il=1,ncum            do il=1, ncum
186          if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. &
187           .and. j.ge.(icb(il)-1) .and. j.le.inb(il) ) then                    j >= (icb(il)-1) .and. j <= inb(il) &
188           ment(il,i,j)=ment(il,i,j)*asum(il,i)*bsum(il,i)                    .and. lwork(il)) then
189          endif  
190                    if(sij(il, i, j) > 1.0e-16.and.sij(il, i, j) < 0.95)then
191                       wgh=1.0
192                       if(j > i)then
193                          sjmax=amax1(sij(il, i, j+1), smax(il))
194                          sjmax=amin1(sjmax, scrit(il))
195                          smax(il)=amax1(sij(il, i, j), smax(il))
196                          sjmin=amax1(sij(il, i, j-1), smax(il))
197                          sjmin=amin1(sjmin, scrit(il))
198                          if(sij(il, i, j) < (smax(il)-1.0e-16))wgh=0.0
199                          smid=amin1(sij(il, i, j), scrit(il))
200                       else
201                          sjmax=amax1(sij(il, i, j+1), scrit(il))
202                          smid=amax1(sij(il, i, j), scrit(il))
203                          sjmin=0.0
204                          if(j > 1)sjmin=sij(il, i, j-1)
205                          sjmin=amax1(sjmin, scrit(il))
206                       endif
207                       delp=abs(sjmax-smid)
208                       delm=abs(sjmin-smid)
209                       asij(il)=asij(il)+wgh*(delp+delm)
210                       ment(il, i, j)=ment(il, i, j)*(delp+delm)*wgh
211                    endif
212                 endif
213              end do
214    
215           end do
216    
217           do il=1, ncum
218              if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then
219                 asij(il)=amax1(1.0e-16, asij(il))
220                 asij(il)=1.0/asij(il)
221                 asum(il, i)=0.0
222                 bsum(il, i)=0.0
223                 csum(il, i)=0.0
224              endif
225         enddo         enddo
 195   continue  
226    
227        do 197 j=minorig,nl         do j=minorig, nl
228         do il=1,ncum            do il=1, ncum
229          if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il) &               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
230           .and. j.ge.(icb(il)-1) .and. j.le.inb(il) ) then                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then
231           csum(il,i)=csum(il,i)+ment(il,i,j)                  ment(il, i, j)=ment(il, i, j)*asij(il)
232          endif               endif
233              enddo
234           end do
235    
236           do j=minorig, nl
237              do il=1, ncum
238                 if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
239                      .and. j >= (icb(il)-1) .and. j <= inb(il)) then
240                    asum(il, i)=asum(il, i)+ment(il, i, j)
241                    ment(il, i, j)=ment(il, i, j)*sig(il, j)
242                    bsum(il, i)=bsum(il, i)+ment(il, i, j)
243                 endif
244              enddo
245           end do
246    
247           do il=1, ncum
248              if (i >= icb(il).and.i <= inb(il).and.lwork(il)) then
249                 bsum(il, i)=amax1(bsum(il, i), 1.0e-16)
250                 bsum(il, i)=1.0/bsum(il, i)
251              endif
252         enddo         enddo
 197   continue  
253    
254        do il=1,ncum         do j=minorig, nl
255         if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il) &            do il=1, ncum
256             .and. csum(il,i).lt.m(il,i) ) then               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
257          nent(il,i)=0                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then
258          ment(il,i,i)=m(il,i)                  ment(il, i, j)=ment(il, i, j)*asum(il, i)*bsum(il, i)
259          qent(il,i,i)=rr(il,1)-ep(il,i)*clw(il,i)               endif
260          uent(il,i,i)=u(il,nk(il))            enddo
261          vent(il,i,i)=v(il,nk(il))         end do
262          elij(il,i,i)=clw(il,i)  
263  !MAF        sij(il,i,i)=1.0         do j=minorig, nl
264          sij(il,i,i)=0.0            do il=1, ncum
265         endif               if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
266        enddo ! il                    .and. j >= (icb(il)-1) .and. j <= inb(il)) then
267                    csum(il, i)=csum(il, i)+ment(il, i, j)
268  !      do j=1,ntra               endif
269  !       do il=1,ncum            enddo
270  !        if ( i.ge.icb(il) .and. i.le.inb(il) .and. lwork(il)         end do
271  !     :     .and. csum(il,i).lt.m(il,i) ) then  
272  !         traent(il,i,i,j)=tra(il,nk(il),j)         do il=1, ncum
273  !        endif            if (i >= icb(il) .and. i <= inb(il) .and. lwork(il) &
274  !       enddo                 .and. csum(il, i) < m(il, i)) then
275  !      enddo               nent(il, i)=0
276  789   continue               ment(il, i, i)=m(il, i)
277  !               qent(il, i, i)=rr(il, 1)-ep(il, i)*clw(il, i)
278  ! MAF: renormalisation de MENT               uent(il, i, i)=u(il, nk(il))
279        do jm=1,nd               vent(il, i, i)=v(il, nk(il))
280          do im=1,nd               elij(il, i, i)=clw(il, i)
281            do il=1,ncum               !MAF sij(il, i, i)=1.0
282            zm(il,im)=zm(il,im)+(1.-sij(il,im,jm))*ment(il,im,jm)               sij(il, i, i)=0.0
          end do  
         end do  
       end do  
 !  
       do jm=1,nd  
         do im=1,nd  
           do il=1,ncum  
           if(zm(il,im).ne.0.) then  
           ment(il,im,jm)=ment(il,im,jm)*m(il,im)/zm(il,im)  
283            endif            endif
284           end do         enddo ! il
285    
286        end DO
287    
288        ! MAF: renormalisation de MENT
289        do jm=1, nd
290           do im=1, nd
291              do il=1, ncum
292                 zm(il, im)=zm(il, im)+(1.-sij(il, im, jm))*ment(il, im, jm)
293              end do
294         end do         end do
295        end do      end do
296  !  
297        do jm=1,nd      do jm=1, nd
298         do im=1,nd         do im=1, nd
299          do 999 il=1,ncum            do il=1, ncum
300           qents(il,im,jm)=qent(il,im,jm)               if(zm(il, im) /= 0.) then
301           ments(il,im,jm)=ment(il,im,jm)                  ment(il, im, jm)=ment(il, im, jm)*m(il, im)/zm(il, im)
302  999     continue               endif
303              end do
304           end do
305        end do
306    
307        do jm=1, nd
308           do im=1, nd
309              do il=1, ncum
310                 qents(il, im, jm)=qent(il, im, jm)
311                 ments(il, im, jm)=ment(il, im, jm)
312              end do
313         enddo         enddo
314        enddo      enddo
315    
316      end SUBROUTINE cv30_mixing
317    
318        return  end module cv30_mixing_m
       end  

Legend:
Removed from v.47  
changed lines
  Added in v.187

  ViewVC Help
Powered by ViewVC 1.1.21