Actual source code: ex212f.F90
1: !
2: ! Program to test recently added F90 features for Mat
3: !
4: program main
6: #include <petsc/finclude/petscmat.h>
7: use petscmat
8: implicit none
10: PetscErrorCode ierr
11: Mat A,B
12: Mat C,SC
13: MatNullSpace sp,sp1
14: PetscInt one,zero,rend
15: PetscScalar sone
16: Vec x,y
18: zero = 0
19: one = 1
20: sone = 1
21: PetscCallA(PetscInitialize(ierr))
23: PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr))
24: PetscCallA(MatCreate(PETSC_COMM_WORLD,B,ierr))
26: PetscCallA(MatGetNullSpace(A,sp,ierr))
27: PetscCheckA(sp .eq. PETSC_NULL_MATNULLSPACE,PETSC_COMM_SELF,PETSC_ERR_PLIB,'Matrix null space should not exist')
29: PetscCallA(MatSetNullSpace(A,PETSC_NULL_MATNULLSPACE,ierr))
30: PetscCallA(MatGetNullSpace(A,sp,ierr))
31: PetscCheckA(sp .eq. PETSC_NULL_MATNULLSPACE,PETSC_COMM_SELF,PETSC_ERR_PLIB,'Matrix null space should not exist')
33: PetscCallA(MatNullSpaceCreate(PETSC_COMM_WORLD,PETSC_TRUE,zero,PETSC_NULL_VEC,sp,ierr))
34: PetscCallA(MatSetNullSpace(A,sp,ierr))
35: PetscCallA(MatGetNullSpace(A,sp1,ierr))
36: PetscCheckA(sp1 .ne. PETSC_NULL_MATNULLSPACE,PETSC_COMM_SELF,PETSC_ERR_PLIB,'Matrix null space should not be null')
37: PetscCallA(MatNullSpaceDestroy(sp,ierr))
39: PetscCallA(MatCreateSeqDense(PETSC_COMM_WORLD,one,one,PETSC_NULL_SCALAR,C,ierr))
40: PetscCallA(MatSetValues(C,one,zero,one,zero,sone,INSERT_VALUES,ierr))
41: PetscCallA(MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY,ierr))
42: PetscCallA(MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY,ierr))
43: PetscCallA(MatCreateSchurComplement(C,C,C,C,PETSC_NULL_MAT,SC,ierr))
44: PetscCallA(MatGetOwnershipRange(SC,PETSC_NULL_INTEGER,rend,ierr))
45: PetscCallA(VecCreateSeq(PETSC_COMM_SELF,one,x,ierr))
46: PetscCallA(VecDuplicate(x,y,ierr))
47: PetscCallA(VecSetValues(x,one,zero,sone,INSERT_VALUES,ierr))
48: PetscCallA(VecAssemblyBegin(x,ierr))
49: PetscCallA(VecAssemblyEnd(x,ierr))
50: PetscCallA(MatMult(SC,x,y,ierr))
51: PetscCallA(VecView(y,PETSC_VIEWER_STDOUT_SELF,ierr))
52: PetscCallA(VecSetRandom(x,PETSC_NULL_RANDOM,ierr))
53: PetscCallA(VecView(x,PETSC_VIEWER_STDOUT_SELF,ierr))
55: PetscCallA(MatDestroy(SC,ierr))
56: PetscCallA(MatDestroy(C,ierr))
57: PetscCallA(VecDestroy(x,ierr))
58: PetscCallA(VecDestroy(y,ierr))
59: PetscCallA(MatDestroy(A,ierr))
60: PetscCallA(MatDestroy(B,ierr))
61: PetscCallA(PetscFinalize(ierr))
62: end
64: !/*TEST
65: !
66: ! test:
67: ! requires: !complex
68: !
69: !TEST*/