anchor.diff:      call HYPRE_StructVectorInitialize(hypre_x, ierr)
   
       call HYPRE_StructVectorSetBoxValues(hypre_x, &
  -      ilower(myid,:), iupper(myid,:), values, ierr)
  +      ilower(myid,:), iupper(myid,:), init_values, ierr)
   
       call HYPRE_StructVectorAssemble(hypre_x, ierr)
   
  
positive.code:     ! print *, 'final residual norm = ', hypre_out(2)
  
      call HYPRE_StructVectorGetBoxValues(hypre_x, &
        ilower(myid,:), iupper(myid,:), values, ierr)
  
      do j = ilower(myid,2), iupper(myid,2) ! loop over every grid point
        do i = ilower(myid,1), iupper(myid,1)
        etanew(i,j) = values( ((j-1)*nx_tile + i) )
        end do
      end do
  
  
negative.code:     integer*8        :: hypre_x
      integer*8        :: hypre_solver
      integer*8        :: precond
      double precision, dimension(:),     allocatable :: b_values
      double precision, dimension(:),     allocatable :: init_values
      double precision, dimension(:),     allocatable :: final_values
  
      integer :: nx_tile, ny_tile
  
          ! A currently unused variable that can be used to
      ! print information from the solver - see comments below.
     ! double precision :: hypre_out(2)
  
      nx_tile = iupper(myid,1)-ilower(myid,1) + 1
      ny_tile = iupper(myid,2)-ilower(myid,2) + 1
  
      allocate(b_values(nx_tile*ny_tile))
      allocate(init_values(nx_tile*ny_tile))
      allocate(final_values(nx_tile*ny_tile))
      ! just nx*ny for the tile this processor owns
  
  
  
  
  
      ! wrap this code in preprocessing flags to allow the model to be compiled without the external library, if desired.
  