ls1-MarDyn
ls1-MarDyn molecular dynamics code
|
Public Member Functions | |
void | barrier () const override |
synchronizes all processes More... | |
unsigned | Ndistribution (unsigned localN, float *minrnd, float *maxrnd) |
returns total number of molecules More... | |
void | assertIntIdentity (int IX) |
checks identity of random number generators More... | |
void | assertDisjunctivity (ParticleContainer *moleculeContainer) const override |
void | collCommInit (int numValues, int key=0) override |
has to call init method of a CollComm class More... | |
void | collCommFinalize () override |
has to call finalize method of a CollComm class More... | |
void | collCommAppendInt (int intValue) override |
has to call appendInt method of a CollComm class More... | |
void | collCommAppendUnsLong (unsigned long unsLongValue) override |
has to call appendUnsLong method of a CollComm class More... | |
void | collCommAppendFloat (float floatValue) override |
has to call appendFloat method of a CollComm class More... | |
void | collCommAppendDouble (double doubleValue) override |
has to call appendDouble method of a CollComm class More... | |
void | collCommAppendLongDouble (long double longDoubleValue) override |
has to call appendLongDouble method of a CollComm class More... | |
int | collCommGetInt () override |
has to call getInt method of a CollComm class More... | |
unsigned long | collCommGetUnsLong () override |
has to call getUnsLong method of a CollComm class More... | |
float | collCommGetFloat () override |
has to call getFloat method of a CollComm class More... | |
double | collCommGetDouble () override |
has to call getDouble method of a CollComm class More... | |
long double | collCommGetLongDouble () override |
has to call getLongDouble method of a CollComm class More... | |
void | collCommAllreduceSum () override |
has to call allreduceSum method of a CollComm class (none in sequential version) More... | |
void | collCommAllreduceSumAllowPrevious () override |
has to call allreduceSum method of a CollComm class (none in sequential version), allows for values of previous iteration. More... | |
void | collCommAllreduceCustom (ReduceType type) override |
has to call allreduceCustom method of a CollComm class (none in sequential version) More... | |
void | collCommScanSum () override |
has to call scanSum method of a CollComm class (none in sequential version) More... | |
void | collCommBroadcast (int root=0) override |
has to call broadcast method of a CollComm class (none in sequential version) More... | |
virtual void | balanceAndExchangeInitNonBlocking (bool forceRebalancing, ParticleContainer *moleculeContainer, Domain *domain) |
virtual void | prepareNonBlockingStage (bool forceRebalancing, ParticleContainer *moleculeContainer, Domain *domain, unsigned int stageNumber)=0 |
virtual void | finishNonBlockingStage (bool forceRebalancing, ParticleContainer *moleculeContainer, Domain *domain, unsigned int stageNumber)=0 |
void | exchangeMoleculesMPI (ParticleContainer *moleculeContainer, Domain *domain, MessageType msgType, bool doHaloPositionCheck=true, bool removeRecvDuplicates=false) |
exchange molecules between processes More... | |
void | exchangeForces (ParticleContainer *moleculeContainer, Domain *domain) override |
Exchanges forces at the domain boundaries if it's required by the cell container. More... | |
std::vector< int > | getNeighbourRanks () override=0 |
std::vector< int > | getNeighbourRanksFullShell () override=0 |
virtual std::vector< CommunicationPartner > | getNeighboursFromHaloRegion (Domain *domain, const HaloRegion &haloRegion, double cutoff)=0 |
MPI_Datatype | getMPIParticleType () |
MPI_Datatype | getMPIParticleForceType () |
MPI_Comm | getCommunicator () override |
virtual void | readXML (XMLfileUnits &xmlconfig) |
Read in XML configuration for DomainDecompMPIBase. More... | |
virtual void | setCommunicationScheme (const std::string &scheme, const std::string &comScheme) |
virtual int | getNonBlockingStageCount () override |
virtual size_t | getTotalSize () override |
virtual void | printSubInfo (int offset) override |
virtual void | printDecomp (const std::string &filename, Domain *domain, ParticleContainer *particleContainer) override |
writes information about the current decomposition into the given file More... | |
virtual std::string | getName () override |
void | printCommunicationPartners (std::string filename) const override |
![]() | |
DomainDecompBase () | |
The Constructor determines the own rank and the number of the neighbours */. | |
~DomainDecompBase () override | |
The Destructor finalizes MPI. | |
void | exchangeMolecules (ParticleContainer *moleculeContainer, Domain *domain) |
exchange molecules between processes More... | |
virtual bool | queryBalanceAndExchangeNonBlocking (bool forceRebalancing, ParticleContainer *moleculeContainer, Domain *domain, double etime) |
Checks whether the balance and exchange step can be performed non-blocking. More... | |
virtual void | balanceAndExchange (double lastTraversalTime, bool forceRebalancing, ParticleContainer *moleculeContainer, Domain *domain) |
balance the load (and optimize communication) and exchange boundary particles More... | |
virtual bool | procOwnsPos (double x, double y, double z, Domain *domain) final |
find out whether the given position belongs to the domain of this process More... | |
void | getBoundingBoxMinMax (Domain *domain, double *min, double *max) |
get the minimum and maximum coordinate of the bounding box of this process' domain More... | |
virtual double | getBoundingBoxMin (int dimension, Domain *domain) |
get the minimum of the bounding box of this process' domain in the given dimension (0,1,2) More... | |
virtual double | getBoundingBoxMax (int dimension, Domain *domain) |
get the maximum of the bounding box of this process' domain in the given dimension (0,1,2) More... | |
virtual int | getRank () const |
returns the own rank More... | |
virtual int | getNumProcs () const |
returns the number of processes More... | |
virtual double | getTime () const |
returns the time in seconds since some time in the past | |
double | getIOCutoffRadius (int dim, Domain *domain, ParticleContainer *moleculeContainer) |
returns an cutoff radius for a dimension for a global linked cells datastructure More... | |
void | writeMoleculesToMPIFileBinary (const std::string &filename, ParticleContainer *moleculeContainer) const |
appends molecule data to the file. The format is the same as that of the input file This version uses, MPI IO. More... | |
void | writeMoleculesToFile (const std::string &filename, ParticleContainer *moleculeContainer, bool binary=false) const |
appends molecule data to the file. The format is the same as that of the input file If MPI is enabled and binary files are supposed to be written this function will call writeMoleculesToMPIFileBinary(). Otherwise, to ensure that not more than one process writes to the file at any time, there is a loop over all processes with a barrier in between. More... | |
void | updateSendLeavingWithCopies (bool sendTogether) |
bool | sendLeavingWithCopies () const |
virtual std::vector< std::vector< std::vector< int > > > | getAllRanks () |
Protected Member Functions | |
virtual void | prepareNonBlockingStageImpl (ParticleContainer *moleculeContainer, Domain *domain, unsigned int stageNumber, MessageType msgType, bool removeRecvDuplicates=false) |
virtual void | finishNonBlockingStageImpl (ParticleContainer *moleculeContainer, Domain *domain, unsigned int stageNumber, MessageType msgType, bool removeRecvDuplicates=false) |
![]() | |
void | addLeavingMolecules (std::vector< Molecule > &&invalidMolecules, ParticleContainer *moleculeContainer) |
void | handleDomainLeavingParticles (unsigned dim, ParticleContainer *moleculeContainer) const |
void | handleDomainLeavingParticlesDirect (const HaloRegion &haloRegion, ParticleContainer *moleculeContainer, std::vector< Molecule > &invalidParticles) const |
void | handleForceExchange (unsigned dim, ParticleContainer *moleculeContainer) const |
Does the force exchange for each dimension. Will be called for dim=0, 1 and 2. More... | |
virtual void | handleForceExchangeDirect (const HaloRegion &haloRegion, ParticleContainer *moleculeContainer) const |
void | populateHaloLayerWithCopies (unsigned dim, ParticleContainer *moleculeContainer) const |
void | populateHaloLayerWithCopiesDirect (const HaloRegion &haloRegion, ParticleContainer *moleculeContainer, bool positionCheck=true) const |
Protected Attributes | |
MPI_Datatype | _mpiParticleType |
MPI_Datatype | _mpiParticleForceType |
MPI_Comm | _comm |
std::unique_ptr< NeighbourCommunicationScheme > | _neighbourCommunicationScheme |
bool | _forceDirectPP {false} |
![]() | |
int | _rank |
the id of the current process | |
int | _numProcs |
total number of processes in the simulation | |
|
overridevirtual |
Reimplemented from DomainDecompBase.
|
virtual |
checks identity of random number generators
Reimplemented from DomainDecompBase.
|
virtual |
Initialises the non-blocking balance and exchange. Nothing really important needs to be done here. Some ideas: decide between possible communication schemes,...
forceRebalancing | true if rebalancing should be forced |
moleculeContainer | pointer to the molecule container |
domain | pointer to the domain |
|
inlineoverridevirtual |
synchronizes all processes
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call allreduceCustom method of a CollComm class (none in sequential version)
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call allreduceSum method of a CollComm class (none in sequential version)
Reimplemented from DomainDecompBase.
|
overridevirtual |
has to call allreduceSum method of a CollComm class (none in sequential version), allows for values of previous iteration.
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call appendDouble method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call appendFloat method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call appendInt method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call appendLongDouble method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call appendUnsLong method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call broadcast method of a CollComm class (none in sequential version)
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call finalize method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call getDouble method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call getFloat method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call getInt method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call getLongDouble method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call getUnsLong method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call init method of a CollComm class
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
has to call scanSum method of a CollComm class (none in sequential version)
Reimplemented from DomainDecompBase.
|
overridevirtual |
Exchanges forces at the domain boundaries if it's required by the cell container.
moleculeContainer | The particle container |
domain |
Reimplemented from DomainDecompBase.
void DomainDecompMPIBase::exchangeMoleculesMPI | ( | ParticleContainer * | moleculeContainer, |
Domain * | domain, | ||
MessageType | msgType, | ||
bool | doHaloPositionCheck = true , |
||
bool | removeRecvDuplicates = false |
||
) |
exchange molecules between processes
molecules which aren't in the domain of their process any more are transferred to their neighbours. Additionally, the molecules for the halo-region are transferred. To reduce the number of neighbours a single process has to communicate with, particles that i.e. have to be moved to the lower right neighbour are moved to the right neighbour first and then from the right neighbour to the lower neighbour.
moleculeContainer | needed to get those molecules which have to be exchanged |
domain | is e.g. needed to get the size of the local domain |
|
pure virtual |
Finishes the stageNumber'th stage. This includes receiving the particles, that have to be received in that stage.
forceRebalancing | true if rebalancing should be forced |
moleculeContainer | pointer to the molecule container |
domain | pointer to the domain |
stageNumber | the number of the stage, the communication is in. |
Implemented in DomainDecomposition, GeneralDomainDecomposition, and KDDecomposition.
|
protectedvirtual |
Finishes the stageNumber'th stage. This includes receiving the particles, that have to be received in that stage.
forceRebalancing | true if rebalancing should be forced |
moleculeContainer | pointer to the molecule container |
domain | pointer to the domain |
stageNumber | the number of the stage, the communication is in. |
|
inlineoverridevirtual |
Reimplemented from DomainDecompBase.
|
inlineoverridevirtual |
Reimplemented from DomainDecompBase.
|
overridepure virtual |
Reimplemented from DomainDecompBase.
|
overridepure virtual |
Reimplemented from DomainDecompBase.
Implemented in DomainDecomposition.
|
overridevirtual |
Specifies the amount of non-blocking stages, when performing overlapping balanceAndExchange and computation. For a communication scheme, where only direct neighbours communicate, 3 stages of communication are necessary, since the particles have to be transmitted in the x-direction first, then in the y-direction, then in the z-direction.
Reimplemented from DomainDecompBase.
|
overridevirtual |
Reimplemented from DomainDecompBase.
|
virtual |
returns total number of molecules
Reimplemented from DomainDecompBase.
|
pure virtual |
Prepares the stageNumber'th stage. This includes sending particles, that have to be send in that stage.
forceRebalancing | true if rebalancing should be forced |
moleculeContainer | pointer to the molecule container |
domain | pointer to the domain |
stageNumber | the number of the stage, the communication is in. |
Implemented in DomainDecomposition, GeneralDomainDecomposition, and KDDecomposition.
|
protectedvirtual |
Prepares the stageNumber'th stage. This includes sending particles, that have to be send in that stage.
moleculeContainer | pointer to the molecule container |
domain | pointer to the domain |
stageNumber | the number of the stage, the communication is in. |
|
overridevirtual |
Reimplemented from DomainDecompBase.
|
overridevirtual |
writes information about the current decomposition into the given file
filename | name of the file into which the data will be written |
domain | e.g. needed to get the bounding boxes |
particleContainer | needed to print information about the parts of the decomposition |
Reimplemented from DomainDecompBase.
|
overridevirtual |
Reimplemented from DomainDecompBase.
|
virtual |
Read in XML configuration for DomainDecompMPIBase.
The following xml object structure is handled by this method:
Reimplemented from DomainDecompBase.
Reimplemented in DomainDecomposition, GeneralDomainDecomposition, and KDDecomposition.
|
virtual |
Sets the communicationScheme.
scheme | |
comScheme |
|
protected |
Indicates whether the direct-pp communication scheme should be forced. Flag to indicate necessity to use the direct-pp neighbour communication scheme. Can be overwritten by any child class.
readXML()
.