public override void compute()
        {
            /* Get primitive structures */
            HYPRE_ParCRS_vector b_ParCRS = (HYPRE_ParCRS_vector)rhs.Primitive;
            HYPRE_ParCRS_vector x_ParCRS = (HYPRE_ParCRS_vector)solution.Primitive;
            HYPRE_ParCSR_matrix A_ParCSR = (HYPRE_ParCSR_matrix)matrix.Primitive;

            /* Setup solver parameters */
            lssdomain.HYPRE_ParCSRPCGSetMaxIter(solverCG, maxiter);
            lssdomain.HYPRE_ParCSRPCGSetTol(solverCG, tol);
            lssdomain.HYPRE_ParCSRPCGSetTwoNorm(solverCG, 1);

            /* Consolidate data structures */
            lssdomain.HYPRE_ParCSRPCGSetup(solverCG, A_ParCSR, b_ParCRS, x_ParCRS);

            /* Solve ! */
            lssdomain.HYPRE_ParCSRPCGSolve(solverCG, A_ParCSR, b_ParCRS, x_ParCRS);

            /* Get some information about execution */
            lssdomain.HYPRE_ParCSRPCGGetNumIterations(solverCG, out num_iterations);
            lssdomain.HYPRE_ParCSRPCGGetFinalRelativeResidualNorm(solverCG, out final_res_norm);

            /* Destroy solver */
            lssdomain.HYPRE_ParCSRPCGDestroy(solverCG);
        }         // end activate method
 public int HYPRE_ParCSRPCGSolve(HYPRE_Solver solver, HYPRE_ParCSR_matrix ParCSRMatrix_A, HYPRE_ParCRS_vector ParVector_b, HYPRE_ParCRS_vector ParVector_x)
 {
     return(ParCSRPCGSolve(solver, ParCSRMatrix_A, ParVector_b, ParVector_x));
 }
 private static extern int GetObject(HYPRE_IJVector vector, out HYPRE_ParCRS_vector mtx_object);
 public int HYPRE_IJVectorGetObject(HYPRE_IJVector vector, out HYPRE_ParCRS_vector mtx_object)
 {
     return(GetObject(vector, out mtx_object));
 }
 private static extern int ParCSRPCGSolve(HYPRE_Solver solver, HYPRE_ParCSR_matrix ParCSRMatrix_A, HYPRE_ParCRS_vector ParVector_b, HYPRE_ParCRS_vector ParVector_x);