Пример #1
0
const Force::MobilityLinearSpring& Force::MobilityLinearSpring::
setStiffness(State& state, Real stiffness) const {
    SimTK_ERRCHK1_ALWAYS(stiffness >= 0, 
        "Force::MobilityLinearSpring::setStiffness()",
        "Stiffness coefficient must be nonnegative "
        "(stiffness=%g).", stiffness);

    getImpl().updParams(state).first = stiffness; 
    return *this; 
}
Пример #2
0
Force::Gravity& Force::Gravity::
setDefaultMagnitude(Real g) {
    SimTK_ERRCHK1_ALWAYS(g >= 0,
        "Force::Gravity::setDefaultMagnitude()",
        "The gravity magnitude g must be nonnegative but was specified as %g.",
        g);

    getImpl().invalidateTopologyCache();
    updImpl().defMagnitude = g;
    return *this;
}
Пример #3
0
const Force::MobilityLinearDamper& Force::MobilityLinearDamper::
setDamping(State& state, Real damping) const 
{
    SimTK_ERRCHK1_ALWAYS(damping >= 0, 
        "Force::MobilityLinearDamper::setDamping()",
        "Damping coefficient must be nonnegative "
        "(damping=%g).", damping);

    getImpl().updDamping(state) = damping; 
    return *this; 
}
Пример #4
0
Force::Gravity::Gravity
   (GeneralForceSubsystem&          forces,
    const SimbodyMatterSubsystem&   matter,
    Real                            defMagnitude)
:   Force(new GravityImpl(matter,defMagnitude,0))
{
    SimTK_ERRCHK1_ALWAYS(defMagnitude >= 0,
        "Force::Gravity::Gravity(magnitude)",
        "The gravity magnitude g must be nonnegative but was specified as %g.",
        defMagnitude);
    updImpl().setForceSubsystem(forces, forces.adoptForce(*this));
}
Пример #5
0
Force::MobilityLinearDamper& Force::MobilityLinearDamper::
setDefaultDamping(Real defaultDamping) {
    SimTK_ERRCHK1_ALWAYS(defaultDamping >= 0, 
        "Force::MobilityLinearDamper::setDefaultDamping()",
        "Damping coefficient must be nonnegative "
        "(defaultDamping=%g).", defaultDamping);

    MobilityLinearDamperImpl& impl = updImpl();
    if (impl.m_defaultDamping != defaultDamping) {
        impl.m_defaultDamping = defaultDamping;
        impl.invalidateTopologyCache();
    }
    return *this;
}
Пример #6
0
Force::MobilityLinearDamper::
MobilityLinearDamper(GeneralForceSubsystem& forces, 
                     const MobilizedBody&   mobod, 
                     MobilizerUIndex        whichU,
                     Real                   defaultDamping) 
:   Force(new MobilityLinearDamperImpl(mobod, whichU, defaultDamping)) 
{
    SimTK_ERRCHK1_ALWAYS(defaultDamping >= 0, 
        "Force::MobilityLinearDamper::MobilityLinearDamper()",
        "Damping coefficient must be nonnegative "
        "(defaultDamping=%g).", defaultDamping);

    updImpl().setForceSubsystem(forces, forces.adoptForce(*this));
}
Пример #7
0
Force::MobilityLinearSpring& Force::MobilityLinearSpring::
setDefaultStiffness(Real defaultStiffness) {
    SimTK_ERRCHK1_ALWAYS(defaultStiffness >= 0, 
        "Force::MobilityLinearSpring::setDefaultStiffness()",
        "Stiffness coefficient must be nonnegative "
        "(defaultStiffness=%g).", defaultStiffness);

    MobilityLinearSpringImpl& impl = updImpl();
    if (impl.m_defaultStiffness != defaultStiffness) {
        impl.m_defaultStiffness = defaultStiffness;
        impl.invalidateTopologyCache();
    }
    return *this;
}
Пример #8
0
const Force::Gravity& Force::Gravity::
setMagnitude(State& state, Real g) const {
    SimTK_ERRCHK1_ALWAYS(g >= 0,
        "Force::Gravity::setMagnitude()",
        "The gravity magnitude g must be nonnegative but was specified as %g.",
        g);

    if (getMagnitude(state) != g) {
        getImpl().invalidateForceCache(state);
        getImpl().updParameters(state).g = g;

        if (g == 0)
            getImpl().updForceCache(state).setToZero(); // must precalculate
    }
    return *this;
}
Пример #9
0
Force::MobilityLinearSpring::
MobilityLinearSpring(GeneralForceSubsystem&  forces, 
                     const MobilizedBody&    mobod, 
                     MobilizerQIndex         whichQ, 
                     Real                    defaultStiffness, 
                     Real                    defaultQZero) 
:   Force(new MobilityLinearSpringImpl(mobod, whichQ, 
                                       defaultStiffness, defaultQZero)) 
{
    SimTK_ERRCHK1_ALWAYS(defaultStiffness >= 0, 
        "Force::MobilityLinearSpring::MobilityLinearSpring()",
        "Stiffness coefficient must be nonnegative "
        "(defaultStiffness=%g).", defaultStiffness);

    updImpl().setForceSubsystem(forces, forces.adoptForce(*this));
}
Пример #10
0
Force::Gravity::Gravity
   (GeneralForceSubsystem&          forces,
    const SimbodyMatterSubsystem&   matter,
    const UnitVec3&                 defDirection,
    Real                            defMagnitude,
    Real                            defZeroHeight)
:   Force(new GravityImpl(matter,defDirection,defMagnitude,defZeroHeight))
{
    SimTK_ERRCHK1_ALWAYS(defMagnitude >= 0,
        "Force::Gravity::Gravity(downDirection,magnitude)",
        "The gravity magnitude g must be nonnegative but was specified as %g.",
        defMagnitude);
    SimTK_ERRCHK_ALWAYS(defDirection.isFinite(),
        "Force::Gravity::Gravity(downDirection,magnitude)",
        "A non-finite 'down' direction was received; did you specify a zero-"
        "length Vec3? The direction must be non-zero.");
    updImpl().setForceSubsystem(forces, forces.adoptForce(*this));
}