In the application the storage is contiguous but the global indexing is not. I would like to use AO as a translation layer but I don't understand it.

My case is actually simple even if it is in a large application, I have

Mat A, Vec b and Vec x

After calling KSPSolve, I use VecGetArrayReadF90 to get a pointer to the data and they are in the wrong ordering, so for example the first element of the solution array on process 0 belongs to process 1 in the application.

Is it at this point that I should use the AO translation layer? This would be quite bad, it means to build Mat A and Vec b there is MPI communication and also to get the data of Vec x back in the application.

Anyway, I've tried to use AOPetscToApplicationPermuteReal on the solution array but it doesn't work as I would like. Is this function suppose to do MPI communication between processes and fetch the values of the application ordering?

Cheers,
Enrico

On 19/10/2023 15:25, Matthew Knepley wrote:
On Thu, Oct 19, 2023 at 8:57 AM Enrico <[email protected] <mailto:[email protected]>> wrote:

    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.


Any program you write to do linear algebra will have contiguous storage because it is so much faster. Contiguous indexing makes sense for contiguous storage. If you want to use non-contiguous indexing for contiguous storage, you would need some translation layer. The AO is such a translation, but you could do this any way you want.

   Thanks,

      Matt

    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]>
     > <mailto:[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]>>
     >      > <mailto:[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/>>
     >      > <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/>
     >     <https://www.cse.buffalo.edu/~knepley/
    <https://www.cse.buffalo.edu/~knepley/>>
     >     <http://www.cse.buffalo.edu/~knepley/
    <http://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/
    <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