Simbody  3.8
State.h
Go to the documentation of this file.
1 #ifndef SimTK_SimTKCOMMON_STATE_H_
2 #define SimTK_SimTKCOMMON_STATE_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm): SimTKcommon *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org. *
11  * *
12  * Portions copyright (c) 2005-15 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: Peter Eastman *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
31 // Note: the StateImpl.h header is included at the end of this file to
32 // complete the inline part of the State definition.
33 #include "SimTKcommon/basics.h"
34 #include "SimTKcommon/Simmatrix.h"
36 
37 #include <ostream>
38 #include <cassert>
39 #include <algorithm>
40 #include <mutex>
41 #include <array>
42 
43 namespace SimTK {
44 
45 
49 
57 
70 
82 
94 
100 
106 
113 
124 
135 
146 
157 
158 class StateImpl;
159 class PerSubsystemInfo;
160 class DiscreteVarInfo;
161 class CacheEntryInfo;
162 class ListOfDependents;
163 
164 using CacheEntryKey = std::pair<SubsystemIndex,CacheEntryIndex>;
165 using DiscreteVarKey = std::pair<SubsystemIndex,DiscreteVariableIndex>;
166 
281 public:
284 
291 State(const State&);
292 
294 State(State&& source);
295 
303 
306 State& operator=(State&& source);
307 
310 
312 void clear();
313 
337 bool isConsistent(const SimTK::State& otherState) const;
338 
342 inline void setNumSubsystems(int i);
343 
346 inline void initializeSubsystem(SubsystemIndex, const String& name,
347  const String& version);
348 
355 inline SubsystemIndex addSubsystem(const String& name, const String& version);
356 
358 inline int getNumSubsystems() const;
359 inline const String& getSubsystemName (SubsystemIndex) const;
361 inline const Stage& getSubsystemStage (SubsystemIndex) const;
362 
364 inline const Stage& getSystemStage() const;
365 
372 inline void invalidateAll(Stage);
373 
382 
394 inline void advanceSystemToStage(Stage) const;
395 
401 
418 inline QIndex allocateQ(SubsystemIndex, const Vector& qInit);
426 inline UIndex allocateU(SubsystemIndex, const Vector& uInit);
432 inline ZIndex allocateZ(SubsystemIndex, const Vector& zInit);
449 inline QErrIndex allocateQErr (SubsystemIndex, int nqerr) const;
452 inline UErrIndex allocateUErr (SubsystemIndex, int nuerr) const;
457 inline UDotErrIndex allocateUDotErr(SubsystemIndex, int nudoterr) const;
477 allocateEventTrigger(SubsystemIndex, Stage stage, int nevent) const;
504 inline DiscreteVariableIndex
506 
559  AbstractValue*, Stage updateDependsOn);
562 inline CacheEntryIndex
566 inline Stage
572 inline Stage
574 
575 
578 inline const AbstractValue&
581 inline Real
587 inline const AbstractValue&
594 inline AbstractValue&
599 inline bool
603 inline void
605 
609 inline AbstractValue&
612 inline void
696 inline CacheEntryIndex
698  AbstractValue* value) const;
699 
704 inline CacheEntryIndex
706  AbstractValue* value) const
707 { return allocateCacheEntry(sx, stage, stage, value); }
708 
717 inline CacheEntryIndex
719  AbstractValue* value) const {
720  return allocateCacheEntry(sx, earliest, Stage::Infinity, value);
721 }
722 
727 inline CacheEntryIndex
729  (SubsystemIndex, Stage earliest, Stage latest,
730  bool q, bool u, bool z,
731  const Array_<DiscreteVarKey>& discreteVars,
732  const Array_<CacheEntryKey>& cacheEntries,
733  AbstractValue* value);
734 
737 inline Stage
739 
746 inline const AbstractValue&
748 
755 inline AbstractValue&
757 
767 
781 
806 
810 inline int getNY() const;
815 inline int getNQ() const;
817 inline SystemYIndex getQStart() const;
821 inline int getNU() const;
823 inline SystemYIndex getUStart() const;
827 inline int getNZ() const;
829 inline SystemYIndex getZStart() const;
833 inline int getNYErr() const;
836 inline int getNQErr() const;
842 inline int getNUErr() const;
849 inline int getNUDotErr() const;
854 inline int getNMultipliers() const; // =mp+mv+ma, necessarily the same as NUDotErr
857 inline int getNEventTriggers() const;
860 inline int getNEventTriggersByStage(Stage) const;
870 inline std::mutex& getStateLock() const;
871 
873 
887 
889 inline int getNQ(SubsystemIndex) const;
891 inline int getNU(SubsystemIndex) const;
893 inline int getNZ(SubsystemIndex) const;
894 
896 inline int getNQErr(SubsystemIndex) const;
898 inline int getNUErr(SubsystemIndex) const;
900 inline int getNUDotErr(SubsystemIndex) const;
902 inline int getNMultipliers(SubsystemIndex) const;
903 
907 
909 
910 inline const Vector& getEventTriggers() const;
911 inline const Vector& getEventTriggersByStage(Stage) const;
913 
914 inline Vector& updEventTriggers() const; // mutable
917 
919 inline const Vector& getQ(SubsystemIndex) const;
920 inline const Vector& getU(SubsystemIndex) const;
921 inline const Vector& getZ(SubsystemIndex) const;
922 
923 inline const Vector& getUWeights(SubsystemIndex) const;
924 inline const Vector& getZWeights(SubsystemIndex) const;
925 
929 
932 
934 inline const Vector& getQDot(SubsystemIndex) const;
935 inline const Vector& getUDot(SubsystemIndex) const;
936 inline const Vector& getZDot(SubsystemIndex) const;
937 inline const Vector& getQDotDot(SubsystemIndex) const;
938 
939 inline Vector& updQDot(SubsystemIndex) const; // these are mutable
943 
944 inline const Vector& getQErr(SubsystemIndex) const;
945 inline const Vector& getUErr(SubsystemIndex) const;
946 inline const Vector& getUDotErr(SubsystemIndex) const;
947 inline const Vector& getMultipliers(SubsystemIndex) const;
948 
949 inline const Vector& getQErrWeights(SubsystemIndex) const;
950 inline const Vector& getUErrWeights(SubsystemIndex) const;
951 
952 inline Vector& updQErr(SubsystemIndex) const; // these are mutable
956 
959 
961 inline const Real& getTime() const;
962 inline const Vector& getY() const; // {Q,U,Z} packed and in that order
963 
965 inline const Vector& getQ() const;
966 inline const Vector& getU() const;
967 inline const Vector& getZ() const;
968 
969 
1004 inline const Vector& getUWeights() const; // diag(Wu)
1005 
1012 inline const Vector& getZWeights() const;
1013 
1018 
1023 
1026 inline Real& updTime(); // Back up to Stage::Time-1
1027 inline Vector& updY(); // Back up to Stage::Dynamics-1
1028 
1030 inline void setTime(Real t);
1031 inline void setY(const Vector& y);
1032 
1034 inline Vector& updQ(); // Back up to Stage::Position-1
1035 inline Vector& updU(); // Back up to Stage::Velocity-1
1036 inline Vector& updZ(); // Back up to Stage::Dynamics-1
1037 
1039 inline void setQ(const Vector& q);
1040 inline void setU(const Vector& u);
1041 inline void setZ(const Vector& z);
1042 
1043 inline const Vector& getYDot() const; // Stage::Acceleration
1044 
1046 inline const Vector& getQDot() const; // Stage::Velocity
1047 inline const Vector& getZDot() const; // Stage::Dynamics
1048 inline const Vector& getUDot() const; // Stage::Acceleration
1049 
1051 inline const Vector& getQDotDot() const; // Stage::Acceleration
1052 
1054 inline Vector& updYDot() const; // Stage::Acceleration-1
1055 inline Vector& updQDot() const; // Stage::Velocity-1 (view into YDot)
1056 inline Vector& updZDot() const; // Stage::Dynamics-1 "
1057 inline Vector& updUDot() const; // Stage::Acceleration-1 "
1058 
1062 inline Vector& updQDotDot() const; // Stage::Acceleration-1
1063 
1066 inline const Vector& getYErr() const; // Stage::Velocity
1067 
1069 inline const Vector& getQErr() const; // Stage::Position (index 3 constraints)
1070 inline const Vector& getUErr() const; // Stage::Velocity (index 2 constraints)
1071 
1073 inline const Vector& getUDotErr() const; // Stage::Acceleration (index 1 constraints)
1074 inline const Vector& getMultipliers() const; // Stage::Acceleration
1075 
1078 inline const Vector& getQErrWeights() const;
1079 
1090 inline const Vector& getUErrWeights() const;
1091 
1097 
1103 
1105 inline Vector& updYErr() const; // Stage::Velocity-1
1106 inline Vector& updQErr() const; // Stage::Position-1 (view into YErr)
1107 inline Vector& updUErr() const; // Stage::Velocity-1 "
1108 
1109 inline Vector& updUDotErr() const; // Stage::Acceleration-1 (not a view)
1110 inline Vector& updMultipliers() const; // Stage::Acceleration-1 (not a view)
1111 
1123 inline void getSystemStageVersions(Array_<StageVersion>& versions) const;
1124 
1135  (const Array_<StageVersion>& prevVersions) const;
1136 
1144 
1160 
1164 inline const ListOfDependents& getQDependents() const;
1168 inline const ListOfDependents& getUDependents() const;
1172 inline const ListOfDependents& getZDependents() const;
1173 
1175 inline bool hasCacheEntry(const CacheEntryKey& cacheEntry) const;
1176 
1179 SimTK_FORCE_INLINE const CacheEntryInfo&
1180 getCacheEntryInfo(const CacheEntryKey& cacheEntry) const;
1181 
1184 SimTK_FORCE_INLINE CacheEntryInfo&
1186 
1189 inline bool hasDiscreteVar(const DiscreteVarKey& discreteVar) const;
1190 
1193 SimTK_FORCE_INLINE const DiscreteVarInfo&
1194 getDiscreteVarInfo(const DiscreteVarKey& discreteVar) const;
1195 
1198 SimTK_FORCE_INLINE const PerSubsystemInfo&
1200 
1205 
1207 inline String toString() const;
1209 inline String cacheToString() const;
1212 //------------------------------------------------------------------------------
1213 // The implementation class and associated inline methods are defined in a
1214 // separate header file included below.
1215  private:
1216 StateImpl* impl;
1217 
1218 const StateImpl& getImpl() const {assert(impl); return *impl;}
1219 StateImpl& updImpl() {assert(impl); return *impl;}
1220 };
1221 
1222 // Dump state and cache to a stream for debugging; this is not serialization.
1224 operator<<(std::ostream& o, const State& s);
1225 
1226 } // namespace SimTK
1227 
1228 // This completes the inline definition of State.
1230 
1231 #endif // SimTK_SimTKCOMMON_STATE_H_
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_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
@ Infinity
Higher than any legitimate Stage.
Definition: Stage.h:79
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:280
Vector & updQ()
These are just views into Y.
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 ...
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.
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.
Vector & updUDotErr(SubsystemIndex) const
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)
const Vector & getU(SubsystemIndex) const
const Vector & getQDotDot(SubsystemIndex) const
void setY(const Vector &y)
int getNQErr(SubsystemIndex) const
const ListOfDependents & getUDependents() const
(Advanced) Return the list of cache entries for which u was specified as an explicit prerequisite.
const ListOfDependents & getQDependents() const
(Advanced) Return the list of cache entries for which q was specified as an explicit prerequisite.
~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.
SystemZIndex getZStart(SubsystemIndex) const
Vector & updZ(SubsystemIndex)
Vector & updUWeights(SubsystemIndex)
Vector & updZ()
State(State &&source)
The move constructor is very fast. The source object is left empty.
Vector & updYDot() const
These are mutable.
AbstractValue & updCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a writable reference to the value contained in a particular cache entry.
const Vector & getYErr() const
Return the current constraint errors for all constraints.
Vector & updMultipliers(SubsystemIndex) const
const Vector & getUDot() const
void markCacheValueNotRealized(SubsystemIndex, CacheEntryIndex) const
(Advanced) Normally cache entries are invalidated automatically, however this method allows manual in...
Vector & updZWeights(SubsystemIndex)
void autoUpdateDiscreteVariables()
(Advanced) This is called at the beginning of every integration step to set the values of auto-update...
Vector & updU()
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 & updMultipliers() const
const Vector & getQDotDot() const
This has its own space, not a view.
String cacheToString() const
(Debugging) Not suitable for serialization.
const Stage & getSystemStage() const
This returns the global stage for this State.
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.
Vector & updZDot(SubsystemIndex) const
CacheEntryInfo & updCacheEntryInfo(const CacheEntryKey &cacheEntry)
(Advanced) Return a writable reference to the cache entry information for a particular cache entry.
ValueVersion getQValueVersion() const
(Advanced) Return a ValueVersion for q, meaning an integer that is incremented whenever any q is chan...
const Real & getTime() const
You can call these as long as system stage >= Model.
bool isDiscreteVarUpdateValueRealized(SubsystemIndex, DiscreteVariableIndex) const
Check whether the update value for this auto-update discrete variable has already been computed since...
const DiscreteVarInfo & getDiscreteVarInfo(const DiscreteVarKey &discreteVar) const
(Advanced) Return a reference to the discrete variable information for a particular discrete variable...
Vector & updQDot() const
void setZ(const Vector &z)
const String & getSubsystemVersion(SubsystemIndex) const
QErrIndex allocateQErr(SubsystemIndex, int nqerr) const
Allocate nqerr cache slots to hold the current error for position-level (holonomic) constraint equati...
SystemEventTriggerByStageIndex getEventTriggerStartByStage(SubsystemIndex, Stage) const
const Vector & getUErr(SubsystemIndex) const
Vector & updUErrWeights()
Set the unit weighting (1/unit error) for each of the mp+mv velocity-level inline constraints.
const AbstractValue & getDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the current value of its associated update cache entry...
ValueVersion getZValueVersion() const
(Advanced) Return a ValueVersion for z, meaning an integer that is incremented whenever any z is chan...
const Vector & getEventTriggersByStage(SubsystemIndex, Stage) const
SystemUIndex getUStart(SubsystemIndex) const
void setNumSubsystems(int i)
Set the number of subsystems in this state.
int getNUErr(SubsystemIndex) const
Vector & updU(SubsystemIndex)
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.
const Vector & getY() const
SystemYErrIndex getQErrStart() const
Returns the yErr index at which the qErr's begin. Callable at Instance stage.
const Vector & getU() const
CacheEntryIndex allocateLazyCacheEntry(SubsystemIndex sx, Stage earliest, AbstractValue *value) const
This is an abbreviation for allocation of a lazy cache entry.
Definition: State.h:718
Vector & updYErr() const
These are mutable.
AbstractValue & updDiscreteVarUpdateValue(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return a writable reference to the value of its associated up...
int getNumSubsystems() const
Return the number of Subsystems known to this State.
const Vector & getUErrWeights(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...
const Vector & getUErrWeights() const
Get the unit weighting (1/unit error) for each of the mp+mv velocity-level inline constraint equation...
int getNU() const
Get total number of shared u's (generalized speeds; mobilities).
const Vector & getYDot() const
State()
Create an empty State; this allocates an implementation object on the heap.
const Vector & getMultipliers() const
Vector & updQErr() const
const Vector & getZDot() const
const String & getSubsystemName(SubsystemIndex) const
Stage getDiscreteVarAllocationStage(SubsystemIndex, DiscreteVariableIndex) const
At what stage was this State when this discrete variable was allocated? The answer must be Stage::Emp...
Vector & updUErrWeights(SubsystemIndex)
SystemYIndex getQStart() const
Returns the y index at which the q's begin. Callable at Model stage.
Vector & updUErr(SubsystemIndex) const
const Vector & getUDotErr() const
These have their own space, they are not views.
const Vector & getZWeights(SubsystemIndex) const
AbstractValue & updDiscreteVariable(SubsystemIndex, DiscreteVariableIndex)
Get a writable reference to the value stored in the indicated discrete state variable dv,...
SystemMultiplierIndex getMultipliersStart(SubsystemIndex) const
Real getDiscreteVarLastUpdateTime(SubsystemIndex, DiscreteVariableIndex) const
Return the time of last update for this discrete variable.
Vector & updEventTriggersByStage(Stage) const
Vector & updUDot() const
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.
const Vector & getQErrWeights() const
Get the unit weighting (1/unit error) for each of the mp+mquat position inline constraints equations.
SystemQErrIndex getQErrStart(SubsystemIndex) const
void advanceSystemToStage(Stage) const
Advance the System-level current stage by one to the indicated stage.
const Vector & getZDot(SubsystemIndex) const
void setQ(const Vector &q)
Alternate interface.
const Vector & getZ() 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 & getUWeights(SubsystemIndex) const
State & operator=(State &&source)
Move assignment is very fast.
UDotErrIndex allocateUDotErr(SubsystemIndex, int nudoterr) const
Allocate nudoterr cache slots to hold the current error for acceleration-level (acceleration-only,...
Vector & updUErr() const
Vector & updQDotDot() const
This is a separate shared cache entry, not part of YDot.
Vector & updQ(SubsystemIndex)
Vector & updQDot(SubsystemIndex) const
const ListOfDependents & getZDependents() const
(Advanced) Return the list of cache entries for which z was specified as an explicit prerequisite.
SystemYIndex getZStart() const
Returns the y index at which the z's begin. Callable at Model stage.
const AbstractValue & getCacheEntry(SubsystemIndex, CacheEntryIndex) const
Retrieve a const reference to the value contained in a particular cache entry.
Vector & updQDotDot(SubsystemIndex) const
std::mutex & getStateLock() const
Returns a mutex that should be used to lock the state whenever multiple threads are asynchronously wr...
const Vector & getUDot(SubsystemIndex) const
CacheEntryIndex getDiscreteVarUpdateIndex(SubsystemIndex, DiscreteVariableIndex) const
For an auto-updating discrete variable, return the CacheEntryIndex for its associated update cache en...
int getNMultipliers(SubsystemIndex) const
Vector & updUWeights()
Set u weights (and q weights indirectly).
const Vector & getMultipliers(SubsystemIndex) const
UErrIndex allocateUErr(SubsystemIndex, int nuerr) const
Allocate nuerr cache slots to hold the current error for velocity-level (nonholonomic and holonomic f...
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).
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,...
const Vector & getQDot(SubsystemIndex) const
Per-subsystem access to the shared cache entries.
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...
int getNUErr() const
Return the total number nuerr=mp+mv of cache entries for velocity-level constraint errors (including ...
SubsystemIndex addSubsystem(const String &name, const String &version)
Register a new subsystem as a client of this State.
Vector & updQErrWeights(SubsystemIndex)
const Stage & getSubsystemStage(SubsystemIndex) const
int getNMultipliers() const
Return the total number of constraint multipliers; necessarily the same as the number of acceleration...
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...
const Vector & getQ(SubsystemIndex) const
Per-subsystem access to the global shared variables.
const Vector & getUErr() const
const AbstractValue & getDiscreteVariable(SubsystemIndex, DiscreteVariableIndex) const
Get the current value of the indicated discrete variable.
const Vector & getUDotErr(SubsystemIndex) const
State & operator=(const State &)
Copy assignment has deep copy semantics; that is, this State will contain a copy of the source,...
Stage getLowestSystemStageDifference(const Array_< StageVersion > &prevVersions) const
(Advanced) Given a list of per-stage version numbers extracted by an earlier call to getSystemStageVe...
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
SystemQIndex getQStart(SubsystemIndex) const
const Vector & getQErr() const
These are just views into YErr.
SystemUErrIndex getUErrStart(SubsystemIndex) const
String toString() const
(Debugging) Not suitable for serialization.
const Vector & getQErr(SubsystemIndex) const
Real & updTime()
You can call these as long as System stage >= Model, but the stage will be backed up if necessary to ...
Vector & updZWeights()
Set z weights.
CacheEntryIndex allocateCacheEntry(SubsystemIndex, Stage earliest, Stage latest, AbstractValue *value) const
There are two Stages supplied explicitly as arguments to this method: earliest and latest.
Vector & updEventTriggers() const
Vector & updZDot() const
int getNZ(SubsystemIndex) const
int getNQ(SubsystemIndex) const
const Vector & getEventTriggersByStage(Stage) const
Vector & updEventTriggersByStage(SubsystemIndex, Stage) const
const CacheEntryInfo & getCacheEntryInfo(const CacheEntryKey &cacheEntry) const
(Advanced) Return a const reference to the cache entry information for a particular cache entry.
Vector & updUDotErr() 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 ...
Vector & updY()
UIndex allocateU(SubsystemIndex, const Vector &uInit)
Allocate generalized speeds u, which are first order continuous state variables related to the deriva...
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 & getEventTriggers() const
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.
Vector & updQErrWeights()
Set the unit weighting (1/unit error) for each of the mp+mquat position inline constraint equations.
const Vector & getQErrWeights(SubsystemIndex) const
void setTime(Real t)
An alternate syntax equivalent to updTime() and updY().
Vector & updUDot(SubsystemIndex) const
Vector & updQErr(SubsystemIndex) const
bool isCacheValueRealized(SubsystemIndex, CacheEntryIndex) const
Check whether the value in a particular cache entry has been recalculated since the last change to th...
const PerSubsystemInfo & getPerSubsystemInfo(SubsystemIndex) const
(Advanced) Return a reference to the per-subsystem information in the state.
void getSystemStageVersions(Array_< StageVersion > &versions) const
(Advanced) Record the current version numbers of each valid System-level stage.
const Vector & getQ() const
These are just views into Y.
void clear()
Restore State to default-constructed condition.
const Vector & getZ(SubsystemIndex) const
const Vector & getQDot() const
These are just views into YDot.
SimTK::String is a plug-compatible std::string replacement (plus some additional functionality) inten...
Definition: String.h:65
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::ostream & operator<<(std::ostream &o, const ContactForce &f)
Definition: CompliantContactSubsystem.h:387
std::pair< SubsystemIndex, CacheEntryIndex > CacheEntryKey
Definition: State.h:164
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:607
SimTK_DEFINE_UNIQUE_INDEX_TYPE(AssemblyConditionIndex)