1 #include <petscmat.h> 2 #if defined(PETSC_HAVE_HDF5) 3 #include <petscviewerhdf5.h> 4 #endif 5 6 int main(int argc, char **argv) 7 { 8 PetscErrorCode ierr; 9 PetscReal dmat_norm[3], cmat_norm[3]; 10 PetscViewer inp_viewer; 11 Mat data_mat, corr_mat; 12 char file[PETSC_MAX_PATH_LEN],hdf5_name[PETSC_MAX_PATH_LEN]; 13 PetscBool flg; 14 15 ierr = PetscInitialize(&argc, &argv, NULL, NULL); CHKERRQ(ierr); 16 ierr = PetscOptionsGetString(NULL,NULL,"-f",file,sizeof(file),&flg);CHKERRQ(ierr); 17 if (!flg) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_USER,"Must indicate binary file with the -f option"); 18 ierr = PetscOptionsGetString(NULL,NULL,"-hdf5_name",hdf5_name,sizeof(hdf5_name),&flg);CHKERRQ(ierr); 19 /* Set up data matrix */ 20 ierr = MatCreate(PETSC_COMM_WORLD, &data_mat); CHKERRQ(ierr); 21 ierr = MatSetType(data_mat,MATDENSE); CHKERRQ(ierr); 22 if (flg) { 23 ierr = PetscObjectSetName((PetscObject)data_mat, hdf5_name); CHKERRQ(ierr); 24 ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD, file, FILE_MODE_READ, &inp_viewer); CHKERRQ(ierr); 25 } else { 26 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &inp_viewer); CHKERRQ(ierr); 27 } 28 ierr = MatLoad(data_mat, inp_viewer); CHKERRQ(ierr); 29 ierr = PetscViewerDestroy(&inp_viewer); CHKERRQ(ierr); 30 ierr = MatAssemblyBegin(data_mat, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); 31 ierr = MatAssemblyEnd(data_mat, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); 32 ierr = MatViewFromOptions(data_mat, NULL, "-view_mat");CHKERRQ(ierr); 33 34 ierr = MatNorm(data_mat, NORM_1, &dmat_norm[0]); CHKERRQ(ierr); 35 ierr = MatNorm(data_mat, NORM_INFINITY, &dmat_norm[1]); CHKERRQ(ierr); 36 ierr = MatNorm(data_mat, NORM_FROBENIUS, &dmat_norm[2]); CHKERRQ(ierr); 37 ierr = PetscPrintf(PETSC_COMM_WORLD, "Data matrix norms: %g %g %g\n", (double)dmat_norm[0],(double)dmat_norm[1],(double)dmat_norm[2]); CHKERRQ(ierr); 38 39 /* compute autocorrelation matrix */ 40 ierr = MatMatTransposeMult(data_mat, data_mat, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &corr_mat); CHKERRQ(ierr); 41 42 ierr = MatNorm(corr_mat, NORM_1, &cmat_norm[0]); CHKERRQ(ierr); 43 ierr = MatNorm(corr_mat, NORM_INFINITY, &cmat_norm[1]); CHKERRQ(ierr); 44 ierr = MatNorm(corr_mat, NORM_FROBENIUS, &cmat_norm[2]); CHKERRQ(ierr); 45 ierr = PetscPrintf(PETSC_COMM_WORLD, "Autocorrelation matrix norms: %g %g %g\n", (double)cmat_norm[0],(double)cmat_norm[1],(double)cmat_norm[2]); CHKERRQ(ierr); 46 47 ierr = MatDestroy(&data_mat); CHKERRQ(ierr); 48 ierr = MatDestroy(&corr_mat); CHKERRQ(ierr); 49 ierr = PetscFinalize(); CHKERRQ(ierr); 50 } 51