当我运行失败的热方程代码时,我在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是边界条件。
我不确定如何使它起作用,因此您的任何建议都将不胜感激。
预先感谢
答案 0 :(得分:0)
根据roby的评论,<div class="card" style="width: 18rem;">
<img class="card-img-top" src=".../100px180/" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">Some quick example text</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
已替换为array()
。因此,在third fenics tutorial的第62-65行中,以下工作有效:
get_local()
答案 1 :(得分:0)
我建议采用numpy
模块中的转换,以备不时之需:
u_v = numpy.array(u.vector())
或者,如果您希望保留原始变量的结构
u_v = u.vector()
我更喜欢第一个,因为我对MatLab风格的矢量使用更为满意。