[petsc-users] Diagnosing Poisson Solver Behavior

Barry Smith bsmith at mcs.anl.gov
Wed Oct 14 23:54:45 CDT 2015


  we need the full error message, what function is causing the error?  In theory what you are doing sounds like it should work, it is all the little details that are likely causing the issues. In parallel you will not be able to reuse some old code to "compute the Finite difference discretization of a 3D regular grid" so you might consider just discarding that old code and using what PETSc provides for computing the "Finite difference discretization of a 3D regular grid."

  Barry


> On Oct 14, 2015, at 11:44 PM, K. N. Ramachandran <knram06 at gmail.com> wrote:
> 
> Hello all,
> 
> @Matt: Actually I can't fully adopt the SNES ex5 since I think I am much closer to getting the DMDA stuff to work, even if it is just serial. So I am currently focussing on that.
> 
> @Barry: The matrix is coming from the Finite difference discretization of a 3D regular grid. I had a look at KSP ex45.c and I am struggling with what looks to be a simple problem.
> 
> I currently supply the matrix to PETSc in a CSR form. I have specified ComputeRHS and ComputeMatrix functions, analogous to ex45.c.
> 
> If my 3D grid is regular cube with 5 nodes on each side, I create DMDA using DMDACreate3d((comm world), boundary types, STAR_STENCIL, etc., M = 5, N = 5, P = 5, dof=1, s=1, PETSC_NULL on remaining).
> 
> In the ComputeMatrix function, I try to reuse my CSR form by doing:
> 
> #undef __FUNCT__
> #define __FUNCT__ "ComputeMatrix"
> PetscErrorCode ComputeMatrix(KSP ksp, Mat J, Mat A, void* ctx)
> {
>     PetscFunctionBeginUser;
> 
>     Mat temp;
>     // build up the matrix
>     MatCreateSeqAIJWithArrays(PETSC_COMM_WORLD, numRows, numRows, rows, cols, values, &temp);
> 
>     MatCopy(temp, A, DIFFERENT_NONZERO_PATTERN);
> 
>     MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);
>     MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
> 
>     PetscFunctionReturn(0);
> 
> } // end of ComputeMatrix
> 
> Where rows, cols, values are stored globally, for now. Also I am keeping the code serial, so I am just trying to use DMDA as a convenient way to take care of interpolation between MG levels, if my understanding is correct.
> 
> But on the MatCopy line, I get an error
> 
> DM Object: 1 MPI processes
>   type: da
> Processor [0] M 5 N 5 P 5 m 1 n 1 p 1 w 1 s 1
> X range of indices: 0 5, Y range of indices: 0 5, Z range of indices: 0 5
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
> [0]PETSC ERROR: Argument out of range
> [0]PETSC ERROR: Inserting a new nonzero at (25,27) in the matrix
> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.6.2, Oct, 02, 2015
> 
> I have been trying but I have not been able to resolve this quickly. I feel like I am creating the DMDA correctly. Is there a better way of reusing a CSR form to setup a DM Matrix? Should I be doing DMCreateMatrix?
> 
> Thanks a lot for your help.
> 
> 
> Regards,
> K.N.Ramachandran
> Ph: 814-441-4279



More information about the petsc-users mailing list