{"id": "rans_flat_plate", "title": "Turbulent flat plate (NASA TMR) with the Spalart-Allmaras model", "description": "Zero-pressure-gradient turbulent flat plate of the NASA Turbulence Modeling Resource (2D Zero Pressure Gradient Flat Plate Verification Case: M = 0.2, Re = 5e6 per unit length, plate from x = 0 to 2, symmetry upstream to x = -0.33, far field at y = 1, total-pressure inflow, pressure outflow, adiabatic wall, free-stream nu_tilde = 3 nu). Each run starts from the uniform free stream and is converged nine orders by the pseudo-transient Newton-Krylov solver. The skin friction, taken from the numerical wall flux of the residual, is compared with the TMR's SA results on its finest grid (545 x 385 points; file FlatPlate/SA/cf_plate.dat, mean of CFL3D and FUN3D, which differ by less than 0.1 % at the stations used; at x = 0.97008 their grid-converged value is cf = 2.705513e-03). The meshes here are far coarser: the coarse mesh has 15 x 10 elements with a first element height of 5e-05. The comparison is with the reference model implementation (standard SA with the ft2 term; this code solves SA-neg, identical for positive nu_tilde), not with experiment.", "passed": true, "checks": [{"name": "coarse mesh, p = 1: converged from the free stream (residual drop)", "value": 8.213497050985845e-10, "expected": "<= 1e-9", "passed": true}, {"name": "coarse mesh, p = 1: Newton steps", "value": 33, "expected": "<= 100 (cap 150)", "passed": true}, {"name": "coarse mesh, p = 2: converged from the free stream (residual drop)", "value": 2.3070937687619568e-11, "expected": "<= 1e-9", "passed": true}, {"name": "coarse mesh, p = 2: Newton steps", "value": 34, "expected": "<= 100 (cap 150)", "passed": true}, {"name": "p = 2: |cf / cf_TMR - 1| at x = 0.97", "value": 0.001656488140430401, "expected": "< 0.02", "passed": true}, {"name": "p = 2: largest |cf / cf_TMR - 1| over the stations x >= 0.5", "value": 0.02152809759672536, "expected": "< 0.04", "passed": true}, {"name": "p = 1: largest |cf / cf_TMR - 1| over the stations x >= 0.5", "value": 0.09988503127667814, "expected": "< 0.15", "passed": true}, {"name": "raising the degree from 1 to 2 reduces the largest difference (ratio)", "value": 0.2155287666386494, "expected": "< 0.5", "passed": true}], "charts": [{"id": "cf", "type": "line", "title": "Skin friction along the plate", "xlabel": "x", "ylabel": "cf", "xscale": "linear", "yscale": "linear", "series": [{"name": "coarse mesh, p = 1", "x": [0.020000000000000007, 0.020000000000000007, 0.04694193829722067, 0.04694193829722067, 0.08323534025778292, 0.08323534025778292, 0.1321260700686677, 0.1321260700686677, 0.19798662136221493, 0.19798662136221493, 0.2867071668207992, 0.2867071668207992, 0.40622233989284606, 0.40622233989284606, 0.5672208608172828, 0.5672208608172828, 0.7841014716517811, 0.7841014716517811, 1.0762606734001097, 1.0762606734001097, 1.4698274327235454, 1.4698274327235454, 2.0], "y": [0.004915916380752995, 0.004992579333040328, 0.004735300558088556, 0.004475340631205438, 0.004529396901224182, 0.00422098172136677, 0.004104477833819136, 0.0038437606745485367, 0.003927413056652631, 0.003716802908176072, 0.003690033017497759, 0.0035561646604622874, 0.0033430019853315078, 0.0032536412833734083, 0.003164716616491181, 0.003076475013048809, 0.0030913937264541312, 0.0030304685073821846, 0.0029372676146404444, 0.0029162366139381954, 0.0027347596701999856, 0.002711523981941299, 0.002659497260392554]}, {"name": "coarse mesh, p = 2", "x": [0.020000000000000007, 0.020000000000000007, 0.033470969148610336, 0.04694193829722067, 0.04694193829722067, 0.0650886392775018, 0.08323534025778292, 0.08323534025778292, 0.10768070516322531, 0.1321260700686677, 0.1321260700686677, 0.1650563457154413, 0.19798662136221493, 0.19798662136221493, 0.24234689409150706, 0.2867071668207992, 0.2867071668207992, 0.34646475335682264, 0.40622233989284606, 0.40622233989284606, 0.48672160035506445, 0.5672208608172828, 0.5672208608172828, 0.675661166234532, 0.7841014716517811, 0.7841014716517811, 0.9301810725259454, 1.0762606734001097, 1.0762606734001097, 1.2730440530618274, 1.4698274327235454, 1.4698274327235454, 1.7349137163617727, 2.0], "y": [0.0045236202076417925, 0.0045728154738977345, 0.004294051556712991, 0.004104782502898212, 0.004106667788455472, 0.0038572455124852426, 0.0036719305109318896, 0.0036690996073102367, 0.0035935774844831846, 0.0035258417781989216, 0.0035244499001149373, 0.0034763713140167005, 0.0033919554937261328, 0.0033956791040893382, 0.0032745722213417443, 0.003165699164073966, 0.0031628002650710657, 0.003097340386673097, 0.003037151445916332, 0.0030369201796558083, 0.0029973705024262647, 0.002947543708016708, 0.0029470184354574453, 0.002889626632796605, 0.0028059345661869957, 0.0028098028905565045, 0.002720649796262073, 0.0026587250685539206, 0.002655454233995593, 0.0026152789805026274, 0.002574467084020404, 0.002574040007920259, 0.0025430582388163603, 0.0025022579590636353]}, {"name": "NASA TMR, SA, CFL3D 545 x 385", "x": [0.100572534, 0.199971035, 0.299841315, 0.501510203, 0.747280836, 0.970084071, 1.24822676, 1.49523795, 1.75298882, 1.90334344], "y": [0.00379175856, 0.00341812591, 0.00321455277, 0.00297689508, 0.00280851778, 0.00270562153, 0.00261127716, 0.00254679285, 0.00249254913, 0.00246638129]}]}, {"id": "history", "type": "line", "title": "Residual history (weighted norm, relative to the free stream)", "xlabel": "Newton step", "ylabel": "|R| / |R0|", "xscale": "linear", "yscale": "log", "series": [{"name": "coarse mesh, p = 1", "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "y": [1.0, 4.895729500961366, 5.412465775637531, 2.233548751832233, 0.3369755236290293, 0.17188122593030564, 0.1407679157275582, 0.10332932941211063, 0.07037210898850002, 0.0457075287885182, 0.0326525904566935, 0.027903338069574995, 0.023609242888808196, 0.023093133137380588, 0.014997884432134416, 0.016656813728281546, 0.014675532053707724, 0.011399250675376045, 0.01065568779263313, 0.012861938030417151, 0.01197417282016184, 0.014963673042653163, 0.020696323465908568, 0.018107455737773514, 0.019695716216116155, 0.011018366224804914, 0.004416071608331876, 0.0009970858934326824, 9.720431724477212e-05, 8.283774602817298e-06, 5.140489964860987e-07, 6.424014698888852e-08, 5.813466908551783e-09, 8.213497050985845e-10]}, {"name": "coarse mesh, p = 2", "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34], "y": [1.0, 6.256442521341552, 3.4104842332131993, 0.48843066148656045, 0.5801431921326736, 0.3923947230048157, 0.20935939433682654, 0.10034844548465584, 0.049958449216061455, 0.03507564631253884, 0.026974325617331762, 0.023995980688058634, 0.024478581783978975, 0.018596256914091395, 0.015645962831931728, 0.012673714270150214, 0.009597846761362695, 0.00884859640881179, 0.008280782227356629, 0.009370680590150011, 0.010798410041973516, 0.012576785144910703, 0.01809374799327251, 0.01595374246806668, 0.01671724549215995, 0.01377781843184852, 0.01578684403568538, 0.01048568279821181, 0.005167967337996325, 0.0019146627702179154, 0.0003009523702750304, 1.2302858312562522e-05, 2.1420655104463625e-07, 2.600555194341397e-09, 2.3070937687619568e-11]}]}], "tables": [{"id": "runs", "title": "Runs", "columns": ["run", "elements", "unknowns", "y+ of the first node off the wall (x = 0.97)", "Newton steps", "residual drop", "cf(x = 0.97)", "difference to TMR at x = 0.97 [%]", "largest difference, x >= 0.5 [%]", "cd (one wetted side, reference length 1)", "max nu_tilde / nu", "min nu_tilde / nu", "nodes with nu_tilde < 0 [%]"], "rows": [["coarse mesh, p = 1", 150, 3000, 9.635771110607113, 33, 8.213497050985845e-10, 0.0029711387166723407, 9.817937526933784, 9.988503127667814, 0.006284664222168392, 327.1409329970377, -3.1649921539565544, 0.16666666666666669], ["coarse mesh, p = 2", 150, 6750, 4.593670473438838, 34, 2.3070937687619568e-11, 0.002701031477573606, -0.1656488140430401, 2.152809759672536, 0.005753647480878753, 386.719784977436, -42.550942177171784, 1.5555555555555556]]}, {"id": "stations", "title": "Skin friction at the TMR stations", "columns": ["run", "x", "cf", "cf TMR", "difference [%]"], "rows": [["coarse mesh, p = 1", 0.100572534, 0.004179668153785597, 0.003790091175, 10.278828682415453], ["coarse mesh, p = 1", 0.199971035, 0.0037162041456699417, 0.0034171950535, 8.750132418214962], ["coarse mesh, p = 1", 0.299841315, 0.0035327390979209127, 0.0032139607145, 9.918552581639295], ["coarse mesh, p = 1", 0.501510203, 0.0032010107285330948, 0.002976590246, 7.539515485367021], ["coarse mesh, p = 1", 0.747280836, 0.003088860920462037, 0.0028083489024999997, 9.988503127667814], ["coarse mesh, p = 1", 0.970084071, 0.0029711387166723407, 0.002705513128, 9.817937526279884], ["coarse mesh, p = 1", 1.24822676, 0.0028369416046838147, 0.002611203244, 8.644993881748352], ["coarse mesh, p = 1", 1.49523795, 0.002709030405343131, 0.0025466942295, 6.374388175961054], ["coarse mesh, p = 1", 1.75298882, 0.0026837368809887394, 0.002492215551, 7.684781916712291], ["coarse mesh, p = 1", 1.90334344, 0.002668982330430811, 0.002465200936, 8.266319854699699], ["coarse mesh, p = 2", 0.100572534, 0.0036147347654116825, 0.003790091175, -4.626706891512111], ["coarse mesh, p = 2", 0.199971035, 0.0033900001121445625, 0.0034171950535, -0.7958264286840655], ["coarse mesh, p = 2", 0.299841315, 0.003147960870369191, 0.0032139607145, -2.053536119251431], ["coarse mesh, p = 2", 0.501510203, 0.00298898735522346, 0.002976590246, 0.41648692627811457], ["coarse mesh, p = 2", 0.747280836, 0.002837300981807196, 0.0028083489024999997, 1.0309288593530086], ["coarse mesh, p = 2", 0.970084071, 0.002701031477573606, 0.002705513128, -0.16564881463749792], ["coarse mesh, p = 2", 1.24822676, 0.0026203807560079753, 0.002611203244, 0.35146678180117963], ["coarse mesh, p = 2", 1.49523795, 0.002571495651550001, 0.0025466942295, 0.9738672889234135], ["coarse mesh, p = 2", 1.75298882, 0.002540588158286396, 0.002492215551, 1.940947975667151], ["coarse mesh, p = 2", 1.90334344, 0.002518272022345747, 0.002465200936, 2.152809759672536]]}], "provenance": {"version": "0.4.0", "commit": "39979fcf902ad6116eb550b881b4278d4599c8e2", "dirty": false, "describe": "39979fcf90", "device": {"platform": "cpu", "device": "cpu:0", "device_kind": "cpu", "jax": "0.11.2", "x64": true}, "timestamp": "2026-11-12T11:36:05-0500"}, "wall_time": 162.14, "notes": "The leading-edge region (x < 0.3) is the least resolved: the first element on the plate is 0.02 long. Negative nu_tilde occurs at the edge of the boundary layer, where the negative branch of the model takes over; it is reported, not clipped. Not covered: a mesh-converged result, the velocity profile in wall units, other Reynolds numbers.", "level": "quick"}