FEDEM Solver  R8.0
Source code of the dynamics solver
Data Types | Functions/Subroutines
frictionroutinesmodule Module Reference

Module with subroutines for friction calculations. More...

Data Types

interface  findforceinfriction
 Computes the total applied force in a joint dof with friction. More...
 

Functions/Subroutines

subroutine, public updatefrictions (joints, cElems, dt, iter, useRealVel, ierr)
 Updates the friction forces in all joints and contact elements. More...
 
subroutine updatefriction (ierr, dt, deltaT, friction, jDof, joint, cElem)
 Updates friction forces in the given joint or contact element. More...
 
subroutine updatemultidoffriction (ierr, dt, deltaT, friction, joint)
 Updates multidof friction forces in the given joint. More...
 
subroutine findmaxfrictionforce (Fmax, Fequ, Fext, Vel, StickSlip, F0, Coulomb, Stribeck, Vc)
 Calculates the maximum friction force. More...
 
subroutine findfrictionforce (Ffric, Kfric, Xn_1, Vn_1, Fold, dF, lStick, lInit, dT, Fmax, Fext, Ftol, X0, Xn, Vn)
 Calculates the actual friction force. More...
 
subroutine, public addinfrictionforces (joint, sam, SysForce, SysReac, ierr)
 Adds friction forces for a joint into the given system vectors. More...
 
subroutine findjointforceinfriction (joint, sam, RF, Q, Fs, Fd, Fi)
 Computes the total applied force in a joint DOF with friction. More...
 
subroutine findcontactelmforceinfriction (cElem, sam, RF, Q, Fs, Fd, Fi)
 Computes total applied force in a contact element DOF with friction. More...
 

Detailed Description

Module with subroutines for friction calculations.

Function/Subroutine Documentation

◆ addinfrictionforces()

subroutine, public frictionroutinesmodule::addinfrictionforces ( type(masterslavejointtype), intent(in)  joint,
type(samtype), intent(in)  sam,
real(dp), dimension(:), intent(inout)  SysForce,
real(dp), dimension(:), intent(inout)  SysReac,
integer, intent(inout)  ierr 
)

Adds friction forces for a joint into the given system vectors.

Parameters
[in]jointThe joint owning this friction force
[in]samData for managing system matrix assembly
SysForceSystem load vector to receive the force contribution
SysReacReaction force container
ierrError flag
Author
Bjorn Haugen
Date
Nov 2001
Author
Knut Morten Okstad
Date
25 Jun 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ findcontactelmforceinfriction()

subroutine frictionroutinesmodule::findcontactelmforceinfriction ( type(contactelementtype), intent(inout)  cElem,
type(samtype), intent(in)  sam,
real(dp), dimension(:), intent(in)  RF,
real(dp), dimension(:), intent(in)  Q,
real(dp), dimension(:), intent(in)  Fs,
real(dp), dimension(:), intent(in), optional  Fd,
real(dp), dimension(:), intent(in), optional  Fi 
)

Computes total applied force in a contact element DOF with friction.

Parameters
cElemThe contact element to check for friction forces.
[in]samData for managing system matrix assembly
[in]RFReaction force container
[in]QExternal force system vector
[in]FsStiffness force system vector
[in]FdDamping force system vector
[in]FiInertia force system vector

The total applies force is equal to the sum of all force contributions to the friction DOF, except for the friction force itself.

Todo:
This subroutine is not implemented yet. Currently does nothing.
Author
Knut Morten Okstad
Date
17 Sep 2007

◆ findfrictionforce()

subroutine frictionroutinesmodule::findfrictionforce ( real(dp), intent(out)  Ffric,
real(dp), intent(inout)  Kfric,
real(dp), intent(inout)  Xn_1,
real(dp), intent(inout)  Vn_1,
real(dp), intent(inout)  Fold,
real(dp), intent(inout)  dF,
integer, intent(inout)  lStick,
integer, intent(inout)  lInit,
real(dp), intent(in)  dT,
real(dp), intent(in)  Fmax,
real(dp), intent(in)  Fext,
real(dp), intent(in)  Ftol,
real(dp), intent(in)  X0,
real(dp), intent(in)  Xn,
real(dp), intent(in)  Vn 
)

Calculates the actual friction force.

Parameters
[out]FfricCurrent friction force
KfricRelative change in friction force wrt. velocity
Xn_1Position at previous iteration
Vn_1Velocity at previous iteration
FoldFriction force at previous iteration
dFFriction force change between last two iterations
lStickStick indicator
lInitInitialization flag
[in]dTTime increment size
[in]FmaxThe maximum friction force
[in]FextForce that should match friction force on stick
[in]FtolZero tolerance for friction forces
[in]X0Position at start of current time step
[in]XnCurrent position
[in]VnCurrent velocity

See frictiontypemodule::frictiontype::linit for the interpretation of the initialization flag lInit.

Author
Karl Erik Thoresen
Date
11 Mar 1998
Author
Knut Morten Okstad (F90 version)
Date
09 Jan 2001
Author
Knut Morten Okstad (completely rewritten)
Date
22 Aug 2002
Here is the caller graph for this function:

◆ findjointforceinfriction()

subroutine frictionroutinesmodule::findjointforceinfriction ( type(masterslavejointtype), intent(inout)  joint,
type(samtype), intent(in)  sam,
real(dp), dimension(:), intent(in)  RF,
real(dp), dimension(:), intent(in)  Q,
real(dp), dimension(:), intent(in)  Fs,
real(dp), dimension(:), intent(in), optional  Fd,
real(dp), dimension(:), intent(in), optional  Fi 
)

Computes the total applied force in a joint DOF with friction.

Parameters
jointThe joint to check for friction forces.
[in]samData for managing system matrix assembly
[in]RFReaction force container
[in]QExternal force system vector
[in]FsStiffness force system vector
[in]FdDamping force system vector
[in]FiInertia force system vector

The total applies force is equal to the sum of all force contributions to the friction DOF, except for the friction force itself.

Author
Knut Morten Okstad
Date
17 Sep 2007

◆ findmaxfrictionforce()

subroutine frictionroutinesmodule::findmaxfrictionforce ( real(dp), intent(out)  Fmax,
real(dp), intent(in)  Fequ,
real(dp), intent(in)  Fext,
real(dp), intent(in)  Vel,
integer, intent(inout)  StickSlip,
real(dp), intent(in)  F0,
real(dp), intent(in)  Coulomb,
real(dp), intent(in)  Stribeck,
real(dp), intent(in)  Vc 
)

Calculates the maximum friction force.

Parameters
[out]FmaxThe maximum friction force
[in]FequEquivalent normal force that creates the friction
[in]FextForce that should match friction force on stick
[in]VelCurrent velocity in the friction DOF
[in]StickSlipStick/slip indicator
[in]F0Prestress load
[in]CoulombCoulomb friction coefficient
[in]StribeckMagnitude of the Stribeck effect
[in]VcCritical speed of the Stribeck effect
Author
Karl Erik Thoresen
Date
11 Mar 1998
Author
Knut Morten Okstad (F90 version)
Date
09 Jan 2001
Author
Knut Morten Okstad (completely rewritten)
Date
22 Aug 2002
Here is the caller graph for this function:

◆ updatefriction()

subroutine frictionroutinesmodule::updatefriction ( integer, intent(inout)  ierr,
real(dp), intent(in)  dt,
real(dp), intent(in)  deltaT,
type(frictiontype), intent(inout)  friction,
integer, intent(in), optional  jDof,
type(masterslavejointtype), intent(in), optional  joint,
type(contactelementtype), intent(in), optional  cElem 
)

Updates friction forces in the given joint or contact element.

Parameters
ierrError Flag
[in]dtTime increment size
[in]deltaTTime increment for finite difference velocity calculation
frictionThe friction object to update forces for
[in]jDofLocal joint DOF of the friction
[in]jointThe joint owning this friction
[in]cElemThe contact element owning this friction
Author
Hans Petter Hildre
Date
20 Dec 1990
Author
Karl E. Thoresen / Bjorn Haugen (to F90)
Date
around 2000
Author
Knut Morten Okstad (completely rewritten)
Date
28 Aug 2002
Here is the call graph for this function:
Here is the caller graph for this function:

◆ updatefrictions()

subroutine, public frictionroutinesmodule::updatefrictions ( type(masterslavejointtype), dimension(:), intent(inout)  joints,
type(contactelementtype), dimension(:), intent(inout)  cElems,
real(dp), intent(in)  dt,
integer, intent(in)  iter,
logical, intent(in)  useRealVel,
integer, intent(inout)  ierr 
)

Updates the friction forces in all joints and contact elements.

Parameters
jointsArray of all joints in the model
cElemsArray of all contact elements in the model
[in]dtTime increment size
[in]iterIteration counter
[in]useRealVelIf .true., the actual velocity is used
ierrError Flag
Author
Knut Morten Okstad
Date
30 May 2008
Here is the call graph for this function:
Here is the caller graph for this function:

◆ updatemultidoffriction()

subroutine frictionroutinesmodule::updatemultidoffriction ( integer, intent(inout)  ierr,
real(dp), intent(in)  dt,
real(dp), intent(in)  deltaT,
type(frictiontype), intent(inout)  friction,
type(masterslavejointtype), intent(inout)  joint 
)

Updates multidof friction forces in the given joint.

Parameters
ierrError Flag
[in]dtTime increment size
[in]deltaTTime increment for finite difference velocity calculation
frictionThe friction object to update forces for
[in]jointThe joint owning this friction
Author
Bjorn Haugen
Date
25 Apr 2003
Here is the call graph for this function:
Here is the caller graph for this function: