![]() |
helics
2.8.1
|
#include <TimeCoordinator.hpp>
Public Member Functions | |
| TimeCoordinator () | |
| TimeCoordinator (std::function< void(const ActionMessage &)> userSendMessageFunction) | |
| void | setProperty (int timeProperty, Time propertyVal) |
| void | setProperty (int intProperty, int propertyVal) |
| void | setOptionFlag (int optionFlag, bool value) |
| Time | getTimeProperty (int timeProperty) const |
| bool | getOptionFlag (int optionFlag) const |
| int | getIntegerProperty (int intProperty) const |
| void | setMessageSender (std::function< void(const ActionMessage &)> userSendMessageFunction) |
| Time | getGrantedTime () const |
| Time | allowedSendTime () const |
| std::vector< global_federate_id > | getDependencies () const |
| std::vector< global_federate_id > | getDependents () const |
| int32_t | getCurrentIteration () const |
| bool | updateTimeFactors () |
| void | updateValueTime (Time valueUpdateTime, bool allowRequestSend) |
| void | updateMessageTime (Time messageUpdateTime, bool allowRequestSend) |
| void | specifyNonGranting (bool value=true) |
| message_process_result | processTimeMessage (const ActionMessage &cmd) |
| void | processConfigUpdateMessage (const ActionMessage &cmd) |
| void | processDependencyUpdateMessage (const ActionMessage &cmd) |
| bool | addDependency (global_federate_id fedID) |
| bool | addDependent (global_federate_id fedID) |
| void | removeDependency (global_federate_id fedID) |
| void | removeDependent (global_federate_id fedID) |
| void | setAsChild (global_federate_id fedID) |
| void | setAsParent (global_federate_id fedID) |
| message_processing_result | checkExecEntry () |
| void | timeRequest (Time nextTime, iteration_request iterate, Time newValueTime, Time newMessageTime) |
| void | enteringExecMode (iteration_request mode) |
| message_processing_result | checkTimeGrant () |
| void | disconnect () |
| void | localError () |
| std::string | printTimeStatus () const |
| bool | hasActiveTimeDependencies () const |
| void | generateConfig (Json::Value &base) const |
| void | generateDebuggingTimeInfo (Json::Value &base) const |
| int | dependencyCount () const |
| global_federate_id | getMinDependency () const |
Public Attributes | |
| global_federate_id | source_id |
| the identifier for inserting into the source id field of any generated messages; More... | |
| iteration_request | iterating |
| bool | checkingExec |
| flag indicating that the coordinator is trying to enter the exec mode More... | |
| bool | executionMode {false} |
| flag that the coordinator has entered the execution Mode | |
| bool | hasInitUpdates {false} |
Protected Attributes | |
| TimeData | upstream |
| the variables for time coordination | |
| TimeData | total |
| TimeData | lastSend |
| Time | time_granted = Time::minVal() |
| the most recent time granted | |
| Time | time_requested = Time::maxVal() |
| the most recent time requested | |
| Time | time_next = timeZero |
| the next possible internal event time | |
| Time | time_minminDe = timeZero |
| the minimum of the minimum dependency event Time | |
| Time | time_minDe = timeZero |
| the minimum event time of the dependencies | |
| Time | time_allow = Time::minVal() |
| the current allowable time | |
| Time | time_exec = Time::maxVal() |
| the time of the next targeted execution | |
| Time | time_message = Time::maxVal() |
| the time of the earliest message event | |
| Time | time_value = Time::maxVal() |
| the time of the earliest value event | |
| Time | time_grantBase = Time::minVal() |
| Time | time_block = Time::maxVal() |
| shared_guarded_m< std::vector< global_federate_id > > | dependent_federates |
| these are to maintain an accessible record of dependent federates | |
| shared_guarded_m< std::vector< global_federate_id > > | dependency_federates |
| these are to maintain an accessible record of dependency federates | |
| TimeDependencies | dependencies |
| std::vector< std::pair< Time, int32_t > > | timeBlocks |
| blocks for a particular timeblocking link | |
| tcoptions | info |
| basic time control information | |
| std::function< void(const ActionMessage &)> | sendMessageFunction |
| callback used to send the messages | |
| std::atomic< int32_t > | iteration {0} |
| iteration counter | |
| bool | disconnected {false} |
| bool | nonGranting {false} |
class managing the coordination of time in HELICS the time coordinator manages dependencies and computes whether time can advance or enter execution mode
| helics::TimeCoordinator::TimeCoordinator | ( | ) |
default constructor
|
explicit |
construct from a federate info and message send function
References sendMessageFunction.
| bool helics::TimeCoordinator::addDependency | ( | global_federate_id | fedID | ) |
add a federate dependency
References helics::TimeDependencies::addDependency(), dependencies, helics::TimeDependencies::getDependencyInfo(), and source_id.
Referenced by processDependencyUpdateMessage().
| bool helics::TimeCoordinator::addDependent | ( | global_federate_id | fedID | ) |
add a dependent federate
References helics::TimeDependencies::addDependent(), dependencies, and dependent_federates.
Referenced by processDependencyUpdateMessage().
|
inline |
get the current granted time
References info, and time_granted.
| message_processing_result helics::TimeCoordinator::checkExecEntry | ( | ) |
check if entry to the executing state can be granted
References helics::TimeDependencies::checkIfReadyForExecEntry(), helics::continue_processing, helics::ActionMessage::counter, dependencies, helics::ActionMessage::dest_id, helics::error, executionMode, helics::force_iteration, hasInitUpdates, info, helics::iterate_if_needed, helics::iterating, iterating, iteration, iteration_requested_flag, helics::ActionMessage::messageID, helics::TimeData::next, helics::next_step, helics::no_iterations, helics::parent_broker_id, helics::ActionMessage::payload, helics::TimeDependencies::resetIteratingExecRequests(), sendMessageFunction, setActionFlag(), helics::ActionMessage::source_id, source_id, time_block, time_grantBase, time_granted, and helics::timeZero.
| message_processing_result helics::TimeCoordinator::checkTimeGrant | ( | ) |
check if it is valid to grant a time
References helics::TimeDependencies::checkIfReadyForTimeGrant(), helics::continue_processing, dependencies, disconnect(), helics::TimeDependencies::empty(), helics::halted, info, helics::iterate_if_needed, helics::iterating, iterating, iteration, helics::next_step, helics::no_iterations, time_allow, time_block, time_exec, time_grantBase, time_granted, time_requested, and updateTimeFactors().
| int helics::TimeCoordinator::dependencyCount | ( | ) | const |
get a count of the active dependencies
References helics::TimeDependencies::activeDependencyCount(), and dependencies.
| void helics::TimeCoordinator::disconnect | ( | ) |
disconnect
References helics::appendMessage(), helics::TimeDependencies::begin(), dependencies, helics::ActionMessage::dest_id, helics::TimeDependencies::empty(), processTimeMessage(), sendMessageFunction, helics::TimeDependencies::size(), helics::ActionMessage::source_id, and source_id.
Referenced by checkTimeGrant().
| void helics::TimeCoordinator::enteringExecMode | ( | iteration_request | mode | ) |
function to enter the exec Mode
| mode | the mode of iteration_request (no_iteration, force_iteration, iterate_if_needed) |
References checkingExec, delayed_timing_flag, executionMode, info, iterating, helics::no_iterations, setActionFlag(), helics::setIterationFlags(), helics::ActionMessage::source_id, and source_id.
| void helics::TimeCoordinator::generateConfig | ( | Json::Value & | base | ) | const |
generate a configuration string(JSON)
References helics::tcoptions::event_triggered, info, and helics::timeZero.
Referenced by generateDebuggingTimeInfo().
| void helics::TimeCoordinator::generateDebuggingTimeInfo | ( | Json::Value & | base | ) | const |
generate debugging time information
References dependencies, generateConfig(), time_allow, time_exec, time_granted, time_message, time_minDe, time_minminDe, time_requested, time_value, timeBlocks, and upstream.
|
inline |
get the current iteration counter for an iterative call
this will work properly even when a federate is processing
References iteration.
| std::vector< global_federate_id > helics::TimeCoordinator::getDependencies | ( | ) | const |
get a list of actual dependencies
References dependency_federates.
|
inline |
get a reference to the dependents vector
References dependent_federates.
|
inline |
get the current granted time
References time_granted.
| int helics::TimeCoordinator::getIntegerProperty | ( | int | intProperty | ) | const |
get an option flag value
get a time Property
| global_federate_id helics::TimeCoordinator::getMinDependency | ( | ) | const |
get a count of the active dependencies
References dependencies, and helics::TimeDependencies::getMinDependency().
| bool helics::TimeCoordinator::getOptionFlag | ( | int | optionFlag | ) | const |
get an option flag value
References helics::tcoptions::event_triggered, and info.
| Time helics::TimeCoordinator::getTimeProperty | ( | int | timeProperty | ) | const |
get a time Property
| bool helics::TimeCoordinator::hasActiveTimeDependencies | ( | ) | const |
return true if there are active dependencies
References dependencies, and helics::TimeDependencies::hasActiveTimeDependencies().
Referenced by helics::FilterFederate::hasActiveTimeDependencies().
| void helics::TimeCoordinator::localError | ( | ) |
generate a local Error
References helics::appendMessage(), helics::TimeDependencies::begin(), dependencies, helics::ActionMessage::dest_id, helics::TimeDependencies::empty(), processTimeMessage(), sendMessageFunction, helics::TimeDependencies::size(), helics::ActionMessage::source_id, source_id, time_grantBase, and time_granted.
| std::string helics::TimeCoordinator::printTimeStatus | ( | ) | const |
generate a string with the current time status
References time_allow, time_exec, time_granted, time_message, time_minDe, time_minminDe, time_requested, and time_value.
| void helics::TimeCoordinator::processConfigUpdateMessage | ( | const ActionMessage & | cmd | ) |
process a message related to configuration
| cmd | the update command |
References checkActionFlag(), indicator_flag, setOptionFlag(), and setProperty().
| void helics::TimeCoordinator::processDependencyUpdateMessage | ( | const ActionMessage & | cmd | ) |
process a dependency update message
References addDependency(), addDependent(), checkActionFlag(), child_flag, parent_flag, removeDependency(), and removeDependent().
| message_process_result helics::TimeCoordinator::processTimeMessage | ( | const ActionMessage & | cmd | ) |
process a message related to time
References helics::ActionMessage::actionTime, helics::delay_processing, dependencies, helics::TimeDependencies::getDependencyInfo(), helics::TimeData::minDe, helics::TimeData::next, helics::no_effect, helics::processed, removeDependent(), helics::ActionMessage::source_id, source_id, helics::TimeData::Te, time_exec, time_grantBase, and time_granted.
Referenced by disconnect(), and localError().
| void helics::TimeCoordinator::removeDependency | ( | global_federate_id | fedID | ) |
remove a dependency
| fedID | the identifier of the federate to remove |
References dependencies, dependency_federates, and helics::TimeDependencies::removeDependency().
Referenced by processDependencyUpdateMessage().
| void helics::TimeCoordinator::removeDependent | ( | global_federate_id | fedID | ) |
remove a dependent
| fedID | the identifier of the federate to remove |
References dependencies, dependent_federates, and helics::TimeDependencies::removeDependent().
Referenced by processDependencyUpdateMessage(), and processTimeMessage().
| void helics::TimeCoordinator::setMessageSender | ( | std::function< void(const ActionMessage &)> | userSendMessageFunction | ) |
set the callback function used for the sending messages
References sendMessageFunction.
| void helics::TimeCoordinator::setOptionFlag | ( | int | optionFlag, |
| bool | value | ||
| ) |
set an option Flag for a the coordinator
References helics::tcoptions::event_triggered, and info.
Referenced by processConfigUpdateMessage().
| void helics::TimeCoordinator::setProperty | ( | int | intProperty, |
| int | propertyVal | ||
| ) |
set a timeProperty for a the coordinator
| void helics::TimeCoordinator::setProperty | ( | int | timeProperty, |
| Time | propertyVal | ||
| ) |
set a timeProperty for a the coordinator
Referenced by processConfigUpdateMessage().
| void helics::TimeCoordinator::timeRequest | ( | Time | nextTime, |
| iteration_request | iterate, | ||
| Time | newValueTime, | ||
| Time | newMessageTime | ||
| ) |
request a time
| nextTime | the new requested time |
| iterate | the mode of iteration to use (no_iteration, force_iteration, iterate_if_needed) |
| newValueTime | the time of the next value |
| newMessageTime | the time of the next message |
References dependencies, helics::TimeDependencies::empty(), helics::force_iteration, info, iterating, helics::no_iterations, helics::TimeDependencies::resetDependentEvents(), time_exec, time_granted, time_message, time_next, time_requested, time_value, and updateTimeFactors().
| void helics::TimeCoordinator::updateMessageTime | ( | Time | messageUpdateTime, |
| bool | allowRequestSend | ||
| ) |
update the time_message variable with a new value if needed if allowed it will send an updated time request message
References executionMode, hasInitUpdates, iterating, helics::no_iterations, time_granted, time_message, and helics::timeZero.
| bool helics::TimeCoordinator::updateTimeFactors | ( | ) |
compute updates to time values
References dependencies, helics::tcoptions::event_triggered, info, helics::TimeData::minDe, helics::TimeData::next, helics::TimeData::Te, time_allow, time_minDe, time_minminDe, time_next, and upstream.
Referenced by checkTimeGrant(), and timeRequest().
| void helics::TimeCoordinator::updateValueTime | ( | Time | valueUpdateTime, |
| bool | allowRequestSend | ||
| ) |
update the time_value variable with a new value if needed if allowed it will send an updated time request message
References executionMode, hasInitUpdates, iterating, helics::no_iterations, time_granted, time_value, and helics::timeZero.
| bool helics::TimeCoordinator::checkingExec |
flag indicating that the coordinator is trying to enter the exec mode
Referenced by enteringExecMode().
|
protected |
federates which this Federate is temporally dependent on
Referenced by addDependency(), addDependent(), checkExecEntry(), checkTimeGrant(), dependencyCount(), disconnect(), generateDebuggingTimeInfo(), getMinDependency(), hasActiveTimeDependencies(), localError(), processTimeMessage(), removeDependency(), removeDependent(), timeRequest(), and updateTimeFactors().
| bool helics::TimeCoordinator::hasInitUpdates {false} |
flag indicating that a value or message was received during initialization stage
Referenced by checkExecEntry(), updateMessageTime(), and updateValueTime().
| iteration_request helics::TimeCoordinator::iterating |
indicator that the coordinator should be iterating if need be
Referenced by checkExecEntry(), checkTimeGrant(), enteringExecMode(), timeRequest(), updateMessageTime(), and updateValueTime().
| global_federate_id helics::TimeCoordinator::source_id |
the identifier for inserting into the source id field of any generated messages;
Referenced by addDependency(), checkExecEntry(), disconnect(), enteringExecMode(), localError(), and processTimeMessage().
|
protected |
a blocking time to not grant time >= the specified time
Referenced by checkExecEntry(), and checkTimeGrant().
|
protected |
time to use as a basis for calculating the next grantable time(usually time granted unless values are changing)
Referenced by checkExecEntry(), checkTimeGrant(), localError(), and processTimeMessage().
1.8.17