[petsc-users] MatSetSizes with blocked matrix

Steena Monteiro steena.hpc at gmail.com
Tue Mar 15 11:04:36 CDT 2016


I pass a binary, matrix data file at the command line and load it into the
matrix:

PetscInitialize(&argc,&args,(char*)0,help);
ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);

/* converted mtx to dat file*/
ierr = PetscOptionsGetString(NULL,"-f",file,PETSC_MAX_PATH_LEN,&flg);
CHKERRQ(ierr);

if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"specify matrix dat file
with -f");

 /* Load matrices */
ierr =
PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr);
ierr =
PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr);
ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr);
ierr = MatSetFromOptions(A);CHKERRQ(ierr);

Thanks,
Steena

On 15 March 2016 at 08:58, Matthew Knepley <knepley at gmail.com> wrote:

> On Tue, Mar 15, 2016 at 10:54 AM, Steena Monteiro <steena.hpc at gmail.com>
> wrote:
>
>> Thank you, Dave.
>>
>> Matt: I understand the inconsistency but MatMult with non divisible block
>> sizes (here, 2) does not throw any errors and fail, when MatSetSize is
>> commented out. Implying that 1139905 global size does work with block size
>> 2.
>>
>
> If you comment out MatSetSize(), how does it know what size the Mat is?
>
>    Matt
>
>
>> On 15 March 2016 at 00:12, Dave May <dave.mayhem23 at gmail.com> wrote:
>>
>>>
>>> On 15 March 2016 at 04:46, Matthew Knepley <knepley at gmail.com> wrote:
>>>
>>>> On Mon, Mar 14, 2016 at 10:05 PM, Steena Monteiro <steena.hpc at gmail.com
>>>> > wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> I am having difficulty getting MatSetSize to work prior to using
>>>>> MatMult.
>>>>>
>>>>> For matrix A with rows=cols=1,139,905 and block size = 2,
>>>>>
>>>>
>>>> It is inconsistent to have a row/col size that is not divisible by the
>>>> block size.
>>>>
>>>
>>>
>>> To be honest, I don't think the error message being thrown clearly
>>> indicates what the actual problem is (hence the email from Steena). What
>>> about
>>>
>>> "Cannot change/reset row sizes to 400000 local 1139906 global after
>>> previously setting them to 400000 local 1139905 global. Local and global
>>> sizes must be divisible by the block size"
>>>
>>>
>>>>
>>>>   Matt
>>>>
>>>>
>>>>> rank 0 gets 400000 rows and rank 1 739905 rows,  like so:
>>>>>
>>>>> /*Matrix setup*/
>>>>>
>>>>> ierr=PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);
>>>>> ierr = MatCreate(PETSC_COMM_WORLD,&A);
>>>>> ierr = MatSetFromOptions(A);
>>>>> ierr = MatSetType(A,MATBAIJ);
>>>>> ierr = MatSetBlockSize(A,2);
>>>>>
>>>>> /*Unequal row assignment*/
>>>>>
>>>>>  if (!rank) {
>>>>>     ierr = MatSetSizes(A, 400000, PETSC_DECIDE,
>>>>> 1139905,1139905);CHKERRQ(ierr);
>>>>>    }
>>>>> else {
>>>>>     ierr = MatSetSizes(A, 739905, PETSC_DECIDE,
>>>>> 1139905,1139905);CHKERRQ(ierr);
>>>>> }
>>>>>
>>>>> MatMult (A,x,y);
>>>>>
>>>>> /************************************/
>>>>>
>>>>> Error message:
>>>>>
>>>>> 1]PETSC ERROR: [0]PETSC ERROR: No support for this operation for this
>>>>> object type
>>>>> Cannot change/reset row sizes to 400000 local 1139906 global after
>>>>> previously setting them to 400000 local 1139905 global
>>>>>
>>>>> [1]PETSC ERROR: [0]PETSC ERROR: Cannot change/reset row sizes to
>>>>> 739905 local 1139906 global after previously setting them to 739905 local
>>>>> 1139905 global
>>>>>
>>>>> -Without messing with row assignment,  MatMult works fine on this
>>>>> matrix for block size = 2, presumably because an extra padded row is
>>>>> automatically added to facilitate blocking.
>>>>>
>>>>> -The above code snippet works well for block size = 1.
>>>>>
>>>>> Is it possible to do unequal row distribution *while using blocking*?
>>>>>
>>>>> Thank you for any advice.
>>>>>
>>>>> -Steena
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> -- Norbert Wiener
>>>>
>>>
>>>
>>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160315/fb2ab030/attachment.html>


More information about the petsc-users mailing list