我对 fenics 比较陌生,我只是查看了与 Dirichlet 边界条件相关的所有问题。对于我要问的问题,我似乎没有找到一个描述清楚的问题或答案。
我正在解决一个 PDE 约束的优化问题,并且我在我的网格的所有节点上定义了来自实验的“测量数据”。我想将部分“测量数据”施加到我的 Dirichlet 边界条件,并将 0 Neumann 边界条件施加到未指定“测量数据”的节点。
经过一番阅读,我想我可以将这个“测量数据”与网格一起作为网格数据或网格函数读取,因为它是在网格节点上定义的。这似乎是可能的,尽管我还没有弄清楚如何准确地做到这一点。
但是即使加载了“测量数据”,我仍然不知道如何将它们作为狄利克雷边界条件施加在部分边界节点上,并为其余边界节点施加 0 Neumann bc。逐点应用它们似乎效率很低。标记子域似乎不太适用于这种情况。
例如,就我而言,我想要一个与坐标x大小相同的数组measureData,这样我就可以执行以下操作:
mesh = UnitSquareMesh(3,2)
V = VectorFunctionSpace(mesh,"CG",1)
measD0 = Expression("measuredData[0]")
measD1 = Expression("measuredData[1]")
bc0 = DirichletBC(V.sub(0), measD0, on_boundary)
bc1 = DirichletBC(V.sub(1), measD1, on_boundary)
但是现在我还没有想出一种方法来重载 Expression 以使其看到我的测量数据。
渴望听到有经验的fenics用户的意见!提前致谢!
更新:正如 Bill Barth 所澄清的,Dirichlet 边界连接良好,Neumann 边界也是如此。所以这个问题是适定的。