SimpleDrumSuperquadrics.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #ifndef AXISYMMETRICWALL_H
6 #define AXISYMMETRICWALL_H
7 
8 #include "Math/Vector.h"
9 #include "Walls/InfiniteWall.h"
10 
24 {
25 public:
30 
35 
36 
40  ~SimpleDrumSuperquadrics() override;
41 
46 
50  SimpleDrumSuperquadrics* copy() const final;
51 
57  bool getDistanceAndNormal(const BaseParticle& P, Mdouble& distance, Vec3D& normal_return) const override;
58 
59  bool getDistanceNormalOverlapSuperquadric(const SuperQuadricParticle& p, Mdouble& distance, Vec3D& normal_return,
60  Mdouble& overlap) const override;
61 
65  void read(std::istream& is) final;
66 
70  void write(std::ostream& os) const final;
71 
75  std::string getName() const final;
76 
77  void setAxis(Vec3D a);
78 
79  void setRadius(const Mdouble& radius)
80  {
81  radius_ = radius;
82  logger(INFO, "setting drum radius to %", radius_);
83  }
84 
86  InteractionHandler* interactionHandler) override
87  {
88  return wall.getInteractionWithSuperQuad(p, timeStamp, interactionHandler);
89  }
90 
91  Vec3D getFurthestPointSuperQuadric(const Vec3D& normalBodyFixed, const Vec3D& axes, Mdouble eps1, Mdouble eps2) const override
92  {
93  return wall.getFurthestPointSuperQuadric(normalBodyFixed, axes, eps1, eps2);
94  }
95 
96 private:
97  mutable InfiniteWall wall;
99 };
100 
101 
102 #endif
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
@ INFO
float * p
Definition: Tutorial_Map_using.cpp:9
Stores information about interactions between two interactable objects; often particles but could be ...
Definition: BaseInteraction.h:39
Definition: BaseParticle.h:33
Basic class for walls.
Definition: BaseWall.h:28
virtual BaseInteraction * getInteractionWithSuperQuad(SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler)
Definition: BaseWall.cc:476
A infinite wall fills the half-space {point: (position_-point)*normal_<=0}.
Definition: InfiniteWall.h:27
Vec3D getFurthestPointSuperQuadric(const Vec3D &normalBodyFixed, const Vec3D &axes, Mdouble eps1, Mdouble eps2) const override
Largely untested, use at your own risk for anything other than ellipsoids.
Definition: InfiniteWall.cc:291
Container to store Interaction objects.
Definition: InteractionHandler.h:25
A drum in xz-direction with centre at the origin with a certain radius. Usable with superquadric part...
Definition: SimpleDrumSuperquadrics.h:24
InfiniteWall wall
Definition: SimpleDrumSuperquadrics.h:97
SimpleDrumSuperquadrics * copy() const final
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Definition: SimpleDrumSuperquadrics.cc:52
BaseInteraction * getInteractionWithSuperQuad(SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override
Definition: SimpleDrumSuperquadrics.h:85
bool getDistanceNormalOverlapSuperquadric(const SuperQuadricParticle &p, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const override
Definition: SimpleDrumSuperquadrics.cc:81
void setAxis(Vec3D a)
Definition: SimpleDrumSuperquadrics.cc:124
std::string getName() const final
Returns the name of the object.
Definition: SimpleDrumSuperquadrics.cc:119
void setRadius(const Mdouble &radius)
Definition: SimpleDrumSuperquadrics.h:79
SimpleDrumSuperquadrics()
Default constructor.
Definition: SimpleDrumSuperquadrics.cc:10
bool getDistanceAndNormal(const BaseParticle &P, Mdouble &distance, Vec3D &normal_return) const override
Computes the distance from the wall for a given BaseParticle and returns true if there is a collision...
Definition: SimpleDrumSuperquadrics.cc:67
void read(std::istream &is) final
reads wall
Definition: SimpleDrumSuperquadrics.cc:98
Vec3D getFurthestPointSuperQuadric(const Vec3D &normalBodyFixed, const Vec3D &axes, Mdouble eps1, Mdouble eps2) const override
Definition: SimpleDrumSuperquadrics.h:91
Mdouble radius_
Definition: SimpleDrumSuperquadrics.h:98
~SimpleDrumSuperquadrics() override
Destructor.
Definition: SimpleDrumSuperquadrics.cc:28
void write(std::ostream &os) const final
outputs wall
Definition: SimpleDrumSuperquadrics.cc:109
SimpleDrumSuperquadrics & operator=(const SimpleDrumSuperquadrics &other)
Copy assignment operator.
Definition: SimpleDrumSuperquadrics.cc:37
Definition: SuperQuadricParticle.h:36
Definition: Kernel/Math/Vector.h:30
const Scalar * a
Definition: level2_cplx_impl.h:32
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
radius
Definition: UniformPSDSelfTest.py:15
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286