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.


Reply via email to