PeriodicChuteUnitTestMPI.cpp File Reference
#include "Mercury3D.h"
#include "Walls/InfiniteWall.h"
#include <iostream>
#include "Species/LinearViscoelasticFrictionSpecies.h"
#include <cstdlib>
#include "Boundaries/PeriodicBoundary.h"
#include <chrono>

Classes

class  MpiPeriodicBoundaryUnitTest
 

Functions

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

Function Documentation

◆ main()

int main ( int argc  ,
char argv[] 
)
73 {
74 
75  // Start measuring elapsed time
76  std::chrono::time_point<std::chrono::system_clock> startClock, endClock;
77  startClock = std::chrono::system_clock::now();
78 
79  //Create the problem
81  problem.setName("PeriodicChuteUnitTestMPI");
82 
83  //Create a species
84  LinearViscoelasticFrictionSpecies* species = problem.speciesHandler.copyAndAddObject(LinearViscoelasticFrictionSpecies());
85  species->setDensity(1.0);
86 
87  //Set domain accordingly (domain boundaries are not walls!)
88  problem.setXMin(0.0);
89  problem.setXMax(80.0);
90  problem.setYMin(0.0);
91  problem.setYMax(80.0);
92  problem.setZMin(0.0);
93  problem.setZMax(40.0);
94 
95  //specify particle properties
96  species->setDensity(6.0/constants::pi);
97 
98  //specify body forces
99  double angle = 27.0;
100  double g = 1.0;
101  double val = g*std::sin(angle/360.0*2.0*constants::pi);
102  problem.setGravity(Vec3D(val, -val, -g*std::cos(angle/360.0*2.0*constants::pi)));
103 
104  //Set the number of domains for parallel decomposition
105  problem.setNumberOfDomains({2,2,1});
106 
107  //specify contact properties
108  //normal forces
109  species->setStiffness(1e5);
110  species->setDissipation(0.1);
111  //tangential (sliding) forces
112  species->setSlidingFrictionCoefficient(0.5);
113  species->setSlidingStiffness(1.2e4);
114  species->setSlidingDissipation(0.16);
115  //tangential (rolling) torques
116  species->setRollingFrictionCoefficient(0.2);
117  species->setRollingStiffness(1.2e4);
118  species->setRollingDissipation(6.3e-2);
119  //normal (torsion/spin) torques
120  species->setTorsionFrictionCoefficient(0.1);
121  species->setTorsionStiffness(1.2e4);
122  species->setSlidingDissipation(6.3e-2);
123 
124  //set other simulation parameters
125  Mdouble MinParticleMass = species->getDensity()*4.0 / 3.0 * constants::pi ;
126  Mdouble tc = species->getCollisionTime(MinParticleMass);
127  problem.setTimeStep(tc / 50.0);
128  //problem.setTimeMax(100.0);//run until 3.0 to see full simulation
129  problem.setTimeMax(40.0);//run until 3.0 to see full simulation
130  problem.setSaveCount(200); //used to be 500
131 
132  //Set output to paraview
133  problem.setParticlesWriteVTK(true);
134 
135  problem.solve(argc, argv);
136 
137  // Measure elapsed time
138  endClock = std::chrono::system_clock::now();
139  std::chrono::duration<double> elapsed_seconds = endClock - startClock;
140  logger(INFO, "Elapsed time for solving the PDE: % s", elapsed_seconds.count());
141 
142 
143  return 0;
144 }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
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.
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 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
Mdouble getCollisionTime(Mdouble mass) const
Calculates collision time for two copies of a particle of given disp, k, mass.
Definition: LinearViscoelasticNormalSpecies.cc:116
void setDissipation(Mdouble dissipation)
Allows the normal dissipation to be changed.
Definition: LinearViscoelasticNormalSpecies.cc:96
void setStiffness(Mdouble new_k)
Allows the spring constant to be changed.
Definition: LinearViscoelasticNormalSpecies.cc:72
Definition: PeriodicBoundary1MPI2Test.cpp:12
void setDensity(Mdouble density)
Definition: ParticleSpecies.cc:88
Mdouble getDensity() const
Allows density_ to be accessed.
Definition: ParticleSpecies.cc:98
void setSlidingStiffness(Mdouble new_kt)
Allows the spring constant to be changed.
Definition: SlidingFrictionSpecies.cc:83
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
Definition: Kernel/Math/Vector.h:30
#define INFO(i)
Definition: mumps_solver.h:54
double angle(const double &t)
Angular position as a function of time t.
Definition: jeffery_orbit.cc:98
val
Definition: calibrate.py:119
const Mdouble pi
Definition: ExtendedMath.h:23
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References Jeffery_Solution::angle(), cos(), LinearViscoelasticNormalSpecies::getCollisionTime(), ParticleSpecies::getDensity(), INFO, logger, constants::pi, problem, ParticleSpecies::setDensity(), LinearViscoelasticNormalSpecies::setDissipation(), FrictionSpecies::setRollingDissipation(), FrictionSpecies::setRollingFrictionCoefficient(), FrictionSpecies::setRollingStiffness(), SlidingFrictionSpecies::setSlidingDissipation(), SlidingFrictionSpecies::setSlidingFrictionCoefficient(), SlidingFrictionSpecies::setSlidingStiffness(), LinearViscoelasticNormalSpecies::setStiffness(), FrictionSpecies::setTorsionFrictionCoefficient(), FrictionSpecies::setTorsionStiffness(), sin(), and calibrate::val.