MercuryDPM  0.11
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PlasticForceUnitTest.cpp File Reference
#include "DPMBase.h"
#include "Particles/BaseParticle.h"
#include <iostream>
#include <vector>
#include <Species/LinearPlasticViscoelasticSpecies.h>
#include <Logger.h>

Go to the source code of this file.

Classes

class  PlasticForceUnitTest
 This code tests our plastic force model, as published in Luding 2008. More...
 

Functions

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

Function Documentation

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

Definition at line 82 of file PlasticForceUnitTest.cpp.

References BaseHandler< T >::begin(), FATAL, PlasticForceUnitTest::get_chi(), INFO, logger, DPMBase::particleHandler, PlasticForceUnitTest::set_chi(), Files::setName(), DPMBase::setParticleDimensions(), DPMBase::setSystemDimensions(), DPMBase::solve(), PlasticForceUnitTest::species, and DPMBase::writeRestartFile().

83 {
84  PlasticForceUnitTest PlasticForceUnitTestProblem;
85  double k1=100.0;
86  PlasticForceUnitTestProblem.species->setPlasticParameters(k1, 5.0*k1, k1, 0.05);
87  PlasticForceUnitTestProblem.species->setDissipation(0);
88  PlasticForceUnitTestProblem.setParticleDimensions(3);
89  PlasticForceUnitTestProblem.setSystemDimensions(3);
90 
91  logger(INFO,"Testing particle particles collision for elastic plastic forces. \n"
92  "This will be done for serveral values of scaled relative velocity chi");
93 
94  //PlasticForceUnitTestProblem.restartFile.getFstream().precision(20);
95 
96  //Set up constant data that will be used
97  const std::vector<double> chi = {0.34, 0.69, 1.1, 1.37};
98  const std::vector<Vec3D> leftFinalVecloity = {
99  Vec3D(-0.032721738352012,0.0,0.0),
100  Vec3D(-0.0138683231953154,0.0,0.0),
101  Vec3D(-0.0204655358555405,0.0,0.0),
102  Vec3D(-0.163049415300304,0.0,0.0)};
103  const std::vector<Vec3D> leftFinalPosition = {
104  Vec3D(0.995546292935715,1.0,1.0),
105  Vec3D(1.00695193269955,1.0,1.0),
106  Vec3D(1.00840467123501,1.0,1.0),
107  Vec3D(0.969386085767181,1.0,1.0)};
108 
109  //Loop over all test cases
110  for (int i=0; i<4; i++)
111  {
112  logger(INFO, "Running for chi=%",chi[i]);
113  PlasticForceUnitTestProblem.set_chi(chi[i]);
114  std::stringstream ss("");
115  ss << "PlasticForceUnitTest" << PlasticForceUnitTestProblem.get_chi();
116  PlasticForceUnitTestProblem.setName(ss.str().c_str());
117  PlasticForceUnitTestProblem.solve();
118  PlasticForceUnitTestProblem.writeRestartFile();
119 
120  //Now check the particles are in the right place for each of the 4 cases
121  auto pIt = PlasticForceUnitTestProblem.particleHandler.begin();
122  if (!(*pIt)->getPosition().isEqualTo(leftFinalPosition[i], 1e-10))
123  logger(FATAL,"Left particle is in the wrong position. It is at % and should be %",(*pIt)->getPosition(),leftFinalPosition[i]);
124  if (!(*pIt)->getVelocity().isEqualTo(leftFinalVecloity[i] , 1e-10))
125  logger(FATAL,"Left particle has the wrong velocity. It is at % and should be %",(*pIt)->getVelocity(),leftFinalVecloity[i]);
126  }
127 
128  //to display use
129  //gnuplot> plot 'plastic/collinear1.1.fstat' u 7:9 w lp
130 }
void solve()
The work horse of the code.
Definition: DPMBase.cc:1895
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
LL< Log::INFO > INFO
Info log level.
Definition: Logger.cc:28
void setParticleDimensions(unsigned int particleDimensions)
Allows the dimension of the particle (f.e. for mass) to be changed. e.g. discs or spheres...
Definition: DPMBase.cc:474
void setSystemDimensions(unsigned int newDim)
Allows for the dimension of the simulation to be changed.
Definition: DPMBase.cc:453
const std::vector< T * >::const_iterator begin() const
Gets the begin of the const_iterator over all Object in this BaseHandler.
Definition: BaseHandler.h:482
void setName(const std::string &name)
Allows to set the name of all the files (ene, data, fstat, restart, stat)
Definition: Files.cc:149
ParticleHandler particleHandler
An object of the class ParticleHandler, contains the pointers to all the particles created...
Definition: DPMBase.h:878
LL< Log::FATAL > FATAL
Fatal log level.
Definition: Logger.cc:25
This code tests our plastic force model, as published in Luding 2008.
virtual void writeRestartFile()
Stores all the particle data for current save time step. Calls the write function.
Definition: DPMBase.cc:1365
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
LinearPlasticViscoelasticSpecies * species