 |
helics
2.8.1
|
8 #include "../core/federate_id.hpp"
9 #include "../core/helics-time.hpp"
10 #include "../helics_enums.h"
11 #include "FederateInfo.hpp"
12 #include "helics/helics-config.h"
14 #include "helics_cxx_export.h"
24 namespace libguarded {
25 template<
class T,
class M>
36 class AsyncFedCallInfo;
37 class MessageOperator;
38 class FilterFederateManager;
58 pending_iterative_time =
65 std::atomic<modes> currentMode{modes::startup};
66 char nameSegmentSeparator =
'/';
68 bool strictConfigChecking{
true};
70 bool useJsonSerialization{
false};
76 Time currentTime = Time::minVal();
78 std::unique_ptr<gmlc::libguarded::shared_guarded<AsyncFedCallInfo, std::mutex>>
80 std::unique_ptr<FilterFederateManager> fManager;
95 const std::shared_ptr<Core>& core,
107 explicit Federate(
const std::string& configString);
113 Federate(
const std::string& fedname,
const std::string& configString);
117 Federate(Federate&&
fed) noexcept;
119 Federate(const Federate&
fed) = delete;
123 Federate& operator=(Federate&&
fed) noexcept;
125 Federate& operator=(const Federate&
fed) = delete;
129 void enterInitializingMode();
135 void enterInitializingModeAsync();
140 bool isAsyncOperationCompleted() const;
144 void enterInitializingModeComplete();
168 void finalizeAsync();
170 void finalizeComplete();
174 virtual
void disconnect();
179 [[deprecated("please use localError method")]]
void error(
int errorcode);
186 [[deprecated("please use localError method")]]
void error(
int errorcode,
187 const std::
string& message);
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();
267 void setProperty(int32_t option,
double timeValue);
273 void setProperty(int32_t option,
Time timeValue);
279 virtual void setFlagOption(
int flag,
bool flagValue =
true);
284 void setProperty(int32_t option, int32_t optionValue);
289 Time getTimeProperty(int32_t option)
const;
294 virtual bool getFlagOption(
int flag)
const;
298 int getIntegerProperty(int32_t option)
const;
306 void setLoggingCallback(
307 const std::function<
void(
int,
const std::string&,
const std::string&)>& logFunction);
322 std::string query(
const std::string& target,
323 const std::string& queryStr,
338 std::string query(
const std::string& queryStr,
352 query_id_t queryAsync(
const std::string& target,
353 const std::string& queryStr,
363 query_id_t queryAsync(
const std::string& queryStr,
375 std::string queryComplete(
query_id_t queryIndex);
380 bool isQueryCompleted(
query_id_t queryIndex)
const;
390 void setQueryCallback(
const std::function<std::string(
const std::string&)>& queryFunction);
397 void setGlobal(
const std::string& valueName,
const std::string& value);
403 void addDependency(
const std::string& fedName);
410 Filter& registerGlobalFilter(
const std::string& filterName,
411 const std::string& inputType = std::string(),
412 const std::string& outputType = std::string());
420 CloningFilter& registerGlobalCloningFilter(
const std::string& filterName,
421 const std::string& inputType = std::string(),
422 const std::string& outputType = std::string());
430 Filter& registerFilter(
const std::string& filterName,
431 const std::string& inputType = std::string(),
432 const std::string& outputType = std::string());
442 CloningFilter& registerCloningFilter(
const std::string& filterName,
443 const std::string& inputType = std::string(),
444 const std::string& outputType = std::string());
450 return registerGlobalFilter(std::string(), std::string(), std::string());
457 return registerGlobalCloningFilter(std::string(), std::string(), std::string());
464 void addSourceTarget(
const Filter& filt,
const std::string& targetEndpoint);
469 void addDestinationTarget(
const Filter& filt,
const std::string& targetEndpoint);
480 const Filter& getFilter(
const std::string& filterName)
const;
485 const Filter& getFilter(
int index)
const;
490 Filter& getFilter(
const std::string& filterName);
495 Filter& getFilter(
int index);
504 void setFilterOperator(
const Filter& filt, std::shared_ptr<FilterOperator> op);
507 int getFilterCount()
const;
511 virtual void updateTime(
Time newTime,
Time oldTime);
514 virtual void startupToInitializeStateTransition();
520 virtual std::string localQuery(
const std::string& queryStr)
const;
528 virtual void registerInterfaces(
const std::string& configString);
534 void registerFilterInterfaces(
const std::string& configString);
539 auto getID() const noexcept {
return fedID; }
546 const std::string&
getName()
const {
return name; }
551 int filterCount()
const;
569 void setInterfaceOption(
interface_handle handle, int32_t option, int32_t option_value = 1);
613 return getExtractionUnits(handle);
620 void logMessage(
int level,
const std::string& message)
const;
651 void completeOperation();
658 void registerFilterInterfacesJson(
const std::string& jsonString);
663 void registerFilterInterfacesToml(
const std::string& tomlString);
constexpr Time timeZero
Definition: helics-time.hpp:31
@ data
print timing+data transmissions
Definition: loggingHelper.hpp:30
void completeOperation()
Definition: Federate.cpp:573
BaseType value() const noexcept
Definition: helicsTypes.hpp:75
@ pending_exec
state pending EnterExecution State
void setInterfaceOption(interface_handle handle, int32_t option, int32_t option_value=1)
Definition: Federate.cpp:1355
std::atomic< modes > currentMode
the current state of the simulation
Definition: application_api/Federate.hpp:65
@ error
error state no core communication is possible but values can be retrieved
@ helics_flag_use_json_serialization
Definition: helics_enums.h:121
const Filter & getFilter(const std::string &filterName) const
Definition: Federate.cpp:1322
size_t cleanUpBrokers()
Definition: BrokerFactory.cpp:266
Definition: Filters.hpp:135
bool isMember(const toml::value &element, const std::string &key)
Definition: TomlProcessingFunctions.hpp:148
constexpr Time initializationTime
Definition: helics-time.hpp:38
const std::string & getName() const
Definition: application_api/Federate.hpp:546
int getFilterCount() const
Definition: Federate.cpp:1340
@ iterating
indicator that the iterations need to continue
FederateInfo loadFederateInfo(const std::string &configString)
Definition: FederateInfo.cpp:639
iteration_request
Definition: core-types.hpp:90
iteration_result enterExecutingModeComplete()
Definition: Federate.cpp:395
void error(int errorcode)
Definition: Federate.cpp:596
void registerFilterInterfaces(const std::string &configString)
Definition: Federate.cpp:798
virtual void startupToInitializeStateTransition()
Definition: Federate.cpp:784
const std::string & getExtractionType(interface_handle handle) const
Definition: Federate.cpp:1307
void setProperty(int32_t option, double timeValue)
Definition: Federate.cpp:435
Definition: federate_id.hpp:22
bool forceNewCore
indicator that the federate should not use an existing core
Definition: FederateInfo.hpp:32
void finalizeAsync()
Definition: Federate.cpp:526
iteration_result
Definition: core-types.hpp:81
@ helics_log_level_summary
Definition: helics_enums.h:171
interface_handle getHandle() const
Definition: Filters.hpp:80
void enterInitializingModeComplete()
Definition: Federate.cpp:278
void addSourceTarget(const Filter &filt, const std::string &targetEndpoint)
Definition: Federate.cpp:1277
void closeInterface(interface_handle handle)
Definition: Federate.cpp:1371
void enterInitializingModeAsync()
Definition: Federate.cpp:238
virtual bool getFlagOption(int flag) const
Definition: Federate.cpp:471
iteration_result enterExecutingMode(iteration_request iterate=iteration_request::no_iterations)
Definition: Federate.cpp:306
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
toml::value loadToml(const std::string &tomlString)
Definition: TomlProcessingFunctions.cpp:22
virtual void registerInterfaces(const std::string &configString)
Definition: Federate.cpp:793
@ pending_iterative_time
state that the federate is pending an iterative time request
std::shared_ptr< Core > FindOrCreate(core_type type, const std::string &coreName, std::vector< std::string > args)
Definition: CoreFactory.cpp:180
void globalError(int errorcode, const std::string &message)
Definition: Federate.cpp:629
modes
Definition: application_api/Federate.hpp:47
Definition: Filters.hpp:39
Time currentTime
the current simulation time
Definition: application_api/Federate.hpp:76
void setInfo(interface_handle handle, const std::string &info)
Definition: Federate.cpp:1379
char nameSegmentSeparator
the separator between automatically prependend names
Definition: application_api/Federate.hpp:66
@ helics_log_level_warning
Definition: helics_enums.h:169
int getOptionIndex(std::string val)
Definition: FederateInfo.cpp:356
virtual void setFlagOption(int flag, bool flagValue=true)
Definition: Federate.cpp:466
void requestTimeIterativeAsync(Time nextInternalTimeStep, iteration_request iterate)
Definition: Federate.cpp:715
Filter & registerFilter()
Definition: application_api/Federate.hpp:448
virtual void updateTime(Time newTime, Time oldTime)
Definition: Federate.cpp:779
int getOptionValue(std::string val)
Definition: FederateInfo.cpp:375
helics_sequencing_mode
Definition: helics_enums.h:333
Definition: core-exceptions.hpp:67
filter_types
Definition: Filters.hpp:21
Time getTimeProperty(int32_t option) const
Definition: Federate.cpp:450
Definition: core-exceptions.hpp:48
std::string queryComplete(query_id_t queryIndex)
Definition: Federate.cpp:1191
virtual void initializeToExecuteStateTransition(iteration_result iterate)
Definition: Federate.cpp:788
const std::string & getInterfaceName(interface_handle handle) const
Definition: Federate.cpp:1297
@ helics_log_level_error
Definition: helics_enums.h:167
Definition: core-exceptions.hpp:85
@ finished
the simulation has finished normally but everything is still connected
Definition: application_api/CoreApp.hpp:25
void setQueryCallback(const std::function< std::string(const std::string &)> &queryFunction)
Definition: Federate.cpp:1201
@ halted
indicator that the simulation has been halted
void logMessage(int level, const std::string &message) const
Definition: Federate.cpp:1394
std::shared_ptr< Core > findJoinableCoreOfType(core_type type)
Definition: CoreFactory.cpp:272
const std::string & getInfo(interface_handle handle)
Definition: Federate.cpp:1389
Definition: FederateInfo.hpp:20
bool isValid() const
Definition: Filters.hpp:73
virtual std::string localQuery(const std::string &queryStr) const
Definition: Federate.cpp:1119
bool isAsyncOperationCompleted() const
Definition: Federate.cpp:256
core_type coreType
the type of the core
Definition: FederateInfo.hpp:29
Federate & operator=(Federate &&fed) noexcept
Definition: Federate.cpp:183
bool useJsonSerialization
Definition: application_api/Federate.hpp:70
filter_types filterTypeFromString(const std::string &filterType) noexcept
Definition: Filters.cpp:37
Json::Value loadJson(const std::string &jsonString)
Definition: JsonProcessingFunctions.cpp:24
@ startup
when created the federate is in startup state
modes getCurrentMode() const
Definition: application_api/Federate.hpp:541
bool useJsonSerialization
Definition: FederateInfo.hpp:34
auto getID() const noexcept
Definition: application_api/Federate.hpp:539
@ helics_log_level_data
Definition: helics_enums.h:180
Time getCurrentTime() const
Definition: application_api/Federate.hpp:544
virtual ~Federate()
Definition: Federate.cpp:198
@ fed
special logging command for message coming from a fed
Definition: loggingHelper.hpp:32
const std::string & getInjectionUnits(interface_handle handle) const
Definition: Federate.cpp:1312
const std::string & getInterfaceUnits(interface_handle handle) const
Definition: application_api/Federate.hpp:611
Definition: federate_id.hpp:65
@ helics_flag_strict_config_checking
Definition: helics_enums.h:119
CloningFilter & make_cloning_filter(filter_types type, Federate *mFed, const std::string &delivery, const std::string &name)
Definition: Filters.cpp:339
CloningFilter & registerGlobalCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1270
void cleanupHelicsLibrary()
Definition: Federate.cpp:36
void enterInitializingMode()
Definition: Federate.cpp:212
CloningFilter & registerCloningFilter()
Definition: application_api/Federate.hpp:455
@ error
indicator that an error has occurred
void logInfoMessage(const std::string &message) const
Definition: application_api/Federate.hpp:639
@ pending_time
state that the federate is pending a timeRequest
query_id_t queryAsync(const std::string &target, const std::string &queryStr, helics_sequencing_mode mode=helics_sequencing_mode_fast)
Definition: Federate.cpp:1166
@ pending_finalize
state that the federate is pending a finalize call
const std::string & getInjectionType(interface_handle handle) const
Definition: Federate.cpp:1302
void localError(int errorcode, const std::string &message)
Definition: Federate.cpp:618
void setGlobal(const std::string &valueName, const std::string &value)
Definition: Federate.cpp:1221
std::string coreName
the name of the core
Definition: FederateInfo.hpp:40
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
@ error
only print errors
Definition: loggingHelper.hpp:22
void addDependency(const std::string &fedName)
Definition: Federate.cpp:1231
char separator
separator for global name of localFederates
Definition: FederateInfo.hpp:23
Definition: helics-time.hpp:47
int32_t getInterfaceOption(interface_handle handle, int32_t option)
Definition: Federate.cpp:1366
void logWarningMessage(const std::string &message) const
Definition: application_api/Federate.hpp:632
Time requestTimeAdvance(Time timeDelta)
Definition: application_api/Federate.hpp:232
void logErrorMessage(const std::string &message) const
Definition: application_api/Federate.hpp:625
Definition: core-exceptions.hpp:29
iteration_time requestTimeIterativeComplete()
Definition: Federate.cpp:747
size_t cleanUpCores()
Definition: CoreFactory.cpp:313
void logDebugMessage(const std::string &message) const
Definition: application_api/Federate.hpp:646
std::string generateFullCoreInitString(const FederateInfo &fi)
Definition: FederateInfo.cpp:785
void finalize()
Definition: Federate.cpp:479
Definition: application_api/Federate.hpp:44
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:548
Time requestNextStep()
Definition: application_api/Federate.hpp:227
void addDestinationTarget(const Filter &filt, const std::string &targetEndpoint)
Definition: Federate.cpp:1287
void setFilterOperator(const Filter &filt, std::shared_ptr< FilterOperator > op)
register a operator for the specified filter
Definition: Federate.cpp:1345
Definition: application_api/Federate.hpp:26
Filter & registerGlobalFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1263
void finalizeComplete()
Definition: Federate.cpp:556
Time requestTime(Time nextInternalTimeStep)
Definition: Federate.cpp:640
bool loadCores()
Definition: loadCores.cpp:149
bool strictConfigChecking
Definition: application_api/Federate.hpp:68
@ helics_sequencing_mode_fast
Definition: helics_enums.h:335
std::string query(const std::string &target, const std::string &queryStr, helics_sequencing_mode mode=helics_sequencing_mode_fast)
Definition: Federate.cpp:1149
Filter & make_filter(filter_types type, Federate *mFed, const std::string &name)
Definition: Filters.cpp:287
void setLoggingCallback(const std::function< void(int, const std::string &, const std::string &)> &logFunction)
Definition: Federate.cpp:460
@ finalize
the federate has finished executing normally final values may be retrieved
std::shared_ptr< Core > coreObject
reference to the core simulation API
Definition: application_api/Federate.hpp:75
void enterExecutingModeAsync(iteration_request iterate=iteration_request::no_iterations)
Definition: Federate.cpp:357
const std::string & getExtractionUnits(interface_handle handle) const
Definition: Federate.cpp:1317
int getIntegerProperty(int32_t option) const
Definition: Federate.cpp:455
Federate() noexcept
Definition: Federate.cpp:163
@ pending_init
indicator that the federate is pending entry to initialization state
Time requestTimeComplete()
Definition: Federate.cpp:729
iteration_time requestTimeIterative(Time nextInternalTimeStep, iteration_request iterate)
Definition: Federate.cpp:669
Definition: core-exceptions.hpp:18
@ initializing
entered after the enterInitializingMode call has returned
void requestTimeAsync(Time nextInternalTimeStep)
Definition: Federate.cpp:701
int filterCount() const
Definition: Federate.cpp:1114
std::string defName
a default name to use for a federate
Definition: FederateInfo.hpp:39
@ executing
entered after the enterExectuationState call has returned
bool isQueryCompleted(query_id_t queryIndex) const
Definition: Federate.cpp:1211
virtual void disconnect()
Definition: Federate.cpp:567