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