On 4/5/14 1:41 AM, TAY wee-beng wrote:
Hi,
Supposed, I use DM to construct my grid. I would like to know if DM
can be used to update the ghost values easily?
If I can use staggered grid, does it mean I have to create 3 DM grids
(x,y,z)?
Yes this is how I do it currently. But this is not optimal, because you
have to scatter to ghost points four times (vx, vy, vz, p separately).
Just do it this way to start with, because by far it's the simplest
implementation.
Alternatively you can create 2 distributed vectors, the one that
contains non-overlapping partitioning of the grid points (to setup SNES,
KSP, PC), and another overlapping one that contains all ghost points you
need to compute your residual/Jacobian. Depending on the problem you
solve this can be either star or box stencil (for each solution component).
Then setup scatter context.
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterCreate.html
You can reuse the same context for both accessing off-processor values
and residual assembly, just need to change scatter mode SCATTER_FORWARD
/ SCATTER_REVERSE and insert mode ADD_VALUES / INSERT_VALUES
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterBegin.html
Anton
Also, how can I solve the momentum eqn involving u,v,w using KSP?
What examples can I follow for the above requirements?
Thank you.