// C ABI for the electrostatic solver (belasolv): opaque doc, pipeline, mesh accessors, progress callback. #pragma once #include #ifdef __cplusplus extern "C" { #endif typedef struct FemmElecDoc FemmElecDoc; // pct in 0..100, or -1 for label-only updates. label may be NULL. typedef void (*FemmElecProgressFn)(int pct, const char* label, void* user); // lifetime FemmElecDoc* femm_elec_doc_new(void); void femm_elec_doc_free(FemmElecDoc* doc); // progress reporting routed to the host (Rust/Iced). void femm_elec_doc_set_progress(FemmElecDoc* doc, FemmElecProgressFn fn, void* user); // pipeline. each returns 1 on success, 0 on failure. int femm_elec_doc_load_fee (FemmElecDoc* doc, const char* path); int femm_elec_doc_load_mesh (FemmElecDoc* doc); int femm_elec_doc_renumber (FemmElecDoc* doc); int femm_elec_doc_solve (FemmElecDoc* doc); int femm_elec_doc_write_results(FemmElecDoc* doc, const char* out_path); // problem attributes after load_fee. int femm_elec_doc_axisymmetric (const FemmElecDoc* doc); double femm_elec_doc_depth (const FemmElecDoc* doc); double femm_elec_doc_precision (const FemmElecDoc* doc); // mesh, valid after load_mesh + renumber. int femm_elec_doc_num_nodes (const FemmElecDoc* doc); void femm_elec_doc_node (const FemmElecDoc* doc, int i, double* x, double* y); int femm_elec_doc_num_elements (const FemmElecDoc* doc); void femm_elec_doc_element (const FemmElecDoc* doc, int i, int* p0, int* p1, int* p2); // property table sizes. int femm_elec_doc_num_materials (const FemmElecDoc* doc); int femm_elec_doc_num_boundaries (const FemmElecDoc* doc); int femm_elec_doc_num_conductors (const FemmElecDoc* doc); // field-point sampling after solve. component selects which scalar to fetch. typedef enum { FEMM_ELEC_FIELD_V = 0, FEMM_ELEC_FIELD_EX = 1, FEMM_ELEC_FIELD_EY = 2, FEMM_ELEC_FIELD_E_MAG = 3, FEMM_ELEC_FIELD_DX = 4, FEMM_ELEC_FIELD_DY = 5, FEMM_ELEC_FIELD_D_MAG = 6, } FemmElecField; double femm_elec_doc_field_at(const FemmElecDoc* doc, double x, double y, FemmElecField component); #ifdef __cplusplus } #endif