[petsc-users] Help initializing matrix to a constant

Junchao Zhang junchao.zhang at gmail.com
Tue Dec 14 14:27:07 CST 2021


>From https://petsc.org/release/src/ksp/ksp/tutorials/ex77.c.html

114:       MatDenseGetArrayWrite
<https://petsc.org/release/docs/manualpages/Mat/MatDenseGetArrayWrite.html#MatDenseGetArrayWrite>(B,&x);115:
      for (i=0; i<m*N; ++i) x[i] = 1.0;116:
MatDenseRestoreArrayWrite
<https://petsc.org/release/docs/manualpages/Mat/MatDenseRestoreArrayWrite.html#MatDenseRestoreArrayWrite>(B,&x);

--Junchao Zhang


On Tue, Dec 14, 2021 at 1:05 PM Rohan Yadav <rohany at alumni.cmu.edu> wrote:

> Hi,
>
> I'm having trouble setting all entries of a matrix to a constant value,
> similar to the `VecSet` method on vectors. I have a dense matrix that I
> want to initialize all entries to 1. The only related method I see on the
> `Mat` interface is `MatZeroEntries`, which sets all entries to 0. The
> obvious first attempt is to use the `MatSetValue` function to set all
> entries to the constant.
>
> ```
>   Mat C;
>
>   MatCreateDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, k, j,
> NULL, &C);
>
>   for (int kk = 0; kk < k; kk++) {
>
>     for (int jj = 0; jj < j; jj++) {
>
>       MatSetValue(C, kk, jj, 1, INSERT_VALUES);
>
>     }
>
>   }
>
>   MatAssemblyBegin(C, MAT_FINAL_ASSEMBLY);
>
>   MatAssemblyEnd(C, MAT_FINAL_ASSEMBLY);
> ```
>
> However, when run with a relatively large matrix C (5GB) and a
> rank-per-core on my 40-core machine this code OOMs and crashes. It does not
> OOM with only 1 and 10 rank, leading me to believe that this API call is
> somehow causing the entire matrix to be replicated on each rank.
>
> Despite looking through the documentation, I could not find another API
> call that would allow me to set all the values in the matrix to a constant.
> What should I do here?
>
> Thanks,
>
> Rohan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20211214/4f7f6a66/attachment-0001.html>


More information about the petsc-users mailing list