xref: /petsc/src/mat/tests/ex269f.F90 (revision 58ad77e8b9ee6fdbdfef97ebcff79a2d98620aab)
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
8819cf653SJose 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
28*58ad77e8SBarry Smith  mats = [PETSC_NULL_MAT, D, Id, PETSC_NULL_MAT]
298bad1e52SJose E. Roman  PetscCallA(MatCreateNest(PETSC_COMM_WORLD,nb,PETSC_NULL_IS_ARRAY,nb,PETSC_NULL_IS_ARRAY,mats,A,ierr))
308bad1e52SJose E. Roman  PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))
31*58ad77e8SBarry Smith  PetscCallA(MatNestSetSubMats(A,nb,PETSC_NULL_IS_ARRAY,nb,PETSC_NULL_IS_ARRAY,mats,ierr))
32*58ad77e8SBarry Smith  PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr))
338bad1e52SJose E. Roman
34819cf653SJose E. Roman  ! test MatCopy()
35819cf653SJose E. Roman  PetscCallA(MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,Acopy,ierr))
36819cf653SJose E. Roman  PetscCallA(MatCopy(A,Acopy,DIFFERENT_NONZERO_PATTERN,ierr))
37819cf653SJose E. Roman
38819cf653SJose E. Roman  PetscCallA(MatDestroy(Acopy,ierr))
398bad1e52SJose E. Roman  PetscCallA(MatDestroy(Id,ierr))
408bad1e52SJose E. Roman  PetscCallA(VecDestroy(v,ierr))
418bad1e52SJose E. Roman  PetscCallA(VecDestroy(w,ierr))
428bad1e52SJose E. Roman  PetscCallA(MatDestroy(D,ierr))
438bad1e52SJose E. Roman  PetscCallA(MatDestroy(A,ierr))
448bad1e52SJose E. Roman  PetscCallA(PetscFinalize(ierr))
458bad1e52SJose E. Roman
468bad1e52SJose E. Romanend program
478bad1e52SJose E. Roman
488bad1e52SJose E. Roman!/*TEST
498bad1e52SJose E. Roman!
508bad1e52SJose E. Roman!   test:
518bad1e52SJose E. Roman!      nsize: 2
528bad1e52SJose E. Roman!
538bad1e52SJose E. Roman!TEST*/
54