multiParticleT1 Class Reference
+ Inheritance diagram for multiParticleT1:

Public Member Functions

 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
void actionsAfterTimeStep () override
 A virtual function which allows to define operations to be executed after time step. More...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
void actionsAfterTimeStep () override
 A virtual function which allows to define operations to be executed after time step. More...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
void actionsAfterTimeStep () override
 A virtual function which allows to define operations to be executed after time step. More...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
void actionsAfterTimeStep () override
 A virtual function which allows to define operations to be executed after time step. More...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
 multiParticleT1 ()
 
void setClumpDamping (Mdouble damp)
 
void setClumpIndex (Mdouble index)
 
Mdouble getClumpMass ()
 
void setupInitialConditions () override
 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...
 
void actionsAfterTimeStep () override
 A virtual function which allows to define operations to be executed after time step. More...
 
- Public Member Functions inherited from Mercury3Dclump
 Mercury3Dclump ()
 
void computeInternalForce (BaseParticle *P1, BaseParticle *P2) override
 
void computeForcesDueToWalls (BaseParticle *pI, BaseWall *w) override
 
void computeAllForces () override
 
bool checkClumpForInteraction (BaseParticle &particle)
 
bool checkClumpForInteractionPeriodic (BaseParticle &particle)
 
- Public Member Functions inherited from Mercury3D
 Mercury3D ()
 This is the default constructor. All it does is set sensible defaults. More...
 
 Mercury3D (const DPMBase &other)
 Copy-constructor for creates an Mercury3D problem from an existing MD problem. More...
 
 Mercury3D (const Mercury3D &other)
 Copy-constructor. More...
 
void constructor ()
 Function that sets the SystemDimension and ParticleDimension to 3. More...
 
std::vector< BaseParticle * > hGridFindParticleContacts (const BaseParticle *obj) override
 Returns all particles that have a contact with a given particle. More...
 
- Public Member Functions inherited from MercuryBase
 MercuryBase ()
 This is the default constructor. It sets sensible defaults. More...
 
 ~MercuryBase () override
 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, ReadOptions opt=ReadOptions::ReadAll) 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 all data into 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 final
 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) final
 Checks if given BaseParticle has an interaction with a BaseWall or other BaseParticle. More...
 
bool checkParticleForInteractionLocal (const BaseParticle &P) final
 Checks if the given BaseParticle has an interaction with a BaseWall or other BaseParticles in a local domain. 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 (std::ostream &os=std::cout) 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 DPMBase &other)
 Copy constructor type-2. More...
 
virtual ~DPMBase ()
 virtual destructor More...
 
void autoNumber ()
 The autoNumber() function calls three functions: setRunNumber(), readRunNumberFromFile() and incrementRunNumberInFile(). More...
 
std::vector< int > get1DParametersFromRunNumber (int size_x) const
 This turns a counter into 1 index, which is a useful feature for performing 1D parameter study. The index run from 1:size_x, while the study number starts at 0 (initially the counter=1 in COUNTER_DONOTDEL) More...
 
std::vector< int > get2DParametersFromRunNumber (int size_x, int size_y) const
 This turns a counter into 2 indices which is a very useful feature for performing a 2D study. 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...
 
std::vector< int > get3DParametersFromRunNumber (int size_x, int size_y, int size_z) const
 This turns a counter into 3 indices, which is a useful feature for performing a 3D parameter study. The indices run from 1:size_x, 1:size_y and 1:size_z, 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...
 
virtual void decompose ()
 Sends particles from processorId to the root processor. More...
 
void solve ()
 The work horse of the code. More...
 
void initialiseSolve ()
 Beginning of the solve routine, before time stepping. More...
 
void finaliseSolve ()
 End of the solve routine, after time stepping. More...
 
virtual void computeOneTimeStep ()
 Performs everything needed for one time step, used in the time-loop of solve(). More...
 
void checkSettings ()
 Checks if the essentials are set properly to go ahead with solving the problem. More...
 
void forceWriteOutputFiles ()
 Writes output files immediately, even if the current time step was not meant to be written. Also resets the last saved time step. More...
 
virtual void writeOutputFiles ()
 Writes simulation data to all the main Mercury files: .data, .ene, .fstat, .xballs and .restart (see the Mercury website for more details regarding these files). More...
 
void solve (int argc, char *argv[])
 The work horse of the code. Can handle flags from the command line. 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 Mdouble getInfo (const BaseParticle &P) const
 A virtual function that returns some user-specified information about a particle. More...
 
ParticleVtkWritergetVtkWriter () const
 
virtual void writeRestartFile ()
 Stores all the particle data for current save time step to a "restart" file, which is a file simply intended to store all the information necessary to "restart" a simulation from a given time step (see also MercuryDPM.org for more information on restart files). More...
 
void writeDataFile ()
 
void writeEneFile ()
 
void writeFStatFile ()
 
void fillDomainWithParticles (unsigned N=50)
 
bool readRestartFile (ReadOptions opt=ReadOptions::ReadAll)
 Reads all the particle data corresponding to a given, existing . restart file (for more details regarding restart files, refer to the training materials on the MercuryDPM website).Returns true if it is successful, false otherwise. More...
 
int readRestartFile (std::string fileName, ReadOptions opt=ReadOptions::ReadAll)
 The same as readRestartFile(bool), but also reads all the particle data corresponding to the current saved time step. More...
 
virtual BaseWallreadUserDefinedWall (const std::string &type) const
 Allows you to read in a wall defined in a Driver directory; see USER/Luca/ScrewFiller. More...
 
virtual void readOld (std::istream &is)
 Reads all data from a restart file, e.g. domain data and particle data; old version. More...
 
bool readDataFile (std::string fileName="", unsigned int format=0)
 This allows particle data to be reloaded from data files. More...
 
bool readParAndIniFiles (std::string fileName)
 Allows the user to read par.ini files (useful to read files produced by the MDCLR simulation code - external to MercuryDPM) 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 Visualising data in xballs. More...
 
void readNextFStatFile ()
 Reads the next fstat file. More...
 
bool findNextExistingDataFile (Mdouble tMin, bool verbose=true)
 Finds and opens the next data file, if such a file exists. More...
 
bool readArguments (int argc, char *argv[])
 Can interpret main function input arguments that are passed by the driver codes. More...
 
bool checkParticleForInteractionLocalPeriodic (const BaseParticle &P)
 
void readSpeciesFromDataFile (bool read=true)
 
void importParticlesAs (ParticleHandler &particleHandler, InteractionHandler &interactionHandler, const ParticleSpecies *species)
 Copies particles, interactions assigning species from a local simulation to a global one. Useful for the creation of a cluster. More...
 
MERCURYDPM_DEPRECATED FilegetDataFile ()
 The non const version. Allows one to edit the File::dataFile. More...
 
MERCURYDPM_DEPRECATED FilegetEneFile ()
 The non const version. Allows to edit the File::eneFile. More...
 
MERCURYDPM_DEPRECATED FilegetFStatFile ()
 The non const version. Allows to edit the File::fStatFile. More...
 
MERCURYDPM_DEPRECATED FilegetRestartFile ()
 The non const version. Allows to edit the File::restartFile. More...
 
MERCURYDPM_DEPRECATED FilegetStatFile ()
 The non const version. Allows to edit the File::statFile. More...
 
FilegetInteractionFile ()
 Return a reference to the file InteractionsFile. More...
 
MERCURYDPM_DEPRECATED const FilegetDataFile () const
 The const version. Does not allow for any editing of the File::dataFile. More...
 
MERCURYDPM_DEPRECATED const FilegetEneFile () const
 The const version. Does not allow for any editing of the File::eneFile. More...
 
MERCURYDPM_DEPRECATED const FilegetFStatFile () const
 The const version. Does not allow for any editing of the File::fStatFile. More...
 
MERCURYDPM_DEPRECATED const FilegetRestartFile () const
 The const version. Does not allow for any editing of the File::restartFile. More...
 
MERCURYDPM_DEPRECATED const FilegetStatFile () const
 The const version. Does not allow for any editing of the File::statFile. More...
 
const FilegetInteractionFile () const
 
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 closeFiles ()
 Closes all files (ene, data, fstat, restart, stat) that were opened to read or write. More...
 
void setLastSavedTimeStep (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...
 
Mdouble getTime () const
 Returns the current simulation time. More...
 
Mdouble getNextTime () const
 Returns the current simulation time. More...
 
unsigned int getNumberOfTimeSteps () const
 Returns the current counter of time-steps, i.e. the number of time-steps that the simulation has undergone so far. More...
 
void setTime (Mdouble time)
 Sets a new value for the current simulation time. More...
 
void setTimeMax (Mdouble newTMax)
 Sets a new value for the maximum simulation duration. More...
 
Mdouble getTimeMax () const
 Returns the maximum simulation duration. More...
 
void setLogarithmicSaveCount (Mdouble logarithmicSaveCountBase)
 Sets File::logarithmicSaveCount_ for all files (ene, data, fstat, restart, stat) More...
 
void setNToWrite (int nToWrite)
 set the number of elements to write to the screen More...
 
int getNToWrite () const
 get the number of elements to write to the More...
 
void setRotation (bool rotation)
 Sets whether particle rotation is enabled or disabled. More...
 
bool getRotation () const
 Indicates whether particle rotation is enabled or disabled. More...
 
MERCURYDPM_DEPRECATED void setWallsWriteVTK (FileType writeWallsVTK)
 Sets whether walls are written into a VTK file. More...
 
MERCURYDPM_DEPRECATED void setWallsWriteVTK (bool)
 Sets whether walls are written into a VTK file. More...
 
MERCURYDPM_DEPRECATED void setInteractionsWriteVTK (bool)
 Sets whether interactions are written into a VTK file. More...
 
void setParticlesWriteVTK (bool writeParticlesVTK)
 Sets whether particles are written in a VTK file. More...
 
void setSuperquadricParticlesWriteVTK (bool writeSuperquadricParticlesVTK)
 
MERCURYDPM_DEPRECATED FileType getWallsWriteVTK () const
 Returns whether walls are written in a VTK file. More...
 
bool getParticlesWriteVTK () const
 Returns whether particles are written in a VTK file. More...
 
bool getSuperquadricParticlesWriteVTK () 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...
 
Mdouble getXCenter () const
 
Mdouble getYCenter () const
 
Mdouble getZCenter () const
 
Vec3D getMin () const
 
Vec3D getMax () const
 
void setXMin (Mdouble newXMin)
 Sets the value of XMin, the lower bound of the problem domain in the x-direction. More...
 
void setYMin (Mdouble newYMin)
 Sets the value of YMin, the lower bound of the problem domain in the y-direction. More...
 
void setZMin (Mdouble newZMin)
 Sets the value of ZMin, the lower bound of the problem domain in the z-direction. More...
 
void setXMax (Mdouble newXMax)
 Sets the value of XMax, the upper bound of the problem domain in the x-direction. More...
 
void setYMax (Mdouble newYMax)
 Sets the value of YMax, the upper bound of the problem domain in the y-direction. More...
 
void setZMax (Mdouble newZMax)
 Sets the value of ZMax, the upper bound of the problem domain in the z-direction. More...
 
void setMax (const Vec3D &max)
 Sets the maximum coordinates of the problem domain. More...
 
void setMax (Mdouble, Mdouble, Mdouble)
 Sets the maximum coordinates of the problem domain. More...
 
void setDomain (const Vec3D &min, const Vec3D &max)
 Sets the minimum coordinates of the problem domain. More...
 
void setMin (const Vec3D &min)
 Sets the minimum coordinates of the problem domain. More...
 
void setMin (Mdouble, Mdouble, Mdouble)
 Sets the minimum coordinates of the problem domain. More...
 
void setTimeStep (Mdouble newDt)
 Sets a new value for the simulation time step. More...
 
Mdouble getTimeStep () const
 Returns the simulation time step. More...
 
void setNumberOfOMPThreads (int numberOfOMPThreads)
 
int getNumberOfOMPThreads () const
 
void setXBallsColourMode (int newCMode)
 Set the xballs output mode. More...
 
int getXBallsColourMode () const
 Get the xballs 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
 Returns the additional arguments for xballs. More...
 
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)
 Sets a new value for the gravitational acceleration. More...
 
Vec3D getGravity () const
 Returns the gravitational acceleration. More...
 
void setBackgroundDrag (Mdouble backgroundDrag)
 Simple access function to turn on a background drag. The force of particleVelocity*drag is applied (note, it allowd to be negaitve i.e. create energy) More...
 
const Mdouble getBackgroundDrag () const
 Return the background drag. More...
 
void setDimension (unsigned int newDim)
 Sets both the system dimensions and the particle dimensionality. More...
 
void setSystemDimensions (unsigned int newDim)
 Sets the system dimensionality. More...
 
unsigned int getSystemDimensions () const
 Returns the system dimensionality. More...
 
void setParticleDimensions (unsigned int particleDimensions)
 Sets the particle dimensionality. More...
 
unsigned int getParticleDimensions () const
 Returns the particle dimensionality. 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 whether the "append" option is on or off. More...
 
void setAppend (bool newAppendFlag)
 Sets whether the "append" option is on or off. 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...
 
Mdouble getGravitationalEnergy () const
 Returns the global gravitational potential energy stored in the system. More...
 
Mdouble getRotationalEnergy () const
 JMFT Returns the global rotational energy stored in the system. More...
 
Mdouble getTotalEnergy () const
 
Mdouble getTotalMass () const
 JMFT: Return the total mass of the system, excluding fixed particles. More...
 
Vec3D getCentreOfMass () const
 JMFT: Return the centre of mass of the system, excluding fixed particles. More...
 
Vec3D getTotalMomentum () const
 JMFT: Return the total momentum of the system, excluding fixed particles. More...
 
double getCPUTime ()
 
double getWallTime ()
 
virtual void hGridInsertParticle (BaseParticle *obj UNUSED)
 
virtual void hGridUpdateParticle (BaseParticle *obj UNUSED)
 
virtual void hGridRemoveParticle (BaseParticle *obj UNUSED)
 
bool mpiIsInCommunicationZone (BaseParticle *particle)
 Checks if the position of the particle is in an mpi communication zone or not. More...
 
bool mpiInsertParticleCheck (BaseParticle *P)
 Function that checks if the mpi particle should really be inserted by the current domain. More...
 
void insertGhostParticle (BaseParticle *P)
 This function inserts a particle in the mpi communication boundaries. More...
 
void updateGhostGrid (BaseParticle *P)
 Checks if the Domain/periodic interaction distance needs to be updated and updates it accordingly. More...
 
virtual void gatherContactStatistics (unsigned int index1, int index2, Vec3D Contact, Mdouble delta, Mdouble ctheta, Mdouble fdotn, Mdouble fdott, Vec3D P1_P2_normal_, Vec3D P1_P2_tangential)
 //Not unsigned index because of possible wall collisions. More...
 
void setNumberOfDomains (std::vector< unsigned > direction)
 Sets the number of domains in x-,y- and z-direction. Required for parallel computations. More...
 
void splitDomain (DomainSplit domainSplit)
 
std::vector< unsigned > getNumberOfDomains ()
 returns the number of domains More...
 
DomaingetCurrentDomain ()
 Function that returns a pointer to the domain corresponding to the processor. More...
 
void removeOldFiles () const
 
void setMeanVelocity (Vec3D V_mean_goal)
 This function will help you set a fixed kinetic energy and mean velocity in your system. More...
 
void setMeanVelocityAndKineticEnergy (Vec3D V_mean_goal, Mdouble Ek_goal)
 This function will help you set a fixed kinetic energy and mean velocity in your system. More...
 
Mdouble getTotalVolume () const
 Get the total volume of the cuboid system. More...
 
Matrix3D getKineticStress () const
 Calculate the kinetic stress tensor in the system averaged over the whole volume. More...
 
Matrix3D getStaticStress () const
 Calculate the static stress tensor in the system averaged over the whole volume. More...
 
Matrix3D getTotalStress () const
 Calculate the total stress tensor in the system averaged over the whole volume. More...
 
virtual void handleParticleRemoval (unsigned int id)
 Handles the removal of particles from the particleHandler. More...
 
virtual void handleParticleAddition (unsigned int id, BaseParticle *p)
 
void writePythonFileForVTKVisualisation () const
 
void setWritePythonFileForVTKVisualisation (bool forceWritePythonFileForVTKVisualisation)
 
bool getWritePythonFileForVTKVisualisation () const
 
WallVTKWritergetWallVTKWriter ()
 

Private Attributes

int clump_index
 
ClumpData data
 
Mdouble clump_mass
 
Mdouble clump_damping = 10
 
unsigned rotatingWallID = 0
 
CubeInsertionBoundaryinsertionBoundary
 

Additional Inherited Members

- Public Types inherited from DPMBase
enum class  ReadOptions : int { ReadAll , ReadNoInteractions , ReadNoParticlesAndInteractions }
 
enum class  DomainSplit {
  X , Y , Z , XY ,
  XZ , YZ , XYZ
}
 
- Static Public Member Functions inherited from DPMBase
static 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...
 
static int readRunNumberFromFile ()
 Read the run number or the counter from the counter file (COUNTER_DONOTDEL) More...
 
static bool areInContact (const BaseParticle *pI, const BaseParticle *pJ)
 Checks if two particle are in contact or is there any positive overlap. More...
 
- Public Attributes inherited from DPMBase
SpeciesHandler speciesHandler
 A handler to that stores the species type i.e. LinearViscoelasticSpecies, etc. 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...
 
ParticleHandler paoloParticleHandler
 Fake particleHandler created by Paolo needed temporary by just Paolo. 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...
 
PeriodicBoundaryHandler periodicBoundaryHandler
 Internal handler that deals with periodic boundaries, especially in a parallel build. More...
 
DomainHandler domainHandler
 An object of the class DomainHandler which deals with parallel code. More...
 
InteractionHandler interactionHandler
 An object of the class InteractionHandler. More...
 
CGHandler cgHandler
 Object of the class cgHandler. More...
 
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...
 
File interactionFile
 File class to handle in- and output into .interactions file. This file hold information about interactions. More...
 
Time clock_
 record when the simulation started More...
 
- Protected Member Functions inherited from Mercury3D
void hGridFindContactsWithinTargetCell (int x, int y, int z, unsigned int l)
 Finds contacts between particles in the target cell. More...
 
void hGridFindContactsWithTargetCell (int x, int y, int z, unsigned int l, BaseParticle *obj)
 Finds contacts between the BaseParticle and the target cell. More...
 
void computeWallForces (BaseWall *w) override
 Compute contacts with a wall. More...
 
void hGridFindParticlesWithTargetCell (int x, int y, int z, unsigned int l, BaseParticle *obj, std::vector< BaseParticle * > &list)
 Finds particles within target cell and stores them in a list. More...
 
void hGridGetInteractingParticleList (BaseParticle *obj, std::vector< BaseParticle * > &list) override
 Obtains all neighbour particles of a given object, obtained from the hgrid. More...
 
void computeInternalForces (BaseParticle *obj) override
 Finds contacts with the BaseParticle; avoids multiple checks. More...
 
bool hGridHasContactsInTargetCell (int x, int y, int z, unsigned int l, const BaseParticle *obj) const
 Tests if the BaseParticle has contacts with other Particles in the target cell. More...
 
bool hGridHasParticleContacts (const BaseParticle *obj) override
 Tests if a BaseParticle has any contacts in the HGrid. More...
 
void hGridRemoveParticle (BaseParticle *obj) override
 Removes a BaseParticle from the HGrid. More...
 
void hGridUpdateParticle (BaseParticle *obj) override
 Updates the cell (not the level) of a BaseParticle. More...
 
- Protected Member Functions inherited from MercuryBase
void hGridRebuild ()
 This sets up the parameters required for the contact model. More...
 
void hGridInsertParticle (BaseParticle *obj) final
 Inserts a single Particle to current grid. More...
 
void hGridUpdateMove (BaseParticle *iP, Mdouble move) final
 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
 This function has to be called before integrateBeforeForceComputation. More...
 
HGridgetHGrid ()
 Gets the HGrid used by this problem. More...
 
const HGridgetHGrid () 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 computeExternalForces (BaseParticle *)
 Computes the external forces, such as gravity, acting on particles. 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 computeAdditionalForces ()
 A virtual function which allows to define operations to be executed prior to the OMP force collect. More...
 
virtual void actionsAfterSolve ()
 A virtual function which allows to define operations to be executed after the solve(). More...
 
void writeVTKFiles () const
 
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. For more information on the XBalls program, see Visualising data in xballs. More...
 
virtual void outputXBallsDataParticle (unsigned int i, 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. For more information on the XBalls program, see Visualising data in xballs. 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
 Write the global kinetic, potential energy, etc. in the system. More...
 
virtual void initialiseStatistics ()
 
virtual void outputStatistics ()
 
void gatherContactStatistics ()
 
virtual void processStatistics (bool)
 
virtual void finishStatistics ()
 
virtual void integrateBeforeForceComputation ()
 Update particles' and walls' positions and velocities before force computation. More...
 
virtual void integrateAfterForceComputation ()
 Update particles' and walls' positions and velocities after force computation. 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)
 Sets a number, n, of particles in the particleHandler as "fixed particles". More...
 
virtual void printTime () const
 Displays the current simulation time and the maximum simulation duration. More...
 
virtual bool continueSolve () const
 A virtual function for deciding whether to continue the simulation, based on a user-specified criterion. More...
 
void outputInteractionDetails () const
 Displays the interaction details corresponding to the pointer objects in the interaction handler. More...
 
bool isTimeEqualTo (Mdouble time) const
 Checks whether the input variable "time" is the current time in the simulation. More...
 
void removeDuplicatePeriodicParticles ()
 Removes periodic duplicate Particles. More...
 
void checkAndDuplicatePeriodicParticles ()
 For simulations using periodic boundaries, checks and adds particles when necessary into the particle handler. See DPMBase.cc and PeriodicBoundary.cc for more details. More...
 
void performGhostParticleUpdate ()
 When the Verlet scheme updates the positions and velocities of particles, ghost particles will need an update as wel. Their status will also be updated accordingly. More...
 
void deleteGhostParticles (std::set< BaseParticle * > &particlesToBeDeleted)
 
void synchroniseParticle (BaseParticle *, unsigned fromProcessor=0)
 
void performGhostVelocityUpdate ()
 updates the final time-step velocity of the ghost particles More...
 
void setSoftStop ()
 function for setting sigaction constructor. More...
 
- Static Protected Member Functions inherited from DPMBase
static void signalHandler (int signal)
 signal handler function. More...
 

Constructor & Destructor Documentation

◆ multiParticleT1() [1/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit
83  {
84  setGravity(Vec3D(0.0, 0.0, -10.0));
85  setName("Domino");
86  setXBallsAdditionalArguments("-solidf -v0");
87  setXMax(D.x_max);
88  setYMax(D.y_max);
89  setZMax(D.z_max);
90  setXMin(D.x_min);
91  setYMin(D.y_min);
92  setZMin(D.z_min);
93  }
dominoes D
Definition: Domino.cpp:76
void setYMin(Mdouble newYMin)
Sets the value of YMin, the lower bound of the problem domain in the y-direction.
Definition: DPMBase.cc:1034
void setName(const std::string &name)
Allows to set the name of all the files (ene, data, fstat, restart, stat)
Definition: DPMBase.cc:422
void setYMax(Mdouble newYMax)
Sets the value of YMax, the upper bound of the problem domain in the y-direction.
Definition: DPMBase.cc:1191
void setZMin(Mdouble newZMin)
Sets the value of ZMin, the lower bound of the problem domain in the z-direction.
Definition: DPMBase.cc:1058
void setXBallsAdditionalArguments(std::string newXBArgs)
Set the additional arguments for xballs.
Definition: DPMBase.cc:1347
void setXMax(Mdouble newXMax)
Sets the value of XMax, the upper bound of the problem domain in the x-direction.
Definition: DPMBase.cc:1165
void setZMax(Mdouble newZMax)
Sets the value of ZMax, the upper bound of the problem domain in the z-direction.
Definition: DPMBase.cc:1217
void setXMin(Mdouble newXMin)
Sets the value of XMin, the lower bound of the problem domain in the x-direction.
Definition: DPMBase.cc:1010
void setGravity(Vec3D newGravity)
Sets a new value for the gravitational acceleration.
Definition: DPMBase.cc:1383
Definition: Vector.h:51
Mdouble z_min
Definition: Domino.cpp:54
Mdouble z_max
Definition: Domino.cpp:55
Mdouble x_max
Definition: Domino.cpp:49
Mdouble y_max
Definition: Domino.cpp:52
Mdouble x_min
Definition: Domino.cpp:48
Mdouble y_min
Definition: Domino.cpp:51

References D, DPMBase::setGravity(), DPMBase::setName(), DPMBase::setXBallsAdditionalArguments(), DPMBase::setXMax(), DPMBase::setXMin(), DPMBase::setYMax(), DPMBase::setYMin(), DPMBase::setZMax(), DPMBase::setZMin(), dominoes::x_max, dominoes::x_min, dominoes::y_max, dominoes::y_min, dominoes::z_max, and dominoes::z_min.

◆ multiParticleT1() [2/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit
43  {
44  setGravity(Vec3D(0.0, 0.0, -10.0));
45  setName("Gomboc");
46  setXBallsAdditionalArguments("-solidf -v0");
47  setXMax(2*f_max);
48  setYMax(2*f_max);
49  setZMax(f_max);
50  setXMin(2*f_min);
51  setYMin(2*f_min);
52  setZMin(f_min);
54  setClumpIndex(0);
56  }
void LoadClumps(ClumpData &data, bool VERBOSE=false)
Definition: ClumpInput.h:210
Mdouble f_max
Definition: Gomboc.cpp:36
Mdouble f_min
Definition: Gomboc.cpp:36
Mdouble clump_mass
Definition: Domino.cpp:202
void setClumpIndex(Mdouble index)
Definition: Domino.cpp:97
int clump_index
Definition: Domino.cpp:200
ClumpData data
Definition: Domino.cpp:201
DoubleVector mass
Definition: ClumpInput.h:66

References clump_index, clump_mass, data, f_max, f_min, LoadClumps(), ClumpData::mass, setClumpIndex(), DPMBase::setGravity(), DPMBase::setName(), DPMBase::setXBallsAdditionalArguments(), DPMBase::setXMax(), DPMBase::setXMin(), DPMBase::setYMax(), DPMBase::setYMin(), DPMBase::setZMax(), and DPMBase::setZMin().

◆ multiParticleT1() [3/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit
43  {
44  setGravity(Vec3D(0.0, 0.0, -10.0));
45  setName("Rattleback");
46  setXBallsAdditionalArguments("-solidf -v0");
47  setXMax(2*f_max);
48  setYMax(2*f_max);
49  setZMax(f_max);
50  setXMin(2*f_min);
51  setYMin(2*f_min);
52  setZMin(f_min);
54  setClumpIndex(0);
56  }
Mdouble f_max
Definition: Rattleback.cpp:36
Mdouble f_min
Definition: Rattleback.cpp:36

References clump_index, clump_mass, data, f_max, f_min, LoadClumps(), ClumpData::mass, setClumpIndex(), DPMBase::setGravity(), DPMBase::setName(), DPMBase::setXBallsAdditionalArguments(), DPMBase::setXMax(), DPMBase::setXMin(), DPMBase::setYMax(), DPMBase::setYMin(), DPMBase::setZMax(), and DPMBase::setZMin().

◆ multiParticleT1() [4/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit
61  {
62  setGravity(Vec3D(0,-9.8,0));
63  // Set name of output files
64  setName("RotatingDrumClumps");
65  setXBallsAdditionalArguments("-solidf -v0");
66  // Set domain size
69  // Output files: wall-vtu
70  setWallsWriteVTK(true);
72  setClumpIndex(2);
74  }
Mdouble f_max
Definition: RotatingDrumClumps.cpp:37
Mdouble f_min
Definition: RotatingDrumClumps.cpp:37
MERCURYDPM_DEPRECATED void setWallsWriteVTK(FileType writeWallsVTK)
Sets whether walls are written into a VTK file.
Definition: DPMBase.cc:911
void setMin(const Vec3D &min)
Sets the minimum coordinates of the problem domain.
Definition: DPMBase.cc:1118
void setMax(const Vec3D &max)
Sets the maximum coordinates of the problem domain.
Definition: DPMBase.cc:1082

References clump_index, clump_mass, data, f_max, f_min, LoadClumps(), ClumpData::mass, setClumpIndex(), DPMBase::setGravity(), DPMBase::setMax(), DPMBase::setMin(), DPMBase::setName(), DPMBase::setWallsWriteVTK(), and DPMBase::setXBallsAdditionalArguments().

◆ multiParticleT1() [5/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit

◆ multiParticleT1() [6/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit

◆ multiParticleT1() [7/7]

multiParticleT1::multiParticleT1 ( )
inlineexplicit
54  {
55  setGravity(Vec3D(0.0, 0.0, -0.0));
56  setName("TGas");
57  setXBallsAdditionalArguments("-solidf -v0");
58  setXMax(f_max);
59  setYMax(f_max);
60  setZMax(f_max); // Unbounded domain
61  setXMin(f_min);
62  setYMin(f_min);
63  setZMin(f_min);
66 
67  }
Mdouble f_max
Definition: TGas.cpp:37
Mdouble f_min
Definition: TGas.cpp:37

References clump_index, clump_mass, data, f_max, f_min, LoadClumps(), ClumpData::mass, DPMBase::setGravity(), DPMBase::setName(), DPMBase::setXBallsAdditionalArguments(), DPMBase::setXMax(), DPMBase::setXMin(), DPMBase::setYMax(), DPMBase::setYMin(), DPMBase::setZMax(), and DPMBase::setZMin().

Member Function Documentation

◆ actionsAfterTimeStep() [1/5]

void multiParticleT1::actionsAfterTimeStep ( )
inlineoverridevirtual

A virtual function which allows to define operations to be executed after time step.

no implementation but can be overidden in its derived classes.

Reimplemented from DPMBase.

175  {
176 
177  // Measurement of the propagation velocity of a Domino wave
178 
179  for (std::vector<BaseParticle*>::iterator it= particleHandler.begin(); it!=particleHandler.end(); ++it){
180  if ((*it)->isClump()) {
181  //D_num += (int) static_cast<Clump*>(*it)->getDzhanibekovParticle();
182 
183  if ((D.started == false)&&((*it)->getPosition().X > D.margin + D.N_ini*D.S_dom - 0.001)&&( (*it)->getVelocity().getLength()>0.001 ))
184  {
185  D.started = true;
186  D.T1 = getTime();
187  }
188 
189  if ((D.started == true)&&(D.finished == false)&&((*it)->getPosition().X > D.margin + D.N_fin*D.S_dom - 0.001)&&( (*it)->getVelocity().getLength()>0.001 ))
190  {
191  D.finished = true;
192  D.T2 = getTime();
193  }
194  }
195  }
196 
197  }
const std::vector< T * >::const_iterator begin() const
Gets the begin of the const_iterator over all Object in this BaseHandler.
Definition: BaseHandler.h:690
const std::vector< T * >::const_iterator end() const
Gets the end of the const_iterator over all BaseBoundary in this BaseHandler.
Definition: BaseHandler.h:704
Mdouble getTime() const
Returns the current simulation time.
Definition: DPMBase.cc:808
ParticleHandler particleHandler
An object of the class ParticleHandler, contains the pointers to all the particles created.
Definition: DPMBase.h:1437
bool finished
Definition: Domino.cpp:67
Mdouble T2
Definition: Domino.cpp:69
int N_ini
Definition: Domino.cpp:64
bool started
Definition: Domino.cpp:66
Mdouble T1
Definition: Domino.cpp:68
Mdouble margin
Definition: Domino.cpp:39
int N_fin
Definition: Domino.cpp:65
Mdouble S_dom
Definition: Domino.cpp:45

References BaseHandler< T >::begin(), D, BaseHandler< T >::end(), dominoes::finished, DPMBase::getTime(), dominoes::margin, dominoes::N_fin, dominoes::N_ini, DPMBase::particleHandler, dominoes::S_dom, dominoes::started, dominoes::T1, and dominoes::T2.

◆ actionsAfterTimeStep() [2/5]

void multiParticleT1::actionsAfterTimeStep ( )
inlineoverridevirtual

A virtual function which allows to define operations to be executed after time step.

no implementation but can be overidden in its derived classes.

Reimplemented from DPMBase.

117  {
119  for (std::vector<BaseParticle*>::iterator it= particleHandler.begin(); it!=particleHandler.end(); ++it){
120  if ((*it)->isClump()) {
121 
122  std::cout<<"Saving timestep "<<getNumberOfTimeSteps() <<std::endl;
123 
124  // Add velocity to log
125  std::ofstream funct("ClumpSeq.txt", std::ios_base::app | std::ios_base::out);
126  funct << getNumberOfTimeSteps() << " "
127  << static_cast<ClumpParticle*>(*it)->getPosition() << " "
128  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e1() << " "
129  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e2() << " "
130  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e3() << " "
131  <<"\n";
132  funct.close();
133 
134  }
135  }
136 
137  }
138  }
int SAVECOUNT
Definition: Gomboc.cpp:37
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
Definition: BaseInteractable.h:218
Definition: ClumpParticle.h:41
Vec3D getPrincipalDirections_e2() const
Definition: ClumpParticle.h:99
Vec3D getPrincipalDirections_e3() const
Definition: ClumpParticle.h:103
Vec3D getPrincipalDirections_e1() const
Definition: ClumpParticle.h:94
unsigned int getNumberOfTimeSteps() const
Returns the current counter of time-steps, i.e. the number of time-steps that the simulation has unde...
Definition: DPMBase.cc:824

References BaseHandler< T >::begin(), BaseHandler< T >::end(), DPMBase::getNumberOfTimeSteps(), BaseInteractable::getPosition(), ClumpParticle::getPrincipalDirections_e1(), ClumpParticle::getPrincipalDirections_e2(), ClumpParticle::getPrincipalDirections_e3(), DPMBase::particleHandler, and SAVECOUNT.

◆ actionsAfterTimeStep() [3/5]

void multiParticleT1::actionsAfterTimeStep ( )
inlineoverridevirtual

A virtual function which allows to define operations to be executed after time step.

no implementation but can be overidden in its derived classes.

Reimplemented from DPMBase.

117  {
119  for (std::vector<BaseParticle*>::iterator it= particleHandler.begin(); it!=particleHandler.end(); ++it){
120  if ((*it)->isClump()) {
121 
122  std::cout<<"Saving timestep "<<getNumberOfTimeSteps() <<std::endl;
123 
124  // Add velocity to log
125  std::ofstream funct("ClumpSeq.txt", std::ios_base::app | std::ios_base::out);
126  funct << getNumberOfTimeSteps() << " "
127  << static_cast<ClumpParticle*>(*it)->getPosition() << " "
128  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e1() << " "
129  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e2() << " "
130  << static_cast<ClumpParticle*>(*it)->getPrincipalDirections_e3() << " "
131  <<"\n";
132  funct.close();
133 
134  }
135  }
136 
137  }
138  }
int SAVECOUNT
Definition: Rattleback.cpp:37

References BaseHandler< T >::begin(), BaseHandler< T >::end(), DPMBase::getNumberOfTimeSteps(), BaseInteractable::getPosition(), ClumpParticle::getPrincipalDirections_e1(), ClumpParticle::getPrincipalDirections_e2(), ClumpParticle::getPrincipalDirections_e3(), DPMBase::particleHandler, and SAVECOUNT.

◆ actionsAfterTimeStep() [4/5]

void multiParticleT1::actionsAfterTimeStep ( )
inlineoverridevirtual

A virtual function which allows to define operations to be executed after time step.

no implementation but can be overidden in its derived classes.

Reimplemented from DPMBase.

151  {
152  Vec3D angularVelocity = Vec3D(0,0,1.0/12.0*constants::pi);
153  for (const auto wall : wallHandler) {
154  if (wall->getGroupId()==rotatingWallID) {
155  wall->setAngularVelocity(angularVelocity);
156  }
157  }
158  }
WallHandler wallHandler
An object of the class WallHandler. Contains pointers to all the walls created.
Definition: DPMBase.h:1447
unsigned rotatingWallID
Definition: RotatingDrumClumps.cpp:54
const Mdouble pi
Definition: ExtendedMath.h:45

References constants::pi, rotatingWallID, and DPMBase::wallHandler.

◆ actionsAfterTimeStep() [5/5]

void multiParticleT1::actionsAfterTimeStep ( )
inlineoverridevirtual

A virtual function which allows to define operations to be executed after time step.

no implementation but can be overidden in its derived classes.

Reimplemented from DPMBase.

195  {
196  int D_num = 0;
197  for (std::vector<BaseParticle*>::iterator it= particleHandler.begin(); it!=particleHandler.end(); ++it){
198  if ((*it)->isClump()) {
199  D_num += (int) static_cast<ClumpParticle*>(*it)->getDzhanibekovParticle();
200  }
201  }
202  D_h.push_back(D_num);
203  }
std::vector< int > D_h
Definition: TGas.cpp:48
bool getDzhanibekovParticle()
Definition: ClumpParticle.h:227

References BaseHandler< T >::begin(), D_h, BaseHandler< T >::end(), ClumpParticle::getDzhanibekovParticle(), and DPMBase::particleHandler.

◆ getClumpMass() [1/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
99 {return clump_mass;}

References clump_mass.

Referenced by main().

◆ getClumpMass() [2/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
62 {return clump_mass;}

References clump_mass.

◆ getClumpMass() [3/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
62 {return clump_mass;}

References clump_mass.

◆ getClumpMass() [4/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
80 {return clump_mass;}

References clump_mass.

◆ getClumpMass() [5/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
61 {return clump_mass;}

References clump_mass.

◆ getClumpMass() [6/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
61 {return clump_mass;}

References clump_mass.

◆ getClumpMass() [7/7]

Mdouble multiParticleT1::getClumpMass ( )
inline
73 {return clump_mass;}

References clump_mass.

◆ setClumpDamping() [1/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
95 { clump_damping = damp;}
Mdouble clump_damping
Definition: Domino.cpp:203

References clump_damping.

Referenced by main().

◆ setClumpDamping() [2/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
58 { clump_damping = damp;}

References clump_damping.

◆ setClumpDamping() [3/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
58 { clump_damping = damp;}

References clump_damping.

◆ setClumpDamping() [4/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
76 { clump_damping = damp;}

References clump_damping.

◆ setClumpDamping() [5/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
57 { clump_damping = damp;}

References clump_damping.

◆ setClumpDamping() [6/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
57 { clump_damping = damp;}

References clump_damping.

◆ setClumpDamping() [7/7]

void multiParticleT1::setClumpDamping ( Mdouble  damp)
inline
69 { clump_damping = damp;}

References clump_damping.

◆ setClumpIndex() [1/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
97 { clump_index = index;}

References clump_index.

Referenced by multiParticleT1(), and setupInitialConditions().

◆ setClumpIndex() [2/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
60 { clump_index = index;}

References clump_index.

◆ setClumpIndex() [3/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
60 { clump_index = index;}

References clump_index.

◆ setClumpIndex() [4/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
78 { clump_index = index;}

References clump_index.

◆ setClumpIndex() [5/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
59 { clump_index = index;}

References clump_index.

◆ setClumpIndex() [6/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
59 { clump_index = index;}

References clump_index.

◆ setClumpIndex() [7/7]

void multiParticleT1::setClumpIndex ( Mdouble  index)
inline
71 { clump_index = index;}

References clump_index.

◆ setupInitialConditions() [1/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

102  {
104  // Dominoes
105  for (int part = 0; part<D.N_dom; part++) {
106  ClumpParticle p0;
107  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
108  p0.setClump();
109  p0.setRadius(D.R_peb);
110 
111  for (int i = 0; i < 2*D.m_peb; i++) {
112  for (int j = 0; j < 2*D.n_peb; j++) {
113  for (int k = 0; k < 2*D.k_peb; k++) {
114 
115  p0.addPebble(Vec3D(-D.S_peb * D.m_peb + (i + 0.5) * D.S_peb,
116  -D.S_peb * D.n_peb + (j + 0.5) * D.S_peb,
117  -D.S_peb * D.k_peb + (k + 0.5) * D.S_peb), D.R_peb);
118 
119  }}}
121  Matrix3D(1, 0, 0,
122  0, 1, 0,
123  0, 0, 1));
124 
125  std::cout<<"I_xx = "<<D.I_xx<<std::endl;
126  std::cout<<"I_yy = "<<D.I_yy<<std::endl;
127 
128 
129  p0.setInitInertia(
130  MatrixSymmetric3D(D.I_xx, 0, 0,
131  D.I_yy, 0,
132  D.I_zz));
133  p0.setClumpMass(1 * D.mass);
134 
136 
137 
138 
139  Vec3D pos = Vec3D(D.margin + part*D.S_dom,
140  0,
141  0);
142 
143 
144 
145  p0.setPosition(pos);
146 
147  Vec3D angVel(0,0,0);
148  Vec3D vel(0,0,0);
149 
150  p0.setAngularVelocity(angVel);
151  p0.setVelocity(vel);
153  }
154 
155  // Cue
156 
157  ClumpParticle p0;
158  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
159  p0.setClump();
160  p0.setRadius(D.R_cue);
161  p0.addPebble(Vec3D(0, 0, 0), D.R_cue);
162  p0.setPosition(Vec3D(0.9*D.margin, 0, D.S_peb*(D.k_peb-0.5))); // sets particle position
163  p0.setVelocity(Vec3D(D.Vel_cue, 0., 0.));// sets particle velocity
165 
166  // Rectangular box
167  wallHandler.clear();
168  InfiniteWall w0;
170  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
172 
173  }
virtual void clear()
Empties the whole BaseHandler by removing all Objects and setting all other variables to 0.
Definition: BaseHandler.h:528
std::enable_if<!std::is_pointer< U >::value, U * >::type copyAndAddObject(const U &object)
Creates a copy of a Object and adds it to the BaseHandler.
Definition: BaseHandler.h:379
T * getObject(const unsigned int id)
Gets a pointer to the Object at the specified index in the BaseHandler.
Definition: BaseHandler.h:613
void setAngularVelocity(const Vec3D &angularVelocity)
set the angular velocity of the BaseInteractble.
Definition: BaseInteractable.cc:360
void setVelocity(const Vec3D &velocity)
set the velocity of the BaseInteractable.
Definition: BaseInteractable.cc:350
virtual void setPosition(const Vec3D &position)
Sets the position of this BaseInteractable.
Definition: BaseInteractable.h:239
virtual void setRadius(Mdouble radius)
Sets the particle's radius_ (and adjusts the mass_ accordingly, based on the particle's species)
Definition: BaseParticle.cc:553
void setSpecies(const ParticleSpecies *species)
Definition: BaseParticle.cc:818
void setSpecies(const ParticleSpecies *species)
Defines the species of the current wall.
Definition: BaseWall.cc:169
void setClumpMass(Mdouble mass)
Definition: ClumpParticle.h:173
void setClump()
Definition: ClumpParticle.cc:120
void setInitInertia(MatrixSymmetric3D inertia)
Definition: ClumpParticle.cc:216
void setDamping(Mdouble damp)
Definition: ClumpParticle.h:180
void setPrincipalDirections(Matrix3D directions)
Definition: ClumpParticle.cc:139
void addPebble(Vec3D position, Mdouble radius)
Definition: ClumpParticle.cc:129
SpeciesHandler speciesHandler
A handler to that stores the species type i.e. LinearViscoelasticSpecies, etc.
Definition: DPMBase.h:1427
void setParticlesWriteVTK(bool writeParticlesVTK)
Sets whether particles are written in a VTK file.
Definition: DPMBase.cc:942
Mdouble getZMin() const
If the length of the problem domain in z-direction is ZMax - ZMin, then getZMin() returns ZMin.
Definition: DPMBase.h:644
A infinite wall fills the half-space {point: (position_-point)*normal_<=0}.
Definition: InfiniteWall.h:48
void set(Vec3D normal, Vec3D point)
Defines a standard wall, given an outward normal vector s.t. normal*x=normal*point for all x of the w...
Definition: InfiniteWall.cc:118
Implementation of a 3D matrix.
Definition: Matrix.h:38
Implementation of a 3D symmetric matrix.
Definition: MatrixSymmetric.h:37
const std::complex< Mdouble > i
Definition: ExtendedMath.h:51
Mdouble I_zz
Definition: Domino.cpp:61
int m_peb
Definition: Domino.cpp:46
Mdouble I_xx
Definition: Domino.cpp:59
int k_peb
Definition: Domino.cpp:46
Mdouble S_peb
Definition: Domino.cpp:44
int N_dom
Definition: Domino.cpp:40
Mdouble R_peb
Definition: Domino.cpp:41
Mdouble R_cue
Definition: Domino.cpp:42
Mdouble mass
Definition: Domino.cpp:58
Mdouble Vel_cue
Definition: Domino.cpp:43
int n_peb
Definition: Domino.cpp:46
Mdouble I_yy
Definition: Domino.cpp:60

References ClumpParticle::addPebble(), BaseHandler< T >::clear(), clump_damping, BaseHandler< T >::copyAndAddObject(), D, BaseHandler< T >::getObject(), DPMBase::getZMin(), constants::i, dominoes::I_xx, dominoes::I_yy, dominoes::I_zz, dominoes::k_peb, dominoes::m_peb, dominoes::margin, dominoes::mass, dominoes::N_dom, dominoes::n_peb, DPMBase::particleHandler, dominoes::R_cue, dominoes::R_peb, dominoes::S_dom, dominoes::S_peb, InfiniteWall::set(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), DPMBase::setParticlesWriteVTK(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseWall::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, dominoes::Vel_cue, and DPMBase::wallHandler.

◆ setupInitialConditions() [2/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

65  {
66  // Generate gomboc
67  setClumpIndex(2);
68  ClumpParticle p0;
69  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
70  p0.setClump();
71  // DoubleVector upds = UniformRandomPDs();
72  DoubleVector upds = {0, 0.707107, 0.707107, 0, -0.707107, 0.707107, -1, 0, 0};
73  data = RotateClump(data, clump_index, upds); // here you can try different seeds
75  Vec3D pos = Vec3D(0, 0, -1.2);
76  p0.setPosition(pos);
77  for (int j = 0; j < data.pebblesR[clump_index].size(); j++) {
82  }
87  p0.setInitInertia(
90  data.toi[clump_index][8]));
92  double mag = 0;
93  p0.setAngularVelocity(Vec3D(0,0,0));
94  p0.setVelocity(Vec3D(0,0,0));
95 
98 
99  // Rectangular box
100  wallHandler.clear();
101  InfiniteWall w0;
103  w0.set(Vec3D(-1.0, 0.0, 0.0), Vec3D(getXMin(), 0, 0));
105  w0.set(Vec3D(1.0, 0.0, 0.0), Vec3D(getXMax(), 0, 0));
107  w0.set(Vec3D(0.0, -1.0, 0.0), Vec3D(0, getYMin(), 0));
109  w0.set(Vec3D(0.0, 1.0, 0.0), Vec3D(0, getYMax(), 0));
111  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
113  w0.set(Vec3D(0.0, 0.0, 1.0), Vec3D(0, 0, getZMax()));
115  }
std::vector< double > DoubleVector
Definition: ClumpInput.h:45
ClumpData RotateClump(ClumpData data, int clump_index, DoubleVector new_pd)
Definition: ClumpInput.h:247
Mdouble getXMin() const
If the length of the problem domain in x-direction is XMax - XMin, then getXMin() returns XMin.
Definition: DPMBase.h:619
Mdouble getXMax() const
If the length of the problem domain in x-direction is XMax - XMin, then getXMax() returns XMax.
Definition: DPMBase.h:626
Mdouble getYMin() const
If the length of the problem domain in y-direction is YMax - YMin, then getYMin() returns YMin.
Definition: DPMBase.h:632
Mdouble getYMax() const
If the length of the problem domain in y-direction is YMax - YMin, then getYMax() returns XMax.
Definition: DPMBase.h:638
Mdouble getZMax() const
If the length of the problem domain in z-direction is ZMax - ZMin, then getZMax() returns ZMax.
Definition: DPMBase.h:650
Double2DVector toi
Definition: ClumpInput.h:72
Double2DVector pd
Definition: ClumpInput.h:73
Double2DVector pebblesX
Definition: ClumpInput.h:67
Double2DVector pebblesZ
Definition: ClumpInput.h:69
Double2DVector pebblesY
Definition: ClumpInput.h:68
Double2DVector pebblesR
Definition: ClumpInput.h:70

References ClumpParticle::addPebble(), BaseHandler< T >::clear(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, BaseHandler< T >::getObject(), DPMBase::getXMax(), DPMBase::getXMin(), DPMBase::getYMax(), DPMBase::getYMin(), DPMBase::getZMax(), DPMBase::getZMin(), ClumpData::mass, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, RotateClump(), InfiniteWall::set(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseWall::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, ClumpData::toi, and DPMBase::wallHandler.

◆ setupInitialConditions() [3/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

65  {
66  // Generate rattleback
67  setClumpIndex(3);
68  ClumpParticle p0;
69  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
70  p0.setClump();
71  //DoubleVector upds = UniformRandomPDs();
72  DoubleVector upds = {1, 0, 0, 0, 0, 1, 0, -1, 0};
73  data = RotateClump(data, clump_index, upds); // here you can try different seeds
75  Vec3D pos = Vec3D(0, 0, -94);
76  p0.setPosition(pos);
77  for (int j = 0; j < data.pebblesR[clump_index].size(); j++) {
82  }
87  p0.setInitInertia(
90  data.toi[clump_index][8]));
92  double mag = 0;
93  p0.setAngularVelocity(Vec3D(0,0,-0.7));
94  p0.setVelocity(Vec3D(0,0,0));
95 
98 
99  // Rectangular box
100  wallHandler.clear();
101  InfiniteWall w0;
103  w0.set(Vec3D(-1.0, 0.0, 0.0), Vec3D(getXMin(), 0, 0));
105  w0.set(Vec3D(1.0, 0.0, 0.0), Vec3D(getXMax(), 0, 0));
107  w0.set(Vec3D(0.0, -1.0, 0.0), Vec3D(0, getYMin(), 0));
109  w0.set(Vec3D(0.0, 1.0, 0.0), Vec3D(0, getYMax(), 0));
111  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
113  w0.set(Vec3D(0.0, 0.0, 1.0), Vec3D(0, 0, getZMax()));
115  }

References ClumpParticle::addPebble(), BaseHandler< T >::clear(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, BaseHandler< T >::getObject(), DPMBase::getXMax(), DPMBase::getXMin(), DPMBase::getYMax(), DPMBase::getYMin(), DPMBase::getZMax(), DPMBase::getZMin(), ClumpData::mass, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, RotateClump(), InfiniteWall::set(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseWall::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, ClumpData::toi, and DPMBase::wallHandler.

◆ setupInitialConditions() [4/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

83  {
84 
85  setClumpIndex(2);
86  int N_created = 0;
87  for (int part = 0; part<N_att; part++) {
88 
89  ClumpParticle p0;
90  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
91  p0.setClump();
92  ClumpData rdata = RotateClump(data, clump_index, UniformRandomPDs()); // Rotate clump arbitrarily
93 
94 
95 
96  p0.setRadius(rdata.pebblesR[clump_index][0]);
97 
98  for (int j = 0; j < rdata.pebblesR[clump_index].size(); j++) {
99  p0.addPebble(Vec3D(rdata.pebblesX[clump_index][j],
100  rdata.pebblesY[clump_index][j],
101  rdata.pebblesZ[clump_index][j]),
102  rdata.pebblesR[clump_index][j]);
103  }
105  Matrix3D(rdata.pd[clump_index][0], rdata.pd[clump_index][1], rdata.pd[clump_index][2],
106  rdata.pd[clump_index][3], rdata.pd[clump_index][4], rdata.pd[clump_index][5],
107  rdata.pd[clump_index][6], rdata.pd[clump_index][7], rdata.pd[clump_index][8]));
108  p0.setInitInertia(
109  MatrixSymmetric3D(rdata.toi[clump_index][0], rdata.toi[clump_index][1], rdata.toi[clump_index][2],
110  rdata.toi[clump_index][4], rdata.toi[clump_index][5],
111  rdata.toi[clump_index][8]));
112  p0.setClumpMass(rdata.mass[clump_index]);
113 
115 
116 
117  Vec3D pos = Vec3D(f_min + margin + RandomDouble(f_max - f_min - 2 * margin),
118  f_min + margin + RandomDouble(f_max - f_min - 2 * margin),
120 
121  p0.setPosition(pos);
122 
123  Vec3D angVel = Vec3D(av_min + RandomDouble(av_max - av_min),
126 
130 
131  p0.setAngularVelocity(angVel);
132  p0.setVelocity(vel);
133 
134 
137  N_created++;
138  }
139  }
140  std::cout<<"N_created = "<<N_created<<std::endl;
141 
142  // Introduce a rotating wall
143  Mdouble wallScaleFactor = 1e-3; // Scale used in the stl file (mm)
144  Vec3D shift = {0,0,0};
145  Vec3D velocity = {0,0,0};
146  rotatingWallID = wallHandler.readTriangleWall(getMercuryDPMSourceDir() + "/Drivers/Clump/RotatingDrum.stl",speciesHandler.getObject(0), wallScaleFactor,shift,velocity,Vec3D(0,0,0));
147 
148 
149  }
const std::string getMercuryDPMSourceDir()
This file is used for generating definitions that give access to CMakeVariables from within a cpp fil...
Definition: CMakeDefinitions.cc:32
double RandomDouble(double Max)
Definition: ClumpInput.h:53
DoubleVector UniformRandomPDs()
Definition: ClumpInput.h:262
Mdouble av_max
Definition: RotatingDrumClumps.cpp:42
Mdouble z_margin
Definition: RotatingDrumClumps.cpp:39
int N_att
Definition: RotatingDrumClumps.cpp:45
Mdouble tv_min
Definition: RotatingDrumClumps.cpp:43
Mdouble z_shift
Definition: RotatingDrumClumps.cpp:37
Mdouble margin
Definition: RotatingDrumClumps.cpp:38
Mdouble av_min
Definition: RotatingDrumClumps.cpp:41
Mdouble tv_max
Definition: RotatingDrumClumps.cpp:44
bool checkClumpForInteractionPeriodic(BaseParticle &particle)
Definition: Mercury3DClump.h:210
unsigned readTriangleWall(std::string filename, ParticleSpecies *species, Mdouble scaleFactor=1, Vec3D centerOfRotation={0, 0, 0}, Vec3D velocity={0, 0, 0}, Vec3D angularVelocity={0, 0, 0})
Reads triangulated walls from vtk or stl files, and converts them into a set of TriangleWalls.
Definition: WallHandler.cc:341
Definition: ClumpInput.h:61

References ClumpParticle::addPebble(), av_max, av_min, Mercury3Dclump::checkClumpForInteractionPeriodic(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, f_max, f_min, getMercuryDPMSourceDir(), BaseHandler< T >::getObject(), margin, ClumpData::mass, N_att, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, RandomDouble(), WallHandler::readTriangleWall(), RotateClump(), rotatingWallID, BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, ClumpData::toi, tv_max, tv_min, UniformRandomPDs(), DPMBase::wallHandler, z_margin, and z_shift.

◆ setupInitialConditions() [5/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

64  {
65  // Generate single clump
66  setClumpIndex(0);
67  ClumpParticle p0;
68  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
69  p0.setClump();
70  // data = RotateClump(data, clump_index, UniformRandomPDs()); // Rotate clump arbitrarily
72  Vec3D pos = Vec3D(0, 0, 5);
73  p0.setPosition(pos);
74  for (int j = 0; j < data.pebblesR[clump_index].size(); j++) {
79  }
84  p0.setInitInertia(
87  data.toi[clump_index][8]));
88  std::cout<<"CLUMP MASS set = "<<data.mass[clump_index]<<std::endl;
90  p0.setAngularVelocity(Vec3D(0,5,0));
91  p0.setVelocity(Vec3D(4,0,10));
92 
93  std::cout<<"CLUMP MASS get = "<<p0.getMass()<<std::endl;
96 
97  // Rectangular box
99  InfiniteWall w0;
101  w0.set(Vec3D(-1.0, 0.0, 0.0), Vec3D(getXMin(), 0, 0));
103  w0.set(Vec3D(1.0, 0.0, 0.0), Vec3D(getXMax(), 0, 0));
105  w0.set(Vec3D(0.0, -1.0, 0.0), Vec3D(0, getYMin(), 0));
107  w0.set(Vec3D(0.0, 1.0, 0.0), Vec3D(0, getYMax(), 0));
109  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
111  w0.set(Vec3D(0.0, 0.0, 1.0), Vec3D(0, 0, getZMax()));
113  }
Mdouble getMass() const
Returns the particle's mass.
Definition: BaseParticle.h:322

References ClumpParticle::addPebble(), BaseHandler< T >::clear(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, BaseParticle::getMass(), BaseHandler< T >::getObject(), DPMBase::getXMax(), DPMBase::getXMin(), DPMBase::getYMax(), DPMBase::getYMin(), DPMBase::getZMax(), DPMBase::getZMin(), ClumpData::mass, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, InfiniteWall::set(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseWall::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, ClumpData::toi, and DPMBase::wallHandler.

◆ setupInitialConditions() [6/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

64  {
65  // Generate single clump
66  setClumpIndex(1);
67  ClumpParticle p0;
68  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
69  p0.setClump();
70  DoubleVector urpds = {0.707, 0.707, 0, -0.707, 0.707, 0, 0, 0, 1};
71  // DoubleVector urpds = UniformRandomPDs();
72  Vec3D angVel = 2 * Vec3D( urpds[0], urpds[1], urpds[2]);
73  data = RotateClump(data, clump_index, urpds); // Rotate clump arbitrarily
75  Vec3D pos = Vec3D(0, 0, 0);
76  p0.setPosition(pos);
77 
78  //p0.setInitPrincipalDirections(
79  // Matrix3D(data.pd[clump_index][0], data.pd[clump_index][1], data.pd[clump_index][2],
80  // data.pd[clump_index][3], data.pd[clump_index][4], data.pd[clump_index][5],
81  // data.pd[clump_index][6], data.pd[clump_index][7], data.pd[clump_index][8]));
82 
87  p0.setInitInertia(
90  data.toi[clump_index][8]));
91 
92 
93  for (int j = 0; j < data.pebblesR[clump_index].size(); j++) {
98  }
99 
100  std::cout<<"CLUMP MASS set = "<<data.mass[clump_index]<<std::endl;
102  p0.setAngularVelocity(angVel);
103 
104  std::cout<<"CLUMP MASS get = "<<p0.getMass()<<std::endl;
107 
108 
109  // Rectangular box
110  wallHandler.clear();
111  InfiniteWall w0;
113  w0.set(Vec3D(-1.0, 0.0, 0.0), Vec3D(getXMin(), 0, 0));
115  w0.set(Vec3D(1.0, 0.0, 0.0), Vec3D(getXMax(), 0, 0));
117  w0.set(Vec3D(0.0, -1.0, 0.0), Vec3D(0, getYMin(), 0));
119  w0.set(Vec3D(0.0, 1.0, 0.0), Vec3D(0, getYMax(), 0));
121  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
123  w0.set(Vec3D(0.0, 0.0, 1.0), Vec3D(0, 0, getZMax()));
125  }

References ClumpParticle::addPebble(), BaseHandler< T >::clear(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, BaseParticle::getMass(), BaseHandler< T >::getObject(), DPMBase::getXMax(), DPMBase::getXMin(), DPMBase::getYMax(), DPMBase::getYMin(), DPMBase::getZMax(), DPMBase::getZMin(), ClumpData::mass, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, RotateClump(), InfiniteWall::set(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseWall::setSpecies(), DPMBase::speciesHandler, ClumpData::toi, and DPMBase::wallHandler.

◆ setupInitialConditions() [7/7]

void multiParticleT1::setupInitialConditions ( )
inlineoverridevirtual

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.

A virtual function with no implementation but can be overriden.

Todo:
I (Anthony) wants to change this to be an external function. This has a lot of advantages especially when using copy-constructors. This is a major change and will break other codes, so therefore has to be done carefully.

This sets up the particles initial conditions it is as you expect the user to override this. By default the particles are randomly distributed

Reimplemented from DPMBase.

76  {
78 
79  /* Double periodic + bottom wall + unlimited top
80  auto per_x = boundaryHandler.copyAndAddObject(new PeriodicBoundary);
81  per_x->set(Vec3D(1, 0, 0), getXMin(), getXMax());
82  auto per_y = boundaryHandler.copyAndAddObject(new PeriodicBoundary);
83  per_y->set(Vec3D(0, 1, 0), getYMin(), getYMax());
84  wallHandler.clear();
85  InfiniteWall w0;
86  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
87  wallHandler.copyAndAddObject(w0);
88  */
89 
90  /* Rectangular box
91  wallHandler.clear();
92  InfiniteWall w0;
93  w0.setSpecies(speciesHandler.getObject(0));
94  w0.set(Vec3D(-1.0, 0.0, 0.0), Vec3D(getXMin(), 0, 0));
95  wallHandler.copyAndAddObject(w0);
96  w0.set(Vec3D(1.0, 0.0, 0.0), Vec3D(getXMax(), 0, 0));
97  wallHandler.copyAndAddObject(w0);
98  w0.set(Vec3D(0.0, -1.0, 0.0), Vec3D(0, getYMin(), 0));
99  wallHandler.copyAndAddObject(w0);
100  w0.set(Vec3D(0.0, 1.0, 0.0), Vec3D(0, getYMax(), 0));
101  wallHandler.copyAndAddObject(w0);
102  w0.set(Vec3D(0.0, 0.0, -1.0), Vec3D(0, 0, getZMin()));
103  wallHandler.copyAndAddObject(w0);
104  w0.set(Vec3D(0.0, 0.0, 1.0), Vec3D(0, 0, getZMax()));
105  wallHandler.copyAndAddObject(w0);
106  */
107 
108 
109  // Periodic box
111  per_x->set(Vec3D(1, 0, 0), getXMin(), getXMax());
112 
114  per_y->set(Vec3D(0, 1, 0), getYMin(), getYMax());
115 
117  per_z->set(Vec3D(0, 0, 1), getZMin(), getZMax());
118 
119 
120  /*
121  SphericalParticle p0;
122  p0.setSpecies(speciesHandler.getObject(0));
123  p0.setRadius(1); // sets particle radius
124  p0.setPosition(Vec3D(0., 0., 0.)); // sets particle position
125  p0.setVelocity(Vec3D(0., 0., 0.));// sets particle velocity
126  particleHandler.copyAndAddObject(p0);
127  */
128 
129 
130  // Generate a dense packing of Clumps
131  setClumpIndex(1);
132  int N_created = 0;
133  for (int part = 0; part<N_att; part++) {
134 
135  ClumpParticle p0;
136  p0.setSpecies(speciesHandler.getObject(0)); // Assign the material type to Clump 1
137  p0.setClump();
138  ClumpData rdata = RotateClump(data, clump_index, UniformRandomPDs()); // Rotate clump arbitrarily
139 
140 
141 
142  p0.setRadius(rdata.pebblesR[clump_index][0]);
143 
144  for (int j = 0; j < rdata.pebblesR[clump_index].size(); j++) {
145  p0.addPebble(Vec3D(rdata.pebblesX[clump_index][j],
146  rdata.pebblesY[clump_index][j],
147  rdata.pebblesZ[clump_index][j]),
148  rdata.pebblesR[clump_index][j]);
149  }
151  Matrix3D(rdata.pd[clump_index][0], rdata.pd[clump_index][1], rdata.pd[clump_index][2],
152  rdata.pd[clump_index][3], rdata.pd[clump_index][4], rdata.pd[clump_index][5],
153  rdata.pd[clump_index][6], rdata.pd[clump_index][7], rdata.pd[clump_index][8]));
154  p0.setInitInertia(
155  MatrixSymmetric3D(rdata.toi[clump_index][0], rdata.toi[clump_index][1], rdata.toi[clump_index][2],
156  rdata.toi[clump_index][4], rdata.toi[clump_index][5],
157  rdata.toi[clump_index][8]));
158  p0.setClumpMass(rdata.mass[clump_index]);
159 
161 
162 
163  Vec3D pos = Vec3D(f_min + margin + RandomDouble(f_max - f_min - 2 * margin),
164  f_min + margin + RandomDouble(f_max - f_min - 2 * margin),
165  f_min + margin + RandomDouble(f_max - f_min - 2 * margin));
166 
167  p0.setPosition(pos);
168 
169  Vec3D angVel = Vec3D(av_min + RandomDouble(av_max - av_min),
172 
176 
177  // No motion with zero initial conditions
178  //angVel = Vec3D(0,0,0);
179  //vel = Vec3D(0,0,0);
180 
181  p0.setAngularVelocity(angVel);
182  p0.setVelocity(vel);
183 
184 
187  N_created++;
188  }
189  }
190 
191  std::cout<<"Number of particles created: "<<N_created<<std::endl;
192 
193  }
Mdouble av_max
Definition: TGas.cpp:42
int N_att
Definition: TGas.cpp:47
Mdouble tv_min
Definition: TGas.cpp:44
Mdouble margin
Definition: TGas.cpp:38
Mdouble av_min
Definition: TGas.cpp:41
Mdouble tv_max
Definition: TGas.cpp:45
BoundaryHandler boundaryHandler
An object of the class BoundaryHandler which concerns insertion and deletion of particles into or fro...
Definition: DPMBase.h:1452
Defines a pair of periodic walls. Inherits from BaseBoundary.
Definition: PeriodicBoundary.h:41

References ClumpParticle::addPebble(), av_max, av_min, DPMBase::boundaryHandler, Mercury3Dclump::checkClumpForInteractionPeriodic(), clump_damping, clump_index, BaseHandler< T >::copyAndAddObject(), data, f_max, f_min, BaseHandler< T >::getObject(), DPMBase::getXMax(), DPMBase::getXMin(), DPMBase::getYMax(), DPMBase::getYMin(), DPMBase::getZMax(), DPMBase::getZMin(), margin, ClumpData::mass, N_att, DPMBase::particleHandler, ClumpData::pd, ClumpData::pebblesR, ClumpData::pebblesX, ClumpData::pebblesY, ClumpData::pebblesZ, RandomDouble(), RotateClump(), BaseInteractable::setAngularVelocity(), ClumpParticle::setClump(), setClumpIndex(), ClumpParticle::setClumpMass(), ClumpParticle::setDamping(), ClumpParticle::setInitInertia(), DPMBase::setParticlesWriteVTK(), BaseInteractable::setPosition(), ClumpParticle::setPrincipalDirections(), BaseParticle::setRadius(), BaseParticle::setSpecies(), BaseInteractable::setVelocity(), DPMBase::speciesHandler, ClumpData::toi, tv_max, tv_min, and UniformRandomPDs().

Member Data Documentation

◆ clump_damping

Mdouble multiParticleT1::clump_damping = 10
private

◆ clump_index

int multiParticleT1::clump_index
private

◆ clump_mass

Mdouble multiParticleT1::clump_mass
private

Referenced by getClumpMass(), and multiParticleT1().

◆ data

ClumpData multiParticleT1::data
private

◆ insertionBoundary

CubeInsertionBoundary* multiParticleT1::insertionBoundary
private

◆ rotatingWallID

unsigned multiParticleT1::rotatingWallID = 0
private

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