- add back compat entry v2 for SciMLBase
- add back compat entry v3 for RecursiveArrayTools
billowing_anglereplaced bybillowing_percentageonWingandWingSettings(percentage of arc length, not radians)billowing_angle_from_percentage()removedBILLOWINGdistribution now uses sinusoidal rotation instead of circular arc
billowing.jlexample comparing flat vs billowed V3 kite- Coarse V3 kite geometry, settings, and combined CFD polar data
cl_over_cdkeyword forplot_polarsandplot_combined_analysis- the function
menu_cp()can now be used to run the examples with the ControlPlots backend - the script
bin/installcan and should be used to instantiate the project and all sub-projects after git checkout - the files
Manifest-v1.11.toml.defaultandManifest-v12.toml.defaultfor enhanced reproducibility - the scripts
bin/jetlsandbin/jetls_examplesfor running a static check of the source code - the script
test_bench.jlfor benchmarking the refinement method and measuring allocations
- Plot legends moved to shared horizontal legend at bottom of grid layouts
- the script bin/run_julia now can be called with a script name as parameter
- fixed all JETLS warnings in the source code for improved performance and stability
- Domain error in elliptical gamma distribution when control points lie outside the nominal span envelope
- the file
CITATION.cff - compat entry for RecursiveArrayTools
- the file
.zenodo.json
WingandRamAirWingmerged into a singleWingstructRamAirWingconstructor replaced byObjWing(returns aWingwith OBJ-specific fields populated)- Renamed
ram_geometry.jl→obj_geometry.jl
n_groupsreplaced byn_unrefined_sectionsinWing,WingSettings, andSolverSettingsPanelGroupingMethodenum removed- Each refined panel maps back to its unrefined section via
refined_panel_mapping n_groupsandgrouping_methodin YAML settings files emit a deprecation warning and are ignored
panel_width_array→width_distalpha_array→alpha_distcl_array→cl_dist,cd_array→cd_dist,cm_array→cm_distpanel_lift→lift_dist,panel_drag→drag_distpanel_moment→panel_moment_distgroup_moment_dist→moment_unrefined_dist- Type parameter
Solver{P,G}/VSMSolution{P,G}changed toSolver{P,U}/VSMSolution{P,U}(U = unrefined sections)
reinit!no longer re-refines the mesh; it only updates panel properties from existingrefined_sections- New
refine!function handles mesh refinement explicitly
- Consistent naming convention:
_dist= per-panel,_unrefined_dist= per-unrefined-section correct_aoasolver setting added (defaultfalse)alpha_geometricis now the angle between apparent wind and chord- Panel
widthcalculation uses sum instead of average src/plotting.jlremoved; all plotting moved to Makie and ControlPlots extensionsTestEnvno longer required as a global dependency
n_unrefined_sectionsfield inWingfor tracking pre-refinement sectionsrefined_panel_mappingfor automatic panel-to-section association- Unrefined distribution fields in
VSMSolution:cl_unrefined_dist,cd_unrefined_dist,cm_unrefined_dist,alpha_unrefined_dist,moment_unrefined_dist,width_unrefined_dist alpha_geometric_distfield inVSMSolutionunrefined_deform!for applying twist and TE deflection to unrefined sections;non_deformed_sectionspreserved for reset/re-deformationrefine!function for explicit mesh refinementplot_combined_analysisin the Makie extension- Literature comparison plotting in the Makie extension
obj_fileanddat_filefields inWingSettingssort_sectionskwarg for section ordering control- Separate
test/Project.tomlandexamples/Project.toml - New tests:
test_unrefined_dist.jl,test_refinement_validation.jl,test_yaml_wing_deformation.jl
RamAirWingtype (useObjWingorWingdirectly)PanelGroupingMethodenumn_groupsfromWingSettings,SolverSettings, and YAML filessrc/plotting.jl(920 lines moved to extensions)
- A Makie plotting extension.
- Reference in vsm_settings.yaml now points to aero_geometry.yaml.
- None.
- Bridle configuration data (nodes, lines, connections).
- Renamed wing_geometry_polars_CFD.yaml → aero_geometry.yaml.
- The kwarg
aero_coeffsto the functionlinearize: if true the linearization will output normalized coefficients instead of moments and forces.
- New file:
yaml_geometry.jl(290+ lines) — Complete YAML-based wing geometry loading. - New structs:
WingSectionData,WingAirfoilData,WingAirfoilInfo(with@with_kwmacros). - New function:
load_polar_data()— Robust CSV polar data loading with error handling. - New constructors:
Wing(geometry_file::String)— Create wings from YAML files.Wing(settings::VSMSettings)— Create wings from settings.
- Renamed
vs()toVSMSettings()constructor. - Added convenience
Solver(body_aero, settings)constructor. - Improved settings structure and validation.
- Split tests: Reorganized from monolithic files to modular structure
(
test/module_name/test_*.jl). - New test module:
yaml_geometrywithtest_load_polar_data.jlandtest_wing_constructor.jl. - Test utilities:
test_data_utils.jlwith shared helper functions. - Test data: Extensive YAML and CSV test files in
data.
- New data sets: Complete
TUDELFT_V3_KITEwith CFD polars and literature results. - Enhanced examples: Updated examples to use YAML geometry (e.g.,
pyramid_model.jl,V3_kite.jl). - Real-world configs: Production-ready YAML geometry files for various kite configurations.
- Path handling: Robust file path resolution for relative/absolute paths.
- Error handling: Comprehensive validation and graceful fallback to INVISCID mode.
- Memory management: Improved file I/O and cleanup in tests.
- Documentation: Added comprehensive docstrings and examples.
- bump Interpolations to 0.16
- breaking: rename
init!toreinit!
- update NonlinearSolve.jl
- suppress
@infomessages when creating a RamAirWing - improve examples
ram_air_kite.jlandbench.jl
- implement export of
solveandsolve!correctly - do not export
menu()because KiteUtils exports it - the polars of the ram air kite are now saved in
.csvfiles - update CI.yml
- expose the angle of attack
alpha_arrayin theVSMSolution#167
- the parameter
prnto the constructorRamAirWingwhich allows it suppress info messages
- Add back
bench2.jland rename it tobench_solve.jl#150
- Remove problematic parallel Xfoil computing and use single thread instead #161
- The fields that had as type a
Matrix of size Px1have now the typeVector - Many new fields of the type
VSMSolutiondocumented reinit!(body_aero)is now a public function
- Added the option to use nonlinear solve to calculate the gamma distribution #140
- New page
Tips and tricksadded to the documentation - Fast and modular linearization added around an operating point #140
- The function
install_examples()which allows to easily install the examples without usinggit - The function
solve!returns a struct now. The functionsolvethat returns a dict is still available. - The moment coefficients distribution in
solve! - The script
installto thebinfolder for users who checked out this git repository - The script
bench2.jlwas added for allocation testing of thesolve!function
- Read the y-coordinates in the correct direction from the
ram_air_kite_body.objfile - In the
menu.jl, changedhelptohelp_me. It works better now, no more warnings on Linux, it should also work on MacOS now - The coordinate frames of the panels now use the same convention as the kite body frame
- The page "Glossary" of the documentation is quite complete now
- The center of mass field of the
RamAirWingis removed, and the geometry is created such that[0, 0, 0]is the center of mass - The enumeration
WingTypewas added and replaces the symbols, used before - The allocations of the function
solve!where reduced by a factor of 11 to 85 allocations align_to_principaloption added toRamAirWingdeform!by a distribution instead of just a left and right angle
- The function
calculate_circulation_distribution_elliptical_wing()was never called - Fix the calculation of force coefficients in
solve! - The continues integration scripts (CI.yml) use now separate runs for the test coverage and for the allocation tests.
- Dynamically deform the RamAirWing by twisting the left side and right side, and deforming the trailing edges using deform! #19
- Set turn rate
omega = [omega_x, omega_y, omega_z]in kite body frame using set_va! #49 - Add moment coefficient calculations around specified point to
solve#17 - Add moment distribution of the moment around the local panel y-axes around
user-defined points on the panels to
solve!#90 - Add function
solve!()which returns aVSMSolutionstruct #87 - Add the option to remove the NaNs in
aero_datavectors or matrices using theremove_nankeyword in theWingandRamAirWingconstructors #98
- Add origin argument to
BodyAerodynamicsconstructor #66 - Improve documentation
This project is based on version 1.0 of the Python project Vortex-Step-Method
- implemented in Julia, therefore about 50 times faster
- an importer for
.objwing geometry files was added (see: #10) - automatic creation of polars using Xfoil.jl was added (see: #43)
- a ram-air kite example was added
Umagwas replaced withv_aas variable name for the norm of the apparent wind speed- memory allocations were significantly reduced
- a menu (examples/menu.jl) for running the examples was added
- plotting was moved to an extension #55
- added improved online documentation