Simpatico  v1.10
List of all members | Public Member Functions
DdMd::AtomDistributor Class Reference

Detailed Description

Class for distributing Atoms among processors.

A AtomDistributor is used to distribute items among processors during startup, when the master process must read a configuration file.

Usage:

AtomDistributor distributor;
Domain domain;
Boundary boundary;
AtomStorage storage;
Buffer buffer;
associate(domain, boundary, atomStorage, buffer);
if (rank = 0) { // If master processorz
Atom* ptr;
std::ifstream file
distributor.setup();
// Read from file
for (i = 0; i < nAtom; ++i) {
ptr = distributor.newAtomPtr();
// Read properties of Atom *ptr from file
file >> ptr->position();
// ...
// Cache active atom *ptr for sending.
distributor.addAtom(storage);
}
// Send all remaining.
distributor.send();
} else { // If not master processor
distributor.receive(storage);
}

The addAtom(storage) method can send items if required by memory limits, and the send() method then sends all remaining atoms.

Definition at line 82 of file AtomDistributor.h.

#include <AtomDistributor.h>

Inheritance diagram for DdMd::AtomDistributor:
Util::ParamComposite Util::ParamComponent Util::Serializable Util::MpiFileIo

Public Member Functions

 AtomDistributor ()
 Constructor. More...
 
 ~AtomDistributor ()
 Destructor. More...
 
void associate (Domain &domain, Boundary &boundary, AtomStorage &storage, Buffer &buffer)
 Set pointers to associated objects. More...
 
void setCapacity (int cacheCapacity)
 Set capacity of the send cache on the master node. More...
 
virtual void readParameters (std::istream &in)
 Read cacheCapacity. More...
 
void setup ()
 Initialization before the loop over atoms on master processor. More...
 
AtomnewAtomPtr ()
 Returns pointer an address available for a new Atom. More...
 
int addAtom ()
 Process the active atom for sending. More...
 
void send ()
 Send all atoms that have not be sent previously. More...
 
void receive ()
 Receive all atoms sent by master processor. More...
 
int validate ()
 Validate distribution of atoms after completion. More...
 
- Public Member Functions inherited from Util::ParamComposite
 ParamComposite ()
 Constructor. More...
 
 ParamComposite (const ParamComposite &other)
 Copy constructor. More...
 
 ParamComposite (int capacity)
 Constructor. More...
 
virtual ~ParamComposite ()
 Virtual destructor. More...
 
void resetParam ()
 Resets ParamComposite to its empty state. More...
 
virtual void readParam (std::istream &in)
 Read the parameter file block. More...
 
virtual void readParamOptional (std::istream &in)
 Read optional parameter file block. More...
 
virtual void writeParam (std::ostream &out)
 Write all parameters to an output stream. More...
 
virtual void load (Serializable::IArchive &ar)
 Load all parameters from an input archive. More...
 
virtual void loadOptional (Serializable::IArchive &ar)
 Load an optional ParamComposite. More...
 
virtual void loadParameters (Serializable::IArchive &ar)
 Load state from archive, without adding Begin and End lines. More...
 
virtual void save (Serializable::OArchive &ar)
 Saves all parameters to an archive. More...
 
void saveOptional (Serializable::OArchive &ar)
 Saves isActive flag, and then calls save() iff isActive is true. More...
 
void readParamComposite (std::istream &in, ParamComposite &child, bool next=true)
 Add and read a required child ParamComposite. More...
 
void readParamCompositeOptional (std::istream &in, ParamComposite &child, bool next=true)
 Add and attempt to read an optional child ParamComposite. More...
 
template<typename Type >
ScalarParam< Type > & read (std::istream &in, const char *label, Type &value)
 Add and read a new required ScalarParam < Type > object. More...
 
template<typename Type >
ScalarParam< Type > & readOptional (std::istream &in, const char *label, Type &value)
 Add and read a new optional ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & readCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read a required C array parameter. More...
 
template<typename Type >
CArrayParam< Type > & readOptionalCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read an optional C array parameter. More...
 
template<typename Type >
DArrayParam< Type > & readDArray (std::istream &in, const char *label, DArray< Type > &array, int n)
 Add and read a required DArray < Type > parameter. More...
 
template<typename Type >
DArrayParam< Type > & readOptionalDArray (std::istream &in, const char *label, DArray< Type > &array, int n)
 Add and read an optional DArray < Type > parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & readFArray (std::istream &in, const char *label, FArray< Type, N > &array)
 Add and read a required FArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & readOptionalFArray (std::istream &in, const char *label, FArray< Type, N > &array)
 Add and read an optional FArray < Type, N > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & readCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np)
 Add and read a required CArray2DParam < Type > 2D C-array. More...
 
template<typename Type >
CArray2DParam< Type > & readOptionalCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np)
 Add and read an optional CArray2DParam < Type > 2D C-array parameter. More...
 
template<typename Type >
DMatrixParam< Type > & readDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and read a required DMatrix < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & readOptionalDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and read an optional DMatrix < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & readDSymmMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
 Add and read a required symmetrix DMatrix. More...
 
template<typename Type >
DSymmMatrixParam< Type > & readOptionalDSymmMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
 Add and read an optional DMatrix matrix parameter. More...
 
BeginreadBegin (std::istream &in, const char *label, bool isRequired=true)
 Add and read a class label and opening bracket. More...
 
EndreadEnd (std::istream &in)
 Add and read the closing bracket. More...
 
BlankreadBlank (std::istream &in)
 Add and read a new Blank object, representing a blank line. More...
 
void loadParamComposite (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load a required child ParamComposite. More...
 
void loadParamCompositeOptional (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load an optional child ParamComposite if isActive. More...
 
template<typename Type >
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value, bool isRequired)
 Add and load a new ScalarParam < Type > object. More...
 
template<typename Type >
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value)
 Add and load new required ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & loadCArray (Serializable::IArchive &ar, const char *label, Type *value, int n, bool isRequired)
 Add a C array parameter and load its elements. More...
 
template<typename Type >
CArrayParam< Type > & loadCArray (Serializable::IArchive &ar, const char *label, Type *value, int n)
 Add and load a required CArrayParam< Type > array parameter. More...
 
template<typename Type >
DArrayParam< Type > & loadDArray (Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n, bool isRequired)
 Add an load a DArray < Type > array parameter. More...
 
template<typename Type >
DArrayParam< Type > & loadDArray (Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n)
 Add and load a required DArray< Type > array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & loadFArray (Serializable::IArchive &ar, const char *label, FArray< Type, N > &array, bool isRequired)
 Add and load an FArray < Type, N > fixed-size array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & loadFArray (Serializable::IArchive &ar, const char *label, FArray< Type, N > &array)
 Add and load a required FArray < Type > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & loadCArray2D (Serializable::IArchive &ar, const char *label, Type *value, int m, int n, int np, bool isRequired)
 Add and load a CArray2DParam < Type > C 2D array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & loadCArray2D (Serializable::IArchive &ar, const char *label, Type *value, int m, int n, int np)
 Add and load a required < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & loadDMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired)
 Add and load a DMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & loadDMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and load a required DMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & loadDSymmMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int n, bool isRequired)
 Add and load a symmetric DSymmMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & loadDSymmMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int n)
 Add and load a required DSymmMatrixParam < Type > matrix parameter. More...
 
void addParamComposite (ParamComposite &child, bool next=true)
 Add a child ParamComposite object to the format array. More...
 
BeginaddBegin (const char *label)
 Add a Begin object representing a class name and bracket. More...
 
EndaddEnd ()
 Add a closing bracket. More...
 
BlankaddBlank ()
 Create and add a new Blank object, representing a blank line. More...
 
std::string className () const
 Get class name string. More...
 
bool isRequired () const
 Is this ParamComposite required in the input file? More...
 
bool isActive () const
 Is this parameter active? More...
 
- Public Member Functions inherited from Util::ParamComponent
virtual ~ParamComponent ()
 Destructor. More...
 
void setIndent (const ParamComponent &parent, bool next=true)
 Set indent level. More...
 
std::string indent () const
 Return indent string for this object (string of spaces). More...
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 Serialize this ParamComponent as a string. More...
 
- Public Member Functions inherited from Util::Serializable
virtual ~Serializable ()
 Destructor. More...
 
- Public Member Functions inherited from Util::MpiFileIo
 MpiFileIo ()
 Constructor. More...
 
 MpiFileIo (const MpiFileIo &other)
 Copy constructor. More...
 
bool isIoProcessor () const
 Can this processor do file I/O ? More...
 
void setIoCommunicator (MPI::Intracomm &communicator)
 Set the communicator. More...
 
void clearCommunicator ()
 Clear (nullify) the communicator. More...
 
bool hasIoCommunicator () const
 Does this object have an associated MPI communicator? More...
 
MPI::Intracomm & ioCommunicator () const
 Get the MPI communicator by reference. More...
 

Additional Inherited Members

- Public Types inherited from Util::Serializable
typedef BinaryFileOArchive OArchive
 Type of output archive used by save method. More...
 
typedef BinaryFileIArchive IArchive
 Type of input archive used by load method. More...
 
- Static Public Member Functions inherited from Util::ParamComponent
static void initStatic ()
 Initialize static echo member to false. More...
 
static void setEcho (bool echo=true)
 Enable or disable echoing for all subclasses of ParamComponent. More...
 
static bool echo ()
 Get echo parameter. More...
 
- Protected Member Functions inherited from Util::ParamComposite
void setClassName (const char *className)
 Set class name string. More...
 
void setIsRequired (bool isRequired)
 Set or unset the isActive flag. More...
 
void setIsActive (bool isActive)
 Set or unset the isActive flag. More...
 
void setParent (ParamComponent &param, bool next=true)
 Set this to the parent of a child component. More...
 
void addComponent (ParamComponent &param, bool isLeaf=true)
 Add a new ParamComponent object to the format array. More...
 
template<typename Type >
ScalarParam< Type > & add (std::istream &in, const char *label, Type &value, bool isRequired=true)
 Add a new required ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & addCArray (std::istream &in, const char *label, Type *value, int n, bool isRequired=true)
 Add (but do not read) a required C array parameter. More...
 
template<typename Type >
DArrayParam< Type > & addDArray (std::istream &in, const char *label, DArray< Type > &array, int n, bool isRequired=true)
 Add (but do not read) a DArray < Type > parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & addFArray (std::istream &in, const char *label, FArray< Type, N > &array, bool isRequired=true)
 Add (but do not read) a FArray < Type, N > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & addCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np, bool isRequired=true)
 Add (but do not read) a CArray2DParam < Type > 2D C-array. More...
 
template<typename Type >
DMatrixParam< Type > & addDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired=true)
 Add and read a required DMatrix < Type > matrix parameter. More...
 
- Protected Member Functions inherited from Util::ParamComponent
 ParamComponent ()
 Constructor. More...
 
 ParamComponent (const ParamComponent &other)
 Copy constructor. More...
 

Constructor & Destructor Documentation

DdMd::AtomDistributor::AtomDistributor ( )

Constructor.

Definition at line 26 of file AtomDistributor.cpp.

References Util::ParamComposite::setClassName().

DdMd::AtomDistributor::~AtomDistributor ( )

Destructor.

Definition at line 49 of file AtomDistributor.cpp.

Member Function Documentation

void DdMd::AtomDistributor::associate ( Domain domain,
Boundary boundary,
AtomStorage storage,
Buffer buffer 
)

Set pointers to associated objects.

This method must be called on all nodes, before any other.

Parameters
boundaryBoundary object (periodic boundary conditions)
domainDomain object (processor grid)
storageAtomStorage object (Atom container)
bufferBuffer object (for communication)

Definition at line 55 of file AtomDistributor.cpp.

Referenced by DdMd::AtomStorage::associate().

void DdMd::AtomDistributor::setCapacity ( int  cacheCapacity)

Set capacity of the send cache on the master node.

This method may be called on master processor before the first invokation of setup. Calling it on other processors has no effect, but does no harm.

Setting cacheCapacity < 0 enables computation of a default value large enough to accomodate full send buffers for all processors simultaneously.

Parameters
cacheCapacitymax number of atoms cached for sending

Definition at line 69 of file AtomDistributor.cpp.

References Util::Array< Data >::capacity(), and UTIL_THROW.

void DdMd::AtomDistributor::readParameters ( std::istream &  in)
virtual

Read cacheCapacity.

Parameters
ininput stream from which parameter is read.

Reimplemented from Util::ParamComposite.

Definition at line 80 of file AtomDistributor.cpp.

References DdMd::AtomArray::allocate(), Util::DArray< Data >::allocate(), DdMd::Buffer::atomCapacity(), DdMd::Domain::grid(), DdMd::Domain::isInitialized(), DdMd::Buffer::isInitialized(), Util::Grid::size(), and UTIL_THROW.

void DdMd::AtomDistributor::setup ( )

Initialization before the loop over atoms on master processor.

This method may only be called on the master processor, just before entering the loop to read atoms from file. It must be called after associate(), and after the associated Domain and Buffer objects are initialized.

Definition at line 146 of file AtomDistributor.cpp.

References DdMd::Buffer::beginSendBlock(), DdMd::Buffer::clearSendBuffer(), DdMd::Domain::grid(), DdMd::Domain::gridRank(), DdMd::Domain::isInitialized(), DdMd::Buffer::isInitialized(), Util::Grid::size(), and UTIL_THROW.

Referenced by DdMd::SerializeConfigIo::loadConfig(), DdMd::DdMdConfigIo::readConfig(), DdMd::LammpsConfigIo::readConfig(), and DdMd::DdMdOrderedConfigIo::readConfig().

Atom * DdMd::AtomDistributor::newAtomPtr ( )

Returns pointer an address available for a new Atom.

This method should be called only by the master processor. It returns the address within the internal cache for a new Atom object. Every call to newAtomPtr() must be followed by a matching call to addAtom().

Returns
address for a new Atom.

Definition at line 192 of file AtomDistributor.cpp.

References DdMd::Buffer::beginSendBlock(), DdMd::Atom::clear(), DdMd::Buffer::clearSendBuffer(), DdMd::Domain::communicator(), DdMd::Buffer::endSendBlock(), DdMd::Domain::gridRank(), DdMd::Domain::isInitialized(), DdMd::Atom::packAtom(), DdMd::Buffer::send(), and UTIL_THROW.

Referenced by DdMd::SerializeConfigIo::loadConfig(), DdMd::DdMdConfigIo::readConfig(), DdMd::LammpsConfigIo::readConfig(), and DdMd::DdMdOrderedConfigIo::readConfig().

int DdMd::AtomDistributor::addAtom ( )

Process the active atom for sending.

This method may be called only by the master processor, after a matching call to newAtomPtr(). It identifies which processor owns the active atom, i.e., the atom returned by the most recent call to newAtomPtr. After shifting the position of this atom to lie within the primary cell, it identifies the rank of the processor that owns this atom, based on its position. If this atom is owned by the master (rank == 0), the atom is added to the AtomStorage on the master node. Otherwise, the atom is added to a cache of stored atoms, and a pointer to this atom is added to a sendList for the relevant processor.

Atoms are actually transmitted to other processors as needed: Whenever addition of an atom to the cache would exceed either the cache capacity or the capacity of the sendlist for the owner processor, this method sends a buffer to the processor with the the largest sendList, before caching the current atom and marking it for later sending.

The coordinates of the active atom must be expressed in scaled / generalized [0, 1] coordinates when it is added.

Returns
rank of processor that owns the active atom.

Definition at line 262 of file AtomDistributor.cpp.

References DdMd::AtomStorage::addNewAtom(), DdMd::Buffer::beginSendBlock(), DdMd::Buffer::clearSendBuffer(), DdMd::Domain::communicator(), DdMd::Buffer::endSendBlock(), DdMd::Domain::grid(), DdMd::Domain::gridRank(), DdMd::AtomStorage::isCartesian(), DdMd::Domain::isInitialized(), DdMd::AtomStorage::newAtomPtr(), DdMd::Domain::ownerRank(), DdMd::Atom::packAtom(), DdMd::Atom::position(), DdMd::Buffer::send(), Simp::OrthorhombicBoundary::shiftGen(), Util::Grid::size(), and UTIL_THROW.

Referenced by DdMd::SerializeConfigIo::loadConfig(), DdMd::DdMdConfigIo::readConfig(), DdMd::LammpsConfigIo::readConfig(), and DdMd::DdMdOrderedConfigIo::readConfig().

void DdMd::AtomDistributor::send ( )
void DdMd::AtomDistributor::receive ( )
int DdMd::AtomDistributor::validate ( )

Validate distribution of atoms after completion.

This method checks call AtomStorage::isValid(), checks that the total number of atoms on all processors is equal to nAtom, and checks that every atom is in the correct processor domain.

On the master processor

Returns
total number of atoms distributed on master, 0 on slaves.

Definition at line 506 of file AtomDistributor.cpp.

References DdMd::AtomStorage::begin(), DdMd::Domain::communicator(), DdMd::AtomStorage::computeNAtomTotal(), Util::Dimension, DdMd::Domain::domainBound(), DdMd::Domain::isMaster(), DdMd::AtomStorage::isValid(), DdMd::AtomStorage::nAtom(), DdMd::AtomStorage::nAtomTotal(), Util::ConstPArrayIterator< Data >::notEnd(), and UTIL_THROW.

Referenced by DdMd::SerializeConfigIo::loadConfig(), DdMd::DdMdConfigIo::readConfig(), DdMd::LammpsConfigIo::readConfig(), and DdMd::DdMdOrderedConfigIo::readConfig().


The documentation for this class was generated from the following files: