> On Apr 18, 2018, at 4:42 PM, k_burk...@yahoo.com wrote: > > So, practically speaking, l should invent routines to decompose the matrix > e.g. into a block matrix structure to be able to make real use of PETSc ie. > be able to solve a linear system using more than one process/core?
To really use PETSc efficiently/effectively you need to generate your matrix in parallel. Barry > > Klaus > > Von meinem Huawei-Mobiltelefon gesendet > > > -------- Originalnachricht -------- > Betreff: Re: [petsc-users] Matrix and vector type selection & memory > allocation for efficient matrix import? > Von: "Smith, Barry F." > An: Klaus Burkart > Cc: PETSc Users List > > > > If you can only generate the nonzero allocation sequentially you can only > solve sequentially which means your matrix is MATSEQAIJ and your vector is > VECSEQ and your communicator is PETSC_COMM_SELF. > > If you pass and array for nnz, what you pass for nz is irrelevant, you might > as well pass 0. > > Barry > > > > On Apr 18, 2018, at 10:48 AM, Klaus Burkart wrote: > > > > More questions about matrix and vector type selection for my application: > > > > My starting point is a huge sparse matrix which can be symmetric or > > asymmetric and a rhs vector. There's no defined local or block structure at > > all, just row and column indices and the values and an array style rhs > > vector together describing the entire linear system to be solved. With > > quite some effort, I should be able to create an array nnz[N] containing > > the number of nonzeros per row in the global matrix for memory allocation > > which would leave me with MatSeqAIJSetPreallocation(M, 0, nnz); as the only > > option for efficient memory allocation ie. a MATSEQAIJ matrix and VECSEQ. I > > assume here, that 0 indicates different numbers of nonzero values in each > > row, the exact number being stored in the nnz array. Regarding this detail > > but one example assume a constant number of nz per row so I am not sure > > whether I should write 0 or NULL for nz? > > > > I started with: > > > > MatCreate(PETSC_COMM_WORLD, &M); > > MatSetSizes(M, PETSC_DECIDE, PETSC_DECIDE, N, N); > > MatSetFromOptions(M); > > > > taken from a paper and assume, the latter would set the matrix type to > > MATSEQAIJ which might conflict with PETSC_COMM_WORLD. Maybe > > decompositioning took place at an earlier stage and the authors of the > > paper were able to retrieve the local data and structure. > > > > What type of matrix and vector should I use for my application e.g. > > MATSEQAIJ and VECSEQ to be able to use MatSeqAIJSetPreallocation(M, 0, > > nnz); for efficient memory allocation? > > > > In this case, where would the decompositioning / MPI process allocation > > take place? >