Actual source code: ex185.c

  1: static char help[] = "Tests MatCreateConstantDiagonal().\n"
  2: "\n";

  4: #include <petscmat.h>

  6: int main(int argc, char **args)
  7: {
  8:   Vec            X, Y;
  9:   Mat            A,B,Af;
 10:   PetscBool      flg;
 11:   PetscReal      xnorm,ynorm,anorm;

 13:   PetscInitialize(&argc,&args,(char*)0,help);

 15:   MatCreateConstantDiagonal(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,20,20,3.0,&A);
 16:   MatCreateVecs(A,&X,&Y);
 17:   MatView(A,PETSC_VIEWER_STDOUT_WORLD);

 19:   VecSetRandom(X,NULL);
 20:   VecNorm(X,NORM_2,&xnorm);
 21:   MatMult(A,X,Y);
 22:   VecNorm(Y,NORM_2,&ynorm);
 24:   MatShift(A,5.0);
 25:   MatScale(A,.5);
 26:   MatView(A,PETSC_VIEWER_STDOUT_WORLD);
 27:   MatNorm(A,NORM_FROBENIUS,&anorm);

 30:   /* Convert to AIJ (exercises MatGetRow/MatRestoreRow) */
 31:   MatConvert(A,MATAIJ,MAT_INITIAL_MATRIX,&B);
 32:   MatMultEqual(A,B,10,&flg);
 33:   if (!flg) PetscPrintf(PETSC_COMM_WORLD,"Error MatMult\n");
 34:   MatMultAddEqual(A,B,10,&flg);
 35:   if (!flg) PetscPrintf(PETSC_COMM_WORLD,"Error MatMultAdd\n");
 36:   MatMultTransposeEqual(A,B,10,&flg);
 37:   if (!flg) PetscPrintf(PETSC_COMM_WORLD,"Error MatMultTranspose\n");
 38:   MatMultTransposeAddEqual(A,B,10,&flg);
 39:   if (!flg) PetscPrintf(PETSC_COMM_WORLD,"Error MatMultTransposeAdd\n");

 41:   MatGetDiagonal(A,Y);
 42:   MatGetFactor(A,MATSOLVERPETSC,MAT_FACTOR_LU,&Af);
 43:   MatLUFactorSymbolic(Af,A,NULL,NULL,NULL);
 44:   MatLUFactorNumeric(Af,A,NULL);
 45:   MatSolve(Af,X,Y);
 46:   VecNorm(Y,NORM_2,&ynorm);

 49:   MatDestroy(&A);
 50:   MatDestroy(&B);
 51:   MatDestroy(&Af);
 52:   VecDestroy(&X);
 53:   VecDestroy(&Y);

 55:   PetscFinalize();
 56:   return 0;
 57: }

 59: /*TEST

 61:   test:
 62:     nsize: 2

 64: TEST*/