1#ifndef SimTK_SimTKCOMMON_STATE_H_
2#define SimTK_SimTKCOMMON_STATE_H_
159class PerSubsystemInfo;
160class DiscreteVarInfo;
162class ListOfDependents;
707{
return allocateCacheEntry(sx, stage, stage, value); }
720 return allocateCacheEntry(sx, earliest, Stage::Infinity, value);
730 bool q,
bool u,
bool z,
1218const StateImpl& getImpl()
const {assert(impl);
return *impl;}
1219StateImpl& updImpl() {assert(impl);
return *impl;}
This file declares the types needed for Simbody's support for Events.
#define SimTK_SimTKCOMMON_EXPORT
Definition SimTKcommon/include/SimTKcommon/internal/common.h:224
#define SimTK_DEFINE_UNIQUE_INDEX_TYPE(NAME)
Use this macro to define a unique "Index" type which is just a type-safe non-negative int,...
Definition SimTKcommon/include/SimTKcommon/internal/common.h:426
#define SimTK_FORCE_INLINE
Definition SimTKcommon/include/SimTKcommon/internal/common.h:269
This is the header which should be included in user programs that would like to make use of all the S...
This is part of the internal implementation of SimTK::State and does not contain any user-visible obj...
Includes internal headers providing declarations for the basic SimTK Core classes.
Abstract base class representing an arbitrary value of unknown type.
Definition Value.h:49
The Array_<T> container class is a plug-compatible replacement for the C++ standard template library ...
Definition Array.h:1520
This unique integer type is for selecting non-shared cache entries.
This unique integer type is for selecting discrete variables.
Unique integer type for Subsystem-local, per-stage event indexing.
Unique integer type for Subsystem-local multiplier indexing.
Unique integer type for Subsystem-local qErr indexing.
Unique integer type for Subsystem-local q indexing.
This class is basically a glorified enumerated type, type-safe and range checked but permitting conve...
Definition Stage.h:66
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition State.h:280
SystemEventTriggerIndex getEventTriggerStartByStage(Stage) const
Return the index within the global event trigger array at which the first of the event triggers assoc...
int getNYErr() const
Get the total number nyerr=nqerr+nuerr of shared cache entries for position-level and velocity-level ...
Vector & updQErrWeights()
Set the unit weighting (1/unit error) for each of the mp+mquat position inline constraint equations.
void invalidateAll(Stage)
If any subsystem or the system stage is currently at or higher than the passed-in one,...
void setDiscreteVariable(SubsystemIndex, DiscreteVariableIndex, const AbstractValue &)
Alternate interface to updDiscreteVariable.
const Vector & getEventTriggers() const
int getNQErr() const
Return the total number nqerr=mp+nQuaternions of cache entries for position-level constraint errors.
int getNEventTriggers() const
Return the total number of event trigger function slots in the cache.
int getNU(SubsystemIndex) const
int getNUDotErr() const
Return the total number nudotErr=mp+mv+ma of cache entries for acceleration-level constraint errors (...
void setU(const Vector &u)
Vector & updUDotErr(SubsystemIndex) const
const PerSubsystemInfo & getPerSubsystemInfo(SubsystemIndex) const
(Advanced) Return a reference to the per-subsystem information in the state.
const Vector & getQDot(SubsystemIndex) const
Per-subsystem access to the shared cache entries.
const Vector & getUErrWeights() const
Get the unit weighting (1/unit error) for each of the mp+mv velocity-level inline constraint equation...
void setY(const Vector &y)
const Stage & getSubsystemStage(SubsystemIndex) const
int getNQErr(SubsystemIndex) const
~State()
Destruct this State object and free up the heap space it is using.
void setSystemTopologyStageVersion(StageVersion topoVersion)
(Advanced) This explicitly modifies the Topology stage version; don't use this method unless you know...
SystemYErrIndex getUErrStart() const
Returns the yErr index at which the uErr's begin. Callable at Instance stage.
Vector & updUErr(SubsystemIndex) const
SystemZIndex getZStart(SubsystemIndex) const
State(State &&source)
The move constructor is very fast. The source object is left empty.
Vector & updUErrWeights(SubsystemIndex)
Vector & updZDot(SubsystemIndex) const
Vector & updQErrWeights(SubsystemIndex)
const ListOfDependents & getUDependents() const
(Advanced) Return the list of cache entries for which u was specified as an explicit prerequisite.
const DiscreteVarInfo & getDiscreteVarInfo(const DiscreteVarKey &discreteVar) const
(Advanced) Return a reference to the discrete variable information for a particular discrete variable...
void markCacheValueNotRealized(SubsystemIndex, CacheEntryIndex) const
(Advanced) Normally cache entries are invalidated automatically, however this method allows manual in...
CacheEntryInfo & updCacheEntryInfo(const CacheEntryKey &cacheEntry)
(Advanced) Return a writable reference to the cache entry information for a particular cache entry.
void autoUpdateDiscreteVariables()
(Advanced) This is called at the beginning of every integration step to set the values of auto-update...
QIndex allocateQ(SubsystemIndex, const Vector &qInit)
Allocate generalized coordinates q, which are second order continuous state variables.
int getNQ() const
Get total number of shared q's (generalized coordinates; second order state variables).
bool hasDiscreteVar(const DiscreteVarKey &discreteVar) const
(Advanced) Check whether this State has a particular discrete state variable.
int getNUDotErr(SubsystemIndex) const
Vector & updZWeights(SubsystemIndex)
const AbstractValue & getDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the current value of its associated update cache entry...
const Vector & getUErr(SubsystemIndex) const
const Vector & getZ(SubsystemIndex) const
const Vector & getEventTriggersByStage(Stage) const
const Vector & getQ(SubsystemIndex) const
Per-subsystem access to the global shared variables.
Vector & updZ(SubsystemIndex)
String cacheToString() const
(Debugging) Not suitable for serialization.
const Vector & getZ() const
bool hasCacheEntry(const CacheEntryKey &cacheEntry) const
(Advanced) Check whether this State has a particular cache entry.
bool isConsistent(const SimTK::State &otherState) const
Checks if a given state has the same number of state variables, constraints, etc as this state.
ValueVersion getQValueVersion() const
(Advanced) Return a ValueVersion for q, meaning an integer that is incremented whenever any q is chan...
const Vector & getQErrWeights() const
Get the unit weighting (1/unit error) for each of the mp+mquat position inline constraints equations.
const Vector & getU(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 & getQDotDot(SubsystemIndex) const
const Vector & getZWeights(SubsystemIndex) const
void setZ(const Vector &z)
Vector & updUWeights(SubsystemIndex)
const Vector & getU() const
QErrIndex allocateQErr(SubsystemIndex, int nqerr) const
Allocate nqerr cache slots to hold the current error for position-level (holonomic) constraint equati...
Vector & updYErr() const
These are mutable.
SystemEventTriggerByStageIndex getEventTriggerStartByStage(SubsystemIndex, Stage) const
ValueVersion getZValueVersion() const
(Advanced) Return a ValueVersion for z, meaning an integer that is incremented whenever any z is chan...
const Vector & getQErrWeights(SubsystemIndex) const
SystemUIndex getUStart(SubsystemIndex) const
const AbstractValue & getDiscreteVariable(SubsystemIndex, DiscreteVariableIndex) const
Get the current value of the indicated discrete variable.
void setNumSubsystems(int i)
Set the number of subsystems in this state.
const Vector & getUWeights(SubsystemIndex) const
const Vector & getUErrWeights(SubsystemIndex) const
const Stage & getSystemStage() const
This returns the global stage for this State.
int getNUErr(SubsystemIndex) const
Vector & updEventTriggersByStage(SubsystemIndex, Stage) const
Stage getDiscreteVarInvalidatesStage(SubsystemIndex, DiscreteVariableIndex) const
What is the earliest stage that is invalidated when this discrete variable is modified?...
SystemYIndex getUStart() const
Returns the y index at which the u's begin. Callable at Model stage.
SystemYErrIndex getQErrStart() const
Returns the yErr index at which the qErr's begin. Callable at Instance stage.
CacheEntryIndex allocateLazyCacheEntry(SubsystemIndex sx, Stage earliest, AbstractValue *value) const
This is an abbreviation for allocation of a lazy cache entry.
Definition State.h:718
int getNumSubsystems() const
Return the number of Subsystems known to this State.
State & operator=(const State &)
Copy assignment has deep copy semantics; that is, this State will contain a copy of the source,...
Vector & updYDot() const
These are mutable.
const String & getSubsystemName(SubsystemIndex) const
CacheEntryIndex allocateCacheEntryWithPrerequisites(SubsystemIndex, Stage earliest, Stage latest, bool q, bool u, bool z, const Array_< DiscreteVarKey > &discreteVars, const Array_< CacheEntryKey > &cacheEntries, AbstractValue *value)
(Advanced) Allocate a cache entry with prerequisites other than just reaching a particular computatio...
int getNU() const
Get total number of shared u's (generalized speeds; mobilities).
Vector & updZWeights()
Set z weights.
const ListOfDependents & getZDependents() const
(Advanced) Return the list of cache entries for which z was specified as an explicit prerequisite.
AbstractValue & updCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a writable reference to the value contained in a particular cache entry.
State()
Create an empty State; this allocates an implementation object on the heap.
State & operator=(State &&source)
Move assignment is very fast.
const AbstractValue & getCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a const reference to the value contained in a particular cache entry.
const Vector & getZDot(SubsystemIndex) const
Vector & updQDot(SubsystemIndex) const
Vector & updUErrWeights()
Set the unit weighting (1/unit error) for each of the mp+mv velocity-level inline constraints.
const Vector & getUDotErr() const
These have their own space, they are not views.
Stage getDiscreteVarAllocationStage(SubsystemIndex, DiscreteVariableIndex) const
At what stage was this State when this discrete variable was allocated? The answer must be Stage::Emp...
const Vector & getUErr() const
const Real & getTime() const
You can call these as long as system stage >= Model.
SystemYIndex getQStart() const
Returns the y index at which the q's begin. Callable at Model stage.
const String & getSubsystemVersion(SubsystemIndex) const
Vector & updQDotDot() const
This is a separate shared cache entry, not part of YDot.
Vector & updMultipliers() const
SystemMultiplierIndex getMultipliersStart(SubsystemIndex) const
Real getDiscreteVarLastUpdateTime(SubsystemIndex, DiscreteVariableIndex) const
Return the time of last update for this discrete variable.
const Vector & getQ() const
These are just views into Y.
StageVersion getSystemTopologyStageVersion() const
The Topology stage version number (an integer) stored in this State must match the topology cache ver...
void advanceSubsystemToStage(SubsystemIndex, Stage) const
Advance a particular Subsystem's current stage by one to the indicated stage.
AbstractValue & updDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return a writable reference to the value of its associated up...
std::mutex & getStateLock() const
Returns a mutex that should be used to lock the state whenever multiple threads are asynchronously wr...
SystemQErrIndex getQErrStart(SubsystemIndex) const
void advanceSystemToStage(Stage) const
Advance the System-level current stage by one to the indicated stage.
void setQ(const Vector &q)
Alternate interface.
Vector & updQErr(SubsystemIndex) const
void markCacheValueRealized(SubsystemIndex, CacheEntryIndex) const
Mark the value of a particular cache entry as up to date after it has been recalculated.
const Vector & getUDot() const
UDotErrIndex allocateUDotErr(SubsystemIndex, int nudoterr) const
Allocate nudoterr cache slots to hold the current error for acceleration-level (acceleration-only,...
SystemYIndex getZStart() const
Returns the y index at which the z's begin. Callable at Model stage.
Vector & updQ(SubsystemIndex)
const Vector & getQDot() const
These are just views into YDot.
CacheEntryIndex getDiscreteVarUpdateIndex(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the CacheEntryIndex for its associated update cache en...
int getNMultipliers(SubsystemIndex) const
UErrIndex allocateUErr(SubsystemIndex, int nuerr) const
Allocate nuerr cache slots to hold the current error for velocity-level (nonholonomic and holonomic f...
Vector & updUDot(SubsystemIndex) const
Vector & updQ()
These are just views into Y.
Stage getCacheEntryAllocationStage(SubsystemIndex, CacheEntryIndex) const
At what stage was this State when this cache entry was allocated? The answer must be Stage::Empty,...
ValueVersion getUValueVersion() const
(Advanced) Return a ValueVersion for u, meaning an integer that is incremented whenever any u is chan...
int getNZ() const
Get total number of shared z's (auxiliary state variables).
const Vector & getYDot() const
int getNEventTriggersByStage(SubsystemIndex, Stage) const
DiscreteVariableIndex allocateAutoUpdateDiscreteVariable(SubsystemIndex, Stage invalidates, AbstractValue *, Stage updateDependsOn)
This method allocates a DiscreteVariable whose value should be updated automatically after each time ...
int getNY() const
Get the total number ny=nq+nu+nz of shared continuous state variables.
void invalidateAllCacheAtOrAbove(Stage) const
If any subsystem or the system stage is currently at or higher than the passed-in one,...
int getNUErr() const
Return the total number nuerr=mp+mv of cache entries for velocity-level constraint errors (including ...
const Vector & getZDot() const
Vector & updQDotDot(SubsystemIndex) const
Vector & updUWeights()
Set u weights (and q weights indirectly).
SubsystemIndex addSubsystem(const String &name, const String &version)
Register a new subsystem as a client of this State.
const Vector & getMultipliers() const
const Vector & getQErr(SubsystemIndex) const
Vector & updUDotErr() const
int getNMultipliers() const
Return the total number of constraint multipliers; necessarily the same as the number of acceleration...
const Vector & getMultipliers(SubsystemIndex) const
Stage getLowestSystemStageDifference(const Array_< StageVersion > &prevVersions) const
(Advanced) Given a list of per-stage version numbers extracted by an earlier call to getSystemStageVe...
const Vector & getYErr() const
Return the current constraint errors for all constraints.
State(const State &)
The copy constructor has deep copy semantics; that is, this creates a new copy of the source object,...
SystemUDotErrIndex getUDotErrStart(SubsystemIndex) const
CacheEntryIndex allocateCacheEntry(SubsystemIndex sx, Stage stage, AbstractValue *value) const
This is an abbreviation for allocation of a cache entry whose earliest and latest Stages are the same...
Definition State.h:705
Vector & updEventTriggersByStage(Stage) const
const Vector & getQDotDot() const
This has its own space, not a view.
SystemQIndex getQStart(SubsystemIndex) const
const Vector & getEventTriggersByStage(SubsystemIndex, Stage) const
AbstractValue & updDiscreteVariable(SubsystemIndex, DiscreteVariableIndex)
Get a writable reference to the value stored in the indicated discrete state variable dv,...
SystemUErrIndex getUErrStart(SubsystemIndex) const
String toString() const
(Debugging) Not suitable for serialization.
CacheEntryIndex allocateCacheEntry(SubsystemIndex, Stage earliest, Stage latest, AbstractValue *value) const
There are two Stages supplied explicitly as arguments to this method: earliest and latest.
const ListOfDependents & getQDependents() const
(Advanced) Return the list of cache entries for which q was specified as an explicit prerequisite.
int getNZ(SubsystemIndex) const
int getNQ(SubsystemIndex) const
Real & updTime()
You can call these as long as System stage >= Model, but the stage will be backed up if necessary to ...
const Vector & getUDot(SubsystemIndex) const
void markDiscreteVarUpdateValueRealized(SubsystemIndex, DiscreteVariableIndex) const
Mark the update value for this auto-update discrete variable as up-to-date with respect to the state ...
const Vector & getQErr() const
These are just views into YErr.
Vector & updEventTriggers() const
UIndex allocateU(SubsystemIndex, const Vector &uInit)
Allocate generalized speeds u, which are first order continuous state variables related to the deriva...
Vector & updU(SubsystemIndex)
int getNEventTriggersByStage(Stage) const
Return the size of the partition of event trigger functions which are evaluated at a given Stage.
void initializeSubsystem(SubsystemIndex, const String &name, const String &version)
Set the name and version for a given subsystem, which must already have a slot allocated.
DiscreteVariableIndex allocateDiscreteVariable(SubsystemIndex, Stage invalidates, AbstractValue *)
The Stage supplied here in the call is the earliest subsystem stage which is invalidated by a change ...
const Vector & getY() const
const CacheEntryInfo & getCacheEntryInfo(const CacheEntryKey &cacheEntry) const
(Advanced) Return a const reference to the cache entry information for a particular cache entry.
EventTriggerByStageIndex allocateEventTrigger(SubsystemIndex, Stage stage, int nevent) const
Allocate room for nevent witness function values that will be available at the indicated stage.
ZIndex allocateZ(SubsystemIndex, const Vector &zInit)
Allocate auxiliary first order continuous state variables z.
void setTime(Real t)
An alternate syntax equivalent to updTime() and updY().
bool isCacheValueRealized(SubsystemIndex, CacheEntryIndex) const
Check whether the value in a particular cache entry has been recalculated since the last change to th...
void getSystemStageVersions(Array_< StageVersion > &versions) const
(Advanced) Record the current version numbers of each valid System-level stage.
const Vector & getZWeights() const
Get a unit weighting (1/unit change) for each z that can be used to weight a vector dz so that the di...
const Vector & getUWeights() const
Get a unit weighting (1/unit change) for each u that can be used to weight a vector du so that the di...
void clear()
Restore State to default-constructed condition.
Vector & updMultipliers(SubsystemIndex) const
const Vector & getUDotErr(SubsystemIndex) const
SimTK::String is a plug-compatible std::string replacement (plus some additional functionality) inten...
Definition String.h:62
Provide a unique integer type for identifying Subsystems.
This unique integer type is for identifying a triggered event within a particular Stage of the full S...
This unique integer type is for identifying a triggered event in the full System-level view of the St...
This unique integer type is for indexing global "multiplier-like" arrays, that is,...
This unique integer type is for indexing global "qErr-like" arrays, that is, arrays that inherently h...
This unique integer type is for indexing global "q-like" arrays, that is, arrays that inherently have...
This unique integer type is for indexing global "uDotErr-like" arrays, that is, arrays that inherentl...
This unique integer type is for indexing global "uErr-like" arrays, that is, arrays that inherently h...
This unique integer type is for indexing global "u-like" arrays, that is, arrays that inherently have...
This unique integer type is for indexing the global, System-level "yErr-like" arrays,...
This unique integer type is for indexing the global, System-level "y-like" arrays,...
This unique integer type is for indexing global "z-like" arrays, that is, arrays that inherently have...
Unique integer type for Subsystem-local uDotErr indexing.
Unique integer type for Subsystem-local uErr indexing.
Unique integer type for Subsystem-local u indexing.
Unique integer type for Subsystem-local z indexing.
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition Assembler.h:37
std::pair< SubsystemIndex, DiscreteVariableIndex > DiscreteVarKey
Definition State.h:165
long long StageVersion
This is the type to use for Stage version numbers that get incremented whenever a state variable chan...
Definition Stage.h:44
long long ValueVersion
This is the type to use for state variable version numbers that get incremented whenever a state valu...
Definition Stage.h:52
std::pair< SubsystemIndex, CacheEntryIndex > CacheEntryKey
Definition State.h:164
std::ostream & operator<<(std::ostream &o, const ContactForce &f)
Definition CompliantContactSubsystem.h:387
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