public class Millard2012AxialMuscle extends EquilibriumAxialMuscle
Equilbrium mus1cle 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.
As with the OpenSim model, 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_DEFAULT_MIN_FLC_VALUE |
static double |
DEFAULT_MAX_PENNATION_ANGLE |
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 |
---|
Millard2012AxialMuscle() |
Millard2012AxialMuscle(double fmax,
double lopt,
double tslack,
double optPenAng) |
Modifier and Type | Method and Description |
---|---|
Millard2012AxialMuscle |
clone()
Returns a clone of this composite property.
|
static CubicHermiteSpline1d |
createActiveForceLengthCurve(double minActiveNormFiberLength,
double transitionNormFiberLength,
double maxActiveNormFiberLength,
double shallowAscendingSlope,
double minimumValue) |
static CubicHermiteSpline1d |
createForceVelocityCurve(double concentricSlopeAtVmax,
double concentricSlopeNearVmax,
double isometricSlope,
double eccentricSlopeAtVmax,
double eccentricSlopeNearVmax,
double maxEccentricVelocityForceMultiplier,
double concentricCurviness,
double eccentricCurviness) |
static CubicHermiteSpline1d |
createPassiveForceLengthCurve(double strainAtZeroForce,
double strainAtOneNormForce,
double stiffnessAtLowForce,
double stiffnessAtOneNormForce,
double curviness) |
static CubicHermiteSpline1d |
createTendonForceLengthCurve(double strainAtOneNormForce,
double stiffnessAtOneNormForce,
double normForceAtToeEnd,
double curviness) |
CubicHermiteSpline1d |
getActiveForceLengthCurve()
Queries the active force length curve for this material.
|
PropertyList |
getAllPropertyInfo()
Returns a list giving static information about all properties exported by
this object.
|
static CubicHermiteSpline1d |
getDefaultActiveForceLengthCurve() |
static CubicHermiteSpline1d |
getDefaultForceVelocityCurve() |
static double |
getDefaultMinFlcValue() |
static CubicHermiteSpline1d |
getDefaultPassiveForceLengthCurve() |
static CubicHermiteSpline1d |
getDefaultTendonForceLengthCurve() |
CubicHermiteSpline1d |
getForceVelocityCurve()
Queries the force velocity curve for this material.
|
double |
getMaxPennationAngle() |
CubicHermiteSpline1d |
getPassiveForceLengthCurve()
Queries the passive force length curve for this material.
|
CubicHermiteSpline1d |
getTendonForceLengthCurve()
Queries the tendon force length curve for this material.
|
static void |
main(java.lang.String[] args) |
void |
setActiveForceLengthCurve(CubicHermiteSpline1d curve)
Sets the active force length curve for this material, or removes it if
curve is set to null . |
static void |
setDefaultMinFlcValue(double min) |
void |
setForceVelocityCurve(CubicHermiteSpline1d curve)
Sets the force velocity curve for this material, or removes it if
curve is set to null . |
void |
setMaxPennationAngle(double ang) |
void |
setPassiveForceLengthCurve(CubicHermiteSpline1d curve)
Sets the passive force length curve for this material, or removes it if
curve is set to null . |
void |
setTendonForceLengthCurve(CubicHermiteSpline1d curve)
Sets the tendon force length curve for this material, or removes it if
curve is set to null . |
void |
writeItems(java.io.PrintWriter pw,
NumberFormat fmt,
CompositeComponent ancestor) |
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
getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getAuxVarDerivative, getAuxVarState, numAuxVars, setAuxVarState
public static double DEFAULT_MAX_PENNATION_ANGLE
public static double DEFAULT_DEFAULT_MIN_FLC_VALUE
public static PropertyList myProps
public Millard2012AxialMuscle()
public Millard2012AxialMuscle(double fmax, double lopt, double tslack, double optPenAng)
public PropertyList getAllPropertyInfo()
HasProperties
getAllPropertyInfo
in interface HasProperties
getAllPropertyInfo
in class EquilibriumAxialMuscle
public static CubicHermiteSpline1d getDefaultActiveForceLengthCurve()
public static CubicHermiteSpline1d getDefaultPassiveForceLengthCurve()
public static CubicHermiteSpline1d getDefaultForceVelocityCurve()
public static CubicHermiteSpline1d getDefaultTendonForceLengthCurve()
public double getMaxPennationAngle()
public void setMaxPennationAngle(double ang)
public static double getDefaultMinFlcValue()
public static void setDefaultMinFlcValue(double min)
public CubicHermiteSpline1d getActiveForceLengthCurve()
null
if this curve has not been set.public void setActiveForceLengthCurve(CubicHermiteSpline1d curve)
curve
is set to null
. Any specified curve is copied
internally.curve
- new active force length curvepublic CubicHermiteSpline1d getPassiveForceLengthCurve()
null
if this curve has not been set.public void setPassiveForceLengthCurve(CubicHermiteSpline1d curve)
curve
is set to null
. Any specified curve is copied
internally.curve
- new passive force length curvepublic CubicHermiteSpline1d getTendonForceLengthCurve()
null
if this curve has not been set.public void setTendonForceLengthCurve(CubicHermiteSpline1d curve)
curve
is set to null
. Any specified curve is copied
internally.curve
- new tendon force length curvepublic CubicHermiteSpline1d getForceVelocityCurve()
null
if this curve has not been set.public void setForceVelocityCurve(CubicHermiteSpline1d curve)
curve
is set to null
. Any specified curve is copied
internally.curve
- new force velocity curvepublic static CubicHermiteSpline1d createActiveForceLengthCurve(double minActiveNormFiberLength, double transitionNormFiberLength, double maxActiveNormFiberLength, double shallowAscendingSlope, double minimumValue)
public static CubicHermiteSpline1d createForceVelocityCurve(double concentricSlopeAtVmax, double concentricSlopeNearVmax, double isometricSlope, double eccentricSlopeAtVmax, double eccentricSlopeNearVmax, double maxEccentricVelocityForceMultiplier, double concentricCurviness, double eccentricCurviness)
public static CubicHermiteSpline1d createTendonForceLengthCurve(double strainAtOneNormForce, double stiffnessAtOneNormForce, double normForceAtToeEnd, double curviness)
public static CubicHermiteSpline1d createPassiveForceLengthCurve(double strainAtZeroForce, double strainAtOneNormForce, double stiffnessAtLowForce, double stiffnessAtOneNormForce, double curviness)
public void writeItems(java.io.PrintWriter pw, NumberFormat fmt, CompositeComponent ancestor) throws java.io.IOException
writeItems
in class MaterialBase
java.io.IOException
public Millard2012AxialMuscle 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