Gyredocs
Depth Practice
API

Gyre/Examples

Inviscid aerofoil

In one minuteThe complete loop on one case — solve the flow over a NACA 0012, inspect the field and the surface pressure, obtain adjoint derivatives with respect to flow conditions and shape, and estimate the error of the result.

Written at L1 Essentials goes to L3 Mechanics 616 words Markdown

Subsonic inviscid flow over a NACA 0012 at Mach 0.5 and 2° incidence, on a 48 × 12 curved O-mesh with cubic elements. Everything on this page is produced by the example_airfoil study of the verification pipeline.

Mach number (48 × 12 elements, p = 3)Part of the domain: window x ∈ [-1, 2.5], y ∈ [-1.5, 1.5] · the 354 mesh elements that reach into it · 8×8 points each

Fields: mach [0.05156, 0.7167], pressure [2.397, 3.389], density [0.8823, 1.13], entropy [2.846, 2.888]. Raw sample (JSON)

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · example_airfoil/field.jsonSame code as this build

PassedExample: inviscid NACA 00124 of 4 checks passed · 104.5 s · quick suite

NACA 0012 at Mach 0.5 and 2 degrees on a 48 x 12 curved O-mesh, p = 3. Outputs, adjoint derivatives, adjoint-based error estimates and surface distributions.

  • convergedyesexpected truepass
  • cl near compressible thin-aerofoil value0.2827expected 0.228 … 0.317pass
  • spurious inviscid drag |cd|1.98e-04expected < 1e-3pass
  • lift-curve slope per radian8.12expected 6.5 … 9.0pass

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · quick suite · record (JSON)Same code as this build

Run it#

bash
gyre run naca0012_euler \
    --set mesh.params.n_surf=48 --set mesh.params.n_radial=12 \
    --set mesh.params.first_cell=0.02 --set discretization.order=3 \
    --gradients --of cl,cd,cm --wrt alpha,mach,x_surface --error cd,cl -o runs/naca
python
from gyre.cases import Case, preset
from gyre.error import estimate_error

case = Case(preset("naca0012_euler", **{"mesh.params.n_surf": 48, "mesh.params.n_radial": 12,
                                        "mesh.params.first_cell": 0.02,
                                        "discretization.order": 3}))
flow = case.discipline
flow.solve()
out = flow.outputs(("cl", "cd", "cm"))
grad = flow.totals(of=("cl", "cd", "cm"), wrt=("alpha", "mach", "x_surface"))
est = estimate_error(case, ("cd", "cl"))
bash
curl -s $API/jobs -H 'content-type: application/json' -d '{
  "case": "naca0012_euler",
  "overrides": {"mesh.params.n_surf": 48, "mesh.params.n_radial": 12,
                "mesh.params.first_cell": 0.02, "discretization.order": 3},
  "gradients": {"of": ["cl", "cd", "cm"], "wrt": ["alpha", "mach", "x_surface"]},
  "error_estimate": ["cd", "cl"]}'

Results#

Outputs, adjoint derivatives and estimated discretization errorExample: inviscid NACA 0012
outputvalued/dα [1/rad]d/dMachestimated error
cl0.2826878.120130.229219-0.00220267
cd1.9845e-040.005343021.7935e-043.3961e-05
cm-0.00266027-0.06736490.00197556—

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · quick suite · record (JSON)Same code as this build

  • The lift coefficient is close to the compressible thin-aerofoil estimate 2πα/1−M22\pi\alpha/\sqrt{1-M^2}; thickness adds a few percent.
  • The exact drag of a subsonic inviscid flow is zero, so the computed drag is error. It has three sources: discretization error (which the adjoint-based estimate in the last column measures, relative to the next polynomial degree), the singular trailing edge (which enrichment in pp resolves poorly) and the far-field boundary at a finite distance (a modelling error no mesh refinement removes). Comparing the estimate with the drag itself shows how much of it better resolution would recover.
  • The derivative columns come from three adjoint solves (one per output) and include ∂/∂α\partial/\partial\alpha, ∂/∂M\partial/\partial M and the sensitivity to every surface node.
Surface pressure coefficientExample: inviscid NACA 0012
Data table
seriesx / c−cp
upper surface0-0.874419
upper surface0-0.866679
upper surface2.5004e-04-0.629748
upper surface0.00171302-0.147335
upper surface0.003269970.139233
upper surface0.003269970.140604
upper surface0.005323910.370284
upper surface0.009694760.640388
upper surface0.01303940.743507
upper surface0.01303940.742867
upper surface0.01687190.816368
upper surface0.02409650.885381
upper surface0.02918760.905444
upper surface0.02918760.905715
upper surface0.03475110.916466
upper surface0.04474030.918183
upper surface0.05151470.91318
upper surface0.05151470.91295
upper surface0.05874060.904786
upper surface0.07137060.886667
upper surface0.07974470.873797
upper surface0.07974470.873581
upper surface0.08854350.859573
upper surface0.1036580.835134
upper surface0.1135280.819522
upper surface0.1135280.819349
upper surface0.1237910.803252
upper surface0.1412040.776386
upper surface0.1524480.759617
upper surface0.1524480.759467
upper surface0.1640480.74244
upper surface0.1835430.71443
upper surface0.1960220.696961
upper surface0.1960220.697092
upper surface0.2088160.67948
upper surface0.2301530.650958
upper surface0.2437120.633397
upper surface0.2437120.633286
upper surface0.2575420.615675
upper surface0.2804560.587142
upper surface0.2949280.56957
upper surface0.2949280.569657
upper surface0.3096220.552124
upper surface0.333830.524042
upper surface0.3490370.506848
upper surface0.3490370.50691
upper surface0.3644130.489832
upper surface0.3896160.462603
upper surface0.4053690.446052
upper surface0.4053690.446013
upper surface0.4212380.429637
upper surface0.4471240.403554
upper surface0.4632270.387737
upper surface0.4632270.387717
upper surface0.4793930.37211
upper surface0.5056410.347321
upper surface0.5218970.332295
upper surface0.5218970.3323
upper surface0.5381590.317489
upper surface0.5644460.293983
upper surface0.5806520.279718
upper surface0.5806520.279723
upper surface0.596810.265649
upper surface0.622810.243253
upper surface0.6387670.229609
upper surface0.6387670.229617
upper surface0.6546190.216111
upper surface0.6800110.194499
upper surface0.6955210.181251
upper surface0.6955210.181244
upper surface0.7108730.168054
upper surface0.7353430.146751
upper surface0.7502140.133563
upper surface0.7502140.133567
upper surface0.7648760.120328
upper surface0.788120.0987075
upper surface0.8021690.085159
upper surface0.8021690.0851584
upper surface0.8159590.0714158
upper surface0.8376910.0486441
upper surface0.8507430.0341484
upper surface0.8507430.0341541
upper surface0.8634910.01926
upper surface0.883442-0.00588722
upper surface0.895337-0.0222263
upper surface0.895337-0.0222529
upper surface0.906884-0.0393163
upper surface0.924807-0.0691096
upper surface0.935397-0.0891371
upper surface0.935397-0.0897227
upper surface0.945602-0.110369
upper surface0.961275-0.151597
upper surface0.970429-0.173767
upper surface0.970429-0.181065
upper surface0.979165-0.222613
upper surface0.992395-0.311533
upper surface1-0.282855
upper surface1-0.263395
lower surface2.5004e-04-1.01943
lower surface0.00171302-1.04799
lower surface0.00326997-0.963049
lower surface0.00326997-0.968865
lower surface0.00532391-0.84827
lower surface0.00969476-0.640162
lower surface0.0130394-0.522971
lower surface0.0130394-0.521793
lower surface0.0168719-0.416051
lower surface0.0240965-0.270233
lower surface0.0291876-0.196493
lower surface0.0291876-0.196213
lower surface0.0347511-0.131697
lower surface0.0447403-0.0451959
lower surface0.0515147-0.00102843
lower surface0.0515147-8.7757e-04
lower surface0.05874060.0375448
lower surface0.07137060.0894897
lower surface0.07974470.116388
lower surface0.07974470.116224
lower surface0.08854350.139576
lower surface0.1036580.170852
lower surface0.1135280.186911
lower surface0.1135280.186773
lower surface0.1237910.200489
lower surface0.1412040.218285
lower surface0.1524480.227056
lower surface0.1524480.226935
lower surface0.1640480.234055
lower surface0.1835430.242424
lower surface0.1960220.246008
lower surface0.1960220.245902
lower surface0.2088160.248281
lower surface0.2301530.24982
lower surface0.2437120.249626
lower surface0.2437120.249535
lower surface0.2575420.248459
lower surface0.2804560.245039
lower surface0.2949280.242113
lower surface0.2949280.242041
lower surface0.3096220.238486
lower surface0.333830.231559
lower surface0.3490370.226725
lower surface0.3490370.226671
lower surface0.3644130.221411
lower surface0.3896160.212122
lower surface0.4053690.206027
lower surface0.4053690.205993
lower surface0.4212380.199629
lower surface0.4471240.188859
lower surface0.4632270.181975
lower surface0.4632270.181992
lower surface0.4793930.174953
lower surface0.5056410.163332
lower surface0.5218970.15603
lower surface0.5218970.156025
lower surface0.5381590.148641
lower surface0.5644460.136554
lower surface0.5806520.129013
lower surface0.5806520.129009
lower surface0.596810.121417
lower surface0.622810.109026
lower surface0.6387670.101294
lower surface0.6387670.101301
lower surface0.6546190.0935123
lower surface0.6800110.0807697
lower surface0.6955210.0727803
lower surface0.6955210.0727864
lower surface0.7108730.0646999
lower surface0.7353430.0513638
lower surface0.7502140.0429308
lower surface0.7502140.0429282
lower surface0.7648760.0343233
lower surface0.788120.019959
lower surface0.8021690.0107628
lower surface0.8021690.0107611
lower surface0.8159590.00127745
lower surface0.837691-0.0147846
lower surface0.850743-0.0252252
lower surface0.850743-0.0252314
lower surface0.863491-0.0361388
lower surface0.883442-0.0549682
lower surface0.895337-0.0674908
lower surface0.895337-0.0674628
lower surface0.906884-0.0807481
lower surface0.924807-0.104425
lower surface0.935397-0.120675
lower surface0.935397-0.121164
lower surface0.945602-0.138159
lower surface0.961275-0.172927
lower surface0.970429-0.198357
lower surface0.970429-0.193999
lower surface0.979165-0.234097
lower surface0.992395-0.314428

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · quick suite · record (JSON)Same code as this build

Residual historyExample: inviscid NACA 0012
Data table
nonlinear iterationp-multigrid Newton–Krylov
00.254526
10.286223
20.11197
30.0753932
40.0565508
50.0445968
60.0360615
70.0265559
80.0164238
90.00752402
100.0033031
118.9868e-04
121.1153e-04
133.3942e-06
143.0041e-08
152.3433e-10
161.8256e-12

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · quick suite · record (JSON)Same code as this build

The residual falls slowly while the pseudo-time step grows, then at Newton’s rate — the Jacobian is exact — down to round-off. The p-multigrid hierarchy for p=3p = 3 is (3,1,0)(3, 1, 0).

Shape sensitivity#

Shape sensitivity of lift: d cl / d y of each surface nodeExample: inviscid NACA 0012

One adjoint solve yields the sensitivity to every surface node.

Data table
seriesx / cd cl / d y_node
upper surface00.00574924
upper surface9.7595e-05-0.0781155
upper surface8.1813e-04-0.0122766
upper surface0.00223893-0.0298514
upper surface0.00326997-0.0790927
upper surface0.004495-0.0161657
upper surface0.007347950.0537891
upper surface0.01089250.115413
upper surface0.01303940.0138844
upper surface0.01537680.107486
upper surface0.02032680.0957088
upper surface0.02595130.0627779
upper surface0.02918760.0196206
upper surface0.03260830.0515092
upper surface0.03959430.0625516
upper surface0.04722920.0503063
upper surface0.05151470.0213436
upper surface0.05597650.0546432
upper surface0.0649120.071538
upper surface0.07446280.0556815
upper surface0.07974470.022874
upper surface0.08519240.0577564
upper surface0.09596690.0767119
upper surface0.1073160.0602766
upper surface0.1135280.0259665
upper surface0.1198950.0606712
upper surface0.1323750.078505
upper surface0.1453810.0611597
upper surface0.1524480.0241525
upper surface0.1596540.0621767
upper surface0.1736860.082247
upper surface0.1881890.0637672
upper surface0.1960220.0248964
upper surface0.2039790.0648001
upper surface0.2193890.0859227
upper surface0.2352090.0667461
upper surface0.2437120.0257662
upper surface0.2523210.06788
upper surface0.2689180.0902676
upper surface0.285860.0703175
upper surface0.2949280.0268636
upper surface0.3040830.0716751
upper surface0.3216620.0956326
upper surface0.3395160.0747343
upper surface0.3490370.0283094
upper surface0.3586240.0764358
upper surface0.3769680.102376
upper surface0.3955130.0802956
upper surface0.4053690.0302414
upper surface0.415270.0824805
upper surface0.4341510.110964
upper surface0.4531580.0873979
upper surface0.4632270.0328285
upper surface0.473320.090245
upper surface0.4925060.122043
upper surface0.511740.0965941
upper surface0.5218970.0362952
upper surface0.5320570.100352
upper surface0.5513090.136545
upper surface0.5705320.108692
upper surface0.5806520.0409653
upper surface0.5907530.113729
upper surface0.6098350.155887
upper surface0.6288090.124931
upper surface0.6387670.0473388
upper surface0.6486840.131828
upper surface0.6673580.182324
upper surface0.6858490.147315
upper surface0.6955210.0562402
upper surface0.7051320.157047
upper surface0.7231680.219686
upper surface0.7409470.179313
upper surface0.7502140.0691338
upper surface0.7593990.193653
upper surface0.7765750.275027
upper surface0.7934220.22747
upper surface0.8021690.0888641
upper surface0.8108150.249967
upper surface0.8269170.362832
upper surface0.8426240.305691
upper surface0.8507430.121669
upper surface0.8587440.344392
upper surface0.8735730.517896
upper surface0.8879460.449019
upper surface0.8953370.187569
upper surface0.9025920.517826
upper surface0.9159660.854565
upper surface0.9288260.792304
upper surface0.9353970.116923
upper surface0.9418181.42553
upper surface0.953571.35144
upper surface0.9647590.618934
upper surface0.9704293.40859
upper surface0.9759363.91746
upper surface0.98592213.6999
upper surface0.9953018.27817
upper surface1-93.4709
lower surface9.7595e-050.206238
lower surface8.1813e-04-0.0324149
lower surface0.00223893-0.295079
lower surface0.003269970.236239
lower surface0.004495-0.0275856
lower surface0.007347950.00431335
lower surface0.01089250.0147625
lower surface0.0130394-0.0172116
lower surface0.01537680.0343474
lower surface0.02032680.0387242
lower surface0.02595130.0318193
lower surface0.02918760.0130679
lower surface0.03260830.0348689
lower surface0.03959430.0424812
lower surface0.04722920.0350185
lower surface0.05151470.015909
lower surface0.05597650.0382264
lower surface0.0649120.0506038
lower surface0.07446280.0407491
lower surface0.07974470.0166875
lower surface0.08519240.0425786
lower surface0.09596690.0568876
lower surface0.1073160.0449294
lower surface0.1135280.0179522
lower surface0.1198950.046514
lower surface0.1323750.0622373
lower surface0.1453810.0488684
lower surface0.1524480.0192006
lower surface0.1596540.0502961
lower surface0.1736860.0672666
lower surface0.1881890.0527075
lower surface0.1960220.0204597
lower surface0.2039790.0540961
lower surface0.2193890.0723247
lower surface0.2352090.0566595
lower surface0.2437120.0217406
lower surface0.2523210.0582115
lower surface0.2689180.0772949
lower surface0.285860.0615325
lower surface0.2949280.0255605
lower surface0.3040830.0634801
lower surface0.3216620.0840622
lower surface0.3395160.0661296
lower surface0.3490370.0245595
lower surface0.3586240.0681857
lower surface0.3769680.0917085
lower surface0.3955130.0723299
lower surface0.4053690.0272565
lower surface0.415270.0746973
lower surface0.4341510.100917
lower surface0.4531580.0798356
lower surface0.4632270.0300234
lower surface0.473320.0827948
lower surface0.4925060.112368
lower surface0.511740.0892691
lower surface0.5218970.0335918
lower surface0.5320570.0930774
lower surface0.5513090.127043
lower surface0.5705320.101458
lower surface0.5806520.0382921
lower surface0.5907530.106484
lower surface0.6098350.146363
lower surface0.6288090.117637
lower surface0.6387670.0446268
lower surface0.6486840.124457
lower surface0.6673580.172567
lower surface0.6858490.139793
lower surface0.6955210.0534152
lower surface0.7051320.149369
lower surface0.7231680.209438
lower surface0.7409470.171353
lower surface0.7502140.0661046
lower surface0.7593990.185426
lower surface0.7765750.263934
lower surface0.7934220.218776
lower surface0.8021690.0855018
lower surface0.8108150.240832
lower surface0.8269170.350344
lower surface0.8426240.295775
lower surface0.8507430.117775
lower surface0.8587440.333695
lower surface0.8735730.502996
lower surface0.8879460.436936
lower surface0.8953370.182496
lower surface0.9025920.504675
lower surface0.9159660.834203
lower surface0.9288260.774111
lower surface0.9353970.109626
lower surface0.9418181.40596
lower surface0.953571.33061
lower surface0.9647590.609569
lower surface0.9704294.57968
lower surface0.9759361.01182
lower surface0.98592216.1325
lower surface0.99530115.24

gyre 0.4.0 · 39979fcf90 · · gpu · NVIDIA GeForce RTX 3060 Ti · quick suite · record (JSON)Same code as this build

One adjoint solve returns dcl/dx\mathrm dc_l/\mathrm d\mathbf x for every surface geometry node. The chart shows its vertical component along the chord: where pushing the surface up raises the lift, and by how much. A geometry parameterisation maps design variables to node displacements and contracts them with this field (MDO integration).

Lift responds strongly to changes of the effective camber line near the trailing edge (the Kutta condition) and to the nose shape. Individual node sensitivities also scale with the surface area a node represents, so their magnitude follows the node clustering; a smooth parameterisation integrates over this.

    ↑ ↓ moveEnter open[ ] change depthResults show section and depth level