xref: /petsc/src/mat/tests/ex84.c (revision f478cf826ff59051c773fd5b4921eed764a46690)
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