#include "petscksp.h" /* A={1 2 3 4 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0 } */ int main(int argc, char ** argv) { Mat A; int m,n; static int d_nnz[4]={1,1,1,1},o_nnz[4]={1,1,1,1};// 1-room for diagonal entry int rank; PetscInitialize( &argc, &argv, 0, 0 ); MPI_Comm_rank(PETSC_COMM_WORLD,&rank); if(rank==0)// rank=0 { d_nnz[0]=4; } MatCreateMPIAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE, 8,6,PETSC_DEFAULT,d_nnz ,PETSC_DEFAULT, o_nnz, &A); MatGetLocalSize(A,&m,&n); printf("m=%d,n=%d\n",m,n); MatSetValue(A,0,0,1,INSERT_VALUES); MatSetValue(A,0,1,2,INSERT_VALUES); MatSetValue(A,0,2,3,INSERT_VALUES); MatSetValue(A,0,3,4,INSERT_VALUES); MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY); MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY); MatView(A,PETSC_VIEWER_STDOUT_WORLD); MatDestroy( A ); PetscFinalize( ); return 0; }