18bad1e52SJose E. Roman! Test MatCreateNest() with NULL index sets 28bad1e52SJose E. Roman#include <petsc/finclude/petscmat.h> 3*c5e229c2SMartin Diehlprogram main 48bad1e52SJose E. Roman use petscmat 58bad1e52SJose E. Roman implicit none 68bad1e52SJose E. Roman 7819cf653SJose E. Roman Mat :: A, D, Id, Acopy 88bad1e52SJose E. Roman Mat, dimension(4) :: mats 98bad1e52SJose E. Roman Vec :: v, w 108bad1e52SJose E. Roman PetscInt :: i, rstart, rend 118bad1e52SJose E. Roman PetscInt, parameter :: n = 6, nb = 2 128bad1e52SJose E. Roman PetscScalar, parameter :: one = 1.0, two = 2.0 138bad1e52SJose E. Roman PetscErrorCode :: ierr 148bad1e52SJose E. Roman 158bad1e52SJose E. Roman PetscCallA(PetscInitialize(ierr)) 168bad1e52SJose E. Roman 178bad1e52SJose E. Roman PetscCallA(MatCreateConstantDiagonal(PETSC_COMM_WORLD, PETSC_DETERMINE, PETSC_DETERMINE, n, n, one, Id, ierr)) 188bad1e52SJose E. Roman PetscCallA(MatCreateVecs(Id, v, w, ierr)) 198bad1e52SJose E. Roman PetscCallA(VecGetOwnershipRange(v, rstart, rend, ierr)) 208bad1e52SJose E. Roman do i = rstart, rend - 1 218bad1e52SJose E. Roman PetscCallA(VecSetValue(v, i, two/(i + 1), INSERT_VALUES, ierr)) 228bad1e52SJose E. Roman end do 238bad1e52SJose E. Roman PetscCallA(VecAssemblyBegin(v, ierr)) 248bad1e52SJose E. Roman PetscCallA(VecAssemblyEnd(v, ierr)) 258bad1e52SJose E. Roman PetscCallA(MatCreateDiagonal(v, D, ierr)) 268bad1e52SJose E. Roman 2758ad77e8SBarry Smith mats = [PETSC_NULL_MAT, D, Id, PETSC_NULL_MAT] 288bad1e52SJose E. Roman PetscCallA(MatCreateNest(PETSC_COMM_WORLD, nb, PETSC_NULL_IS_ARRAY, nb, PETSC_NULL_IS_ARRAY, mats, A, ierr)) 298bad1e52SJose E. Roman PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)) 3058ad77e8SBarry Smith PetscCallA(MatNestSetSubMats(A, nb, PETSC_NULL_IS_ARRAY, nb, PETSC_NULL_IS_ARRAY, mats, ierr)) 3158ad77e8SBarry Smith PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)) 328bad1e52SJose E. Roman 33819cf653SJose E. Roman ! test MatCopy() 34819cf653SJose E. Roman PetscCallA(MatDuplicate(A, MAT_DO_NOT_COPY_VALUES, Acopy, ierr)) 35819cf653SJose E. Roman PetscCallA(MatCopy(A, Acopy, DIFFERENT_NONZERO_PATTERN, ierr)) 36819cf653SJose E. Roman 37819cf653SJose E. Roman PetscCallA(MatDestroy(Acopy, ierr)) 388bad1e52SJose E. Roman PetscCallA(MatDestroy(Id, ierr)) 398bad1e52SJose E. Roman PetscCallA(VecDestroy(v, ierr)) 408bad1e52SJose E. Roman PetscCallA(VecDestroy(w, ierr)) 418bad1e52SJose E. Roman PetscCallA(MatDestroy(D, ierr)) 428bad1e52SJose E. Roman PetscCallA(MatDestroy(A, ierr)) 438bad1e52SJose E. Roman PetscCallA(PetscFinalize(ierr)) 448bad1e52SJose E. Roman 458bad1e52SJose E. Romanend program 468bad1e52SJose E. Roman 478bad1e52SJose E. Roman!/*TEST 488bad1e52SJose E. Roman! 498bad1e52SJose E. Roman! test: 508bad1e52SJose E. Roman! nsize: 2 518bad1e52SJose E. Roman! 528bad1e52SJose E. Roman!TEST*/ 53