anchor.diff:          selind(1:nselind)=(/ (i,i=1,nselind) /)
           subrhs(1:nselind)=rhs(selind(1:nselind))
           setuptime=setuptime+(MPI_WTIME()-t1) ! switchoff clock
  -write(stream,*)'################### nselind,snnz:',nselind,snnz
           call factorise_and_solve(ids(1),subsol,subrhs,nselind,snnz,sindi,sindj,sval)
           t1 = MPI_WTIME() ! switch on clock
           sol(selind(1:nselind))=sol(selind(1:nselind))+subsol(1:nselind)
  
positive.code:     if (associated(subsol)) deallocate(subsol)
      if (associated(subrhs)) deallocate(subrhs)
    end subroutine multi_subsolve
  
    subroutine sparse_singlesolve(id,sol,rhs,nfreds,nnz,indi,indj,val,tot_nfreds,nnz_est)
      ! For adding a new factorised matrix id must be 0.
  
negative.code:     logical :: dofactorise
      integer :: sd
  
      if (sctls%method>1) then
        if (numprocs>1) then
          call DOUG_abort('multiplicative Schwarz only for numprocs==1 so far',-1)
        endif
        call multiplicative_sparse_multisolve(sol,A,M,rhs,res,A_interf_,AC,refactor,Restrict)
        return
      endif
      if (present(refactor)) then
        if (refactor) then
          dofactorise=.true.
  