Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,42 @@ SPDX-FileCopyrightText: 2025 Uwe Fechner, Bart van de Lint
SPDX-License-Identifier: MPL-2.0
-->

# v0.7.0 DD-02-2026

## 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).

# v0.6.1 23-02-2026

## Fixed
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name = "SymbolicAWEModels"
uuid = "9c9a347c-5289-41db-a9b9-25ccc76c3360"
version = "0.6.1"
version = "0.7.0"
authors = ["Bart van de Lint <bart@vandelint.net> and contributors"]

[deps]
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ julia --project=test test/test_point.jl
| `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_match_aero_sections` | Asymmetric aero/structural section matching, polar interpolation |
| `test_profile_law` | Atmospheric wind profile verification |
| `test_bench` | Performance regression tracking |

Expand Down
6 changes: 3 additions & 3 deletions data/2plate_kite/aero_geometry.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ wing_sections:
headers: [airfoil_id, LE_x, LE_y, LE_z, TE_x, TE_y, TE_z]
data:
# Right section: points 2 (LE) and 3 (TE)
- [1, -0.5, 1.0, 2.0, 0.5, 1.0, 2.2]
- [1, -0.5, 1.0, 2.0, 0.5, 1.0, 2.3]

# Center section: points 4 (LE) and 5 (TE)
- [1, -0.5, 0.0, 2.5, 0.5, 0.0, 2.7]
- [1, -0.5, 0.0, 2.5, 0.5, 0.0, 2.8]

# Left section: points 6 (LE) and 7 (TE)
- [1, -0.5, -1.0, 2.0, 0.5, -1.0, 2.2]
- [1, -0.5, -1.0, 2.0, 0.5, -1.0, 2.3]

wing_airfoils:
alpha_range: [-180, 180, 1] # deg
Expand Down
4 changes: 4 additions & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ VortexStepMethod = "ed3cd733-9f0f-46a9-93e0-89b8d4998dd9"

[compat]
Documenter = "1.11"

[sources]
SymbolicAWEModels = {path = ".."}

2 changes: 2 additions & 0 deletions docs/src/private_functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ SymbolicAWEModels.resolve_ref_spec
SymbolicAWEModels.validate_sys_struct
SymbolicAWEModels.build_name_dict
SymbolicAWEModels.identify_wing_segments
SymbolicAWEModels.match_aero_sections_to_structure!
SymbolicAWEModels.compute_spatial_group_mapping!
SymbolicAWEModels.init_untransformed_components!
SymbolicAWEModels.adjust_vsm_panels_to_origin!
SymbolicAWEModels.apply_aero_z_offset!
Expand Down
3 changes: 3 additions & 0 deletions docs/src/tutorial_julia.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
EditURL = "literate/tutorial_julia.jl"
```

Copyright (c) 2025 Bart van de Lint, Jelle Poland
SPDX-License-Identifier: MPL-2.0

```@meta
CurrentModule = SymbolicAWEModels
```
Expand Down
Loading
Loading