xref: /petsc/src/mat/tests/ex262f.F90 (revision 420957c193f90b2eb5ad8d56efbe793ccae3b08b)
1*420957c1SBarry Smith      program main
2*420957c1SBarry Smith#include <petsc/finclude/petscmat.h>
3*420957c1SBarry Smith      use petscmat
4*420957c1SBarry Smith      implicit none
5*420957c1SBarry Smith
6*420957c1SBarry Smith      Mat      A,B
7*420957c1SBarry Smith      PetscErrorCode ierr
8*420957c1SBarry Smith      PetscScalar, pointer :: km(:,:)
9*420957c1SBarry Smith      PetscInt three,one
10*420957c1SBarry Smith      PetscInt idxm(1),idxmj(1),i,j
11*420957c1SBarry Smith      PetscMPIInt rank,size
12*420957c1SBarry Smith
13*420957c1SBarry Smith      PetscCallA(PetscInitialize(ierr))
14*420957c1SBarry Smith
15*420957c1SBarry Smith      PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))
16*420957c1SBarry Smith      PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD,size,ierr))
17*420957c1SBarry Smith
18*420957c1SBarry Smith      PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr))
19*420957c1SBarry Smith      three = 3
20*420957c1SBarry Smith      PetscCallA(MatSetSizes(A,three,three,PETSC_DECIDE,PETSC_DECIDE,ierr))
21*420957c1SBarry Smith      PetscCallA(MatSetBlockSize(A,three,ierr))
22*420957c1SBarry Smith      PetscCallA(MatSetUp(A,ierr))
23*420957c1SBarry Smith      PetscCallA( MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,B,ierr))
24*420957c1SBarry Smith      one = 1
25*420957c1SBarry Smith      idxm(1) = 0
26*420957c1SBarry Smith      allocate (km(three,three))
27*420957c1SBarry Smith      do i=1,3
28*420957c1SBarry Smith        do j=1,3
29*420957c1SBarry Smith           km(1,1) = i + j
30*420957c1SBarry Smith           idxm(1) = i - 1 + 3*rank
31*420957c1SBarry Smith           idxmj(1) = j - 1 + 3*rank
32*420957c1SBarry Smith           PetscCallA(MatSetValues(B, one, idxm, one, idxmj, km, ADD_VALUES, ierr))
33*420957c1SBarry Smith        enddo
34*420957c1SBarry Smith      enddo
35*420957c1SBarry Smith
36*420957c1SBarry Smith      PetscCallA(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY,ierr))
37*420957c1SBarry Smith      PetscCallA(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY,ierr))
38*420957c1SBarry Smith      PetscCallA(MatView(B,PETSC_VIEWER_STDOUT_WORLD,ierr))
39*420957c1SBarry Smith
40*420957c1SBarry Smith      PetscCallA(MatDestroy(A,ierr))
41*420957c1SBarry Smith      PetscCallA(MatDestroy(B,ierr))
42*420957c1SBarry Smith
43*420957c1SBarry Smith      deallocate(km)
44*420957c1SBarry Smith      PetscCallA(PetscFinalize(ierr))
45*420957c1SBarry Smith      end
46*420957c1SBarry Smith
47*420957c1SBarry Smith!/*TEST
48*420957c1SBarry Smith!
49*420957c1SBarry Smith!   test:
50*420957c1SBarry Smith!     nsize: 2
51*420957c1SBarry Smith!
52*420957c1SBarry Smith!TEST*/
53