anchor.diff:        do i = ilower(myid,1), iupper(myid,1)
       ! the 2D array is being laid out like
       ! [x1y1, x2y1, x3y1, x1y2, x2y2, x3y2, x1y3, x2y3, x3y3]
  -      values( ((j-1)*nx_tile + i) ) = -etastar(i,j)/dt**2
  +      b_values( ((j-1)*nx_tile + i) ) = -etastar(i,j)/dt**2
  +      init_values( ((j-1)*nx_tile + i) ) = etastar(i,j)
         end do
       end do
   
       call HYPRE_StructVectorSetBoxValues(hypre_b, &
  -      ilower(myid,:), iupper(myid,:), values, ierr)
  +      ilower(myid,:), iupper(myid,:), b_values, ierr)
   
       call HYPRE_StructVectorAssemble(hypre_b, ierr)
   
  
positive.code:     ! and this may be useful in the future.
      ! call HYPRE_ParCSRPCGGetNumIterations(hypre_solver, &
      !   hypre_out(1), ierr)
      ! print *, 'num iterations = ', hypre_out(1)
  
      ! call HYPRE_ParCSRPCGGetFinalRelative(hypre_solver, &
  
negative.code:     ! print *, 'final residual norm = ', hypre_out(2)
  
      call HYPRE_StructVectorGetBoxValues(hypre_x, &
        ilower(myid,:), iupper(myid,:), final_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) = final_values( ((j-1)*nx_tile + i) )
        end do
      end do
  
  