[petsc-users] Question on assembling matrix in parallel
Smith, Barry F.
bsmith at mcs.anl.gov
Thu Mar 1 11:25:05 CST 2018
> On Mar 1, 2018, at 10:56 AM, Edoardo alinovi <edoardo.alinovi at gmail.com> wrote:
>
> Dear Barry,
>
> thank you very much for the help. I will try to define the matrix as global and let you know if I have some problems. So just to be sure the following procedure is allowed:
>
> - assemble matrix A with matAssemblyBegin/MatAssemblyEnd and rhs1
> - solve the system for u= A\rhs1
>
> - assemble rhs2 and do MatDiagonalSet() to obtain B by changing the main diagonal of A without redo matAssemblyBegin/MatAssemblyEnd
> - solve the system for v=B\rhs2
>
> - assemble rhs3 and do like in the previous point to get C
> - solve the system for w=C\rhs3
Yes
>
> Thanks,
>
> Edoardo
>
> 2018-03-01 17:27 GMT+01:00 Smith, Barry F. <bsmith at mcs.anl.gov>:
>
>
> > On Mar 1, 2018, at 10:24 AM, Edoardo alinovi <edoardo.alinovi at gmail.com> wrote:
> >
> > Dear All,
> >
> > thanks to your suggestions and Petsc, I have finished to program my finite volume code for CFD that runs in parallel and this is great.
> >
> > I am now tryig to improve its performace and I have a question on matrix in MPIAij format.
> >
> > Basically after the discetization, I have one matrix for each velocity component and they are equal except for the diagonal elements which changes because of the boundary conditions. What I am doing now is:
> >
> > - fill each matrix using matSetValues row by row
> > - finalize each matrix assembly with MatAssemblyBegin and MatAssemblyEnd
> >
> > I am wondering if would be possible to build just one matrix doing MatAssemblyBegin/MatAssemblyEnd and for the other two change the diagonal values locally, thus avoiding the parallel communications.
>
> You can use MatDiagonalSet() to add to or set the diagonal values of the matrix.
>
> >
> > Also can I put a matrix object in a module and make it a global variable?
>
> You can.
>
> > Can you provide/link me an example? I am using Fortran.
>
> There may be examples in the master branch of PETSc. It is straightforward. Just do it and if it doesn't work send us email with full bug report.
>
>
> >
> > Thank you very much for your help,
> >
> > Edoardo
> >
> >
>
>
More information about the petsc-users
mailing list