我正在尝试在大量点上计算 3D 函数 f,例如均匀的立方网格。此外,三次网格点与定义函数 f 的网格顶点不重合。例如:
from dolfin import *
mesh1 = Mesh( meshfile) # A uniform mesh
V1 = FunctionSpace(mesh1, 'CG', 1)
f1 = Function(V1)
f1 = ... # Construct f1 (e.g. by solving a PDE based on mesh1)
mesh2 = UnitCube(100,100,100) # Geometrically, the unit cube domain is a subset of mesh1's domain
现在我想计算mesh2所有顶点的f1值。
我知道我可以使用插值函数:
V2 = FunctionSpace(mesh2, ‘CG', 1)
f2 = interpolate(f1, V2)
然后 f2.vector().array() 给我这些值(尽管我知道顺序与当前版本的网格顶点不同)。
或者我可以显式地循环 mesh2 的所有顶点,并在每一步调用 f1(x, y, z) 来计算该顶点。
问题是这两种方法都非常非常昂贵,并且 interpolate 方法比显式循环更耗时。有谁知道是否有更有效的方法来完成这项工作?
非常感谢,