Gyredocs
Depth Practice
API

Gyre/Examples

Transonic aerofoil

In one minuteA flow with shocks — NACA 0012 at Mach 0.8 — computed with sensor-based shock capturing, converged to machine precision, with adjoint derivatives taken through the shock.

Written at L2 Practice goes to L3 Mechanics 530 words Markdown
Mach number: supersonic pocket and shock on the upper surfacePart of the domain: window x ∈ [-1, 2.5], y ∈ [-1.5, 1.5] · the 608 mesh elements that reach into it · 6×6 points each

Fields: mach [0.07793, 1.388], pressure [0.5431, 1.693], density [0.5982, 1.347], entropy [1.113, 1.139]. Raw sample (JSON)

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

PassedExample: transonic aerofoil with shock capturing9 of 9 checks passed · 151.8 s · quick suite

NACA 0012 at Mach 0.8 and 1.25 degrees (64 x 16 curved elements, p = 2). A modal smoothness sensor switches on a Laplacian artificial viscosity in the few elements that contain the shocks; the term is part of the differentiated residual, so Newton convergence and adjoint derivatives remain exact. Grid-converged Euler values in the literature are about cl = 0.356 and cd = 0.0226 (Vassberg & Jameson 2010).

  • converged ten orders (final / reference residual)3.91e-12expected <= 1e-10pass
  • lift coefficient0.3505expected 0.33 … 0.37pass
  • drag coefficient (wave drag)0.02266expected 0.020 … 0.026pass
  • upper-surface shock position x/c0.6351expected 0.55 … 0.70pass
  • fraction of elements with artificial viscosity0.01367expected < 0.05pass
  • dcl/dalpha: adjoint vs finite difference (rel.)1.46e-06expected < 1e-4pass
  • dcd/dalpha: adjoint vs finite difference (rel.)9.92e-07expected < 1e-4pass
  • dcl/dmach: adjoint vs finite difference (rel.)9.94e-06expected < 1e-4pass
  • dcd/dmach: adjoint vs finite difference (rel.)3.75e-06expected < 1e-4pass

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

bash
gyre run naca0012_transonic --gradients --of cl,cd --wrt alpha,mach
OutputsExample: transonic aerofoil with shock capturing
clcdcmshock x/c (upper)elements with viscosityelementsNewton stepsfield
0.3505050.0226564-0.03917130.635144141024241example_transonic/field.json

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

Surface pressure coefficientExample: transonic aerofoil with shock capturing

The steepest pressure rise on the upper surface, taken as the shock position, is at x/c = 0.635; artificial viscosity is active in 14 of 1024 elements.

Data table
seriesx / c−cp
upper surface0-1.14242
upper surface0-1.13927
upper surface4.6025e-04-1.00218
upper surface0.00184019-0.743683
upper surface0.00184019-0.74744
upper surface0.00413742-0.472504
upper surface0.00734795-0.211989
upper surface0.00734795-0.213274
upper surface0.0114662-0.0154692
upper surface0.0164850.142596
upper surface0.0164850.142536
upper surface0.02239550.262353
upper surface0.02918760.360334
upper surface0.02918760.362525
upper surface0.03684940.444786
upper surface0.04536750.509734
upper surface0.04536750.514657
upper surface0.05472720.575018
upper surface0.0649120.61994
upper surface0.0649120.620288
upper surface0.07590440.671547
upper surface0.08768520.707748
upper surface0.08768520.710442
upper surface0.1002340.749155
upper surface0.1135280.782848
upper surface0.1135280.781682
upper surface0.1275460.812912
upper surface0.1422620.842223
upper surface0.1422620.843128
upper surface0.1576510.868708
upper surface0.1736860.892855
upper surface0.1736860.892836
upper surface0.1903390.91646
upper surface0.2075810.937747
upper surface0.2075810.937682
upper surface0.2253830.957094
upper surface0.2437120.975768
upper surface0.2437120.975984
upper surface0.2625380.992678
upper surface0.2818281.00856
upper surface0.2818281.00852
upper surface0.3015471.02275
upper surface0.3216621.03671
upper surface0.3216621.03662
upper surface0.3421381.04855
upper surface0.3629381.06017
upper surface0.3629381.06018
upper surface0.3840271.06999
upper surface0.4053691.07978
upper surface0.4053691.0798
upper surface0.4269251.08768
upper surface0.4486581.09565
upper surface0.4486581.09564
upper surface0.4705311.10189
upper surface0.4925061.10836
upper surface0.4925061.10834
upper surface0.5145441.11325
upper surface0.5366061.11643
upper surface0.5366061.11845
upper surface0.5586551.12358
upper surface0.5806521.12144
upper surface0.5806521.0896
upper surface0.6025591.13782
upper surface0.6243380.964188
upper surface0.6243381.00437
upper surface0.645950.348197
upper surface0.6673580.0374079
upper surface0.6673580.0225913
upper surface0.688525-0.00161975
upper surface0.7094150.00248815
upper surface0.7094150.0145202
upper surface0.729989-0.00438986
upper surface0.750214-0.0109104
upper surface0.750214-0.0113633
upper surface0.770053-0.0198993
upper surface0.789473-0.0298945
upper surface0.789473-0.0301384
upper surface0.808438-0.0419645
upper surface0.826917-0.0552989
upper surface0.826917-0.0550638
upper surface0.844878-0.0701114
upper surface0.862287-0.0861075
upper surface0.862287-0.0863482
upper surface0.879117-0.104118
upper surface0.895337-0.123219
upper surface0.895337-0.123489
upper surface0.910918-0.144664
upper surface0.925835-0.167773
upper surface0.925835-0.16815
upper surface0.940061-0.194131
upper surface0.95357-0.222816
upper surface0.95357-0.224022
upper surface0.966341-0.260581
upper surface0.978349-0.282237
upper surface0.978349-0.304111
upper surface0.989576-0.394981
upper surface1-0.382057
upper surface1-0.369955
lower surface4.6025e-04-1.14422
lower surface0.00184019-1.03021
lower surface0.00184019-1.02871
lower surface0.00413742-0.853082
lower surface0.00734795-0.648158
lower surface0.00734795-0.643626
lower surface0.0114662-0.464575
lower surface0.016485-0.308144
lower surface0.016485-0.308101
lower surface0.0223955-0.181712
lower surface0.0291876-0.0757346
lower surface0.0291876-0.0749143
lower surface0.03684940.0163357
lower surface0.04536750.0942746
lower surface0.04536750.0923074
lower surface0.05472720.162935
lower surface0.0649120.220438
lower surface0.0649120.222682
lower surface0.07590440.27616
lower surface0.08768520.321465
lower surface0.08768520.32379
lower surface0.1002340.366744
lower surface0.1135280.403296
lower surface0.1135280.405532
lower surface0.1275460.440823
lower surface0.1422620.472138
lower surface0.1422620.470314
lower surface0.1576510.501959
lower surface0.1736860.525186
lower surface0.1736860.525322
lower surface0.1903390.550865
lower surface0.2075810.570657
lower surface0.2075810.569745
lower surface0.2253830.588866
lower surface0.2437120.603522
lower surface0.2437120.602144
lower surface0.2625380.614721
lower surface0.2818280.623746
lower surface0.2818280.62297
lower surface0.3015470.623416
lower surface0.3216620.620774
lower surface0.3216620.710491
lower surface0.3421380.483028
lower surface0.3629380.275011
lower surface0.3629380.397557
lower surface0.3840270.412834
lower surface0.4053690.377224
lower surface0.4053690.387281
lower surface0.4269250.368834
lower surface0.4486580.344814
lower surface0.4486580.345063
lower surface0.4705310.322778
lower surface0.4925060.301512
lower surface0.4925060.300384
lower surface0.5145440.278683
lower surface0.5366060.258265
lower surface0.5366060.257268
lower surface0.5586550.236503
lower surface0.5806520.216059
lower surface0.5806520.216862
lower surface0.6025590.196161
lower surface0.6243380.177214
lower surface0.6243380.176565
lower surface0.645950.157367
lower surface0.6673580.13893
lower surface0.6673580.138402
lower surface0.6885250.119671
lower surface0.7094150.1015
lower surface0.7094150.101066
lower surface0.7299890.0825124
lower surface0.7502140.0639475
lower surface0.7502140.064313
lower surface0.7700530.0452341
lower surface0.7894730.0266585
lower surface0.7894730.0263387
lower surface0.8084380.00706865
lower surface0.826917-0.012303
lower surface0.826917-0.012596
lower surface0.844878-0.0329059
lower surface0.862287-0.0536138
lower surface0.862287-0.0538947
lower surface0.879117-0.0758855
lower surface0.895337-0.099004
lower surface0.895337-0.0987065
lower surface0.910918-0.123621
lower surface0.925835-0.149886
lower surface0.925835-0.150305
lower surface0.940061-0.179302
lower surface0.95357-0.212216
lower surface0.95357-0.2111
lower surface0.966341-0.251921
lower surface0.978349-0.299553
lower surface0.978349-0.278848
lower surface0.989576-0.394024

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

  • The flow accelerates to supersonic speed over the upper surface and returns to subsonic through a shock; a weaker shock sits on the lower surface.
  • The drag is no longer discretization error: it is wave drag, the entropy produced at the shocks.
  • Artificial viscosity is active in a handful of elements only (table), all of them at the shocks.
Residual historyExample: transonic aerofoil with shock capturing
Data table
nonlinear iterationNewton–Krylov with shock capturing
00.110587
10.0890237
20.0813721
30.092591
40.105478
50.0803532
60.0782326
70.0689902
80.0490661
90.0454177
100.040828
110.0401599
120.0328538
130.0276924
140.0232838
150.0188651
160.0148211
170.0136987
180.0134052
190.0129874
200.0125655
210.0123842
220.0122759
230.0122759
240.0154024
250.0139276
260.0152893
270.0136262
280.0126549
290.0117029
300.0109534
310.0120913
320.0121889
330.0126419
340.0125416
350.0124695
360.0126256
370.0135144
380.013355
390.0124981
400.0121946
410.0110878
420.0104739
430.010384
440.00920111
450.00920111
460.00883254
470.00920063
480.00863557
490.00870549
500.00866848
510.010819
520.010663
530.0117457
540.0104575
550.0104438
560.0102718
570.00850319
580.00784117
590.0079276
600.00758647
610.00710062
620.00683413
630.00703958
640.00649415
650.0064452
660.0062825
670.00587653
680.00580637
690.00561788
700.00561383
710.00536749
720.00537158
730.00553277
740.00585036
750.00562912
760.00556387
770.00478094
780.00459435
790.00436704
800.00409114
810.00418673
820.00444569
830.00421266
840.0039887
850.00409591
860.0036014
870.00355465
880.00355465
890.00356821
900.00356821
910.0033036
920.0031954
930.00316502
940.00310558
950.00307805
960.00314347
970.00284761
980.0026144
990.00256673
1000.00335049
1010.00262688
1020.00261189
1030.00288863
1040.00205057
1050.00186011
1060.0017337
1070.00168776
1080.00155837
1090.00154127
1100.00144354
1110.00134174
1120.00132074
1130.00130244
1140.00118278
1150.00102349
1160.00105492
1170.00105492
1186.2973e-04
1196.1938e-04
1206.2034e-04
1216.3992e-04
1226.3179e-04
1237.2951e-04
1247.5382e-04
1257.1353e-04
1267.2752e-04
1278.2668e-04
1287.2619e-04
1297.1026e-04
1307.2259e-04
1316.4097e-04
1327.5387e-04
1336.9364e-04
1346.8865e-04
1357.4152e-04
1367.4152e-04
1375.3823e-04
1385.3001e-04
1397.3525e-04
1404.8061e-04
1413.8772e-04
1423.6271e-04
1433.5082e-04
1444.2199e-04
1454.2199e-04
1464.7502e-04
1476.6432e-04
1487.7544e-04
1497.6439e-04
1508.0676e-04
1518.0676e-04
1526.4301e-04
1536.5238e-04
1546.8383e-04
1557.5970e-04
1568.5673e-04
1579.1132e-04
1588.9144e-04
1599.1969e-04
1600.00100478
1610.00109327
1629.6745e-04
1637.8414e-04
1648.2272e-04
1658.5105e-04
1668.5352e-04
1678.5704e-04
1688.6035e-04
1698.6174e-04
1708.6019e-04
1718.9958e-04
1729.1786e-04
1739.2623e-04
1749.3299e-04
1759.4148e-04
1769.5196e-04
1779.6407e-04
1789.7865e-04
1799.9906e-04
1800.00102956
1810.00101489
1820.00100204
1839.9070e-04
1849.8040e-04
1859.7061e-04
1869.6081e-04
1879.5055e-04
1889.3950e-04
1899.7379e-04
1909.8907e-04
1919.8655e-04
1929.6961e-04
1939.4404e-04
1949.6155e-04
1959.8801e-04
1969.3551e-04
1979.0139e-04
1988.9220e-04
1998.4012e-04

First 200 of 242 rows; the study JSON holds all of them.

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

The residual first wanders while the shock finds its position — the line search shortens many steps — then falls step by step to ten orders below its reference, which the study checks. The solver is an inexact Newton iteration with a fixed linear tolerance, so that last phase is linear, not quadratic. It is possible because the sensor and the viscosity are part of the Jacobian (shock capturing).

Derivatives through the shock#

Adjoint derivatives through the shockExample: transonic aerofoil with shock capturing
derivativeadjointfinite differencerelative difference
dcl/dalpha17.621917.62191.4558e-06
dcd/dalpha1.314591.314599.9160e-07
dcl/dmach4.469924.469889.9365e-06
dcd/dmach0.6887270.6887253.7501e-06

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

Shock position moves with angle of attack and Mach number, and wave drag depends on it strongly; a gradient that ignores the dependence of the shock-capturing term on the solution is wrong exactly where a transonic optimizer needs it. The table compares the adjoint derivatives with central differences of fully re-converged flows.

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