MercuryDPM  Alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MindlinRollingTorsionInteraction.h
Go to the documentation of this file.
1 //Copyright (c) 2013-2017, 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 MindlinRollingTorsionInteraction_H
27 #define MindlinRollingTorsionInteraction_H
28 
29 #include "MindlinInteraction.h"
30 #include "Math/Vector.h"
31 
32 class BaseParticle;
34 class BaseInteractable;
42 {
43 public:
52 
53  //used for mpi
55 
68  void computeFrictionForce();
72  void read(std::istream& is) override;
76  void write(std::ostream& os) const override;
81  void integrate(Mdouble timeStep) override;
85  Mdouble getElasticEnergy() const override;
89  std::string getBaseName() const;
99  void reverseHistory() override;
100 
101  void rotateHistory(Matrix3D& rotationMatrix) override;
102 
103  Vec3D getRollingSpring() const;
104 
105  Vec3D getTorsionSpring() const;
106 
107  void setRollingSpring(Vec3D rollingSpring);
108 
109  void setTorsionSpring(Vec3D torsionSpring);
110 
111 private:
132 };
133 #endif
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().
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_.
void write(std::ostream &os) const override
Interaction print function, which accepts an std::ostream as input.
double Mdouble
Computes the forces corresponding to sliding friction.
Vec3D torsionSpring_
Stores the amount of torsional spring compression. Set in integrate(), used in computing frictional f...
const MindlinRollingTorsionSpecies * getSpecies() const
Returns a const pointer of type FrictionSpecies*.
Vec3D rollingSpring_
Stores the amount of rolling spring compression. Set in integrate(), used in computing frictional for...
void computeFrictionForce()
Computes the forces arising due to all three types of friction, i.e., sliding, rolling and torsional...
Mdouble getElasticEnergy() const override
Returns the global amount of energy stored in all the springs (rolling, sliding and torsional)...
MindlinRollingTorsionSpecies SpeciesType
An alias for FrictionSpecies.
void rotateHistory(Matrix3D &rotationMatrix) override
When periodic particles are used, some interactions need certain history properties rotated (e...
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().
void read(std::istream &is) override
Interaction read function, which accepts an std::istream as input.
void integrate(Mdouble timeStep) override
Computes the amount of compression in all the springs, i.e., increments the rollingSpring_, slidingSpring_ (see MindlinInteraction.cc) and torsionSpring_.
std::string getBaseName() const
Returns interaction name/type.
This class allows one to take all three types of frictional interactions into account. The sliding, rolling and torsional frictional interaction. See.
Defines the basic properties that a interactable object can have.
Implementation of a 3D matrix.
Definition: Matrix.h:36
Implementation of a 3D vector (by Vitaliy).
Definition: Vector.h:45
MindlinRollingTorsionSpecies contains the parameters used to describe sliding, rolling and torsional ...