Settings and data files

Loading settings

SimpleKiteControllers.load_yaml_fields! — Function
load_yaml_fields!(obj, filename, section; path = skc_data_path()) -> obj

Set every field section (a top-level key in the YAML file filename) names on the mutable struct obj, converting each value to the field's declared type; filename is resolved under path unless already absolute. An unknown key errors, a key the file omits leaves obj's existing value (its struct default, for a freshly constructed obj) untouched. A key in RETIRED_YAML_KEYS is skipped if it has the value listed there and errors otherwise, so archived settings files still load.

Purely reflective (hasfield/setfield!/fieldtype on typeof(obj)), so it works on any mutable struct without src/ depending on the struct's package. FC_Settings is built on it. It also loaded WinchControllers.jl's WCSettings in examples/simple_reelout.jl until the 2026-08-16 winch merge gave that struct a single file reached through the project's wc_settings: key (PlanWinchcontrol.md), which is V3Kite's WC_Settings(filename)'s job now.

source
SimpleKiteControllers.apply_overrides! — Function
apply_overrides!(obj, overrides, label, typename, what)

Set each key => value of overrides as a field of the settings struct obj, converted to the field's type, and log the ones in force as "what overrides in force". label is the name of the input that carried them and typename the type's name, both for the error of a key that is not a field of obj. For an FC_Settings, a key is a setting by its bare name, in whichever part holds it (set_fc_field!).

source
SimpleKiteControllers.set_fc_field! — Function
set_fc_field!(fcs::FC_Settings, key::Symbol, value) -> fcs

Set the part key of fcs, or the setting key in whichever part holds it (FC_FIELD_PART), converting value to the field's type. Errors for a key that is neither.

source
SimpleKiteControllers.set_tos_field! — Function
set_tos_field!(tos::TrajOptSettings, key::Symbol, value) -> tos

Set the part key of tos, or the setting key in whichever part holds it (TO_FIELD_PART), converting value to the field's type. Errors for a key that is neither.

source

Project and data files

SimpleKiteControllers.project_file — Function
project_file(project = "system_fig8_200m.yaml") -> String

Path of the system project to hand to the kite model, absolute when this package carries it in skc_data_path and unchanged otherwise, which leaves it a lookup under the active data path.

The absolute form is what makes sim_settings this package's file: KiteUtils resolves it relative to the project. Bare names like wc_settings instead follow the active data path, which examples/simple_fig8.jl also points here.

Not a field of FC_Settings: which plant a run is flown against is not a tuning parameter of the controller.

source
SimpleKiteControllers.turn_rate_coeffs_file — Function
turn_rate_coeffs_file(project = project_file()) -> String

Get the turn-rate table filename from the system project, the same way as fc_settings. Returns the value of the turn_rate_coeffs field of the project's system section; present in every project.

source
SimpleKiteControllers.kite_correction_file — Function
kite_correction_file(project = project_file()) -> String

Get the filename of the measured kite correction (written by examples/identify_kite_correction.jl, read with load_course_correction) from the system project, the same way as fc_settings. Returns the value of the kite_correction field of the project's system section; present in every project.

source
SimpleKiteControllers.winch_table_file — Function
winch_table_file(project = project_file()) -> String

Get the winch table filename from the system project, the same way as fc_settings. Returns the value of the winch_table field of the project's system section; only reel-out projects carry it.

source
SimpleKiteControllers.traj_opt_settings_file — Function
traj_opt_settings_file(project = project_file()) -> String

Get the trajectory-optimizer settings filename from the system project, the same way as fc_settings. Returns the value of the traj_opt_settings field of the project's system section; present in every project that flies against an externally optimized path (both fig8 and reel-out).

source

State of the example menu

The choices of the examples/select_*.jl menus, persisted in data/gui.yaml.

Reading and writing the file

SimpleKiteControllers.write_gui_field — Function
write_gui_field(name, value)

Set the scalar name: in data/gui.yaml to value, adding it under gui: when it is missing; line-based, so every other key and comment is kept.

source

Defaults

Current selection

SimpleKiteControllers.selected_reelout_project — Function
selected_reelout_project() -> String

Project the simple_reelout*.jl scripts fly: the persisted selection when it already names a reel-out project (system_reelout_*.yaml), otherwise default_reelout_project.

project: is a single shared key, so without this a fig8 selection left over from simple_fig8.jl would run the reel-out scripts against that project's fc_settings.yaml, whose compliance: 0.5 (FORCE mode) simple_reelout.jl rejects at startup. Falling back here keeps both families runnable without re-selecting in between, while select_project() still decides between several reel-out projects once there is more than one.

source
SimpleKiteControllers.selected_fig8_project — Function
selected_fig8_project() -> String

Project the figure-of-eight scripts (simple_fig8.jl, stability_fig8.jl) fly: the persisted selection when it already names a fig8 project (system_fig8_*.yaml), otherwise default_project.

The counterpart of selected_reelout_project: a reel-out selection left over from simple_opt_reelout.jl would otherwise run these scripts against a reel-out project's fc_settings.yaml.

source
SimpleKiteControllers.selected_windspeed — Function
selected_windspeed() -> Union{Float64, Nothing}

Persisted wind-speed override in m/s at the project's reference height, or nothing for the default choice (the selected project's own v_wind). Pass something(selected_windspeed(), project_set.v_wind) to init.

source
SimpleKiteControllers.selected_turbulence — Function
selected_turbulence() -> Union{Float64, String, Nothing}

Persisted turbulence level init applies, or the "default" keyword when the settings YAML stays in charge. Pass it straight to init's use_turbulence. Read here rather than through V3Kite's get_default_turbulence so that picking a project does not pull the kite model into the session.

source
SimpleKiteControllers.apply_windspeed_override! — Function
apply_windspeed_override!(project_set, wind_speed::Union{Real, Nothing})

Overwrite project_set's wind speed with wind_speed [m/s], keeping its direction and elevation. A no-op for nothing (the default choice).

project_set.v_wind = wind_speed alone only works when the project has use_wind_vec: false: KiteUtils.Settings re-derives v_wind from wind_vec on every property write when use_wind_vec is true (all of this package's settings files set it), so a plain v_wind assignment is silently reverted by that same write. Setting wind_vec instead — at the project's existing upwind_dir/upwind_elevation — keeps both representations consistent regardless of which one is authoritative.

source

Scenario archive

SimpleKiteControllers.scenario_site — Function
scenario_site(project = selected_reelout_project()) -> String

The site subfolder of output/scenarios/ a reel-out project's runs are archived under: "cabauw" for system_reelout_cabauw.yaml, "maasvlakte" for every other reel-out project. move_scenario.jl files a run by the project its summary YAML records; the readers (plot_scenario.jl, plot_powercurve.jl, create_plots.jl) pass nothing and follow the active project, see selected_scenarios_dir.

source