Date: 2022-03-31T04:47:20+00:00

Actual source code: ex10.c

      2: static char help[] = "Reads a PETSc matrix and computes the 2 norm of the columns\n\n";

      4: /*T
      5:    Concepts: Mat^loading a binary matrix;
      6:    Processors: n
      7: T*/

      9: /*
     10:   Include "petscmat.h" so that we can use matrices.
     11:   automatically includes:
     12:      petscsys.h       - base PETSc routines   petscvec.h    - vectors
     13:      petscmat.h    - matrices
     14:      petscis.h     - index sets            petscviewer.h - viewers
     15: */
     16: #include <petscmat.h>

     18: int main(int argc,char **args)
     19: {
     20:   Mat            A;                       /* matrix */
     21:   PetscViewer    fd;                      /* viewer */
     22:   char           file[PETSC_MAX_PATH_LEN];            /* input file name */
     23:   PetscReal      *norms;
     24:   PetscInt       n,cstart,cend;
     25:   PetscBool      flg;
     26:   PetscViewerFormat format;

     28:   PetscInitialize(&argc,&args,(char*)0,help);
     29:   /*
     30:      Determine files from which we read the matrix
     31:   */
     32:   PetscOptionsGetString(NULL,NULL,"-f",file,sizeof(file),&flg);

     35:   /*
     36:      Open binary file.  Note that we use FILE_MODE_READ to indicate
     37:      reading from this file.
     38:   */
     39:   PetscViewerCreate(PETSC_COMM_WORLD,&fd);
     40:   PetscViewerSetType(fd,PETSCVIEWERBINARY);
     41:   PetscViewerSetFromOptions(fd);
     42:   PetscOptionsGetEnum(NULL,NULL,"-viewer_format",PetscViewerFormats,(PetscEnum*)&format,&flg);
     43:   if (flg) PetscViewerPushFormat(fd,format);
     44:   PetscViewerFileSetMode(fd,FILE_MODE_READ);
     45:   PetscViewerFileSetName(fd,file);

     47:   /*
     48:     Load the matrix; then destroy the viewer.
     49:     Matrix type is set automatically but you can override it by MatSetType() prior to MatLoad().
     50:     Do that only if you really insist on the given type.
     51:   */
     52:   MatCreate(PETSC_COMM_WORLD,&A);
     53:   MatSetOptionsPrefix(A,"a_");
     54:   PetscObjectSetName((PetscObject) A,"A");
     55:   MatSetFromOptions(A);
     56:   MatLoad(A,fd);
     57:   PetscViewerDestroy(&fd);

     59:   MatGetSize(A,NULL,&n);
     60:   MatGetOwnershipRangeColumn(A,&cstart,&cend);
     61:   PetscMalloc1(n,&norms);
     62:   MatGetColumnNorms(A,NORM_2,norms);
     63:   PetscRealView(cend-cstart,norms+cstart,PETSC_VIEWER_STDOUT_WORLD);
     64:   PetscFree(norms);

     66:   PetscObjectPrintClassNamePrefixType((PetscObject)A,PETSC_VIEWER_STDOUT_WORLD);
     67:   MatGetOption(A,MAT_SYMMETRIC,&flg);
     68:   PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"MAT_SYMMETRIC: %" PetscInt_FMT "\n",(PetscInt)flg);
     69:   MatViewFromOptions(A,NULL,"-mat_view");

     71:   MatDestroy(&A);
     72:   PetscFinalize();
     73:   return 0;
     74: }

     76: /*TEST

     78:    test:
     79:       suffix: mpiaij
     80:       nsize: 2
     81:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
     82:       args: -f ${DATAFILESPATH}/matrices/small -a_mat_type mpiaij
     83:       args: -a_matload_symmetric

     85:    test:
     86:       suffix: mpiaij_hdf5
     87:       nsize: 2
     88:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
     89:       args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
     90:       args: -a_matload_symmetric

     92:    test:
     93:       suffix: mpiaij_rect_hdf5
     94:       nsize: 2
     95:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
     96:       args: -f ${DATAFILESPATH}/matrices/matlab/small_rect.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat

     98:    test:
     99:       # test for more processes than rows
    100:       suffix: mpiaij_hdf5_tiny
    101:       nsize: 8
    102:       requires: double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    103:       args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/tiny_system_with_x0.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
    104:       args: -a_matload_symmetric

    106:    test:
    107:       # test for more processes than rows, complex
    108:       TODO: not yet implemented for MATLAB complex format
    109:       suffix: mpiaij_hdf5_tiny_complex
    110:       nsize: 8
    111:       requires: double complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    112:       args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/tiny_system_with_x0_complex.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
    113:       args: -a_matload_symmetric

    115:    test:
    116:       TODO: mpibaij not supported yet
    117:       suffix: mpibaij_hdf5
    118:       nsize: 2
    119:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    120:       args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type mpibaij -a_mat_block_size 2 -viewer_type hdf5 -viewer_format hdf5_mat
    121:       args: -a_matload_symmetric

    123:    test:
    124:       suffix: mpidense
    125:       nsize: 2
    126:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
    127:       args: -f ${DATAFILESPATH}/matrices/small -a_mat_type mpidense
    128:       args: -a_matload_symmetric

    130:    test:
    131:       suffix: seqaij
    132:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
    133:       args: -f ${DATAFILESPATH}/matrices/small -a_mat_type seqaij
    134:       args: -a_matload_symmetric

    136:    test:
    137:       suffix: seqaij_hdf5
    138:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    139:       args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type seqaij -viewer_type hdf5 -viewer_format hdf5_mat
    140:       args: -a_matload_symmetric

    142:    test:
    143:       suffix: seqaij_rect_hdf5
    144:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    145:       args: -f ${DATAFILESPATH}/matrices/matlab/small_rect.mat -a_mat_type seqaij -viewer_type hdf5 -viewer_format hdf5_mat

    147:    test:
    148:       suffix: seqdense
    149:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
    150:       args: -f ${DATAFILESPATH}/matrices/small -a_mat_type seqdense
    151:       args: -a_matload_symmetric

    153:    test:
    154:       suffix: seqdense_hdf5
    155:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    156:       args: -f ${DATAFILESPATH}/matrices/matlab/small_dense.mat -a_mat_type seqdense -viewer_type hdf5 -viewer_format hdf5_mat
    157:       args: -a_matload_symmetric

    159:    test:
    160:       suffix: seqdense_rect_hdf5
    161:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    162:       args: -f ${DATAFILESPATH}/matrices/matlab/small_rect_dense.mat -a_mat_type seqdense -viewer_type hdf5 -viewer_format hdf5_mat

    164:    test:
    165:       suffix: mpidense_hdf5
    166:       nsize: 2
    167:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    168:       args: -f ${DATAFILESPATH}/matrices/matlab/small_dense.mat -a_mat_type mpidense -viewer_type hdf5 -viewer_format hdf5_mat
    169:       args: -a_matload_symmetric

    171:    test:
    172:       suffix: mpidense_rect_hdf5
    173:       nsize: 2
    174:       requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
    175:       args: -f ${DATAFILESPATH}/matrices/matlab/small_rect_dense.mat -a_mat_type mpidense -viewer_type hdf5 -viewer_format hdf5_mat
    176: TEST*/