我已经初始化ts = PETSc.TS().create()
并尝试通过一些初始分布来解决ts.setSolution(u)
并得到一个类型错误。
似乎它想要该类型Vec
,但作为_DMDA_Vec_array
.
设置如下:
- 创造
dmda = PETSc.DMDA().create(<...>)
- 创建一个全局向量
x = dmda.createGlobalVec()
- 得到我们的 IC 向量:
ic = dmda.getVecArray(x)
- 填充 IC 矢量
- 尝试
ts.setSolution(ic)
但它不喜欢那ic
是一个_DMDA_Vec_array
对象
到目前为止,我发现了两件事:
ic = dmda.getVecArray(x)
正在做它应该做的——创建一个_DMDA_Vec_array
对象- 在常规 PETSc 中,等效于使用该函数
DMDAVecGetArray()
,然后在填充值后,运行该函数DMDAVecRestoreArray()
将对象转换_DMDA_Vec_array
回.Vec
ts
_DMDA_Vec_array
Python 中用于Vec
键入的等效协议/工作流是什么?