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