MercuryDPM  0.11
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MovingIntersectionOfWallsUnitTest.cpp File Reference
#include <cmath>
#include <iostream>
#include <iomanip>
#include "Logger.h"
#include "DPMBase.h"
#include "Particles/BaseParticle.h"
#include "Walls/IntersectionOfWalls.h"
#include "Species/LinearViscoelasticSpecies.h"

Go to the source code of this file.

Classes

class  MovingIntersectionOfWallsUnitTest_Basic
 This tests if moving walls also works with IntersectionOfWalls. More...
 
class  MovingIntersectionOfWallsUnitTest_MovingReferenceFrame
 

Functions

void compareParticles (BaseParticle *Ptest, BaseParticle *Pref, double absError, Vec3D positionDifference, Vec3D velocityDifference, Vec3D orientationDifference, Vec3D AngularVelocityDifference)
 
int main (int argc UNUSED, char *argv[] UNUSED)
 

Function Documentation

void compareParticles ( BaseParticle Ptest,
BaseParticle Pref,
double  absError,
Vec3D  positionDifference,
Vec3D  velocityDifference,
Vec3D  orientationDifference,
Vec3D  AngularVelocityDifference 
)

Definition at line 124 of file MovingIntersectionOfWallsUnitTest.cpp.

References FATAL, BaseInteractable::getAngularVelocity(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseInteractable::getVelocity(), mathsFunc::isEqual(), and logger.

Referenced by main().

125 {
126  if (!mathsFunc::isEqual(Ptest->getPosition(), Pref->getPosition() + positionDifference, absError))
127  {
128  logger(FATAL, "The particle has the wrong position. It is %, however is should be %, the difference is %", Ptest->getPosition(), Pref->getPosition() + positionDifference, Ptest->getPosition() - Pref->getPosition() - positionDifference);
129  }
130  if (!mathsFunc::isEqual(Ptest->getVelocity(), Pref->getVelocity() + velocityDifference, absError))
131  {
132  logger(FATAL, "The particle has the wrong velocity. It is %, however is should be %, the difference is %", Ptest->getVelocity(), Pref->getVelocity() + velocityDifference, Ptest->getVelocity() - Pref->getVelocity() - velocityDifference);
133  }
134  if (!mathsFunc::isEqual(Ptest->getOrientation(), Pref->getOrientation() + orientationDifference, absError))
135  {
136  logger(FATAL, "The particle has the wrong orientation. It is %, however is should be %, the difference is %", Ptest->getOrientation(), Pref->getOrientation() + orientationDifference, Ptest->getOrientation() - Pref->getOrientation() - orientationDifference);
137  }
138  if (!mathsFunc::isEqual(Ptest->getAngularVelocity(), Pref->getAngularVelocity() + AngularVelocityDifference, absError))
139  {
140  logger(FATAL, "The particle has the wrong angular velocity. It is %, however is should be %, the difference is %", Ptest->getAngularVelocity(), Pref->getAngularVelocity() + AngularVelocityDifference, Ptest->getAngularVelocity() - Pref->getAngularVelocity() - AngularVelocityDifference);
141  }
142 }
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
virtual const Vec3D & getAngularVelocity() const
Returns the angular velocity of this interactable.
const Vec3D & getPosition() const
Returns the position of this BaseInteractable.
const Vec3D & getOrientation() const
Returns the orientation of this BaseInteractable.
LL< Log::FATAL > FATAL
Fatal log level.
Definition: Logger.cc:25
bool isEqual(Mdouble v1, Mdouble v2, double absError)
Compares the difference of two Mdouble with an absolute error, useful in UnitTests.
virtual const Vec3D & getVelocity() const
Returns the velocity of this interactable.
int main ( int argc  UNUSED,
char *argv[]  UNUSED 
)

Definition at line 143 of file MovingIntersectionOfWallsUnitTest.cpp.

References compareParticles(), DPMBase::getTime(), MovingIntersectionOfWallsUnitTest_Basic::p1e, MovingIntersectionOfWallsUnitTest_Basic::p1f, MovingIntersectionOfWallsUnitTest_Basic::p2e, MovingIntersectionOfWallsUnitTest_Basic::p2f, MovingIntersectionOfWallsUnitTest_Basic::p3e, MovingIntersectionOfWallsUnitTest_Basic::p3f, Files::setName(), DPMBase::solve(), and MovingIntersectionOfWallsUnitTest_MovingReferenceFrame::velocity.

144 {
147  basic.setName("MovingIntersectionOfWallsUnitTest_Basic");
148  movingReferenceFrame.setName("MovingIntersectionOfWallsUnitTest_MovingReferenceFrame");
149  basic.solve();
150  movingReferenceFrame.solve();
151  compareParticles(movingReferenceFrame.p1f,basic.p1f, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
152  compareParticles(movingReferenceFrame.p2f,basic.p2f, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
153  compareParticles(movingReferenceFrame.p3f,basic.p3f, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
154  compareParticles(movingReferenceFrame.p1e,basic.p1e, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
155  compareParticles(movingReferenceFrame.p2e,basic.p2e, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
156  compareParticles(movingReferenceFrame.p3e,basic.p3e, 1e-10, movingReferenceFrame.velocity*movingReferenceFrame.getTime(), movingReferenceFrame.velocity, Vec3D(0.0,0.0,0.0), Vec3D(0.0,0.0,0.0));
157 }
void solve()
The work horse of the code.
Definition: DPMBase.cc:1895
void setName(const std::string &name)
Allows to set the name of all the files (ene, data, fstat, restart, stat)
Definition: Files.cc:149
This tests if moving walls also works with IntersectionOfWalls.
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
Mdouble getTime() const
Access function for the time.
Definition: DPMBase.cc:158
void compareParticles(BaseParticle *Ptest, BaseParticle *Pref, double absError, Vec3D positionDifference, Vec3D velocityDifference, Vec3D orientationDifference, Vec3D AngularVelocityDifference)