OpenMD 3.1
Molecular Dynamics in the Open
|
ForceDecomposition is an interface for passing out and collecting information from many processors at various stages of the main non-bonded ForceLoop. More...
#include <ForceDecomposition.hpp>
Public Member Functions | |
ForceDecomposition (SimInfo *info, InteractionManager *iMan) | |
virtual void | setSnapshot (Snapshot *snap) |
virtual void | distributeInitialData ()=0 |
virtual void | distributeData ()=0 |
virtual void | zeroWorkArrays ()=0 |
virtual void | collectIntermediateData ()=0 |
virtual void | distributeIntermediateData ()=0 |
virtual void | collectData ()=0 |
virtual void | collectSelfData ()=0 |
virtual potVec | getSelfPotential () |
virtual potVec | getPairwisePotential () |
virtual potVec | getExcludedPotential () |
virtual potVec | getSelectedPotential () |
virtual potVec | getExcludedSelfPotential () |
virtual potVec | getSelectedSelfPotential () |
virtual bool | checkNeighborList (vector< Vector3d > savedPositions) |
virtual void | buildNeighborList (vector< int > &neighborList, vector< int > &point, vector< Vector3d > &savedPositions)=0 |
void | setCutoffRadius (RealType rCut) |
virtual Vector3d & | getGroupVelocityColumn (int atom2)=0 |
virtual vector< int > & | getAtomsInGroupRow (int cg1)=0 |
virtual vector< int > & | getAtomsInGroupColumn (int cg2)=0 |
virtual Vector3d | getAtomToGroupVectorRow (int atom1, int cg1)=0 |
virtual Vector3d | getAtomToGroupVectorColumn (int atom2, int cg2)=0 |
virtual RealType & | getMassFactorRow (int atom1)=0 |
virtual RealType & | getMassFactorColumn (int atom2)=0 |
virtual Vector3d | getIntergroupVector (int cg1, int cg2)=0 |
virtual Vector3d | getInteratomicVector (int atom1, int atom2)=0 |
virtual int & | getNAtomsInRow ()=0 |
virtual vector< int > & | getExcludesForAtom (int atom1)=0 |
virtual bool | skipAtomPair (int atom1, int atom2, int cg1, int cg2)=0 |
virtual bool | excludeAtomPair (int atom1, int atom2)=0 |
virtual int | getGlobalIDRow (int atom1)=0 |
virtual int | getGlobalIDCol (int atom2)=0 |
virtual int | getGlobalID (int atom1)=0 |
virtual int | getTopologicalDistance (int atom1, int atom2)=0 |
virtual void | addForceToAtomRow (int atom1, Vector3d fg)=0 |
virtual void | addForceToAtomColumn (int atom2, Vector3d fg)=0 |
virtual Vector3d & | getAtomVelocityColumn (int atom2)=0 |
virtual void | fillInteractionData (InteractionData &idat, int atom1, int atom2, bool newAtom1=true)=0 |
virtual void | unpackPrePairData (InteractionData &idat, int atom1, int atom2)=0 |
virtual void | unpackInteractionData (InteractionData &idat, int atom1, int atom2)=0 |
virtual void | fillSelfData (SelfData &sdat, int atom) |
virtual void | unpackSelfData (SelfData &sdat, int atom) |
virtual void | fillPreForceData (SelfData &sdat, int atom) |
virtual void | unpackPreForceData (SelfData &sdat, int atom) |
virtual void | addToHeatFlux (Vector3d hf) |
virtual void | setHeatFlux (Vector3d hf) |
Protected Attributes | |
SimInfo * | info_ {nullptr} |
SnapshotManager * | sman_ |
Snapshot * | snap_ |
ForceField * | ff_ |
InteractionManager * | interactionMan_ |
int | atomStorageLayout_ |
int | rigidBodyStorageLayout_ |
int | cutoffGroupStorageLayout_ |
bool | needVelocities_ |
bool | usePeriodicBoundaryConditions_ |
RealType | skinThickness_ |
Verlet neighbor list skin thickness. | |
RealType | rCut_ |
RealType | rList_ |
RealType | rListSq_ |
vector< int > | idents |
vector< int > | regions |
potVec | pairwisePot |
potVec | selfPot |
potVec | excludedPot |
potVec | excludedSelfPot |
potVec | selectedPot |
potVec | selectedSelfPot |
vector< vector< int > > | toposForAtom |
The topological distance between two atomic sites is handled via two vector structures for speed. | |
vector< vector< int > > | topoDist |
vector< vector< int > > | excludesForAtom |
vector< vector< int > > | groupList_ |
vector< RealType > | massFactors |
vector< AtomType * > | atypesLocal |
vector< Vector3i > | cellOffsets_ |
Vector3i | nCells_ |
vector< vector< int > > | cellList_ |
ForceDecomposition is an interface for passing out and collecting information from many processors at various stages of the main non-bonded ForceLoop.
The pairwise force calculation has an outer-running loop (the "I" loop) and an inner-running loop (the "J" loop). In parallel decompositions, these loop over different groups of atoms on different processors. Between each set of computations on the local processor, data must be exchanged among the processors. This can happen at different times in the calculation:
distributeInitialData (parallel communication - one time only) distributeData (parallel communication - every ForceLoop)
loop iLoop over nLoops (nLoops may be 1, 2, or until self consistent) | loop over i | | loop over j | | | localComputation | | end | end | if (nLoops > 1): | | collectIntermediateData (parallel communication) | | distributeIntermediateData (parallel communication) | endif end collectData (parallel communication) loop over i | localComputation end collectSelfData (parallel communication)
ForceDecomposition provides the interface for ForceLoop to do the communication steps and to iterate using the correct set of atoms and cutoff groups.
Definition at line 94 of file ForceDecomposition.hpp.
OpenMD::ForceDecomposition::ForceDecomposition | ( | SimInfo * | info, |
InteractionManager * | iMan ) |
Definition at line 56 of file ForceDecomposition.cpp.
|
inlinevirtual |
Definition at line 97 of file ForceDecomposition.hpp.
|
virtual |
Definition at line 204 of file ForceDecomposition.cpp.
|
virtual |
Definition at line 176 of file ForceDecomposition.cpp.
|
pure virtual |
Implemented in OpenMD::ForceMatrixDecomposition.
|
pure virtual |
Implemented in OpenMD::ForceMatrixDecomposition.
|
pure virtual |
Implemented in OpenMD::ForceMatrixDecomposition.
|
virtual |
Definition at line 113 of file ForceDecomposition.cpp.
|
virtual |
Definition at line 127 of file ForceDecomposition.cpp.
|
pure virtual |
Implemented in OpenMD::ForceMatrixDecomposition.
|
inlinevirtual |
Definition at line 110 of file ForceDecomposition.hpp.
|
inlinevirtual |
Definition at line 112 of file ForceDecomposition.hpp.
|
inlinevirtual |
Definition at line 109 of file ForceDecomposition.hpp.
|
inlinevirtual |
Definition at line 111 of file ForceDecomposition.hpp.
|
inlinevirtual |
Definition at line 113 of file ForceDecomposition.hpp.
|
inlinevirtual |
Definition at line 108 of file ForceDecomposition.hpp.
void OpenMD::ForceDecomposition::setCutoffRadius | ( | RealType | rCut | ) |
Definition at line 107 of file ForceDecomposition.cpp.
|
virtual |
Definition at line 209 of file ForceDecomposition.cpp.
|
inlinevirtual |
Definition at line 99 of file ForceDecomposition.hpp.
|
pure virtual |
Implemented in OpenMD::ForceMatrixDecomposition.
|
virtual |
Definition at line 149 of file ForceDecomposition.cpp.
|
virtual |
Definition at line 167 of file ForceDecomposition.cpp.
|
protected |
Definition at line 178 of file ForceDecomposition.hpp.
|
protected |
Definition at line 210 of file ForceDecomposition.hpp.
|
protected |
Definition at line 214 of file ForceDecomposition.hpp.
|
protected |
Definition at line 212 of file ForceDecomposition.hpp.
|
protected |
Definition at line 180 of file ForceDecomposition.hpp.
|
protected |
Definition at line 192 of file ForceDecomposition.hpp.
|
protected |
Definition at line 193 of file ForceDecomposition.hpp.
|
protected |
Definition at line 207 of file ForceDecomposition.hpp.
|
protected |
Definition at line 175 of file ForceDecomposition.hpp.
|
protected |
Definition at line 208 of file ForceDecomposition.hpp.
|
protected |
Definition at line 188 of file ForceDecomposition.hpp.
|
protected |
Definition at line 172 of file ForceDecomposition.hpp.
|
protected |
Definition at line 176 of file ForceDecomposition.hpp.
|
protected |
Definition at line 209 of file ForceDecomposition.hpp.
|
protected |
Definition at line 213 of file ForceDecomposition.hpp.
|
protected |
Definition at line 181 of file ForceDecomposition.hpp.
|
protected |
Definition at line 190 of file ForceDecomposition.hpp.
|
protected |
Definition at line 184 of file ForceDecomposition.hpp.
|
protected |
Definition at line 189 of file ForceDecomposition.hpp.
|
protected |
Definition at line 179 of file ForceDecomposition.hpp.
|
protected |
Definition at line 185 of file ForceDecomposition.hpp.
|
protected |
Definition at line 186 of file ForceDecomposition.hpp.
|
protected |
Definition at line 194 of file ForceDecomposition.hpp.
|
protected |
Definition at line 195 of file ForceDecomposition.hpp.
|
protected |
Definition at line 191 of file ForceDecomposition.hpp.
|
protected |
Verlet neighbor list skin thickness.
Definition at line 183 of file ForceDecomposition.hpp.
|
protected |
Definition at line 173 of file ForceDecomposition.hpp.
|
protected |
Definition at line 174 of file ForceDecomposition.hpp.
|
protected |
Definition at line 206 of file ForceDecomposition.hpp.
|
protected |
The topological distance between two atomic sites is handled via two vector structures for speed.
These structures agnostic regarding the parallel decomposition. The index for toposForAtom could be local or row, while the values could be local or column. It will be up to the specific decomposition method to fill these.
Definition at line 205 of file ForceDecomposition.hpp.
Referenced by OpenMD::ForceMatrixDecomposition::distributeInitialData().
|
protected |
Definition at line 182 of file ForceDecomposition.hpp.