Chaste
Release::2017.1
|
#include <DistributedVectorFactory.hpp>
Public Member Functions | |
DistributedVectorFactory (Vec vec) | |
DistributedVectorFactory (unsigned size, PetscInt local=PETSC_DECIDE) | |
DistributedVectorFactory (DistributedVectorFactory *pOriginalFactory) | |
DistributedVectorFactory (unsigned lo, unsigned hi, unsigned size, unsigned numProcs=PetscTools::GetNumProcs()) | |
~DistributedVectorFactory () | |
Vec | CreateVec () |
Vec | CreateVec (unsigned stride) |
DistributedVector | CreateDistributedVector (Vec vec, bool readOnly=false) |
bool | IsGlobalIndexLocal (unsigned globalIndex) |
unsigned | GetLocalOwnership () const |
unsigned | GetHigh () const |
unsigned | GetLow () const |
unsigned | GetProblemSize () const |
unsigned | GetNumProcs () const |
DistributedVectorFactory * | GetOriginalFactory () |
void | SetOriginalFactory (DistributedVectorFactory *pOriginalFactory) |
void | SetFromFactory (DistributedVectorFactory *pFactory) |
std::vector< unsigned > & | rGetGlobalLows () |
Static Public Member Functions | |
static void | SetCheckNumberOfProcessesOnLoad (bool checkNumberOfProcessesOnLoad=true) |
static bool | CheckNumberOfProcessesOnLoad () |
Private Member Functions | |
void | CheckForPetsc () |
void | CalculateOwnership (Vec vec) |
template<class Archive > | |
void | serialize (Archive &archive, const unsigned int version) |
Private Attributes | |
unsigned | mLo |
unsigned | mHi |
unsigned | mProblemSize |
unsigned | mNumProcs |
bool | mPetscStatusKnown |
std::vector< unsigned > | mGlobalLows |
DistributedVectorFactory * | mpOriginalFactory |
Static Private Attributes | |
static bool | msCheckNumberOfProcessesOnLoad = true |
Friends | |
class | boost::serialization::access |
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 57 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 81 of file DistributedVectorFactory.cpp.
References CalculateOwnership().
Referenced by serialize(), and SetOriginalFactory().
Set the problem size specifying distribution over local processor.
size | the problem size |
local | defaults to PETSc's default |
Definition at line 88 of file DistributedVectorFactory.cpp.
References CalculateOwnership(), CheckForPetsc(), PetscTools::CreateVec(), and PetscTools::Destroy().
DistributedVectorFactory::DistributedVectorFactory | ( | DistributedVectorFactory * | pOriginalFactory | ) |
Constructor for use in archiving. Note that this constructor is only called when the number of processes is different from the original. Therefore, the orignal local node ownership cannot be used, and a new even partition will be applied.
pOriginalFactory | see mpOriginalFactory |
Definition at line 100 of file DistributedVectorFactory.cpp.
References CalculateOwnership(), PetscTools::CreateVec(), PetscTools::Destroy(), 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 116 of file DistributedVectorFactory.cpp.
References CheckForPetsc().
DistributedVectorFactory::~DistributedVectorFactory | ( | ) |
Destructor deletes mpOriginalFactory if it exists.
Definition at line 129 of file DistributedVectorFactory.cpp.
References mpOriginalFactory.
Referenced by serialize().
|
private |
Helper method for the constructors.
vec | the sample PETSc vector from which to calculate ownerships |
Definition at line 44 of file DistributedVectorFactory.cpp.
References CheckForPetsc(), PetscTools::GetNumProcs(), mGlobalLows, mHi, mLo, mNumProcs, mPetscStatusKnown, and mProblemSize.
Referenced by DistributedVectorFactory().
|
private |
Double check (in debug code) that PETSc has been initialised properly.
Definition at line 134 of file DistributedVectorFactory.cpp.
References mPetscStatusKnown.
Referenced by CalculateOwnership(), and DistributedVectorFactory().
|
inlinestatic |
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 249 of file DistributedVectorFactory.hpp.
References msCheckNumberOfProcessesOnLoad.
Referenced by DistributedQuadraticMesh< DIM >::serialize(), and SetOriginalFactory().
DistributedVector DistributedVectorFactory::CreateDistributedVector | ( | Vec | vec, |
bool | readOnly = false |
||
) |
Create a distributed vector which wraps a given petsc vector.
vec | is the vector |
readOnly | flag to pass on to request that the distributed vector will only be used read-only |
Definition at line 183 of file DistributedVectorFactory.cpp.
Referenced by BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ApplyDirichletToNonlinearResidual(), ExtendedBidomainProblem< DIM >::CreateInitialCondition(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::CreateInitialCondition(), AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), ParallelColumnDataWriter::PutVectorStripe(), serialize(), ExtendedBidomainSolver< ELEM_DIM, SPACE_DIM >::SetupLinearSystem(), OperatorSplittingMonodomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), MonodomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), BidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), MonodomainPurkinjeSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), ExtendedBidomainTissue< SPACE_DIM >::SolveCellSystems(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::SolveCellSystems(), and PostProcessingWriter< ELEMENT_DIM, SPACE_DIM >::WriteOutputDataToHdf5().
Vec DistributedVectorFactory::CreateVec | ( | ) |
Create a PETSc vector of the problem size.
Definition at line 154 of file DistributedVectorFactory.cpp.
References PetscTools::CreateVec(), mHi, mLo, and mProblemSize.
Referenced by AbstractContinuumMechanicsSolver< DIM >::AllocateMatrixMemory(), ExtendedBidomainProblem< DIM >::CreateInitialCondition(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::CreateInitialCondition(), AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), AbstractExtendedBidomainSolver< ELEMENT_DIM, SPACE_DIM >::GenerateNullBasis(), Hdf5ToTxtConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToTxtConverter(), Hdf5ToVtkConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToVtkConverter(), ParallelColumnDataWriter::PutVectorStripe(), serialize(), CardiacElectroMechanicsProblem< DIM, ELEC_PROB_DIM >::Solve(), Hdf5ToMeshalyzerConverter< ELEMENT_DIM, SPACE_DIM >::Write(), Hdf5ToCmguiConverter< ELEMENT_DIM, SPACE_DIM >::Write(), and PostProcessingWriter< ELEMENT_DIM, SPACE_DIM >::WriteOutputDataToHdf5().
Create a striped PETSc vector of size: stride * problem size.
stride |
Definition at line 160 of file DistributedVectorFactory.cpp.
References mHi, mLo, and mProblemSize.
|
inline |
Definition at line 204 of file DistributedVectorFactory.hpp.
References mHi.
Referenced by AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacTissue(), DistributedBoxCollection< DIM >::CalculateNumberOfNodesInEachStrip(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), CardiacSimulation::CreateAndRun(), Hdf5DataWriter::DefineFixedDimension(), DistributedBoxCollection< DIM >::DistributedBoxCollection(), DistributedVector::DistributedVector(), NodePartitioner< ELEMENT_DIM, SPACE_DIM >::DumbPartitioning(), ExtendedBidomainTissue< SPACE_DIM >::ExtendedBidomainTissue(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetCardiacCell(), DistributedBoxCollection< DIM >::GetNumLocalRows(), DistributedBoxCollection< DIM >::GetNumRowsOfBoxes(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetPurkinjeCell(), ExtendedBidomainTissue< SPACE_DIM >::ReplicateAdditionalCaches(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::ReplicateCaches(), SetFromFactory(), SetOriginalFactory(), DistributedBoxCollection< DIM >::SetupHaloBoxes(), DistributedBoxCollection< DIM >::SetupLocalBoxesHalfOnly(), and CardiacElectroMechanicsProblem< DIM, ELEC_PROB_DIM >::Solve().
|
inline |
Definition at line 196 of file DistributedVectorFactory.hpp.
References mLo.
Referenced by AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacTissue(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), ExtendedBidomainTissue< SPACE_DIM >::CreateGGapConductivities(), Hdf5DataWriter::DefineFixedDimension(), ExtendedBidomainTissue< SPACE_DIM >::ExtendedBidomainTissue(), Hdf5DataWriter::Hdf5DataWriter(), ActivationOutputModifier::InitialiseAtStart(), AbstractCardiacTissue< SPACE_DIM >::load(), AbstractCardiacTissue< SPACE_DIM >::LoadCardiacCells(), and AbstractCardiacTissue< SPACE_DIM >::save().
|
inline |
Definition at line 212 of file DistributedVectorFactory.hpp.
References mLo.
Referenced by AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacTissue(), DistributedBoxCollection< DIM >::CalculateNumberOfNodesInEachStrip(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh(), DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh(), CardiacSimulation::CreateAndRun(), ExtendedBidomainTissue< SPACE_DIM >::CreateGGapConductivities(), Hdf5DataWriter::DefineFixedDimension(), DistributedBoxCollection< DIM >::DistributedBoxCollection(), DistributedVector::DistributedVector(), NodePartitioner< ELEMENT_DIM, SPACE_DIM >::DumbPartitioning(), ExtendedBidomainTissue< SPACE_DIM >::ExtendedBidomainTissue(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetCardiacCell(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetCardiacCellOrHaloCell(), ExtendedBidomainTissue< SPACE_DIM >::GetCardiacSecondCell(), ExtendedBidomainTissue< SPACE_DIM >::GetExtracellularStimulus(), DistributedBoxCollection< DIM >::GetNumLocalRows(), DistributedBoxCollection< DIM >::GetNumRowsOfBoxes(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetPurkinjeCell(), SingleTraceOutputModifier::InitialiseAtStart(), AbstractCardiacTissue< SPACE_DIM >::load(), AbstractCardiacTissue< SPACE_DIM >::LoadCardiacCells(), ExtendedBidomainTissue< SPACE_DIM >::ReplicateAdditionalCaches(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::ReplicateCaches(), AbstractCardiacTissue< SPACE_DIM >::save(), SetFromFactory(), SetOriginalFactory(), DistributedBoxCollection< DIM >::SetupHaloBoxes(), DistributedBoxCollection< DIM >::SetupLocalBoxesHalfOnly(), CardiacElectroMechanicsProblem< DIM, ELEC_PROB_DIM >::Solve(), and AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::SolveCellSystems().
|
inline |
Definition at line 228 of file DistributedVectorFactory.hpp.
References mNumProcs.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::LoadExtraArchive(), CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::SetDistributedVectorFactory(), and SetFromFactory().
|
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 261 of file DistributedVectorFactory.hpp.
References mpOriginalFactory.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load(), AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::LoadExtraArchive(), and CardiacSimulationArchiver< PROBLEM_CLASS >::Migrate().
|
inline |
Definition at line 220 of file DistributedVectorFactory.hpp.
References mProblemSize.
Referenced by AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::AbstractCardiacTissue(), DistributedVector::DistributedVector(), DistributedVectorFactory(), NodePartitioner< ELEMENT_DIM, SPACE_DIM >::DumbPartitioning(), ExtendedBidomainTissue< SPACE_DIM >::ExtendedBidomainTissue(), AbstractCardiacTissue< SPACE_DIM >::load(), SetFromFactory(), and SetOriginalFactory().
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 149 of file DistributedVectorFactory.cpp.
Referenced by HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfSurface(), ElectrodesStimulusFactory< DIM >::CheckForElectrodesIntersection(), HeartConfigRelatedCellFactory< SPACE_DIM >::FillInCellularTransmuralAreas(), AbstractCardiacTissue< ELEMENT_DIM, SPACE_DIM >::GetCardiacCellOrHaloCell(), SingleTraceOutputModifier::InitialiseAtStart(), AbstractCardiacTissue< SPACE_DIM >::LoadCardiacCells(), serialize(), and CardiacElectroMechanicsProblem< DIM, ELEC_PROB_DIM >::Solve().
std::vector< unsigned > & DistributedVectorFactory::rGetGlobalLows | ( | ) |
Definition at line 189 of file DistributedVectorFactory.cpp.
References CHASTE_CLASS_EXPORT, PetscTools::GetNumProcs(), mGlobalLows, and mLo.
Referenced by AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateNodeExchange(), and SetOriginalFactory().
|
inlineprivate |
Archive the member variables.
archive | the archive |
version | the current version of this class |
Definition at line 115 of file DistributedVectorFactory.hpp.
References CreateDistributedVector(), CreateVec(), DistributedVectorFactory(), PetscTools::GetNumProcs(), IsGlobalIndexLocal(), and ~DistributedVectorFactory().
|
inlinestatic |
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 239 of file DistributedVectorFactory.hpp.
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 66 of file DistributedVectorFactory.cpp.
References EXCEPTION, GetHigh(), GetLow(), GetNumProcs(), GetProblemSize(), mGlobalLows, mHi, mLo, mNumProcs, and mProblemSize.
Referenced by AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM >::load(), and SetOriginalFactory().
|
inline |
Set method for mpOriginalFactory, used by archiving (load_construct_data).
pOriginalFactory | see mpOriginalFactory |
Definition at line 270 of file DistributedVectorFactory.hpp.
References CHASTE_CLASS_EXPORT, CheckNumberOfProcessesOnLoad(), DistributedVectorFactory(), EXCEPTION, GetHigh(), GetLow(), PetscTools::GetNumProcs(), GetProblemSize(), rGetGlobalLows(), SetFromFactory(), and SetOriginalFactory().
Referenced by SetOriginalFactory().
|
friend |
Needed for serialization.
Definition at line 106 of file DistributedVectorFactory.hpp.
|
private |
A cached vector of mLo values from each process.
Definition at line 79 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), rGetGlobalLows(), and SetFromFactory().
|
private |
One above the last entry owned by the current processor.
Definition at line 67 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetHigh(), IsGlobalIndexLocal(), and SetFromFactory().
|
private |
The first entry owned by the current processor.
Definition at line 64 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetLocalOwnership(), GetLow(), IsGlobalIndexLocal(), rGetGlobalLows(), and SetFromFactory().
|
private |
How many processes this factory is expecting.
Definition at line 73 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), GetNumProcs(), and SetFromFactory().
|
private |
Whether we've checked that PETSc is initialised.
Definition at line 76 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), and CheckForPetsc().
|
private |
If 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 91 of file DistributedVectorFactory.hpp.
Referenced by DistributedVectorFactory(), GetOriginalFactory(), and ~DistributedVectorFactory().
|
private |
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 70 of file DistributedVectorFactory.hpp.
Referenced by CalculateOwnership(), CreateVec(), GetProblemSize(), and SetFromFactory().
|
staticprivate |
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 85 of file DistributedVectorFactory.hpp.
Referenced by CheckNumberOfProcessesOnLoad().