File: arbor.f

package info (click to toggle)
scilab 2.2-4
  • links: PTS
  • area: non-free
  • in suites: hamm
  • size: 31,472 kB
  • ctags: 21,963
  • sloc: fortran: 110,983; ansic: 89,717; makefile: 3,016; sh: 1,892; csh: 150; cpp: 101
file content (133 lines) | stat: -rw-r--r-- 3,246 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
      subroutine arbor(alphi,beta,f,g,i0,ind,la1,lp1,ls1,m,
     &     n,nndim,pred,w,z,zsom)
      implicit integer (a-z)
      dimension la1(m),lp1(*),ls1(m),pred(nndim),
     &     f(nndim),g(nndim)
      doubleprecision w(m),z(nndim),zsom(nndim)
      dimension alphi(nndim),beta(nndim),ind(nndim)
      doubleprecision wr,infr
      if (i0 .lt. 0 .or. i0 .gt. n) then
         call erro('bad internal node number')
         return
      endif
      infr=10.e6
      do 10 i=1,2*n
         pred(i)=0
         z(i)=infr
         zsom(i)=0
         f(i)=0
         g(i)=0
         alphi(i)=i
         beta(i)=i
 10   continue
      nnew=1
      ntot=n
 100  continue
      do 110 i=1,n
         do 110 ll=lp1(i),lp1(i+1)-1
            u=la1(ll)
            j=ls1(ll)
            if(j.eq.i0) goto 110
            ii=beta(i)
            jj=beta(j)
            if(ii.eq.jj) goto 110
            if(jj.lt.nnew) goto 110
            wr=w(u)-zsom(j)
            if(wr.ge.z(jj)) goto 110
            z(jj)=wr
            pred(jj)=ii
            f(jj)=i
            g(jj)=j
 110     continue
         do 210 j=1,ntot
            ind(j)=0
 210     continue
         k=ntot
         kc=0
         do 240 j=1,ntot
            if(j.eq.i0) goto 240
            if(ind(j).ne.0) goto 240
            if(j.ne.beta(j)) goto 240
            kc=kc+1
            ind(j)=kc
            jc=j
 215        continue
            i=pred(jc)
            if(i.eq.0) then
               do 1234,ii=1,n
                  pred(ii)=0
 1234          continue
               return
            endif
            if(i.eq.i0)goto 240
            i=beta(i)
            if(ind(i).eq.kc) goto 220
            if(ind(i).ne.0)goto 240
            ind(i)=kc  
            jc=i
            goto 215
 220        continue
            k=k+1
            alphi(k)=k
            beta(k)=k
            ind(k)=kc
            ideb=i
 230        continue
            i=pred(i) 
            i=beta(i)
            alphi(i)=k
            if(i.ne.ideb) goto 230
 240     continue
         if(k.eq.ntot) goto 600
         nnew=ntot + 1
         ntot=k
         do 310 j=1,ntot
            jj=beta(j)
            beta(j)=alphi(jj)
 310     continue
         do 410 i=1,ntot
            zsom(i)=infr
 410     continue
         do 470 i=1,n
            if(i.eq.i0)goto 470
            zsom(i)=z(i)
            ii=i
 420        i1=alphi(ii)
            if(alphi(i1).eq.i1) goto 435
            if(zsom(i1).lt.infr) goto 430
            zsom(i1)=zsom(ii)+z(i1)
            ii=i1
            goto 420
 430        zsom(i)=zsom(i)+zsom(i1)
            goto 440
 435        zsom(i)=zsom(ii)
 440        continue
            ii=i
            ilast=i1
 450        i1=alphi(ii)
            if(i1.eq.ilast) goto 470
            zsom(i1)=zsom(ii)-z(ii)
            ii=i1
            goto 450
 470     continue
         goto 100
 600     continue
         k=ntot
         if(k.le.n) goto 999
 610     continue
         j=g(k)
         j1=j
 620     continue
         pred(j1)=f(k)
         g(j1)=g(k)
         f(j1)=f(k)
         j2=alphi(j1)
         if(j2.eq.j1) goto 630
         j1=j2
         goto 620
 630     continue
         k=k-1
         if(k.le.n) goto 999
         goto 610
 999     continue
         end