Shape factor for Force-Length relationships

Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
POST REPLY
User avatar
Natalia Kosterina
Posts: 13
Joined: Mon May 16, 2011 3:03 am

Shape factor for Force-Length relationships

Post by Natalia Kosterina » Thu Sep 29, 2011 4:41 am

Hi!

I am trying to reproduce calculations of active and passive forces and force-length-velocity surface using the fiber length. Most of fibers during different movements have fiber length below the 'optimal_fiber_length' (for example, lower body model, Gait2354). If we use 'function representing passive force-length behavior of muscle fibers' from *.osim file, then we are not supposed to have passive force. But OpenSim Plotter shows that the passive force exists even for fiber length below optimal. Considering my experimental experience, this is reasonable.

I could not figure out how to use the shape factors for active and passive force-length relationships, and force-velocity shape factor. Perhaps, the shape factors may lead some light on my problem:
how to calculate the forces using fiber length?

Hoping to get a help,
Natalia

User avatar
Ajay Seth
Posts: 136
Joined: Thu Mar 15, 2007 10:39 am

Re: Shape factor for Force-Length relationships

Post by Ajay Seth » Fri Oct 07, 2011 10:12 pm

From Thelen2003Muscle implementation:

Code: Select all

double Thelen2003Muscle::calcPassiveForce(const SimTK::State& s, double aNormFiberLength) const
{
	double passive_force;

	if (aNormFiberLength>(1+_fmaxMuscleStrain)) { // Switch to a linear model at large forces
		double slope=(_kShapePassive/_fmaxMuscleStrain)*(exp(_kShapePassive*(1.0+_fmaxMuscleStrain-1.0)/_fmaxMuscleStrain)) / (exp(_kShapePassive));
		passive_force=1.0+slope*(aNormFiberLength-(1.0+_fmaxMuscleStrain));
	}
	else
		passive_force = (exp(_kShapePassive*(aNormFiberLength-1.0)/_fmaxMuscleStrain)) / (exp(_kShapePassive));

	return passive_force;
}

Code: Select all

double Thelen2003Muscle::calcActiveForce(const SimTK::State& s, double aNormFiberLength) const
{
	double x=-(aNormFiberLength-1.)*(aNormFiberLength-1.)/_kShapeActive;
	return exp(x);
}
These are supposed to correspond to Thelen, JBME 2003.

POST REPLY