ForceSelfTest.cpp File Reference

Classes

class  ParticleParticleCollision
 
class  WallParticleCollision
 

Functions

void particleParticleTest ()
 
void wallParticleTest ()
 
int main ()
 

Function Documentation

◆ main()

int main ( )
330 {
331 
332  logger(INFO, "\nnote: analytic values are only asymptotically correct as delta->0");
335  return 0;
336 }
void wallParticleTest()
Definition: ForceSelfTest.cpp:247
void particleParticleTest()
Definition: ForceSelfTest.cpp:165
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
#define INFO(i)
Definition: mumps_solver.h:54

References INFO, logger, particleParticleTest(), and wallParticleTest().

◆ particleParticleTest()

void particleParticleTest ( )
166 {
167  logger(INFO, "\ntesting particle-particle collisions ...\n\n", Flusher::NO_FLUSH);
168 
170 
171  problem.random.setRandomSeed(5);
172 
173  problem.setupInitialConditions();
174  Mdouble normalRelativeVelocity, tangentialRelativeVelocity, analyticTangentialRelativeVelocity;
175 
176  logger(INFO, "5: without tangential forces");
177  problem.setName("ForceSelfTest5");
178  problem.solve();
179  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
180  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
181  problem.initialTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
182  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
183  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
184 
185  //problem.setAppend_to_files(true);
186 
187  logger(INFO, "6: with Coulomb friction");
188  Mdouble mu = problem.random.getRandomNumber(0.0, 1.0);
189  problem.species->setSlidingFrictionCoefficient(mu);
190  problem.species->setSlidingDissipation(1e20);
191  //problem.species->setSlidingStiffness(0.0);
192  problem.setName("ForceSelfTest6");
193  problem.solve();
194  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
195  analyticTangentialRelativeVelocity = std::max(0.0, problem.initialTangentialRelativeVelocity +
196  mu * 3.5 * (1 + problem.en) *
197  problem.initialNormalRelativeVelocity);
198  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
199  analyticTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
200  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
201  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
202 
203  logger(INFO, "7: with Coulomb friction, spring activated");
204  problem.species->setSlidingStiffness(1.0);
205  //problem.species->setSlidingDissipation(1);
206  problem.setName("ForceSelfTest7");
207  problem.solve();
208  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
209  analyticTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
210  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
211  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
212 
213  logger(INFO, "8: with tangential viscous force");
214  Mdouble et = problem.random.getRandomNumber(-1.0, 0.0);
215  problem.species->setSlidingFrictionCoefficient(1e20);
216  problem.species->setSlidingDissipation(-log(-et) / (2.0 * problem.tc) / 3.5 * 2.0 * problem.m12);
217  problem.species->setSlidingStiffness(0.0);
218  problem.setName("ForceSelfTest8");
219  problem.solve();
220  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
221  analyticTangentialRelativeVelocity = problem.initialTangentialRelativeVelocity *
222  exp(-2.0 * 3.5 * problem.species->getSlidingDissipation() /
223  (2.0 * problem.m12) * problem.getCollisionTime(2.0 * problem.m12));
224  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
225  analyticTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
226  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
227  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
228 
229  logger(INFO, "9: with tangential elastic force");
230  Mdouble et2 = problem.random.getRandomNumber(0.0, 1.0);
231  problem.species->setSlidingFrictionCoefficient(1e20);
232  problem.species->setSlidingDissipation(0.0);
233  problem.species->setSlidingStiffness(
234  problem.species->getStiffness() / 3.5 * mathsFunc::square(acos(-et2) / constants::pi));
235  problem.setName("ForceSelfTest9");
236  problem.solve();
237  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
238  analyticTangentialRelativeVelocity = problem.initialTangentialRelativeVelocity *
239  cos(sqrt(problem.species->getSlidingStiffness() / problem.m12 * 3.5) *
240  problem.getCollisionTime(2.0 * problem.m12));
241  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
242  analyticTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
243  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
244  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
245 }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar acos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:138
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Definition: ForceSelfTest.cpp:12
#define max(a, b)
Definition: datatypes.h:23
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 exp(const bfloat16 &a)
Definition: BFloat16.h:615
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log(const bfloat16 &a)
Definition: BFloat16.h:618
std::complex< double > mu
Definition: time_harmonic_fourier_decomposed_linear_elasticity/cylinder/cylinder.cc:52
const Mdouble pi
Definition: ExtendedMath.h:23
T square(const T val)
squares a number
Definition: ExtendedMath.h:86
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References acos(), cos(), Eigen::bfloat16_impl::exp(), INFO, Eigen::bfloat16_impl::log(), logger, max, Global_Parameters::mu, NO_FLUSH, constants::pi, problem, sqrt(), and mathsFunc::square().

Referenced by main().

◆ wallParticleTest()

void wallParticleTest ( )
248 {
249  logger(INFO, "\ntesting wall-particle collisions ...\n");
250 
251  srand(5);
252 
254  problem.setupInitialConditions();
255 
256  Mdouble normalRelativeVelocity, tangentialRelativeVelocity, analyticTangentialRelativeVelocity;
257 
258  //problem.setAppend_to_files(true);
259 
260  logger(INFO, "0: without tangential forces");
261  problem.setName("ForceSelfTest0");
262  problem.solve();
263 
264  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
265  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
266  problem.initialTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
267  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
268  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
269 
270  logger(INFO, "1: with Coulomb friction");
271  Mdouble mu = problem.random.getRandomNumber(0.0, 1.0);
272  problem.species->setSlidingFrictionCoefficient(mu);
273  problem.species->setSlidingDissipation(1e20);
274  problem.species->setSlidingStiffness(0.0);
275  problem.setName("ForceSelfTest1");
276  problem.solve();
277  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
278  analyticTangentialRelativeVelocity = std::max(0.0, problem.initialTangentialRelativeVelocity +
279  mu * 3.5 * (1 + problem.en) *
280  problem.initialNormalRelativeVelocity);
281  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
282  analyticTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
283  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
284  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
285 
286  logger(INFO, "2: with Coulomb friction, spring activated");
287  problem.species->setSlidingStiffness(1.0);
288  problem.setName("ForceSelfTest2");
289  problem.solve();
290  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
291  problem.initialTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
292  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
293  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
294 
295  logger(INFO, "3: with tangential viscous force");
296  Mdouble et = problem.random.getRandomNumber(-1.0, 0.0);
297  problem.species->setSlidingFrictionCoefficient(1e20);
298  problem.species->setSlidingDissipation(-log(-et) / (2.0 * problem.tc) / 3.5 * 2.0 * problem.m12);
299  problem.species->setSlidingStiffness(0.0);
300  problem.setName("ForceSelfTest3");
301  problem.solve();
302  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
303  analyticTangentialRelativeVelocity = problem.initialTangentialRelativeVelocity *
304  exp(-2.0 * 3.5 * problem.species->getSlidingDissipation() /
305  (2.0 * problem.m12) * problem.getCollisionTime(2.0 * problem.m12));
306  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
307  problem.initialTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
308  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
309  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
310 
311  logger(INFO, "4: with tangential elastic force");
312  Mdouble et2 = problem.random.getRandomNumber(0.0, 1.0);
313  problem.species->setSlidingFrictionCoefficient(1e20);
314  problem.species->setSlidingDissipation(0.0);
315  problem.species->setSlidingStiffness(
316  problem.species->getStiffness() / 3.5 * mathsFunc::square(acos(-et2) / constants::pi));
317  problem.setName("ForceSelfTest4");
318  problem.solve();
319  problem.getRelativeVelocityComponents(normalRelativeVelocity, tangentialRelativeVelocity);
320  analyticTangentialRelativeVelocity = problem.initialTangentialRelativeVelocity *
321  cos(sqrt(problem.species->getSlidingStiffness() / problem.m12 * 3.5) *
322  problem.getCollisionTime(2.0 * problem.m12));
323  logger(INFO, "tangentialRelativeVelocity: analytic=%, simulation=%\n",
324  problem.initialTangentialRelativeVelocity, tangentialRelativeVelocity, Flusher::NO_FLUSH);
325  logger(INFO, "normalRelativeVelocity: analytic=%, simulation=%",
326  -problem.en * problem.initialNormalRelativeVelocity, normalRelativeVelocity);
327 }
Definition: ForceSelfTest.cpp:100

References acos(), cos(), Eigen::bfloat16_impl::exp(), INFO, Eigen::bfloat16_impl::log(), logger, max, Global_Parameters::mu, NO_FLUSH, constants::pi, problem, sqrt(), and mathsFunc::square().

Referenced by main().