9 #include "../common/GuardedTypes.hpp"
10 #include "ActionMessage.hpp"
11 #include "BaseTimeCoordinator.hpp"
13 #include "json/forwards.h"
25 Time timeDelta = Time::epsilon();
35 bool wait_for_current_time_updates =
false;
36 bool uninterruptible =
false;
37 bool restrictive_time_policy =
false;
41 int maxIterations = 50;
69 Time maxTime{Time::maxVal()};
78 std::uint8_t currentRestrictionLevel{0};
114 void setProperty(
int intProperty,
int propertyVal);
140 const auto& getBarriers()
const {
return timeBlocks; }
158 void specifyNonGranting(
bool value =
true) {
nonGranting = value; }
162 bool updateNextExecutionTime();
165 void updateNextPossibleEventTime();
167 Time getNextPossibleTime()
const;
168 Time generateAllowedTime(
Time testTime)
const;
173 std::pair<bool, bool> checkAndSendTimeRequest(ActionMessage& upd, GlobalFederateId skip)
const;
175 void sendTimeRequest(GlobalFederateId triggerFed)
const;
176 void updateTimeGrant();
178 bool transmitTimingMessages(ActionMessage& msg,
179 GlobalFederateId skipFed = GlobalFederateId{})
const;
183 Time updateTimeBlocks(int32_t blockId,
Time newTime);
199 virtual bool addDependent(GlobalFederateId fedID)
override;
209 checkExecEntry(GlobalFederateId triggerFed = GlobalFederateId{})
override;
213 GlobalFederateId minFed = GlobalFederateId{},
214 std::int32_t responseSequenceCounter = 0);
224 Time newMessageTime);
Definition: application_api/Federate.hpp:27
Definition: ActionMessage.hpp:30
Definition: BaseTimeCoordinator.hpp:25
bool nonGranting
Definition: BaseTimeCoordinator.hpp:42
Definition: TimeCoordinator.hpp:48
Time time_requested
the most recent time requested
Definition: TimeCoordinator.hpp:56
virtual std::string printTimeStatus() const override
Definition: TimeCoordinator.cpp:880
Time time_message
the time of the earliest message event
Definition: TimeCoordinator.hpp:62
virtual bool updateTimeFactors() override
Definition: TimeCoordinator.cpp:429
std::vector< std::pair< Time, int32_t > > timeBlocks
blocks for a particular timeblocking link
Definition: TimeCoordinator.hpp:75
virtual MessageProcessingResult checkExecEntry(GlobalFederateId triggerFed=GlobalFederateId{}) override
Definition: TimeCoordinator.cpp:993
virtual void removeDependent(GlobalFederateId fedID) override
Definition: TimeCoordinator.cpp:923
std::vector< GlobalFederateId > getDependencies() const
Definition: TimeCoordinator.cpp:934
bool needSendAll
Definition: TimeCoordinator.hpp:90
void processConfigUpdateMessage(const ActionMessage &cmd)
Definition: TimeCoordinator.cpp:1472
void setOptionFlag(int optionFlag, bool value)
Definition: TimeCoordinator.cpp:1403
virtual bool addDependency(GlobalFederateId fedID) override
Definition: TimeCoordinator.cpp:894
tcoptions info
basic time control information
Definition: TimeCoordinator.hpp:77
void enterInitialization()
Definition: TimeCoordinator.cpp:304
void updateMessageTime(Time messageUpdateTime, bool allowRequestSend)
Definition: TimeCoordinator.cpp:395
TimeData upstream
the variables for time coordination
Definition: TimeCoordinator.hpp:51
void updateValueTime(Time valueUpdateTime, bool allowRequestSend)
Definition: TimeCoordinator.cpp:210
bool hasInitUpdates
flag indicating that a value or message was received during initialization stage
Definition: TimeCoordinator.hpp:85
bool dynamicJoining
if set to true the time coordinator is joining an ongoing co-simulation
Definition: TimeCoordinator.hpp:98
Time getRequestedTime() const
Definition: TimeCoordinator.hpp:130
MessageProcessingResult checkTimeGrant(GlobalFederateId triggerFed=GlobalFederateId{})
Definition: TimeCoordinator.cpp:479
virtual void removeDependency(GlobalFederateId fedID) override
Definition: TimeCoordinator.cpp:912
Time time_block
a blocking time to not grant time >= the specified time
Definition: TimeCoordinator.hpp:68
int getIntegerProperty(int intProperty) const
Definition: TimeCoordinator.cpp:1442
std::pair< GlobalFederateId, Time > getMinGrantedDependency() const
Definition: TimeCoordinator.cpp:1203
std::atomic< int32_t > iteration
current number of iterations
Definition: TimeCoordinator.hpp:100
void setProperty(int timeProperty, Time propertyVal)
Definition: TimeCoordinator.cpp:1367
virtual void enteringExecMode(IterationRequest mode) override
Definition: TimeCoordinator.cpp:24
Time time_next
the next possible internal event time
Definition: TimeCoordinator.hpp:57
TimeCoordinator(std::function< void(const ActionMessage &)> userSendMessageFunction)
Definition: TimeCoordinator.hpp:106
void timeRequest(Time nextTime, IterationRequest iterate, Time newValueTime, Time newMessageTime)
Definition: TimeCoordinator.cpp:103
bool globalTime
true if using a global time manager parent
Definition: TimeCoordinator.hpp:94
Time getGrantedTime() const
Definition: TimeCoordinator.hpp:128
bool hasIterationData
flag indicating that a value or message was received during iteration
Definition: TimeCoordinator.hpp:87
bool triggered
indicator the federate was triggered recently
Definition: TimeCoordinator.hpp:92
std::vector< GlobalFederateId > getDependents() const
Definition: TimeCoordinator.hpp:136
Time time_value
the time of the earliest value event
Definition: TimeCoordinator.hpp:63
Time time_allow
the current allowable time
Definition: TimeCoordinator.hpp:60
shared_guarded_m< std::vector< GlobalFederateId > > dependency_federates
these are to maintain an accessible record of dependency federates
Definition: TimeCoordinator.hpp:73
virtual void generateDebuggingTimeInfo(Json::Value &base) const override
Definition: TimeCoordinator.cpp:269
void setDynamicJoining()
Definition: TimeCoordinator.hpp:118
void sendUpdatedExecRequest(GlobalFederateId target=GlobalFederateId{}, GlobalFederateId minFed=GlobalFederateId{}, std::int32_t responseSequenceCounter=0)
Definition: TimeCoordinator.cpp:958
void generateConfig(Json::Value &base) const
Definition: TimeCoordinator.cpp:244
Time time_grantBase
Definition: TimeCoordinator.hpp:66
shared_guarded_m< std::vector< GlobalFederateId > > dependent_federates
these are to maintain an accessible record of dependent federates
Definition: TimeCoordinator.hpp:71
void localError()
Definition: TimeCoordinator.cpp:60
virtual bool addDependent(GlobalFederateId fedID) override
Definition: TimeCoordinator.cpp:903
TimeCoordinator()=default
IterationRequest iterating
indicator that the coordinator should be iteratingif need be
Definition: TimeCoordinator.hpp:82
Time time_granted
the most recent time granted
Definition: TimeCoordinator.hpp:55
virtual Time getNextTime() const override
Definition: TimeCoordinator.cpp:322
virtual TimeProcessingResult processTimeMessage(const ActionMessage &cmd) override
Definition: TimeCoordinator.cpp:1221
void requestTimeCheck()
Definition: TimeCoordinator.cpp:327
Time getTimeProperty(int timeProperty) const
Definition: TimeCoordinator.cpp:1424
Time time_exec
the time of the next targeted execution
Definition: TimeCoordinator.hpp:61
bool getOptionFlag(int optionFlag) const
Definition: TimeCoordinator.cpp:1454
Time time_minminDe
the minimum of the minimum dependency event Time
Definition: TimeCoordinator.hpp:58
Time allowedSendTime() const
Definition: TimeCoordinator.hpp:132
int32_t getCurrentIteration() const
Definition: TimeCoordinator.hpp:144
Time time_minDe
the minimum event time of the dependencies
Definition: TimeCoordinator.hpp:59
Definition: TimeDependencies.hpp:62
Definition: TimeCoordinator.hpp:23
bool event_triggered
Definition: TimeCoordinator.hpp:40
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
MessageProcessingResult
Definition: CoreTypes.hpp:74
constexpr Time timeZero
Definition: helicsTime.hpp:31
IterationRequest
Definition: CoreTypes.hpp:102
@ NO_ITERATIONS
indicator that the iterations have completed
TimeProcessingResult
Definition: TimeDependencies.hpp:42
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27