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;

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

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

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

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

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

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

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

 60: /*TEST

 62:   test:
 63:     nsize: 2

 65: TEST*/