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 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 PetscCallA(MatDestroy(Id,ierr)) 36 PetscCallA(VecDestroy(v,ierr)) 37 PetscCallA(VecDestroy(w,ierr)) 38 PetscCallA(MatDestroy(D,ierr)) 39 PetscCallA(MatDestroy(A,ierr)) 40 PetscCallA(PetscFinalize(ierr)) 41 42end program 43 44!/*TEST 45! 46! test: 47! nsize: 2 48! 49!TEST*/ 50