500 real,
intent (in) :: x1
501 real,
intent (in) :: x2
502 real,
intent (in) :: xacc
503 integer,
intent (in) :: iprint
504 integer,
intent (out) :: ierr
513 parameter(maxit = 20)
536 inquire(unit=luprint,opened=lopen)
539 write(*,
'(a,i4)')
'Z_ROOT2: invalid unit number:',iprint
557 if((fl > 0. .and. fh < 0.) .or. (fl < 0. .and. fh > 0.))
then
565 s = sqrt(fm**2-fl*fh)
566 if(s == 0.)
goto 9000
567 xnew = xm+(xm-xl)*(sign(1.,fl-fh)*fm/s)
572 if (abs(xnew-zriddr) <= xacc)
then
579 if (fnew == 0.)
goto 9000
581 if(sign(fm,fnew) /= fm)
then
586 elseif(sign(fl,fnew) /= fl)
then
589 elseif(sign(fh,fnew) /= fh)
then
597 if(abs(xh-xl) <= xacc)
goto 9000
599 if(luprint > 0)
write(luprint,
'(a,i4,5e14.6)') &
600 &
'Z_ROOT2: iter,x1,x2,|x1-x2|,xacc,z:', iter,xl,xh,abs(xl-xh),xacc,fnew
604 if(luprint > 0)
write(luprint,
'(a)')
'Z_ROOT2: -> ierr=2'
606 else if (fl == 0.)
then
608 else if (fh == 0.)
then
620 if(luprint > 0)
write(luprint,
'(a,2i3,5e13.5)') &
621 &
'Z_ROOT2: ierr,iter,xl,xh,acc,x0,z0:', ierr,iter,xl,xh,xacc,
z_root2,func(
z_root2)