public class Thelen2003AxialMuscle extends EquilibriumAxialMuscle
The force velocity curve has been modified to remove a derivative discontinuity at vn = 0, where vn is the normalized velocity.
Equilbrium muscle models contain a muscle component and tendon component
in series. The muscle and tendon lengths sum to the combined length l
that is supplied the the method EquilibriumAxialMuscle.computeF(double, double, double, double)
, which computes the
muacle tension, while the equilibrum condition implies that the tension from
the muscle and tendon components must both equal the value returned by
EquilibriumAxialMuscle.computeF(double, double, double, double)
. To implement this, we store the muscle length as a state
variable which is updated at each time step to ensure that the equilbrium
condition is satisfied. We do this differently from OpenSim: rather than
solving for and then integrating the muscle velocity, the velocity inferred
by dividing the cnange in muscle length by the time step size. This avoids
the singularity that arises in the OpenSim method at zero activation, and so
removes the need for always ensuring that the activation is non-zero.
We also a support, via the rigidTendon
property, a mode where the
tendon is considered to be rigid (via the rigidTendon
property),
which simplifies the computation in situations where this approximation is
acceptable.
Modifier and Type | Field and Description |
---|---|
static double |
DEFAULT_AF |
static double |
DEFAULT_FLEN |
static double |
DEFAULT_FMAX_MUSCLE_STRAIN |
static double |
DEFAULT_FMAX_TENDON_STRAIN |
static double |
DEFAULT_FV_LINEAR_EXTRAP_THRESHOLD |
static double |
DEFAULT_K_SHAPE_ACTIVE |
static double |
DEFAULT_K_SHAPE_PASSIVE |
static double |
DEFAULT_MAX_PENNATION_ANGLE |
static double |
DEFAULT_MINIMUM_ACTIVATION |
static PropertyList |
myProps |
debug, DEFAULT_COMPUTE_LMDOT_FROM_LDOT, DEFAULT_FIBRE_DAMPING, DEFAULT_IGNORE_FORCE_VELOCITY, DEFAULT_MAX_CONTRACTION_VELOCITY, DEFAULT_MAX_ISO_FORCE, DEFAULT_MUSCLE_LENGTH, DEFAULT_OPT_FIBRE_LENGTH, DEFAULT_OPT_PENNATION_ANGLE, DEFAULT_RIGID_TENDON, DEFAULT_TENDON_SLACK_LENGTH, useFindLm, useNewtonSolver, vmFromTendon
Constructor and Description |
---|
Thelen2003AxialMuscle() |
Thelen2003AxialMuscle(double fmax,
double lopt,
double tslack,
double optPenAng) |
Modifier and Type | Method and Description |
---|---|
Thelen2003AxialMuscle |
clone()
Returns a clone of this composite property.
|
double |
getAf() |
PropertyList |
getAllPropertyInfo()
Returns a list giving static information about all properties exported by
this object.
|
double |
getFlen() |
double |
getFmaxMuscleStrain() |
double |
getFmaxTendonStrain() |
double |
getFvLinearExtrapThreshold() |
double |
getKShapeActive() |
double |
getKShapePassive() |
double |
getMaxPennationAngle() |
double |
getMinimumActivation() |
static void |
main(java.lang.String[] args) |
void |
setAf(double af) |
void |
setFlen(double flen) |
void |
setFmaxMuscleStrain(double fts) |
void |
setFmaxTendonStrain(double fts) |
void |
setFvLinearExtrapThreshold(double thresh) |
void |
setKShapeActive(double kshape) |
void |
setKShapePassive(double kshape) |
void |
setMaxPennationAngle(double ang) |
void |
setMinimumActivation(double mina) |
advanceState, computeDFdl, computeDFdldot, computeF, computeG, computeLmWithConstantVm, computeLmWithVmFromLm, computePassiveF, computeVmFromLdot, fibreToMuscleLength, getComputeLmDotFromLDot, getFibreDamping, getIgnoreForceVelocity, getIgnoreTendonCompliance, getLength, getMaxContractionVelocity, getMaxIsoForce, getMuscleLength, getOptFibreLength, getOptPennationAngle, getState, getStateVersion, getTendonLength, getTendonSlackLength, hasRigidTendon, hasState, initializeLmPrevFromLdot, isDFdldotZero, requiresAdvance, scaleDistance, scaleMass, setComputeLmDotFromLDot, setFibreDamping, setIgnoreForceVelocity, setIgnoreTendonCompliance, setLength, setMaxContractionVelocity, setMaxIsoForce, setMuscleLength, setOptFibreLength, setOptPennationAngle, setRigidTendon, setState, setTendonSlackLength, writeActiveForceLengthCurve, writeForceVelocityCurve, writePassiveForceLengthCurve, writeTendonForceLengthCurve
equals, equals, getSubClasses
advanceState, createStateObject, getProperty, getPropertyHost, getPropertyInfo, hasProperty, hasSymmetricTangent, isWritable, postscan, scan, setPropertyHost, setPropertyInfo, symmetryOrStateChanged, updateMaterial, write, writeItems
getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAuxVarDerivative, getAuxVarState, numAuxVars, setAuxVarState
public static double DEFAULT_FMAX_TENDON_STRAIN
public static double DEFAULT_FMAX_MUSCLE_STRAIN
public static double DEFAULT_K_SHAPE_ACTIVE
public static double DEFAULT_K_SHAPE_PASSIVE
public static double DEFAULT_AF
public static double DEFAULT_FLEN
public static double DEFAULT_FV_LINEAR_EXTRAP_THRESHOLD
public static double DEFAULT_MAX_PENNATION_ANGLE
public static double DEFAULT_MINIMUM_ACTIVATION
public static PropertyList myProps
public Thelen2003AxialMuscle()
public Thelen2003AxialMuscle(double fmax, double lopt, double tslack, double optPenAng)
public PropertyList getAllPropertyInfo()
HasProperties
getAllPropertyInfo
in interface HasProperties
getAllPropertyInfo
in class EquilibriumAxialMuscle
public double getFmaxTendonStrain()
public void setFmaxTendonStrain(double fts)
public double getFmaxMuscleStrain()
public void setFmaxMuscleStrain(double fts)
public double getKShapeActive()
public void setKShapeActive(double kshape)
public double getKShapePassive()
public void setKShapePassive(double kshape)
public double getAf()
public void setAf(double af)
public double getFlen()
public void setFlen(double flen)
public double getFvLinearExtrapThreshold()
public void setFvLinearExtrapThreshold(double thresh)
public double getMaxPennationAngle()
public void setMaxPennationAngle(double ang)
public double getMinimumActivation()
public void setMinimumActivation(double mina)
public Thelen2003AxialMuscle clone()
CompositeProperty
clone
in interface CompositeProperty
clone
in interface Clonable
clone
in class AxialMaterial
public static void main(java.lang.String[] args) throws java.io.IOException
java.io.IOException