87 #ifdef DEBUG_CONSTRUCTOR
88 std::cout<<
"MindlinInteraction::MindlinInteraction() finished"<<std::endl;
136 #ifdef DEBUG_CONSTRUCTOR
137 std::cout<<
"MindlinInteraction::MindlinInteraction(const MindlinInteraction& p) finished"<<std::endl;
145 #ifdef MERCURY_USE_MPI
146 logger(
FATAL,
"MindlinInteractions are currently not implemented in parallel MercuryDPM");
154 #ifdef DEBUG_DESTRUCTOR
155 std::cout<<
"MindlinInteraction::~MindlinInteraction() finished"<<std::endl;
233 if (!useTurningPoint) {
242 if (forceDirection<0)
243 forceRatio = -forceRatio;
255 if (forceDirection<0)
256 forceRatio = -forceRatio;
278 if (dynamic_cast<BaseParticle *>(
getI()) == 0) {
static Mdouble getLengthSquared(const Vec3D &a)
Calculates the squared length of a Vec3D: .
Mdouble getSlidingDissipation() const
Allows the tangential viscosity to be accessed.
Vec3D tangentialForceTemp2_
Mdouble getEffectiveRadius() const
Returns a Mdouble to the effective radius of the interaction. (Not corrected for the overlap) ...
void updateTangentialStiffnessZero(Mdouble rad, double shearMod)
Mdouble getSlidingFrictionCoefficient() const
Allows the (dynamic) Coulomb friction coefficient to be accessed.
std::string getBaseName() const
Returns the type/name of interaction (sliding friction interaction)
Mdouble tangentialStiffnessZero_
static Vec3D getUnitVector(const Vec3D &a)
Returns a unit Vec3D based on a.
Logger< MERCURY_LOGLEVEL > logger("MercuryKernel")
InteractionHandler * getHandler() const
Gets a point to the interaction handlers to which this interaction belongs.
Mdouble getTangentialOverlap() const override
Returns the amount of tangential overlap which is needed by BaseInteraction::writeToFstat().
Vec3D slidingSpringVelocity_
Stores the rate at which the sliding spring compressed or relaxed. Set in the member function compute...
Vec3D tangentialDisplacementTemp2_
void updateK_t(const Mdouble fric, const Vec3D direction, const bool useTurningPoint, const bool isLoading)
Vec3D tangentialForceTurningPointULTemp_
Vec3D tangentialDisplacementTurningPointLU_
Mdouble absoluteNormalForcePrevious_
const Vec3D & getRelativeVelocity() const
Returns a constant reference to a vector of relative velocity.
Computes the forces corresponding to sliding friction.
void setZero()
Sets all elements to zero.
static Mdouble dot(const Vec3D &a, const Vec3D &b)
Calculates the dot product of two Vec3D: .
Vec3D slidingSpring_
Stores the amount of sliding spring ( ) compression from the expression . Set in the member function ...
MindlinSpecies contains the parameters used to describe sliding friction.
void integrate(Mdouble timeStep) override
Increments the amount of compression in sliding spring.
Stores information about interactions between two interactable objects; often particles but could be ...
static Mdouble getLength(const Vec3D &a)
Calculates the length of a Vec3D: .
const Mdouble getTangentialForceDirection() const
Vec3D initialTangentialVelocity_
void reverseHistory() override
A useful feature if one wants to return to the initial state of the spring. However, reverse history decrements the current state to the state corresponding to previous time step. Decrements the value of slidingSpring_.
Mdouble getNormalRelativeVelocity() const
Returns a double which is the norm (length) of the relative velocity vector.
const BaseSpecies * getBaseSpecies() const
Return a constant point to BaseSpecies of the interaction.
Mdouble tangentialStiffness_
Mdouble getTangentialStiffness()
void rotateHistory(Matrix3D &rotationMatrix) override
When periodic particles are used, some interactions need certain history properties rotated (e...
void computeFrictionForce()
Computes the tangential force generated due to compression in the sliding spring. Does take into acco...
const Vec3D & getNormal() const
Gets the normal vector between the two interacting objects.
Mdouble getElasticEnergy() const override
Returns the amount of elastic energy stored in sliding spring.
Mdouble tangentialForceDirection_
Mdouble getShearModulus() const
const Vec3D getTangentialForce() const override
Returns the sliding friction force vector.
Mdouble getOverlap() const
Returns a Mdouble with the current overlap between the two interacting objects.
Vec3D tangentialForceTurningPointUL_
void addForce(Vec3D force)
add an force increment to the total force.
Vec3D tangentialForce_
Computes the tangential force such that . Set and computed in computeFrictionForce().
void setTangentialStiffnessZero(Mdouble newKt0)
BaseInteractable * getI()
Mdouble getAbsoluteNormalForcePrevious() const
Returns the absolute value of the norm (length) of the previous Normal force vector.
Vec3D tangentialDisplacementTemp_
Mdouble getDistance() const
Returns an Mdouble which is the norm (length) of distance vector.
const MindlinSpecies * getSpecies() const
Returns a const pointer of type MindlinSpecies*.
Defines the basic properties that a interactable object can have.
Mdouble getTangentialStiffnessZero()
Mdouble tangentialStiffnessZeroPrevious_
virtual ~MindlinInteraction()
Destructor.
Vec3D tangentialForceTurningPointLU_
BaseInteractable * getP()
Returns a pointer to first object involved in the interaction (normally a particle).
Implementation of a 3D matrix.
Implementation of a 3D vector (by Vitaliy).
Vec3D tangentialDisplacementTurningPointUL_
MindlinInteraction()
Empty constructor.
DPMBase * getDPMBase()
Gets the problem that is solved using this handler.
Mdouble getTimeStep() const
Allows the time step dt to be accessed.
Vec3D tangentialForceTurningPointLUTemp_
void setAbsoluteNormalForcePrevious(Mdouble absoluteNormalForcePrevious)
allows the previous normal force to be (re)set from external classes
Vec3D slidingSpringPrevious_
Vec3D tangentialForceTemp_
void write(std::ostream &os) const override
Interaction write function, which accepts an std::ostream as input.
Mdouble tangentialDisplacementSL_
void read(std::istream &is) override
Interaction read function, which accepts an std::istream as input.
Mdouble getEffectiveMass() const
Returns a Mdouble to the effective radius of the interaction. (Not corrected for the overlap) ...
Mdouble getAbsoluteNormalForce() const
Returns the absolute value of the norm (length) of the Normal force vector.