I've pushed my changes to PCASM. I've implemented a 'smart' subdomain partitioner based on MatPartitioner, and falling back to a by chunks of rows partitioning if no good partitioner is available (PCASMCreateSubdomains(), and a convenience routine PCASMDestroySubdomains(), as now PCASM takes full ownership of subdomain index set and the array memory holding them). I'll really appreciate if some of you can review all this, as it was a bit tricky for me to get it right for all AIJ matrix types, external partitioner package availability, etc. The biggest crap is that I had to build by hand a MATMPIADJ, I believe MatConvert() cannot be used in the case of block-aij matrices (see comments in source code).
A few things missing: 1) Make it the default. Easy to do once I get review and feedback and you agree to to that. 2) More testing. I'll try to do some work this week. 3) Fortran interface. I would really appreciate any help here. BTW, the fallback to by-row partitioning (actually the former default) could perhaps be done better by reusing some of the sparse reordering routines for SPARSEPACK. I'm thinking about finding a pseudo-peripheral node, do a level-set traversal, and then do the partitioning (of course, handling the case of more than one connected component in the graph). Not really smart, but far better that partitioning rows in chunks (and more or less equivalent to it for structured grids in natural ordering) . However, I believe this should really go to a new PETSc-native (only uniprocessor) MatPartitioning implementation, righ? Any comments? -- Lisandro Dalc?n --------------- Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) PTLC - G?emes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594
