{"id": "rans_linearization", "title": "Exact linearization with the Spalart-Allmaras model", "description": "Jacobian-vector products of the weak RANS-SA residual from automatic differentiation against central differences (best of three step sizes), the dot-product identity of tangent and adjoint products, the element-diagonal blocks from the split-argument residual against the dense Jacobian (2-D), and the derivative with respect to the geometry nodes, which includes the wall distance. States are random perturbations of the free stream with nu_tilde / nu between -2 and 12, so both branches of the model and its limiters are differentiated; every boundary-condition type appears.", "passed": true, "checks": [{"name": "2-D ring, adiabatic wall, far field: JVP vs central difference", "value": 4.1315409535940337e-10, "expected": "< 1e-6", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: JVP vs central difference, turbulence row", "value": 3.949478398113018e-09, "expected": "< 1e-6", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: <v,Ju> = <J^T v,u>", "value": 7.507679570726406e-15, "expected": "< 1e-12", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: shape derivative of the residual vs central difference", "value": 1.6639847856584986e-10, "expected": "< 1e-6", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: derivative of the wall distance w.r.t. the nodes", "value": 1.4455775157547815e-09, "expected": "< 1e-6", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: share of nodes on the negative branch", "value": 0.17592592537403107, "expected": "0.05 .. 0.5", "passed": true}, {"name": "2-D ring, adiabatic wall, far field: block inverse times dense diagonal block", "value": 9.064970996064403e-14, "expected": "< 1e-8", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: JVP vs central difference", "value": 2.0567419998209213e-10, "expected": "< 1e-6", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: JVP vs central difference, turbulence row", "value": 1.3754137493909976e-09, "expected": "< 1e-6", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: <v,Ju> = <J^T v,u>", "value": 2.32908370113877e-14, "expected": "< 1e-12", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: shape derivative of the residual vs central difference", "value": 7.913224020559401e-11, "expected": "< 1e-6", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: derivative of the wall distance w.r.t. the nodes", "value": 3.7333892270730814e-10, "expected": "< 1e-6", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: share of nodes on the negative branch", "value": 0.20987653732299805, "expected": "0.05 .. 0.5", "passed": true}, {"name": "2-D channel: isothermal wall, inlet, outlet, slip wall: block inverse times dense diagonal block", "value": 8.233413950620161e-13, "expected": "< 1e-8", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: JVP vs central difference", "value": 2.655712840619273e-10, "expected": "< 1e-6", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: JVP vs central difference, turbulence row", "value": 6.480371071333575e-09, "expected": "< 1e-6", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: <v,Ju> = <J^T v,u>", "value": 1.768526525809031e-14, "expected": "< 1e-12", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: shape derivative of the residual vs central difference", "value": 6.763081440164954e-11, "expected": "< 1e-6", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: derivative of the wall distance w.r.t. the nodes", "value": 4.206887529908919e-10, "expected": "< 1e-6", "passed": true}, {"name": "3-D box: adiabatic wall, far field, symmetry: share of nodes on the negative branch", "value": 0.12962962687015533, "expected": "0.05 .. 0.5", "passed": true}], "charts": [], "tables": [{"id": "defects", "title": "Relative defects", "columns": ["configuration", "p", "DOF", "negative nu_tilde share", "JVP - FD", "JVP - FD (turbulence row)", "dot product", "block inverse", "shape derivative", "wall distance"], "rows": [["2-D ring, adiabatic wall, far field", 2, 540, 0.17592592537403107, 4.1315409535940337e-10, 3.949478398113018e-09, 7.507679570726406e-15, 9.064970996064403e-14, 1.6639847856584986e-10, 1.4455775157547815e-09], ["2-D channel: isothermal wall, inlet, outlet, slip wall", 2, 405, 0.20987653732299805, 2.0567419998209213e-10, 1.3754137493909976e-09, 2.32908370113877e-14, 8.233413950620161e-13, 7.913224020559401e-11, 3.7333892270730814e-10], ["3-D box: adiabatic wall, far field, symmetry", 2, 1296, 0.12962962687015533, 2.655712840619273e-10, 6.480371071333575e-09, 1.768526525809031e-14, null, 6.763081440164954e-11, 4.206887529908919e-10]]}], "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:40:59-0500"}, "wall_time": 158.63, "level": "quick"}