8 #include "../core/LocalFederateId.hpp"
9 #include "../core/helicsTime.hpp"
10 #include "../helics_enums.h"
11 #include "FederateInfo.hpp"
12 #include "helics/helics-config.h"
14 #include "helics_cxx_export.h"
25 namespace gmlc::libguarded {
26 template<
class T,
class M>
36 class AsyncFedCallInfo;
37 class MessageOperator;
38 class ConnectorFederateManager;
39 class PotentialInterfacesManager;
70 PENDING_ITERATIVE_TIME = 8,
77 PENDING_ITERATIVE_INIT = 12,
81 std::atomic<Modes> currentMode{Modes::STARTUP};
82 char nameSegmentSeparator =
'/';
84 bool strictConfigChecking{
true};
86 bool useJsonSerialization{
false};
88 bool observerMode{
false};
90 bool retriggerTimeRequest{
false};
92 bool singleThreadFederate{
false};
94 bool hasPotentialInterfaces{
false};
97 LocalFederateId fedID;
100 Time mCurrentTime = Time::minVal();
101 Time mStopTime = Time::maxVal();
105 std::unique_ptr<gmlc::libguarded::shared_guarded<AsyncFedCallInfo, std::mutex>> asyncCallInfo;
106 std::unique_ptr<ConnectorFederateManager> cManager;
108 std::unique_ptr<PotentialInterfacesManager> potManager;
109 std::atomic<int> potInterfacesSequence{0};
111 std::function<void(
Time,
Time,
bool)> timeRequestEntryCallback;
112 std::function<void(
Time,
bool)> timeUpdateCallback;
113 std::function<void(Modes, Modes)> modeUpdateCallback;
114 std::function<void(
Time,
bool)> timeRequestReturnCallback;
115 std::function<void(
bool)> initializingEntryCallback;
116 std::function<void()> executingEntryCallback;
117 std::function<void()> cosimulationTerminationCallback;
118 std::function<void(
int, std::string_view)> errorHandlerCallback;
132 const std::shared_ptr<Core>& core,
140 Federate(std::string_view fedname, CoreApp& core,
const FederateInfo& fedInfo = FederateInfo{});
144 explicit Federate(
const std::string& configString);
150 Federate(std::string_view fedname,
const std::string& configString);
154 Federate(Federate&& fed) noexcept;
166 void enterInitializingMode();
172 void enterInitializingModeAsync();
177 bool isAsyncOperationCompleted() const;
181 void enterInitializingModeComplete();
188 void enterInitializingModeIterative();
194 void enterInitializingModeIterativeAsync();
200 void enterInitializingModeIterativeComplete();
224 void finalizeAsync();
226 void finalizeComplete();
230 void processCommunication(std::chrono::milliseconds period = std::chrono::milliseconds(0));
233 virtual
void disconnect();
239 void localError(
int errorcode, std::string_view message);
246 void globalError(
int errorcode, std::string_view message);
251 void localError(
int errorcode);
256 void globalError(
int errorcode);
265 void setSeparator(
char separator) { nameSegmentSeparator = separator; }
269 Time requestTime(
Time nextInternalTimeStep);
290 void requestTimeAsync(
Time nextInternalTimeStep);
302 Time requestTimeComplete();
314 void setTag(std::string_view tag, std::string_view value);
321 const std::string& getTag(std::string_view tag)
const;
327 virtual void setProperty(int32_t option,
double timeValue);
333 virtual void setProperty(int32_t option,
Time timeValue);
339 virtual void setFlagOption(
int flag,
bool flagValue =
true);
344 virtual void setProperty(int32_t option, int32_t optionValue);
349 virtual Time getTimeProperty(int32_t option)
const;
354 virtual bool getFlagOption(
int flag)
const;
358 virtual int getIntegerProperty(int32_t option)
const;
366 void setLoggingCallback(
367 const std::function<
void(
int, std::string_view, std::string_view)>& logFunction);
376 void setInitializingEntryCallback(std::function<
void(
bool)> callback);
383 void setExecutingEntryCallback(std::function<
void()> callback);
392 void setTimeRequestEntryCallback(std::function<
void(
Time,
Time,
bool)> callback);
402 void setTimeUpdateCallback(std::function<
void(
Time,
bool)> callback);
412 void setModeUpdateCallback(std::function<
void(Modes, Modes)> callback);
421 void setTimeRequestReturnCallback(std::function<
void(
Time,
bool)> callback);
428 void setCosimulationTerminatedCallback(std::function<
void()> callback);
436 void setErrorHandlerCallback(std::function<
void(
int, std::string_view)> errorHandlerCallback);
451 std::string query(std::string_view target,
452 std::string_view queryStr,
467 std::string query(std::string_view queryStr,
481 QueryId queryAsync(std::string_view target,
482 std::string_view queryStr,
494 QueryId queryAsync(std::string_view queryStr,
506 std::string queryComplete(
QueryId queryIndex);
511 bool isQueryCompleted(
QueryId queryIndex)
const;
521 void setQueryCallback(
const std::function<std::string(std::string_view)>& queryFunction);
528 void setGlobal(std::string_view valueName, std::string_view value);
533 void addAlias(std::string_view interfaceName, std::string_view alias);
543 std::string_view target,
544 std::string_view commandStr,
551 std::pair<std::string, std::string> getCommand();
557 std::pair<std::string, std::string> waitCommand();
563 void addDependency(std::string_view fedName);
570 Filter& registerGlobalFilter(std::string_view filterName,
571 std::string_view inputType = std::string_view{},
572 std::string_view outputType = std::string_view{});
580 CloningFilter& registerGlobalCloningFilter(std::string_view filterName,
581 std::string_view inputType = std::string_view{},
582 std::string_view outputType = std::string_view{});
590 Filter& registerFilter(std::string_view filterName,
591 std::string_view inputType = std::string_view{},
592 std::string_view outputType = std::string_view{});
602 CloningFilter& registerCloningFilter(std::string_view filterName,
603 std::string_view inputType = std::string_view{},
604 std::string_view outputType = std::string_view{});
610 return registerGlobalFilter(std::string(), std::string_view{}, std::string_view{});
619 Translator& registerGlobalTranslator(std::int32_t translatorType,
620 std::string_view translatorName,
621 std::string_view endpointType = std::string_view{},
622 std::string_view units = std::string_view{});
631 Translator& registerTranslator(std::int32_t translatorType,
632 std::string_view translatorName,
633 std::string_view endpointType = std::string_view{},
634 std::string_view units = std::string_view{});
642 std::string_view endpointType = std::string_view{},
643 std::string_view units = std::string_view{})
645 return registerGlobalTranslator(0, translatorName, endpointType, units);
655 std::string_view endpointType = std::string_view{},
656 std::string_view units = std::string_view{})
658 return registerTranslator(0, translatorName, endpointType, units);
668 return registerGlobalCloningFilter(std::string(), std::string(), std::string());
674 const Filter& getFilter(std::string_view filterName)
const;
679 const Filter& getFilter(
int index)
const;
684 Filter& getFilter(std::string_view filterName);
689 Filter& getFilter(
int index);
698 void setFilterOperator(
const Filter& filt, std::shared_ptr<FilterOperator> filtOp);
701 int getFilterCount()
const;
708 const Translator& getTranslator(std::string_view translatorName)
const;
714 const Translator& getTranslator(
int index)
const;
720 Translator& getTranslator(std::string_view translatorName);
735 void setTranslatorOperator(
const Translator& trans,
736 std::shared_ptr<TranslatorOperator> transOp);
739 int getTranslatorCount()
const;
750 void finalizeOperations();
751 void preTimeRequestOperations(
Time nextStep,
bool iterating);
752 void postTimeRequestOperations(
Time newTime,
bool iterating);
754 virtual void updateTime(
Time newTime,
Time oldTime);
757 virtual void startupToInitializeStateTransition();
760 virtual void initializeToExecuteStateTransition(
iteration_time iterate);
762 virtual void disconnectTransition();
765 virtual std::string localQuery(std::string_view queryStr)
const;
768 std::string localNameGenerator(std::string_view addition)
const;
770 void handleError(
int errorCode, std::string_view errorString,
bool noThrow);
771 void setAsyncCheck(std::function<
bool()> asyncCheck);
779 virtual void registerInterfaces(
const std::string& configString);
785 void registerConnectorInterfaces(
const std::string& configString);
793 registerConnectorInterfaces(configString);
796 auto getID() const noexcept {
return fedID; }
803 const std::string&
getName()
const {
return mName; }
811 void logMessage(
int level, std::string_view message)
const;
842 void completeOperation();
852 void updateFederateMode(Modes newMode);
854 void potentialInterfacesStartupSequence();
856 void updateSimulationTime(
Time newTime,
Time oldTime,
bool iterating);
861 void registerConnectorInterfacesJson(
const std::string& jsonString);
866 void registerConnectorInterfacesToml(
const std::string& tomlString);
869 void registerConnectorInterfacesJsonDetail(Json::Value& json);
871 checkValidFilterType(
bool useTypes,
FilterTypes opType,
const std::string& operation)
const;
884 mCore(core), handle(hid), mName(actName)
894 bool isValid()
const {
return handle.isValid(); }
895 bool operator<(
const Interface& inp)
const {
return (handle < inp.
handle); }
896 bool operator>(
const Interface& inp)
const {
return (handle > inp.handle); }
897 bool operator==(
const Interface& inp)
const {
return (handle == inp.handle); }
898 bool operator!=(
const Interface& inp)
const {
return (handle != inp.handle); }
904 const std::string& getName()
const;
906 [[deprecated]]
const std::string& getTarget()
const;
908 void addSourceTarget(std::string_view newTarget,
InterfaceType hint = InterfaceType::UNKNOWN);
910 void addDestinationTarget(std::string_view newTarget,
913 void removeTarget(std::string_view targetToRemove);
915 void addAlias(std::string_view alias);
917 const std::string& getInfo()
const;
919 void setInfo(std::string_view info);
925 void setTag(std::string_view tag, std::string_view value);
932 const std::string& getTag(std::string_view tag)
const;
934 virtual void setOption(int32_t option, int32_t value = 1);
937 virtual int32_t getOption(int32_t option)
const;
944 const std::string& getInjectionType()
const;
951 const std::string& getExtractionType()
const;
958 const std::string& getInjectionUnits()
const;
964 const std::string& getExtractionUnits()
const;
967 virtual const std::string& getDisplayName()
const = 0;
970 const std::string& getSourceTargets()
const;
973 const std::string& getDestinationTargets()
const;
975 std::size_t getSourceTargetCount()
const;
977 std::size_t getDestinationTargetCount()
const;
981 void disconnectFromCore();
Definition: application_api/Federate.hpp:27
Definition: Filters.hpp:100
Definition: core/Core.hpp:41
Definition: FederateInfo.hpp:29
Definition: application_api/Federate.hpp:48
Modes getCurrentMode() const noexcept
Definition: application_api/Federate.hpp:798
Translator & registerTranslator(std::string_view translatorName, std::string_view endpointType=std::string_view{}, std::string_view units=std::string_view{})
Definition: application_api/Federate.hpp:654
const std::string & getName() const
Definition: application_api/Federate.hpp:803
const std::string & getConfigFile() const
Definition: application_api/Federate.hpp:741
void logErrorMessage(std::string_view message) const
Definition: application_api/Federate.hpp:816
Time requestNextStep()
Definition: application_api/Federate.hpp:273
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:805
auto getID() const noexcept
Definition: application_api/Federate.hpp:796
void logDebugMessage(std::string_view message) const
Definition: application_api/Federate.hpp:837
CloningFilter & registerCloningFilter()
Definition: application_api/Federate.hpp:666
std::shared_ptr< Core > coreObject
reference to the core simulation API
Definition: application_api/Federate.hpp:99
std::string configFile
any config file used
Definition: application_api/Federate.hpp:102
void registerFilterInterfaces(const std::string &configString)
Definition: application_api/Federate.hpp:791
void logWarningMessage(std::string_view message) const
Definition: application_api/Federate.hpp:823
Time getCurrentTime() const noexcept
Definition: application_api/Federate.hpp:801
Translator & registerTranslator()
Definition: application_api/Federate.hpp:663
Modes
Definition: application_api/Federate.hpp:51
Time requestTimeAdvance(Time timeDelta)
Definition: application_api/Federate.hpp:278
Filter & registerFilter()
Definition: application_api/Federate.hpp:608
Translator & registerGlobalTranslator(std::string_view translatorName, std::string_view endpointType=std::string_view{}, std::string_view units=std::string_view{})
Definition: application_api/Federate.hpp:641
void logInfoMessage(std::string_view message) const
Definition: application_api/Federate.hpp:830
Definition: Filters.hpp:39
Definition: LocalFederateId.hpp:65
Definition: application_api/Federate.hpp:875
InterfaceHandle handle
the id as generated by the Federate
Definition: application_api/Federate.hpp:878
const std::string & getLocalName() const
Definition: application_api/Federate.hpp:901
bool isValid() const
Definition: application_api/Federate.hpp:894
InterfaceHandle getHandle() const
Definition: application_api/Federate.hpp:890
std::string mName
the name or key of the interface
Definition: application_api/Federate.hpp:879
Definition: application_api/Translator.hpp:35
@ HELICS_LOG_LEVEL_ERROR
Definition: helics_enums.h:206
@ HELICS_LOG_LEVEL_SUMMARY
Definition: helics_enums.h:212
@ HELICS_LOG_LEVEL_DEBUG
Definition: helics_enums.h:223
@ HELICS_LOG_LEVEL_WARNING
Definition: helics_enums.h:210
HelicsSequencingModes
Definition: helics_enums.h:425
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:427
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
bool operator!=(const SmallBuffer &sb1, const SmallBuffer &sb2)
Definition: SmallBuffer.hpp:412
IterationResult
Definition: CoreTypes.hpp:93
@ FINISHED
the federation has finished its execution
@ EXECUTING
the federation has entered execution state and it now advancing in time
constexpr Time timeZero
Definition: helicsTime.hpp:31
void cleanupHelicsLibrary()
Definition: Federate.cpp:40
IterationRequest
Definition: CoreTypes.hpp:102
InterfaceType
Definition: CoreTypes.hpp:111
FilterTypes
Definition: Filters.hpp:21
bool operator==(const SmallBuffer &sb1, const SmallBuffer &sb2)
Definition: SmallBuffer.hpp:406
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
Definition: helicsTime.hpp:43