Siegen.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #include "DPMBase.h"
7 #include "Walls/InfiniteWall.h"
8 #include <iostream>
9 #include <iomanip>
11 
12 class Siegen : public DPMBase{
13 public:
14 
15  //We define the particle properties for the siegen experiments and insert one particle
16  Siegen(double NormalForce_=1000e-6) : DPMBase() {
17  // User input: problem name
18  setName("Siegen");
19  NormalForce = NormalForce_;
20 
21  // User input: material parameters
22  // radius of the particle
23  Mdouble RadiusPrime = 10e-6; //m
24  //calculate rel overlap
25  Mdouble E1 = 179e9;
26  Mdouble E2 = 71e9;
27  Mdouble nu1 = 0.17;
28  Mdouble nu2 = 0.17;
29  Mdouble Estar = 1 / ((1 - nu1 * nu1) / E1 + (1 - nu2 * nu2) / E2);
30 
31  Mdouble G1 = E1 / 2 / (1 + nu1);
32  Mdouble G2 = E2 / 2 / (1 + nu2);
33  Mdouble Gstar = 1 / ((2 - nu1) / G1 + (2 - nu2) / G2);
34  //Mdouble Estar = 52.3488827e9;
35  //Mdouble Poisson = 0.17;
36  //Mdouble Gstar = 11.871e9;
37  logger(INFO, "Estar=%\n"
38  "Gstar=%", Estar, Gstar);
39  Gstar = 1.2138e9;
40  // relative overlap for given normal force
41  Mdouble Overlap = 0;
42  for (int i = 0; i < 10; i++)
43  {
44  Overlap = pow(3. / 4. * NormalForce / Estar / sqrt(RadiusPrime + Overlap), 2. / 3.);
45  }
46  relOverlap = Overlap / RadiusPrime; //wrt RadiusPrime
47  relOverlap = 0.001; //wrt RadiusPrime
48  Mdouble Radius = RadiusPrime * (1 + relOverlap);
49  logger(INFO, "relOverlap=%\n"
50  "overlap=%\n"
51  "contact radius=%\n"
52  "rel contact radius=%",
53  relOverlap, relOverlap * RadiusPrime, sqrt(relOverlap) * RadiusPrime, sqrt(relOverlap));
54  //density of SiO2
55 
57  species->setDensity(2648 / mathsFunc::cubic(1 + relOverlap)); //kg/m^3
58  //(dynamic) sliding friction
59  //setSlidingFrictionCoefficient(.23);
61  //species->setSlidingFrictionCoefficientStatic(.7); //rough
62  //rolling friction
64  //torsion friction
66  //restitution coefficient
67  Mdouble Restitution = 0.99;
68 
69  //insert particle and get mass
70 
74  p0->setRadius(Radius);
75  Mdouble Mass = p0->getMass();
76 
77  //define material properties
78  //set normal force
79  //setStiffnessAndRestitutionCoefficient(NormalForce/(relOverlap*RadiusPrime), Restitution, Mass);
80  species->setStiffnessAndRestitutionCoefficient(NormalForce / relOverlap / RadiusPrime, Restitution, Mass);
81  //set dt accordingly
82  Mdouble tc = species->getCollisionTime(Mass);
83  //setTimeStep(tc/50.);
84  setTimeStep(7.399163453192103488e-08);
85  logger(INFO, "Mass=%\n"
86  "tc=%19\n"
87  "dt=%\n"
88  "tmax=%", Mass, tc, getTimeStep(), getTimeMax());
89  //set elastic tangential sliding force
90  species->setCollisionTimeAndNormalAndTangentialRestitutionCoefficient(tc, Restitution, Restitution, Mass);
91  //set elastic tangential rolling/torsion force
92  Mdouble factor = Gstar / Estar; //0.4 is for equal oscillation frequency
93  factor = 0.4; //0.4 is for equal oscillation frequency
96 
97 // if (false) { //Hertz-Mindlin
98 // species->setStiffness(Estar);
99 // species->setSlidingStiffness(Gstar);
100 // Mdouble disp=0.0062; //en=0.99
101 // //Mdouble disp=0.0382; //en=0.88
102 // species->setDissipation(disp);
103 // species->setSlidingDissipation(disp);
104 // std::cout << "E*=" << species->getStiffness() << ", G*/E*=" << species->getSlidingStiffness()/species->getStiffness() << std::endl;
105 // //setRollingFrictionCoefficient(0);
106 // //setTorsionFrictionCoefficient(0);
107 // //setSlidingFrictionCoefficient(0);
108 // ///\todo TWnow reimplement HERTZ_MINDLIN_DERESIEWICZ
109 // //species->setForceType(ForceType::HERTZ_MINDLIN_DERESIEWICZ);
110 // }
111 
115 
116  //set geometry
117  setGravity(Vec3D(0,0,0));
118  setXMax(Radius);
119  setXMin(-getXMax());
120  setYMax(2.*Radius);
121  setYMin(0);
122  setZMax(Radius);
123  setZMin(-getZMax());
124  }
125 
126  void setupInitialConditions() override {}
127 
135 };
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Species< LinearViscoelasticNormalSpecies, FrictionSpecies > LinearViscoelasticFrictionSpecies
Definition: LinearViscoelasticFrictionSpecies.h:12
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
@ INFO
Vector3f p0
Definition: MatrixBase_all.cpp:2
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
Definition: BaseParticle.h:33
The DPMBase header includes quite a few header files, defining all the handlers, which are essential....
Definition: DPMBase.h:56
Mdouble getXMax() const
If the length of the problem domain in x-direction is XMax - XMin, then getXMax() returns XMax.
Definition: DPMBase.h:610
SpeciesHandler speciesHandler
A handler to that stores the species type i.e. LinearViscoelasticSpecies, etc.
Definition: DPMBase.h:1433
void setYMin(Mdouble newYMin)
Sets the value of YMin, the lower bound of the problem domain in the y-direction.
Definition: DPMBase.cc:1025
void setName(const std::string &name)
Allows to set the name of all the files (ene, data, fstat, restart, stat)
Definition: DPMBase.cc:400
Mdouble getTimeStep() const
Returns the simulation time step.
Definition: DPMBase.cc:1241
void setParticleDimensions(unsigned int particleDimensions)
Sets the particle dimensionality.
Definition: DPMBase.cc:1439
void setYMax(Mdouble newYMax)
Sets the value of YMax, the upper bound of the problem domain in the y-direction.
Definition: DPMBase.cc:1182
void setZMin(Mdouble newZMin)
Sets the value of ZMin, the lower bound of the problem domain in the z-direction.
Definition: DPMBase.cc:1049
void setXMax(Mdouble newXMax)
Sets the value of XMax, the upper bound of the problem domain in the x-direction.
Definition: DPMBase.cc:1156
ParticleHandler particleHandler
An object of the class ParticleHandler, contains the pointers to all the particles created.
Definition: DPMBase.h:1443
void setZMax(Mdouble newZMax)
Sets the value of ZMax, the upper bound of the problem domain in the z-direction.
Definition: DPMBase.cc:1208
void setTimeStep(Mdouble newDt)
Sets a new value for the simulation time step.
Definition: DPMBase.cc:1225
void setSystemDimensions(unsigned int newDim)
Sets the system dimensionality.
Definition: DPMBase.cc:1408
void setXMin(Mdouble newXMin)
Sets the value of XMin, the lower bound of the problem domain in the x-direction.
Definition: DPMBase.cc:1001
Mdouble getTimeMax() const
Returns the maximum simulation duration.
Definition: DPMBase.cc:879
void setGravity(Vec3D newGravity)
Sets a new value for the gravitational acceleration.
Definition: DPMBase.cc:1374
Mdouble getZMax() const
If the length of the problem domain in z-direction is ZMax - ZMin, then getZMax() returns ZMax.
Definition: DPMBase.h:634
void setRollingFrictionCoefficient(Mdouble new_mu)
Allows the (dynamic) Coulomb friction coefficient to be changed; also sets mu_s by default.
Definition: FrictionSpecies.cc:165
void setTorsionStiffness(Mdouble new_kt)
Allows the torsion stiffness to be changed.
Definition: FrictionSpecies.cc:201
void setRollingDissipation(Mdouble new_dispt)
Allows the tangential viscosity to be changed.
Definition: FrictionSpecies.cc:147
void setTorsionDissipation(Mdouble new_dispt)
Allows the torsion viscosity to be changed.
Definition: FrictionSpecies.cc:220
void setTorsionFrictionCoefficient(Mdouble new_mu)
Allows the (dynamic) Coulomb torsion friction coefficient to be changed; also sets mu_s by default.
Definition: FrictionSpecies.cc:238
void setRollingStiffness(Mdouble new_kt)
Allows the spring constant to be changed.
Definition: FrictionSpecies.cc:128
void setStiffnessAndRestitutionCoefficient(Mdouble k_, Mdouble eps, Mdouble mass)
Sets k, disp such that it matches a given tc and eps for a collision of two copies of P.
Definition: LinearViscoelasticNormalSpecies.cc:165
Mdouble getStiffness() const
Allows the spring constant to be accessed.
Definition: LinearViscoelasticNormalSpecies.cc:83
Mdouble getCollisionTime(Mdouble mass) const
Calculates collision time for two copies of a particle of given disp, k, mass.
Definition: LinearViscoelasticNormalSpecies.cc:116
Mdouble getDissipation() const
Allows the normal dissipation to be accessed.
Definition: LinearViscoelasticNormalSpecies.cc:109
void setDensity(Mdouble density)
Definition: ParticleSpecies.cc:88
Definition: Siegen.h:12
Mdouble NormalForce
Definition: Siegen.h:129
LinearViscoelasticFrictionSpecies * species
Definition: Siegen.h:134
Mdouble relOverlap
Definition: Siegen.h:128
Mdouble LoopTime
Definition: Siegen.h:133
Siegen(double NormalForce_=1000e-6)
Definition: Siegen.h:16
Mdouble RelLoopSize
Definition: Siegen.h:130
void setupInitialConditions() override
This function allows to set the initial conditions for our problem to be solved, by default particle ...
Definition: Siegen.h:126
Mdouble Angle
Definition: Siegen.h:131
Mdouble TangentialVelocity
Definition: Siegen.h:132
void setSlidingDissipation(Mdouble new_dispt)
Allows the tangential viscosity to be changed.
Definition: SlidingFrictionSpecies.cc:102
void setSlidingFrictionCoefficient(Mdouble new_mu)
Allows the (dynamic) Coulomb friction coefficient to be changed; also sets mu_s by default.
Definition: SlidingFrictionSpecies.cc:120
void setCollisionTimeAndNormalAndTangentialRestitutionCoefficient(Mdouble tc, Mdouble eps, Mdouble beta, Mdouble mass)
Sets k, disp, kt, dispt such that it matches a given tc and eps for a collision of two particles of m...
Definition: SlidingFrictionSpecies.cc:186
A spherical particle is the most simple particle used in MercuryDPM.
Definition: SphericalParticle.h:16
Definition: Kernel/Math/Vector.h:30
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
double Radius
Radius of the pipe.
Definition: pipe.cc:55
T cubic(const T val)
calculates the cube of a number
Definition: ExtendedMath.h:95