【发布时间】:2021-03-01 20:07:34
【问题描述】:
我正在从uFDTD book 实施有限差分算法。许多 FDM 方程涉及对相邻向量元素的运算。 例如,电场的更新方程
ez[m] = ez[m] + (hy[m] - hy[m-1]) * imp0
使用相邻的向量值hy[m] 和hy[m-1]。
如何在 PETSc 中高效地实施这些操作?除了局部向量循环和scatterers之外还有什么东西吗?
【问题讨论】:
-
imp0是常量吗? -
@JacobFaib 是的,
imp0是不变的 -
而
m是一个时间步长,还是它正在遍历Vec的元素? -
@JacobFaib
ez和hy是相同大小的Vec向量。m是空间索引。没有时间索引,以前的时间步长会被新值覆盖。 -
执行此操作的最快方法是将
hy按摩成一个可以调用VecAXPY(ez,imp0,hy)的表单。我会在VecGhost中查看hy,因为这样可以省去您自己管理VecScatter的麻烦。请参阅this example 了解如何设置。
标签: vectorization petsc