 |
helics
3.0.1
|
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"
26 namespace libguarded {
27 template<
class T,
class M>
38 class AsyncFedCallInfo;
39 class MessageOperator;
40 class FilterFederateManager;
69 PENDING_ITERATIVE_TIME = 8,
77 std::atomic<Modes> currentMode{Modes::STARTUP};
78 char nameSegmentSeparator =
'/';
80 bool strictConfigChecking{
true};
82 bool useJsonSerialization{
false};
84 bool observerMode{
false};
90 Time currentTime = Time::minVal();
92 std::unique_ptr<gmlc::libguarded::shared_guarded<AsyncFedCallInfo, std::mutex>>
94 std::unique_ptr<FilterFederateManager> fManager;
108 Federate(
const std::string& fedname,
109 const std::shared_ptr<Core>& core,
121 explicit Federate(
const std::string& configString);
127 Federate(
const std::string& fedname,
const std::string& configString);
131 Federate(Federate&& fed) noexcept;
133 Federate(const Federate& fed) = delete;
137 Federate& operator=(Federate&& fed) noexcept;
139 Federate& operator=(const Federate& fed) = delete;
143 void enterInitializingMode();
149 void enterInitializingModeAsync();
154 bool isAsyncOperationCompleted() const;
158 void enterInitializingModeComplete();
181 void finalizeAsync();
183 void finalizeComplete();
187 virtual
void disconnect();
193 void localError(
int errorcode, const std::
string& message);
200 void globalError(
int errorcode, const std::
string& message);
205 void localError(
int errorcode);
210 void globalError(
int errorcode);
219 void setSeparator(
char separator) { nameSegmentSeparator = separator; }
223 Time requestTime(
Time nextInternalTimeStep);
244 void requestTimeAsync(
Time nextInternalTimeStep);
256 Time requestTimeComplete();
268 void setTag(
const std::string& tag,
const std::string& value);
275 const std::string& getTag(
const std::string& tag)
const;
281 void setProperty(int32_t option,
double timeValue);
287 void setProperty(int32_t option,
Time timeValue);
293 virtual void setFlagOption(
int flag,
bool flagValue =
true);
298 void setProperty(int32_t option, int32_t optionValue);
303 Time getTimeProperty(int32_t option)
const;
308 virtual bool getFlagOption(
int flag)
const;
312 int getIntegerProperty(int32_t option)
const;
320 void setLoggingCallback(
321 const std::function<
void(
int, std::string_view, std::string_view)>& logFunction);
336 std::string query(
const std::string& target,
337 const std::string& queryStr,
352 std::string query(
const std::string& queryStr,
366 QueryId queryAsync(
const std::string& target,
367 const std::string& queryStr,
379 QueryId queryAsync(
const std::string& queryStr,
391 std::string queryComplete(
QueryId queryIndex);
396 bool isQueryCompleted(
QueryId queryIndex)
const;
406 void setQueryCallback(
const std::function<std::string(std::string_view)>& queryFunction);
413 void setGlobal(
const std::string& valueName,
const std::string& value);
424 const std::string& target,
425 const std::string& commandStr,
432 std::pair<std::string, std::string> getCommand();
438 std::pair<std::string, std::string> waitCommand();
444 void addDependency(
const std::string& fedName);
451 Filter& registerGlobalFilter(
const std::string& filterName,
452 const std::string& inputType = std::string(),
453 const std::string& outputType = std::string());
461 CloningFilter& registerGlobalCloningFilter(
const std::string& filterName,
462 const std::string& inputType = std::string(),
463 const std::string& outputType = std::string());
471 Filter& registerFilter(
const std::string& filterName,
472 const std::string& inputType = std::string(),
473 const std::string& outputType = std::string());
483 CloningFilter& registerCloningFilter(
const std::string& filterName,
484 const std::string& inputType = std::string(),
485 const std::string& outputType = std::string());
491 return registerGlobalFilter(std::string(), std::string(), std::string());
498 return registerGlobalCloningFilter(std::string(), std::string(), std::string());
504 const Filter& getFilter(
const std::string& filterName)
const;
509 const Filter& getFilter(
int index)
const;
514 Filter& getFilter(
const std::string& filterName);
519 Filter& getFilter(
int index);
528 void setFilterOperator(
const Filter& filt, std::shared_ptr<FilterOperator> op);
531 int getFilterCount()
const;
535 virtual void updateTime(
Time newTime,
Time oldTime);
538 virtual void startupToInitializeStateTransition();
541 virtual void initializeToExecuteStateTransition(
IterationResult iterate);
543 virtual void disconnectTransition();
546 virtual std::string localQuery(
const std::string& queryStr)
const;
554 virtual void registerInterfaces(
const std::string& configString);
560 void registerFilterInterfaces(
const std::string& configString);
563 auto getID() const noexcept {
return fedID; }
570 const std::string&
getName()
const {
return mName; }
575 int filterCount()
const;
580 void logMessage(
int level,
const std::string& message)
const;
611 void completeOperation();
618 void registerFilterInterfacesJson(
const std::string& jsonString);
623 void registerFilterInterfacesToml(
const std::string& tomlString);
636 cr(core), handle(id), mName(actName)
646 bool isValid()
const {
return handle.isValid(); }
647 bool operator<(
const Interface& inp)
const {
return (handle < inp.
handle); }
648 bool operator>(
const Interface& inp)
const {
return (handle > inp.handle); }
649 bool operator==(
const Interface& inp)
const {
return (handle == inp.handle); }
650 bool operator!=(
const Interface& inp)
const {
return (handle != inp.handle); }
656 const std::string& getName()
const;
658 const std::string& getTarget()
const;
660 void addSourceTarget(std::string_view newTarget);
662 void addDestinationTarget(std::string_view newTarget);
664 void removeTarget(std::string_view targetToRemove);
667 const std::string& getInfo()
const;
669 void setInfo(
const std::string& info);
675 void setTag(
const std::string& tag,
const std::string& value);
682 const std::string& getTag(
const std::string& tag)
const;
684 virtual void setOption(int32_t option, int32_t value = 1);
687 virtual int32_t getOption(int32_t option)
const;
694 const std::string& getInjectionType()
const;
701 const std::string& getExtractionType()
const;
708 const std::string& getInjectionUnits()
const;
714 const std::string& getExtractionUnits()
const;
717 virtual const std::string& getDisplayName()
const = 0;
720 const std::string& getSourceTargets()
const;
723 const std::string& getDestinationTargets()
const;
727 void disconnectFromCore();
Core * cr
pointer to the core object
Definition: application_api/Federate.hpp:629
constexpr Time timeZero
Definition: helicsTime.hpp:31
void completeOperation()
Definition: Federate.cpp:606
virtual const std::string & getDisplayName() const =0
Definition: Federate.cpp:1470
const Filter & getFilter(const std::string &filterName) const
Definition: Federate.cpp:1305
Modes
Definition: application_api/Federate.hpp:50
Definition: Filters.hpp:99
constexpr Time initializationTime
Definition: helicsTime.hpp:38
@ HALTED
indicator that the simulation has been halted
Filter & registerFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1269
void setInfo(const std::string &info)
Definition: Federate.cpp:1400
void addSourceTarget(std::string_view newTarget)
Definition: Federate.cpp:1365
bool isQueryCompleted(QueryId queryIndex) const
Definition: Federate.cpp:1232
const std::string & getName() const
Definition: application_api/Federate.hpp:570
int getFilterCount() const
Definition: Federate.cpp:1323
const std::string & getTag(const std::string &tag) const
Definition: Federate.cpp:1410
FederateInfo loadFederateInfo(const std::string &configString)
Definition: FederateInfo.cpp:675
const std::string & getLocalName() const
Definition: application_api/Federate.hpp:653
void disconnectFromCore()
Definition: Federate.cpp:1483
BaseType value() const noexcept
Definition: helicsTypes.hpp:74
virtual void closeHandle(InterfaceHandle handle)=0
void registerFilterInterfaces(const std::string &configString)
Definition: Federate.cpp:818
virtual void startupToInitializeStateTransition()
Definition: Federate.cpp:797
virtual int32_t getHandleOption(InterfaceHandle handle, int32_t option) const =0
void addDestinationTarget(std::string_view newTarget)
Definition: Federate.cpp:1375
void setProperty(int32_t option, double timeValue)
Definition: Federate.cpp:462
virtual const std::string & getSourceTargets(InterfaceHandle handle) const =0
bool forceNewCore
indicator that the federate should not use an existing core
Definition: FederateInfo.hpp:33
std::shared_ptr< Core > findJoinableCoreOfType(CoreType type)
Definition: CoreFactory.cpp:280
void finalizeAsync()
Definition: Federate.cpp:558
@ ERROR_RESULT
indicator that an error has occurred
@ HELICS_LOG_LEVEL_WARNING
Definition: helics_enums.h:185
Modes getCurrentMode() const
Definition: application_api/Federate.hpp:565
void enterInitializingModeComplete()
Definition: Federate.cpp:288
Definition: LocalFederateId.hpp:65
std::pair< std::string, std::string > getCommand()
Definition: Federate.cpp:1254
std::atomic< Modes > currentMode
the current state of the simulation
Definition: application_api/Federate.hpp:77
size_t cleanUpBrokers()
Definition: BrokerFactory.cpp:269
void setLoggingCallback(const std::function< void(int, std::string_view, std::string_view)> &logFunction)
Definition: Federate.cpp:487
void enterInitializingModeAsync()
Definition: Federate.cpp:248
@ HELICS_FLAG_STRICT_CONFIG_CHECKING
Definition: helics_enums.h:132
virtual bool getFlagOption(int flag) const
Definition: Federate.cpp:501
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
FilterTypes filterTypeFromString(const std::string &filterType) noexcept
Definition: Filters.cpp:32
virtual void registerInterfaces(const std::string &configString)
Definition: Federate.cpp:813
virtual void addSourceTarget(InterfaceHandle handle, std::string_view name, InterfaceType hint=InterfaceType::UNKNOWN)=0
void globalError(int errorcode, const std::string &message)
Definition: Federate.cpp:648
const std::string & getInjectionType() const
Definition: Federate.cpp:1440
QueryId queryAsync(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST)
Definition: Federate.cpp:1191
Definition: Filters.hpp:39
Time currentTime
the current simulation time
Definition: application_api/Federate.hpp:90
iteration_time requestTimeIterative(Time nextInternalTimeStep, IterationRequest iterate)
Definition: Federate.cpp:684
char nameSegmentSeparator
the separator between automatically prependend names
Definition: application_api/Federate.hpp:78
IterationResult enterExecutingMode(IterationRequest iterate=IterationRequest::NO_ITERATIONS)
Definition: Federate.cpp:316
@ HELICS_FLAG_OBSERVER
Definition: helics_enums.h:99
int getOptionIndex(std::string val)
Definition: FederateInfo.cpp:385
virtual void setFlagOption(int flag, bool flagValue=true)
Definition: Federate.cpp:493
virtual void disconnectTransition()
Definition: Federate.cpp:806
Filter & registerFilter()
Definition: application_api/Federate.hpp:489
CoreType coreType
the type of the core
Definition: FederateInfo.hpp:30
virtual void setInterfaceTag(InterfaceHandle handle, const std::string &tag, const std::string &value)=0
virtual void updateTime(Time newTime, Time oldTime)
Definition: Federate.cpp:792
virtual const std::string & getInterfaceTag(InterfaceHandle handle, const std::string &tag) const =0
int getOptionValue(std::string val)
Definition: FederateInfo.cpp:404
std::shared_ptr< Core > FindOrCreate(CoreType type, const std::string &coreName, std::vector< std::string > args)
Definition: CoreFactory.cpp:189
@ HELICS_LOG_LEVEL_DEBUG
Definition: helics_enums.h:198
Definition: core-exceptions.hpp:66
Time getTimeProperty(int32_t option) const
Definition: Federate.cpp:477
Definition: core-exceptions.hpp:47
const std::string & getTarget() const
Definition: Federate.cpp:1360
const std::string & getInjectionUnits() const
Definition: Federate.cpp:1450
Definition: application_api/Federate.hpp:627
Definition: core/Core.hpp:42
Definition: core-exceptions.hpp:84
virtual int32_t getOption(int32_t option) const
Definition: Federate.cpp:1435
Definition: application_api/CoreApp.hpp:25
void enterExecutingModeAsync(IterationRequest iterate=IterationRequest::NO_ITERATIONS)
Definition: Federate.cpp:371
bool isMember(const toml::value &element, const std::string &key)
Definition: TomlProcessingFunctions.hpp:152
void removeTarget(std::string_view targetToRemove)
Definition: Federate.cpp:1385
void logMessage(int level, const std::string &message) const
Definition: Federate.cpp:1333
virtual const std::string & getDestinationTargets(InterfaceHandle handle) const =0
virtual const std::string & getExtractionType(InterfaceHandle handle) const =0
bool isValid() const
Definition: application_api/Federate.hpp:646
Definition: FederateInfo.hpp:20
InterfaceHandle handle
the id as generated by the Federate
Definition: application_api/Federate.hpp:630
IterationRequest
Definition: CoreTypes.hpp:89
virtual void setInterfaceInfo(InterfaceHandle handle, std::string info)=0
virtual std::string localQuery(const std::string &queryStr) const
Definition: Federate.cpp:1156
bool isAsyncOperationCompleted() const
Definition: Federate.cpp:266
Federate & operator=(Federate &&fed) noexcept
Definition: Federate.cpp:190
bool useJsonSerialization
Definition: application_api/Federate.hpp:82
const std::string & getTag(const std::string &tag) const
Definition: Federate.cpp:457
bool useJsonSerialization
Definition: FederateInfo.hpp:35
auto getID() const noexcept
Definition: application_api/Federate.hpp:563
IterationResult enterExecutingModeComplete()
Definition: Federate.cpp:408
const std::string & getName() const
Definition: Federate.cpp:1355
Time getCurrentTime() const
Definition: application_api/Federate.hpp:568
virtual const std::string & getInjectionType(InterfaceHandle handle) const =0
virtual ~Federate()
Definition: Federate.cpp:208
const std::string & getExtractionType() const
Definition: Federate.cpp:1445
const std::string & getSourceTargets() const
Definition: Federate.cpp:1460
IterationResult
Definition: CoreTypes.hpp:80
const std::string & getExtractionUnits() const
Definition: Federate.cpp:1455
virtual const std::string & getInjectionUnits(InterfaceHandle handle) const =0
CloningFilter & registerGlobalCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1298
HelicsSequencingModes
Definition: helics_enums.h:363
void cleanupHelicsLibrary()
Definition: Federate.cpp:37
virtual const std::string & getInterfaceInfo(InterfaceHandle handle) const =0
void enterInitializingMode()
Definition: Federate.cpp:222
CloningFilter & registerCloningFilter()
Definition: application_api/Federate.hpp:496
void sendCommand(const std::string &target, const std::string &commandStr, HelicsSequencingModes mode=HelicsSequencingModes::HELICS_SEQUENCING_MODE_FAST)
Definition: Federate.cpp:1247
void logInfoMessage(const std::string &message) const
Definition: application_api/Federate.hpp:599
virtual void addDestinationTarget(InterfaceHandle handle, std::string_view dest, InterfaceType hint=InterfaceType::UNKNOWN)=0
@ HELICS_FLAG_USE_JSON_SERIALIZATION
Definition: helics_enums.h:134
virtual void initializeToExecuteStateTransition(IterationResult iterate)
Definition: Federate.cpp:801
void localError(int errorcode, const std::string &message)
Definition: Federate.cpp:641
std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode=HELICS_SEQUENCING_MODE_FAST)
Definition: Federate.cpp:1178
std::pair< std::string, std::string > waitCommand()
Definition: Federate.cpp:1259
bool operator==(const SmallBuffer &sb1, const SmallBuffer &sb2)
Definition: SmallBuffer.hpp:376
InterfaceHandle getHandle() const
Definition: application_api/Federate.hpp:642
CloningFilter & registerCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1280
const std::string & getInfo() const
Definition: Federate.cpp:1395
void setGlobal(const std::string &valueName, const std::string &value)
Definition: Federate.cpp:1242
CloningFilter & make_cloning_filter(FilterTypes type, Federate *mFed, const std::string &delivery, const std::string &name)
Definition: Filters.cpp:265
std::string coreName
the name of the core
Definition: FederateInfo.hpp:41
Filter & make_filter(FilterTypes type, Federate *mFed, const std::string &name)
Definition: Filters.cpp:215
const std::string & getDestinationTargets() const
Definition: Federate.cpp:1465
bool operator!=(const SmallBuffer &sb1, const SmallBuffer &sb2)
Definition: SmallBuffer.hpp:382
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
virtual const std::string & getHandleName(InterfaceHandle handle) const =0
virtual void setHandleOption(InterfaceHandle handle, int32_t option, int32_t option_value)=0
void addDependency(const std::string &fedName)
Definition: Federate.cpp:1264
void requestTimeIterativeAsync(Time nextInternalTimeStep, IterationRequest iterate)
Definition: Federate.cpp:729
char separator
separator for global name of localFederates
Definition: FederateInfo.hpp:23
size_t cleanUpCores()
Definition: CoreFactory.cpp:320
Definition: helicsTime.hpp:47
@ HELICS_LOG_LEVEL_SUMMARY
Definition: helics_enums.h:187
void logWarningMessage(const std::string &message) const
Definition: application_api/Federate.hpp:592
@ HELICS_SEQUENCING_MODE_FAST
Definition: helics_enums.h:365
std::shared_ptr< Core > getEmptyCore()
Definition: CoreFactory.cpp:95
Time requestTimeAdvance(Time timeDelta)
Definition: application_api/Federate.hpp:232
void logErrorMessage(const std::string &message) const
Definition: application_api/Federate.hpp:585
Definition: core-exceptions.hpp:29
std::string mName
the name or key of the interface
Definition: application_api/Federate.hpp:631
iteration_time requestTimeIterativeComplete()
Definition: Federate.cpp:761
@ HELICS_LOG_LEVEL_ERROR
Definition: helics_enums.h:181
void logDebugMessage(const std::string &message) const
Definition: application_api/Federate.hpp:606
@ ITERATING
indicator that the iterations need to continue
Definition: LocalFederateId.hpp:22
std::string generateFullCoreInitString(const FederateInfo &fi)
Definition: FederateInfo.cpp:821
void finalize()
Definition: Federate.cpp:508
Definition: application_api/Federate.hpp:47
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:572
virtual const std::string & getExtractionUnits(InterfaceHandle handle) const =0
Time requestNextStep()
Definition: application_api/Federate.hpp:227
void setFilterOperator(const Filter &filt, std::shared_ptr< FilterOperator > op)
register a operator for the specified filter
Definition: Federate.cpp:1328
Definition: application_api/Federate.hpp:28
Filter & registerGlobalFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1291
void finalizeComplete()
Definition: Federate.cpp:588
Time requestTime(Time nextInternalTimeStep)
Definition: Federate.cpp:655
bool loadCores()
Definition: loadCores.cpp:149
bool strictConfigChecking
Definition: application_api/Federate.hpp:80
bool observerMode
Definition: application_api/Federate.hpp:84
void setTag(const std::string &tag, const std::string &value)
Definition: Federate.cpp:1415
void setQueryCallback(const std::function< std::string(std::string_view)> &queryFunction)
Definition: Federate.cpp:1227
virtual void setOption(int32_t option, int32_t value=1)
Definition: Federate.cpp:1425
void close()
Definition: Federate.cpp:1475
std::shared_ptr< Core > coreObject
reference to the core simulation API
Definition: application_api/Federate.hpp:89
virtual void removeTarget(InterfaceHandle handle, std::string_view targetToRemove)=0
void setTag(const std::string &tag, const std::string &value)
Definition: Federate.cpp:452
int getIntegerProperty(int32_t option) const
Definition: Federate.cpp:482
Federate() noexcept
Definition: Federate.cpp:167
std::string queryComplete(QueryId queryIndex)
Definition: Federate.cpp:1216
Time requestTimeComplete()
Definition: Federate.cpp:743
Definition: core-exceptions.hpp:18
void requestTimeAsync(Time nextInternalTimeStep)
Definition: Federate.cpp:715
int filterCount() const
Definition: Federate.cpp:1151
std::string defName
a default name to use for a federate
Definition: FederateInfo.hpp:40
virtual void disconnect()
Definition: Federate.cpp:599
FilterTypes
Definition: Filters.hpp:21
std::string generateJsonErrorResponse(JsonErrorCodes code, const std::string &message)
Definition: JsonGeneration.hpp:36