Blame | Last modification | View Log | Download | RSS feed
subroutine bsrl(s, center,hwidth, maxvls,funcls,* errmin,errest,basest,divaxo,divaxn)implicit noneC-- Arguments:integer sdouble precision center(s), hwidth(s)integer maxvls,funcls, divaxo,divaxndouble precision errmin, errest, basestCEXTERNAL adphlpdouble precision adphlpC-- Local Variables:double precision intvls(20), z(20), fulsms(200), weghts(200)integer intcls, i, mindeg, maxdeg, maxord, minordinteger ifaildouble precision zero, one, two, ten, dif, errorm,* sum0, sum1, sum2, difmax, x1, x2data zero/0d0/, one/1d0/, two/2d0/, ten/10d0/maxdeg = 12mindeg = 4minord = 0do 10 maxord = mindeg,maxdegcall symrl(s, center, hwidth, minord, maxord, intvls,* intcls, 200, weghts, fulsms, ifail)if (ifail.eq.2) goto 20errest = dabs(intvls(maxord) -intvls(maxord-1))errorm = dabs(intvls(maxord-1)-intvls(maxord-2))if (errest.ne.zero)& errest = errest*& dmax1(one/ten,errest/dmax1(errest/two,errorm))if (errorm.le. 5.*errest) goto 20if (2*intcls.gt.maxvls) goto 20if (errest.lt.errmin) goto 2010 continue20 difmax = -1x1 = one/two**2x2 = 3.*x1do 30 i = 1,sz(i) = center(i)30 continuecmmmsum0 = adphlp(s,z)do 40 i = 1,sz(i) = center(i) - x1*hwidth(i)cmmmsum1 = adphlp(s,z)z(i) = center(i) + x1*hwidth(i)sum1 = sum1 + adphlp(s,z)z(i) = center(i) - x2*hwidth(i)sum2 = adphlp(s,z)z(i) = center(i) + x2*hwidth(i)sum2 = sum2 + adphlp(s,z)z(i) = center(i)dif = dabs((sum1-two*sum0) - (x1/x2)**2*(sum2-two*sum0))if (dif.ge.difmax) thendifmax = difdivaxn = iendif40 continueif (sum0.eq.sum0+difmax/two) divaxn = mod(divaxo,s) + 1basest = intvls(minord)funcls = intcls + 4*sreturnend