The normal pattern (for example MPIAIJ, MPIBAIJ) is for the
PetscMap setup
being done in the associated MatXXXSetPreallocation() routine.
I think the correct fix is
1) change the ierr =
MatSetSizes(*A,m,n,PETSC_DETERMINE,n);CHKERRQ(ierr);
in MatCreateMPIAdj to ierr =
MatSetSizes(*A,m,PETSC_DECIDE,PETSC_DETERMINE,n);CHKERRQ(ierr);
2) remove the two lines
if (B->cmap->n < 0) B->cmap->n = B->cmap->N;
if (B->cmap->N < 0) B->cmap->N = B->cmap->n;
from MatCreate_MPIAdj()
3) either add the ierr = PetscMapSetUp(B->cmap);CHKERRQ(ierr); to
MatCreate_MPIAdj() OR put the PetscMapSetUp() for both rmap and
cmap into MatMPIAdjSetPreallocation() [this would be best cause it
matches
the pattern of the others]
Or am I missing something.
Barry
The business of setting the local column size to the global column
size came from
long ago and probably makes no sense any more.
On Dec 3, 2008, at 9:36 AM, Lisandro Dalcin wrote:
> Sorry, my comment about PETSC_COMM_SELF was a nonsense :-(
>
> Let me write the rule in C-Python-pseudocode
>
> rank = mat->comm->rank
> size = mat->comm->size
>
> cmap->N = # total_columns
>
> for p in range(size):
> if p == rank:
> mat->cmap->n = cmap->N
> else:
> mat->cmap->n = 0
>
> # and finally
> PetscMapSetUp(mat->cmap)
>
> That would be fine?
>
>
> On Wed, Dec 3, 2008 at 1:19 PM, Lisandro Dalcin <dalcinl at gmail.com>
> wrote:
>> Can someone help me to review this routine?
>>
>> MatCreate_MPIAdj(Mat B)
>>
>> I understand that MATMPIADJ is rather special, but the call above
>> is never made
>>
>> PetscMapSetUp(B->cmap)
>>
>> then It seems that some stuff (ranges) in the column map will be
>> uninitialized.
>>
>> What values should have the entries in "cmap" for mpiadj matrices?
>> Should the "comm" in "cmap" be MPI_COMM_SELF, then we can call
>> PetscMapSetUp?
>>
>>
>>
>>
>> --
>> 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
>>
>
>
>
> --
> 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
>