<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Dec 18, 2014 at 8:03 AM, Hoang Giang Bui <span dir="ltr"><<a href="mailto:hgbk2008@gmail.com" target="_blank">hgbk2008@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yes, I did it, like:<br>
<br>
        int my_size;<br>
        if(rank == 0)<br>
            my_size = n;<br>
        else<br>
            my_size = 0;<br>
        PetscErrorCode ierr;<br>
        Mat A;<br>
        ierr = MatCreate(PETSC_COMM_WORLD, &A);<br>
        ierr = MatSetSizes(A, my_size, PETSC_DECIDE, n, n);<br></blockquote><div><br></div><div>View the matrix first</div><div><br></div><div>  ierr = MatView(A, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);</div><div><br></div><div>There are a lot of possible mistakes to make. This can help sort it out.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Regards,<br>
Bui<div class="HOEnZb"><div class="h5"><br>
<br>
On 12/18/2014 02:17 PM, Barry Smith wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    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.<br>
<br>
   Barry<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Dec 18, 2014, at 4:42 AM, Hoang Giang Bui <<a href="mailto:hgbk2008@gmail.com" target="_blank">hgbk2008@gmail.com</a>> wrote:<br>
<br>
Hello<br>
<br>
I want to assemble petsc matrix from csr matrix on proc 0. I did that like:<br>
<br>
ierr = MatSetType(A, MATMPIAIJ);<br>
ierr = MatMPIAIJSetPreallocation(A, PETSC_DEFAULT, PETSC_NULL, PETSC_DEFAULT, PETSC_NULL);<br>
<br>
on proc 0, I assemble the matrix<br>
<br>
        for(Ii = Istart; Ii < Iend; ++Ii)<br>
        {<br>
            int nz = ia[Ii + 1] - ia[Ii];<br>
            ierr = MatSetValues(A, 1, &Ii, nz, &ja[ia[Ii]], &v[ia[Ii]], INSERT_VALUES);<br>
        }<br>
<br>
the other proc also called this code, but input matrix only exists in proc 0.<br>
<br>
The matrix print out correctly:<br>
MatView(A, PETSC_VIEWER_STDOUT_WORLD);<br>
row 0: (0, 1)  (3, 6)<br>
row 1: (1, 10.5)<br>
row 2: (2, 0.015)<br>
row 3: (1, 250.5)  (3, -280)  (4, 33.32)<br>
row 4: (4, 12)<br>
<br>
However, when solved by ksp, it created an error:<br>
[3]PETSC ERROR: Invalid argument<br>
[3]PETSC ERROR: Must be square matrix, rows 0 columns 1<br>
<br>
What should be wrong in this case?<br>
<br>
Regards,<br>
Bui<br>
<br>
</blockquote></blockquote>
<br>
</div></div></blockquote></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>