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