xref: /petsc/src/mat/tests/ex269f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
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