static char help[] = "Tests MatConvert(), MatLoad() for MATSCALAPACK interface.\n\n"; /* Example: mpiexec -n ./ex244 -fA -fB -orig_mat_type -orig_mat_type */ #include int main(int argc,char **args) { Mat A,Ae,B,Be; PetscErrorCode ierr; PetscViewer view; char file[2][PETSC_MAX_PATH_LEN]; PetscBool flg,flgB,isScaLAPACK,isDense,isAij,isSbaij; PetscScalar one = 1.0; PetscMPIInt rank,size; PetscInt M,N; ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); /* Load PETSc matrices */ CHKERRQ(PetscOptionsGetString(NULL,NULL,"-fA",file[0],PETSC_MAX_PATH_LEN,NULL)); CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,file[0],FILE_MODE_READ,&view)); CHKERRQ(MatCreate(PETSC_COMM_WORLD,&A)); CHKERRQ(MatSetOptionsPrefix(A,"orig_")); CHKERRQ(MatSetType(A,MATAIJ)); CHKERRQ(MatSetFromOptions(A)); CHKERRQ(MatLoad(A,view)); CHKERRQ(PetscViewerDestroy(&view)); PetscOptionsGetString(NULL,NULL,"-fB",file[1],PETSC_MAX_PATH_LEN,&flgB); if (flgB) { CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,file[1],FILE_MODE_READ,&view)); CHKERRQ(MatCreate(PETSC_COMM_WORLD,&B)); CHKERRQ(MatSetOptionsPrefix(B,"orig_")); CHKERRQ(MatSetType(B,MATAIJ)); CHKERRQ(MatSetFromOptions(B)); CHKERRQ(MatLoad(B,view)); CHKERRQ(PetscViewerDestroy(&view)); } else { /* Create matrix B = I */ PetscInt rstart,rend,i; CHKERRQ(MatGetSize(A,&M,&N)); CHKERRQ(MatGetOwnershipRange(A,&rstart,&rend)); CHKERRQ(MatCreate(PETSC_COMM_WORLD,&B)); CHKERRQ(MatSetOptionsPrefix(B,"orig_")); CHKERRQ(MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,M,N)); CHKERRQ(MatSetType(B,MATAIJ)); CHKERRQ(MatSetFromOptions(B)); CHKERRQ(MatSetUp(B)); for (i=rstart; i