MercuryDPM  Trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FrictionInteraction.h
Go to the documentation of this file.
1 //Copyright (c) 2013-2020, The MercuryDPM Developers Team. All rights reserved.
2 //For the list of developers, see <http://www.MercuryDPM.org/Team>.
3 //
4 //Redistribution and use in source and binary forms, with or without
5 //modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name MercuryDPM nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 //DISCLAIMED. IN NO EVENT SHALL THE MERCURYDPM DEVELOPERS TEAM BE LIABLE FOR ANY
19 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 //ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 //(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 #ifndef FrictionInteraction_H
27 #define FrictionInteraction_H
28 
30 #include "Math/Vector.h"
31 
32 class BaseParticle;
33 
34 class FrictionSpecies;
35 
36 class BaseInteractable;
37 
45 {
46 public:
51 
55  FrictionInteraction(BaseInteractable* P, BaseInteractable* I, unsigned timeStamp);
56 
57  //used for mpi
59 
64 
68  ~FrictionInteraction() override;
69 
74  void computeFrictionForce();
75 
79  void read(std::istream& is) override;
80 
84  void write(std::ostream& os) const override;
85 
90  void integrate(Mdouble timeStep) override;
91 
95  Mdouble getElasticEnergy() const override;
96 
100  std::string getBaseName() const;
101 
105  const FrictionSpecies* getSpecies() const;
106 
112  void reverseHistory() override;
113 
114  void rotateHistory(Matrix3D& rotationMatrix) override;
115 
116  Vec3D getRollingSpring() const;
117 
118  Vec3D getTorsionSpring() const;
119 
120  void setRollingSpring(Vec3D rollingSpring);
121 
122  void setTorsionSpring(Vec3D torsionSpring);
123 
124 private:
145 };
146 
147 #endif
const FrictionSpecies * getSpecies() const
Returns a const pointer of type FrictionSpecies*.
Vec3D getRollingSpring() const
double Mdouble
Definition: GeneralDefine.h:34
FrictionSpecies contains the parameters used to describe sliding, rolling and torsional friction...
void reverseHistory() override
A useful feature if one wants to return to the initial state of the springs. However, reverse history decrements the current state to the state corresponding to previous time step. Decrements the state or value of rollingSpring_, torsionSpring_ and slidingSpring_.
Computes the forces corresponding to sliding friction.
Mdouble getElasticEnergy() const override
Returns the global amount of energy stored in all the springs (rolling, sliding and torsional)...
This class allows one to take all three types of frictional interactions into account. The sliding, rolling and torsional frictional interaction. See.
FrictionSpecies SpeciesType
An alias for FrictionSpecies.
void setRollingSpring(Vec3D rollingSpring)
~FrictionInteraction() override
Destructor.
void setTorsionSpring(Vec3D torsionSpring)
std::string getBaseName() const
Returns interaction name/type.
void computeFrictionForce()
Computes the forces arising due to all three types of friction, i.e., sliding, rolling and torsional...
Vec3D rollingSpringVelocity_
Stores the rate at which the rolling spring compresses or relaxes. Set in computeFrictionForce(), used in computing the amount of compression in rolling spring. Used in integrate().
Defines the basic properties that a interactable object can have.
Implementation of a 3D matrix.
Definition: Matrix.h:37
Definition: Vector.h:49
void rotateHistory(Matrix3D &rotationMatrix) override
When periodic particles are used, some interactions need certain history properties rotated (e...
Vec3D torsionSpring_
Stores the amount of torsional spring compression. Set in integrate(), used in computing frictional f...
Vec3D torsionSpringVelocity_
Stores the rate at which the torsional spring compresses or relaxes. Set in computeFrictionForce(), used in computing the amount of compression in torsion spring. Used in integrate().
Vec3D rollingSpring_
Stores the amount of rolling spring compression. Set in integrate(), used in computing frictional for...
void write(std::ostream &os) const override
Interaction print function, which accepts an std::ostream as input.
void integrate(Mdouble timeStep) override
Computes the amount of compression in all the springs, i.e., increments the rollingSpring_, slidingSpring_ (see SlidingFrictionInteraction.cc) and torsionSpring_.
Vec3D getTorsionSpring() const
void read(std::istream &is) override
Interaction read function, which accepts an std::istream as input.