FEniCS中文翻译

网格间的插值

2019-03-29  本文已影响0人  马鹏飞_47c5

网格间的插值

这个例子展示了如何在两个不同的有限元空间之间插值。插值暂且不支持并行运算。 见 https://bitbucket.org/fenics-project/dolfin/issues/162

首先,导入dolfinmatplotlib 这两个包:

from dolfin import *
import matplotlib.pyplot as plt

然后,我们创建两套网格。在这个例子中,被创建的两套网格都是在单位正方形上的:

mesh0 = UnitSquareMesh(16, 16)
mesh1 = UnitSquareMesh(64, 64)

每一套网格上都可以生成一个有限元空间。不妨让粗糙网格上的是线性元,戏网格上的是三次元。

P1 = FunctionSpace(mesh0, "Lagrange", 1)
P3 = FunctionSpace(mesh1, "Lagrange", 3)

我们可以将函数 v=\sin(10x) \sin(10y)

v = Expression("sin(10.0*x[0])*sin(10.0*x[1])", degree=5)

P3空间上插值成v3

v3 = Function(P3)
v3.interpolate(v)

接着又把 v3P1 上插值成 v1​ :

v1 = Function(P1)
v1.interpolate(v3)

最后我们可以用plot函数看看被插值出来的v3v1:

plt.figure()
plot(v3, title='v3')

plt.figure()
plot(v1, title='v1')

plt.show()

2019-03-29

上一篇 下一篇

猜你喜欢

热点阅读