[petsc-users] Checking if a vector is a localvector of a given DMDA
Phil Tooley
phil.tooley at sheffield.ac.uk
Tue Sep 25 07:31:14 CDT 2018
Thanks both,
I now have what I need. For now I am checking that the vector I am
passed has the same local size, global size, and Comm as the vector
provided by DMGetLocalVector, mostly because I already have a
compatibility check function written. (I assume this requires a malloc
and free behind the scenes)
At some point I will likely change to explicitly checking for comm size
of one and appropriate global and local sizes based on the DMDA
properties instead, for now I want to get to an alpha version I can let
people play with.
Phil
On 25/09/18 13:07, Dave May wrote:
>
>
> On Tue, 25 Sep 2018 at 13:20, Matthew Knepley <knepley at gmail.com
> <mailto:knepley at gmail.com>> wrote:
>
> On Tue, Sep 25, 2018 at 7:03 AM Dave May <dave.mayhem23 at gmail.com
> <mailto:dave.mayhem23 at gmail.com>> wrote:
>
> On Tue, 25 Sep 2018 at 11:49, Phil Tooley
> <phil.tooley at sheffield.ac.uk
> <mailto:phil.tooley at sheffield.ac.uk>> wrote:
>
> Hi all,
>
> Given a vector I know I can get an associated DM (if there
> is one) by
> calling VecGetDM, but I need to also be able to check that
>
> a) the vector is the localvector of that DM rather than
> the global
>
>
> Given the vector, you can check the communicator size via
> PetscObjectGetComm()
>
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscObjectGetComm.html
> and then MPI_Comm_size()
> If the comm size 1, it is local vector.
>
>
> In serial, both vectors have comm size 1.
>
>
> Right - and the local and global sizes are the same.
>
> My point was to check the comm size first. If it's 1 then you have a
> candidate for a local vector. Then you'd check the vec global size
> matches the dmda local size. If the commsize is anything other than 1
> then it cannot be a local vector
>
>
> Matt
>
>
> You can check the size matches your local DMDA space by using
> DMDAGetGhostCorners()
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDAGetGhostCorners.html
>
> and return the quantities m, n, and p.
>
> You also need to use DMDAGetInfo()
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDAGetInfo.html
>
> The important quantity you want returned is "dof"
>
> If m x n x p x dof matches the number returned by VecGetSize()
> (assuming you know the vector is sequential) then you know the
> local space will fit within your vector.
>
>
>
>
> b) the DM is a DMDA rather than some other subclass
>
>
> See Matt's answer
>
>
>
> I can't immediately see routines that do what I need, but
> I am likely
> missing something obvious. Is there a way to achieve the
> above?
>
> Thanks
>
> Phil
>
> --
> Phil Tooley
> Research Software Engineering
> University of Sheffield
>
>
>
> --
> 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/%7Eknepley/>
>
--
Phil Tooley
Research Software Engineering
University of Sheffield
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180925/5570c813/attachment.html>
More information about the petsc-users
mailing list