我已经初始化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回.Vects
_DMDA_Vec_arrayPython 中用于Vec键入的等效协议/工作流是什么?