Skip to content

Commit 2314f63

Browse files
1-Bart-1ufechner7
andauthored
Add billowing (#212)
* Add billowing mode and example * Improve plotting legends * Update docs news and project * Update settings * Working billowing * Update billowing to use catenary * Print billowing diff * Improve coverage and fix direction * Address claude review comments * Warn on no op * Add warning to earlier fast path * Remove duplicate code * Add plot tests * Add cl over cd kwarg * Add constructor that uses Int64 for the number of panels * Activate project * Fix warnings * Fix bug * Address copilot comments * Fix typos in yaml file --------- Co-authored-by: Uwe Fechner <uwe.fechner.msc@gmail.com> Co-authored-by: Uwe Fechner <u.fechner-1@tudelft.nl>
1 parent ec56d76 commit 2314f63

37 files changed

+3647
-89
lines changed

NEWS.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,25 @@
1+
## Unreleased
2+
3+
### Breaking
4+
- `billowing_angle` replaced by `billowing_percentage` on `Wing` and
5+
`WingSettings` (percentage of arc length, not radians)
6+
- `billowing_angle_from_percentage()` removed
7+
- `BILLOWING` distribution now uses sinusoidal rotation instead of circular arc
8+
9+
### Added
10+
- `billowing.jl` example comparing flat vs billowed V3 kite
11+
- Coarse V3 kite geometry, settings, and combined CFD polar data
12+
- `cl_over_cd` keyword for `plot_polars` and `plot_combined_analysis`
13+
14+
### Changed
15+
- Plot legends moved to shared horizontal legend at bottom of grid layouts
16+
17+
### Fixed
18+
- Domain error in elliptical gamma distribution when control points lie
19+
outside the nominal span envelope
20+
121
## VortexStepMethod v3.0.1 2025-04-04
22+
223
### Changed
324
- the file `CITATION.cff`
425
- compat entry for RecursiveArrayTools

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "VortexStepMethod"
22
uuid = "ed3cd733-9f0f-46a9-93e0-89b8d4998dd9"
3-
version = "3.0.1"
43
authors = ["1-Bart-1 <bart@vandelint.net>", "Oriol Cayon and contributors"]
4+
version = "3.0.1"
55

66
[workspace]
77
projects = ["examples", "docs", "test"]
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
wing_sections:
2+
# ---------------------------------------------------------------
3+
# headers:
4+
# - airfoil_id: integer, unique identifier for the airfoil (matches wing_airfoils)
5+
# - LE_x: x-coordinate of leading edge
6+
# - LE_y: y-coordinate of leading edge
7+
# - LE_z: z-coordinate of leading edge
8+
# - TE_x: x-coordinate of trailing edge
9+
# - TE_y: y-coordinate of trailing edge
10+
# - TE_z: z-coordinate of trailing edge
11+
# ---------------------------------------------------------------
12+
# NOTE: Reduced to 10 sections to match 20 structural WING points (10 LE/TE pairs)
13+
# Constraint: n_structural_points (20) == 2 * n_vsm_sections (10)
14+
# Selected sections match structural point spanwise positions
15+
headers: [airfoil_id, LE_x, LE_y, LE_z, TE_x, TE_y, TE_z]
16+
data:
17+
# Sections match structural points exactly from struc_geometry.yaml
18+
# Section 1: points 2 (LE) and 3 (TE)
19+
- [
20+
18,
21+
-0.16686417,
22+
4.07190711,
23+
8.25938552,
24+
0.8950856,
25+
4.23504033,
26+
8.28564737,
27+
]
28+
# Section 2: points 4 (LE) and 5 (TE)
29+
- [
30+
15,
31+
-0.66385373,
32+
3.97158462,
33+
9.10345727,
34+
0.84466799,
35+
4.04893109,
36+
9.16869541,
37+
]
38+
# Section 3: points 6 (LE) and 7 (TE)
39+
- [
40+
11,
41+
-1.00179344,
42+
3.13938093,
43+
10.08117033,
44+
0.95411064,
45+
3.19044693,
46+
10.20618443,
47+
]
48+
# Section 4: points 8 (LE) and 9 (TE)
49+
- [
50+
7,
51+
-1.11933902,
52+
1.96778538,
53+
10.69146438,
54+
1.03150699,
55+
1.98490264,
56+
10.81013669,
57+
]
58+
# Section 5: points 10 (LE) and 11 (TE)
59+
- [
60+
3,
61+
-1.16537227,
62+
0.67379745,
63+
10.96630823,
64+
1.09790203,
65+
0.6605361,
66+
11.06585663,
67+
]
68+
# Section 6: points 12 (LE) and 13 (TE) - mirror of section 5
69+
- [
70+
3,
71+
-1.16537227,
72+
-0.67379745,
73+
10.96630823,
74+
1.09790203,
75+
-0.6605361,
76+
11.06585663,
77+
]
78+
# Section 7: points 14 (LE) and 15 (TE) - mirror of section 4
79+
- [
80+
7,
81+
-1.11933902,
82+
-1.96778538,
83+
10.69146438,
84+
1.03150699,
85+
-1.98490264,
86+
10.81013669,
87+
]
88+
# Section 8: points 16 (LE) and 17 (TE) - mirror of section 3
89+
- [
90+
11,
91+
-1.00179344,
92+
-3.13938093,
93+
10.08117033,
94+
0.95411064,
95+
-3.19044693,
96+
10.20618443,
97+
]
98+
# Section 9: points 18 (LE) and 19 (TE) - mirror of section 2
99+
- [
100+
15,
101+
-0.66385373,
102+
-3.97158462,
103+
9.10345727,
104+
0.84466799,
105+
-4.04893109,
106+
9.16869541,
107+
]
108+
# Section 10: points 20 (LE) and 21 (TE) - mirror of section 1
109+
- [
110+
18,
111+
-0.16686417,
112+
-4.07190711,
113+
8.25938552,
114+
0.8950856,
115+
-4.23504033,
116+
8.28564737,
117+
]
118+
119+
wing_airfoils:
120+
# ---------------------------------------------------------------
121+
# headers:
122+
# - airfoil_id: integer, unique identifier for the airfoil
123+
# - type: one of [neuralfoil, breukels_regression, measure_regression, polars]
124+
# - info_dict: dictionary with parameters depending on 'type'
125+
#
126+
# info_dict fields by type:
127+
# - breukels_regression:
128+
# t: Tube diameter non-dimensionalized by chord (required)
129+
# kappa: Maximum camber height/magnitude, non-dimensionalized by chord (required)
130+
# - neuralfoil:
131+
# dat_file_path: Path to airfoil .dat file (x, y columns)
132+
# model_size: NeuralFoil model size (e.g., "xxxlarge")
133+
# xtr_lower: Lower transition location (0=forced, 1=free)
134+
# xtr_upper: Upper transition location
135+
# n_crit: Critical amplification factor (see guidelines below)
136+
# n_crit guidelines:
137+
# Sailplane: 12–14
138+
# Motorglider: 11–13
139+
# Clean wind tunnel: 10–12
140+
# Average wind tunnel: 9 (standard "e^9 method")
141+
# Dirty wind tunnel: 4–8
142+
# - polars:
143+
# csv_file_path: Path to polar CSV file (columns: alpha [rad], cl, cd, cm)
144+
# - measure_regression:
145+
# t, eta, kappa, delta, lambda, phi: Regression parameters
146+
# - inviscid:
147+
# no further data is required
148+
# ---------------------------------------------------------------
149+
alpha_range: [-15, 50, 0.5] # [deg], in this range the polars are calculated
150+
reynolds: !!float 1e6 # Reynolds number
151+
headers: [airfoil_id, type, info_dict]
152+
data:
153+
- [1, polars, { csv_file_path: '2D_polars_drag_adjusted/1.csv' }]
154+
- [2, polars, { csv_file_path: '2D_polars_drag_adjusted/2.csv' }]
155+
- [3, polars, { csv_file_path: '2D_polars_drag_adjusted/3.csv' }]
156+
- [4, polars, { csv_file_path: '2D_polars_drag_adjusted/4.csv' }]
157+
- [5, polars, { csv_file_path: '2D_polars_drag_adjusted/5.csv' }]
158+
- [6, polars, { csv_file_path: '2D_polars_drag_adjusted/6.csv' }]
159+
- [7, polars, { csv_file_path: '2D_polars_drag_adjusted/7.csv' }]
160+
- [8, polars, { csv_file_path: '2D_polars_drag_adjusted/8.csv' }]
161+
- [9, polars, { csv_file_path: '2D_polars_drag_adjusted/9.csv' }]
162+
- [10, polars, { csv_file_path: '2D_polars_drag_adjusted/10.csv' }]
163+
- [11, polars, { csv_file_path: '2D_polars_drag_adjusted/11.csv' }]
164+
- [12, polars, { csv_file_path: '2D_polars_drag_adjusted/12.csv' }]
165+
- [13, polars, { csv_file_path: '2D_polars_drag_adjusted/13.csv' }]
166+
- [14, polars, { csv_file_path: '2D_polars_drag_adjusted/14.csv' }]
167+
- [15, polars, { csv_file_path: '2D_polars_drag_adjusted/15.csv' }]
168+
- [16, polars, { csv_file_path: '2D_polars_drag_adjusted/16.csv' }]
169+
- [17, polars, { csv_file_path: '2D_polars_drag_adjusted/17.csv' }]
170+
- [18, polars, { csv_file_path: '2D_polars_drag_adjusted/18.csv' }]
171+
- [19, polars, { csv_file_path: '2D_polars_drag_adjusted/19.csv' }]
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
alpha,Cl,Cd,Cm
2+
-14.999999999999998,-0.7815989424727691,0.26690486928639234,0.1513115712127311
3+
-14.500000000000002,-0.7679947698959011,0.25692290939919615,0.1513115712127311
4+
-14.0,-0.7562722014431007,0.2469409495119998,0.1513115712127311
5+
-13.5,-0.745785223671694,0.2369589896248035,0.1513115712127311
6+
-13.0,-0.735887823139006,0.2269770297376072,0.1513115712127311
7+
-12.5,-0.7259339864023624,0.2169950698504109,0.1513115712127311
8+
-12.000000000000002,-0.7152777000190882,0.2070131099632146,0.1513115712127311
9+
-11.5,-0.7032729505465092,0.19703115007601826,0.1513115712127311
10+
-11.0,-0.6892737245419506,0.18704919018882196,0.1513115712127311
11+
-10.5,-0.6726340085627378,0.17706723030162563,0.1513115712127311
12+
-10.0,-0.6527077891661963,0.16708527041442933,0.1513115712127311
13+
-9.5,-0.6288490529096514,0.15710331052723303,0.1513115712127311
14+
-9.0,-0.6004117863504287,0.14712135064003673,0.1513115712127311
15+
-8.5,-0.5667499760458534,0.13713939075284043,0.1513115712127311
16+
-8.0,-0.5272176085532508,0.1271574308656441,0.1513115712127311
17+
-7.499999999999999,-0.4811686704299466,0.11717547097844778,0.15131157121273106
18+
-7.0,-0.4324606994688453,0.10760532853756,0.1367939817737111
19+
-6.5,-0.3853819090913009,0.0988588209892892,0.1228446364449695
20+
-6.000000000000001,-0.33992582965760837,0.09097570035474242,0.10946484035339861
21+
-5.5,-0.2960859915280623,0.0839957186550263,0.096655898625891
22+
-5.0,-0.2538559250629577,0.0779586279112478,0.0844191163893389
23+
-4.5,-0.2159550434674728,0.0727676807943206,0.0730550516548853
24+
-4.0,-0.1829588587323138,0.0682091846241277,0.0626174354043963
25+
-3.5,-0.1516450493960662,0.0641474733952293,0.0527373322208485
26+
-3.0000000000000004,-0.11879129399731583,0.06044688110218561,0.04304580668721851
27+
-2.5,-0.0811752710746482,0.0569717417395568,0.0331739233864828
28+
-2.0,-0.0355746591666493,0.0535863893019032,0.0227527469016182
29+
-1.5000000000000002,0.02622609975082757,0.0503504235725568,0.011481449300827406
30+
-1.0,0.1042908628198079,0.0473577829911575,-0.0002656553047875
31+
-0.5,0.189614400178524,0.0445243095367264,-0.0118447892679018
32+
0.0,0.2731914819652083,0.0417658451882849,-0.0226121749411904
33+
0.5,0.3557444890017091,0.0389381585076991,-0.0333669989367228
34+
1.0,0.4410912179803868,0.0361177702917579,-0.0442048470204237
35+
1.5000000000000002,0.5248695628452424,0.0335516508718663,-0.0534265402757499
36+
2.0,0.6027174175402769,0.0314867705794295,-0.0593328997861588
37+
2.5,0.6754871235581754,0.0297377823224889,-0.062876045362109
38+
3.0000000000000004,0.7466883077319688,0.0280002546859699,-0.066107795616861
39+
3.5,0.8159447920161751,0.0263425315166031,-0.0689785198380737
40+
4.0,0.882880398365313,0.0248329566611191,-0.0714385873134062
41+
4.5,0.9471189487339008,0.0235398739662487,-0.0734383673305175
42+
5.0,1.0082842650764576,0.0225316272787223,-0.0749282291770668
43+
5.5,1.0660001693475016,0.0218765604452707,-0.0758585421407131
44+
6.000000000000001,1.1198904835015508,0.0216430173126245,-0.0761796755091154
45+
6.5,1.1730032825989054,0.0218555027472603,-0.0761431700685285
46+
7.0,1.2273051287313683,0.0224768133900758,-0.076046928452436
47+
7.499999999999999,1.2807975744007138,0.023482730749432898,-0.0759108627193397
48+
8.0,1.3314821721087169,0.0248490363336937,-0.0757548849277414
49+
8.5,1.3773604743571508,0.0265515116512202,-0.0755989071361432
50+
9.0,1.4164340336477907,0.0285659382103744,-0.0754628414030468
51+
9.5,1.4467044024824105,0.0308680975195183,-0.0753665997869543
52+
10.0,1.4661731333627843,0.033433771087014,-0.0753300943463675
53+
10.5,1.4791075252059551,0.0377295688013173,-0.0779678068495631
54+
11.0,1.4901408957026034,0.0448347835608506,-0.0844740956822261
55+
11.5,1.4978238255149576,0.0541442213889258,-0.09273868782897
56+
12.000000000000002,1.5007068953052467,0.06505268830885434,-0.10065131027440903
57+
12.5,1.4478125078785742,0.0813064038148973,-0.1082854509007945
58+
13.0,1.327791188740308,0.103935104135536,-0.1166130457476011
59+
13.5,1.1986357026030765,0.1282588703954122,-0.124871494035277
60+
14.0,1.1183388141795072,0.1495977837191678,-0.1322981949842703
61+
14.500000000000002,1.0836834275674483,0.16758478702300417,-0.13916224193214982
62+
14.999999999999998,1.054932993623927,0.18464791495839375,-0.1458109752380202
63+
15.5,1.0353010972003385,0.2002998862528848,-0.1515991646546333
64+
16.0,1.028001323148079,0.2140534196340252,-0.155881579934741
65+
16.5,1.0279465928930964,0.2257591150787353,-0.1588574292964903
66+
17.0,1.027907459623104,0.2360936683707948,-0.1612711173409803
67+
17.5,1.0278839558321435,0.2458089419480403,-0.1632952083953905
68+
18.0,1.0278761140142585,0.2556567982483086,-0.1651022667869003
69+
18.5,1.0281104344749106,0.265699815399311,-0.1666975270932829
70+
19.0,1.0287640929905735,0.2755864659301079,-0.168072974392968
71+
19.5,1.03003152465829,0.28544745388056,-0.1693812987641203
72+
20.0,1.0318927413652261,0.2954134832905278,-0.1707751902849041
73+
20.5,1.0343277549985475,0.3055500999908466,-0.1723291345944475
74+
21.0,1.0373165774454194,0.3157783912824044,-0.1739528172445241
75+
21.5,1.040839220593008,0.3260123734101406,-0.1755517281822664
76+
22.0,1.0448756963284784,0.3361660626189948,-0.1770313573548068
77+
22.5,1.0494060165389965,0.3462258406278082,-0.1783881334181357
78+
23.0,1.054410193111728,0.3562351526243653,-0.1796770625187123
79+
23.5,1.0598682379338382,0.3661936100570196,-0.180891500839372
80+
24.000000000000004,1.065760162892493,0.37610082437412523,-0.1820248045629501
81+
24.5,1.072065979874858,0.38595640702403533,-0.1830703298722823
82+
25.0,1.078765700768099,0.39644726102272926,-0.18405322166418164
83+
25.5,1.0858393374593813,0.40821883893099,-0.184999313079432
84+
26.0,1.0932669018358705,0.42120896506602284,-0.18590963648398937
85+
26.5,1.1010284057847328,0.43535546374503303,-0.18678522424380997
86+
27.0,1.1091038611931334,0.45059615928522595,-0.18762710872484992
87+
27.5,1.1174732799482379,0.46686887600380683,-0.1884363222930653
88+
28.0,1.1261166739372122,0.48411143821798125,-0.18921389731441246
89+
28.500000000000004,1.1350140550472216,0.5022616702449542,-0.1899608661548473
90+
29.000000000000004,1.1441454351654319,0.5212573964019311,-0.19067826118032608
91+
29.500000000000004,1.1534908261790089,0.5410364410061171,-0.1913671147568049
92+
29.999999999999996,1.163030239975118,0.5615366283747177,-0.19202845925023992
93+
30.5,1.1727436884409246,0.5826957828249386,-0.1926633270265873
94+
31.0,1.182611183463595,0.6044517286739843,-0.1932727504518031
95+
31.5,1.1926127369302943,0.6267422902390609,-0.1938577618918436
96+
32.0,1.2027283607281882,0.6495052918373732,-0.19441939371266478
97+
32.5,1.2129380667444432,0.6726785577861266,-0.19495867828022287
98+
33.0,1.2232218668662236,0.6961999124025267,-0.19547664796047406
99+
33.5,1.2335597729806955,0.7200071800037783,-0.19597433511937432
100+
34.0,1.2439317969750245,0.7440381849070871,-0.19645277212288
101+
34.5,1.2543179507363769,0.7682307514296585,-0.19691299133694712
102+
35.0,1.2646982461519178,0.7925227038886975,-0.19735602512753178
103+
35.5,1.2750526951088124,0.8168518666014095,-0.1977829058605902
104+
36.0,1.2853613094942273,0.8411560638850001,-0.19819466590207854
105+
36.5,1.295604101195327,0.865373120056674,-0.19859233761795284
106+
37.0,1.3057610820992782,0.889440859433637,-0.1989769533741693
107+
37.5,1.3158122640932461,0.9132971063330946,-0.1993495455366841
108+
38.0,1.3257376590643961,0.9368796850722517,-0.19971114647145333
109+
38.5,1.3355172788998944,0.9601264199683138,-0.2000627885444331
110+
39.0,1.3451311354869058,0.9829751353384859,-0.2004055041215796
111+
39.5,1.3545592407125968,1.0053636554999739,-0.200740325568849
112+
40.0,1.3637816064641326,1.0272298047699824,-0.20106828525219733
113+
40.5,1.372778244628679,1.0485114074657174,-0.20139041553758086
114+
41.0,1.3815291670934016,1.0691462879043838,-0.20170774879095565
115+
41.5,1.3900143857454654,1.0890722704031872,-0.20202131737827783
116+
42.0,1.398213912472037,1.1082271792793328,-0.2023321536655036
117+
42.5,1.4061077591602815,1.1265488388500258,-0.20264129001858908
118+
43.0,1.4136759376973649,1.1439750734324712,-0.20294975880349037
119+
43.5,1.4208984599704524,1.160443707343875,-0.20325859238616364
120+
44.0,1.42775533786671,1.1758925649014422,-0.20356882313256508
121+
44.5,1.434226583273303,1.190259470422378,-0.2038814834086507
122+
45.0,1.4402922080773974,1.2034822482238878,-0.20419760558037675
123+
45.5,1.4459322241661583,1.215498722623177,-0.20451822201369937
124+
46.0,1.4511266434267522,1.226246717937451,-0.2048443650745746
125+
46.5,1.4558554777463437,1.2356640584839151,-0.20517706712895872
126+
47.0,1.4600987390120994,1.2436885685797743,-0.20551736054280775
127+
47.5,1.4638364391111838,1.2502580725422339,-0.2058662776820779
128+
48.00000000000001,1.467048589930764,1.2553103946884998,-0.20622485091272533
129+
48.5,1.4697152033580045,1.258783359335777,-0.20659411260070612
130+
49.0,1.471816291280071,1.2606147908012701,-0.2069750951119764
131+
49.5,1.4733318655841299,1.2607425134021857,-0.20736883081249236
132+
50.0,1.4742419381573462,1.2591043514557283,-0.2077763520682101

0 commit comments

Comments
 (0)