Releases: awegroup/Vortex-Step-Method
v2.0.02
- #152 add test of correction (eae1cb6)
- Change aoa 1/4 correction as optional bool in solver, false by default (#152) (72439c8)
- changed tutorial (acbfc2c)
What's Changed
- Main2 by @jellepoland in #154
- Develop by @jellepoland in #153
Full Changelog: v2.0.1...v2.0.2
v2.0.1
What's Changed
- Updating a minus sign bug, and tweaking the evaluation of static stability derivatives by @jellepoland in #151
Full Changelog: v2.0.0...v2.0.1
Added
evaluate_stability_derivatives.pyexample script demonstrating the use of the new
compute_rigid_body_stability_derivatives()function for calculating aerodynamic stability derivatives, prints results at trim conditions in the kite reference frame (x-backward LE to TE, y-right from kite's perspective, z-up) and in the aircraft convention (x-forward, y-right, z-down).
Fixed
- Corrected a misplaced minus sign in the sideslip handling inside
BodyAerodynamics.va_initialize, restoring the intended sign convention for moment predictions and β-related stability derivatives.
v2.0.0
What's Changed
- updating change log for release v1.1.0 by @jellepoland in #145
- Fix URL and add ORCID for authors in CITATION.cff by @rschmehl in #146
- Update README.md by @jellepoland in #147
- Fixing major bug in calculation of projected surface area, added stability and so on by @jellepoland in #149
New Contributors
Full Changelog:
v1.1.0...v2.0.0
[2.0.0] - 08-10-2025
⚠️ Breaking Changes
API Changes in BodyAerodynamics
1. va.setter now requires keyword-only arguments:
The velocity setter has been completely redesigned to properly handle body angular rates and reference points. All arguments after va are now keyword-only.
Old usage (v1.1.0):
# Setting velocity with yaw rate (tuple format)
body_aero.va = (vel_app, yaw_rate)
# Or without yaw rate
body_aero.va = vel_appNew usage (v2.0.0+):
# Basic velocity setting (no body rates)
body_aero.va = vel_app
# With body rates (keyword arguments required)
body_aero.va = vel_app, roll_rate=p, pitch_rate=q, yaw_rate=r
# With custom reference point for rotational velocity
body_aero.va = vel_app, yaw_rate=r, reference_point=np.array([x, y, z])Migration guide:
-
Instead of setting it directly using
body_aero.va, you can instead useva_initialize()(see below) -
If you do want to directly set it, you could should write for full control over body rates:
body_aero.va = vel_app, roll_rate=p, pitch_rate=q, yaw_rate=r, reference_point=ref_pt
2. va_initialize() signature expanded:
The initialization method now accepts body angular rates and reference point.
Old signature (v1.1.0):
body_aero.va_initialize(Umag, angle_of_attack, side_slip, yaw_rate=0.0)New signature (v2.0.0+):
body_aero.va_initialize(
Umag,
angle_of_attack,
side_slip,
pitch_rate=0.0, # NEW
roll_rate=0.0, # NEW
reference_point=None # NEW
)Migration guide:
- The
yaw_rateparameter has been removed - Body rates are now specified via
pitch_rate,roll_ratekeywords - If you need yaw rate, use
pitch_rateparameter (body-fixed z-axis) - Most existing code will work without changes if you weren't using
yaw_rate - If you were using
yaw_rate, replace with appropriate body rate:# Old body_aero.va_initialize(Umag, alpha, beta, yaw_rate=0.5) # New (yaw is rotation about body z-axis = pitch_rate) body_aero.va_initialize(Umag, alpha, beta, pitch_rate=0.5)
3. Rotational velocity calculation changed:
The method for computing rotational velocity contributions has been fundamentally updated:
- Old behavior: Simple uniform yaw rate applied
- New behavior: Proper rotational velocity field:
v_rot = omega × (r - r_ref)- Accounts for all three body angular rates (roll, pitch, yaw)
- Reference point can be specified (defaults to panel centroids)
- Physically accurate velocity field due to body rotation
Impact:
- Results involving body angular rates will differ from v1.1.0
- New results are physically more accurate
- If comparing with v1.1.0 results, expect differences in cases with non-zero angular rates
4. New property: _body_rates
Body angular rates are now stored and accessible via _body_rates property:
p, q, r = body_aero._body_rates # [roll_rate, pitch_rate, yaw_rate]Added
New Modules
1. stability_derivatives.py
- Compute rigid-body aerodynamic stability derivatives
- Function:
compute_rigid_body_stability_derivatives() - Supports derivatives w.r.t. angle of attack (α), sideslip (β), and body rates (p, q, r)
- Optional non-dimensionalization of rate derivatives
- Uses central finite differences for accuracy
- See
docs/StabilityDerivatives.mdfor detailed documentation
2. trim_angle.py
- Find trim angle of attack where pitching moment equals zero
- Function:
compute_trim_angle() - Two-phase algorithm: coarse sweep + bisection refinement
- Automatic stability verification
- Configurable convergence tolerances
- See
docs/TrimAngle.mdfor detailed documentation
New Documentation
docs/StabilityDerivatives.md- Comprehensive guide to stability derivative computationdocs/TrimAngle.md- Guide to trim angle finding with examplesdocs/README.md- Updated documentation index with quick-start guide- Enhanced main
README.mdwith Quick Start, Key Features, and Troubleshooting sections
New Examples
examples/TUDELFT_V3_KITE/tow_angle_geometry.py- Visualize effect of tow angle on kite geometryexamples/TUDELFT_V3_KITE/tow_point_location_parametric_study.py- Study tow point location effectsexamples/TUDELFT_V3_KITE/kite_stability_dynamics.py- Demonstrate stability derivative computation
Fixed
- Projected area calculation now uses correct trapezoidal integration method
- Reference point handling in rotational velocity calculations
v1.1.0
CHANGELOG [1.1.0] - 2025-09-26
⚠️ Breaking Changes
- Class rename:
WingAerodynamics→BodyAerodynamics. - Dataset path rename:
TUDELFT_V3_LEI_KITE→TUDELFT_V3_KITE. - Polar input format update:
- 3D:
alpha, CL, CD, CM - 2D:
alpha, Cl, Cd, Cm(note the capitalization difference)
- 3D:
- Defaults & options:
- Default spanwise panel distribution →
uniform - Removed options/attributes:
using_previous gamma,min_relaxation_error,is_new_vector_definition.
- Default spanwise panel distribution →
- Stall model refactor: Simonet-related stall logic moved out of
Solverintosolver_functionsand a dedicated stall branch.
Added
-
AirfoilAerodynamics framework
- New base class
AirfoilAerodynamics(parent for all airfoil types). masure_regressionairfoil with on-disk caching for fast reuse.- YAML configuration input for airfoil definitions.
- New tests for
AirfoilAerodynamics.
- New base class
-
LEI parametric model (masure_regression_lei_parametric)
- Examples showing how to reconstruct a LEI airfoil using 6 parameters:
t, eta, kappa, delta, lambda, phi. - Utilities for generating airfoil geometry and exporting .csv / .dat.
- Examples showing how to reconstruct a LEI airfoil using 6 parameters:
-
Half-wing inputs
- Support for half-wing inputs in both polar generation and geometry CSV export.
-
Plotting & tutorials
- Improved convergence plotting utilities.
- New sensitivity analysis examples & script (
sensitivity_analysis.py). - Updated tutorials (usage, sensitivity, convergence workflows).
- Interactive Plotly visualization environment.
- Moment calculations + plotting (incl. user-defined reference point).
- Panel polar investigation function.
-
Solver & VSM pipeline
Solvergains artificial viscosity (property + setter).- Added non-linear gamma loop variants and gamma loop type selector.
- New
compute_aerodynamic_quantitieshelper. - New initial gamma distribution options:
elliptical,cosine,zero. BodyAerodynamics:- Added/renamed circulation helpers:
calculate_circulation_distribution_elliptical_wingcalculate_circulation_distribution_cosine
- Added/renamed circulation helpers:
- Panel:
- New property:
panel_polar_data. - New
_panel_aero_modeloption:"cl_is_pisinalpha".
- New property:
-
Validation & examples
- Added elliptical wing planform test (Simonet ch. 4.1).
- Added rectangular wing test.
- NeuralFoil integration for cross-checking polars.
- Git now ignores
results/.
-
Bridle line forces
- Support for inputs like:
bridle_line1 = [p1, p2, diameter]wherep1 = [x, y, z]bridle_lines = [bridle_line1, bridle_line2, ...]
BodyAerodynamicsAPI sugar:instantiate_body_aerodynamicsfunctionBodyAerodynamics.from_file(...)
- Support for inputs like:
Changed
-
Polars & plotting
plotting.py::generate_3D_polar_datanow passes a gamma distribution
into the solver:
results = solver.solve(body_aero, gamma_distrbution=gamma)- Legends for distributions and polars are displayed below plots.
- Improved clarity and formatting of plot outputs.
-
Solver internals
- Revised
__init__, added artificial viscosity, refactored internal state toself.*for broader accessibility. - Revised gamma initialization and feedback handling.
- Adjusted Simonet model plumbing and naming (
elliptic→elliptical).
- Revised
-
BodyAerodynamics
calculate_panel_properties: replaced hardcoded0.25 / 0.75withac(aerodynamic center) andcp(center of pressure).
-
Docs & tutorials
- Updated docstrings, tutorials, and user guides to reflect the new APIs and behaviors.
- Expanded convergence & sensitivity study guidance (e.g.,
n_panels).
-
Vector conventions
- Normalized aerodynamic vector handling for consistency across modules.
-
Polar engineering
- Updated to use Surfplan profiles; adjusted
POLARbehavior and tests.
- Updated to use Surfplan profiles; adjusted
Fixed
- Polar data input robustness and format handling.
- Reference point handling in moment computations.
- Multiple failing tests in Panel.
- Plot output issues (including prior formatting issues, e.g. #85).
- Numerous docstring and minor consistency fixes.
Removed
min_relaxation_errorandis_new_vector_definitionfields.using_previous gammaoption (gamma initialization is now explicit/controlled).- Consolidated/moved stall models into dedicated modules/branch.
- Extracted polar_engineering work to its own branch.
Migration Notes
-
Imports / classes
- Replace:
with:
from VSM.core import WingAerodynamics
from VSM.core import BodyAerodynamics
- Replace:
-
Datasets & configs
- Update any paths from:
TUDELFT_V3_LEI_KITE → TUDELFT_V3_KITE
- Update any paths from:
-
Polar files & arrays
- Ensure 3D data is in:
alpha, CL, CD, CM - Ensure 2D data is in:
alpha, Cl, Cd, Cm - If you relied on the old format, update your CSV writers/loaders and tests accordingly.
- Ensure 3D data is in:
-
Solver usage
- Specify the desired gamma initialization and loop type explicitly:
solver.gamma_initial_distribution_type = "elliptical" # or "cosine", "zero" solver.gamma_loop_type = "non_linear" # or "base" solver.artificial_viscosity = ... # set as needed results = solver.solve(body_aero, gamma_distrbution="cosine")
- Remove any reliance on
using_previous gamma.
- Specify the desired gamma initialization and loop type explicitly:
-
Panel model
- If you used
_panel_aero_model, you can now set:panel._panel_aero_model = "cl_is_pisinalpha"
- If you used
-
Plotting
- Legends for certain plots are now at the bottom; if you have custom layout logic, adjust figure margins accordingly.
-
Half-wing workflows
- When generating polars or exporting geometry, adjust scripts to provide half-wing inputs if desired.
-
Caching (masure_regression)
- The regression model caches results on disk; verify your
ml_models_dirand cache paths are writable in CI.
- The regression model caches results on disk; verify your
What's Changed (generated)
- Develop by @jellepoland in #70
- Issue#85 by @corentintran in #86
- 105 adding bridle drag by @jellepoland in #112
- Develop by @jellepoland in #116
- 115 changing polar input to have the dimensions n4 instead of 4n by @jellepoland in #118
- Develop by @jellepoland in #121
- Stall models by @jellepoland in #134
- Merge pull request #70 from ocayon/develop by @jellepoland in #135
- Develop by @ocayon in #144
New Contributors
- @corentintran made their first contribution in #86
Full Changelog: v1.0.0...v1.1.0
v1.0.0
- Refactor code to objected oriented. Physics remain the same as the old version. New engineering stall model added.
- Improved performance and added clear documentation and tutorials.
- The code can be packaged and installed using pip
- Pytested, (coverage 66%)
- Adhering to open-source standards.
Full Changelog: v0.1.0...v1.0.0
v0.1.0
This is the functional base of the VSM, used as the aerodynamic model for my master thesis and paper on aerostructural modeling of soft kites. Links below:
Master Thesis "Fast Aeroelastic Model of a Leading-Edge Inflatable Kite"
Paper "Fast Aero-Structural Model of a Leading-Edge Inflatable Kite"