Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
sim_context.h
Go to the documentation of this file.
1
12#ifndef OAKFIELD_SIM_CONTEXT_H
13#define OAKFIELD_SIM_CONTEXT_H
14
15#include <stdbool.h>
16#include <stddef.h>
17#include <stdint.h>
18
19#include "async_logger.h"
20#include "field.h"
21#include "kernel_ir.h"
23#include "neural_models.h"
24#include "operator.h"
25#include "sim_diagnostics.h"
27#include "sim_profiler.h"
28#include "sim_runtime_state.h"
29#include "sim_scheduler_state.h"
30#include "sim_seed.h"
31#include "sim_world.h"
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37struct Integrator;
38struct SimBackend;
39struct SimOperator;
40
42#define SIM_CONTEXT_MAX_FIELD_ELEMENTS_DEFAULT (64U * 1024U * 1024U)
44#define SIM_CONTEXT_MAX_FIELD_BYTES_DEFAULT (512U * 1024U * 1024U)
46#define SIM_CONTEXT_MAX_FIELDS_DEFAULT 256U
48#define SIM_CONTEXT_MAX_TOTAL_FIELD_BYTES_DEFAULT (2ULL * 1024ULL * 1024ULL * 1024ULL)
50#define SIM_CONTEXT_PREFERRED_VISUAL_FIELD_CAPACITY 256U
52#define SIM_CONTEXT_MAX_SCRATCH_BYTES_PER_OPERATOR_DEFAULT (256U * 1024U * 1024U)
53
66
104
109
114
119 void (*log_fn)(SimLogLevel level, const char *message, void *userdata),
120 void *userdata);
121
125void sim_context_log_warning(const SimContext *context, const char *fmt, ...);
126
131
135bool sim_context_kernel_allowed(const SimContext *context, uint64_t required_features,
136 SimDeterminismFlags determinism_flags);
137
142 uint64_t required_features,
143 SimDeterminismFlags determinism_flags);
144
152
161
165void sim_context_set_seed(SimContext *context, uint64_t seed);
166
170uint64_t sim_context_seed(const SimContext *context);
171
176
181
185void sim_context_memory_usage(const SimContext *context, size_t *out_fields, size_t *out_scratch,
186 size_t *out_total);
187
191SimResult sim_context_check_field_limits(const SimContext *context, size_t element_count,
192 size_t field_bytes);
193
198
202void sim_context_release_scratch(SimContext *context, size_t bytes);
203
210
219SimResult sim_context_add_field(SimContext *context, SimField *field, size_t *out_index);
220
228SimField *sim_context_field(SimContext *context, size_t index);
229
235size_t sim_context_field_count(const SimContext *context);
236
246 const SimOperatorDescriptor *descriptor, size_t *out_index);
247
255 size_t dependency_index);
256
264
272
279
287
293void sim_context_set_integrator(SimContext *context, struct Integrator *integrator);
294
299
306 struct Integrator *const *integrators, size_t count);
307
312
316struct Integrator *sim_context_integrator_sequence_at(const SimContext *context, size_t index);
317
321void sim_context_set_backend(SimContext *context, struct SimBackend *backend);
322
327
331void sim_context_set_timestep(SimContext *context, double dt);
332
336double sim_context_timestep(const SimContext *context);
337
341void sim_context_set_field_stats_features(SimContext *context, uint32_t feature_mask);
342uint32_t sim_context_field_stats_features(const SimContext *context);
343void sim_context_reset_field_stats_profile(SimContext *context);
344bool sim_context_field_stats_profile(const SimContext *context,
345 SimFieldStatsRuntimeProfile *out_profile);
346
353
358void sim_context_end_drift(SimContext *context);
359bool sim_context_in_drift(const SimContext *context);
360void sim_context_set_drift_time_override(SimContext *context, double time_value);
361void sim_context_clear_drift_time_override(SimContext *context);
362
366size_t sim_context_step_index(const SimContext *context);
367
371double sim_context_time(const SimContext *context);
372
376void sim_context_record_step_metrics(SimContext *context, double requested_dt, double accepted_dt,
377 double rms_error);
378
383 double accepted_dt, double rms_error,
384 uint64_t step_wall_ns, uint64_t integrator_wall_ns,
385 uint64_t operator_wall_ns);
386
395void sim_context_accept_step(SimContext *context, double accepted_dt);
396
405
415 size_t capacity);
416
419 size_t capacity, size_t *out_count);
420
423
427void sim_split_notify_integrator(struct SimContext *context, double dt_sub, double error_estimate);
435
439double sim_context_epsilon(const SimContext *context);
440
441const SimPole *sim_context_poles(const SimContext *context, size_t *out_count);
442SimPoleFieldOptions sim_pole_field_options_default(void);
443SimResult sim_context_synthesize_pole_field(struct SimContext *context, size_t field_index,
444 const SimPoleFieldOptions *options);
445
448 void *userdata);
449
452
455
456/* Set preferred Phase Mode (negative = unset) */
457void sim_context_set_preferred_phase_mode(SimContext *context, int mode);
458
459/* Get preferred Phase Mode; returns negative when unset. */
460int sim_context_preferred_phase_mode(const SimContext *context);
461
462/* Set preferred visual auto-scale state (-1 unset, 0 disabled, 1 enabled). */
463void sim_context_set_preferred_visual_auto_scale(SimContext *context, int enabled);
464
465/* Get preferred visual auto-scale state; returns negative when unset. */
466int sim_context_preferred_visual_auto_scale(const SimContext *context);
467
468/* Set preferred visual scale (positive value, negative to unset). */
469void sim_context_set_preferred_visual_scale(SimContext *context, double scale);
470
471/* Get preferred visual scale; returns negative when unset. */
472double sim_context_preferred_visual_scale(const SimContext *context);
473
474/* Set preferred visual field selection state for a given field index. */
475void sim_context_set_preferred_visual_field_enabled(SimContext *context, size_t field_index,
476 bool enabled);
477
478/* Get preferred visual field selection state for a given field index. */
479bool sim_context_preferred_visual_field_enabled(const SimContext *context, size_t field_index);
480
483 SimSpecialFallbackFn *out_fallback, void **out_userdata);
484
487
490
493
498const SimDiagnostics *sim_context_diagnostics_const(const SimContext *context);
499
500#if SIM_DIAGNOSTICS
506void sim_context_flush_special_diagnostics(SimContext *context);
507#endif
508
509SimResult sim_context_apply_operator(SimContext *context, struct SimOperator *op);
510void sim_context_reset_continuity_counters(SimContext *context);
511void sim_context_set_continuity_override(SimContext *context, bool enabled,
512 const SimOperatorConfig *config);
513
517void sim_context_field_continuity_counts(const SimContext *context, size_t field_index,
518 uint64_t *out_dirty, uint64_t *out_stable);
519
520/* Optional accessors for counts to reduce internal coupling */
521size_t sim_context_operator_count(const SimContext *context);
522size_t sim_context_plan_operator_count(const SimContext *context);
523bool sim_context_plan_is_valid(const SimContext *context);
524
525#ifdef __cplusplus
526}
527#endif
528
529#endif /* OAKFIELD_SIM_CONTEXT_H */
Lock-free asynchronous logging facilities for libsimcore runtime.
SimLogLevel
Severity levels emitted by the asynchronous logger.
Definition async_logger.h:24
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
Intermediate representation facilities for libsimcore operator fusion.
Context-level neural model registry and execution helpers.
Operator abstraction, registry, and dependency resolution for libsimcore.
SimDeterminismFlags
Determinism capability flags declared by operators.
Definition operator.h:167
SimRepresentationMode
Representation mode governing determinism guarantees.
Definition operator.h:158
void sim_context_field_continuity_counts(const SimContext *context, size_t field_index, uint64_t *out_dirty, uint64_t *out_stable)
Retrieve the dirty/stable continuity counters for a field.
SimResult sim_context_init(SimContext *context)
Initialize a simulation context with default universe parameters.
SimField * sim_context_field(SimContext *context, size_t index)
Access a field by index.
SimResult sim_context_reserve_scratch(SimContext *context, size_t bytes)
Reserve scratch bytes against the context counters.
void sim_context_set_representation_mode(SimContext *context, SimRepresentationMode mode)
Set the default representation mode for the context.
void sim_context_set_field_stats_features(SimContext *context, uint32_t feature_mask)
Configure optional field-stat feature families.
SimResult sim_context_init_with_universe(SimContext *context, const SimUniverseSpec *universe_spec)
Initialize a simulation context with universe specification.
size_t sim_context_step_metrics_history(const SimContext *context, SimStepMetrics *dest, size_t capacity)
Copy a slice of the step-metrics history ordered oldest to newest.
double sim_context_epsilon(const SimContext *context)
Get epsilon parameter from universe.
void sim_context_set_seed(SimContext *context, uint64_t seed)
Set the base seed used for deterministic RNG streams.
SimIRBuilder * sim_context_ir_builder(SimContext *context)
Access the shared IR builder.
void sim_context_memory_usage(const SimContext *context, size_t *out_fields, size_t *out_scratch, size_t *out_total)
Report current memory usage counters.
void sim_split_notify_integrator(struct SimContext *context, double dt_sub, double error_estimate)
Internal hook used by split operators to relay substep feedback.
SimResult sim_context_set_integrator_sequence(SimContext *context, struct Integrator *const *integrators, size_t count)
Assign an ordered sequence of integrators for opt-in multi-integrator stepping.
void sim_context_set_memory_limits(SimContext *context, const SimContextMemoryLimits *limits)
Configure memory limits for fields and scratch allocations.
uint64_t sim_context_seed(const SimContext *context)
Get the base seed used for deterministic RNG streams.
#define SIM_CONTEXT_PREFERRED_VISUAL_FIELD_CAPACITY
Definition sim_context.h:50
SimResult sim_context_prepare_plan(SimContext *context)
Ensure the execution plan is up to date.
void sim_context_set_logger(SimContext *context, void(*log_fn)(SimLogLevel level, const char *message, void *userdata), void *userdata)
Attach a logger callback to the context (optional).
void sim_context_get_memory_limits(const SimContext *context, SimContextMemoryLimits *out_limits)
Fetch current memory limit settings.
void sim_context_log_warning(const SimContext *context, const char *fmt,...)
Emit a warning through the context logger (or stderr fallback).
SimRepresentationMode sim_context_representation_mode(const SimContext *context)
Get the default representation mode for the context.
uint64_t sim_context_special_fault_count(const SimContext *context)
Total number of special-function faults observed so far.
void sim_context_record_step_metrics(SimContext *context, double requested_dt, double accepted_dt, double rms_error)
Capture per-step metrics (invoked by scheduler/integrators).
void sim_context_begin_drift(SimContext *context)
Enter/exit drift mode to suppress side effects during derivative evaluation.
void sim_context_clear_special_faults(SimContext *context)
Reset accumulated special-function fault statistics.
void sim_context_set_integrator(SimContext *context, struct Integrator *integrator)
Assigns the integrator responsible for advancing the context.
void sim_context_release_scratch(SimContext *context, size_t bytes)
Release previously reserved scratch bytes.
bool sim_context_allows_determinism(const SimContext *context, SimDeterminismFlags flags)
Return true when the current representation mode permits the given determinism flags.
struct Integrator * sim_context_integrator_sequence_at(const SimContext *context, size_t index)
Returns the integrator at index in the optional sequence.
struct Integrator * sim_context_integrator(SimContext *context)
Retrieves the currently bound integrator.
SimResult sim_context_add_operator_dependency(SimContext *context, size_t operator_index, size_t dependency_index)
Add an explicit dependency edge between two registered operators.
void sim_context_special_fallback_hook(const SimContext *context, SimSpecialFallbackFn *out_fallback, void **out_userdata)
Retrieve the context-managed fallback hook for safe helpers.
bool sim_context_profiler_snapshot(SimContext *context, SimProfilerSnapshot *out_snapshot)
double sim_context_time(const SimContext *context)
Returns the simulation time accumulated so far (seconds).
bool sim_context_latest_step_metrics(const SimContext *context, SimStepMetrics *out_metrics)
Fetch the most recent step metrics sample, if available.
size_t sim_context_truncation_level(const SimContext *context)
Get hyperexponential truncation level from universe.
SimResult sim_context_register_operator(SimContext *context, const SimOperatorDescriptor *descriptor, size_t *out_index)
Register a new operator within the context.
void sim_context_set_backend(SimContext *context, struct SimBackend *backend)
Assigns the backend used for kernel execution.
bool sim_context_kernel_allowed_mode(const SimContext *context, SimRepresentationMode mode, uint64_t required_features, SimDeterminismFlags determinism_flags)
Return true when a kernel-backed operator is allowed under an explicit mode.
SimResult sim_context_execute_prepared(SimContext *context)
Execute the current operator plan without re-running plan preparation.
size_t sim_context_step_index(const SimContext *context)
Returns the number of completed integration steps.
bool sim_context_profiler_counters(SimContext *context, SimProfilerCounter *out_counters, size_t capacity, size_t *out_count)
int sim_context_preferred_visual_mode(const SimContext *context)
void sim_context_set_timestep(SimContext *context, double dt)
Overrides the integration timestep stored in the context.
SimResult sim_context_execute(SimContext *context)
Execute the operator plan sequentially.
void sim_context_set_preferred_visual_mode(SimContext *context, int mode)
void sim_context_destroy(SimContext *context)
Destroy a simulation context and free owned resources.
struct SimBackend * sim_context_backend(SimContext *context)
Returns the active compute backend.
double sim_context_timestep(const SimContext *context)
Queries the integration timestep currently used by the context.
void sim_context_set_time_model(SimContext *context, SimTimeModel model)
Set the time evolution model for the simulation (continuous vs map).
SimDiagnostics * sim_context_diagnostics(SimContext *context)
Access diagnostics container.
SimResult sim_context_check_field_limits(const SimContext *context, size_t element_count, size_t field_bytes)
Check if a field allocation would violate configured limits.
size_t sim_context_field_count(const SimContext *context)
Returns the number of fields currently owned by the context.
void sim_context_record_step_metrics_with_timing(SimContext *context, double requested_dt, double accepted_dt, double rms_error, uint64_t step_wall_ns, uint64_t integrator_wall_ns, uint64_t operator_wall_ns)
Capture per-step metrics with explicit wall-time attribution.
void sim_context_set_special_fallback(SimContext *context, SimSpecialFallbackFn fallback, void *userdata)
Override the fallback invoked when special functions fail.
size_t sim_context_integrator_sequence_count(const SimContext *context)
Returns the number of integrators in the optional sequence.
bool sim_context_last_special_fault(const SimContext *context, SimSpecialEvalReport *out_report)
Copy the most recent special-function fault report, if any.
SimResult sim_context_add_field(SimContext *context, SimField *field, size_t *out_index)
Add a field to the context, transferring ownership.
bool sim_context_kernel_allowed(const SimContext *context, uint64_t required_features, SimDeterminismFlags determinism_flags)
Return true when a kernel-backed operator is allowed under the current policy.
void sim_context_accept_step(SimContext *context, double accepted_dt)
Advance runtime counters after an accepted step.
Simulation diagnostics state (faults, fallback hooks, counters).
Integrator registry and active integrator tracking.
Lightweight performance profiler for libsimcore runtime execution.
Dynamic runtime state for simulations.
SimTimeModel
Time evolution model for the simulation.
Definition sim_runtime_state.h:71
Execution plan and backend coordination state.
Seed derivation helpers for deterministic RNG streams.
Static world container coordinating fields, operators, and universe specification.
Analytic special functions, finite ladder helpers, and q-analogs.
SimResult(* SimSpecialFallbackFn)(void *userdata, const SimSpecialEvalReport *report, SimComplexDouble *value_out)
Callback signature used to provide fallback values on failure.
Definition special_functions.h:420
Integrator instance shared across schemes.
Definition integrator.h:125
Runtime backend handle shared across implementations.
Definition backend.h:115
Memory limits enforced by the simulation context.
Definition sim_context.h:59
size_t max_field_bytes
Definition sim_context.h:61
size_t max_scratch_bytes_per_operator
Definition sim_context.h:64
size_t max_total_field_bytes
Definition sim_context.h:63
size_t max_field_elements
Definition sim_context.h:60
size_t max_fields
Definition sim_context.h:62
Simulation runtime state.
Definition sim_context.h:70
SimIntegratorState integrators
Definition sim_context.h:74
SimRepresentationMode representation_mode
Definition sim_context.h:79
size_t bytes_scratch_in_use
Definition sim_context.h:82
int preferred_gui_visual_field_index
Definition sim_context.h:94
SimSchedulerPlan scheduler
Definition sim_context.h:73
bool continuity_override_enabled
Definition sim_context.h:85
SimDiagnostics diag
Definition sim_context.h:75
bool profiler_ready
Definition sim_context.h:77
int preferred_gui_visual_mode
Definition sim_context.h:90
SimContextMemoryLimits memory_limits
Definition sim_context.h:80
int preferred_gui_phase_mode
Definition sim_context.h:91
SimOperatorConfig continuity_override
Definition sim_context.h:86
size_t bytes_total_in_use
Definition sim_context.h:83
SimProfiler profiler
Definition sim_context.h:76
bool preferred_gui_visual_field_selected[SIM_CONTEXT_PREFERRED_VISUAL_FIELD_CAPACITY]
Definition sim_context.h:96
size_t bytes_fields_in_use
Definition sim_context.h:81
SimWorld world
Definition sim_context.h:71
SimRuntimeState runtime
Definition sim_context.h:72
void(* log_fn)(SimLogLevel level, const char *message, void *userdata)
Definition sim_context.h:98
uint64_t base_seed
Definition sim_context.h:78
SimNeuralModelRegistry neural_models
Definition sim_context.h:102
double preferred_gui_visual_scale
Definition sim_context.h:93
int preferred_gui_visual_auto_scale
Definition sim_context.h:92
void * log_userdata
Definition sim_context.h:101
Diagnostics container for special-function faults and fallback.
Definition sim_diagnostics.h:29
Rolling counters for runtime field-statistics requests and costs.
Definition sim_field_stats_runtime.h:86
Owning multidimensional field.
Definition field.h:157
Monotonic arena for IR node allocation.
Definition kernel_ir.h:347
Integrator registry container paired with active execution pointers.
Definition sim_integrator_state.h:20
Owning dynamic array of neural model entries.
Definition neural_models.h:99
Operator runtime configuration shared between descriptors and instances.
Definition operator.h:307
Description used when registering a new operator.
Definition operator.h:421
Operator instance stored by the registry.
Definition operator.h:344
Options controlling synthesized pole fields.
Definition sim_world.h:48
Pole singularity specification for universe geometry.
Definition sim_world.h:39
Per-operator statistics tracked during profiling.
Definition sim_profiler.h:31
Snapshot of accumulated frame statistics.
Definition sim_profiler.h:21
Profiler state used by the runtime scheduler.
Definition sim_profiler.h:41
Runtime parameters and integration state.
Definition sim_runtime_state.h:195
Scheduler-local state for plan resolution and backend dispatch.
Definition sim_scheduler_state.h:22
Structured report describing why a special-function helper failed.
Definition special_functions.h:407
Aggregated metrics captured once per completed integration step.
Definition sim_runtime_state.h:83
Universe/experiment specification defining mathematical structure.
Definition sim_world.h:62
Mutable world container that owns fields, operators, and universe data.
Definition sim_world.h:84