Maybe I wasn't clear enough. I would like to completely get rid of Petsc ordering because I don't want extra communication between processes to construct the vector and the matrix (since I have to fill them every time step because I'm just using the linear solver with a Mat and a Vec data structure). I don't understand how I can do that.

My initial idea was to create another global index ordering within my application to use only for the Petsc interface but then I think that the ghost cells are wrong.

On 19/10/2023 14:50, Matthew Knepley wrote:
On Thu, Oct 19, 2023 at 6:51 AM Enrico <[email protected] <mailto:[email protected]>> wrote:

    Hello,

    if I create an application ordering using AOCreateBasic, should I
    provide the same array for const PetscInt myapp[] and const PetscInt
    mypetsc[] in order to get the same ordering of the application
    within PETSC?


Are you asking if the identity permutation can be constructed using the same array twice? Yes.

    And once I define the ordering so that the local vector and matrix are
    defined in PETSC as in my application, how can I use it to create the
    actual vector and matrix?


The vectors and matrices do not change. The AO is a permutation. You can use it to permute
a vector into another order, or to convert on index to another.

   Thanks,

       Matt

    Thanks in advance for the help.

    Cheers,
    Enrico

    On 18/10/2023 13:39, Matthew Knepley wrote:
     > On Wed, Oct 18, 2023 at 5:55 AM Enrico <[email protected]
    <mailto:[email protected]>
     > <mailto:[email protected] <mailto:[email protected]>>> wrote:
     >
     >     Hello,
     >
     >     I'm trying to use Petsc to solve a linear system in an
    application. I'm
     >     using the coordinate format to define the matrix and the
    vector (it
     >     should work better on GPU but at the moment every test is on
    CPU).
     >     After
     >     the call to VecSetValuesCOO, I've noticed that the vector is
    storing
     >     the
     >     data in a different way from my application. For example with two
     >     processes in the application
     >
     >     process 0 owns cells 2, 3, 4
     >
     >     process 1 owns cells 0, 1, 5
     >
     >     But in the vector data structure of Petsc
     >
     >     process 0 owns cells 0, 1, 2
     >
     >     process 1 owns cells 3, 4, 5
     >
     >     This is in principle not a big issue, but after solving the
    linear
     >     system I get the solution vector x and I want to get the
    values in the
     >     correct processes. Is there a way to get vector values from other
     >     processes or to get a mapping so that I can do it myself?
     >
     >
     > By definition, PETSc vectors and matrices own contiguous row
    blocks. If
     > you want to have another,
     > global ordering, we support that with
     > https://petsc.org/main/manualpages/AO/
    <https://petsc.org/main/manualpages/AO/>
     > <https://petsc.org/main/manualpages/AO/
    <https://petsc.org/main/manualpages/AO/>>
     >
     >    Thanks,
     >
     >       Matt
     >
     >     Cheers,
     >     Enrico Degregori
     >
     >
     >
     > --
     > 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
     >
     > https://www.cse.buffalo.edu/~knepley/
    <https://www.cse.buffalo.edu/~knepley/>
    <http://www.cse.buffalo.edu/~knepley/
    <http://www.cse.buffalo.edu/~knepley/>>



--
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

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>

Reply via email to