Releases: OpenSourceAWE/SymbolicAWEModels.jl
Releases · OpenSourceAWE/SymbolicAWEModels.jl
v0.8.0
SymbolicAWEModels v0.8.0
Changed
- BREAKING:
SegmentTypepositional argument removed fromSegment
constructor. Useunit_stiffness,unit_damping,diameter_mm
kwargs or a YAML material instead. TheSegmentTypeenum is kept
temporarily to produce a helpful deprecation error. - BREAKING:
winch_pointmoved fromTethertoWinch. Pass
winch_pointas a keyword to theWinchconstructor 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_rotationtakes
wing_posinstead ofk, wind_norm. - BREAKING:
Tetherstruct 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 aSegmentTypeargument. - BREAKING: YAML segment format no longer has a
typecolumn. Existing
YAML files with atypecolumn in segments will raise an error. - BREAKING:
tether_lenmoved fromWinchtoTether. Each tether
now owns its length as an ODE state variable. Winch-connected tethers
evolve viaD(tether_len) = winch_vel; winch-less tethers have
constant length (D(tether_len) = 0). - BREAKING:
tether_velrenamed towinch_veland remains onWinch.
tether_accrenamed towinch_accin the generated equations. - BREAKING:
SimpleLinModelWithAttributesremoved. The
simple_lin_modelfield is no longer part ofSymbolicAWEModel.
simple_linearize!is no longer exported. - BREAKING:
sim_oscillate!andsim_turn!removed. Usesim!with
a customset_valuesmatrix instead. - BREAKING:
update_aero_yaml_from_struc_yaml!no longer exported. - BREAKING:
setfield removed fromSymbolicAWEModel. Settings are
now read fromsam.sys_struct.set. Theset_setsetter was removed
fromProbWithAttributesandLinProbWithAttributes. - BREAKING:
get_struct_stateremoved fromProbWithAttributes. - Wind equations now use
get_wind_vecinternally instead of
separateget_v_wind,get_upwind_dir, andget_wind_elevation
accessors. Not breaking: KiteUtilsSettingssyncswind_vec
fromv_wind/upwind_dir/upwind_elevationautomatically when
use_wind_vec=false(the default). - Tethers no longer require a connected winch. Winch-less tethers use
constantl0from segment properties. compression_fracdescription 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 fromKiteUtils.sim!now requiresy_opkeyword argument whenlin_modelis
provided (previously obtained from the removed simple lin model).SerializedModeltype parameters tightened fordefaultsand
guessesfields.- fixed most
JETLSwarnings for improved robustness and performance. - Package version is now included in
.bincache filenames, so
upgrading the package automatically invalidates stale cached models. - the script
bin/run_juliawas 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_idxandend_point_idx
from the first/last segment endpoints. - Comprehensive docstrings on all
Point,Group,Segment,
Pulley,Tether,Winch, andTransformstruct fields. WeightedRefPointsexported for weighted reference point support.init!keywordreinit_systo optionally skip system structure
reinitialization.- New tests: "Route 2 auto-generated tether" and "Tether without
winch" intest_tether_winch.jl. - New test file
test_tether_init.jlfor tether initialization. - New test file
test_yaml_weighted_ref.jlfor 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_jetlsandbin/jetlsto 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 requiresl0to
computeunit_stiffnessfrom material properties (needed for
Route 2 tethers). - YAML
update_yaml_from_sys_struct!regex updated for the new
segment format (notypecolumn). - 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.
DFBDFfrom default KiteUtils settings)
no longer throws an error — a warning is emitted and the solver
falls back toFBDF. - 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 loadingSettings.
Removed
SimpleLinModelWithAttributesstruct andsimple_linearize!.sim_oscillate!andsim_turn!simulation functions.getstateandsetstate!functions fromlinearize.jl.upwind_dirhelper function (replaced bywind_vec).- Branch-specific system images:
bin/create_sys_imageand
bin/run_juliano longer embed the git branch name in the.so
filename. A singlekps-image-<julia_major>.sois used instead.
Tests
- README pendulum example and README 2-plate kite example are now
executed intest/setup_integration.jl.
Merged pull requests:
- Add Claude Code GitHub Workflow (#157) (@1-Bart-1)
- warn on unknown solver and fall back to FBDF (#159) (@1-Bart-1)
- fix: add data_prefix=false to all VSMSettings calls (#161) (@1-Bart-1)
- Bump actions/upload-artifact from 4 to 7 (#162) (@dependabot[bot])
- Bump julia-actions/cache from 2 to 3 (#163) (@dependabot[bot])
- Make system image work and fix warnings (#164) (@ufechner7)
- Bump codecov/codecov-action from 5 to 6 (#165) (@dependabot[bot])
- Auto split tether (#168) (@1-Bart-1)
- Use the interface functions from KiteUtils and fix the examples (#170) (@ufechner7)
- Add airbag pressurized membrane simulation example (#174) (@1-Bart-1)
- Remove simple lin model (#176) (@1-Bart-1)
- Improve install script (#178) (@ufechner7)
- Add package version to .bin filename and document segfault issue (#180) (@1-Bart-1)
- Update docs to use GLMakie and separate copy_ functions (#181) (@1-Bart-1)
- Fix broken weighted ref loading (#183) (@1-Bart-1)
- Improve developer documentation (#184) (@ufechner7)
- Remove the branch specific system images (#185) (@ufechner7)
- Move tether length/velocity state from Winch to Tether (#186) (@1-Bart-1)
- Move tether length to Tether, unify settings, add wind_vec (#190) (@1-Bart-1)
- Remove unused parameter winches (#191) (@ufechner7)
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
SymbolicAWEModels v0.7.2
Added
speed_controlledfield onWinch— whentrue, 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) andCITATION.cfffor citing the
package. - CI: GLMakie tests on Linux via
xvfb-run, Julia 1.12 test matrix.
Fixed
reposition!()now uses the analyticalsolve_heading_rotation
for wind-relative heading, consistent withreinit!. Previously
heading was applied as a relative delta, causing drift.reposition!()correctly updates REFINE wings by recalculating
R_b_to_wandpos_bfrom structural points.- Multi-system
plot()now passes vector-typed segment colors,
fixing a crash whensetup_segment_hover_events!assigned
Vector{RGBA}. init!()validates thatSystemStructureusesVSMWingtype
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.jlexample updated: adds WING-type points and uses
VSMSettingswithdata_prefix=false.- Examples updated to pass
data_prefix=falsetoVSMSettings. - 2plate_kite aero geometry TE z-coordinates adjusted.
settings.yamlnow includessample_freqfield.
Merged pull requests:
Closed issues:
- Allow n aero unequal n struc for quaternion wing (#150)
v0.7.1
SymbolicAWEModels v0.7.1
Added
update_sys_struct_from_yaml!()— update aSystemStructurein-place
from a modified YAML file (pointpos_cadand segmentl0).segment_cad_length()andautocalc_tether_len()shared helpers,
replacing duplicated code in the constructor,reinit!, and YAML loader.
Fixed
SystemStructureconstructor auto-calculateswinch.tether_lenfrom
all connected tethers (was only using the first).
Merged pull requests:
v0.7.0
SymbolicAWEModels v0.7.0
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.jlrefactored from ad-hoc benchmarks into a proper
@testsetsuite withsetup_bench_sam()helper.- Added
[workspace]configuration inProject.tomlfor docs, examples,
scripts, and test sub-projects. - Manifest files renamed to
.defaultsuffix 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 whileuse_prior_polar=true
preserves existing refined panel polars. Opt-in via
use_prior_polar=trueon 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_segmentsfor 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)
andbin/run_julia(launcher with system image support).
Merged pull requests:
- Add helper scripts (#148) (@ufechner7)
- Allowing n aero unequal n struc (#152) (@1-Bart-1)
v0.6.1
SymbolicAWEModels v0.6.1
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
Winginto aRigidBodyandAerodynamics. (#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
SystemStrucdoes not go the definition of this struc, but opens a google search (#125)
v0.6.0
SymbolicAWEModels v0.6.0
Changed
- Component constructors (
Point,Segment,Wing,Winch,
Transform) now accept a symbolicname(Symbol) as the first
argument in addition to numeric indices. Numericidxvalues still
work. Use e.g.Point(:kcu, pos, DYNAMIC). - BREAKING:
Segmentconstructor takes separatepoint_i,point_j
arguments instead of apoint_idxsvector. - BREAKING: Rotation matrix fields renamed from
R_a_btoR_a_to_b
throughout (e.g.wing.R_b_w→wing.R_b_to_w). - BREAKING:
ControlPlotsExtpackage extension removed. Visualization is
now handled entirely bySymbolicAWEModelsMakieExt. - 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.jlsplit into modular files under
src/system_structure/(types, core, utilities, transforms, wing,
named_collection).src/generate_system.jlsplit 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 equilibriumtest_segment— spring-damper forces, stiffness, dragtest_wing— QUATERNION and REFINE wing construction, VSM couplingtest_wing_dynamics— rigid body torque response, precession,
angular momentum conservationtest_tether_winch— reel-out dynamics, Coulomb and viscous
friction, terminal velocitytest_pulley— equal-tension constraints, multi-segment pulleystest_transform— spherical coordinate positioningtest_quaternion_conversions— quaternion ↔ rotation matrixtest_quaternion_auto_groups— auto-generated twist DOFstest_principal_body_frame— principal vs body frame separationtest_heading_calculation— kite heading from tether geometrytest_section_alignment— VSM section ↔ structural point mappingtest_profile_law— atmospheric wind profile verificationtest_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/anddata/saddle_form/model directories added.
Added
NamedCollectionindexing — components support symbolic names
(e.g.sys.points[:kcu],sys.segments[:bridle_1]).
SystemStructureresolves all symbolic references to numeric indices
automatically viaassign_indices_and_resolve!().WingTypeenum (QUATERNION,REFINE) for explicit wing type
selection.REFINEapplies per-panel forces directly to structural
points for higher fidelity aeroelastic coupling.AeroModeenum (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_aoaplotting
functions.update_segment_forces!,set_world_frame_damping,
set_body_frame_damping,segment_stretch_statsutility 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.jland 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. SymbolicAWEModelsControlPlotsExtpackage extension.src/precompile.jl.
Merged pull requests:
- Improve simple model (#120) (@1-Bart-1)
- Add Makie extension (#122) (@1-Bart-1)
- Add sysstate conversion functions (#126) (@1-Bart-1)
- Overhaul the package to be compiler-focused (#143) (@1-Bart-1)
- Improve readme (#145) (@1-Bart-1)
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
SymbolicAWEModels v0.5.0
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_torquecalculates the torque that will result in zero acceleration.
Merged pull requests:
v0.4.2
v0.4.1
SymbolicAWEModels v0.4.1
Fixed
- Update Artifacts.toml.default
Merged pull requests:
- Update Artifacts.toml.default and default Manifests (#105) (@opensourceawe-pull-request[bot])
v0.4.0
SymbolicAWEModels v0.4.0
Added
- Structs with attributes for better serialization and code structure (
SimpleLinModelWithAttributes,ProbWithAttributes,LinProbWithAttributes,ControlFuncWithAttributes). plot_forceoption to the plot recipe.model_management.jlfile to better organize the code.
Changed
- BREAKING:
init_modulefunction to simplify project setup, replacinginstall_examples,copy_examples,copy_binandcopy_model_settings. - Major refactoring of the
SymbolicAWEModeland its initialization process. TheSerializedModelstruct is now much simpler and more robust. - The
run_juliascript is now much more powerful, with argument parsing for--copy-manifestand--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.objfile.copy_examples,copy_bin,copy_model_settings,install_examplesfunctions.
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: