10#ifndef OAKFIELD_OPERATOR_SPLIT_H
11#define OAKFIELD_OPERATOR_SPLIT_H
57 size_t substep_index,
double dt_sub,
void *scratch,
98 const char *(*symbolic)(
const void *
state);
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