The DiagramContext is a container for all of the data necessary to uniquely determine the computations performed by a Diagram.
Specifically, a DiagramContext contains Context objects for all its constituent Systems.
In general, users should not need to interact with a DiagramContext directly. Use the accessors on Diagram instead.
T | The scalar type, which must be one of the default scalars. |
#include <drake/systems/framework/diagram_context.h>
Public Types | |
using | InputPortIdentifier = std::pair< SubsystemIndex, InputPortIndex > |
Identifies a child subsystem's input port. More... | |
using | OutputPortIdentifier = std::pair< SubsystemIndex, OutputPortIndex > |
Identifies a child subsystem's output port. More... | |
Public Member Functions | |
DiagramContext (int num_subcontexts) | |
Constructs a DiagramContext with the given num_subcontexts , which is final: you cannot resize a DiagramContext after construction. More... | |
void | AddSystem (SubsystemIndex index, std::unique_ptr< Context< T >> context) |
Declares a new subsystem in the DiagramContext. More... | |
void | SubscribeExportedInputPortToDiagramPort (InputPortIndex input_port_index, const InputPortIdentifier &subsystem_input_port) |
(Internal use only) Declares that a particular input port of a child subsystem is an input to the entire Diagram that allocates this Context. More... | |
void | SubscribeDiagramPortToExportedOutputPort (OutputPortIndex output_port_index, const OutputPortIdentifier &subsystem_output_port) |
(Internal use only) Declares that a particular output port of this diagram is simply forwarded from an output port of one of its child subsystems. More... | |
void | SubscribeInputPortToOutputPort (const OutputPortIdentifier &output_port, const InputPortIdentifier &input_port) |
(Internal use only) Declares that a connection exists between a peer output port and input port in this Diagram, and registers the input port's dependency tracker with the output port's dependency tracker. More... | |
void | SubscribeDiagramCompositeTrackersToChildrens () |
(Internal use only) Makes the diagram state, parameter, and composite cache entry trackers subscribe to the corresponding constituent trackers in the child subcontexts. More... | |
void | MakeState () |
(Internal use only) Generates the state vector for the entire diagram by wrapping the states of all the constituent diagrams. More... | |
void | MakeParameters () |
(Internal use only) Generates the parameters for the entire diagram by wrapping the parameters of all the constituent Systems. More... | |
const Context< T > & | GetSubsystemContext (SubsystemIndex index) const |
Returns the context structure for a given constituent system index . More... | |
Context< T > & | GetMutableSubsystemContext (SubsystemIndex index) |
Returns the context structure for a given subsystem index . More... | |
Does not allow copy, move, or assignment. | |
DiagramContext (DiagramContext &&)=delete | |
DiagramContext & | operator= (const DiagramContext &)=delete |
DiagramContext & | operator= (DiagramContext &&)=delete |
Public Member Functions inherited from Context< T > | |
Context (Context &&)=delete | |
Context & | operator= (const Context &)=delete |
Context & | operator= (Context &&)=delete |
const T & | get_time () const |
Returns the current time in seconds. More... | |
const State< T > & | get_state () const |
Returns a const reference to the whole State. More... | |
bool | is_stateless () const |
Returns true if the Context has no state. More... | |
bool | has_only_continuous_state () const |
Returns true if the Context has continuous state, but no discrete or abstract state. More... | |
bool | has_only_discrete_state () const |
Returns true if the Context has discrete state, but no continuous or abstract state. More... | |
int | num_total_states () const |
Returns the total dimension of all of the basic vector states (as if they were muxed). More... | |
int | num_continuous_states () const |
Returns the number of continuous state variables xc = {q, v, z} . More... | |
const ContinuousState< T > & | get_continuous_state () const |
Returns a const reference to the continuous component of the state, which may be of size zero. More... | |
const VectorBase< T > & | get_continuous_state_vector () const |
Returns a reference to the continuous state vector, devoid of second-order structure. More... | |
int | num_discrete_state_groups () const |
Returns the number of vectors (groups) in the discrete state. More... | |
const DiscreteValues< T > & | get_discrete_state () const |
Returns a reference to the entire discrete state, which may consist of multiple discrete state vectors (groups). More... | |
const BasicVector< T > & | get_discrete_state_vector () const |
Returns a reference to the only discrete state vector. More... | |
const BasicVector< T > & | get_discrete_state (int index) const |
Returns a const reference to group (vector) index of the discrete state. More... | |
int | num_abstract_states () const |
Returns the number of elements in the abstract state. More... | |
const AbstractValues & | get_abstract_state () const |
Returns a const reference to the abstract component of the state, which may be of size zero. More... | |
template<typename U > | |
const U & | get_abstract_state (int index) const |
Returns a const reference to the abstract component of the state at index . More... | |
const std::optional< double > & | get_accuracy () const |
Returns the accuracy setting (if any). More... | |
const Parameters< T > & | get_parameters () const |
Returns a const reference to this Context's parameters. More... | |
int | num_numeric_parameter_groups () const |
Returns the number of vector-valued parameters. More... | |
const BasicVector< T > & | get_numeric_parameter (int index) const |
Returns a const reference to the vector-valued parameter at index . More... | |
int | num_abstract_parameters () const |
Returns the number of abstract-valued parameters. More... | |
const AbstractValue & | get_abstract_parameter (int index) const |
Returns a const reference to the abstract-valued parameter at index . More... | |
void | SetTime (const T &time_sec) |
Sets the current time in seconds. More... | |
void | SetContinuousState (const Eigen::Ref< const VectorX< T >> &xc) |
Sets the continuous state to xc , including q, v, and z partitions. More... | |
void | SetTimeAndContinuousState (const T &time_sec, const Eigen::Ref< const VectorX< T >> &xc) |
Sets time to time_sec and continuous state to xc . More... | |
void | SetDiscreteState (const Eigen::Ref< const VectorX< T >> &xd) |
Sets the discrete state to xd , assuming there is just one discrete state group. More... | |
void | SetDiscreteState (int group_index, const Eigen::Ref< const VectorX< T >> &xd) |
Sets the discrete state group indicated by group_index to xd . More... | |
void | SetDiscreteState (const DiscreteValues< T > &xd) |
Sets all the discrete state variables in this Context from a compatible DiscreteValues object. More... | |
template<typename ValueType > | |
void | SetAbstractState (int index, const ValueType &value) |
Sets the value of the abstract state variable selected by index . More... | |
template<typename U > | |
void | SetStateAndParametersFrom (const Context< U > &source) |
Copies all state and parameters in source , where numerical values are of type U , to this context. More... | |
template<typename U > | |
void | SetTimeStateAndParametersFrom (const Context< U > &source) |
Copies time, accuracy, all state and all parameters in source , where numerical values are of type U , to this context. More... | |
void | SetAccuracy (const std::optional< double > &accuracy) |
Records the user's requested accuracy, which is a unit-less quantity designed for use with simulation and other numerical studies. More... | |
FixedInputPortValue & | FixInputPort (int index, const AbstractValue &value) |
(Advanced) Connects the input port at index to a FixedInputPortValue with the given abstract value . More... | |
State< T > & | get_mutable_state () |
Returns a mutable reference to the whole State, potentially invalidating all state-dependent computations so requiring out of date notifications to be made for all such computations. More... | |
ContinuousState< T > & | get_mutable_continuous_state () |
Returns a mutable reference to the continuous component of the state, which may be of size zero. More... | |
VectorBase< T > & | get_mutable_continuous_state_vector () |
Returns a mutable reference to the continuous state vector, devoid of second-order structure. More... | |
DiscreteValues< T > & | get_mutable_discrete_state () |
Returns a mutable reference to the discrete component of the state, which may be of size zero. More... | |
BasicVector< T > & | get_mutable_discrete_state_vector () |
Returns a mutable reference to the only discrete state vector. More... | |
BasicVector< T > & | get_mutable_discrete_state (int index) |
Returns a mutable reference to group (vector) index of the discrete state. More... | |
AbstractValues & | get_mutable_abstract_state () |
Returns a mutable reference to the abstract component of the state, which may be of size zero. More... | |
template<typename U > | |
U & | get_mutable_abstract_state (int index) |
Returns a mutable reference to element index of the abstract state. More... | |
Parameters< T > & | get_mutable_parameters () |
Returns a mutable reference to this Context's parameters. More... | |
BasicVector< T > & | get_mutable_numeric_parameter (int index) |
Returns a mutable reference to element index of the vector-valued (numeric) parameters. More... | |
AbstractValue & | get_mutable_abstract_parameter (int index) |
Returns a mutable reference to element index of the abstract-valued parameters. More... | |
VectorBase< T > & | SetTimeAndGetMutableContinuousStateVector (const T &time_sec) |
(Advanced) Sets time and returns a mutable reference to the continuous state xc (including q, v, z) as a VectorBase. More... | |
VectorBase< T > & | SetTimeAndGetMutableQVector (const T &time_sec) |
(Advanced) Sets time and returns a mutable reference to the second-order continuous state partition q from xc. More... | |
std::pair< VectorBase< T > *, VectorBase< T > * > | GetMutableVZVectors () |
(Advanced) Returns mutable references to the first-order continuous state partitions v and z from xc. More... | |
void | SetTimeAndNoteContinuousStateChange (const T &time_sec) |
(Advanced) Sets time and registers an intention to modify the continuous state xc. More... | |
void | NoteContinuousStateChange () |
(Advanced) Registers an intention to modify the continuous state xc. More... | |
std::unique_ptr< Context< T > > | Clone () const |
Returns a deep copy of this Context. More... | |
std::unique_ptr< State< T > > | CloneState () const |
Returns a deep copy of this Context's State. More... | |
std::string | to_string () const |
Returns a partial textual description of the Context, intended to be human-readable. More... | |
Public Member Functions inherited from ContextBase | |
std::unique_ptr< ContextBase > | Clone () const |
Creates an identical copy of the concrete context object. More... | |
~ContextBase () override | |
void | DisableCaching () const |
(Debugging) Disables caching recursively for this context and all its subcontexts. More... | |
void | EnableCaching () const |
(Debugging) Re-enables caching recursively for this context and all its subcontexts. More... | |
void | SetAllCacheEntriesOutOfDate () const |
(Debugging) Marks all cache entries out of date, recursively for this context and all its subcontexts. More... | |
void | FreezeCache () const |
(Advanced) Freezes the cache at its current contents, preventing any further cache updates. More... | |
void | UnfreezeCache () const |
(Advanced) Unfreezes the cache if it was previously frozen. More... | |
bool | is_cache_frozen () const final |
(Advanced) Reports whether this Context's cache is currently frozen. More... | |
const std::string & | GetSystemName () const final |
Returns the local name of the subsystem for which this is the Context. More... | |
internal::SystemId | get_system_id () const |
(Internal) Gets the id of the subsystem that created this context. More... | |
std::string | GetSystemPathname () const final |
Returns the full pathname of the subsystem for which this is the Context. More... | |
const Cache & | get_cache () const |
Returns a const reference to this subcontext's cache. More... | |
Cache & | get_mutable_cache () const |
(Advanced) Returns a mutable reference to this subcontext's cache. More... | |
const DependencyTracker & | get_tracker (DependencyTicket ticket) const |
Returns a const reference to a DependencyTracker in this subcontext. More... | |
DependencyTracker & | get_mutable_tracker (DependencyTicket ticket) |
Returns a mutable reference to a DependencyTracker in this subcontext. More... | |
const DependencyGraph & | get_dependency_graph () const |
Returns a const reference to the collection of value trackers within this subcontext. More... | |
DependencyGraph & | get_mutable_dependency_graph () |
Returns a mutable reference to the dependency graph. More... | |
int | num_input_ports () const |
Returns the number of input ports in this context. More... | |
int | num_output_ports () const |
Returns the number of output ports represented in this context. More... | |
DependencyTicket | input_port_ticket (InputPortIndex port_num) |
Returns the dependency ticket associated with a particular input port. More... | |
DependencyTicket | output_port_ticket (OutputPortIndex port_num) |
Returns the dependency ticket associated with a particular output port. More... | |
FixedInputPortValue & | FixInputPort (int index, const AbstractValue &value) |
(Advanced) Connects the input port at index to a FixedInputPortValue with the given abstract value . More... | |
const FixedInputPortValue * | MaybeGetFixedInputPortValue (int index) const |
For input port index , returns a const FixedInputPortValue if the port is fixed, otherwise nullptr. More... | |
FixedInputPortValue * | MaybeGetMutableFixedInputPortValue (int index) |
For input port index , returns a mutable FixedInputPortValue if the port is fixed, otherwise nullptr. More... | |
int64_t | start_new_change_event () const |
(Internal use only) Returns the next change event serial number that is unique for this entire Context tree, not just this subcontext. More... | |
bool | is_root_context () const |
Returns true if this context has no parent. More... | |
ContextBase (ContextBase &&)=delete | |
ContextBase & | operator= (const ContextBase &)=delete |
ContextBase & | operator= (ContextBase &&)=delete |
Protected Member Functions | |
DiagramContext (const DiagramContext &source) | |
Protected copy constructor takes care of the local data members and all base class members, but doesn't update base class pointers so is not a complete copy. More... | |
Protected Member Functions inherited from Context< T > | |
Context () | |
Context (const Context< T > &) | |
Copy constructor takes care of base class and Context<T> data members. More... | |
void | init_continuous_state (std::unique_ptr< ContinuousState< T >> xc) |
(Internal use only) Sets the continuous state to xc , deleting whatever was there before. More... | |
void | init_discrete_state (std::unique_ptr< DiscreteValues< T >> xd) |
(Internal use only) Sets the discrete state to xd , deleting whatever was there before. More... | |
void | init_abstract_state (std::unique_ptr< AbstractValues > xa) |
(Internal use only) Sets the abstract state to xa , deleting whatever was there before. More... | |
void | init_parameters (std::unique_ptr< Parameters< T >> params) |
(Internal use only) Sets the parameters to params , deleting whatever was there before. More... | |
Protected Member Functions inherited from ContextBase | |
ContextBase () | |
Default constructor creates an empty ContextBase but initializes all the built-in dependency trackers that are the same in every System (like time, q, all states, all inputs, etc.). More... | |
ContextBase (const ContextBase &)=default | |
Copy constructor takes care of base class data members, but does not fix up base class pointers. More... | |
bool | owns_any_variables_or_parameters () const |
(Internal use only) Returns true if this context provides resources for its own individual state variables or parameters. More... | |
void | PropagateBulkChange (int64_t change_event, void(ContextBase::*note_bulk_change)(int64_t change_event)) |
(Internal use only) This is a convenience method for invoking the eponymous static method on this context (which occurs frequently). More... | |
void | AddInputPort (InputPortIndex expected_index, DependencyTicket ticket, std::function< void(const AbstractValue &)> fixed_input_type_checker) |
Adds the next input port. More... | |
void | AddOutputPort (OutputPortIndex expected_index, DependencyTicket ticket, const internal::OutputPortPrerequisite &prerequisite) |
Adds the next output port. More... | |
void | AddDiscreteStateTicket (DependencyTicket ticket) |
Adds a ticket to the list of discrete state tickets. More... | |
void | AddAbstractStateTicket (DependencyTicket ticket) |
Adds a ticket to the list of abstract state tickets. More... | |
void | AddNumericParameterTicket (DependencyTicket ticket) |
Adds a ticket to the list of numeric parameter tickets. More... | |
void | AddAbstractParameterTicket (DependencyTicket ticket) |
Adds a ticket to the list of abstract parameter tickets. More... | |
void | NoteTimeChanged (int64_t change_event) |
Notifies the local time tracker that time may have changed. More... | |
void | NoteAccuracyChanged (int64_t change_event) |
Notifies the local accuracy tracker that the accuracy setting may have changed. More... | |
void | NoteAllStateChanged (int64_t change_event) |
Notifies the local continuous, discrete, and abstract state trackers that each of them may have changed, likely because someone has asked to modify the whole state x. More... | |
void | NoteAllContinuousStateChanged (int64_t change_event) |
Notifies the local q, v, and z trackers that each of them may have changed, likely because someone has asked to modify continuous state xc. More... | |
void | NoteAllVZChanged (int64_t change_event) |
Notifies the local v and z trackers that each of them may have changed, likely because someone has asked to modify just the first-order state variables in xc. More... | |
void | NoteAllQChanged (int64_t change_event) |
Notifies the local q tracker that the q's may have changed. More... | |
void | NoteAllVChanged (int64_t change_event) |
Notifies the local v tracker that the v's may have changed. More... | |
void | NoteAllZChanged (int64_t change_event) |
Notifies the local z tracker that the z's may have changed. More... | |
void | NoteAllDiscreteStateChanged (int64_t change_event) |
Notifies each local discrete state group tracker that the value of the discrete state group it manages may have changed. More... | |
void | NoteAllAbstractStateChanged (int64_t change_event) |
Notifies each local abstract state variable tracker that the value of the abstract state variable it manages may have changed. More... | |
void | NoteAllParametersChanged (int64_t change_event) |
Notifies the local numeric and abstract parameter trackers that each of them may have changed, likely because someone asked to modify all the parameters. More... | |
void | NoteAllNumericParametersChanged (int64_t change_event) |
Notifies each local numeric parameter tracker that the value of the parameter it manages may have changed. More... | |
void | NoteAllAbstractParametersChanged (int64_t change_event) |
Notifies each local abstract parameter tracker that the value of the parameter it manages may have changed. More... | |
Friends | |
class | DiagramContextTest |
Additional Inherited Members | |
Static Protected Member Functions inherited from Context< T > | |
static void | PropagateTimeChange (Context< T > *context, const T &time, const std::optional< T > &true_time, int64_t change_event) |
(Internal use only) Sets a new time and notifies time-dependent quantities that they are now invalid, as part of a given change event. More... | |
static void | PropagateAccuracyChange (Context< T > *context, const std::optional< double > &accuracy, int64_t change_event) |
(Internal use only) Sets a new accuracy and notifies accuracy-dependent quantities that they are now invalid, as part of a given change event. More... | |
static Parameters< T > & | access_mutable_parameters (Context< T > *context) |
(Internal use only) Returns a reference to mutable parameters without invalidation notifications. More... | |
static State< T > & | access_mutable_state (Context< T > *context) |
(Internal use only) Returns a reference to a mutable state without invalidation notifications. More... | |
static std::unique_ptr< Context< T > > | CloneWithoutPointers (const Context< T > &source) |
(Internal use only) Clones a context but without any of its internal pointers. More... | |
Static Protected Member Functions inherited from ContextBase | |
static std::unique_ptr< ContextBase > | CloneWithoutPointers (const ContextBase &source) |
(Internal use only) Clones a context but without copying any of its internal pointers; the clone's pointers are set to null. More... | |
static void | BuildTrackerPointerMap (const ContextBase &source, const ContextBase &clone, DependencyTracker::PointerMap *tracker_map) |
(Internal use only) Given a new context clone containing an identically-structured dependency graph as the one in source , creates a mapping of all tracker memory addresses from source to clone . More... | |
static void | FixContextPointers (const ContextBase &source, const DependencyTracker::PointerMap &tracker_map, ContextBase *clone) |
(Internal use only) Assuming clone is a recently-cloned Context that has yet to have its internal pointers updated, sets those pointers now. More... | |
static void | PropagateCachingChange (const ContextBase &context, void(Cache::*caching_change)()) |
(Internal use only) Applies the given caching-change notification method to context , and propagates the notification to subcontexts if context is a DiagramContext. More... | |
static void | PropagateBulkChange (ContextBase *context, int64_t change_event, void(ContextBase::*note_bulk_change)(int64_t change_event)) |
(Internal use only) Applies the given bulk-change notification method to the given context , and propagates the notification to subcontexts if this is a DiagramContext. More... | |
static void | set_parent (ContextBase *child, ContextBase *parent) |
Declares that parent is the context of the enclosing Diagram. More... | |
using InputPortIdentifier = std::pair<SubsystemIndex, InputPortIndex> |
Identifies a child subsystem's input port.
using OutputPortIdentifier = std::pair<SubsystemIndex, OutputPortIndex> |
Identifies a child subsystem's output port.
|
delete |
|
explicit |
Constructs a DiagramContext with the given num_subcontexts
, which is final: you cannot resize a DiagramContext after construction.
The number and ordering of subcontexts is identical to the number and ordering of subsystems in the corresponding Diagram.
|
protected |
Protected copy constructor takes care of the local data members and all base class members, but doesn't update base class pointers so is not a complete copy.
void AddSystem | ( | SubsystemIndex | index, |
std::unique_ptr< Context< T >> | context | ||
) |
Declares a new subsystem in the DiagramContext.
Subsystems are identified by number. If the subsystem has already been declared, aborts.
User code should not call this method. It is for use during Diagram context allocation only.
Context<T>& GetMutableSubsystemContext | ( | SubsystemIndex | index | ) |
Returns the context structure for a given subsystem index
.
Aborts if index
is out of bounds, or if no system has been added to the DiagramContext at that index.
const Context<T>& GetSubsystemContext | ( | SubsystemIndex | index | ) | const |
Returns the context structure for a given constituent system index
.
Aborts if index
is out of bounds, or if no system has been added to the DiagramContext at that index.
void MakeParameters | ( | ) |
(Internal use only) Generates the parameters for the entire diagram by wrapping the parameters of all the constituent Systems.
The wrapper simply holds pointers to the parameters in the subsystem Contexts. It does not make a copy, or take ownership.
void MakeState | ( | ) |
(Internal use only) Generates the state vector for the entire diagram by wrapping the states of all the constituent diagrams.
|
delete |
|
delete |
void SubscribeDiagramCompositeTrackersToChildrens | ( | ) |
(Internal use only) Makes the diagram state, parameter, and composite cache entry trackers subscribe to the corresponding constituent trackers in the child subcontexts.
void SubscribeDiagramPortToExportedOutputPort | ( | OutputPortIndex | output_port_index, |
const OutputPortIdentifier & | subsystem_output_port | ||
) |
(Internal use only) Declares that a particular output port of this diagram is simply forwarded from an output port of one of its child subsystems.
Sets up tracking of the diagram port's dependency on the child port. Aborts if the subsystem has not been added to the DiagramContext.
User code should not call this method. It is for use during Diagram context allocation only.
void SubscribeExportedInputPortToDiagramPort | ( | InputPortIndex | input_port_index, |
const InputPortIdentifier & | subsystem_input_port | ||
) |
(Internal use only) Declares that a particular input port of a child subsystem is an input to the entire Diagram that allocates this Context.
Sets up tracking of the child port's dependency on the parent port. Aborts if the subsystem has not been added to the DiagramContext.
User code should not call this method. It is for use during Diagram context allocation only.
void SubscribeInputPortToOutputPort | ( | const OutputPortIdentifier & | output_port, |
const InputPortIdentifier & | input_port | ||
) |
(Internal use only) Declares that a connection exists between a peer output port and input port in this Diagram, and registers the input port's dependency tracker with the output port's dependency tracker.
By "peer" we mean that both ports belong to immediate child subsystems of this Diagram (it is also possible for both ports to belong to the same subsystem).
User code should not call this method. It is for use during Diagram context allocation only.
|
friend |