Simbody 3.7
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"
36
37#include <ostream>
38#include <cassert>
39#include <algorithm>
40#include <mutex>
41#include <array>
42
43namespace SimTK {
44
45
49
57
70
82
94
100
106
113
124
135
146
157
158class StateImpl;
159class PerSubsystemInfo;
160class DiscreteVarInfo;
161class CacheEntryInfo;
162class ListOfDependents;
163
164using CacheEntryKey = std::pair<SubsystemIndex,CacheEntryIndex>;
165using DiscreteVarKey = std::pair<SubsystemIndex,DiscreteVariableIndex>;
166
281public:
284
291State(const State&);
292
294State(State&& source);
295
303
307
310
312void clear();
313
337bool isConsistent(const SimTK::State& otherState) const;
338
342inline void setNumSubsystems(int i);
343
346inline void initializeSubsystem(SubsystemIndex, const String& name,
347 const String& version);
348
355inline SubsystemIndex addSubsystem(const String& name, const String& version);
356
358inline int getNumSubsystems() const;
362
364inline const Stage& getSystemStage() const;
365
372inline void invalidateAll(Stage);
373
382
394inline void advanceSystemToStage(Stage) const;
395
401
418inline QIndex allocateQ(SubsystemIndex, const Vector& qInit);
426inline UIndex allocateU(SubsystemIndex, const Vector& uInit);
432inline ZIndex allocateZ(SubsystemIndex, const Vector& zInit);
449inline QErrIndex allocateQErr (SubsystemIndex, int nqerr) const;
452inline UErrIndex allocateUErr (SubsystemIndex, int nuerr) const;
457inline UDotErrIndex allocateUDotErr(SubsystemIndex, int nudoterr) const;
477allocateEventTrigger(SubsystemIndex, Stage stage, int nevent) const;
506
559 AbstractValue*, Stage updateDependsOn);
562inline CacheEntryIndex
566inline Stage
572inline Stage
574
575
578inline const AbstractValue&
581inline Real
587inline const AbstractValue&
594inline AbstractValue&
599inline bool
603inline void
605
609inline AbstractValue&
612inline void
696inline CacheEntryIndex
698 AbstractValue* value) const;
699
704inline CacheEntryIndex
706 AbstractValue* value) const
707{ return allocateCacheEntry(sx, stage, stage, value); }
708
717inline CacheEntryIndex
719 AbstractValue* value) const {
720 return allocateCacheEntry(sx, earliest, Stage::Infinity, value);
721}
722
727inline 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
737inline Stage
739
746inline const AbstractValue&
748
755inline AbstractValue&
757
767
781
806
810inline int getNY() const;
815inline int getNQ() const;
817inline SystemYIndex getQStart() const;
821inline int getNU() const;
823inline SystemYIndex getUStart() const;
827inline int getNZ() const;
829inline SystemYIndex getZStart() const;
833inline int getNYErr() const;
836inline int getNQErr() const;
842inline int getNUErr() const;
849inline int getNUDotErr() const;
854inline int getNMultipliers() const; // =mp+mv+ma, necessarily the same as NUDotErr
857inline int getNEventTriggers() const;
870inline std::mutex& getStateLock() const;
871
873
887
889inline int getNQ(SubsystemIndex) const;
891inline int getNU(SubsystemIndex) const;
893inline int getNZ(SubsystemIndex) const;
894
896inline int getNQErr(SubsystemIndex) const;
898inline int getNUErr(SubsystemIndex) const;
900inline int getNUDotErr(SubsystemIndex) const;
903
907
909
910inline const Vector& getEventTriggers() const;
913
914inline Vector& updEventTriggers() const; // mutable
917
919inline const Vector& getQ(SubsystemIndex) const;
920inline const Vector& getU(SubsystemIndex) const;
921inline const Vector& getZ(SubsystemIndex) const;
922
923inline const Vector& getUWeights(SubsystemIndex) const;
924inline const Vector& getZWeights(SubsystemIndex) const;
925
929
932
934inline const Vector& getQDot(SubsystemIndex) const;
935inline const Vector& getUDot(SubsystemIndex) const;
936inline const Vector& getZDot(SubsystemIndex) const;
937inline const Vector& getQDotDot(SubsystemIndex) const;
938
939inline Vector& updQDot(SubsystemIndex) const; // these are mutable
943
944inline const Vector& getQErr(SubsystemIndex) const;
945inline const Vector& getUErr(SubsystemIndex) const;
946inline const Vector& getUDotErr(SubsystemIndex) const;
948
951
952inline Vector& updQErr(SubsystemIndex) const; // these are mutable
956
959
961inline const Real& getTime() const;
962inline const Vector& getY() const; // {Q,U,Z} packed and in that order
963
965inline const Vector& getQ() const;
966inline const Vector& getU() const;
967inline const Vector& getZ() const;
968
969
1004inline const Vector& getUWeights() const; // diag(Wu)
1005
1012inline const Vector& getZWeights() const;
1013
1018
1023
1026inline Real& updTime(); // Back up to Stage::Time-1
1027inline Vector& updY(); // Back up to Stage::Dynamics-1
1028
1030inline void setTime(Real t);
1031inline void setY(const Vector& y);
1032
1034inline Vector& updQ(); // Back up to Stage::Position-1
1035inline Vector& updU(); // Back up to Stage::Velocity-1
1036inline Vector& updZ(); // Back up to Stage::Dynamics-1
1037
1039inline void setQ(const Vector& q);
1040inline void setU(const Vector& u);
1041inline void setZ(const Vector& z);
1042
1043inline const Vector& getYDot() const; // Stage::Acceleration
1044
1046inline const Vector& getQDot() const; // Stage::Velocity
1047inline const Vector& getZDot() const; // Stage::Dynamics
1048inline const Vector& getUDot() const; // Stage::Acceleration
1049
1051inline const Vector& getQDotDot() const; // Stage::Acceleration
1052
1054inline Vector& updYDot() const; // Stage::Acceleration-1
1055inline Vector& updQDot() const; // Stage::Velocity-1 (view into YDot)
1056inline Vector& updZDot() const; // Stage::Dynamics-1 "
1057inline Vector& updUDot() const; // Stage::Acceleration-1 "
1058
1062inline Vector& updQDotDot() const; // Stage::Acceleration-1
1063
1066inline const Vector& getYErr() const; // Stage::Velocity
1067
1069inline const Vector& getQErr() const; // Stage::Position (index 3 constraints)
1070inline const Vector& getUErr() const; // Stage::Velocity (index 2 constraints)
1071
1073inline const Vector& getUDotErr() const; // Stage::Acceleration (index 1 constraints)
1074inline const Vector& getMultipliers() const; // Stage::Acceleration
1075
1078inline const Vector& getQErrWeights() const;
1079
1090inline const Vector& getUErrWeights() const;
1091
1097
1103
1105inline Vector& updYErr() const; // Stage::Velocity-1
1106inline Vector& updQErr() const; // Stage::Position-1 (view into YErr)
1107inline Vector& updUErr() const; // Stage::Velocity-1 "
1108
1109inline Vector& updUDotErr() const; // Stage::Acceleration-1 (not a view)
1110inline Vector& updMultipliers() const; // Stage::Acceleration-1 (not a view)
1111
1124
1135 (const Array_<StageVersion>& prevVersions) const;
1136
1144
1160
1164inline const ListOfDependents& getQDependents() const;
1168inline const ListOfDependents& getUDependents() const;
1172inline const ListOfDependents& getZDependents() const;
1173
1175inline bool hasCacheEntry(const CacheEntryKey& cacheEntry) const;
1176
1179SimTK_FORCE_INLINE const CacheEntryInfo&
1180getCacheEntryInfo(const CacheEntryKey& cacheEntry) const;
1181
1184SimTK_FORCE_INLINE CacheEntryInfo&
1186
1189inline bool hasDiscreteVar(const DiscreteVarKey& discreteVar) const;
1190
1193SimTK_FORCE_INLINE const DiscreteVarInfo&
1194getDiscreteVarInfo(const DiscreteVarKey& discreteVar) const;
1195
1198SimTK_FORCE_INLINE const PerSubsystemInfo&
1200
1205
1207inline String toString() const;
1209inline String cacheToString() const;
1212//------------------------------------------------------------------------------
1213// The implementation class and associated inline methods are defined in a
1214// separate header file included below.
1215 private:
1216StateImpl* impl;
1217
1218const StateImpl& getImpl() const {assert(impl); return *impl;}
1219StateImpl& updImpl() {assert(impl); return *impl;}
1220};
1221
1222// Dump state and cache to a stream for debugging; this is not serialization.
1224operator<<(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
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
Vector & updZDot() 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
Vector & updQDot() 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
Vector & updZ()
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 & updUErr() const
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...
Vector & updQErr() const
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
Vector & updUDot() const
AbstractValue & updDiscreteVariable(SubsystemIndex, DiscreteVariableIndex)
Get a writable reference to the value stored in the indicated discrete state variable dv,...
Vector & updU()
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)
Vector & updY()
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
SimTK_DEFINE_UNIQUE_INDEX_TYPE(AssemblyConditionIndex)