PETSc中不规则形状的结构化网格(DM上下文)

PETSc中不规则形状的结构化网格(DM上下文),c,matrix,fortran,petsc,C,Matrix,Fortran,Petsc,我在PETSc中的结构化网格中有一个有限差分问题,DM上下文帮助我非常容易地创建矩阵,DM给我一个矩形域的完整矩阵,这对我很好,因为我使用了这个参考系,但我的问题中有一个不规则的形状,这意味着我没有在这个矩阵中使用很多条目。我如何才能不在矩阵集合中分配此空间,并告诉KSP上下文不要使用此项来解决问题 我的代码是这样的: DMDACreate2d() DMCreateMatrix() DMDAGetCorners() ! loop along the local matrix DO i,1,wi

我在
PETSc
中的结构化网格中有一个有限差分问题,
DM
上下文帮助我非常容易地创建矩阵,
DM
给我一个矩形域的完整矩阵,这对我很好,因为我使用了这个参考系,但我的问题中有一个不规则的形状,这意味着我没有在这个矩阵中使用很多条目。我如何才能不在矩阵集合中分配此空间,并告诉
KSP
上下文不要使用此项来解决问题

我的代码是这样的:

DMDACreate2d()
DMCreateMatrix()
DMDAGetCorners()

! loop along the local matrix
DO i,1,width_y 
    DO i,1,width_y
        IF (IsInsideProblemDomian) THEN
            SetMatStencil()
            MatSetValuesStencil()
        END IF
    END DO
END DO

MatAssemblyBegin()
MatAssemblyBegin()

解决这个问题的简单方法是将矩阵的相应条目设置为恒等式,即在对角线中设置1,在直线的其他位置设置0。为了减少为矩阵分配的空间,可以使用该函数代替
DMCreateMatrix()
。petsc-3.5.2/src/dm/impls/da/dapreallocate.c中的
DMDAPreallocateOperator()
的实现可以为此进行修改。使用标记可以获得更多关注。当版本在问题中不起作用时,不要使用它们!