我正在解决矩形 [-1,1]x[-1,1] 子集上的椭圆边值问题。域包含线段 x=0,但是它不需要是边界的一部分,因此默认情况下它不与小平面对齐。
我想计算跨线段 x=0 的解函数的通量。我从教程中知道如何计算边界元素上的通量。但是,我不确定在这种情况下是否需要将线作为边界元素。我也不确定如何插入它,因为简单地将线插入网格会导致自由度发生冲突,就像天真地将矩形粘合在一起一样。你能就如何计算这个通量提供任何建议吗?
我正在解决矩形 [-1,1]x[-1,1] 子集上的椭圆边值问题。域包含线段 x=0,但是它不需要是边界的一部分,因此默认情况下它不与小平面对齐。
我想计算跨线段 x=0 的解函数的通量。我从教程中知道如何计算边界元素上的通量。但是,我不确定在这种情况下是否需要将线作为边界元素。我也不确定如何插入它,因为简单地将线插入网格会导致自由度发生冲突,就像天真地将矩形粘合在一起一样。你能就如何计算这个通量提供任何建议吗?
确保网格与 x = 0 对齐。然后沿该线标记小平面并使用“内部小平面积分”计算通量。您可以通过提供一个构面函数来做到这一点,该函数markers(例如)用 标记这些构面,用 标记1其余构面0。然后计算通量
line_segment = AutoSubDomain(lambda x: near(x[0], 0))
markers = FacetFunction("size_t", mesh)
markers.set_all(0)
line_segment.mark(markers, 1)
dS = dS[markers]
flux = assemble(<expression for flux>*dS(1))
如果您使用像 一样的内置网格RectangleMesh,则很容易确保网格与线段对齐。如果您使用外部网格生成器,它应该支持在网格化时尊重您的线段。
正如 Anders 所说,Dolfin 中的 CSG 功能很快就能处理这个问题。如果您现在想尝试一下,请在此处获取代码:https ://bitbucket.org/benjamik/dolfin并查看名为benjamik/csg-2d. 看看demo/undocumented/csg/2d/python/demo_csg_2d.py。除此演示外,尚未记录该功能。
在将其合并到官方 dolfin 存储库之前,还有几个问题需要解决,但它们都不应该影响您的案例。