hi,

I'm setting up a simple 1-D finite difference test problem with Dirichlet boundary conditions at each end, using DMDA.

I used DMDACreate1d() with the DM_BOUNDARY_GHOSTED option, and set the global array dimension to be the total number of nodes (including boundary nodes) minus 2- so the boundary nodes aren't included in the mesh.

When I'm evaluating the differential equation on this mesh, I use DMGetLocalVector() and DMGlobalToLocalBegin/End() to scatter to my ghosted vector, then DMDAVecGetArray() to get an array on the local vector.

When I want to apply the BCs at each end, I call DMDAGetGhostCorners() to find the indices of the ghost points. I can now plug the required boundary values into my array.

At present, if I'm running on multiple processors, I'm just checking if rank=0 or rank=size-1 to make sure the BCs only get applied at the actual ends of the mesh, and not at the ends of the internal partitions as well.

This works, but is there a better way to do it? It seems potentially unreliable- as it assumes rank 0 is always the left hand end and rank size-1 always the right-hand end. Also it won't really work in 2D or 3D.

Thanks!

- Adrian

--
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: [email protected]
tel: +64 (0)9 923 84611

Reply via email to