使用Petsc库构造具有向量的稀疏矩阵

weixin_38065208 2019-09-12 03:11:22

我正在学习在c/C++中使用petsc以便在其中使用稀疏矩阵分解函数(MatICCFactor)。我做的第一步是将玩具矩阵读入petsc中以创建一个稀疏矩阵并在我做任何事情之前查看矩阵。我是一个用c/C++编写的BTW初学者。 这里是我使用的代码: 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?






...全文
227 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38068996 2019-09-12
  • 打赏
  • 举报
回复

如果要在控制台中运行代码时查看矩阵,可以将MatView(Mat, PETSC_VIEWER_STDOUT_SELF)用于顺序矩阵,或将MatView(Mat, PETSC_VIEWER_STDOUT_WORLD)用于并行矩阵。 如果你想使用自己的浏览器背景下,程序应该是这样的: PetscViewer viewer; char matrixOutputFile[PETSC_MAX_PATH_LEN];//output file name PetscViewerBinaryOpen(PETSC_COMM_WORLD,matrixOutputFile,FILE_MODE_WRITE,&viewer); PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_INFO_DETAIL); MatView(A,viewer); PetscViewerDestroy(&viewer); 以上代码将矩阵存储到一个二进制文件的PetscViewerBinaryOpen。而且,PetscViewerASCIIOpen()可用于存储ASCII格式的矩阵,PetscViewerDrawOpen()可用于在X窗口显示中显示矩阵,并且PetscViewerSocketOpen()可以将矩阵输出到Socket查看器。

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧