| helics 3.6.1

CoreTypes.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2025,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8
9 #include "../helics_enums.h"
10
11 #include <cstdint>
12 #include <string>
13 #include <string_view>
14
19 namespace helics {
21 enum class FederateStates : std::uint8_t {
22 CREATED,
23 INITIALIZING,
25 EXECUTING,
26 TERMINATING,
27 ERRORED,
28 FINISHED,
29 UNKNOWN,
30 };
31
33 enum class CoreThreading : std::uint8_t {
35 DEFAULT = HELICS_CORE_TYPE_DEFAULT,
37 MULTI = HELICS_FLAG_MULTI_THREAD_CORE,
39 SINGLE = HELICS_FLAG_SINGLE_THREAD_CORE
40 };
41
43 const std::string& fedStateString(FederateStates state);
44
46 enum class CoreType : int {
47 DEFAULT = HELICS_CORE_TYPE_DEFAULT,
50 ZMQ = HELICS_CORE_TYPE_ZMQ,
51 MPI = HELICS_CORE_TYPE_MPI,
52 TEST = HELICS_CORE_TYPE_TEST,
53 INTERPROCESS = HELICS_CORE_TYPE_INTERPROCESS,
56 IPC = HELICS_CORE_TYPE_IPC,
57 TCP = HELICS_CORE_TYPE_TCP,
58 TCP_SS = HELICS_CORE_TYPE_TCP_SS,
60 UDP = HELICS_CORE_TYPE_UDP,
61 NNG = HELICS_CORE_TYPE_NNG,
62 ZMQ_SS = HELICS_CORE_TYPE_ZMQ_SS,
64 HTTP = HELICS_CORE_TYPE_HTTP,
65 WEBSOCKET = HELICS_CORE_TYPE_WEBSOCKET,
66 INPROC = HELICS_CORE_TYPE_INPROC,
67 NULLCORE = HELICS_CORE_TYPE_NULL,
68 EMPTY = HELICS_CORE_TYPE_EMPTY,
69 UNRECOGNIZED = 22,
70 MULTI = 45,
71 EXTRACT = HELICS_CORE_TYPE_EXTRACT
72 };
73
75 enum class MessageProcessingResult : std::int8_t {
76
77 CONTINUE_PROCESSING = -2,
78 DELAY_MESSAGE = -1,
79 NEXT_STEP = 0,
80 ITERATING = 2,
81 HALTED = 3,
83 USER_RETURN = 5,
84 ERROR_RESULT = 7,
85 REPROCESS_MESSAGE = 8, // indicator that the message needs to be processed again
86 BUSY = 10, // indicator that processing could not be done since the resource was busy
87 };
89 inline bool returnableResult(MessageProcessingResult result)
90 {
91 return (result >= MessageProcessingResult::NEXT_STEP);
92 }
94 enum class IterationResult : signed char {
95 NEXT_STEP = 0,
97 ITERATING = 2,
98 HALTED = 3,
99 ERROR_RESULT = 7
100 };
101
103 enum class IterationRequest : signed char {
104 NO_ITERATIONS = 0,
105 FORCE_ITERATION = 1,
106 ITERATE_IF_NEEDED = 2,
107 HALT_OPERATIONS = 3,
108 ERROR_CONDITION = 7
109 };
110
112 enum class InterfaceType : char {
113 UNKNOWN = 'u',
114 PUBLICATION = 'p',
115 INPUT = 'i',
116 ENDPOINT = 'e',
117 FILTER = 'f',
118 TRANSLATOR = 't',
119 SINK = 's'
120 };
121
122 std::string_view interfaceTypeName(InterfaceType type) noexcept;
123
124 } // namespace helics
126 constexpr auto ITERATION_COMPLETE = helics::IterationRequest::NO_ITERATIONS;
128 constexpr auto NO_ITERATION = helics::IterationRequest::NO_ITERATIONS;
130 constexpr auto FORCE_ITERATION = helics::IterationRequest::FORCE_ITERATION;
132 constexpr auto ITERATE_IF_NEEDED = helics::IterationRequest::ITERATE_IF_NEEDED;
ITERATION_COMPLETE
constexpr auto ITERATION_COMPLETE
simplified alias to indicate that iterations have concluded
Definition: CoreTypes.hpp:126
FORCE_ITERATION
constexpr auto FORCE_ITERATION
simplified alias to force an iteration
Definition: CoreTypes.hpp:130
ITERATE_IF_NEEDED
constexpr auto ITERATE_IF_NEEDED
simplified alias to indicate that helics should iterate if warranted
Definition: CoreTypes.hpp:132
NO_ITERATION
constexpr auto NO_ITERATION
simplified alias to indicate that no iterations are needed
Definition: CoreTypes.hpp:128
HELICS_CORE_TYPE_MPI
@ HELICS_CORE_TYPE_MPI
Definition: helics_enums.h:28
HELICS_CORE_TYPE_WEBSOCKET
@ HELICS_CORE_TYPE_WEBSOCKET
Definition: helics_enums.h:51
HELICS_CORE_TYPE_HTTP
@ HELICS_CORE_TYPE_HTTP
Definition: helics_enums.h:49
HELICS_CORE_TYPE_TCP_SS
@ HELICS_CORE_TYPE_TCP_SS
Definition: helics_enums.h:47
HELICS_CORE_TYPE_INTERPROCESS
@ HELICS_CORE_TYPE_INTERPROCESS
Definition: helics_enums.h:33
HELICS_CORE_TYPE_NNG
@ HELICS_CORE_TYPE_NNG
Definition: helics_enums.h:45
HELICS_CORE_TYPE_TCP
@ HELICS_CORE_TYPE_TCP
Definition: helics_enums.h:39
HELICS_CORE_TYPE_DEFAULT
@ HELICS_CORE_TYPE_DEFAULT
Definition: helics_enums.h:24
HELICS_CORE_TYPE_ZMQ
@ HELICS_CORE_TYPE_ZMQ
Definition: helics_enums.h:26
HELICS_CORE_TYPE_ZMQ_SS
@ HELICS_CORE_TYPE_ZMQ_SS
Definition: helics_enums.h:43
HELICS_CORE_TYPE_IPC
@ HELICS_CORE_TYPE_IPC
Definition: helics_enums.h:37
HELICS_CORE_TYPE_UDP
@ HELICS_CORE_TYPE_UDP
Definition: helics_enums.h:41
HELICS_CORE_TYPE_TEST
@ HELICS_CORE_TYPE_TEST
Definition: helics_enums.h:30
HELICS_CORE_TYPE_INPROC
@ HELICS_CORE_TYPE_INPROC
Definition: helics_enums.h:55
HELICS_CORE_TYPE_NULL
@ HELICS_CORE_TYPE_NULL
Definition: helics_enums.h:58
HELICS_CORE_TYPE_EMPTY
@ HELICS_CORE_TYPE_EMPTY
Definition: helics_enums.h:61
HELICS_CORE_TYPE_EXTRACT
@ HELICS_CORE_TYPE_EXTRACT
Definition: helics_enums.h:63
HELICS_FLAG_SINGLE_THREAD_CORE
@ HELICS_FLAG_SINGLE_THREAD_CORE
Definition: helics_enums.h:136
HELICS_FLAG_MULTI_THREAD_CORE
@ HELICS_FLAG_MULTI_THREAD_CORE
Definition: helics_enums.h:134
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::IterationResult
IterationResult
Definition: CoreTypes.hpp:94
helics::IterationResult::NEXT_STEP
@ NEXT_STEP
helics::IterationResult::ITERATING
@ ITERATING
indicator that the iterations need to continue
helics::IterationResult::ERROR_RESULT
@ ERROR_RESULT
indicator that an error has occurred
helics::IterationResult::HALTED
@ HALTED
indicator that the simulation has been halted
helics::FederateStates
FederateStates
Definition: CoreTypes.hpp:21
helics::FederateStates::FINISHED
@ FINISHED
the federation has finished its execution
helics::FederateStates::UNKNOWN
@ UNKNOWN
unknown state
helics::FederateStates::INITIALIZING
@ INITIALIZING
helics::FederateStates::EXECUTING
@ EXECUTING
the federation has entered execution state and it now advancing in time
helics::FederateStates::TERMINATING
@ TERMINATING
the federate is in the process of shutting down
helics::FederateStates::ERRORED
@ ERRORED
the federation has encountered an error
helics::MessageProcessingResult
MessageProcessingResult
Definition: CoreTypes.hpp:75
helics::MessageProcessingResult::NEXT_STEP
@ NEXT_STEP
indicator that the iterations have completed
helics::MessageProcessingResult::CONTINUE_PROCESSING
@ CONTINUE_PROCESSING
the current loop should continue
helics::MessageProcessingResult::ITERATING
@ ITERATING
indicator that the iterations need to continue
helics::MessageProcessingResult::ERROR_RESULT
@ ERROR_RESULT
indicator that an error has occurred
helics::MessageProcessingResult::USER_RETURN
@ USER_RETURN
indicator that there was a return request but no other conditions or issues
helics::MessageProcessingResult::DELAY_MESSAGE
@ DELAY_MESSAGE
delay the current message and continue processing
helics::MessageProcessingResult::HALTED
@ HALTED
helics::returnableResult
bool returnableResult(MessageProcessingResult result)
Definition: CoreTypes.hpp:89
helics::CoreType
CoreType
Definition: CoreTypes.hpp:46
helics::CoreType::TEST
@ TEST
use the Test core if all federates are in the same process
helics::CoreType::NULLCORE
@ NULLCORE
explicit core type that doesn't exist
helics::CoreType::EXTRACT
@ EXTRACT
extract core type from later arguments/files
helics::CoreType::INTERPROCESS
@ INTERPROCESS
use when all federates are on the same machine
helics::CoreType::INPROC
@ INPROC
core/broker using a stripped down in process core type
helics::CoreType::HTTP
@ HTTP
core/broker using web traffic
helics::CoreType::TCP_SS
@ TCP_SS
helics::CoreType::NNG
@ NNG
reserved for future Nanomsg implementation
helics::CoreType::ZMQ
@ ZMQ
use the Zero MQ networking protocol
helics::CoreType::MPI
@ MPI
use MPI for operation on a parallel cluster
helics::CoreType::DEFAULT
@ DEFAULT
ZMQ if available or UDP.
helics::CoreType::TCP
@ TCP
use a generic TCP protocol message stream to send messages
helics::CoreType::EMPTY
@ EMPTY
core type that does nothing and can't communicate
helics::CoreType::IPC
@ IPC
same as INTERPROCESS
helics::CoreType::UNRECOGNIZED
@ UNRECOGNIZED
unknown
helics::CoreType::ZMQ_SS
@ ZMQ_SS
helics::CoreType::MULTI
@ MULTI
use the multi-broker
helics::CoreType::UDP
@ UDP
use UDP packets to send the data
helics::CoreType::WEBSOCKET
@ WEBSOCKET
core/broker using web sockets
helics::CoreThreading
CoreThreading
Definition: CoreTypes.hpp:33
helics::CoreThreading::SINGLE
@ SINGLE
helics::CoreThreading::DEFAULT
@ DEFAULT
helics::CoreThreading::MULTI
@ MULTI
helics::fedStateString
const std::string & fedStateString(FederateStates state)
Definition: FederateState.cpp:2456
helics::IterationRequest
IterationRequest
Definition: CoreTypes.hpp:103
helics::IterationRequest::ITERATE_IF_NEEDED
@ ITERATE_IF_NEEDED
indicator that the iterations need to continue
helics::IterationRequest::FORCE_ITERATION
@ FORCE_ITERATION
force an iteration whether it is needed or not
helics::IterationRequest::NO_ITERATIONS
@ NO_ITERATIONS
indicator that the iterations have completed
helics::IterationRequest::ERROR_CONDITION
@ ERROR_CONDITION
indicator that the federate has errored and co-simulation should stop
helics::IterationRequest::HALT_OPERATIONS
@ HALT_OPERATIONS
indicator that the federate should halt
helics::InterfaceType
InterfaceType
Definition: CoreTypes.hpp:112
helics::InterfaceType::ENDPOINT
@ ENDPOINT
handle to an endpoint
helics::InterfaceType::PUBLICATION
@ PUBLICATION
handle to output interface
helics::InterfaceType::TRANSLATOR
@ TRANSLATOR
handle to a translator object
helics::InterfaceType::SINK
@ SINK
handle to a data sink
helics::InterfaceType::INPUT
@ INPUT
handle to a input interface
helics::InterfaceType::FILTER
@ FILTER
handle to a filter