File: frang.f

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (80 lines) | stat: -rw-r--r-- 1,804 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
      subroutine frang(i0,lp1,ls1,m,n,pile,rang1,rang)
      implicit integer (a-z)
      dimension lp1(*),ls1(m),rang(n),pile(n),rang1(n)
      i0=0
      do 10 i=1,n
         rang(i)=0
         pile(i)=0
 10   continue
      do 30 i=1,n
         if(lp1(i).eq.lp1(i+1))goto 30
         do 20 ll=lp1(i),lp1(i+1)-1
            j=ls1(ll)
            rang(j)=rang(j)-1
 20      continue
 30   continue
      k=0
      newtop=0
      do 40 i=1,n
         if(rang(i).lt.0)goto 40
         newtop=newtop+1
         pile(newtop)=i
 40   continue
      oldtop=newtop
      bottom=0
 100  continue
      if(bottom.eq.oldtop)goto 200
      bottom=bottom+1
      i=pile(bottom)
      rang(i)=k
      if(lp1(i).eq.lp1(i+1))goto 100
      do 130 ll=lp1(i),lp1(i+1)-1
         j=ls1(ll)
         rang(j)=rang(j)+1
         if(rang(j).ne.0)goto 130
         newtop=newtop+1
         pile(newtop)=j
 130  continue
      goto 100
 200  continue
      if(bottom.eq.n)goto 999
      if(oldtop.ne.newtop)goto 210
      goto 300
 210  continue
      k=k+1
      oldtop=newtop
      goto 100
 300  continue
      do 309 i=1,n
         rang1(i)=rang(i)
 309  continue
      do 310 i0=1,n
         if(rang1(i0).ge.0) goto 310
 315     continue
         do 320 i=1,n
            pile(i)=0
            rang(i)=0
 320     continue
         top=0
         bottom=0
         i=i0
 335     continue
         if(lp1(i).eq.lp1(i+1))goto 345
         do 340 ll=lp1(i),lp1(i+1)-1
            j=ls1(ll)
            if(rang(j).gt.0)goto 340
            rang(j)=i
            top=top+1
            pile(top)=j
 340     continue
         if(rang(i0).ne.0)goto 350
 345     continue
         bottom=bottom + 1
         if (bottom.gt.top) goto 310
         i=pile(bottom)
         goto 335
 310  continue
 350  continue
 999  return
      end