#include <DistributedVectorFactory.hpp>
Factory for creating PETSc vectors distributed across processes.
Replacement for the vector creation portions of DistributedVector (which was implemented using static methods and data), the factory class allows several patterns of PETSc vector length (and distributions among processes) to co-exist.
All vectors created by a factory instance will have the same base size and parallelisation pattern.
Definition at line 50 of file DistributedVectorFactory.hpp.
DistributedVectorFactory::DistributedVectorFactory | ( | Vec | vec | ) |
Set the problem with an existing PETSc vector -- must have stride=1.
vec | is a PETSc vector which we want to use as the pattern for future vectors produced by this factory |
Definition at line 73 of file DistributedVectorFactory.cpp.
References CalculateOwnership().
DistributedVectorFactory::DistributedVectorFactory | ( | unsigned | size, | |
PetscInt | local = PETSC_DECIDE | |||
) |
Set the problem size specifying distribution over local processor.
size | the problem size | |
local | defaults to PETSc's default |
Definition at line 80 of file DistributedVectorFactory.cpp.
References CalculateOwnership(), and CheckForPetsc().
DistributedVectorFactory::DistributedVectorFactory | ( | DistributedVectorFactory * | pOriginalFactory | ) |
Constructor for use in archiving.
pOriginalFactory | see mpOriginalFactory |
Definition at line 95 of file DistributedVectorFactory.cpp.
References CalculateOwnership(), GetProblemSize(), and mpOriginalFactory.
DistributedVectorFactory::DistributedVectorFactory | ( | unsigned | lo, | |
unsigned | hi, | |||
unsigned | size, | |||
unsigned | numProcs = PetscTools::GetNumProcs() | |||
) |
Constructor intended for use in archiving. Allows complete manual specification of the factory.
lo | first index owned by this process | |
hi | one beyond last index owned by this process | |
size | total size of vectors | |
numProcs | the number of processes expected (defaults to the current number) |
Definition at line 108 of file DistributedVectorFactory.cpp.
References CheckForPetsc().
DistributedVectorFactory::~DistributedVectorFactory | ( | ) |
Destructor deletes mpOriginalFactory if it exists
Definition at line 121 of file DistributedVectorFactory.cpp.
References mpOriginalFactory.
void DistributedVectorFactory::CalculateOwnership | ( | Vec | vec | ) | [private] |
Helper method for the constructors
vec | the sample PETSc vector from which to calculate ownerships |
Definition at line 38 of file DistributedVectorFactory.cpp.
References CheckForPetsc(), GetNumProcs(), mHi, mLo, mNumProcs, mPetscStatusKnown, and mProblemSize.
Referenced by DistributedVectorFactory().
void DistributedVectorFactory::CheckForPetsc | ( | ) | [private] |
Double check (in debug code) that PETSc has been initialised properly
Definition at line 127 of file DistributedVectorFactory.cpp.
References mPetscStatusKnown.
Referenced by CalculateOwnership(), and DistributedVectorFactory().
static bool DistributedVectorFactory::CheckNumberOfProcessesOnLoad | ( | ) | [inline, static] |
Determine whether, when loading an instance from an archive, to check that the current number of processes matches that used in creating the archive.
Definition at line 224 of file DistributedVectorFactory.hpp.
References msCheckNumberOfProcessesOnLoad.
DistributedVector DistributedVectorFactory::CreateDistributedVector | ( | Vec | vec | ) |
Create a distributed vector which wraps a given petsc vector
vec | is the vector |
Definition at line 161 of file DistributedVectorFactory.cpp.
Referenced by BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ApplyDirichletToNonlinearResidual(), MonodomainMatrixBasedAssembler< ELEMENT_DIM, SPACE_DIM >::ConstructVectorForMatrixBasedRhsAssembly(), BidomainWithBathMatrixBasedAssembler< ELEMENT_DIM, SPACE_DIM >::ConstructVectorForMatrixBasedRhsAssembly(), BidomainMatrixBasedAssembler< ELEMENT_DIM, SPACE_DIM >::ConstructVectorForMatrixBasedRhsAssembly(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::CreateInitialCondition(), BidomainDg0Assembler< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), ParallelColumnDataWriter::PutVectorStripe(), and AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::SolveCellSystems().
Create a striped PETSc vector of size: stride * problem size
stride |
Definition at line 154 of file DistributedVectorFactory.cpp.
References mHi, mLo, and mProblemSize.
Vec DistributedVectorFactory::CreateVec | ( | ) |
Create a PETSc vector of the problem size
Definition at line 145 of file DistributedVectorFactory.cpp.
References mHi, mLo, and mProblemSize.
Referenced by AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::CreateInitialCondition(), BidomainDg0Assembler< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), Hdf5ToVtkConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToVtkConverter(), MonodomainMatrixBasedAssembler< ELEMENT_DIM, SPACE_DIM >::MonodomainMatrixBasedAssembler(), MonodomainRhsMatrixAssembler< ELEMENT_DIM, SPACE_DIM >::MonodomainRhsMatrixAssembler(), ParallelColumnDataWriter::PutVectorStripe(), Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Write(), and Hdf5ToCmguiConverter< ELEMENT_DIM, SPACE_DIM >::Write().
unsigned DistributedVectorFactory::GetHigh | ( | ) | const [inline] |
Definition at line 180 of file DistributedVectorFactory.hpp.
References mHi.
Referenced by AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacPde(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), Hdf5DataWriter::DefineFixedDimension(), DistributedVector::DistributedVector(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::DumbNodePartitioning(), StreeterFibreGenerator< SPACE_DIM >::GetAveragedThicknessLocalNode(), AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::GetCardiacCell(), AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::ReplicateCaches(), and SetFromFactory().
unsigned DistributedVectorFactory::GetLocalOwnership | ( | ) | const [inline] |
Definition at line 172 of file DistributedVectorFactory.hpp.
Referenced by AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacPde(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), Hdf5DataWriter::DefineFixedDimension(), Hdf5DataWriter::Hdf5DataWriter(), and AbstractCardiacPde< SPACE_DIM >::serialize().
unsigned DistributedVectorFactory::GetLow | ( | ) | const [inline] |
Definition at line 188 of file DistributedVectorFactory.hpp.
References mLo.
Referenced by AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacPde(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), Hdf5DataWriter::DefineFixedDimension(), DistributedVector::DistributedVector(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::DumbNodePartitioning(), StreeterFibreGenerator< SPACE_DIM >::GetAveragedThicknessLocalNode(), AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::GetCardiacCell(), AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::ReplicateCaches(), AbstractCardiacPde< SPACE_DIM >::serialize(), and SetFromFactory().
unsigned DistributedVectorFactory::GetNumProcs | ( | ) | const [inline] |
Definition at line 204 of file DistributedVectorFactory.hpp.
References mNumProcs.
Referenced by CalculateOwnership(), AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load(), CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::SetDistributedVectorFactory(), and SetFromFactory().
DistributedVectorFactory* DistributedVectorFactory::GetOriginalFactory | ( | ) | [inline] |
If msCheckNumberOfProcessesOnLoad is not set, and this factory was loaded from an archive, then return a factory with the settings from the archive, which may not be the same as ours - if running on a different number of processes from the original, we will have used PETSC_DECIDE to set the local ownership on load.
Definition at line 235 of file DistributedVectorFactory.hpp.
References mpOriginalFactory.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load(), and CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate().
unsigned DistributedVectorFactory::GetProblemSize | ( | ) | const [inline] |
Definition at line 196 of file DistributedVectorFactory.hpp.
References mProblemSize.
Referenced by AbstractCardiacPde< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacPde(), BidomainPde< SPACE_DIM >::BidomainPde(), DistributedVector::DistributedVector(), DistributedVectorFactory(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::DumbNodePartitioning(), and SetFromFactory().
Test if the given global index is owned by the current process, i.e. is local to it.
globalIndex | a global index |
Definition at line 140 of file DistributedVectorFactory.cpp.
Referenced by HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfSurface(), and HeartConfigRelatedCellFactory< SPACE_DIM >::FillInCellularTransmuralAreas().
void DistributedVectorFactory::serialize | ( | Archive & | archive, | |
const unsigned int | version | |||
) | [inline, private] |
Archive the member variables.
archive | the archive | |
version | the current version of this class |
Definition at line 99 of file DistributedVectorFactory.hpp.
static void DistributedVectorFactory::SetCheckNumberOfProcessesOnLoad | ( | bool | checkNumberOfProcessesOnLoad = true |
) | [inline, static] |
Set whether, when loading an instance from an archive, to check that the current number of processes matches that used in creating the archive.
checkNumberOfProcessesOnLoad |
Definition at line 215 of file DistributedVectorFactory.hpp.
References msCheckNumberOfProcessesOnLoad.
Referenced by CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate().
void DistributedVectorFactory::SetFromFactory | ( | DistributedVectorFactory * | pFactory | ) |
Set mLo and mHi from another vector factory. Used by archiving.
pFactory | the factory to set from. |
Definition at line 59 of file DistributedVectorFactory.cpp.
References GetHigh(), GetLow(), GetNumProcs(), GetProblemSize(), mHi, mLo, mNumProcs, and mProblemSize.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load().
friend class boost::serialization::access [friend] |
Needed for serialization.
Definition at line 90 of file DistributedVectorFactory.hpp.
unsigned DistributedVectorFactory::mHi [private] |
One above the last entry owned by the current processor.
Definition at line 57 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetHigh(), GetLocalOwnership(), IsGlobalIndexLocal(), and SetFromFactory().
unsigned DistributedVectorFactory::mLo [private] |
The first entry owned by the current processor.
Definition at line 55 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetLocalOwnership(), GetLow(), IsGlobalIndexLocal(), and SetFromFactory().
unsigned DistributedVectorFactory::mNumProcs [private] |
How many processes this factory is expecting.
Definition at line 61 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), GetNumProcs(), and SetFromFactory().
Whether we've checked that PETSc is initialised.
Definition at line 63 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), and CheckForPetsc().
If msCheckNumberOfProcessesOnLoad is set and this instance was loaded from an archive, this points to a factory with the settings from the archive, which may not be the same as this instance.
Definition at line 75 of file DistributedVectorFactory.hpp.
Referenced by DistributedVectorFactory(), GetOriginalFactory(), and ~DistributedVectorFactory().
The problem size, i.e. the number of nodes in the mesh (the number of unknowns may be larger in a Stripe).
Definition at line 59 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetProblemSize(), and SetFromFactory().
bool DistributedVectorFactory::msCheckNumberOfProcessesOnLoad = true [static, private] |
Whether, when loading an instance from an archive, to check that the current number of processes matches that used in creating the archive.
Definition at line 69 of file DistributedVectorFactory.hpp.
Referenced by CheckNumberOfProcessesOnLoad(), and SetCheckNumberOfProcessesOnLoad().