Free cookie consent management tool by TermsFeed Policy Generator

source: branches/MathNetNumerics-Exploration-2789/HeuristicLab.Algorithms.DataAnalysis.Experimental/sbart/sbart.f @ 15457

Last change on this file since 15457 was 15457, checked in by gkronber, 7 years ago

#2789 added Finbarr O'Sullivan smoothing spline code

File size: 15.3 KB
Line 
1***  For comments, see sbart.r, written by Finbarr O'Sullivan
2***  ratfor output of 14 May 1987 version
3***  with bug fix in setreg, 27 Sep 1990
4      module modsbart
5      contains
6      subroutine sbart(xs,ys,ws,n,knot,nk,coef,sz,lev,crit,icrit,spar,
7     &ispar,lspar,uspar,tol,isetup,xwy,hs0,hs1,hs2,hs3,sg0,sg1,sg2,sg3,
8     &abd,p1ip,p2ip,ld4,ldnk,ier) bind(c, name='sbart')
9      USE ISO_C_BINDING
10      !DEC$ ATTRIBUTES DLLEXPORT::sbart
11      real xs(n),ys(n),ws(n),knot(nk+4),coef(nk),sz(n),lev(n),crit,spar,
12     &lspar,uspar,tol,xwy(nk),hs0(nk),hs1(nk),hs2(nk),hs3(nk), sg0(nk),
13     &sg1(nk),sg2(nk),sg3(nk),abd(ld4,nk),p1ip(ld4,nk),p2ip(ldnk,nk)
14      integer n,nk,isetup,icrit,ispar,ld4,ldnk,ier
15      realt1,t2,ratio, a,b,c,d,e,eps,xm,p,q,r,tol1,tol2,u,v,w, fu,fv,fw,
16     &fx,x,ax,bx
17      integer i
18      if(.not.(isetup.eq.0))goto 23000
19      call sgram(sg0,sg1,sg2,sg3,knot,nk)
20      call stxwx(xs,ys,ws,n,knot,nk,xwy,hs0,hs1,hs2,hs3)
21      t1=0.
22      t2=0.
23      do 23002 i=3,nk-3
24      t1 = t1 + hs0(i)
2523002 continue
26      do 23004 i=3,nk-3
27      t2 = t2 + sg0(i)
2823004 continue
29      ratio = t1/t2
30      isetup = 1
3123000 continue
32      if(.not.(ispar.eq.1))goto 23006
33      call sslvrg(xs,ys,ws,n,knot,nk,coef,sz,lev,crit,icrit,spar,ratio,
34     &xwy,hs0,hs1,hs2,hs3,sg0,sg1,sg2,sg3,abd,p1ip,p2ip,ld4,ldnk,ier)
35      return
3623006 continue
37      ax=lspar
38      bx=uspar
39      c = 0.5*(3. - sqrt(5.0))
40      eps = 1.00
4110    eps = eps/2.00
42      tol1 = 1.0 + eps
43      if(.not.(tol1 .gt. 1.00))goto 23008
44      go to 10
4523008 continue
46      eps = sqrt(eps)
47      a = ax
48      b = bx
49      v = a + c*(b - a)
50      w = v
51      x = v
52      e = 0.0
53      spar = x
54      call sslvrg(xs,ys,ws,n,knot,nk,coef,sz,lev,crit,icrit,spar,ratio,
55     &xwy,hs0,hs1,hs2,hs3,sg0,sg1,sg2,sg3,abd,p1ip,p2ip,ld4,ldnk,ier)
56      fx = crit
57      fv = fx
58      fw = fx
5920    xm = 0.5*(a + b)
60      tol1 = eps*abs(x) + tol/3.0
61      tol2 = 2.0*tol1
62      if(.not.(abs(x - xm) .le. (tol2 - 0.5*(b - a))))goto 23010
63      go to 90
6423010 continue
65      if(.not.(abs(e) .le. tol1))goto 23012
66      go to 40
6723012 continue
68      r = (x - w)*(fx - fv)
69      q = (x - v)*(fx - fw)
70      p = (x - v)*q - (x - w)*r
71      q = 2.00*(q - r)
72      if(.not.(q .gt. 0.0))goto 23014
73      p = -p
7423014 continue
75      q = abs(q)
76      r = e
77      e = d
7830    if(.not.(abs(p) .ge. abs(0.5*q*r)))goto 23016
79      go to 40
8023016 continue
81      if(.not.(p .le. q*(a - x)))goto 23018
82      go to 40
8323018 continue
84      if(.not.(p .ge. q*(b - x)))goto 23020
85      go to 40
8623020 continue
87      d = p/q
88      u = x + d
89      if(.not.((u - a) .lt. tol2))goto 23022
90      d = sign(tol1, xm - x)
9123022 continue
92      if(.not.((b - u) .lt. tol2))goto 23024
93      d = sign(tol1, xm - x)
9423024 continue
95      go to 50
9640    if(.not.(x .ge. xm))goto 23026
97      e = a - x
9823026 continue
99      if(.not.(x .lt. xm))goto 23028
100      e = b - x
10123028 continue
102      d = c*e
10350    if(.not.(abs(d) .ge. tol1))goto 23030
104      u = x + d
10523030 continue
106      if(.not.(abs(d) .lt. tol1))goto 23032
107      u = x + sign(tol1, d)
10823032 continue
109      spar = u
110      call sslvrg(xs,ys,ws,n,knot,nk,coef,sz,lev,crit,icrit,spar,ratio,
111     &xwy,hs0,hs1,hs2,hs3,sg0,sg1,sg2,sg3,abd,p1ip,p2ip,ld4,ldnk,ier)
112      fu = crit
113      if(.not.(fu .gt. fx))goto 23034
114      go to 60
11523034 continue
116      if(.not.(u .ge. x))goto 23036
117      a = x
11823036 continue
119      if(.not.(u .lt. x))goto 23038
120      b = x
12123038 continue
122      v = w
123      fv = fw
124      w = x
125      fw = fx
126      x = u
127      fx = fu
128      go to 20
12960    if(.not.(u .lt. x))goto 23040
130      a = u
13123040 continue
132      if(.not.(u .ge. x))goto 23042
133      b = u
13423042 continue
135      if(.not.(fu .le. fw))goto 23044
136      go to 70
13723044 continue
138      if(.not.(w .eq. x))goto 23046
139      go to 70
14023046 continue
141      if(.not.(fu .le. fv))goto 23048
142      go to 80
14323048 continue
144      if(.not.(v .eq. x))goto 23050
145      go to 80
14623050 continue
147      if(.not.(v .eq. w))goto 23052
148      go to 80
14923052 continue
150      go to 20
15170    v = w
152      fv = fw
153      w = u
154      fw = fu
155      go to 20
15680    v = u
157      fv = fu
158      go to 20
15990    continue
160      spar = x
161      crit = fx
162      return
16323007 continue
164      return
165      end
166      subroutine sgram(sg0,sg1,sg2,sg3,tb,nb)
167      real sg0(nb),sg1(nb),sg2(nb),sg3(nb),tb(nb+4),vnikx(4,3),work(16),
168     &yw1(4),yw2(4),wpt
169      integer nb,ileft,ilo,mflag,i,ii,jj
170      do 23054 i=1,nb
171      sg0(i)=0.
172      sg1(i)=0.
173      sg2(i)=0.
174      sg3(i)=0.
17523054 continue
176      ilo = 1
177      do 23056 i=1,nb
178      call interv(tb(1),(nb+1),tb(i),ileft,mflag)
179      call bsplvd (tb,4,tb(i),ileft,work,vnikx,3)
180      do 23058 ii=1,4
181      yw1(ii) = vnikx(ii,3)
18223058 continue
183      call bsplvd (tb,4,tb(i+1),ileft,work,vnikx,3)
184      do 23060 ii=1,4
185      yw2(ii) = vnikx(ii,3) - yw1(ii)
18623060 continue
187      wpt = tb(i+1) - tb(i)
188      if(.not.(ileft.ge.4))goto 23062
189      do 23064 ii=1,4
190      jj=ii
191      sg0(ileft-4+ii) = sg0(ileft-4+ii) +wpt* (yw1(ii)*yw1(jj) + (yw2(
192     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
193      jj=ii+1
194      if(.not.(jj.le.4))goto 23066
195      sg1(ileft+ii-4) = sg1(ileft+ii-4) +wpt* (yw1(ii)*yw1(jj) + (yw2(
196     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
19723066 continue
198      jj=ii+2
199      if(.not.(jj.le.4))goto 23068
200      sg2(ileft+ii-4) = sg2(ileft+ii-4) +wpt* (yw1(ii)*yw1(jj) + (yw2(
201     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
20223068 continue
203      jj=ii+3
204      if(.not.(jj.le.4))goto 23070
205      sg3(ileft+ii-4) = sg3(ileft+ii-4) +wpt* (yw1(ii)*yw1(jj) + (yw2(
206     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
20723070 continue
20823064 continue
209      goto 23063
21023062 continue
211      if(.not.(ileft.eq.3))goto 23072
212      do 23074 ii=1,3
213      jj=ii
214      sg0(ileft-3+ii) = sg0(ileft-3+ii) +wpt* (yw1(ii)*yw1(jj) + (yw2(
215     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
216      jj=ii+1
217      if(.not.(jj.le.3))goto 23076
218      sg1(ileft+ii-3) = sg1(ileft+ii-3) +wpt* (yw1(ii)*yw1(jj) + (yw2(
219     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
22023076 continue
221      jj=ii+2
222      if(.not.(jj.le.3))goto 23078
223      sg2(ileft+ii-3) = sg2(ileft+ii-3) +wpt* (yw1(ii)*yw1(jj) + (yw2(
224     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
22523078 continue
22623074 continue
227      goto 23073
22823072 continue
229      if(.not.(ileft.eq.2))goto 23080
230      do 23082 ii=1,2
231      jj=ii
232      sg0(ileft-2+ii) = sg0(ileft-2+ii) +wpt* (yw1(ii)*yw1(jj) + (yw2(
233     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
234      jj=ii+1
235      if(.not.(jj.le.2))goto 23084
236      sg1(ileft+ii-2) = sg1(ileft+ii-2) +wpt* (yw1(ii)*yw1(jj) + (yw2(
237     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
23823084 continue
23923082 continue
240      goto 23081
24123080 continue
242      if(.not.(ileft.eq.1))goto 23086
243      do 23088 ii=1,1
244      jj=ii
245      sg0(ileft-1+ii) = sg0(ileft-1+ii) +wpt* (yw1(ii)*yw1(jj) + (yw2(
246     &ii)*yw1(jj) + yw2(jj)*yw1(ii))*.50 +yw2(ii)*yw2(jj)*.3330 )
24723088 continue
24823086 continue
24923081 continue
25023073 continue
25123063 continue
25223056 continue
253      return
254      end
255      subroutine sinerp(abd,ld4,nk,p1ip,p2ip,ldnk,flag)
256      realabd(ld4,nk),p1ip(ld4,nk),p2ip(ldnk,nk),wjm3(3),wjm2(2),wjm1(1)
257     &,c0,c1,c2,c3
258      integerflag,ld4,nk,ldnk,i,j,k
259      wjm3(1)=0.
260      wjm3(2)=0.
261      wjm3(1)=0.
262      wjm2(1)=0.
263      wjm2(2)=0.
264      wjm1(1)=0.
265      do 23090 i=1,nk
266      j=nk-i+1
267      c0 = 1./abd(4,j)
268      if(.not.(j.le.nk-3))goto 23092
269      c1 = abd(1,j+3)*c0
270      c2 = abd(2,j+2)*c0
271      c3 = abd(3,j+1)*c0
272      goto 23093
27323092 continue
274      if(.not.(j.eq.nk-2))goto 23094
275      c1 = 0.
276      c2 = abd(2,j+2)*c0
277      c3 = abd(3,j+1)*c0
278      goto 23095
27923094 continue
280      if(.not.(j.eq.nk-1))goto 23096
281      c1 = 0.
282      c2 = 0.
283      c3 = abd(3,j+1)*c0
284      goto 23097
28523096 continue
286      if(.not.(j.eq.nk))goto 23098
287      c1 = 0.
288      c2 = 0.
289      c3 = 0.
29023098 continue
29123097 continue
29223095 continue
29323093 continue
294      p1ip(1,j) = 0. - (c1*wjm3(1)+c2*wjm3(2)+c3*wjm3(3))
295      p1ip(2,j) = 0. - (c1*wjm3(2)+c2*wjm2(1)+c3*wjm2(2))
296      p1ip(3,j) = 0. - (c1*wjm3(3)+c2*wjm2(2)+c3*wjm1(1))
297      p1ip(4,j) = c0**2 +c1**2*wjm3(1)+2.*c1*c2*wjm3(2)+2.*c1*c3*wjm3(3)
298     & +c2**2*wjm2(1)+2.*c2*c3*wjm2(2) +c3**2*wjm1(1)
299      wjm3(1)=wjm2(1)
300      wjm3(2)=wjm2(2)
301      wjm3(3)=p1ip(2,j)
302      wjm2(1)=wjm1(1)
303      wjm2(2)=p1ip(3,j)
304      wjm1(1)=p1ip(4,j)
30523090 continue
306      if(.not.(flag.eq.0))goto 23100
307      return
30823100 continue
309      do 23102 i=1,nk
310      j=nk-i+1
311      k=1
31223104 if(.not.(k.le.4.and.j+k-1.le.nk))goto 23106
313      p2ip(j,j+k-1) = p1ip(5-k,j)
314      k=k+1
315      goto 23104
31623106 continue
31723102 continue
318      do 23107 i=1,nk
319      j=nk-i+1
320      k=j-4
32123109 if(.not.(k.ge.1))goto 23111
322      c0 = 1./abd(4,k)
323      c1 = abd(1,k+3)*c0
324      c2 = abd(2,k+2)*c0
325      c3 = abd(3,k+1)*c0
326      p2ip(k,j) = 0. - ( c1*p2ip(k+3,j) +c2*p2ip(k+2,j) +c3*p2ip(k+1,j)
327     &)
328      k=k-1
329      goto 23109
33023111 continue
33123107 continue
332      return
33323101 continue
334      end
335      subroutine sslvrg(x,y,w,n,knot,nk,coef,sz,lev,crit,icrit,spar,
336     &ratio,xwy,hs0,hs1,hs2,hs3,sg0,sg1,sg2,sg3,abd,p1ip,p2ip,ld4,ldnk,
337     &info)
338      real x(n),y(n),w(n),knot(nk+4),coef(nk),sz(n),lev(n),crit,ratio,
339     &spar,xwy(nk),hs0(nk),hs1(nk),hs2(nk),hs3(nk), sg0(nk),sg1(nk),sg2(
340     &nk),sg3(nk),abd(ld4,nk),p1ip(ld4,nk),p2ip(ldnk,nk),lambda,b0,b1,
341     &b2,b3,eps,vnikx(4,1),work(16),xv,bvalue,rss,df
342      integer n,nk,icrit,ld4,ldnk,i,icoef,ileft,ilo,info,j,mflag
343      ilo = 1
344      eps = .1e-10
345      lambda = ratio*16.**(-2. + spar*(6.))
346      do 23112 i=1,nk
347      coef(i) = xwy(i)
34823112 continue
349      do 23114 i=1,nk
350      abd(4,i) = hs0(i)+lambda*sg0(i)
35123114 continue
352      do 23116 i=1,(nk-1)
353      abd(3,i+1) = hs1(i)+lambda*sg1(i)
35423116 continue
355      do 23118 i=1,(nk-2)
356      abd(2,i+2) = hs2(i)+lambda*sg2(i)
35723118 continue
358      do 23120 i=1,(nk-3)
359      abd(1,i+3) = hs3(i)+lambda*sg3(i)
36023120 continue
361      call spbfa(abd,ld4,nk,3,info)
362      if(.not.(info.ne.0))goto 23122
363      return
36423122 continue
365      call spbsl(abd,ld4,nk,3,coef)
366      icoef = 1
367      do 23124 i=1,n
368      xv = x(i)
369      sz(i) = bvalue(knot,coef,nk,4,xv,0)
37023124 continue
371      if(.not.(icrit.eq.0))goto 23126
372      return
37323126 continue
374      call sinerp(abd,ld4,nk,p1ip,p2ip,ldnk,0)
375      do 23128 i=1,n
376      xv = x(i)
377      call interv(knot(1),(nk+1),xv,ileft,mflag)
378      if(.not.(mflag.eq.-1))goto 23130
379      ileft = 4
380      xv = knot(4)+eps
38123130 continue
382      if(.not.(mflag.eq.1))goto 23132
383      ileft = nk
384      xv = knot(nk+1)-eps
38523132 continue
386      j=ileft-3
387      call bsplvd(knot,4,xv,ileft,work,vnikx,1)
388      b0=vnikx(1,1)
389      b1=vnikx(2,1)
390      b2=vnikx(3,1)
391      b3=vnikx(4,1)
392      lev(i) = (p1ip(4,j)*b0**2 + 2.*p1ip(3,j)*b0*b1 +2.*p1ip(2,j)*b0*
393     &b2 + 2.*p1ip(1,j)*b0*b3 +p1ip(4,j+1)*b1**2 + 2.*p1ip(3,j+1)*b1*b2
394     &+2.*p1ip(2,j+1)*b1*b3 +p1ip(4,j+2)*b2**2 + 2.*p1ip(3,j+2)*b2*b3 +
395     &p1ip(4,j+3)*b3**2 )*w(i)**2
39623128 continue
397      if(.not.(icrit.eq.1))goto 23134
398      rss = 0.
399      df = 0.
400      do 23136 i=1,n
401      rss = rss + ((y(i)-sz(i))*w(i))**2
40223136 continue
403      do 23138 i=1,n
404      df = df + 1.-lev(i)
40523138 continue
406      crit = (rss/n)/((df/n)**2)
407      goto 23135
40823134 continue
409      crit = 0.
410      do 23140 i=1,n
411      crit = crit +(((y(i)-sz(i))*w(i))/(1-lev(i)))**2
41223140 continue
41323135 continue
414      return
41523127 continue
416      end
417      subroutine stxwx(x,z,w,k,xknot,n,y,hs0,hs1,hs2,hs3)
418      real z(k),w(k),x(k),xknot(n+4),y(n),hs0(n),hs1(n),hs2(n),hs3(n),
419     &eps,vnikx(4,1),work(16)
420      integer k,n,j,i,ilo,ileft,mflag
421      do 23142 i=1,n
422      y(i)=0.
423      hs0(i)=0.
424      hs1(i)=0.
425      hs2(i)=0.
426      hs3(i)=0.
42723142 continue
428      ilo=1
429      eps = .1e-9
430      do 23144 i=1,k
431      call interv(xknot(1),(n+1),x(i),ileft,mflag)
432      if(.not.(mflag.eq.-1))goto 23146
433      write(6,'("Error in hess ",i2)')mflag
434      stop
43523146 continue
436      if(.not.(mflag.eq. 1))goto 23148
437      if(.not.(x(i).le.(xknot(ileft)+eps)))goto 23150
438      ileft=ileft-1
439      goto 23151
44023150 continue
441      write(6,'("Error in hess ",i2)')mflag
442      stop
44323151 continue
44423148 continue
445      call bsplvd (xknot,4,x(i),ileft,work,vnikx,1)
446      j= ileft-4+1
447      y(j) = y(j)+w(i)**2*z(i)*vnikx(1,1)
448      hs0(j)=hs0(j)+w(i)**2*vnikx(1,1)**2
449      hs1(j)=hs1(j)+w(i)**2*vnikx(1,1)*vnikx(2,1)
450      hs2(j)=hs2(j)+w(i)**2*vnikx(1,1)*vnikx(3,1)
451      hs3(j)=hs3(j)+w(i)**2*vnikx(1,1)*vnikx(4,1)
452      j= ileft-4+2
453      y(j) = y(j)+w(i)**2*z(i)*vnikx(2,1)
454      hs0(j)=hs0(j)+w(i)**2*vnikx(2,1)**2
455      hs1(j)=hs1(j)+w(i)**2*vnikx(2,1)*vnikx(3,1)
456      hs2(j)=hs2(j)+w(i)**2*vnikx(2,1)*vnikx(4,1)
457      j= ileft-4+3
458      y(j) = y(j)+w(i)**2*z(i)*vnikx(3,1)
459      hs0(j)=hs0(j)+w(i)**2*vnikx(3,1)**2
460      hs1(j)=hs1(j)+w(i)**2*vnikx(3,1)*vnikx(4,1)
461      j= ileft-4+4
462      y(j) = y(j)+w(i)**2*z(i)*vnikx(4,1)
463      hs0(j)=hs0(j)+w(i)**2*vnikx(4,1)**2
46423144 continue
465      return
466      end
467      subroutine sknotl(x,n,knot,k) bind(C,name='sknotl')
468      USE ISO_C_BINDING
469      !DEC$ ATTRIBUTES DLLEXPORT::sknotl
470      real x(n),knot(n+6),a1,a2,a3,a4
471      integer n,k,ndk,j
472      a1 = log(50.)/log(2.)
473      a2 = log(100.)/log(2.)
474      a3 = log(140.)/log(2.)
475      a4 = log(200.)/log(2.)
476      if(.not.(n.lt.50))goto 23152
477      ndk = n
478      goto 23153
47923152 continue
480      if(.not.(n.ge.50 .and. n.lt.200))goto 23154
481      ndk = 2.**(a1+(a2-a1)*(n-50.)/150.)
482      goto 23155
48323154 continue
484      if(.not.(n.ge.200 .and. n.lt.800))goto 23156
485      ndk = 2.**(a2+(a3-a2)*(n-200.)/600.)
486      goto 23157
48723156 continue
488      if(.not.(n.ge.800 .and. n.lt.3200))goto 23158
489      ndk = 2.**(a3+(a4-a3)*(n-800.)/2400.)
490      goto 23159
49123158 continue
492      if(.not.(n.ge.3200))goto 23160
493      ndk = 200. + (n-3200)**.2
49423160 continue
49523159 continue
49623157 continue
49723155 continue
49823153 continue
499      k = ndk + 6
500      do 23162 j=1,3
501      knot(j) = x(1)
50223162 continue
503      do 23164 j=1,ndk
504      knot(j+3) = x( 1 + (j-1)*(n-1)/(ndk-1) )
50523164 continue
506      do 23166 j=1,3
507      knot(ndk+3+j) = x(n)
50823166 continue
509      return
510      end
511      subroutine setreg(x,y,w,n,xw,nx,min,range,knot,nk)
512     . bind(C,name='setreg')
513      USE ISO_C_BINDING
514      !DEC$ ATTRIBUTES DLLEXPORT::setreg
515      real x(n),y(n),w(n),xw(n),min,range,knot(n+6)
516      integer n,nk,nx
517      real eps
518      integer ycnt,i,k
519      call scopy(n,x,1,xw,1)
520C      call sortpr(x,n,w)
521C      call sortpr(xw,n,y)
522      call ssort(x,w,n,2)
523      call ssort(xw,y,n,2)
524      range = x(n)-x(1)
525      min = x(1)
526      eps = .1e-9
527      do 23168 i=1,n
528      x(i) = (x(i)-min)/range
52923168 continue
530      call scopy(n,x,1,xw,1)
531      nx = 1
532      x(nx) = x(1)
533      w(nx) = w(1)
534      y(nx) = y(1)*w(1)
535      i=2
53623170 if(.not.(i.le.n))goto 23172
537      if(.not.(xw(i).gt.x(nx)+eps))goto 23173
538      if(.not.(w(nx).gt.0.0))goto 23175
539      y(nx) = y(nx)/w(nx)
54023175 continue
541      nx = nx + 1
542      x(nx) = x(i)
543      y(nx) = y(i)*w(i)
544      w(nx) = w(i)
545      goto 23174
54623173 continue
547      y(nx) = y(nx)+y(i)*w(i)
548      w(nx) = w(nx) + w(i)
54923174 continue
550      i=i+1
551      goto 23170
55223172 continue
553      if(.not.(w(nx).gt.0.0))goto 23177
554      y(nx) = y(nx)/w(nx)
55523177 continue
556      i=1
55723179 if(.not.(i.le.nx))goto 23181
558      if(.not.(w(i).gt.0))goto 23182
559      w(i)=sqrt(w(i))
56023182 continue
561      i=i+1
562      goto 23179
56323181 continue
564      call sknotl(x,nx,knot,k)
565      nk = k-4
566      return
567      end
568      end
Note: See TracBrowser for help on using the repository browser.