MercuryDPM
Beta
|
This is the base class for both Mercury2D and Mercury3D. Note the actually abstract grid is defined in the class Grid defined below. More...
#include <MercuryBase.h>
Public Member Functions | |
MercuryBase () | |
This is the default constructor. It sets sensible defaults. More... | |
~MercuryBase () | |
This is the default destructor. More... | |
MercuryBase (const MercuryBase &mercuryBase) | |
Copy-constructor. More... | |
void | constructor () |
This is the actual constructor, it is called do both constructors above. More... | |
void | hGridActionsBeforeTimeLoop () override |
This sets up the broad phase information, has to be done at this stage because it requires the particle size. More... | |
void | hGridActionsBeforeTimeStep () override |
Performs all necessary actions before a time-step, like updating the particles and resetting all the bucket information, etc. More... | |
void | read (std::istream &is) override |
Reads the MercuryBase from an input stream, for example a restart file. More... | |
void | write (std::ostream &os, bool writeAllParticles=true) const override |
Writes the MercuryBase to an output stream, for example a restart file. More... | |
Mdouble | getHGridCurrentMaxRelativeDisplacement () const |
Returns hGridCurrentMaxRelativeDisplacement_. More... | |
Mdouble | getHGridTotalCurrentMaxRelativeDisplacement () const |
Returns hGridTotalCurrentMaxRelativeDisplacement_. More... | |
void | setHGridUpdateEachTimeStep (bool updateEachTimeStep) |
Sets whether or not the HGrid must be updated every time step. More... | |
bool | getHGridUpdateEachTimeStep () const override |
Gets whether or not the HGrid is updated every time step. More... | |
void | setHGridMaxLevels (unsigned int HGridMaxLevels) |
Sets the maximum number of levels of the HGrid in this MercuryBase. More... | |
unsigned int | getHGridMaxLevels () const |
Gets the maximum number of levels of the HGrid in this MercuryBase. More... | |
HGridMethod | getHGridMethod () const |
Gets whether the HGrid in this MercuryBase is BOTTOMUP or TOPDOWN. More... | |
void | setHGridMethod (HGridMethod hGridMethod) |
Sets the HGridMethod to either BOTTOMUP or TOPDOWN. More... | |
HGridDistribution | getHGridDistribution () const |
Gets how the sizes of the cells of different levels are distributed. More... | |
void | setHGridDistribution (HGridDistribution hGridDistribution) |
Sets how the sizes of the cells of different levels are distributed. More... | |
Mdouble | getHGridCellOverSizeRatio () const |
Gets the ratio of the smallest cell over the smallest particle. More... | |
void | setHGridCellOverSizeRatio (Mdouble cellOverSizeRatio) |
Sets the ratio of the smallest cell over the smallest particle. More... | |
bool | hGridNeedsRebuilding () |
Gets if the HGrid needs rebuilding before anything else happens. More... | |
virtual unsigned int | getHGridTargetNumberOfBuckets () const |
Gets the desired number of buckets, which is the maximum of the number of particles and 10. More... | |
virtual Mdouble | getHGridTargetMinInteractionRadius () const |
Gets the desired size of the smallest cells of the HGrid. More... | |
virtual Mdouble | getHGridTargetMaxInteractionRadius () const |
Gets the desired size of the largest cells of the HGrid. More... | |
bool | checkParticleForInteraction (const BaseParticle &P) override |
Checks if given BaseParticle has an interaction with a BaseWall or other BaseParticle. More... | |
virtual Mdouble | userHGridCellSize (unsigned int level) |
Virtual function that enables inheriting classes to implement a function to let the user set the cell size of the HGrid. More... | |
void | hGridInfo () const |
Writes the info of the HGrid to the screen in a nice format. More... | |
Public Member Functions inherited from DPMBase | |
void | constructor () |
A function which initialises the member variables to default values, so that the problem can be solved off the shelf; sets up a basic two dimensional problem which can be solved off the shelf. It is called in the constructor DPMBase(). More... | |
DPMBase () | |
Constructor that calls the "void constructor()". More... | |
DPMBase (const FilesAndRunNumber &other) | |
Copy constructor type-1. More... | |
DPMBase (const DPMBase &other) | |
Copy constructor type-2. More... | |
virtual | ~DPMBase () |
virtual destructor More... | |
void | solve () |
The work horse of the code. More... | |
void | checkSettings () |
Checks if the essentials are set properly to go ahead with solving the problem. More... | |
virtual void | writeOutputFiles () |
Writes the simulation data onto all the files i.e. .data, .ene, .fstat ... More... | |
void | solve (int argc, char *argv[]) |
The solve function is the work horse of the code with the user input. More... | |
virtual void | setupInitialConditions () |
This function allows to set the initial conditions for our problem to be solved, by default particle locations are randomly set. Remember particle properties must also be defined here. More... | |
virtual void | writeXBallsScript () const |
This writes a script which can be used to load the xballs problem to display the data just generated. More... | |
virtual double | getInfo (const BaseParticle &P) const |
A virtual method that allows the user to overrride and set what is written into the info column in the data file. By default it returns the Species ID number. More... | |
virtual void | writeRestartFile () |
Stores all the particle data for current save time step. Calls the write function. More... | |
int | readRestartFile () |
Reads all the particle data corresponding to the current saved time step. Which is what the restart file basically stores. The problem description with the latest particle data. More... | |
int | readRestartFile (std::string fileName) |
Also reads all the particle data corresponding to the current saved time step. More... | |
virtual void | readOld (std::istream &is) |
Reads all particle data into a restart file; old version. More... | |
bool | readDataFile (const std::string fileName, unsigned int format=0) |
This allows particle data to be reloaded from data files. More... | |
bool | readParAndIniFiles (const std::string fileName) |
Allows the user to read par.ini files (useful to read MDCLR files) More... | |
bool | readNextDataFile (unsigned int format=0) |
Reads the next data file with default format=0. However, one can modify the format based on whether the particle data corresponds to 3D or 2D data. See XBalls/xballs.txt. More... | |
bool | findNextExistingDataFile (Mdouble tMin, bool verbose=true) |
Useful when fileType is chosen as Multiple Files or Multiple files with padded. More... | |
bool | readArguments (int argc, char *argv[]) |
Can interpret main function input arguments that are passed by the driver codes. More... | |
Mdouble | getTime () const |
Access function for the time. More... | |
unsigned int | getNtimeSteps () const |
Returns the current counter of time steps. More... | |
void | setTime (Mdouble time) |
Access function for the time. More... | |
void | setTimeMax (Mdouble newTMax) |
Allows the upper time limit to be changed. More... | |
Mdouble | getTimeMax () const |
Allows the user to access the total simulation time during the simulation. Cannot change it though. More... | |
void | setDoCGAlways (bool newDoCGFlag) |
void | setRotation (bool newRotFlag) |
Allows to set the flag for enabling or disabling particle rotation in the simulations. More... | |
bool | getRotation () const |
Returns a flag indicating if particle rotation is enabled or disabled. More... | |
bool | getDoCGAlways () const |
Mdouble | getXMin () const |
If the length of the problem domain in x-direction is XMax - XMin, then getXMin() returns XMin,. More... | |
Mdouble | getXMax () const |
If the length of the problem domain in x-direction is XMax - XMin, then getXMax() returns XMax,. More... | |
Mdouble | getYMin () const |
If the length of the problem domain in y-direction is YMax - YMin, then getYMin() returns YMin,. More... | |
Mdouble | getYMax () const |
If the length of the problem domain in y-direction is YMax - YMin, then getYMax() returns XMax,. More... | |
Mdouble | getZMin () const |
If the length of the problem domain in z-direction is ZMax - ZMin, then getZMin() returns ZMin,. More... | |
Mdouble | getZMax () const |
If the length of the problem domain in z-direction is ZMax - ZMin, then getZMax() returns ZMax,. More... | |
void | setXMin (Mdouble newXMin) |
If the length of the problem domain in x-direction is XMax - XMin, this method sets XMin. More... | |
void | setYMin (Mdouble newYMin) |
If the length of the problem domain in y-direction is YMax - YMin, this method sets YMin. More... | |
void | setZMin (Mdouble newZMin) |
If the length of the problem domain in z-direction is ZMax - ZMin, this method sets ZMin. More... | |
void | setXMax (Mdouble newXMax) |
If the length of the problem domain in x-direction is XMax - XMin, this method sets XMax. More... | |
void | setYMax (Mdouble newYMax) |
If the length of the problem domain in y-direction is YMax - YMin, this method sets YMax. More... | |
void | setZMax (Mdouble newZMax) |
If the length of the problem domain in z-direction is XMax - XMin, this method sets ZMax. More... | |
void | setTimeStep (Mdouble newDt) |
Allows the time step dt to be changed. More... | |
Mdouble | getTimeStep () const |
Allows the time step dt to be accessed. More... | |
void | setXBallsColourMode (int newCMode) |
Set the xball output mode. More... | |
int | getXBallsColourMode () const |
Get the xball colour mode (CMode) More... | |
void | setXBallsVectorScale (double newVScale) |
Set the scale of vectors in xballs. More... | |
double | getXBallsVectorScale () const |
Returns the scale of vectors used in xballs. More... | |
void | setXBallsAdditionalArguments (std::string newXBArgs) |
Set the additional arguments for xballs. More... | |
std::string | getXBallsAdditionalArguments () const |
void | setXBallsScale (Mdouble newScale) |
Sets the scale of the view (either normal, zoom in or zoom out) to display in xballs. The default is fit to screen. More... | |
double | getXBallsScale () const |
Returns the scale of the view in xballs. More... | |
void | setGravity (Vec3D newGravity) |
Allows to modify the gravity vector. More... | |
Vec3D | getGravity () const |
Returns the gravity vector. More... | |
void | setDimension (unsigned int newDim) |
Sets the system and particle dimension. More... | |
void | setSystemDimensions (unsigned int newDim) |
Allows for the dimension of the simulation to be changed. More... | |
unsigned int | getSystemDimensions () const |
Returns the dimension of the simulation. Note there is also a particle dimension. More... | |
void | setParticleDimensions (unsigned int particleDimensions) |
Allows the dimension of the particle (f.e. for mass) to be changed. e.g. discs or spheres. More... | |
unsigned int | getParticleDimensions () const |
Returns the particle dimensions. More... | |
std::string | getRestartVersion () const |
This is to take into account for different Mercury versions. Returns the version of the restart file. More... | |
void | setRestartVersion (std::string newRV) |
Sets restart_version. More... | |
bool | getRestarted () const |
Returns the flag denoting if the simulation was restarted or not. More... | |
void | setRestarted (bool newRestartedFlag) |
Allows to set the flag stating if the simulation is to be restarted or not. More... | |
bool | getAppend () const |
Returns the flag denoting if the append option is on or off. More... | |
void | setAppend (bool newAppendFlag) |
Allows to set the append option. More... | |
Mdouble | getElasticEnergy () const |
Returns the global elastic energy within the system. More... | |
Mdouble | getKineticEnergy () const |
Returns the global kinetic energy stored in the system. More... | |
bool | areInContact (const BaseParticle *pI, const BaseParticle *pJ) const |
Checks if two particle are in contact or is there any positive overlap. More... | |
virtual void | hGridInsertParticle (BaseParticle *obj UNUSED) |
no implementation but can be overidden in its derived classes. More... | |
virtual void | hGridUpdateParticle (BaseParticle *obj UNUSED) |
no implementation but can be overidden in its derived classes. More... | |
virtual void | hGridRemoveParticle (BaseParticle *obj UNUSED) |
no implementation but can be overidden in its derived classes. More... | |
virtual void | gatherContactStatistics (unsigned int index1 UNUSED, int index2 UNUSED, Vec3D Contact UNUSED, Mdouble delta UNUSED, Mdouble ctheta UNUSED, Mdouble fdotn UNUSED, Mdouble fdott UNUSED, Vec3D P1_P2_normal_ UNUSED, Vec3D P1_P2_tangential UNUSED) |
//Not unsigned index because of possible wall collisions. More... | |
Public Member Functions inherited from FilesAndRunNumber | |
FilesAndRunNumber () | |
Constructor. More... | |
FilesAndRunNumber (const FilesAndRunNumber &other) | |
Copy constructor. More... | |
virtual | ~FilesAndRunNumber () |
Constructor. More... | |
void | constructor () |
a function called by the FilesAndRunNumber() (constructor) More... | |
void | incrementRunNumberInFile () |
Increment the run Number (counter value) stored in the file_counter (COUNTER_DONOTDEL) by 1 and store the new value in the counter file. More... | |
int | readRunNumberFromFile () |
Read the run number or the counter from the counter file (COUNTER_DONOTDEL) More... | |
void | autoNumber () |
The autoNumber() function is the trigger. It calls three functions. setRunNumber(), readRunNumberFromFile() and incrementRunNumberInFile(). More... | |
std::vector< int > | get2DParametersFromRunNumber (int size_x, int size_y) |
This turns a counter into two indices which is an amazing feature for doing two dimensional parameter studies. The indices run from 1:size_x and 1:size_y, while the study number starts at 0 ( initially the counter=1 in COUNTER_DONOTDEL) More... | |
int | launchNewRun (const char *name, bool quick=false) |
This launches a code from within this code. Please pass the name of the code to run. More... | |
void | setRunNumber (int runNumber) |
This sets the counter/Run number, overriding the defaults. More... | |
int | getRunNumber () const |
This returns the current value of the counter (runNumber_) More... | |
void | read (std::istream &is) |
Accepts an input stream std::istream. More... | |
void | write (std::ostream &os) const |
Accepts an output stream read function, which accepts an input stream std::ostream. More... | |
Public Member Functions inherited from Files | |
Files () | |
A constructor. More... | |
virtual | ~Files () |
A destructor, watch out its a virtual destructor. More... | |
Files (const Files &other) | |
Copy constructor. More... | |
MERCURY_DEPRECATED File & | getDataFile () |
The non const version. Allows one to edit the File::dataFile. More... | |
MERCURY_DEPRECATED File & | getEneFile () |
The non const version. Allows to edit the File::eneFile. More... | |
MERCURY_DEPRECATED File & | getFStatFile () |
The non const version. Allows to edit the File::fStatFile. More... | |
MERCURY_DEPRECATED File & | getRestartFile () |
The non const version. Allows to edit the File::restartFile. More... | |
MERCURY_DEPRECATED File & | getStatFile () |
The non const version. Allows to edit the File::statFile. More... | |
MERCURY_DEPRECATED const File & | getDataFile () const |
The const version. Does not allow for any editing of the File::dataFile. More... | |
MERCURY_DEPRECATED const File & | getEneFile () const |
The const version. Does not allow for any editing of the File::eneFile. More... | |
MERCURY_DEPRECATED const File & | getFStatFile () const |
The const version. Does not allow for any editing of the File::fStatFile. More... | |
MERCURY_DEPRECATED const File & | getRestartFile () const |
The const version. Does not allow for any editing of the File::restartFile. More... | |
MERCURY_DEPRECATED const File & | getStatFile () const |
The const version. Does not allow for any editing of the File::statFile. More... | |
const std::string & | getName () const |
Returns the name of the file. Does not allow to change it though. More... | |
void | setName (const std::string &name) |
Allows to set the name of all the files (ene, data, fstat, restart, stat) More... | |
void | setName (const char *name) |
Calls setName(std::string) More... | |
void | setSaveCount (unsigned int saveCount) |
Sets File::saveCount_ for all files (ene, data, fstat, restart, stat) More... | |
void | setFileType (FileType fileType) |
Sets File::fileType_ for all files (ene, data, fstat, restart, stat) More... | |
void | setOpenMode (std::fstream::openmode openMode) |
Sets File::openMode_ for all files (ene, data, fstat, restart, stat) More... | |
void | resetFileCounter () |
Resets the file counter for each file i.e. for ene, data, fstat, restart, stat) More... | |
void | read (std::istream &is) |
Extracts data from the input stream (which is basically a file you want to read from) into name_, restartFile .... More... | |
void | write (std::ostream &os) const |
Writes data into a file from the member variables name_, restartFile, dataFile etc. More... | |
void | openFiles () |
Opens all the files (ene, data, fstat, restart, stat) for reading and writing purposes. More... | |
void | closeFiles () |
Closes all files (ene, data, fstat, restart, stat) that were opened to read or write. More... | |
void | setNextSavedTimeStep (unsigned int nextSavedTimeStep) |
Sets the next time step for all the files (ene, data, fstat, restart, stat) at which the data is to be written or saved. More... | |
Protected Member Functions | |
void | hGridRebuild () |
This sets up the parameters required for the contact model. More... | |
void | hGridInsertParticle (BaseParticle *obj) override |
Inserts a single Particle to current grid. More... | |
void | broadPhase (BaseParticle *i) override |
This checks particles in the HGRID to see if for closer enough for possible contact. More... | |
virtual void | hGridFindOneSidedContacts (BaseParticle *obj)=0 |
This is a purely virtual function that checks if an object is in the grid, this code is dimension dependent so purely virtual at this stage. More... | |
virtual bool | hGridHasParticleContacts (const BaseParticle *obj)=0 |
Purely virtual function that checks if the given particle has a possible contact with any other BaseParticle in the HGrid. More... | |
void | hGridUpdateMove (BaseParticle *iP, Mdouble move) override |
Computes the relative displacement of the given BaseParticle and updates the currentMaxRelativeDisplacement_ accordingly. More... | |
void | hGridActionsBeforeIntegration () override |
Resets the currentMaxRelativeDisplacement_ to 0. More... | |
void | hGridActionsAfterIntegration () override |
Sets the totalCurrentMaxRelativeDisplacement_ as 2*currentMaxRelativeDisplacement_. More... | |
HGrid * | getHGrid () |
Gets the HGrid used by this problem. More... | |
const HGrid * | getHGrid () const |
Gets the HGrid used by this problem, const version. More... | |
bool | readNextArgument (int &i, int argc, char *argv[]) override |
Reads the next command line argument. More... | |
Protected Member Functions inherited from DPMBase | |
virtual void | computeAllForces () |
Computes all the forces acting on the particles by using the setTorque and setForce methods. See BaseInteractible.cc. More... | |
virtual void | computeInternalForces (BaseParticle *i) |
Computes the forces between particles (internal in the sense that the sum over all these forces is zero i.e. fully modelled forces) More... | |
virtual void | computeInternalForces (BaseParticle *P1, BaseParticle *P2) |
Computes the forces between particles (internal in the sense that the sum over all these forces is zero i.e. fully modelled forces) More... | |
virtual void | computeExternalForces (BaseParticle *PI) |
Computes the external forces acting on particles (e.g. gravitational) More... | |
virtual void | computeForcesDueToWalls (BaseParticle *PI) |
Computes the forces on the particles due to the walls (normals are outward normals) More... | |
virtual void | actionsOnRestart () |
A virtual function where the users can add extra code which is executed only when the code is restarted. More... | |
virtual void | actionsBeforeTimeLoop () |
A virtual function. Allows one to carry out any operations before the start of the time loop. More... | |
virtual void | actionsBeforeTimeStep () |
A virtual function which allows to define operations to be executed before the new time step. More... | |
virtual void | actionsAfterSolve () |
A virtual function which allows to define operations to be executed after the solve(). More... | |
virtual void | actionsAfterTimeStep () |
A virtual function which allows to define operations to be executed after time step. More... | |
virtual void | outputXBallsData (std::ostream &os) const |
This function writes the location of the walls and particles in a format the XBalls program can read. See XBalls/xballs.txt. However, MercuryDPM supports a much better viewer now called Paraview. See the tutorials section in the documentation. More... | |
virtual void | outputXBallsDataParticle (const unsigned int i, const unsigned int format, std::ostream &os) const |
This function writes out the particle locations into an output stream in a format the XBalls program can read. More... | |
virtual void | writeEneHeader (std::ostream &os) const |
Writes a header with a certain format for ENE file. More... | |
virtual void | writeFstatHeader (std::ostream &os) const |
Writes a header with a certain format for FStat file. More... | |
virtual void | writeEneTimestep (std::ostream &os) const |
This function enables one to write the global energy available in the system after each time step. The default is to compute the rotational and translational kinetic energy, potential energy and the centre of mass. More... | |
virtual void | initialiseStatistics () |
no implementation but can be overidden in its derived classes. More... | |
virtual void | outputStatistics () |
no implementation but can be overidden in its derived classes. More... | |
void | gatherContactStatistics () |
virtual void | processStatistics (bool usethese UNUSED) |
no implementation but can be overidden in its derived classes. More... | |
virtual void | finishStatistics () |
no implementation but can be overidden in its derived classes. More... | |
virtual void | integrateBeforeForceComputation () |
This is were the integration is done, at the moment it is velocity Verlet integration and is done before the forces are computed. See http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet. More... | |
virtual void | integrateAfterForceComputation () |
Integration is done after force computations. We apply the Velocity verlet scheme. See http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet. More... | |
virtual void | checkInteractionWithBoundaries () |
There are a range of boundaries one could implement depending on ones' problem. This methods checks for interactions between particles and such range of boundaries. See BaseBoundary.h and all the boundaries in the Boundaries folder. More... | |
void | setFixedParticles (unsigned int n) |
void | initialiseTangentialSprings () |
virtual void | printTime () const |
Displays the current simulation time onto your screen for example. More... | |
virtual bool | continueSolve () const |
void | outputInteractionDetails () const |
Displays the interaction details corresponding to the pointer objects in the interaction handler. More... | |
bool | isTimeEqualTo (Mdouble time) const |
Checks if the input variable "time" is the current time in the simulation. More... | |
void | removeDuplicatePeriodicParticles () |
Removes periodic duplicate Particles. More... | |
void | checkAndDuplicatePeriodicParticles () |
In case of periodic boundaries, the below methods checks and adds particles when necessary into the particle handler. See DPMBase.cc and PeriodicBoundary.cc for more details. More... | |
Private Attributes | |
HGrid * | grid |
A pointer to the HGrid associated with this MercuryBase. More... | |
HGridMethod | hGridMethod_ |
Indicator of which way the interactions between different levels are tested. More... | |
HGridDistribution | hGridDistribution_ |
Indicator for the distribution of the sizes of the cells of different levels of the HGrid. The default is EXPONENTIAL. More... | |
Mdouble | currentMaxRelativeDisplacement_ |
Mdouble that denotes the maximum of the displacement of a particle divided by the cell size of the level of that particle at the current time step. This is useful to see whether a particle could have moved more than one cell. More... | |
Mdouble | totalCurrentMaxRelativeDisplacement_ |
After each time step, this Mdouble is increased by 2*currentMaxRelativeDisplacement_. More... | |
bool | gridNeedsUpdate_ |
Boolean that indicates whether or not the grid needs to be updated. More... | |
bool | updateEachTimeStep_ |
Boolean which indicates whether or not the cell in which a particle is must be updated every timestep. More... | |
unsigned int | hGridMaxLevels_ |
Unsigned integer that indicates the maximum number of levels of the HGrid. More... | |
Mdouble | hGridCellOverSizeRatio_ |
The maximum ratio between the size of the cells and the BaseParticle they contain. More... | |
Additional Inherited Members | |
Public Attributes inherited from DPMBase | |
SpeciesHandler | speciesHandler |
A handler to that stores the species type i.e. elastic, linear visco-elastic... et cetera. More... | |
RNG | random |
This is a random generator, often used for setting up the initial conditions etc... More... | |
ParticleHandler | particleHandler |
An object of the class ParticleHandler, contains the pointers to all the particles created. More... | |
WallHandler | wallHandler |
An object of the class WallHandler. Contains pointers to all the walls created. More... | |
BoundaryHandler | boundaryHandler |
An object of the class BoundaryHandler which concerns insertion and deletion of particles into or from regions. More... | |
InteractionHandler | interactionHandler |
An object of the class InteractionHandler. More... | |
Public Attributes inherited from Files | |
File | dataFile |
An instance of class File to handle in- and output into a .data file. More... | |
File | fStatFile |
An instance of class File to handle in- and output into a .fstat file. More... | |
File | eneFile |
An instance of class File to handle in- and output into a .ene file. More... | |
File | restartFile |
An instance of class File to handle in- and output into a .restart file. More... | |
File | statFile |
An instance of class File to handle in- and output into a .stat file. More... | |
This is the base class for both Mercury2D and Mercury3D. Note the actually abstract grid is defined in the class Grid defined below.
Definition at line 74 of file MercuryBase.h.
MercuryBase::MercuryBase | ( | ) |
This is the default constructor. It sets sensible defaults.
Definition at line 34 of file MercuryBase.cc.
References constructor(), DEBUG, and logger.
MercuryBase::~MercuryBase | ( | ) |
This is the default destructor.
Definition at line 40 of file MercuryBase.cc.
References DEBUG, grid, and logger.
MercuryBase::MercuryBase | ( | const MercuryBase & | mercuryBase | ) |
Copy-constructor.
[in] | mercuryBase | The MercuryBase that needs to be copied. |
Copy constructor that copies almost all properties of the given MercuryBase into the new MercuryBase. Please note that the grid is not literally copied, but everything to make that grid is copied and the gridNeedsUpdate_ is set to true, so that the grid is made before anything else happens.
Definition at line 58 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_, DEBUG, grid, gridNeedsUpdate_, hGridCellOverSizeRatio_, hGridDistribution_, hGridMaxLevels_, hGridMethod_, logger, totalCurrentMaxRelativeDisplacement_, and updateEachTimeStep_.
|
overrideprotectedvirtual |
This checks particles in the HGRID to see if for closer enough for possible contact.
[in] | i | A pointer to the BaseParticle for which we want to see if there are interactions on its own level. |
Reimplemented from DPMBase.
Definition at line 314 of file MercuryBase.cc.
References hGridFindOneSidedContacts().
|
overridevirtual |
Checks if given BaseParticle has an interaction with a BaseWall or other BaseParticle.
[in] | p | The BaseParticle for which we want to check if there is an interaction. |
Check for the given BaseParticle if there is an interaction with any other object. First check all walls, then all particles.
Reimplemented from DPMBase.
Definition at line 609 of file MercuryBase.cc.
References BaseHandler< T >::begin(), BaseHandler< T >::end(), hGridHasParticleContacts(), logger, VERBOSE, and DPMBase::wallHandler.
Referenced by Chute::createBottom(), and ChuteBottom::setupInitialConditions().
void MercuryBase::constructor | ( | ) |
This is the actual constructor, it is called do both constructors above.
Function that is called by the default constructor, it sets all parameters for the MercuryBase to sensible defaults.
Definition at line 80 of file MercuryBase.cc.
References EXPONENTIAL, grid, gridNeedsUpdate_, hGridCellOverSizeRatio_, hGridDistribution_, hGridMaxLevels_, hGridMethod_, TOPDOWN, and updateEachTimeStep_.
Referenced by MercuryBase().
|
protected |
Gets the HGrid used by this problem.
Definition at line 389 of file MercuryBase.cc.
References grid.
Referenced by hGridActionsBeforeTimeStep(), Mercury2D::hGridFindContactsWithinTargetCell(), Mercury3D::hGridFindContactsWithinTargetCell(), Mercury2D::hGridFindContactsWithTargetCell(), Mercury3D::hGridFindContactsWithTargetCell(), Mercury3D::hGridFindOneSidedContacts(), Mercury2D::hGridFindOneSidedContacts(), Mercury3D::hGridHasContactsInTargetCell(), Mercury2D::hGridHasParticleContacts(), hGridNeedsRebuilding(), Mercury2D::hGridRemoveParticle(), Mercury3D::hGridRemoveParticle(), hGridUpdateMove(), Mercury3D::hGridUpdateParticle(), and Mercury2D::hGridUpdateParticle().
|
protected |
Gets the HGrid used by this problem, const version.
Definition at line 397 of file MercuryBase.cc.
References grid.
Mdouble MercuryBase::getHGridCellOverSizeRatio | ( | ) | const |
Gets the ratio of the smallest cell over the smallest particle.
Definition at line 477 of file MercuryBase.cc.
References hGridCellOverSizeRatio_.
Referenced by getHGridTargetMaxInteractionRadius(), getHGridTargetMinInteractionRadius(), hGridActionsBeforeTimeStep(), hGridRebuild(), and write().
Mdouble MercuryBase::getHGridCurrentMaxRelativeDisplacement | ( | ) | const |
Returns hGridCurrentMaxRelativeDisplacement_.
Definition at line 154 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_.
HGridDistribution MercuryBase::getHGridDistribution | ( | ) | const |
Gets how the sizes of the cells of different levels are distributed.
Definition at line 455 of file MercuryBase.cc.
References hGridDistribution_.
Referenced by hGridRebuild().
unsigned int MercuryBase::getHGridMaxLevels | ( | ) | const |
Gets the maximum number of levels of the HGrid in this MercuryBase.
Definition at line 512 of file MercuryBase.cc.
References hGridMaxLevels_.
Referenced by hGridRebuild(), and write().
HGridMethod MercuryBase::getHGridMethod | ( | ) | const |
Gets whether the HGrid in this MercuryBase is BOTTOMUP or TOPDOWN.
Definition at line 439 of file MercuryBase.cc.
References hGridMethod_.
Referenced by Mercury2D::hGridFindOneSidedContacts(), and Mercury3D::hGridFindOneSidedContacts().
|
virtual |
Gets the desired size of the largest cells of the HGrid.
Definition at line 591 of file MercuryBase.cc.
References getHGridCellOverSizeRatio(), BaseParticle::getInteractionRadius(), ParticleHandler::getLargestParticle(), BaseHandler< T >::getNumberOfObjects(), and DPMBase::particleHandler.
Referenced by hGridRebuild().
|
virtual |
Gets the desired size of the smallest cells of the HGrid.
Definition at line 575 of file MercuryBase.cc.
References getHGridCellOverSizeRatio(), BaseParticle::getInteractionRadius(), BaseHandler< T >::getNumberOfObjects(), ParticleHandler::getSmallestParticle(), and DPMBase::particleHandler.
Referenced by hGridRebuild().
|
virtual |
Gets the desired number of buckets, which is the maximum of the number of particles and 10.
Definition at line 558 of file MercuryBase.cc.
References BaseHandler< T >::getNumberOfObjects(), and DPMBase::particleHandler.
Referenced by hGridNeedsRebuilding(), and hGridRebuild().
Mdouble MercuryBase::getHGridTotalCurrentMaxRelativeDisplacement | ( | ) | const |
Returns hGridTotalCurrentMaxRelativeDisplacement_.
Definition at line 163 of file MercuryBase.cc.
References totalCurrentMaxRelativeDisplacement_.
Referenced by hGridActionsBeforeTimeStep().
|
overridevirtual |
Gets whether or not the HGrid is updated every time step.
Reimplemented from DPMBase.
Definition at line 180 of file MercuryBase.cc.
References updateEachTimeStep_.
Referenced by hGridActionsBeforeTimeStep().
|
overrideprotectedvirtual |
Sets the totalCurrentMaxRelativeDisplacement_ as 2*currentMaxRelativeDisplacement_.
Reimplemented from DPMBase.
Definition at line 381 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_, and totalCurrentMaxRelativeDisplacement_.
|
overrideprotectedvirtual |
Resets the currentMaxRelativeDisplacement_ to 0.
Reimplemented from DPMBase.
Definition at line 376 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_.
|
overridevirtual |
This sets up the broad phase information, has to be done at this stage because it requires the particle size.
Performs all actions that need to be done before the time loop. At the moment, this means nothing.
Reimplemented from DPMBase.
Definition at line 95 of file MercuryBase.cc.
Referenced by Chute::createBottom(), and ChuteBottom::setupInitialConditions().
|
overridevirtual |
Performs all necessary actions before a time-step, like updating the particles and resetting all the bucket information, etc.
The actions that are done before each time step, it rebuilds the HGrid if necessary, otherwise it computes which cell each particle is in.
Reimplemented from DPMBase.
Definition at line 324 of file MercuryBase.cc.
References BaseHandler< T >::begin(), HGrid::clearBucketIsChecked(), HGrid::clearFirstBaseParticleInBucket(), BaseHandler< T >::end(), getHGrid(), getHGridCellOverSizeRatio(), getHGridTotalCurrentMaxRelativeDisplacement(), getHGridUpdateEachTimeStep(), hGridNeedsRebuilding(), hGridRebuild(), DPMBase::hGridUpdateParticle(), DPMBase::particleHandler, and totalCurrentMaxRelativeDisplacement_.
Referenced by Chute::createBottom().
|
protectedpure virtual |
This is a purely virtual function that checks if an object is in the grid, this code is dimension dependent so purely virtual at this stage.
Implemented in Mercury2D, and Mercury3D.
Referenced by broadPhase().
|
protectedpure virtual |
Purely virtual function that checks if the given particle has a possible contact with any other BaseParticle in the HGrid.
Implemented in Mercury2D, and Mercury3D.
Referenced by checkParticleForInteraction().
void MercuryBase::hGridInfo | ( | ) | const |
Writes the info of the HGrid to the screen in a nice format.
Definition at line 642 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_, grid, gridNeedsUpdate_, hGridCellOverSizeRatio_, hGridDistribution_, hGridMaxLevels_, hGridMethod_, HGrid::info(), totalCurrentMaxRelativeDisplacement_, and updateEachTimeStep_.
|
overrideprotected |
Inserts a single Particle to current grid.
[in] | obj | A pointer to the BaseParticle that needs to be inserted in the HGrid. |
Definition at line 297 of file MercuryBase.cc.
References grid, and HGrid::insertParticleToHgrid().
Referenced by hGridRebuild().
bool MercuryBase::hGridNeedsRebuilding | ( | ) |
Gets if the HGrid needs rebuilding before anything else happens.
Definition at line 520 of file MercuryBase.cc.
References HGrid::getCellOverSizeRatio(), HGrid::getCellSizes(), getHGrid(), getHGridTargetNumberOfBuckets(), BaseParticle::getInteractionRadius(), ParticleHandler::getLargestParticle(), HGrid::getNeedsRebuilding(), HGrid::getNumberOfBuckets(), BaseHandler< T >::getNumberOfObjects(), grid, gridNeedsUpdate_, hGridCellOverSizeRatio_, logger, DPMBase::particleHandler, and VERBOSE.
Referenced by hGridActionsBeforeTimeStep().
|
protected |
This sets up the parameters required for the contact model.
Rebuild the HGrid with the current data. First compute the cell sizes of the new HGrid, then delete the old HGrid and build the new HGrid. Finally add all particles to the new HGrid. First check if either the ParticleHandler is empty or the particle distribution is monodispersed. If this is the case, make a grid that contains only one level which has a cell size defined by the diameter of the particle * hGridCellOverSizeRatio_. Otherwise, make cell sizes depending on the distribution given in hGridDistribution_. LINEAR and EXPONENTIAL first compute the smallest and biggest cell size, and then compute the ones in between according to the distribution. USER just takes the cell sizes given by the user. OLDHGRID computes the smallest cell size and then makes the cells of each subsequent level twice as big.
Definition at line 201 of file MercuryBase.cc.
References BaseHandler< T >::begin(), BaseHandler< T >::end(), EXPONENTIAL, getHGridCellOverSizeRatio(), getHGridDistribution(), getHGridMaxLevels(), getHGridTargetMaxInteractionRadius(), getHGridTargetMinInteractionRadius(), getHGridTargetNumberOfBuckets(), grid, gridNeedsUpdate_, hGridInsertParticle(), DPMBase::hGridUpdateParticle(), INFO, LINEAR, logger, OLDHGRID, DPMBase::particleHandler, USER, and userHGridCellSize().
Referenced by hGridActionsBeforeTimeStep(), and Mercury2D::hGridHasParticleContacts().
|
overrideprotectedvirtual |
Computes the relative displacement of the given BaseParticle and updates the currentMaxRelativeDisplacement_ accordingly.
[in] | iP | A pointer to the BaseParticle for which we want to compare the relative speed to the currentMaxRelativeDisplacement_ to. |
[in] | move | An Mdouble that represents the distance the BaseParticle has moved. |
Reimplemented from DPMBase.
Definition at line 367 of file MercuryBase.cc.
References currentMaxRelativeDisplacement_, HGrid::getCellSize(), getHGrid(), and BaseParticle::getHGridLevel().
|
overridevirtual |
Reads the MercuryBase from an input stream, for example a restart file.
[in,out] | is | The input stream from which the MercuryBase must be read. |
This function reads first the properties that are DPMBase related from the given input stream, after that it reads the hGridMaxLevels_ and the hGridCellOverSizeRatio_ from the input stream.
Reimplemented from DPMBase.
Definition at line 105 of file MercuryBase.cc.
References helpers::getLineFromStringStream(), hGridCellOverSizeRatio_, hGridMaxLevels_, and DPMBase::read().
Referenced by Chute::read().
|
overrideprotectedvirtual |
Reads the next command line argument.
[in] | i | The ordinal number in the input arguments we want to read. |
[in] | argc | The number of arguments in the command line, not used. |
[in] | argv | The command line input arguments. |
Reimplemented from DPMBase.
Definition at line 419 of file MercuryBase.cc.
References DPMBase::readNextArgument(), setHGridCellOverSizeRatio(), and setHGridMaxLevels().
Referenced by Mercury3DRestart::readNextArgument(), and Chute::readNextArgument().
void MercuryBase::setHGridCellOverSizeRatio | ( | Mdouble | hGridCellOverSizeRatio | ) |
Sets the ratio of the smallest cell over the smallest particle.
[in] | hGridCellOverSizeRatio | The desired maximum ratio between the cells and the size of the BaseParticle it contains. |
Definition at line 487 of file MercuryBase.cc.
References gridNeedsUpdate_, hGridCellOverSizeRatio_, and mathsFunc::isEqual().
Referenced by readNextArgument().
void MercuryBase::setHGridDistribution | ( | HGridDistribution | hGridDistribution | ) |
Sets how the sizes of the cells of different levels are distributed.
[in] | hGridDistribution | The distribution of the cell sizes that will be used by this MercuryBase. |
Definition at line 464 of file MercuryBase.cc.
References gridNeedsUpdate_, and hGridDistribution_.
void MercuryBase::setHGridMaxLevels | ( | unsigned int | hGridMaxLevels | ) |
Sets the maximum number of levels of the HGrid in this MercuryBase.
[in] | hGridMaxLevels | The maximum number of levels that will be used in the HGrid. |
Definition at line 500 of file MercuryBase.cc.
References gridNeedsUpdate_, and hGridMaxLevels_.
Referenced by readNextArgument(), and ChuteBottom::setupInitialConditions().
void MercuryBase::setHGridMethod | ( | HGridMethod | hGridMethod | ) |
Sets the HGridMethod to either BOTTOMUP or TOPDOWN.
[in] | hGridMethod | The HGridMethod that will be used in this MercuryBase. |
Definition at line 447 of file MercuryBase.cc.
References hGridMethod_.
void MercuryBase::setHGridUpdateEachTimeStep | ( | bool | updateEachTimeStep | ) |
Sets whether or not the HGrid must be updated every time step.
[in] | updateEachTimeStep | A boolean which indicates if the HGrid must be updated every time step. |
Definition at line 172 of file MercuryBase.cc.
References updateEachTimeStep_.
|
virtual |
Virtual function that enables inheriting classes to implement a function to let the user set the cell size of the HGrid.
[in] | level | The level of the cell we want to know the size set by the user for. |
Definition at line 406 of file MercuryBase.cc.
Referenced by hGridRebuild().
|
overridevirtual |
Writes the MercuryBase to an output stream, for example a restart file.
[in,out] | os | The output stream to which this MercuryBase must be written. |
[in] | writeAllParticles | A boolean which indicates whether or not all BaseParticle from the ParticleHandler must be written to the ostream. If it is set to true or if there are at most 4 BaseParticle, all BaseParticle are written. If it is set to false, only the first two BaseParticle are written, followed by ... |
Function that writes this MercuryBase to an output stream, for example a restart file. First writes the domain information, then the walls, followed by the boundaries and particles, and finally the HGrid information.
Reimplemented from DPMBase.
Definition at line 132 of file MercuryBase.cc.
References getHGridCellOverSizeRatio(), getHGridMaxLevels(), HGrid::getNumberOfBuckets(), grid, and DPMBase::write().
Referenced by Chute::write().
|
private |
Mdouble that denotes the maximum of the displacement of a particle divided by the cell size of the level of that particle at the current time step. This is useful to see whether a particle could have moved more than one cell.
Definition at line 307 of file MercuryBase.h.
Referenced by getHGridCurrentMaxRelativeDisplacement(), hGridActionsAfterIntegration(), hGridActionsBeforeIntegration(), hGridInfo(), hGridUpdateMove(), and MercuryBase().
|
private |
A pointer to the HGrid associated with this MercuryBase.
Definition at line 281 of file MercuryBase.h.
Referenced by constructor(), getHGrid(), hGridInfo(), hGridInsertParticle(), hGridNeedsRebuilding(), hGridRebuild(), MercuryBase(), write(), and ~MercuryBase().
|
private |
Boolean that indicates whether or not the grid needs to be updated.
The grid needs to be updated before the HGrid is constructed and whenever something of the HGrid changes, such as the distribution, the number of levels, etc.
Definition at line 321 of file MercuryBase.h.
Referenced by constructor(), hGridInfo(), hGridNeedsRebuilding(), hGridRebuild(), MercuryBase(), setHGridCellOverSizeRatio(), setHGridDistribution(), and setHGridMaxLevels().
|
private |
The maximum ratio between the size of the cells and the BaseParticle they contain.
The hGrifCellOverSizeRatio_ can be found by dividing the size of the smallest cell by the size of the smallest particle, so this can be set to give particles more space within a cell. Currently, the default is set to 1.
Definition at line 349 of file MercuryBase.h.
Referenced by constructor(), getHGridCellOverSizeRatio(), hGridInfo(), hGridNeedsRebuilding(), MercuryBase(), read(), and setHGridCellOverSizeRatio().
|
private |
Indicator for the distribution of the sizes of the cells of different levels of the HGrid. The default is EXPONENTIAL.
Definition at line 299 of file MercuryBase.h.
Referenced by constructor(), getHGridDistribution(), hGridInfo(), MercuryBase(), and setHGridDistribution().
|
private |
Unsigned integer that indicates the maximum number of levels of the HGrid.
The number of levels in the HGrid is currently dependent on the maximum number of levels of the HGrid the user has given, either in the constructor or in setHGridMaxLevels, and whether the BaseParticle are monodispersed or not. If they are monodispersed, there is only one level in the HGrid, otherwise there are usually as many levels as the maximum set by the user. Note, by default the code sorts out these parameters itself but they can be overridden by the user.
Definition at line 341 of file MercuryBase.h.
Referenced by constructor(), getHGridMaxLevels(), hGridInfo(), MercuryBase(), read(), and setHGridMaxLevels().
|
private |
Indicator of which way the interactions between different levels are tested.
If hGridMethod_ is TOPDOWN, then larger particles are inserted into the grid of smaller particles when looking for cross level interactions. If hGridMethod_ is BOTTOMUP, then smaller particles are inserted into the grid of larger particles when looking for cross-level interactions. The default for the hGridMethod_ is TOPDOWN.
Definition at line 293 of file MercuryBase.h.
Referenced by constructor(), getHGridMethod(), hGridInfo(), MercuryBase(), and setHGridMethod().
|
private |
After each time step, this Mdouble is increased by 2*currentMaxRelativeDisplacement_.
Definition at line 313 of file MercuryBase.h.
Referenced by getHGridTotalCurrentMaxRelativeDisplacement(), hGridActionsAfterIntegration(), hGridActionsBeforeTimeStep(), hGridInfo(), and MercuryBase().
|
private |
Boolean which indicates whether or not the cell in which a particle is must be updated every timestep.
Definition at line 327 of file MercuryBase.h.
Referenced by constructor(), getHGridUpdateEachTimeStep(), hGridInfo(), MercuryBase(), and setHGridUpdateEachTimeStep().