当我运行热方程代码时,我在 FEniCS 中遇到编码错误,它失败了,
error = np.abs(u_e.vector().array() - u.vector().array())
AttributeError: 'dolfin.cpp.la.PETScVector' object has no attribute 'array’
我相信这个想法是计算您与每个时间级别的确切解决方案之间的差异并将它们放在数组中,然后我们将采用最大值。(如果没有,请纠正我!
用于计算错误的原始代码是
u_e = interpolate(u_D, V)
error = np.abs(u_e.vector().array() - u.vector().array()).max()
print('t = %.2f: error = %.3g' % (t, error))
其中u_D是边界条件。
我不确定我如何让它工作,所以您的任何建议将不胜感激。
提前致谢
根据 roby 的评论,array()
已被替换为get_local()
。因此,在第三个 fenics 教程的第 62-65 行中,以下内容有效:
# Compute error at vertices
u_e = interpolate(u_D, V)
error = np.abs(u_e.vector().get_local() - u.vector().get_local()).max()
print('t = %.2f: error = %.3g' % (t, error))
我建议使用numpy
模块的转换,以防您想要更轻的符号:
u_v = numpy.array(u.vector())
或者,如果您希望保持原始变量的结构
u_v = u.vector()
我更喜欢第一个,因为我对 MatLab 风格的矢量使用更舒适。