#include "petscmat.h" static char help[]="A demo program"; typedef struct{ PetscInt dim; // Dimensions PetscInt m; // Number of data points PetscInt maxnnz; // Maximum number of nonzeros in any row Mat data; // Store data } AppCtx; #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { AppCtx user; PetscErrorCode info; PetscViewer view; char bdata_path[PETSC_MAX_PATH_LEN]; PetscTruth bdata_flg; PetscScalar *vals; PetscInt *idxs; PetscInt zero=0; PetscInt one=1; user.m=20000000; // svnvish: BUGBUG // do not change these values user.dim=800; user.maxnnz=200; PetscInitialize(&argc,&args,(char *)0,help); info=PetscOptionsGetString(PETSC_NULL,"-data",bdata_path,PETSC_MAX_PATH_LEN-1,&bdata_flg);CHKERRQ(info); // Create data matrix info=MatCreate(PETSC_COMM_WORLD,&user.data);CHKERRQ(info); info=MatSetSizes(user.data,PETSC_DECIDE,PETSC_DECIDE,user.m,user.dim);CHKERRQ(info); info=MatSetFromOptions(user.data);CHKERRQ(info); info=MatSetType(user.data,MATMPIAIJ); info=PetscObjectSetName((PetscObject) user.data,"Data");CHKERRQ(info); info=PetscPrintf(PETSC_COMM_WORLD,"\n Create finished \n");CHKERRQ(info); // Allocate space PetscInt begin,end; info=MatGetOwnershipRange(user.data,&begin,&end);CHKERRQ(info); PetscInt locm=end-begin; PetscInt cbegin,cend; MatGetOwnershipRangeColumn(user.data,&cbegin,&cend);CHKERRQ(info); PetscInt *diag_nnz; PetscInt *offdiag_nnz; info=PetscMalloc(locm*sizeof(PetscInt),&diag_nnz); CHKERRQ(info); info=PetscMalloc(locm*sizeof(PetscInt),&offdiag_nnz); CHKERRQ(info); for (PetscInt ii=0; ii=cbegin && idx