HertzianSinterForceUnitTest.cpp File Reference
#include "DPMBase.h"
#include <Species/HertzianSinterSpecies.h>
#include <Logger.h>

Classes

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

Functions

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

Function Documentation

◆ main()

int main ( int argc  UNUSED,
char *argv[]  UNUSED 
)
96 {
98  double k1=100.0;
99  sf.species->setPlasticParameters(k1, 10.0*k1, k1, 1.0);
100  sf.species->setDissipation(0);
101  sf.setParticleDimensions(3);
102  sf.setSystemDimensions(3);
103 
104  logger(INFO,"Testing particle particles collision for elastic plastic forces. \n"
105  "This will be done for several values of scaled relative velocity chi");
106 
107  //sf.restartFile.getFstream().precision(20);
108 
109  //Set up constant data that will be used
110  const std::vector<double> chi = {0.34, 0.69, 1.1, 1.37};
111  const std::vector<Vec3D> leftFinalVecloity = {
112  Vec3D(-0.032721738352012,0.0,0.0),
113  Vec3D(-0.0138683231953154,0.0,0.0),
114  Vec3D(-0.0204655358555405,0.0,0.0),
115  Vec3D(-0.163049415300304,0.0,0.0)};
116  const std::vector<Vec3D> leftFinalPosition = {
117  Vec3D(0.995546292935715,1.0,1.0),
118  Vec3D(1.00695193269955,1.0,1.0),
119  Vec3D(1.00840467123501,1.0,1.0),
120  Vec3D(0.969386085767181,1.0,1.0)};
121 
122  //Loop over all test cases
123  for (int i=0; i<4; i++)
124  {
125  logger(INFO, "Running for chi=%", chi[i]);
126  sf.set_chi(chi[i]);
127  std::stringstream ss("");
128  ss << "HertzianSinterForceUnitTest" << sf.get_chi();
129  sf.setName(ss.str().c_str());
130  sf.solve();
131  sf.writeRestartFile();
132 
133 // //Now check the particles are in the right place for each of the 4 cases
134 // auto pIt = sf.particleHandler.begin();
135 // if (!(*pIt)->getPosition().isEqualTo(leftFinalPosition[i], 1e-10))
136 // logger(FATAL,"Left particle is in the wrong position. It is at % and should be %",(*pIt)->getPosition(),leftFinalPosition[i]);
137 // if (!(*pIt)->getVelocity().isEqualTo(leftFinalVecloity[i] , 1e-10))
138 // logger(FATAL,"Left particle has the wrong velocity. It is at % and should be %",(*pIt)->getVelocity(),leftFinalVecloity[i]);
139  }
140 
141  //A longer simulation, with sintering activated
143  lsf.species->setPlasticParameters(k1, 10.0*k1, k1, 1.0);
144  lsf.species->setSinterRate(1e-3);
145  lsf.species->setDissipation(2e-1);
146  lsf.setParticleDimensions(3);
147  lsf.setSystemDimensions(3);
148  logger(INFO, "Running longer");
149  lsf.set_chi(0.47);
150  lsf.setName("LongHertzianSinterForceUnitTest");
151  lsf.solve();
152  lsf.writeRestartFile();
153 
154 
155 
156  //(1-((k1+kc)/k2)^1.5) / (1-(k1/k2)^1.5)
157 
158  logger(INFO,"Execute 'gnuplot HertzianSinterForceUnitTest.gnu' to view "
159  "output");
160  helpers::writeToFile("HertzianSinterForceUnitTest.gnu",
161  "set xlabel 'displacement'\n"
162  "set ylabel 'force'\n"
163  "plot 'HertzianSinterForceUnitTest1.1.fstat' u 7:9, 4./3.*100*x**1.5, 4./3.*1000*(x-0.1)**1.5-4./3.*100*x**1.5, -4./3.*100*x**1.5/(x<0.1)\n"
164  );
165 
166  logger(INFO,"Execute 'gnuplot LongHertzianSinterForceUnitTest.gnu' to view "
167  "output");
168  helpers::writeToFile("LongHertzianSinterForceUnitTest.gnu",
169  "set xlabel 'time'\n"
170  "set ylabel 'displacement'\n"
171  //"plot 'LongHertzianSinterForceUnitTest1.1.fstat' u 7:9 w lp\n"
172  "plot 'LongHertzianSinterForceUnitTest.fstat' u 1:7, sqrt(0.001*(x+120))\n"
173  );
174 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
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 setParticleDimensions(unsigned int particleDimensions)
Sets the particle dimensionality.
Definition: DPMBase.cc:1439
virtual void writeRestartFile()
Stores all the particle data for current save time step to a "restart" file, which is a file simply i...
Definition: DPMBase.cc:2979
void setSystemDimensions(unsigned int newDim)
Sets the system dimensionality.
Definition: DPMBase.cc:1408
void solve()
The work horse of the code.
Definition: DPMBase.cc:4334
This code tests our plastic force model, as published in Luding 2008.
Definition: HertzianSinterForceUnitTest.cpp:12
HertzianSinterSpecies * species
Definition: HertzianSinterForceUnitTest.cpp:68
double get_chi()
Definition: HertzianSinterForceUnitTest.cpp:65
void set_chi(double new_)
Definition: HertzianSinterForceUnitTest.cpp:64
Definition: HertzianSinterForceUnitTest.cpp:72
Definition: Kernel/Math/Vector.h:30
#define INFO(i)
Definition: mumps_solver.h:54
bool writeToFile(const std::string &filename, const std::string &filecontent)
Writes a string to a file.
Definition: FileIOHelpers.cc:29

References e(), HertzianSinterForceUnitTest::get_chi(), i, INFO, logger, HertzianSinterForceUnitTest::set_chi(), DPMBase::setName(), DPMBase::setParticleDimensions(), DPMBase::setSystemDimensions(), DPMBase::solve(), HertzianSinterForceUnitTest::species, DPMBase::writeRestartFile(), and helpers::writeToFile().