[petsc-users] Accessing Global Vector Data with

Matthew Knepley knepley at gmail.com
Mon Aug 19 10:41:59 CDT 2019


On Mon, Aug 19, 2019 at 10:24 AM Daniel Mckinnell <d_mckinnell at aol.co.uk>
wrote:

> Sorry I'm still a bit confused about this. I changed DMPlexPointLocalRef
> for DMPlexPointGlobalRef as shown in my attached code but got the
> following error:
>

You do not need the global section. I have rewritten your code and it works
for me.

  Thanks,

    Matt


> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation,
> probably memory access out of range
> [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
> [0]PETSC ERROR: or see
> http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
> [0]PETSC ERROR: [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation,
> probably memory access out of range
> [1]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
> [1]PETSC ERROR: or see
> http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
> [1]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS
> X to find memory corruption errors
> or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory
> corruption errors
> [0]PETSC ERROR: likely location of problem given in stack below
> [0]PETSC ERROR: ---------------------  Stack Frames
> ------------------------------------
> [0]PETSC ERROR: Note: The EXACT line numbers in the stack are not
> available,
> [0]PETSC ERROR:       INSTEAD the line number of the start of the function
> [0]PETSC ERROR:       is given.
> [0]PETSC ERROR: [0] DMPlexPointGlobalRef line 313
> /home/daniel/petsc/src/dm/impls/plex/plexpoint.c
> [1]PETSC ERROR: likely location of problem given in stack below
> [1]PETSC ERROR: ---------------------  Stack Frames
> ------------------------------------
> [1]PETSC ERROR: Note: The EXACT line numbers in the stack are not
> available,
> [1]PETSC ERROR:       INSTEAD the line number of the start of the function
> [1]PETSC ERROR:       is given.
> [1]PETSC ERROR: [1] DMPlexPointGlobalRef line 313
> /home/daniel/petsc/src/dm/impls/plex/plexpoint.c
> [1]PETSC ERROR:
> --------------------------------------------------------------------------
>
> I am guessing that this is because the array is not a global one but I'm
> not sure how you can produce a global array from a global Vec?
> Thanks,
> Daniel
>
>
> -----Original Message-----
> From: Matthew Knepley <knepley at gmail.com>
> To: Daniel Mckinnell <d_mckinnell at aol.co.uk>
> CC: PETSc <petsc-maint at mcs.anl.gov>
> Sent: Mon, 19 Aug 2019 12:13
> Subject: Re: [petsc-users] Accessing Global Vector Data with
>
> On Mon, Aug 19, 2019 at 4:46 AM Daniel Mckinnell <d_mckinnell at aol.co.uk>
> wrote:
>
> Thank you for the help, the "if (voff >= 0)" line was to prevent errors
> from looping over ghost vertices but it is better to just loop from the
> start of the vertices to the end of the physical vertices.
>
> I am really just trying to create an example file of a method to access
> the associated field data of a sample vertex in the global Vec, alter the
> field data and then set it back into the Vec object.
>
>
> The easiest thing to do is use
>
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/DMPlexPointGlobalRef.html
>
>   Thanks,
>
>       Matt
>
>
> Best Regards,
> Daniel
>
>
> -----Original Message-----
> From: Matthew Knepley <knepley at gmail.com>
> To: Daniel Mckinnell <d_mckinnell at aol.co.uk>
> CC: PETSc <petsc-maint at mcs.anl.gov>
> Sent: Thu, 15 Aug 2019 17:19
> Subject: Re: [petsc-users] Accessing Global Vector Data with
>
> On Thu, Aug 15, 2019 at 12:05 PM Daniel Mckinnell <d_mckinnell at aol.co.uk>
> wrote:
>
> Thank you, it seemed to work nicely for the fields associated with cells
> but I'm having problems with the field on vertices. The code for altering
> the field is as follows:
>
> for (int i = vStart; i < vEnd; i++)
>     {
>         PetscScalar *values;
>         PetscInt vsize, voff;
>         PetscSectionGetDof(globalsection, i, &vsize);
>         PetscSectionGetOffset(globalsection, i, &voff);
>
>
> You do not need the Section calls I think.
>
>
>         VecGetArray(u, &values);
>
>
> Hoist GetArray out of v loop
>
>
>         if (voff >= 0)
>
>
> This check is not needed I think. What you are doing here is a mix of
> local and global.
> What do you actually want to do?
>
>         {
>             PetscScalar *p;
>             DMPlexPointLocalRef(*dm, i, values, &p);
>             p[0] = i + 1;
>         }
>         VecRestoreArray(u, &values);
>
>
> Hoist RestoreArray out of v loop.
>
>   Thanks,
>
>     Matt
>
>
>
> The Global PetscSection is:
>
> PetscSection Object: 2 MPI processes
>   type not yet set
> Process 0:
>   (   0) dim  2 offset   0
>   (   1) dim  2 offset   2
>   (   2) dim -3 offset -13
>   (   3) dim -3 offset -15
>   (   4) dim  1 offset   4
>   (   5) dim  1 offset   5
>   (   6) dim  1 offset   6
>   (   7) dim -2 offset -17
>   (   8) dim -2 offset -18
>   (   9) dim -2 offset -19
>   (  10) dim -2 offset -20
>   (  11) dim -2 offset -21
>   (  12) dim -2 offset -22
>   (  13) dim  1 offset   7
>   (  14) dim  1 offset   8
>   (  15) dim  1 offset   9
>   (  16) dim  1 offset  10
>   (  17) dim  1 offset  11
>   (  18) dim -2 offset -23
>   (  19) dim -2 offset -24
>   (  20) dim -2 offset -25
>   (  21) dim -2 offset -26
>   (  22) dim -2 offset -27
>   (  23) dim -2 offset -28
>   (  24) dim -2 offset -29
> Process 1:
>   (   0) dim  2 offset  12
>   (   1) dim  2 offset  14
>   (   2) dim -3 offset  -1
>   (   3) dim -3 offset  -3
>   (   4) dim  1 offset  16
>   (   5) dim  1 offset  17
>   (   6) dim  1 offset  18
>   (   7) dim  1 offset  19
>   (   8) dim  1 offset  20
>   (   9) dim  1 offset  21
>   (  10) dim -2 offset  -5
>   (  11) dim -2 offset  -6
>   (  12) dim -2 offset  -7
>   (  13) dim  1 offset  22
>   (  14) dim  1 offset  23
>   (  15) dim  1 offset  24
>   (  16) dim  1 offset  25
>   (  17) dim  1 offset  26
>   (  18) dim  1 offset  27
>   (  19) dim  1 offset  28
>   (  20) dim -2 offset  -8
>   (  21) dim -2 offset  -9
>   (  22) dim -2 offset -10
>   (  23) dim -2 offset -11
>   (  24) dim -2 offset -12
>
> where points 4-6 on proc 0 and points 4-9 on proc 1 are vertices.
>
> The altered vec is:
>
> Vec Object: 2 MPI processes
>   type: mpi
> Process [0]
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 5.
> 6.
> 7.
> 0.
> Process [1]
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 0.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 0.
> 0.
> 0.
>
> However the altered values do not correspond with the offsets in the
> PetscSection and I'm not sure what is going wrong.
> Thanks for all of the help.
> Daniel
>
>
> -----Original Message-----
> From: Matthew Knepley via petsc-users <petsc-users at mcs.anl.gov>
> To: Daniel Mckinnell <d_mckinnell at aol.co.uk>
> CC: PETSc <petsc-users at mcs.anl.gov>
> Sent: Thu, 15 Aug 2019 16:11
> Subject: Re: [petsc-users] Accessing Global Vector Data with
>
> On Thu, Aug 15, 2019 at 10:59 AM Daniel Mckinnell via petsc-users <
> petsc-users at mcs.anl.gov> wrote:
>
> Hi,
> Attached is a way I came up with to access data in a global vector, is
> this the best way to do this or are there other ways? It would seem
> intuitive to use the global PetscSection and VecGetValuesSection but this
> doesn't seem to work on global vectors.
>
> Instead I have used VecGetValues and VecSetValues, however I also have a
> problem with these when extracting more than one value, I initialise the
> output of VecGetValues as PetscScalar *values; and then call VecGetValues(Other
> stuff... , values). This seems to work some times and not others and I
> can't find any rhyme or reason to it?
>
>
> I guess I should write something about this. I like to think of it as a
> sort of decision tree.
>
> 1) Get just local values, meaning those owned by this process
>
>     These can be obtained from either a local or global vector.
>
> 2) Get ghosted values, meaning those values lying on unowned points that
> exist in the default PetscSF
>
>     These can only get obtained from a local vector
>
> 3) Get arbitrary values
>
>     You must use a VecScatter or custom PetscSF to get these
>
> For 1) and 2), I think the best way to get values normally is to use
>
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/DMPlexPointLocalRef.html
>
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/DMPlexPointGlobalRef.html
>
> These also have Read versions, and Field version to split off a particular
> field in the Section.
>
>   Does this help?
>
>     Thanks,
>
>       Matt
>
>
> Finally I was wondering if there is a good reference code base on Github
> including DMPlex that would be helpful in viewing applications of the
> DMPlex functions?
> Thanks,
> Daniel Mckinnell
>
>
>
> --
> 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/>
>
>
>
> --
> 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/>
>
>
>
> --
> 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/>
>


-- 
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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190819/2ba0c739/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tester.c
Type: application/octet-stream
Size: 2773 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190819/2ba0c739/attachment-0001.obj>


More information about the petsc-users mailing list