Skip to content

Releases: OpenSourceAWE/SymbolicAWEModels.jl

v0.8.0

18 Apr 09:50
d3e100e

Choose a tag to compare

SymbolicAWEModels v0.8.0

Diff since v0.7.2

Changed

  • BREAKING: SegmentType positional argument removed from Segment
    constructor. Use unit_stiffness, unit_damping, diameter_mm
    kwargs or a YAML material instead. The SegmentType enum is kept
    temporarily to produce a helpful deprecation error.
  • BREAKING: winch_point moved from Tether to Winch. Pass
    winch_point as a keyword to the Winch constructor instead.
  • BREAKING: Heading calculation changed from wind-perpendicular
    projection to tangential sphere frame. calc_heading(R_b_to_w, wind_norm)calc_heading(R_b_to_w, wing_pos).
    get_heading_components() removed. solve_heading_rotation takes
    wing_pos instead of k, wind_norm.
  • BREAKING: Tether struct fields restructured — winch_point_idx/ref
    removed, new fields: start_point_idx/ref, end_point_idx/ref,
    n_segments, unit_stiffness, unit_damping, diameter.
  • BREAKING: create_tether() utility returns a 5-tuple (added
    ground_point_idx) and no longer takes a SegmentType argument.
  • BREAKING: YAML segment format no longer has a type column. Existing
    YAML files with a type column in segments will raise an error.
  • BREAKING: tether_len moved from Winch to Tether. Each tether
    now owns its length as an ODE state variable. Winch-connected tethers
    evolve via D(tether_len) = winch_vel; winch-less tethers have
    constant length (D(tether_len) = 0).
  • BREAKING: tether_vel renamed to winch_vel and remains on Winch.
    tether_acc renamed to winch_acc in the generated equations.
  • BREAKING: SimpleLinModelWithAttributes removed. The
    simple_lin_model field is no longer part of SymbolicAWEModel.
    simple_linearize! is no longer exported.
  • BREAKING: sim_oscillate! and sim_turn! removed. Use sim! with
    a custom set_values matrix instead.
  • BREAKING: update_aero_yaml_from_struc_yaml! no longer exported.
  • BREAKING: set field removed from SymbolicAWEModel. Settings are
    now read from sam.sys_struct.set. The set_set setter was removed
    from ProbWithAttributes and LinProbWithAttributes.
  • BREAKING: get_struct_state removed from ProbWithAttributes.
  • Wind equations now use get_wind_vec internally instead of
    separate get_v_wind, get_upwind_dir, and get_wind_elevation
    accessors. Not breaking: KiteUtils Settings syncs wind_vec
    from v_wind/upwind_dir/upwind_elevation automatically when
    use_wind_vec=false (the default).
  • Tethers no longer require a connected winch. Winch-less tethers use
    constant l0 from segment properties.
  • compression_frac description clarified: "Compressive/tensile
    stiffness ratio (0-1). 0 = no compression stiffness."
  • init!, next_step!, update_sys_state! are no longer exported
    and must be imported from KiteUtils.
  • sim! now requires y_op keyword argument when lin_model is
    provided (previously obtained from the removed simple lin model).
  • SerializedModel type parameters tightened for defaults and
    guesses fields.
  • fixed most JETLS warnings for improved robustness and performance.
  • Package version is now included in .bin cache filenames, so
    upgrading the package automatically invalidates stale cached models.
  • the script bin/run_julia was updated to work also with Julia 1.12.6

Added

  • Route 2 tether auto-generation: Tether(name; start_point, end_point, n_segments) automatically creates intermediate points
    and segments, evenly spaced between endpoints. YAML format:
    headers: [name, start_point, end_point, n_segments, ...].
  • Route 1 tethers auto-detect start_point_idx and end_point_idx
    from the first/last segment endpoints.
  • Comprehensive docstrings on all Point, Group, Segment,
    Pulley, Tether, Winch, and Transform struct fields.
  • WeightedRefPoints exported for weighted reference point support.
  • init! keyword reinit_sys to optionally skip system structure
    reinitialization.
  • New tests: "Route 2 auto-generated tether" and "Tether without
    winch" in test_tether_winch.jl.
  • New test file test_tether_init.jl for tether initialization.
  • New test file test_yaml_weighted_ref.jl for weighted reference
    point YAML loading.
  • Airbag pressurized membrane simulation example (examples/airbag.jl).
  • the script bin/install. Use it after installation from git.
  • the script bin/create_sys_image. Improves time for first run
    by a factor of 3-5.
  • the scripts bin/install_jetls and bin/jetls to install and run
    JETLS.jl, a static code checker for Julia.
  • Developer documentation improvements (troubleshooting section for
    segfault issues, updated docs to use GLMakie).

Fixed

  • YAML calculate_derived_properties! no longer requires l0 to
    compute unit_stiffness from material properties (needed for
    Route 2 tethers).
  • YAML update_yaml_from_sys_struct! regex updated for the new
    segment format (no type column).
  • YAML weighted reference point loading fixed (broken deserialization
    of weighted refs).
  • Heading calculation uses tangential sphere frame, fixing drift issues
    with the old wind-perpendicular projection.
  • Unknown solver string (e.g. DFBDF from default KiteUtils settings)
    no longer throws an error — a warning is emitted and the solver
    falls back to FBDF.
  • README code examples now include the required
    SymbolicAWEModels.init_module(; force=false) call so they work
    correctly on a fresh install.
  • README pendulum example also calls set_data_path("data/base")
    before loading Settings.

Removed

  • SimpleLinModelWithAttributes struct and simple_linearize!.
  • sim_oscillate! and sim_turn! simulation functions.
  • getstate and setstate! functions from linearize.jl.
  • upwind_dir helper function (replaced by wind_vec).
  • Branch-specific system images: bin/create_sys_image and
    bin/run_julia no longer embed the git branch name in the .so
    filename. A single kps-image-<julia_major>.so is used instead.

Tests

  • README pendulum example and README 2-plate kite example are now
    executed in test/setup_integration.jl.

Merged pull requests:

Closed issues:

  • Run an airbag simulation (nice-to-have) (#102)
  • Add CI workflow that creates a PR to update the default Manifests when all tests pass (#149)
  • Tether with x segments (#151)
  • Error in readme example (#156)
  • test/test_setup.sh is failing (#160)
  • Fix tests that are broken on MacOS (#166)
  • Single source of truth for angles (#167)
  • Test readme (#177)
  • Loading .bin might cause segmentation fault (#179)

v0.7.2

18 Mar 12:05

Choose a tag to compare

SymbolicAWEModels v0.7.2

Diff since v0.7.1

Added

  • speed_controlled field on Winch — when true, tether velocity
    is prescribed externally (D(tether_vel) = 0) while length still
    tracks velocity.
  • Multi-system record() for recording side-by-side SysLog animations
    to video (MP4/GIF/MKV/WebM).
  • Makie extension test suite (test_makie_extension.jl) covering
    multi-system plot, record, and replay.
  • Zenodo metadata (.zenodo.json) and CITATION.cff for citing the
    package.
  • CI: GLMakie tests on Linux via xvfb-run, Julia 1.12 test matrix.

Fixed

  • reposition!() now uses the analytical solve_heading_rotation
    for wind-relative heading, consistent with reinit!. Previously
    heading was applied as a relative delta, causing drift.
  • reposition!() correctly updates REFINE wings by recalculating
    R_b_to_w and pos_b from structural points.
  • Multi-system plot() now passes vector-typed segment colors,
    fixing a crash when setup_segment_hover_events! assigned
    Vector{RGBA}.
  • init!() validates that SystemStructure uses VSMWing type
    before equation generation.
  • sim_reposition!() passes absolute heading to the transform
    instead of subtracting the current wing heading.
  • Typo fixes in README and documentation ("ODE solver" → "ODE
    problem").

Changed

  • sam_tutorial.jl example updated: adds WING-type points and uses
    VSMSettings with data_prefix=false.
  • Examples updated to pass data_prefix=false to VSMSettings.
  • 2plate_kite aero geometry TE z-coordinates adjusted.
  • settings.yaml now includes sample_freq field.

Merged pull requests:

Closed issues:

  • Allow n aero unequal n struc for quaternion wing (#150)

v0.7.1

27 Feb 22:29
ec41fb3

Choose a tag to compare

SymbolicAWEModels v0.7.1

Diff since v0.7.0

Added

  • update_sys_struct_from_yaml!() — update a SystemStructure in-place
    from a modified YAML file (point pos_cad and segment l0).
  • segment_cad_length() and autocalc_tether_len() shared helpers,
    replacing duplicated code in the constructor, reinit!, and YAML loader.

Fixed

  • SystemStructure constructor auto-calculates winch.tether_len from
    all connected tethers (was only using the first).

Merged pull requests:

v0.7.0

27 Feb 14:59

Choose a tag to compare

SymbolicAWEModels v0.7.0

Diff since v0.6.1

Changed

  • BREAKING: Julia version requirement raised from 1.10 to 1.11, 1.12.
  • reinit!() uses a unified code path for all wing types, calling
    match_aero_sections_to_structure! and
    compute_spatial_group_mapping! during VSM rebuild.
  • test_bench.jl refactored from ad-hoc benchmarks into a proper
    @testset suite with setup_bench_sam() helper.
  • Added [workspace] configuration in Project.toml for docs, examples,
    scripts, and test sub-projects.
  • Manifest files renamed to .default suffix and gitignored.

Added

  • Asymmetric aero/structural section counts: aerodynamic and structural
    meshes can now have different numbers of sections. When counts differ,
    match_aero_sections_to_structure!() rebuilds unrefined
    sections from structural LE/TE positions while use_prior_polar=true
    preserves existing refined panel polars. Opt-in via
    use_prior_polar=true on the VortexStepMethod wing.
  • identify_wing_segments() — identifies LE/TE pairs from groups
    (preferred) or via a consecutive-pair heuristic.
  • compute_spatial_group_mapping!() — maps groups to VSM sections by
    spatial proximity, supporting n_groups != n_aero_sections.
  • REFINE wings can now have groups (used for LE/TE pair identification).
  • QUATERNION wings can now have wing_segments for structural geometry
    locking.
  • YAML loader fallback LE/TE detection in
    update_aero_yaml_from_struc_yaml!() when no groups are defined
    (consecutive-pair heuristic with x-coordinate check).
  • test_match_aero_sections.jl — tests geometry matching and polar
    interpolation for both REFINE and QUATERNION wings, including
    mismatched section counts.
  • Helper scripts: bin/install (environment setup, Julia version detection)
    and bin/run_julia (launcher with system image support).

Merged pull requests:

v0.6.1

23 Feb 12:07
a99f412

Choose a tag to compare

SymbolicAWEModels v0.6.1

Diff since v0.6.0

Fixed

  • Disable VSM auto-sorting of sections (sort_sections=false) in all
    VortexStepMethod calls. Auto-sorting silently broke the correspondence
    between VSM sections and structural point indices / group mappings.

Merged pull requests:

Closed issues:

  • Add trailing edge deflection (#20)
  • Add an option for a KCU to RamAirKite (#15)
  • Remove the param adaptive from init_sim! (#14)
  • The Point struct stores redundant information (#18)
  • Add point mass model aerodynamics (#12)
  • Split up the Wing into a RigidBody and Aerodynamics. (#5)
  • Do not use the term "world frame" (#27)
  • Structural Simulation (#62)
  • Add a default transform_idx=0, that creates no transformation (#110)
  • Model validation (#117)
  • Writing to arrow files that are opened already throws error on windows (#121)
  • With the introduction of Makie, yaml_loading & new examples, the documentation needs an update (#124)
  • Clicking on SystemStruc does not go the definition of this struc, but opens a google search (#125)

v0.6.0

21 Feb 22:04

Choose a tag to compare

SymbolicAWEModels v0.6.0

Diff since v0.5.0

Changed

  • Component constructors (Point, Segment, Wing, Winch,
    Transform) now accept a symbolic name (Symbol) as the first
    argument in addition to numeric indices. Numeric idx values still
    work. Use e.g. Point(:kcu, pos, DYNAMIC).
  • BREAKING: Segment constructor takes separate point_i, point_j
    arguments instead of a point_idxs vector.
  • BREAKING: Rotation matrix fields renamed from R_a_b to R_a_to_b
    throughout (e.g. wing.R_b_wwing.R_b_to_w).
  • BREAKING: ControlPlotsExt package extension removed. Visualization is
    now handled entirely by SymbolicAWEModelsMakieExt.
  • BREAKING: Predefined model factory functions removed
    (create_ram_sys_struct, create_simple_ram_sys_struct). Build models
    using component constructors or YAML instead.
  • BREAKING: Ram air kite and V3 kite models moved to dedicated packages
    (RamAirKite.jl,
    V3Kite.jl).
    Their data directories are removed from this package.
  • src/system_structure.jl split into modular files under
    src/system_structure/ (types, core, utilities, transforms, wing,
    named_collection).
  • src/generate_system.jl split into 13 focused modules under
    src/generate_system/ (point_eqs, segment_eqs, wing_eqs, group_eqs,
    winch_eqs, pulley_eqs, tether_eqs, scalar_eqs, vsm_eqs, accessors,
    helpers, create_sys).
  • Makie extension significantly overhauled with new plotting functions.
  • Test suite completely rewritten. The old tests (test_simulation,
    test_linearization, test_initialization, test_sam, etc.) tested
    the full assembled kite model as a black box, making failures hard to
    diagnose. The new tests isolate each component with minimal models
    built from constructors, verifying physics against analytical
    solutions:
    • test_point — gravity free-fall, damping, quasi-static equilibrium
    • test_segment — spring-damper forces, stiffness, drag
    • test_wing — QUATERNION and REFINE wing construction, VSM coupling
    • test_wing_dynamics — rigid body torque response, precession,
      angular momentum conservation
    • test_tether_winch — reel-out dynamics, Coulomb and viscous
      friction, terminal velocity
    • test_pulley — equal-tension constraints, multi-segment pulleys
    • test_transform — spherical coordinate positioning
    • test_quaternion_conversions — quaternion ↔ rotation matrix
    • test_quaternion_auto_groups — auto-generated twist DOFs
    • test_principal_body_frame — principal vs body frame separation
    • test_heading_calculation — kite heading from tether geometry
    • test_section_alignment — VSM section ↔ structural point mapping
    • test_profile_law — atmospheric wind profile verification
    • test_bench — performance regression tracking
  • Complete documentation overhaul with new pages: coordinate_frames,
    vsm_coupling, pipeline, tutorial_julia, tutorial_yaml.
  • Data files reorganised: base settings moved to data/base/, new
    data/2plate_kite/ and data/saddle_form/ model directories added.

Added

  • NamedCollection indexing — components support symbolic names
    (e.g. sys.points[:kcu], sys.segments[:bridle_1]).
    SystemStructure resolves all symbolic references to numeric indices
    automatically via assign_indices_and_resolve!().
  • WingType enum (QUATERNION, REFINE) for explicit wing type
    selection. REFINE applies per-panel forces directly to structural
    points for higher fidelity aeroelastic coupling.
  • AeroMode enum (AERO_NONE, AERO_DIRECT, AERO_LINEARIZED) for
    build-time control over aerodynamic computation strategy.
  • YAML-based model definition via load_sys_struct_from_yaml(),
    update_yaml_from_sys_struct!(), and
    update_aero_yaml_from_struc_yaml!().
  • REFINE wing support (src/vsm_refine.jl) — structural deformation
    coupled directly to VSM panel geometry with moment-preserving force
    distribution.
  • Principal vs body frame separation for QUATERNION wings. Principal
    frame (diagonal inertia) used for Euler equations, body frame (from
    reference points) used for output and VSM coupling.
  • Auto-group generation for QUATERNION wings when groups are not
    explicitly provided.
  • record() for saving simulation replays to MP4.
  • plot_sphere_trajectory, plot_body_frame, plot_aoa plotting
    functions.
  • update_segment_forces!, set_world_frame_damping,
    set_body_frame_damping, segment_stretch_stats utility functions.
  • New examples: hanging_mass, catenary_line, saddle_form,
    coupled_2plate_kite, coupled_realtime_visualization,
    coupled_linearize, coupled_simple_lin_model,
    coupled_tether_deflection, heading_gate,
    cosine_steering_trajectory, makie_polar_plots,
    static_load_2plate_kite.
  • Benchmark test (test_bench.jl) for performance tracking.

Removed

  • predefined_structures.jl and factory functions
    (create_ram_sys_struct, create_simple_ram_sys_struct,
    create_tether_sys_struct, copy_to_simple!).
  • Ram air kite data files, LEI kite directory, data/kite.obj.
  • Old examples: ram_air_kite, lin_ram_model, simple_lin_model,
    lin_simple_tuned_model, simple_tuned_model,
    realtime_visualization, reposition, tether_props.
  • SymbolicAWEModelsControlPlotsExt package extension.
  • src/precompile.jl.

Merged pull requests:

Closed issues:

  • Defining a kite geometry in a .yaml file (#49)
  • Add "load geometry from yaml" functionality (#59)
  • adding-simple-structural-test-cases (#61)
  • Zenith Pyramid Model AeroStructuralCoupled Dynamic Simulation (#63)
  • Zenith --V3 Kite Model AeroStructuralCoupled Dynamic-- Flight Simulation (#64)
  • Circular --Pyramid Model AeroStructuralCoupled Dynamic-- Flight Simulation (#65)
  • Circular --V3 Kite AeroStructuralCoupled Dynamic-- Flight Simulation (#66)
  • Hardcode on line 91 of prefined_structure.jl (#93)
  • Add a 3d plot extension for Makie.jl (#106)
  • Use global damping during find_steady_state! (#116)
  • Main branch is broken (#118)
  • Add a slider to the Makie plots to enable manual time-step changing (#123)
  • Create new release (#142)

v0.5.0

26 Aug 09:11
78d0956

Choose a tag to compare

SymbolicAWEModels v0.5.0

Diff since v0.4.2

Removed

  • BREAKING: the Winch struct doesn't have a model field anymore. Instead, all equations are symbolic, and the WinchModels dependency is removed.

Added

  • The function calc_steady_torque calculates the torque that will result in zero acceleration.

Merged pull requests:

  • Add calc steady torque function and remove WinchModels dependency (#113) (@1-Bart-1)
  • Update Artifacts.toml.default and default Manifests (#114) (@opensourceawe-pull-request[bot])

v0.4.2

24 Aug 21:12
7c8b9f5

Choose a tag to compare

SymbolicAWEModels v0.4.2

Diff since v0.4.1

Fixed

  • Don't write protect manifest

Merged pull requests:

  • Add the function reposition (#109) (@1-Bart-1)
  • Update Artifacts.toml.default and default Manifests (#112) (@opensourceawe-pull-request[bot])

Closed issues:

  • Run a static AERO (VSM) V3 analysis, defined from a yaml file (#60)
  • Can't place system in subfolder due to KiteUtils Settings definition (#81)

v0.4.1

13 Aug 17:51
62b52f1

Choose a tag to compare

SymbolicAWEModels v0.4.1

Diff since v0.4.0

Fixed

  • Update Artifacts.toml.default

Merged pull requests:

  • Update Artifacts.toml.default and default Manifests (#105) (@opensourceawe-pull-request[bot])

v0.4.0

13 Aug 17:04
1e57d54

Choose a tag to compare

SymbolicAWEModels v0.4.0

Diff since v0.3.3

Added

  • Structs with attributes for better serialization and code structure (SimpleLinModelWithAttributes, ProbWithAttributes, LinProbWithAttributes, ControlFuncWithAttributes).
  • plot_force option to the plot recipe.
  • model_management.jl file to better organize the code.

Changed

  • BREAKING: init_module function to simplify project setup, replacing install_examples, copy_examples, copy_bin and copy_model_settings.
  • Major refactoring of the SymbolicAWEModel and its initialization process. The SerializedModel struct is now much simpler and more robust.
  • The run_julia script is now much more powerful, with argument parsing for --copy-manifest and --precompile.
  • The precompilation process now uses artifacts instead of downloading files directly.

Fixed

  • URLs in Artifacts.toml.default.
  • Cross-correlation analysis in tests.

Removed

  • data/kite.obj file.
  • copy_examples, copy_bin, copy_model_settings, install_examples functions.

Merged pull requests:

  • Update Artifacts.toml.default and default Manifests (#76) (@opensourceawe-pull-request[bot])
  • 🤖 Compat: Update ModelingToolkit to ~10.15 (#85) (@opensourceawe-pull-request[bot])
  • 🤖 Compat: Update ModelingToolkit to ~10.16 (#89) (@opensourceawe-pull-request[bot])
  • Add control function and improve serialization (#90) (@1-Bart-1)
  • Bump actions/checkout from 4 to 5 (#97) (@dependabot[bot])
  • Bump dawidd6/action-download-artifact from 6 to 11 (#99) (@dependabot[bot])
  • Improve the serialization by grouping prob, lin_prob and control_funcs with their attributes in structs (#103) (@1-Bart-1)

Closed issues:

  • Dont rebuild normal sys if linear outputs change (#86)
  • Add option for control function so it gets serialized (#87)
  • Write a test suite to test if the serialization works as intended (#88)