[petsc-users] assemble the matrix on proc 0

Matthew Knepley knepley at gmail.com
Thu Dec 18 08:21:03 CST 2014


On Thu, Dec 18, 2014 at 8:03 AM, Hoang Giang Bui <hgbk2008 at gmail.com> wrote:
>
> Yes, I did it, like:
>
>         int my_size;
>         if(rank == 0)
>             my_size = n;
>         else
>             my_size = 0;
>         PetscErrorCode ierr;
>         Mat A;
>         ierr = MatCreate(PETSC_COMM_WORLD, &A);
>         ierr = MatSetSizes(A, my_size, PETSC_DECIDE, n, n);
>

View the matrix first

  ierr = MatView(A, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);

There are a lot of possible mistakes to make. This can help sort it out.

  Thanks,

    Matt


> Regards,
> Bui
>
>
> On 12/18/2014 02:17 PM, Barry Smith wrote:
>
>>     Likely when you set the sizes for the matrix you did not set the
>> local size properly on each process. You need to set the local size to be
>> the complete matrix size on process 0 and 0 on all the other processes.
>>
>>    Barry
>>
>>  On Dec 18, 2014, at 4:42 AM, Hoang Giang Bui <hgbk2008 at gmail.com> wrote:
>>>
>>> Hello
>>>
>>> I want to assemble petsc matrix from csr matrix on proc 0. I did that
>>> like:
>>>
>>> ierr = MatSetType(A, MATMPIAIJ);
>>> ierr = MatMPIAIJSetPreallocation(A, PETSC_DEFAULT, PETSC_NULL,
>>> PETSC_DEFAULT, PETSC_NULL);
>>>
>>> on proc 0, I assemble the matrix
>>>
>>>         for(Ii = Istart; Ii < Iend; ++Ii)
>>>         {
>>>             int nz = ia[Ii + 1] - ia[Ii];
>>>             ierr = MatSetValues(A, 1, &Ii, nz, &ja[ia[Ii]], &v[ia[Ii]],
>>> INSERT_VALUES);
>>>         }
>>>
>>> the other proc also called this code, but input matrix only exists in
>>> proc 0.
>>>
>>> The matrix print out correctly:
>>> MatView(A, PETSC_VIEWER_STDOUT_WORLD);
>>> row 0: (0, 1)  (3, 6)
>>> row 1: (1, 10.5)
>>> row 2: (2, 0.015)
>>> row 3: (1, 250.5)  (3, -280)  (4, 33.32)
>>> row 4: (4, 12)
>>>
>>> However, when solved by ksp, it created an error:
>>> [3]PETSC ERROR: Invalid argument
>>> [3]PETSC ERROR: Must be square matrix, rows 0 columns 1
>>>
>>> What should be wrong in this case?
>>>
>>> Regards,
>>> Bui
>>>
>>>
>

-- 
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/20141218/e1c6270c/attachment.html>


More information about the petsc-users mailing list