> On Feb 15, 2015, at 9:17 PM, Gideon Simpson <[email protected]> wrote: > > Got it, one follow up question: > > When calling MatMPIAIJSetPreallocation, is there a reason why the number of > nonzero entries in the off-diagonal sub matrix cannot be zero?
It could be zero; that means there is not coupling between processes however so essentially each process has its own independent problem; thus normally it is most definitely not zero. Barry > > -gideon > >> On Feb 15, 2015, at 9:31 PM, Barry Smith <[email protected]> wrote: >> >> >>> On Feb 15, 2015, at 8:22 PM, Gideon Simpson <[email protected]> >>> wrote: >>> >>> I’m trying to get a handle on the different ways of constructing matrices. >>> Currently, I have: >>> >>> MatCreate(...) >>> MatSetSizes(...) >>> MatSetFromOptions(...) >>> MatSetUp(…) >>> >>> but I gather from reading the manual that, by not preallocating, I’m losing >>> out in performance. If I assume that my matrix will either by SeqAIJ or >>> MPIAIJ, depending on the number of processors available, how would I go >>> about doing this. I see some of the example codes with: >>> >>> MatSeqAIJSetPreallocation(…) >>> MatMPIAIJSetPreallocation(…) >>> >>> as successive commands. Should I interpret this as saying that PETSc will >>> just ignore the one that is not the active one in the current instance? >> >> Exactly*. >> >> You can also use MatXAIJSetPreallocation() which sets the possible >> preallocation forms for all the matrix types without requiring you to set >> one each individuallly. >> >> Barry >> >> * We support this in many places because we hate requiring users to put a >> bunch of if (type == xxx) kind of code in their applications. For example >> KSPGMRESSetRestart() is ignored if the KSP type is not GMRES. >> >> >>> >>> -gideon >>> >> >
