Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
sim_flux_lens.h
Go to the documentation of this file.
1
5#ifndef OAKFIELD_SIM_FLUX_LENS_H
6#define OAKFIELD_SIM_FLUX_LENS_H
7
8#include <complex.h>
9#include <stdbool.h>
10#include <stddef.h>
11
12#include "field.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19struct SimContext;
20struct SimField;
21
25typedef struct FluxMarks {
26 bool valid;
27 double kc;
28 double k50;
29 double k90;
30 double pi_at_kc;
32 double pi_min;
33 double pi_max;
34 double kmax;
36
43typedef struct FluxLensState {
44 bool enabled;
45 bool locked;
48 size_t field_index;
49 double smoothing;
53 double band_lo;
54 double band_hi;
59 double max_k;
60 double complex *band_spec;
61 double complex *band_phys;
63 double *S;
64 double *Pi;
65 double *bucket_k;
66 double *bucket_pi;
67 double *bucket_S;
68 double *bucket_absS;
70 size_t bucket_count;
71 double pi_min;
72 double pi_max;
73 double absS_total;
77
84typedef struct FluxLensWorkspace {
85 double complex *tmp_spec1;
86 double complex *tmp_phys1;
87 double *tmp_real1;
90 size_t capacity;
94
95void flux_lens_init(FluxLensState *lens);
96void flux_lens_workspace_init(FluxLensWorkspace *workspace);
97void flux_lens_force_refresh(FluxLensState *lens);
98void flux_lens_set_field_index(FluxLensState *lens, size_t field_index);
99void flux_lens_scale_width(FluxLensState *lens, double scale);
100void flux_lens_shift_center(FluxLensState *lens, double shift);
101void flux_lens_set_band(FluxLensState *lens, double band_lo, double band_hi);
102SimResult flux_lens_ensure_capacity(FluxLensState *lens, FluxLensWorkspace *workspace,
103 struct SimContext *context, size_t length);
104void flux_lens_release(FluxLensState *lens, FluxLensWorkspace *workspace,
105 struct SimContext *context);
106
107bool flux_compute(const struct SimField *field, FluxLensState *lens, FluxLensWorkspace *workspace,
108 struct SimContext *context);
109
110void flux_lens_after_flux(FluxLensState *lens);
111void flux_lens_update_targets_from_marks(FluxLensState *lens);
112void flux_lens_relax_band(FluxLensState *lens);
113bool flux_lens_reconstruct(const struct SimField *field, FluxLensState *lens,
114 FluxLensWorkspace *workspace);
115
116void flux_lens_update(struct SimContext *context);
117
118double flux_total_work(const double *S, size_t length);
119double flux_total_energy(const double complex *u_hat, size_t length);
120
121void flux_release_scratch(FluxLensWorkspace *workspace, struct SimContext *context);
122
123#ifdef __cplusplus
124}
125#endif
126
127#endif /* OAKFIELD_SIM_FLUX_LENS_H */
Reusable 1D and 2D complex FFT plans for operator implementations.
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
Reusable 1D complex FFT plan for arbitrary nonzero transform lengths.
Definition fft_plan.h:49
Persistent flux-lens band state and analysis buffers for a simulation context.
Definition sim_flux_lens.h:43
size_t bucket_count
Definition sim_flux_lens.h:70
double min_bandwidth
Definition sim_flux_lens.h:50
bool force_update
Definition sim_flux_lens.h:46
double pi_max
Definition sim_flux_lens.h:72
bool band_ready
Definition sim_flux_lens.h:47
size_t scratch_bytes
Definition sim_flux_lens.h:75
double * bucket_S
Definition sim_flux_lens.h:67
size_t last_update_step
Definition sim_flux_lens.h:52
double band_max_component
Definition sim_flux_lens.h:57
double * bucket_absS
Definition sim_flux_lens.h:68
double band_max_magnitude
Definition sim_flux_lens.h:58
FluxMarks marks
Definition sim_flux_lens.h:74
size_t update_period
Definition sim_flux_lens.h:51
double band_lo
Definition sim_flux_lens.h:53
bool enabled
Definition sim_flux_lens.h:44
double target_band_lo
Definition sim_flux_lens.h:55
size_t field_index
Definition sim_flux_lens.h:48
double smoothing
Definition sim_flux_lens.h:49
double band_hi
Definition sim_flux_lens.h:54
double complex * band_spec
Definition sim_flux_lens.h:60
double target_band_hi
Definition sim_flux_lens.h:56
size_t bucket_capacity
Definition sim_flux_lens.h:69
double pi_min
Definition sim_flux_lens.h:71
size_t band_capacity
Definition sim_flux_lens.h:62
double * S
Definition sim_flux_lens.h:63
double * bucket_pi
Definition sim_flux_lens.h:66
double max_k
Definition sim_flux_lens.h:59
double * Pi
Definition sim_flux_lens.h:64
double complex * band_phys
Definition sim_flux_lens.h:61
double absS_total
Definition sim_flux_lens.h:73
bool locked
Definition sim_flux_lens.h:45
double * bucket_k
Definition sim_flux_lens.h:65
Scratch workspace used while computing and reconstructing flux-lens bands.
Definition sim_flux_lens.h:84
double * tmp_real1
Definition sim_flux_lens.h:87
double complex * tmp_spec1
Definition sim_flux_lens.h:85
double complex * tmp_phys1
Definition sim_flux_lens.h:86
FFTPlan plan
Definition sim_flux_lens.h:89
bool use_dealias
Definition sim_flux_lens.h:88
size_t capacity
Definition sim_flux_lens.h:90
size_t scratch_bytes
Definition sim_flux_lens.h:92
bool plan_ready
Definition sim_flux_lens.h:91
Spectral flux landmarks computed from the latest flux-lens analysis.
Definition sim_flux_lens.h:25
double kc
Definition sim_flux_lens.h:27
double pi_at_kc
Definition sim_flux_lens.h:30
double pi_max
Definition sim_flux_lens.h:33
double k50
Definition sim_flux_lens.h:28
double k90
Definition sim_flux_lens.h:29
double kmax
Definition sim_flux_lens.h:34
double pi_min
Definition sim_flux_lens.h:32
double total_abs_work
Definition sim_flux_lens.h:31
bool valid
Definition sim_flux_lens.h:26
Simulation runtime state.
Definition sim_context.h:70
Owning multidimensional field.
Definition field.h:157