Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
operator_split.h
Go to the documentation of this file.
1
10#ifndef OAKFIELD_OPERATOR_SPLIT_H
11#define OAKFIELD_OPERATOR_SPLIT_H
12
13#include "operator.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19struct SimContext;
20struct SimOperator;
21
30
34typedef struct SimSplitAccess {
35 uint16_t port;
36 uint8_t mode;
38
42typedef struct SimSplitSubstep {
43 const char *name;
56 SimResult (*fn)(void *state, struct SimContext *ctx, struct SimOperator *container_or_self,
57 size_t substep_index, double dt_sub, void *scratch,
58 size_t scratch_size);
60 size_t access_count;
61 double dt_scale;
63 double (*error_measure)(void *state);
66
74
82
91typedef struct SimSplitDescriptor {
92 const char *name;
94 size_t port_count;
97 void *state;
98 const char *(*symbolic)(const void *state);
99 SimResult (*save_state)(struct SimContext *ctx, struct SimOperator *self,
100 void *userdata);
101 SimResult (*restore_state)(struct SimContext *ctx, struct SimOperator *self,
102 void *userdata);
103 void (*destroy)(void *state);
106 const void *catalog_metadata;
109
128 const size_t *dependencies, size_t dependency_count, size_t *out_first,
129 size_t *out_last);
130
137const char *sim_split_symbolic(const struct SimOperator *op);
138
145void *sim_split_state(struct SimOperator *op);
146
154
155#ifdef __cplusplus
156}
157#endif
158
159#endif /* OAKFIELD_OPERATOR_SPLIT_H */
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
Operator abstraction, registry, and dependency resolution for libsimcore.
void * sim_operator_state(struct SimOperator *op)
Return operator state regardless of split or kernel-backed registration.
const char * sim_split_symbolic(const struct SimOperator *op)
Return the symbolic form string for any generated substep operator.
void * sim_split_state(struct SimOperator *op)
Return the shared descriptor state for any generated substep operator.
SimResult sim_split_register(struct SimContext *context, const SimSplitDescriptor *desc, const size_t *dependencies, size_t dependency_count, size_t *out_first, size_t *out_last)
Register a split operator which expands into sequential substeps.
SimAccessMode
Field access mode declared by a split-operator substep.
Definition operator_split.h:25
@ SIM_ACCESS_RW
Definition operator_split.h:28
@ SIM_ACCESS_WRITE
Definition operator_split.h:27
@ SIM_ACCESS_READ
Definition operator_split.h:26
Simulation runtime state.
Definition sim_context.h:70
Operator runtime configuration shared between descriptors and instances.
Definition operator.h:307
Metadata describing operator characteristics.
Definition operator.h:277
Operator instance stored by the registry.
Definition operator.h:344
size_t * dependencies
Definition operator.h:353
size_t dependency_count
Definition operator.h:354
Per-substep access to a descriptor port.
Definition operator_split.h:34
uint8_t mode
Definition operator_split.h:36
uint16_t port
Definition operator_split.h:35
Full declarative description of a split operator sequence.
Definition operator_split.h:91
SimOperatorConfig config
Definition operator_split.h:105
void(* destroy)(void *state)
Definition operator_split.h:103
void * state
Definition operator_split.h:97
const SimSplitSubstep * substeps
Definition operator_split.h:95
SimResult(* restore_state)(struct SimContext *ctx, struct SimOperator *self, void *userdata)
Definition operator_split.h:101
size_t substep_count
Definition operator_split.h:96
SimOperatorInfo info
Definition operator_split.h:104
const SimSplitPort * ports
Definition operator_split.h:93
SimResult(* save_state)(struct SimContext *ctx, struct SimOperator *self, void *userdata)
Definition operator_split.h:99
const void * catalog_metadata
Definition operator_split.h:106
const char * name
Definition operator_split.h:92
SimSplitScratchRequest scratch
Definition operator_split.h:107
size_t port_count
Definition operator_split.h:94
Binding between a split port and a context field.
Definition operator_split.h:70
bool require_complex
Definition operator_split.h:72
size_t context_field_index
Definition operator_split.h:71
Optional per-thread scratch request for split substeps.
Definition operator_split.h:78
size_t bytes_per_worker
Definition operator_split.h:79
size_t alignment
Definition operator_split.h:80
One executable step inside a split operator sequence.
Definition operator_split.h:42
const char * name
Definition operator_split.h:43
size_t access_count
Definition operator_split.h:60
double dt_scale
Definition operator_split.h:61
double(* error_measure)(void *state)
Definition operator_split.h:63
uint64_t required_features
Definition operator_split.h:64
bool barrier_after
Definition operator_split.h:62
SimResult(* fn)(void *state, struct SimContext *ctx, struct SimOperator *container_or_self, size_t substep_index, double dt_sub, void *scratch, size_t scratch_size)
Execute the substep.
Definition operator_split.h:56
const SimSplitAccess * accesses
Definition operator_split.h:59