BaseParticle.h
Go to the documentation of this file.
1 //Copyright (c) 2013-2023, The MercuryDPM Developers Team. All rights reserved.
2 //For the list of developers, see <http://www.MercuryDPM.org/Team>.
3 //
4 //Redistribution and use in source and binary forms, with or without
5 //modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name MercuryDPM nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 //DISCLAIMED. IN NO EVENT SHALL THE MERCURYDPM DEVELOPERS TEAM BE LIABLE FOR ANY
19 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 //ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 //(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 #ifndef BASEPARTICLE_H
27 #define BASEPARTICLE_H
28 
29 #include <vector>
30 #include "Math/Vector.h"
31 #include "BaseInteractable.h"
32 #include "HGridCell.h"
34 
35 class ParticleHandler;
36 
37 class SpeciesHandler;
38 
39 class HGrid;
40 
41 class BaseInteraction;
42 
43 #ifdef CONTACT_LIST_HGRID
44 class PossibleContact;
45 #endif
46 
54 {
55 public:
59  BaseParticle();
60 
64  BaseParticle(const BaseParticle& p);
65 
66  explicit BaseParticle(const ParticleSpecies* s);
67 
71  ~BaseParticle() override;
72 
76  virtual BaseParticle* copy() const = 0;
77 
81  virtual Mdouble getVolume() const;
82 
86  void fixParticle();
87 
93  bool isFixed() const override
94  { return (invMass_ == 0.0); }
95 
99  bool isMPIParticle() const;
100 
104  void setMPIParticle(bool flag);
105 
109  bool isInMPIDomain();
110 
114  void setInMPIDomain(bool flag);
115 
119  bool isInPeriodicDomain() const;
120 
124  void setInPeriodicDomain(bool flag);
125 
129  bool isPeriodicGhostParticle() const;
130 
134  void setPeriodicGhostParticle(bool flag);
135 
139  bool isMaserParticle() const;
140 
144  void setMaserParticle(bool flag);
145 
149  void setCommunicationComplexity(unsigned complexity);
150 
154  unsigned getCommunicationComplexity();
155 
159  void setPeriodicComplexity(std::vector<int> complexity);
160 
164  void setPeriodicComplexity(int index, int value);
165 
169  const std::vector<int>& getPeriodicComplexity();
170 
174  void setPreviousPeriodicComplexity(std::vector<int> complexity);
175 
179  const std::vector<int>& getPreviousPeriodicComplexity() const;
180 
184  int getPeriodicComplexity(int index);
185 
186  //void setCurrentPeriodicPosition(Vec3D position);
187 
188  //Vec3D getCurrentPeriodicPosition();
189 
193  void unfix();
194 
198  void read(std::istream& is) override;
199 
204  virtual void oldRead(std::istream& is);
205 
209  void write(std::ostream& os) const override;
210 
214  std::string getName() const override;
215 
219  virtual void setInfo(Mdouble info);
220 
224  virtual Mdouble getInfo() const;
225 
229  void printHGrid(std::ostream& os) const;
230 
234  unsigned int getHGridLevel() const
235  { return hGridCell.getHGridLevel(); }
236 
243  { return hGridNextObject_; }
244 
251  { return hGridPrevObject_; }
252 
253 #ifdef CONTACT_LIST_HGRID
254 
258  PossibleContact* getFirstPossibleContact() const;
259 #endif
260 
265  int getHGridX() const
266  { return hGridCell.getHGridX(); }
267 
272  int getHGridY() const
273  { return hGridCell.getHGridY(); }
274 
279  int getHGridZ() const
280  { return hGridCell.getHGridZ(); }
281 
287  { return invInertia_; }
288 
293  Mdouble getInvMass() const override
294  { return invMass_; }
295 
296  Mdouble getCurvature(const Vec3D& labFixedCoordinates) const override
297  { return 1.0/radius_; }
298 
303  virtual Mdouble getKineticEnergy() const;
304 
309  virtual Mdouble getRotationalEnergy() const;
310 
317 
322  Mdouble getMass() const
323  { return 1.0 / invMass_; }
324 
326  { return 4.0*constants::pi*getRadius()*getRadius(); }
327 
329  { return getVelocity() / invMass_; }
330 
332  { return invInertia_.inverse(); }
333 
334  Vec3D getAngularMomentum() const;
335 
342  { return periodicFromParticle_; }
343 
349  { return radius_; }
350 
363  return getRadius() + getSpecies()->getMaxInteractionDistance() * 0.5;
364  }
365 
370  {
371  //const auto mixedSpecies = getSpecies()->getHandler()->getMixedObject(getSpecies(),particle->getSpecies());
372  //return mixedSpecies->getInteractionDistance();
373  return getSpecies()->getMixedSpecies(i->getSpecies())->getInteractionDistance();
374  }
375 
380  return getRadius() + particle->getRadius() + getInteractionDistance((const BaseInteractable*)particle);
381  }
382 
387  return getRadius() + getInteractionDistance((const BaseInteractable*)wall);
388  }
389 
395  const Vec3D& getDisplacement() const
396  { return displacement_; }
397 
403  const Vec3D& getPreviousPosition() const
404  { return previousPosition_; }
405 
411  const Vec3D getDisplacement2(Mdouble xmin, Mdouble xmax, Mdouble ymin, Mdouble ymax, Mdouble zmin, Mdouble zmax,
412  Mdouble t) const;
413 
417  virtual void setInertia();
418 
422  void setInertia(MatrixSymmetric3D inertia);
423 
427  void setInverseInertia(MatrixSymmetric3D inverseInertia);
428 
433  void setInfiniteInertia();
434 
442  { periodicFromParticle_ = p; };
443 
449  void setHGridX(const int x)
450  { hGridCell.setHGridX(x); }
451 
457  void setHGridY(const int y)
458  { hGridCell.setHGridY(y); }
459 
465  void setHGridZ(const int z)
466  { hGridCell.setHGridZ(z); }
467 
472  void setHGridLevel(const unsigned int level)
473  { hGridCell.setHGridLevel(level); }
474 
481  { hGridNextObject_ = p; }
482 
489  { hGridPrevObject_ = p; }
490 
491 #ifdef CONTACT_LIST_HGRID
495  void setFirstPossibleContact(PossibleContact* PC);
496 #endif
497 
502  virtual void setRadius(Mdouble radius);
503 
504  /*
505  * The below 6 functions had to be declared virtual here in order to allow access of these functions in ParticleHandler class in the function writeVTK.
506  */
507 
511  virtual Vec3D getAxes() const;
512 
516  virtual Mdouble getExponentEps1() const;
517 
521  virtual Mdouble getExponentEps2() const;
522 
523 
527  virtual void setAxes(const Vec3D& axes){ }
528 
532  virtual void setExponents(const Mdouble& eps1, const Mdouble& eps2){}
533 
534  //
541  void setMass(Mdouble mass);
542 
548  void setMassForP3Statistics(Mdouble mass);
549 
554  void setDisplacement(const Vec3D& disp);
555 
559  void setPreviousPosition(const Vec3D& pos);
560 
564  void movePrevious(const Vec3D& posMove);
565 
569  void accelerate(const Vec3D& vel);
570 
574  void angularAccelerate(const Vec3D& angVel);
575 
579  void addDisplacement(const Vec3D& addDisp);
580 
584  void setHandler(ParticleHandler* handler);
585 
589  ParticleHandler* getHandler() const;
590 
595  BaseInteraction* getInteractionWith(BaseParticle* P, unsigned timeStamp, InteractionHandler* interactionHandler) override;
596 
600  virtual bool isInContactWith(const BaseParticle* P) const;
601 
607  virtual void integrateBeforeForceComputation(double time, double timeStep);
608 
613  virtual void integrateAfterForceComputation(double time, double timeStep);
614 
618  unsigned int getParticleDimensions() const;
619 
625  void setIndSpecies(unsigned int indSpecies) override;
626 
632  void setSpecies(const ParticleSpecies* species);
633 
634  virtual unsigned getNumberOfFieldsVTK() const;
635 
636  virtual std::string getTypeVTK(unsigned i) const;
637 
638  virtual std::string getNameVTK(unsigned i) const;
639 
640  virtual std::vector<Mdouble> getFieldVTK(unsigned i) const;
641 
642  virtual void actionsAfterTimeStep() {}
643 
648  virtual bool isSphericalParticle() const = 0;
649 
650  //const HGridCell& getHGridCell() const;
651  const HGridCell& getHGridCell() const
652  { return hGridCell; }
653 
654  virtual void computeMass(const ParticleSpecies& s);
655 
657  {
658  return clumpParticle;
659  }
660 
664  bool isClump() const
665  {
666  return isClump_;
667  }
668 
673  bool isPebble() const
674  {
675  return isPebble_;
676  }
677 
678  virtual Vec3D getCenterOfMass() {return Vec3D(0,0,0);}
679  //+++++++++++++++++++++++++++++
680 
681 
682 public:
683 
687 
688 private:
689 
694 
695 #ifdef CONTACT_LIST_HGRID
699  PossibleContact* firstPossibleContact;
700 #endif
701 
705 
708 
711 
712  //MPI particle attributes
715  unsigned communicationComplexity_; //Determins if the particle in the corner of a domain, rib, side or not at all
716 
717  //Periodic boundary particle attributes
720  std::vector<int> previousPeriodicComplexity_;
721  std::vector<int> periodicComplexity_;
723 
726 
732 
733  Mdouble info_; // by default, the species ID (if a species is set)
734 
735 
736 public:
737 
742  virtual void actionsAfterAddObject() {}
743 
745 
746  bool isPebble_;
747 
748  bool isClump_;
749 };
750 
751 #endif
double Mdouble
Definition: GeneralDefine.h:34
#define MERCURYDPM_DEPRECATED
Definition: GeneralDefine.h:37
Defines the basic properties that a interactable object can have.
Definition: BaseInteractable.h:55
virtual const Vec3D & getVelocity() const
Returns the velocity of this interactable.
Definition: BaseInteractable.cc:329
const ParticleSpecies * getSpecies() const
Returns a pointer to the species of this BaseInteractable.
Definition: BaseInteractable.h:108
Stores information about interactions between two interactable objects; often particles but could be ...
Definition: BaseInteraction.h:60
Definition: BaseParticle.h:54
void setInverseInertia(MatrixSymmetric3D inverseInertia)
Sets the particle's inertia_ (and adjusts invInertia_ accordingly)
Definition: BaseParticle.cc:519
void write(std::ostream &os) const override
Particle print function, which accepts an std::ostream as input.
Definition: BaseParticle.cc:336
bool isPeriodicGhostParticle() const
Indicates if this particle is a ghost in the periodic boundary.
Definition: BaseParticle.cc:297
bool isMaserParticle_
Indicates the periodic complexity at current time step. Used to update periodic status.
Definition: BaseParticle.h:722
Vec3D getMomentum() const
Definition: BaseParticle.h:328
void setPreviousPosition(const Vec3D &pos)
Sets the particle's position in the previous time step.
Definition: BaseParticle.cc:614
virtual Mdouble getInfo() const
Returns some user-defined information about this object (by default, species ID).
Definition: BaseParticle.cc:358
bool isFixed() const override
Is fixed Particle function. It returns whether a Particle is fixed or not, by checking its inverse Ma...
Definition: BaseParticle.h:93
bool isClump_
The particle is pebble.
Definition: BaseParticle.h:748
Mdouble getInteractionDistance(const BaseInteractable *i) const
Returns the interactionDistance_ of the mixed species of this particle and the particle or wall i.
Definition: BaseParticle.h:369
Mdouble getGravitationalEnergy() const
Calculates the particle's gravitational energy.
virtual std::string getTypeVTK(unsigned i) const
Definition: BaseParticle.cc:841
virtual void oldRead(std::istream &is)
Definition: BaseParticle.cc:386
virtual void setAxes(const Vec3D &axes)
Only ustilised in case of superquadric particles.
Definition: BaseParticle.h:527
unsigned int getParticleDimensions() const
Returns the particle's dimensions (either 2 or 3).
Definition: BaseParticle.cc:784
BaseParticle * periodicFromParticle_
Pointer to the previous Particle in the same HGrid cell.
Definition: BaseParticle.h:710
void setPeriodicComplexity(std::vector< int > complexity)
Set the periodic communication complexity of the particle.
Definition: BaseParticle.cc:206
virtual void setExponents(const Mdouble &eps1, const Mdouble &eps2)
Only ustilised in case of superquadric particles.
Definition: BaseParticle.h:532
const std::vector< int > & getPreviousPeriodicComplexity() const
Sets the previous periodic communication complexity of the particle.
Definition: BaseParticle.cc:271
virtual unsigned getNumberOfFieldsVTK() const
Definition: BaseParticle.cc:836
BaseInteraction * getInteractionWith(BaseParticle *P, unsigned timeStamp, InteractionHandler *interactionHandler) override
Checks if particle is in interaction with given particle P, and if so, returns vector of pointer to t...
Definition: BaseParticle.cc:690
void setPeriodicFromParticle(BaseParticle *p)
Assigns the pointer to the 'original' particle this one's a periodic copy of (used in periodic bounda...
Definition: BaseParticle.h:441
virtual bool isInContactWith(const BaseParticle *P) const
Get whether or not this particle is in contact with the given particle.
Definition: BaseParticle.cc:865
virtual void setInfo(Mdouble info)
Sets some user-defined information about this object (by default, species ID).
Definition: BaseParticle.cc:353
void printHGrid(std::ostream &os) const
Adds particle's HGrid level and cell coordinates to an ostream.
Definition: BaseParticle.cc:427
bool isInMPIDomain()
Indicates if the particle is in the communication zone of the mpi domain.
Definition: BaseParticle.cc:276
void setInPeriodicDomain(bool flag)
Flags the status of the particle whether it is in the periodic communication zone or not.
Definition: BaseParticle.cc:292
BaseParticle * getHGridPrevObject() const
Returns pointer to previous object in particle's HGrid level & cell.
Definition: BaseParticle.h:250
virtual Mdouble getKineticEnergy() const
Calculates the particle's translational kinetic energy.
Definition: BaseParticle.cc:451
Vec3D previousPosition_
Displacement (only used in StatisticsVector, StatisticsPoint)
Definition: BaseParticle.h:725
MatrixSymmetric3D getInvInertia() const
Returns the inverse of the particle's inertia tensor.
Definition: BaseParticle.h:286
Mdouble getRadius() const
Returns the particle's radius.
Definition: BaseParticle.h:348
virtual Mdouble getExponentEps2() const
Only ustilised in case of superquadric particles. Had to create a virtual function to allow function ...
Definition: BaseParticle.cc:862
bool isInPeriodicDomain_
Definition: BaseParticle.h:718
MERCURYDPM_DEPRECATED void setMass(Mdouble mass)
Sets the particle's mass.
Definition: BaseParticle.cc:568
void movePrevious(const Vec3D &posMove)
Adds a vector to the particle's previousPosition_.
Definition: BaseParticle.cc:624
Mdouble getWallInteractionRadius(const BaseWall *wall) const
returns the radius plus the interactionDistance
Definition: BaseParticle.h:386
void setInfiniteInertia()
Sets the particle's inertia_ to 'infinite' (1e20) and its invInertia_ to 0.
Definition: BaseParticle.cc:528
BaseParticle * hGridPrevObject_
Pointer to the next Particle in the same HGrid cell.
Definition: BaseParticle.h:707
std::vector< int > periodicComplexity_
Indicates the periodic complexity at previous time step.
Definition: BaseParticle.h:721
MatrixSymmetric3D getInertia() const
Definition: BaseParticle.h:331
virtual Mdouble getVolume() const
Get Particle volume function, which required a reference to the Species vector. It returns the volume...
Definition: BaseParticle.cc:143
bool isPebble() const
Checks if particle is a pebble (belongs to a clump)
Definition: BaseParticle.h:673
bool isMPIParticle() const
Indicates if this particle is a ghost in the MPI domain.
Definition: BaseParticle.cc:181
unsigned communicationComplexity_
returns true if it flagged as being in MPI domain
Definition: BaseParticle.h:715
Mdouble getSurfaceArea() const
Definition: BaseParticle.h:325
void setHGridNextObject(BaseParticle *p)
Sets the pointer to the next object in the particle's HGrid cell & level.
Definition: BaseParticle.h:480
void fixParticle()
Fix Particle function. It fixes a Particle by setting its inverse mass and inertia and velocities to ...
Definition: BaseParticle.cc:167
const HGridCell & getHGridCell() const
Definition: BaseParticle.h:651
virtual std::vector< Mdouble > getFieldVTK(unsigned i) const
Definition: BaseParticle.cc:851
void setInMPIDomain(bool flag)
Flags the status of the particle if wether it is in the communication zone or not.
Definition: BaseParticle.cc:281
Mdouble radius_
Definition: BaseParticle.h:684
BaseParticle * clumpParticle
Function that updates necessary quantities of a clump particle after adding a pebble.
Definition: BaseParticle.h:744
Vec3D getAngularMomentum() const
Definition: BaseParticle.cc:579
unsigned int getHGridLevel() const
Returns particle's HGrid level.
Definition: BaseParticle.h:234
virtual Mdouble getExponentEps1() const
Only ustilised in case of superquadric particles. Had to create a virtual function to allow function ...
Definition: BaseParticle.cc:859
BaseParticle * getHGridNextObject() const
Returns pointer to next object in particle's HGrid level & cell.
Definition: BaseParticle.h:242
bool isInPeriodicDomain() const
Indicates if the particle is in the periodic boundary communication zone.
Definition: BaseParticle.cc:287
std::vector< int > previousPeriodicComplexity_
Indicates if the particle is a ghost particle of a periodic particle.
Definition: BaseParticle.h:720
ParticleHandler * getHandler() const
Returns pointer to the particle's ParticleHandler.
Definition: BaseParticle.cc:673
void setHGridZ(const int z)
Sets the particle's HGrid cell Z-coordinate.
Definition: BaseParticle.h:465
virtual std::string getNameVTK(unsigned i) const
Definition: BaseParticle.cc:846
bool isMaserParticle() const
Indicates if this particle belongs to the maser boundary.
Definition: BaseParticle.cc:307
const Vec3D getDisplacement2(Mdouble xmin, Mdouble xmax, Mdouble ymin, Mdouble ymax, Mdouble zmin, Mdouble zmax, Mdouble t) const
Definition: BaseParticle.cc:473
Mdouble getMass() const
Returns the particle's mass.
Definition: BaseParticle.h:322
virtual void integrateBeforeForceComputation(double time, double timeStep)
First step of Velocity Verlet integration.
Definition: BaseParticle.cc:720
void setHGridLevel(const unsigned int level)
Sets the particle's HGrid level.
Definition: BaseParticle.h:472
virtual Vec3D getCenterOfMass()
Definition: BaseParticle.h:678
void setMPIParticle(bool flag)
Flags the mpi particle status.
Definition: BaseParticle.cc:191
bool isPebble_
pointer to a clump particle (for a pebble)
Definition: BaseParticle.h:746
void setPreviousPeriodicComplexity(std::vector< int > complexity)
Set the previous periodic communication complexity of the paritcle.
Definition: BaseParticle.cc:266
virtual void integrateAfterForceComputation(double time, double timeStep)
Second step of Velocity Verlet integration.
Definition: BaseParticle.cc:762
const Vec3D & getDisplacement() const
Returns the particle's displacement relative to the previous time step.
Definition: BaseParticle.h:395
void setCommunicationComplexity(unsigned complexity)
Set the communication complexity of the particle.
Definition: BaseParticle.cc:196
bool isClump() const
Checks if particle is a clump (container)
Definition: BaseParticle.h:664
void unfix()
Unfix Particle function, which required a reference to the Species vector. It unfixes a Particle by c...
Definition: BaseParticle.cc:322
virtual Mdouble getRotationalEnergy() const
Calculates the particle's rotational kinetic energy.
Definition: BaseParticle.cc:460
const Vec3D & getPreviousPosition() const
Returns the particle's position in the previous time step.
Definition: BaseParticle.h:403
void setHandler(ParticleHandler *handler)
Sets the pointer to the particle's ParticleHandler.
Definition: BaseParticle.cc:663
Mdouble getSumOfInteractionRadii(const BaseParticle *particle) const
returns the sum of the radii plus the interactionDistance
Definition: BaseParticle.h:379
void angularAccelerate(const Vec3D &angVel)
Increases the particle's angularVelocity_ by the given vector.
Definition: BaseParticle.cc:644
Mdouble getMaxInteractionRadius() const
Returns the particle's interaction radius, which might be different from radius_ (e....
Definition: BaseParticle.h:362
Vec3D displacement_
Indicates if this particle belongs to the maser boundary or is released into the wide open world.
Definition: BaseParticle.h:724
virtual BaseParticle * copy() const =0
Particle copy method. It calls to copy constructor of this Particle, useful for polymorphism.
MatrixSymmetric3D invInertia_
Inverse Particle mass (for computation optimization)
Definition: BaseParticle.h:686
void setHGridX(const int x)
Sets the particle's HGrid cell X-coordinate.
Definition: BaseParticle.h:449
void setPeriodicGhostParticle(bool flag)
Flags the status of the particle to be a ghost in periodic boundary or not.
Definition: BaseParticle.cc:302
Mdouble invMass_
Particle radius_.
Definition: BaseParticle.h:685
void setMaserParticle(bool flag)
Flags the status of the particle if it belongs to the maser boundary or not.
Definition: BaseParticle.cc:312
bool isMPIParticle_
Pointer to originating Particle.
Definition: BaseParticle.h:713
Mdouble info_
Definition: BaseParticle.h:733
BaseParticle * getClump() const
Definition: BaseParticle.h:656
BaseParticle * hGridNextObject_
Definition: BaseParticle.h:706
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
int getHGridY() const
Returns particle's HGrid cell Y-coordinate.
Definition: BaseParticle.h:272
HGridCell hGridCell
Definition: BaseParticle.h:704
~BaseParticle() override
Particle destructor, needs to be implemented and checked if it removes tangential spring information.
Definition: BaseParticle.cc:125
virtual void actionsAfterAddObject()
Definition: BaseParticle.h:742
BaseParticle * getPeriodicFromParticle() const
Returns the 'original' particle this one's a periodic copy of.
Definition: BaseParticle.h:341
void accelerate(const Vec3D &vel)
Increases the particle's velocity_ by the given vector.
Definition: BaseParticle.cc:634
bool isPeriodicGhostParticle_
bool that indicates if a particle is in the periodic domain of any boundary
Definition: BaseParticle.h:719
void read(std::istream &is) override
Particle read function, which accepts an std::istream as input.
Definition: BaseParticle.cc:374
Mdouble getCurvature(const Vec3D &labFixedCoordinates) const override
Definition: BaseParticle.h:296
void setSpecies(const ParticleSpecies *species)
Definition: BaseParticle.cc:818
void setHGridPrevObject(BaseParticle *p)
Sets the pointer to the previous object in the particle's HGrid cell & level.
Definition: BaseParticle.h:488
ParticleHandler * handler_
Inverse Particle inverse inertia (for computation optimization)
Definition: BaseParticle.h:693
unsigned getCommunicationComplexity()
Obtains the communication complexity of the particle.
Definition: BaseParticle.cc:201
virtual void actionsAfterTimeStep()
Definition: BaseParticle.h:642
void setMassForP3Statistics(Mdouble mass)
Sets the particle's mass This function should not be used, but is necessary to extend the CG toolbox ...
Definition: BaseParticle.cc:589
MERCURYDPM_DEPRECATED void setIndSpecies(unsigned int indSpecies) override
Definition: BaseParticle.cc:794
virtual bool isSphericalParticle() const =0
BaseParticle()
Basic Particle constructor, creates an Particle at (0,0,0) with radius, mass and inertia equal to 1.
Definition: BaseParticle.cc:32
std::string getName() const override
Returns the name of the object.
Definition: BaseParticle.cc:348
virtual void setInertia()
Definition: BaseParticle.cc:505
void setDisplacement(const Vec3D &disp)
Sets the particle's displacement (= difference between current position and that of the previous time...
Definition: BaseParticle.cc:605
void setHGridY(const int y)
Sets the particle's HGrid cell Y-coordinate.
Definition: BaseParticle.h:457
const std::vector< int > & getPeriodicComplexity()
Obtains the periodic communication complexity of the particle.
Definition: BaseParticle.cc:231
void addDisplacement(const Vec3D &addDisp)
Adds a vector to the particle's displacement_.
Definition: BaseParticle.cc:653
int getHGridX() const
Returns particle's HGrid cell X-coordinate.
Definition: BaseParticle.h:265
bool isInMPIDomain_
returns true if the particle acts as an MPI particle instead of a real particle
Definition: BaseParticle.h:714
Mdouble getInvMass() const override
Returns the inverse of the particle's mass.
Definition: BaseParticle.h:293
int getHGridZ() const
Returns particle's HGrid cell Z-coordinate.
Definition: BaseParticle.h:279
virtual void computeMass(const ParticleSpecies &s)
Computes the particle's (inverse) mass and inertia.
Definition: BaseParticle.cc:876
virtual Vec3D getAxes() const
Only ustilised in case of superquadric particles. Had to create a virtual function to allow function ...
Definition: BaseParticle.cc:856
Mdouble getInteractionDistance() const
returns the largest separation distance at which adhesive short-range forces can occur.
Definition: BaseSpecies.h:146
Basic class for walls.
Definition: BaseWall.h:49
Definition: HGridCell.h:33
unsigned int getHGridLevel() const
Definition: HGridCell.h:86
void setHGridZ(int HGridZ)
Definition: HGridCell.h:81
int getHGridX() const
Definition: HGridCell.h:56
void setHGridX(int HGridX)
Definition: HGridCell.h:61
int getHGridZ() const
Definition: HGridCell.h:76
void setHGridY(int HGridY)
Definition: HGridCell.h:71
void setHGridLevel(unsigned int HGridLevel)
Definition: HGridCell.h:91
int getHGridY() const
Definition: HGridCell.h:66
In the HGrid class, here all information about the HGrid is stored.
Definition: HGrid.h:43
Container to store Interaction objects.
Definition: InteractionHandler.h:45
Implementation of a 3D symmetric matrix.
Definition: MatrixSymmetric.h:37
static MatrixSymmetric3D inverse(const MatrixSymmetric3D &A)
Computes the inverse of a matrix; exits if the inverse doesn't exist.
Definition: MatrixSymmetric.cc:288
Container to store all BaseParticle.
Definition: ParticleHandler.h:48
Definition: ParticleSpecies.h:37
const BaseSpecies * getMixedSpecies(const ParticleSpecies *s) const
Definition: ParticleSpecies.cc:238
void computeMass(BaseParticle *p) const
Compute Particle mass function, which required a reference to the Species vector. It computes the Par...
Definition: ParticleSpecies.cc:167
Mdouble getMaxInteractionDistance() const
returns the largest separation distance at which adhesive short-range forces can occur.
Definition: ParticleSpecies.h:113
Class that describes a possible contact between two BaseParticle.
Definition: PossibleContact.h:42
Container to store all ParticleSpecies.
Definition: SpeciesHandler.h:37
Definition: Vector.h:51
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:73
const Mdouble pi
Definition: ExtendedMath.h:45
const std::complex< Mdouble > i
Definition: ExtendedMath.h:51