Skip to content

Releases: awegroup/Vortex-Step-Method

v2.0.02

01 Dec 17:41
2792890

Choose a tag to compare

  • #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

Full Changelog: v2.0.1...v2.0.2

v2.0.1

21 Oct 15:33
839b9cf

Choose a tag to compare

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.py example 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

08 Oct 14:30
0da2961

Choose a tag to compare

What's Changed

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_app

New 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 use va_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_rate parameter has been removed
  • Body rates are now specified via pitch_rate, roll_rate keywords
  • If you need yaw rate, use pitch_rate parameter (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.md for 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.md for detailed documentation

New Documentation

  • docs/StabilityDerivatives.md - Comprehensive guide to stability derivative computation
  • docs/TrimAngle.md - Guide to trim angle finding with examples
  • docs/README.md - Updated documentation index with quick-start guide
  • Enhanced main README.md with Quick Start, Key Features, and Troubleshooting sections

New Examples

  • examples/TUDELFT_V3_KITE/tow_angle_geometry.py - Visualize effect of tow angle on kite geometry
  • examples/TUDELFT_V3_KITE/tow_point_location_parametric_study.py - Study tow point location effects
  • examples/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

26 Sep 08:48
bf12cad

Choose a tag to compare

CHANGELOG [1.1.0] - 2025-09-26

⚠️ Breaking Changes

  • Class rename: WingAerodynamicsBodyAerodynamics.
  • Dataset path rename: TUDELFT_V3_LEI_KITETUDELFT_V3_KITE.
  • Polar input format update:
    • 3D: alpha, CL, CD, CM
    • 2D: alpha, Cl, Cd, Cm (note the capitalization difference)
  • Defaults & options:
    • Default spanwise panel distribution → uniform
    • Removed options/attributes: using_previous gamma, min_relaxation_error, is_new_vector_definition.
  • Stall model refactor: Simonet-related stall logic moved out of Solver into solver_functions and a dedicated stall branch.

Added

  • AirfoilAerodynamics framework

    • New base class AirfoilAerodynamics (parent for all airfoil types).
    • masure_regression airfoil with on-disk caching for fast reuse.
    • YAML configuration input for airfoil definitions.
    • New tests for AirfoilAerodynamics.
  • 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.
  • 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

    • Solver gains artificial viscosity (property + setter).
    • Added non-linear gamma loop variants and gamma loop type selector.
    • New compute_aerodynamic_quantities helper.
    • New initial gamma distribution options: elliptical, cosine, zero.
    • BodyAerodynamics:
      • Added/renamed circulation helpers:
        • calculate_circulation_distribution_elliptical_wing
        • calculate_circulation_distribution_cosine
    • Panel:
      • New property: panel_polar_data.
      • New _panel_aero_model option: "cl_is_pisinalpha".
  • 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] where p1 = [x, y, z]
      • bridle_lines = [bridle_line1, bridle_line2, ...]
    • BodyAerodynamics API sugar:
      • instantiate_body_aerodynamics function
      • BodyAerodynamics.from_file(...)

Changed

  • Polars & plotting

    • plotting.py::generate_3D_polar_data now 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 to self.* for broader accessibility.
    • Revised gamma initialization and feedback handling.
    • Adjusted Simonet model plumbing and naming (ellipticelliptical).
  • BodyAerodynamics

    • calculate_panel_properties: replaced hardcoded 0.25 / 0.75 with ac (aerodynamic center) and cp (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 POLAR behavior and tests.

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_error and is_new_vector_definition fields.
  • using_previous gamma option (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:
      from VSM.core import WingAerodynamics
      with:
      from VSM.core import BodyAerodynamics
  • Datasets & configs

    • Update any paths from:
      TUDELFT_V3_LEI_KITE → TUDELFT_V3_KITE
      
  • 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.
  • 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.
  • Panel model

    • If you used _panel_aero_model, you can now set:
      panel._panel_aero_model = "cl_is_pisinalpha"
  • 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_dir and cache paths are writable in CI.

What's Changed (generated)

New Contributors

Full Changelog: v1.0.0...v1.1.0

v1.0.0

29 Aug 15:39
5d69200

Choose a tag to compare

  • 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

18 Jun 14:57
ed9deb8

Choose a tag to compare

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"