xref: /petsc/src/mat/tests/ex269f.F90 (revision 819cf653bacb92c3fb3a24b79217d8cfbf52cff3)
18bad1e52SJose E. Roman! Test MatCreateNest() with NULL index sets
28bad1e52SJose E. Roman
38bad1e52SJose E. Romanprogram main
48bad1e52SJose E. Roman#include <petsc/finclude/petscmat.h>
58bad1e52SJose E. Romanuse petscmat
68bad1e52SJose E. Romanimplicit none
78bad1e52SJose E. Roman
8*819cf653SJose E. Roman  Mat                   :: A,D,Id,Acopy
98bad1e52SJose E. Roman  Mat,dimension(4)      :: mats
108bad1e52SJose E. Roman  Vec                   :: v,w
118bad1e52SJose E. Roman  PetscInt              :: i,rstart,rend
128bad1e52SJose E. Roman  PetscInt,parameter    :: n=6,nb=2
138bad1e52SJose E. Roman  PetscScalar,parameter :: one=1.0, two=2.0
148bad1e52SJose E. Roman  PetscErrorCode        :: ierr
158bad1e52SJose E. Roman
168bad1e52SJose E. Roman  PetscCallA(PetscInitialize(ierr))
178bad1e52SJose E. Roman
188bad1e52SJose E. Roman  PetscCallA(MatCreateConstantDiagonal(PETSC_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE,n,n,one,Id,ierr))
198bad1e52SJose E. Roman  PetscCallA(MatCreateVecs(Id,v,w,ierr))
208bad1e52SJose E. Roman  PetscCallA(VecGetOwnershipRange(v,rstart,rend,ierr))
218bad1e52SJose E. Roman  do i=rstart,rend-1
228bad1e52SJose E. Roman    PetscCallA(VecSetValue(v,i,two/(i+1),INSERT_VALUES,ierr))
238bad1e52SJose E. Roman  end do
248bad1e52SJose E. Roman  PetscCallA(VecAssemblyBegin(v,ierr))
258bad1e52SJose E. Roman  PetscCallA(VecAssemblyEnd(v,ierr))
268bad1e52SJose E. Roman  PetscCallA(MatCreateDiagonal(v,D,ierr))
278bad1e52SJose E. Roman
288bad1e52SJose E. Roman  mats(1) = PETSC_NULL_MAT
298bad1e52SJose E. Roman  mats(2) = D
308bad1e52SJose E. Roman  mats(3) = Id
318bad1e52SJose E. Roman  mats(4) = PETSC_NULL_MAT
328bad1e52SJose E. Roman  PetscCallA(MatCreateNest(PETSC_COMM_WORLD,nb,PETSC_NULL_IS_ARRAY,nb,PETSC_NULL_IS_ARRAY,mats,A,ierr))
338bad1e52SJose E. Roman  PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))
348bad1e52SJose E. Roman
35*819cf653SJose E. Roman  ! test MatCopy()
36*819cf653SJose E. Roman  PetscCallA(MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,Acopy,ierr))
37*819cf653SJose E. Roman  PetscCallA(MatCopy(A,Acopy,DIFFERENT_NONZERO_PATTERN,ierr))
38*819cf653SJose E. Roman
39*819cf653SJose E. Roman  PetscCallA(MatDestroy(Acopy,ierr))
408bad1e52SJose E. Roman  PetscCallA(MatDestroy(Id,ierr))
418bad1e52SJose E. Roman  PetscCallA(VecDestroy(v,ierr))
428bad1e52SJose E. Roman  PetscCallA(VecDestroy(w,ierr))
438bad1e52SJose E. Roman  PetscCallA(MatDestroy(D,ierr))
448bad1e52SJose E. Roman  PetscCallA(MatDestroy(A,ierr))
458bad1e52SJose E. Roman  PetscCallA(PetscFinalize(ierr))
468bad1e52SJose E. Roman
478bad1e52SJose E. Romanend program
488bad1e52SJose E. Roman
498bad1e52SJose E. Roman!/*TEST
508bad1e52SJose E. Roman!
518bad1e52SJose E. Roman!   test:
528bad1e52SJose E. Roman!      nsize: 2
538bad1e52SJose E. Roman!
548bad1e52SJose E. Roman!TEST*/
55