Go to the documentation of this file. 1 #ifndef SimTK_SimTKCOMMON_SUBSYSTEM_H_
2 #define SimTK_SimTKCOMMON_SUBSYSTEM_H_
89 {
return s.
allocateQ(getMySubsystemIndex(), qInit); }
91 {
return s.
allocateU(getMySubsystemIndex(), uInit); }
93 {
return s.
allocateZ(getMySubsystemIndex(), zInit); }
101 (getMySubsystemIndex(),invalidates,v,updateDependsOn); }
105 (getMySubsystemIndex(), dependsOn, computedBy, v); }
109 {
return allocateCacheEntry(state, g, g, v); }
115 {
return s.
allocateQErr(getMySubsystemIndex(), nqerr); }
117 {
return s.
allocateUErr(getMySubsystemIndex(), nuerr); }
125 {
return s.
getQ(getMySubsystemIndex()); }
127 {
return s.
getU(getMySubsystemIndex()); }
129 {
return s.
getZ(getMySubsystemIndex()); }
140 {
return s.
getQDot(getMySubsystemIndex()); }
142 {
return s.
getUDot(getMySubsystemIndex()); }
144 {
return s.
getZDot(getMySubsystemIndex()); }
146 {
return s.
getQDotDot(getMySubsystemIndex()); }
149 {
return s.
updQDot(getMySubsystemIndex()); }
151 {
return s.
updUDot(getMySubsystemIndex()); }
153 {
return s.
updZDot(getMySubsystemIndex()); }
155 {
return s.
updQDotDot(getMySubsystemIndex()); }
158 {
return s.
getQErr(getMySubsystemIndex()); }
160 {
return s.
getUErr(getMySubsystemIndex()); }
167 {
return s.
getUDotErr(getMySubsystemIndex()); }
174 {
return s.
updQErr(getMySubsystemIndex()); }
176 {
return s.
updUErr(getMySubsystemIndex()); }
178 {
return s.
updUDotErr(getMySubsystemIndex()); }
185 {
return s.
getQStart(getMySubsystemIndex()); }
187 {
return s.
getNQ(getMySubsystemIndex()); }
190 {
return s.
getUStart(getMySubsystemIndex()); }
192 {
return s.
getNU(getMySubsystemIndex()); }
195 {
return s.
getZStart(getMySubsystemIndex()); }
197 {
return s.
getNZ(getMySubsystemIndex()); }
202 {
return s.
getNQErr(getMySubsystemIndex()); }
207 {
return s.
getNUErr(getMySubsystemIndex()); }
227 SimTK_ASSERT(q.size() == getNQ(s),
"Subsystem::Guts::setQ()");
231 SimTK_ASSERT(u.size() == getNU(s),
"Subsystem::Guts::setU()");
235 SimTK_ASSERT(z.size() == getNZ(s),
"Subsystem::Guts::setZ()");
264 bool isDiscreteVarUpdateValueRealized
267 void markDiscreteVarUpdateValueRealized
288 inline const String& getName()
const;
291 inline const String& getVersion()
const;
294 inline bool isInSystem()
const;
298 inline bool isInSameSystem(
const Subsystem& otherSubsystem)
const;
303 inline const System& getSystem()
const;
307 inline System& updSystem();
323 {
return guts && (guts==otherSubsystem.guts); }
328 inline bool isOwnerHandle()
const;
333 inline bool subsystemTopologyHasBeenRealized()
const;
342 inline void invalidateSubsystemTopologyCache()
const;
374 #endif // SimTK_SimTKCOMMON_SUBSYSTEM_H_
const Vector & getZWeights(SubsystemIndex) const
int getNQErr(const State &s) const
Definition: Subsystem.h:201
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:280
AbstractValue & updDiscreteVariable(State &s, DiscreteVariableIndex index) const
Definition: Subsystem.h:247
int getNQ(const State &s) const
Definition: Subsystem.h:186
Vector & updUErr(SubsystemIndex) const
const Vector & getZDot(const State &s) const
Definition: Subsystem.h:143
const Vector & getEventTriggersByStage(Stage) const
const Vector & getQDot(SubsystemIndex) const
Per-subsystem access to the shared cache entries.
int getNMultipliers(const State &s) const
Definition: Subsystem.h:216
CacheEntryIndex getDiscreteVarUpdateIndex(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the CacheEntryIndex for its associated update cache en...
EventTriggerByStageIndex allocateEventTrigger(SubsystemIndex, Stage stage, int nevent) const
Allocate room for nevent witness function values that will be available at the indicated stage.
UDotErrIndex allocateUDotErr(const State &s, int nudoterr) const
Definition: Subsystem.h:118
int getNU() const
Get total number of shared u's (generalized speeds; mobilities).
A Subsystem is expected to be part of a larger System and to have interdependencies with other subsys...
Definition: Subsystem.h:55
SystemUDotErrIndex getUDotErrStart(SubsystemIndex) const
SystemYErrIndex getQErrStart() const
Returns the yErr index at which the qErr's begin. Callable at Instance stage.
Real getDiscreteVarLastUpdateTime(const State &s, DiscreteVariableIndex dx) const
Definition: Subsystem.h:253
Vector & updZ(SubsystemIndex)
SystemEventTriggerByStageIndex getEventTriggerStartByStage(const State &s, Stage g) const
Definition: Subsystem.h:219
Vector & updEventTriggersByStage(Stage) const
int getNUDotErr() const
Return the total number nudotErr=mp+mv+ma of cache entries for acceleration-level constraint errors (...
bool isCacheValueRealized(SubsystemIndex, CacheEntryIndex) const
Check whether the value in a particular cache entry has been recalculated since the last change to th...
AbstractValue & updDiscreteVariable(SubsystemIndex, DiscreteVariableIndex)
Get a writable reference to the value stored in the indicated discrete state variable dv,...
Vector & updU(SubsystemIndex)
Vector & updEventTriggersByStage(const State &s, Stage g) const
Definition: Subsystem.h:181
bool isCacheValueRealized(const State &s, CacheEntryIndex cx) const
Definition: Subsystem.h:271
int getNZ() const
Get total number of shared z's (auxiliary state variables).
Vector & updQ(SubsystemIndex)
const AbstractValue & getDiscreteVarUpdateValue(const State &s, DiscreteVariableIndex dx) const
Definition: Subsystem.h:259
Vector & updQDot(SubsystemIndex) const
#define SimTK_ASSERT(cond, msg)
Definition: ExceptionMacros.h:373
void setZ(State &s, const Vector &z) const
Definition: Subsystem.h:234
const AbstractValue & getCacheEntry(const State &s, CacheEntryIndex index) const
Definition: Subsystem.h:249
AbstractValue & updDiscreteVarUpdateValue(const State &s, DiscreteVariableIndex dx) const
Definition: Subsystem.h:262
SystemYIndex getUStart() const
Returns the y index at which the u's begin. Callable at Model stage.
Vector & updUDot(const State &s) const
Definition: Subsystem.h:150
This is a System that represents the dynamics of a particle moving along a smooth surface.
Definition: Assembler.h:37
const Vector & getEventTriggersByStage(const State &s, Stage g) const
Definition: Subsystem.h:170
const Vector & getQErrWeights(const State &s) const
Definition: Subsystem.h:161
const Vector & getUErr(SubsystemIndex) const
const Vector & getQDot(const State &s) const
Definition: Subsystem.h:139
Vector & updMultipliers(const State &s) const
Definition: Subsystem.h:179
DiscreteVariableIndex allocateDiscreteVariable(SubsystemIndex, Stage invalidates, AbstractValue *)
The Stage supplied here in the call is the earliest subsystem stage which is invalidated by a change ...
AbstractValue & updDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return a writable reference to the value of its associated up...
const Vector & getQDotDot(SubsystemIndex) const
const Vector & getZDot(SubsystemIndex) const
void setU(State &s, const Vector &u) const
Definition: Subsystem.h:230
void advanceToStage(const State &s, Stage g) const
Definition: Subsystem.h:241
Vector & updUErr(const State &s) const
Definition: Subsystem.h:175
const AbstractValue & getCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a const reference to the value contained in a particular cache entry.
SystemYIndex getZStart() const
Returns the y index at which the z's begin. Callable at Model stage.
SystemZIndex getZStart(const State &s) const
Definition: Subsystem.h:194
const Vector & getQErr(SubsystemIndex) const
UErrIndex allocateUErr(const State &s, int nuerr) const
Definition: Subsystem.h:116
The abstract parent of all Subsystem implementation classes.
Definition: SubsystemGuts.h:47
const Vector & getU(const State &s) const
Definition: Subsystem.h:126
UDotErrIndex allocateUDotErr(SubsystemIndex, int nudoterr) const
Allocate nudoterr cache slots to hold the current error for acceleration-level (acceleration-only,...
Vector & updU(State &s) const
Definition: Subsystem.h:136
AbstractValue & updCacheEntry(const State &s, CacheEntryIndex index) const
Definition: Subsystem.h:251
AbstractValue & updCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a writable reference to the value contained in a particular cache entry.
SystemUIndex getUStart(const State &s) const
Definition: Subsystem.h:189
const Vector & getZWeights(const State &s) const
Definition: Subsystem.h:132
int getNU(const State &s) const
Definition: Subsystem.h:191
This is the base class for all Measure handle classes.
Definition: Measure.h:151
Vector & updQDotDot(SubsystemIndex) const
SystemMultiplierIndex getMultipliersStart(const State &s) const
Definition: Subsystem.h:214
QIndex allocateQ(SubsystemIndex, const Vector &qInit)
Allocate generalized coordinates q, which are second order continuous state variables.
CacheEntryIndex allocateCacheEntry(SubsystemIndex, Stage earliest, Stage latest, AbstractValue *value) const
There are two Stages supplied explicitly as arguments to this method: earliest and latest.
#define SimTK_SimTKCOMMON_EXPORT
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:224
const Vector & getUErrWeights(const State &s) const
Definition: Subsystem.h:163
Vector & updQErr(const State &s) const
Definition: Subsystem.h:173
const Vector & getQ(const State &s) const
Definition: Subsystem.h:124
const Vector & getQ(SubsystemIndex) const
Per-subsystem access to the global shared variables.
void setQ(State &s, const Vector &q) const
Definition: Subsystem.h:226
Stage getStage(const State &s) const
Definition: Subsystem.h:239
void markDiscreteVarUpdateValueRealized(SubsystemIndex, DiscreteVariableIndex) const
Mark the update value for this auto-update discrete variable as up-to-date with respect to the state ...
Vector & updQErr(SubsystemIndex) const
QErrIndex allocateQErr(SubsystemIndex, int nqerr) const
Allocate nqerr cache slots to hold the current error for position-level (holonomic) constraint equati...
UIndex allocateU(SubsystemIndex, const Vector &uInit)
Allocate generalized speeds u, which are first order continuous state variables related to the deriva...
Abstract base class representing an arbitrary value of unknown type.
Definition: Value.h:49
const Vector & getMultipliers(const State &s) const
Definition: Subsystem.h:168
int getNEventTriggersByStage(const State &s, Stage g) const
Definition: Subsystem.h:221
Vector & updZ(State &s) const
Definition: Subsystem.h:137
SystemUErrIndex getUErrStart(const State &s) const
Definition: Subsystem.h:204
Vector & updUDotErr(const State &s) const
Definition: Subsystem.h:177
ZIndex allocateZ(State &s, const Vector &zInit) const
Definition: Subsystem.h:92
Vector & updZDot(SubsystemIndex) const
This class is basically a glorified enumerated type, type-safe and range checked but permitting conve...
Definition: Stage.h:66
DiscreteVariableIndex allocateDiscreteVariable(State &s, Stage g, AbstractValue *v) const
Definition: Subsystem.h:96
const AbstractValue & getDiscreteVariable(const State &s, DiscreteVariableIndex index) const
Definition: Subsystem.h:245
Vector & updQ(State &s) const
Definition: Subsystem.h:135
bool isSameSubsystem(const Subsystem &otherSubsystem) const
Determine if this Subsystem handle refers to the same Subsystem::Guts object as handle otherSubsystem...
Definition: Subsystem.h:322
Vector & updQDot(const State &s) const
Definition: Subsystem.h:148
ZIndex allocateZ(SubsystemIndex, const Vector &zInit)
Allocate auxiliary first order continuous state variables z.
const Vector & getZ(SubsystemIndex) const
const Vector & getQErr(const State &s) const
Definition: Subsystem.h:157
SystemEventTriggerIndex getEventTriggerStartByStage(Stage) const
Return the index within the global event trigger array at which the first of the event triggers assoc...
Vector & updUDot(SubsystemIndex) const
int getNUErr(const State &s) const
Definition: Subsystem.h:206
EventTriggerByStageIndex allocateEventTriggersByStage(const State &s, Stage g, int ntriggers) const
Definition: Subsystem.h:121
void markCacheValueRealized(const State &s, CacheEntryIndex cx) const
Definition: Subsystem.h:273
const Vector & getUDot(const State &s) const
Definition: Subsystem.h:141
bool isEmptyHandle() const
Return true if this handle has a null Subsystem::Guts pointer.
Definition: Subsystem.h:317
void markCacheValueNotRealized(const State &s, CacheEntryIndex cx) const
Definition: Subsystem.h:275
int getNQErr() const
Return the total number nqerr=mp+nQuaternions of cache entries for position-level constraint errors.
const Vector & getQErrWeights(SubsystemIndex) const
bool isDiscreteVarUpdateValueRealized(SubsystemIndex, DiscreteVariableIndex) const
Check whether the update value for this auto-update discrete variable has already been computed since...
const Vector & getZ(const State &s) const
Definition: Subsystem.h:128
int getNMultipliers() const
Return the total number of constraint multipliers; necessarily the same as the number of acceleration...
Vector & updZDot(const State &s) const
Definition: Subsystem.h:152
DiscreteVariableIndex allocateAutoUpdateDiscreteVariable(SubsystemIndex, Stage invalidates, AbstractValue *, Stage updateDependsOn)
This method allocates a DiscreteVariable whose value should be updated automatically after each time ...
SystemYIndex getQStart() const
Returns the y index at which the q's begin. Callable at Model stage.
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
void advanceSubsystemToStage(SubsystemIndex, Stage) const
Advance a particular Subsystem's current stage by one to the indicated stage.
Vector & updQDotDot(const State &s) const
Definition: Subsystem.h:154
const AbstractValue & getDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the current value of its associated update cache entry...
CacheEntryIndex getDiscreteVarUpdateIndex(const State &s, DiscreteVariableIndex dx) const
Definition: Subsystem.h:256
const Stage & getSubsystemStage(SubsystemIndex) const
@ Infinity
Higher than any legitimate Stage.
Definition: Stage.h:79
SystemUDotErrIndex getUDotErrStart(const State &s) const
Definition: Subsystem.h:209
const Vector & getUWeights(const State &s) const
Definition: Subsystem.h:130
bool hasGuts() const
Obtain the Subsystem name if one was given on construction of the concrete Subsystem.
Definition: Subsystem.h:362
const AbstractValue & getDiscreteVariable(SubsystemIndex, DiscreteVariableIndex) const
Get the current value of the indicated discrete variable.
const Vector & getUDotErr(const State &s) const
Definition: Subsystem.h:166
const Vector & getUErr(const State &s) const
Definition: Subsystem.h:159
const Vector & getQDotDot(const State &s) const
Definition: Subsystem.h:145
UErrIndex allocateUErr(SubsystemIndex, int nuerr) const
Allocate nuerr cache slots to hold the current error for velocity-level (nonholonomic and holonomic f...
void markCacheValueNotRealized(SubsystemIndex, CacheEntryIndex) const
(Advanced) Normally cache entries are invalidated automatically, however this method allows manual in...
Subsystem::Guts & updSubsystemGuts()
Obtain the Subsystem name if one was given on construction of the concrete Subsystem.
Definition: Subsystem.h:354
This is the base handle class for all Measures whose value type is known, including all the Simbody b...
Definition: Measure.h:261
int getNZ(const State &s) const
Definition: Subsystem.h:196
int getNUErr() const
Return the total number nuerr=mp+mv of cache entries for velocity-level constraint errors (including ...
const Vector & getUErrWeights(SubsystemIndex) const
QErrIndex allocateQErr(const State &s, int nqerr) const
Definition: Subsystem.h:114
UIndex allocateU(State &s, const Vector &uInit) const
Definition: Subsystem.h:90
int getNEventTriggersByStage(Stage) const
Return the size of the partition of event trigger functions which are evaluated at a given Stage.
SimTK::String is a plug-compatible std::string replacement (plus some additional functionality) inten...
Definition: String.h:62
QIndex allocateQ(State &s, const Vector &qInit) const
Definition: Subsystem.h:88
This is the base class that serves as the parent of all SimTK System objects; most commonly Simbody's...
Definition: System.h:97
const Vector & getMultipliers(SubsystemIndex) const
const Vector & getUDotErr(SubsystemIndex) const
Real getDiscreteVarLastUpdateTime(SubsystemIndex, DiscreteVariableIndex) const
Return the time of last update for this discrete variable.
Vector & updUDotErr(SubsystemIndex) const
SystemQIndex getQStart(const State &s) const
Definition: Subsystem.h:184
SystemYErrIndex getUErrStart() const
Returns the yErr index at which the uErr's begin. Callable at Instance stage.
Subsystem()
Default constructor creates and empty handle with a null Subsystem::Guts pointer.
Definition: Subsystem.h:62
SystemQErrIndex getQErrStart(const State &s) const
Definition: Subsystem.h:199
void markCacheValueRealized(SubsystemIndex, CacheEntryIndex) const
Mark the value of a particular cache entry as up to date after it has been recalculated.
Measure_< T > getMeasure_(MeasureIndex mx) const
Obtain the Subsystem name if one was given on construction of the concrete Subsystem.
Definition: Subsystem.h:348
SystemMultiplierIndex getMultipliersStart(SubsystemIndex) const
const Subsystem::Guts & getSubsystemGuts() const
Obtain the Subsystem name if one was given on construction of the concrete Subsystem.
Definition: Subsystem.h:353
const Vector & getU(SubsystemIndex) const
const Vector & getUWeights(SubsystemIndex) const
int getNQ() const
Get total number of shared q's (generalized coordinates; second order state variables).
Vector & updMultipliers(SubsystemIndex) const
Subsystem(Subsystem::Guts *g)
Obtain the Subsystem name if one was given on construction of the concrete Subsystem.
Definition: Subsystem.h:361
const Vector & getUDot(SubsystemIndex) const
int getNUDotErr(const State &s) const
Definition: Subsystem.h:211