xref: /petsc/src/dm/tests/ex1f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
1c4762a1bSJed Brown!
2337bb527SBarry Smith! Test the workaround for a bug in Open MPI 2.1.1 on Ubuntu 18.04.2
3c4762a1bSJed Brown! See https://lists.mcs.anl.gov/pipermail/petsc-dev/2019-July/024803.html
4c4762a1bSJed Brown!
5c4762a1bSJed Brown! Contributed-by:       Fabian Jakub  <Fabian.Jakub@physik.uni-muenchen.de>
6ce78bad3SBarry Smith#include "petsc/finclude/petscdmda.h"
7*c5e229c2SMartin Diehlprogram main
8ce78bad3SBarry Smith  use petscvec
9ce78bad3SBarry Smith  use petscdm
10ce78bad3SBarry Smith  use petscdmda
11c4762a1bSJed Brown  implicit none
12c4762a1bSJed Brown
13c4762a1bSJed Brown  PetscInt, parameter :: Ndof = 1, stencil_size = 1
14c4762a1bSJed Brown  PetscInt, parameter :: Nx = 3, Ny = 3
15c4762a1bSJed Brown  PetscErrorCode :: myid, commsize, ierr
16c4762a1bSJed Brown  PetscScalar, pointer :: xv1d(:)
17ce78bad3SBarry Smith  PetscInt, pointer :: lx(:), ly(:)
18ce78bad3SBarry Smith  PetscMPIInt, pointer :: nb(:)
19c4762a1bSJed Brown
20c4762a1bSJed Brown  type(tDM) :: da
21c4762a1bSJed Brown  type(tVec) :: gVec!, naturalVec
22c4762a1bSJed Brown
23d8606c27SBarry Smith  PetscCallA(PetscInitialize(PETSC_NULL_CHARACTER, ierr))
24d8606c27SBarry Smith  PetscCallA(mpi_comm_rank(PETSC_COMM_WORLD, myid, ierr))
25d8606c27SBarry Smith  PetscCallA(mpi_comm_size(PETSC_COMM_WORLD, commsize, ierr))
26c4762a1bSJed Brown
275d83a8b1SBarry Smith  PetscCallA(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC, DMDA_STENCIL_STAR, Nx, Ny, PETSC_DECIDE, PETSC_DECIDE, Ndof, stencil_size, PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_INTEGER_ARRAY, da, ierr))
28d8606c27SBarry Smith  PetscCallA(DMSetFromOptions(da, ierr))
298e704042SBarry Smith  PetscCallA(DMSetup(da, ierr))
30c4762a1bSJed Brown
31d8606c27SBarry Smith  PetscCallA(DMCreateGlobalVector(da, gVec, ierr))
32ce78bad3SBarry Smith  PetscCallA(VecGetArray(gVec, xv1d, ierr))
33c4762a1bSJed Brown  xv1d(:) = real(myid, kind(xv1d))
34c4762a1bSJed Brown  !print *,myid, 'xv1d', xv1d, ':', xv1d
35ce78bad3SBarry Smith  PetscCallA(VecRestoreArray(gVec, xv1d, ierr))
36c4762a1bSJed Brown
37ce78bad3SBarry Smith  PetscCallA(PetscObjectViewFromOptions(PetscObjectCast(gVec), PETSC_NULL_OBJECT, '-show_gVec', ierr))
38ce78bad3SBarry Smith
39ce78bad3SBarry Smith  PetscCallA(DMDAGetOwnershipRanges(da, lx, ly, PETSC_NULL_INTEGER_POINTER, ierr))
40ce78bad3SBarry Smith  PetscCallA(DMDARestoreOwnershipRanges(da, lx, ly, PETSC_NULL_INTEGER_POINTER, ierr))
41ce78bad3SBarry Smith  PetscCallA(DMDAGetNeighbors(da, nb, ierr))
42ce78bad3SBarry Smith  PetscCallA(DMDARestoreNeighbors(da, nb, ierr))
43c4762a1bSJed Brown
44d8606c27SBarry Smith  PetscCallA(VecDestroy(gVec, ierr))
45d8606c27SBarry Smith  PetscCallA(DMDestroy(da, ierr))
46d8606c27SBarry Smith  PetscCallA(PetscFinalize(ierr))
47c4762a1bSJed Brownend program
48c4762a1bSJed Brown
49c4762a1bSJed Brown!/*TEST
50c4762a1bSJed Brown!
51c4762a1bSJed Brown!   test:
52c4762a1bSJed Brown!      nsize: 9
53c4762a1bSJed Brown!      args: -show_gVec
54c4762a1bSJed Brown!TEST*/
55