Geoffrey Irving <[email protected]> writes: > DMPlexCreateSquareBoundary naively seems to > > 1. Create topology only on rank 0. > 2. Set positions on all ranks. > > In particular, if seems to allocate space proportional to the entire > number of vertices on every rank: > > ierr = PetscSectionGetStorageSize(coordSection, &coordSize);CHKERRQ(ierr); > ierr = VecCreate(PetscObjectComm((PetscObject)dm), > &coordinates);CHKERRQ(ierr); > ierr = VecSetSizes(coordinates, coordSize, PETSC_DETERMINE);CHKERRQ(ierr); > > How does this code work? It's clearly intended to be callable in a > parallel context given that it has a !rank conditional, and works as > part of various examples, so I'm clearly missing something.
This just creates the mesh on rank 0. It is usually partitioned and distributed subsequently (see src/snes/examples/tutorials/ex12.c). It's fine for testing, but obviously non-scalable. Now that Matt and I are running some larger tests with DMPlex, this is one of the scalability issues that will be fixed.
pgpMUSfuc3Qz7.pgp
Description: PGP signature
