File: floqua.f

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (54 lines) | stat: -rw-r--r-- 1,502 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
      subroutine floqua(b,bprim,c,cprim,eps,ex,la2,lp2,ma,
     &     mm,n,or,phibar,phir,pile,piv,
     &     predw,sufval,type,waqc,flag)
      implicit integer (a-z)
      dimension lp2(*),la2(mm),or(ma),ex(ma)
      dimension b(ma),c(ma),bprim(ma),cprim(ma)
      dimension predw(n),type(ma),pile(n)
      doubleprecision piv(n),sufval(n),ref,waqc(ma),phir(ma),delta,eps
      doubleprecision phibar(ma)
      precis=nint((log(eps)/log(2.))+.5)
      cmax=0
      flag=1
      do 50 u=1,ma
         if(iabs(b(u)).gt.cmax)cmax=iabs(b(u))
         if(iabs(c(u)).gt.cmax)cmax=iabs(c(u))
 50   continue
      ref=(alog(float(cmax))/alog(2.))+.5
      pbar=nint(ref)
      p=pbar
      do 60 u=1,ma
         phir(u)=0
 60   continue
      do 70 i=1,n
         piv(i)=0
 70   continue
 100  continue
      delta=2**float(p)
      do 120 u=1,ma
         if(p.gt.0)go to 118
         bprim(u)=b(u)
         cprim(u)=c(u)
         go to 120
 118     bb=b(u)/delta
         bprim(u)=bb*delta
         cc=c(u)/delta
         cc=delta*cc
         if(cc.lt.c(u))cc=cc+delta
         cprim(u)=cc
 120  continue
      call kiltq(b,c,coderr,delta,ex,la2,lp2,ma,mm,n,
     &     or,phibar,phir,pile,piv,predw,sufval,type,waqc)
      if (coderr .eq. 1) then
         call erro('internal dimension error')
         return
      endif
      if (coderr .eq. 2) then
         call out('no feasible solution')
         flag=0
         return
      endif
      if(p.eq.precis) return
      p=p-1
      go to 100
      end