当我运行失败的热方程代码时,我在FEniCS中遇到了一个编码错误,
error = np.abs(u_e.vector().array() - u.vector().array()) AttributeError: 'dolfin.cpp.la.PETScVector' object has no attribute 'array’
我相信这个想法是计算u和每个时间级别的精确解之间的差值,并将它们放入数组中,然后我们将取最大值。(如果不是,请纠正我!)
计算误差的原始代码是
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是边界条件。
我不确定我如何才能使它的工作,所以任何建议,从您将不胜感激。
提前感谢
发布于 2019-07-25 09:20:34
根据罗比的评论,get_local()已经取代了array()。因此,在third fenics tutorial的第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))发布于 2020-04-02 16:38:15
我建议使用来自numpy模块的转换,以防您需要更轻量级的表示法:
u_v = numpy.array(u.vector())或者,如果您希望保持原始变量的结构
u_v = u.vector()我更喜欢第一种,因为我更习惯使用MatLab风格的向量。
https://stackoverflow.com/questions/51763982
复制相似问题