스파 스 행렬 인수 분해 함수 (MatICCFactor)를 사용하기 위해 c/C++에서 petsc를 사용하는 방법을 배우고 있습니다. 내가 한 첫 번째 단계는 petsc에 장난감 행렬을 읽어서 희소 행렬을 만들고 그 행렬을보기 전에 행렬을 보는 것입니다. 저는 초보자 인 c/C++ 코딩 BTW입니다. 여기 내가 사용하는 코드입니다 :Petsc 라이브러리를 사용하여 벡터로 희소 행렬을 구성하십시오.
static char help[] = "Tests Petscmat functions.\n\n";
#include<petscmat.h>
#include <petscsys.h>
int main(int argc,char **args)
{
PetscInitialize(&argc,&args,(char*)0, help);
Mat *A;
PetscInt m = 3;
PetscInt n = 3;
//to build sparse matrix(CSR)
/*
* 1 0 0
* 2 0 3
* 4 5 6
*/
PetscInt Iv[4]={0,1,3,6}; //i vec size nrow+1
PetscInt Jv[6]={0,0,2,0,1,2}; //j vec size nnz
PetscScalar vv[6]={1,2,3,4,5,6}; //v vec size nnz
PetscInt nzrv[3]={1,2,3}; // nnz per row
PetscViewer viewer;
//MatSeqAIJSetPreallocation(A,n,nzrv);//If nnz is given then nz is ignored
MatCreateSeqAIJWithArrays(PETSC_COMM_WORLD, m, n, Iv,Jv,vv, A);
MatView(A,viewer);
PetscViewerDestroy(&viewer);
MatDestroy(&A);
PetscFinalize();
return 0;
}
그것은 컴파일하지만 실행시 분할 위반이 발생합니다. 나는 MatView()이 세분화 오류의 근원이라는 것을 알았습니다. 누구든지 MatView를 올바르게 사용하는 방법에 대해 도움을 줄 수 있습니까?