vectorizationpetsc

PETSc vectorize operations with neighboring vector values


I'm implementing finite difference algorithm from uFDTD book. Many FDM equations involve operations on adjoined vector elements. For example, an update equation for electric field

ez[m] = ez[m] + (hy[m] - hy[m-1]) * imp0

uses adjoined vector values hy[m] and hy[m-1].

How can I implement these operations in PETSc efficiently? Is there something beyond local vector loops and scatterers?


Solution

  • If my goal was efficiency, I would call a stencil engine. There are many many many papers, and sometimes even open source code, for example, Devito. The idea is that PETSc manages the data structure and parallelism. Then you can feed the local data brick to your favorite stencil computer.