首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用FEniCS求解热方程

用FEniCS求解热方程
EN

Stack Overflow用户
提问于 2018-08-09 17:55:09
回答 2查看 3.1K关注 0票数 7

当我运行失败的热方程代码时,我在FEniCS中遇到了一个编码错误,

error = np.abs(u_e.vector().array() - u.vector().array()) AttributeError: 'dolfin.cpp.la.PETScVector' object has no attribute 'array’

我相信这个想法是计算u和每个时间级别的精确解之间的差值,并将它们放入数组中,然后我们将取最大值。(如果不是,请纠正我!)

计算误差的原始代码是

代码语言:javascript
复制
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是边界条件。

我不确定我如何才能使它的工作,所以任何建议,从您将不胜感激。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2019-07-25 09:20:34

根据罗比的评论,get_local()已经取代了array()。因此,在third fenics tutorial的第62-65行中,执行以下操作:

代码语言:javascript
复制
    # 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))
票数 0
EN

Stack Overflow用户

发布于 2020-04-02 16:38:15

我建议使用来自numpy模块的转换,以防您需要更轻量级的表示法:

代码语言:javascript
复制
u_v = numpy.array(u.vector())

或者,如果您希望保持原始变量的结构

代码语言:javascript
复制
u_v = u.vector()

我更喜欢第一种,因为我更习惯使用MatLab风格的向量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51763982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档