SlidingFrictionUnitTest.cpp File Reference

Classes

class  SlidingFrictionUnitTest
 

Functions

int main (int argc UNUSED, char *argv[] UNUSED)
 

Function Documentation

◆ main()

int main ( int argc  UNUSED,
char *argv[]  UNUSED 
)
24 {
25  //Unit diameter
26  Mdouble radius = 0.5;
27  //Equilibrium overlap
28  Mdouble overlap = 0.1*radius;
29  //Collision time (determines time step)
30  Mdouble tc = 50e-3;
31  //rotation velocity
32  Mdouble velocity = 1.0;
33 
35  sf.setGravity({0,0,0});
36  sf.setTimeStep(0.02*tc);
37  sf.setName("SlidingFrictionUnitTest");
38  sf.setMin(-radius*Vec3D(2,2,2));
39  sf.setMax( radius*Vec3D(2,2,2));
40  sf.setDimension(3);
41  sf.setTimeMax(2.0);
42  sf.eneFile.setSaveCount(1);
43 
44  //Add species
46  //Set unit density
47  s->setDensity(1.0);
48  //Make particles relatively soft and dissipative
49  Mdouble mass = s->getMassFromRadius(radius);
50  s->setCollisionTimeAndNormalAndTangentialRestitutionCoefficient(tc,0.5,1.0,mass);
51  //Set a high friction, so sliding movement is mostly elastic
52  s->setSlidingFrictionCoefficient(1e20);
53  //10% overlap in equilibrium position
54  s->setBondForceMax(overlap*s->getStiffness());
55  // check that stiffness is not too small
56  logger(INFO,"Stiffness k=%",s->getStiffness());
57 
58  //Add particles
60  p.setSpecies(s);
61  p.setRadius(radius);
62  p.setPosition({ radius-0.5*overlap,0,0});
63  p.setVelocity(velocity*Vec3D(0,0,1));
65  p.setPosition({-radius+0.5*overlap,0,0});
66  p.setVelocity(velocity*Vec3D(0,0,-1));
68 
69  //Add bonded interaction
71  i->bond();
72  i->setSlidingSpring({0,0,overlap});
73  sf.solve();
74 
75  helpers::writeToFile("SlidingFrictionUnitTest.gnu","set size ratio -1; p 'SlidingFrictionUnitTest.ene' u 2:4 w lp");
76 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Species< LinearViscoelasticNormalSpecies, SlidingFrictionSpecies, BondedSpecies > LinearViscoelasticSlidingFrictionBondedSpecies
Definition: LinearViscoelasticSlidingFrictionBondedSpecies.h:13
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
Vector3f p0
Definition: MatrixBase_all.cpp:2
Vector3f p1
Definition: MatrixBase_all.cpp:2
float * p
Definition: Tutorial_Map_using.cpp:9
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:360
File eneFile
An instance of class File to handle in- and output into a .ene file.
Definition: DPMBase.h:1494
SpeciesHandler speciesHandler
A handler to that stores the species type i.e. LinearViscoelasticSpecies, etc.
Definition: DPMBase.h:1433
void setName(const std::string &name)
Allows to set the name of all the files (ene, data, fstat, restart, stat)
Definition: DPMBase.cc:400
void setDimension(unsigned int newDim)
Sets both the system dimensions and the particle dimensionality.
Definition: DPMBase.cc:1394
void setMin(const Vec3D &min)
Sets the minimum coordinates of the problem domain.
Definition: DPMBase.cc:1109
InteractionHandler interactionHandler
An object of the class InteractionHandler.
Definition: DPMBase.h:1473
ParticleHandler particleHandler
An object of the class ParticleHandler, contains the pointers to all the particles created.
Definition: DPMBase.h:1443
void setTimeStep(Mdouble newDt)
Sets a new value for the simulation time step.
Definition: DPMBase.cc:1225
void setTimeMax(Mdouble newTMax)
Sets a new value for the maximum simulation duration.
Definition: DPMBase.cc:864
void solve()
The work horse of the code.
Definition: DPMBase.cc:4334
void setMax(const Vec3D &max)
Sets the maximum coordinates of the problem domain.
Definition: DPMBase.cc:1073
void setGravity(Vec3D newGravity)
Sets a new value for the gravitational acceleration.
Definition: DPMBase.cc:1374
void setSaveCount(unsigned int saveCount)
Sets File::saveCount_.
Definition: File.cc:251
BaseInteraction * getInteraction(BaseInteractable *P, BaseInteractable *I, unsigned timeStamp)
Returns the Interaction between the BaseInteractable's P and I.
Definition: InteractionHandler.cc:126
Contains information about the contact between two interactables, BaseInteraction::P_ and BaseInterac...
Definition: Interaction.h:95
Definition: SlidingFrictionUnitTest.cpp:8
A spherical particle is the most simple particle used in MercuryDPM.
Definition: SphericalParticle.h:16
Definition: Kernel/Math/Vector.h:30
RealScalar s
Definition: level1_cplx_impl.h:130
#define INFO(i)
Definition: mumps_solver.h:54
double velocity(const double &t)
Angular velocity as function of time t.
Definition: jeffery_orbit.cc:107
radius
Definition: UniformPSDSelfTest.py:15
bool writeToFile(const std::string &filename, const std::string &filecontent)
Writes a string to a file.
Definition: FileIOHelpers.cc:29

References BaseHandler< T >::copyAndAddObject(), e(), DPMBase::eneFile, InteractionHandler::getInteraction(), i, INFO, DPMBase::interactionHandler, logger, p, p0, p1, DPMBase::particleHandler, UniformPSDSelfTest::radius, s, DPMBase::setDimension(), DPMBase::setGravity(), DPMBase::setMax(), DPMBase::setMin(), DPMBase::setName(), File::setSaveCount(), DPMBase::setTimeMax(), DPMBase::setTimeStep(), DPMBase::solve(), DPMBase::speciesHandler, Jeffery_Solution::velocity(), and helpers::writeToFile().