一千萬個為什麽

搜索

網格上的快速功能評估


我試圖在一大組點上計算一個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)來計算該頂點。

問題是這兩種方法都非常昂貴,而插值方法比顯式循環更耗時。有人知道是否有更有效的方法來完成這項工作?

非常感謝,

最佳答案

在網格之間移動時會有不可忽略的開銷(一些當前的發展會使這比現在更快)。您可以先插值,然後有效地使用函數 Function :: compute_vertex_values 來評估頂點值。對於不連續的空間,它可能會產生一些意想不到的結果。

轉載註明原文: 網格上的快速功能評估

猜你喜歡