xref: /petsc/src/mat/tests/ex269f.F90 (revision 8bad1e52a5230170ceb435820affe35acd203afd)
1*8bad1e52SJose E. Roman! Test MatCreateNest() with NULL index sets
2*8bad1e52SJose E. Roman
3*8bad1e52SJose E. Romanprogram main
4*8bad1e52SJose E. Roman#include <petsc/finclude/petscmat.h>
5*8bad1e52SJose E. Romanuse petscmat
6*8bad1e52SJose E. Romanimplicit none
7*8bad1e52SJose E. Roman
8*8bad1e52SJose E. Roman  Mat                   :: A,D,Id
9*8bad1e52SJose E. Roman  Mat,dimension(4)      :: mats
10*8bad1e52SJose E. Roman  Vec                   :: v,w
11*8bad1e52SJose E. Roman  PetscInt              :: i,rstart,rend
12*8bad1e52SJose E. Roman  PetscInt,parameter    :: n=6,nb=2
13*8bad1e52SJose E. Roman  PetscScalar,parameter :: one=1.0, two=2.0
14*8bad1e52SJose E. Roman  PetscErrorCode        :: ierr
15*8bad1e52SJose E. Roman
16*8bad1e52SJose E. Roman  PetscCallA(PetscInitialize(ierr))
17*8bad1e52SJose E. Roman
18*8bad1e52SJose E. Roman  PetscCallA(MatCreateConstantDiagonal(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,n,n,one,Id,ierr))
19*8bad1e52SJose E. Roman  PetscCallA(MatCreateVecs(Id,v,w,ierr))
20*8bad1e52SJose E. Roman  PetscCallA(VecGetOwnershipRange(v,rstart,rend,ierr))
21*8bad1e52SJose E. Roman  do i=rstart,rend-1
22*8bad1e52SJose E. Roman    PetscCallA(VecSetValue(v,i,two/(i+1),INSERT_VALUES,ierr))
23*8bad1e52SJose E. Roman  end do
24*8bad1e52SJose E. Roman  PetscCallA(VecAssemblyBegin(v,ierr))
25*8bad1e52SJose E. Roman  PetscCallA(VecAssemblyEnd(v,ierr))
26*8bad1e52SJose E. Roman  PetscCallA(MatCreateDiagonal(v,D,ierr))
27*8bad1e52SJose E. Roman
28*8bad1e52SJose E. Roman  mats(1) = PETSC_NULL_MAT
29*8bad1e52SJose E. Roman  mats(2) = D
30*8bad1e52SJose E. Roman  mats(3) = Id
31*8bad1e52SJose E. Roman  mats(4) = PETSC_NULL_MAT
32*8bad1e52SJose E. Roman  PetscCallA(MatCreateNest(PETSC_COMM_WORLD,nb,PETSC_NULL_IS_ARRAY,nb,PETSC_NULL_IS_ARRAY,mats,A,ierr))
33*8bad1e52SJose E. Roman  PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))
34*8bad1e52SJose E. Roman
35*8bad1e52SJose E. Roman  PetscCallA(MatDestroy(Id,ierr))
36*8bad1e52SJose E. Roman  PetscCallA(VecDestroy(v,ierr))
37*8bad1e52SJose E. Roman  PetscCallA(VecDestroy(w,ierr))
38*8bad1e52SJose E. Roman  PetscCallA(MatDestroy(D,ierr))
39*8bad1e52SJose E. Roman  PetscCallA(MatDestroy(A,ierr))
40*8bad1e52SJose E. Roman  PetscCallA(PetscFinalize(ierr))
41*8bad1e52SJose E. Roman
42*8bad1e52SJose E. Romanend program
43*8bad1e52SJose E. Roman
44*8bad1e52SJose E. Roman!/*TEST
45*8bad1e52SJose E. Roman!
46*8bad1e52SJose E. Roman!   test:
47*8bad1e52SJose E. Roman!      nsize: 2
48*8bad1e52SJose E. Roman!
49*8bad1e52SJose E. Roman!TEST*/
50