1 subroutine mnbrak(ax,bx,cx,fa,fb,fc,func,iflag,bound)
6 double precision ax,bx,cx,fa,fb,fc,func,bound
10 double precision dum,fu,plim,r,q,u,ulim
12 double precision GLIMIT,GOLD,TINY
13 parameter(gold=1.618034d0,glimit=100.0d0,tiny=1.0d-20)
18 if (iflag.lt.0)
return
21 if (iflag.lt.0)
return
33 plim=bx+sign(bound,bx-ax)
35 plim=ax+sign(bound,bx-ax)
43 if (iflag.lt.0)
return
56 if ((cx-ax)*(plim-cx).le.0.)
then
66 u=bx-((bx-cx)*q-(bx-ax)*r)/(2.*sign(max(abs(q-r),tiny),q-r))
72 ulim=bx+glimit*(cx-bx)
73 if ((ulim-ax)*(plim-ulim).lt.0.) ulim=plim
78 if((bx-u)*(u-cx).gt.0.)
then
80 if (iflag.lt.0)
return
106 if (iflag.lt.0)
return
111 else if((cx-u)*(u-ulim).gt.0.)
then
113 if (iflag.lt.0)
return
125 if (iflag.lt.0)
return
131 else if((u-ulim)*(ulim-cx).ge.0.)
then
134 if (iflag.lt.0)
return
141 if ((u-ulim)*(ulim-cx).ge.0.) u=ulim
143 if (iflag.lt.0)
return
subroutine mnbrak(ax, bx, cx, fa, fb, fc, func, iflag, bound)