anchor.diff:        else
           ip=2
         end if
  -      call dcopy(neq,b,ione,bres,ione)
  +      call dcopy(neq,bresid,ione,bwork,ione)
         if(.not.used) then
  -        call fill(d,zero,neq)
  +        call fill(dispvec,zero,neq)
         else
  -cdebug2        write(6,*) "Test in pcginv!"
  -        call dcopy(neq,dprev,ione,d,ione)
  +cdebug        write(6,*) "Test in pcginv!"
  +        call dcopy(neq,dprev,ione,dispvec,ione)
           etmp=zero
  -	tmp(1)=dnrm2(neq,d,ione)
  -	tmp(2)=dnrm2(neq,bres,ione)
  +	tmp(1)=dnrm2(neq,dispvec,ione)
  +	tmp(2)=dnrm2(neq,bwork,ione)
           tmp(3)=zero
           do i=1,neq
  -          en=d(i)*bres(i)
  +          en=dispvec(i)*bwork(i)
             tmp(3)=tmp(3)+en*en
  -          bres(i)=bres(i)-d(i)*alnz(i)
  +          bwork(i)=bwork(i)-dispvec(i)*alnz(i)
             do j=ja(i),ja(i+1)-1
  -            bres(i)=bres(i)-d(ja(j))*alnz(j)
  +            bwork(i)=bwork(i)-dispvec(ja(j))*alnz(j)
             end do
  -          en=d(i)*bres(i)
  +          en=dispvec(i)*bwork(i)
             etmp=etmp+en*en
           end do
  -	ftmp=dnrm2(neq,bres,ione)
  +	ftmp=dnrm2(neq,bwork,ione)
           etmp=sqrt(etmp)
           tmp(3)=sqrt(tmp(3))
           do i=1,3
  
positive.code: c
  c...  subroutine arguments
  c
        integer neq,nnz,ndtot,idout,kto,kw
        integer ja(nnz)
        double precision alnz(nnz),b(neq),d(neq),bres(neq),p(neq),z(neq)
        double precision dprev(neq)
        logical used
  c
  c...  included dimension and type statements
  
negative.code: c
  c...  compute new z-vector using symmetrized Gauss-Seidel preconditioner
  c
          if(ip.eq.2) call gspre(alnz,bwork,z,rtz1,ja,neq,nnz)
          bet=rtz1
          if(rtz0.ne.zero) bet=rtz1/rtz0
          rtz0=rtz1
  