From 63be4ffa28bc372fa32a228f7cf006ba5a9d0cc3 Mon Sep 17 00:00:00 2001 From: Loic Gouarin Date: Sat, 12 Sep 2026 14:55:42 +0200 Subject: [PATCH 1/8] Fix the pressure of quadrant 3 in Riemann configuration 3 The quadrant carried p = 0.29; Lax & Liu, the article this repository reproduces (eq. 4) and its reference implementation all give 0.029. It is the low density, low pressure quadrant that drives the whole diagonal structure of the case, and the case is the one the paper measures its performance on, so the figures were not comparable. The reference fields of riemann2d_config3 move with it, for the three schemes. --- euler/init/riemann_2d.hpp | 7 +++---- .../euler_2d_riemann2d_config3_hll.npz | Bin 5581 -> 4623 bytes .../euler_2d_riemann2d_config3_hllc.npz | Bin 5583 -> 4607 bytes .../euler_2d_riemann2d_config3_rusanov.npz | Bin 6198 -> 5347 bytes 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/euler/init/riemann_2d.hpp b/euler/init/riemann_2d.hpp index 35f0948..d06216d 100644 --- a/euler/init/riemann_2d.hpp +++ b/euler/init/riemann_2d.hpp @@ -24,9 +24,8 @@ // q[0] : x >= x0, y >= y0 q[1] : x < x0, y >= y0 // q[2] : x < x0, y < y0 q[3] : x >= x0, y < y0 // -// TODO (lot 2) the interface should sit at x0 = y0 = 0.8, and configuration 3 -// has p = 0.029 in quadrant 3, not 0.29. Both are corrected in their own commit -// so that this one stays behaviour preserving. +// TODO (lot 2) the interface should sit at x0 = y0 = 0.8, not 0.5. Corrected in +// its own commit, so that this one stays behaviour preserving. // ============================================================================= namespace test_case::riemann_2d @@ -82,7 +81,7 @@ namespace test_case::riemann_2d 0.5, {PrimState<2>{1.5, 1.5, {0., 0.}}, PrimState<2>{0.5323, 0.3, {1.206, 0.}}, - PrimState<2>{0.138, 0.29, {1.206, 1.206}}, + PrimState<2>{0.138, 0.029, {1.206, 1.206}}, PrimState<2>{0.5323, 0.3, {0., 1.206}}} }; diff --git a/tests/reference/euler_2d_riemann2d_config3_hll.npz b/tests/reference/euler_2d_riemann2d_config3_hll.npz index 5ba167f13372afef7ff19c09a5150bbfe2398fdd..99f314cf9991c2e4b8f7458fc5258fd687d39243 100644 GIT binary patch delta 2076 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 Yh;m1dx6XeV;Hyfg(a=@o?%zrH4`&fMd;kCd delta 3042 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 diff --git a/tests/reference/euler_2d_riemann2d_config3_hllc.npz b/tests/reference/euler_2d_riemann2d_config3_hllc.npz index 06c6023b5e1fc3b69158dd1c201e98380556a765..91f306438ce36e38c1c6adab36d6e1c9869e62dc 100644 GIT binary patch delta 2058 zcmb`IdpOi-8^^_poQbBGi%JdUFe1E;qs=Ljl!|Dk5mA=OsWHM&2{~KC$ax(q8S4;g z5iV>Yr-m4YF+xPf$e0;3V`koLmwm5y_mB7eW1s7Oo*Ls|m$+6nO= zimP+Hv1D;IKwMbpkCndyT2_(k?K%JU{I5lsR|`DL1E2g7h`m`-UG_^64&izs>oKSp zk(DW-fOhOZc1|=2zP!Z`tl8^oh3tsBqqF@wOz6C$$PYT-s1X0Q4++Hx zW@NBxQb&M2|0pW%I6X_UQwVj*#w^zVDbAU_cZn;LAi=5xuKi}QE+X36WjT-cfTwLhu^�fAb9# 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 ap(8FmqS2>1|F7T(#*FfaoXkFRbl|`3Jquj` diff --git a/tests/reference/euler_2d_riemann2d_config3_rusanov.npz b/tests/reference/euler_2d_riemann2d_config3_rusanov.npz index 01f6115155cf80131701b18b8f25b5599c84a6d2..4a2e5c1169cbd5f350320cdb74dd4b480e4ae30b 100644 GIT binary patch delta 2867 zcmZ`*2{hDQA0FFKqP)?F35E2Ec^muvDEpGZD2?rJc`cC*2&KQUOCRe`czSVAa$BU z80cdL{WI1w4vehs@nUlM4GQkrf^B^YO^hV_l(!c2$DF@PmRQ`@euoy9tLcOMIdn{6 zl?~N(F3q;Mu$Vr;$=cCAn)bl+^tbr>i@s zV5f(A_^%EO-t?qqF<;GfUUKa`7UJQaTHH|OsOmZeAIxR5(5mvfaVJD!*@!R)n@ymTA{HuqRNYehDzH4dRk`ny^ zhBE?ZD?IxjpuGj|^jbffmOcf9*@()lI8;^6S4)Lh<04&u*IxA!(OcECd>Sw!*b-VT z1V!2pYL{xrRG6tURlE)KG*tq^_bSZ$>W-e|XqFJhP+y4n)%XGR{jAkbv^VrPeq(4G z__dEOS@#DS4y*_4~&|8Nz2T)YEZPr^=WS>FoE zuh&90Vfy1^nPky*Tg$F1F@MYZF?ZXDV8&gS-QA5ll0v4k zt=mp1XEtSOs>F^Z*+81}d-L6%@c$dXzrbYV?*mNcMl7t-KYN?w=R6DQmXBIt{1wMQ zydYnH7dZT(e`?Dy9-#kU97z9eg#XC_iOlOMYRMr*$9i2=L}kq1ARLQEI8lX98ZVVU zu)OJM=PvolhTs0Fl#Y$pV^sDV51B=A7JElt6&JhvFHRFI-D-v@B+ING_#R6ny8~Gr zrm>%Q3l|ITr|ugb7dBBzA%5tcdxWTaMXYzXMb>q+DdU}uNKdWL_MGWOXI$7YjJy7t&CWz2hO*`0 zNXO;_yYj#yZvTZQ$&HQ$&g^@Aq`6xxEPA*2D1m?oVHA&bWWt6IHM0opz9h)()o3!y zeCkb21B6>K?1?n_{RdkM)3#IP1s4pSo37ViizyE4nFn3TGO%|a%zm6-6$lf?y^Rc} z57k9>={~ldd?~fJca*m|Yo7_mnNzAZGUpD|btLwyJox^aD@6#g$8I*!KGn5gaKS&G zEGm7!h0-;-XmyI{>K#R@N6lsxv#P`mWA#bAoV3! z18d{DEy!_bql8Q^Ik}m!B^wx7W6TE{;up=*0*fCR?zu|zP0$(r)bY})ZPYZm0p`v_ zg2JVad8EEQ@f(oI`j-#90L)WepzZ90q5}PI$FDbJCMWvy4-|{dYCA$9FRi#e3OmB* zVpN(p1ta1se$*)p)ihNu4&zVW)brOvddl39^5{y!UQSnP>{{;cix1?g&b5bONKb<{ zw)N;F^3;_Xpp}ZKZ)?q`(n4EtkG$>fB8`PafY*Fb-ZaTF!txqQCA5X>$s2k zTpA?LnWwxoy;r*rjZ?SD+-%HY;{mokc8};OTID+GdstT$tljW7qZbC~3b~|wzGzc$ z6M|MQe`v>?UcN2#mH$gMya9nmYHce^7|eN$jZ!LcZUt`NTE4IJeO9167&rodlrAYz z7|N_}7f2Qe#vO@InBh`5p9@~Q*x7wK&9qV?bQ(2c=9LL+vIDz11Vm1&;eq1hvPvw)B1i~drz}^wQI2?)ku`jVNjP6!s`x$ci+CYQgnCvk=hKfvNSflHxFR(ivv7;0WpbRFu9`fKOlt9NM=z?OTCrC2-Q9 z2%&I-@Ll4aytchane3N@<{Pq;UGDewNi1Ih=3c zF55F&m!5ram)ZD&TU&8AYr3B~IXQrCG1d%3qEuV?`yaBbdL3CMg)NUCZ3$*?^GP&# z{s+?tT76jaE-x9FXECPG)I4tIU~l1SO9b2Q=!npoMpHg43&pIvxXb7Tt4-hs2*oi= zN@|#CUnB}mmt6H4UXolsjcBW0D>HFBLpuEhU&fuhe)btdrcHZFhO|+;AIuGGENooe zhbL=F?1px}6J3dz6s9C8`_fSKO|TCztVw8JOWMN-{@!q4!FbG4uSpb!&2H-*%yUiA zUjxnmlfA>43Wh|055KQ{%&CbG8R((09~yYL2nclSmxldw4QCqUOdW#=X&s8*p}K`@ k{ddANHwg4g0s|12e0&k+Mr`22TDG4RoU}Swsm5 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 F{|DFHRt^9F From 0de89a23b0fb879a5ecf3181484adbe21c1293fd Mon Sep 17 00:00:00 2001 From: Loic Gouarin Date: Sat, 12 Sep 2026 14:57:18 +0200 Subject: [PATCH 2/8] Place the 2D Riemann interfaces at 0.8 The three configurations split the unit square at x0 = y0 = 0.5. Lax & Liu, and the article this repository reproduces after them, place the interfaces at 0.8 and integrate to t_f = 0.8, so that the waves fill the domain without leaving it. At 0.5 they reach the boundary before t_f and the outflow condition pollutes the solution. The reference fields of the three cases move with it, for the three schemes. --- euler/init/riemann_2d.hpp | 18 ++++++++++-------- .../euler_2d_riemann2d_config12_hll.npz | Bin 5274 -> 5257 bytes .../euler_2d_riemann2d_config12_hllc.npz | Bin 5271 -> 5255 bytes .../euler_2d_riemann2d_config12_rusanov.npz | Bin 5292 -> 5297 bytes .../euler_2d_riemann2d_config3_hll.npz | Bin 4623 -> 4611 bytes .../euler_2d_riemann2d_config3_hllc.npz | Bin 4607 -> 4599 bytes .../euler_2d_riemann2d_config3_rusanov.npz | Bin 5347 -> 5354 bytes .../euler_2d_riemann2d_config4_hll.npz | Bin 6037 -> 6037 bytes .../euler_2d_riemann2d_config4_hllc.npz | Bin 6009 -> 6010 bytes .../euler_2d_riemann2d_config4_rusanov.npz | Bin 6103 -> 6112 bytes 10 files changed, 10 insertions(+), 8 deletions(-) diff --git a/euler/init/riemann_2d.hpp b/euler/init/riemann_2d.hpp index d06216d..15b37a7 100644 --- a/euler/init/riemann_2d.hpp +++ b/euler/init/riemann_2d.hpp @@ -24,8 +24,10 @@ // q[0] : x >= x0, y >= y0 q[1] : x < x0, y >= y0 // q[2] : x < x0, y < y0 q[3] : x >= x0, y < y0 // -// TODO (lot 2) the interface should sit at x0 = y0 = 0.8, not 0.5. Corrected in -// its own commit, so that this one stays behaviour preserving. +// The interfaces sit at x0 = y0 = 0.8 on [0,1]^2, as in Lax & Liu and in the +// article this repository reproduces: with t_f = 0.8 the waves then fill +// the domain without reaching its boundary, where the outflow condition +// would pollute them. // ============================================================================= namespace test_case::riemann_2d @@ -77,8 +79,8 @@ namespace test_case::riemann_2d // --- configuration 3 ----------------------------------------------------- inline const Config config_3{ - 0.5, - 0.5, + 0.8, + 0.8, {PrimState<2>{1.5, 1.5, {0., 0.}}, PrimState<2>{0.5323, 0.3, {1.206, 0.}}, PrimState<2>{0.138, 0.029, {1.206, 1.206}}, @@ -87,8 +89,8 @@ namespace test_case::riemann_2d // --- configuration 4 ----------------------------------------------------- inline const Config config_4{ - 0.5, - 0.5, + 0.8, + 0.8, {PrimState<2>{1.1, 1.1, {0., 0.}}, PrimState<2>{0.5065, 0.35, {0.8939, 0.}}, PrimState<2>{1.1, 1.1, {0.8939, 0.89396}}, @@ -97,8 +99,8 @@ namespace test_case::riemann_2d // --- configuration 12 ---------------------------------------------------- inline const Config config_12{ - 0.5, - 0.5, + 0.8, + 0.8, {PrimState<2>{0.5197, 0.4, {0., 0.}}, PrimState<2>{1., 1., {-0.6259, 0.}}, PrimState<2>{0.8, 1., {-0.6259, -0.6259}}, diff --git a/tests/reference/euler_2d_riemann2d_config12_hll.npz b/tests/reference/euler_2d_riemann2d_config12_hll.npz index 308baff9edb8dba388a15a07683763fe3a7341bb..7bc2a8574e51a4d8aafcdb1943008d1db3c5fca7 100644 GIT binary patch delta 2694 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 biqQ=S!kj_~ZQEKZv{@DS`S^ULx2*pF17TiB diff --git a/tests/reference/euler_2d_riemann2d_config12_hllc.npz b/tests/reference/euler_2d_riemann2d_config12_hllc.npz index d30f604f8741511f35cce6aeb8eb81b85422003e..2f0158c18b0a45eede908c0cffe523bb44013f01 100644 GIT binary patch delta 2735 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 Y^HW~_o$#Dw ze3qz_e&ruBZ{_MA*ay2KgNF-iunx&D8$VnDM-&T?SHHAjbZl7T z{ykfiYH@QvD=cxYB+o3>NU~?q+3*#xEFVZ#U@K9OYQC_8#rBtr2QZzDG)A-CWfHOxZi_F?PU z$dlaZ9u=kbKbT8%Ozs089dDGMSa~>kUGV}Vd)j0<{GP^L81hx>oxtYEa1Db%uaoT| zG!UTPp{8~?A?QIu=x%D|hF2{sy-(FR= zsty#v^|p40sA!9+`G%k!y9>x_P>3i1&L)IEjxI)(FPiSRBFw9szY$%9E4KV-)oBZP z9?ZIxXo+dz_buX$SS^Ie!41CHx%QGH5|*;EJVtA^vSYEWpCj}{Wqo0Mkxyw)JvAqXX}7%Bbk^N4_VM;<*ayhf zk3wQXGSLTapGvF*MZzhL|1vxKCFWwQi_{@V3ZBpg+v42}o}OssL_!koVg2Jd@qzl2 z7d=96G*hkEZ%A7v*RK4=bz+-mzU?iyD{@F2i|ZCR27LG*$Wu=oVIS6ORq`~jo(b_y z4rp)4D@%3vxL8fOFjSdteca&>_bkis#&G=gJojT}2M*L{u3?kYGIR2+E!^A|&W@jv z=s)J!Bs?}0ehWmPbta+^)XilG4Je$y?0{E!pZKJ?6Qq>nwYktlVH#|O0l%7?9x1}GPdv8?4@Hk=uVYRG?knO8G5(Jt8u zs+;kw=A=$%v+g>@C-N6n1SMr}e9^)CJU5?B9V}~-HI%=bF9qz{bn-C>?mDdUYBG(f zr^TmwK96*@JPNX0`*|<1h9=EEv=~33*JruOZ^#2Bo;8ujs%Ivu=gb+Ox;C!vdD6h) z{zA#=m-j^clayO*nt$a+a8;cndtZ>S_lDqRtKyiSw9xCi!Foewp}MS?#d~%woCXO8 zg5zI#;a1mIQ(}-l;YZ{NMXdx|N(g-^;Z5~Xowl3V>zj!9k6B$G${7*RR-A@iM=yL3 zQ2qH6HER-$l3oYRYR*dboMCDVN@A3|1lrEuX0t}OH2xd*LryyVxE|qSKrq+e75yo2 z4HtN*t*yFc>0!G4MLcr6zpvrU{*R9wgQpOC!ld0rgek-N7u6*12vk01{dT4g`d+iC zL-dF5-6KJ%Pv&{8u2-lRXQG#`*(xv%SleRjz^0a2C?*57W-oIY zPqd3h-sD1*ZpwndM`KXO^qs^wrJfUI#pI{pbArdVGVXK@+CaLbdGg~V4w zE|s1q`R1ojEsu6oi@e26#n62(G3n*%wajkTi;>bxlCriUKml9N!-a+P4`are&2i2J z7_kva!KquPr?(Oer-@?*8~$3+08-&AnSN}uDx(Effn(8vM7Jo$|EH2hU!J7WApE>o z?-Vr4?>K?lHLbH&Z!MorcDFXHX}@z(l#t#z&KPD4vm!_P1|ZGeYb^8mp$X<&^_ zC3}I;0eXBTdC?utN-fUjPLKF*I@%aJ z*^scL%Dr(~1KnG;(vk@9((U7gIWylL2|zQx+e){1t-L=~|Cwb3Iu|t8Dl}%P+};zF z{OSQx^U!0y4EcQ#ey0(+H+Uf$hs}8mn zun_sa_c}hU^$GJ-{imZw)~0B+&EmHfs3jN~Ml48^^_-DwN2xidp9)UNc0MwXjv?({HdQUix`X>rq}BhvCtfJd zd&FNUs*~3wiw4+6Fb$i+zF3vz&i78d)brPp>i$Z;4hF#AznkY3`evXW(QeFW7hw`N zlu1Temn6|hf8RVUTai8V@T2d{lvUnIj*mWiH3PZ=tEcrBcyKdi3d_rwEc*@Ai(53l z?Kspv0iQ=fCqAuAU}-^IJ04K$C*l@<8ko`6kB|Ymb~c_l5a<_*opu=`{zyA~S63F2 z^5&;GJ1fwbhl~!ysEll))r>wnD`XWu1_96l3CNxg{c7j4lQ8|W zxt5q2TSGL~nGqVE+tF7-b2SL&?x?GqCc2;qJlzVGF@VmXbj^KQOR8N_^B+b?-jMJsZt_Ke)^KcxhTQ z+M(C%I^`FLX&JX7HpHR3KGH>zDZc`Gat8_u=w3fnQ`p0g%*EO`@qpY~giNAW*hdGU zO?&T@-7WgP0hvixtas=7^vL*T5@p$PT8{$|4lrQ&rD!Xd?k_CUF*a!&gT!4;qK^QRtv@B z@A)=uOE~Hk={Q5Vt^DV38&fsOSJT8a$5X*%e#JT9poC+StR1U68%5m~oW|ag zJlaQnq}8O8chXBm@8j2~4{DniB=ucaQ)S2}hqUMy$HZDMD!H+D^J(cM*=?ktV-q|IzQ6Xr2d~>^AKWK_M9+n=z~{le?Zt00yu6LP{ji$l z2qhy6i0E%}BFcBwxl|H=?d$A3@tl}^PRt^x^w!P0cb7E@wTi`NV{Fjen3)Z8{MMJA z)-$0I(8VA4^WtV!R|{AGxmAC0Eiui`snD$$bRXHOy^_8b?)dVT zqRqGCUjTP+JL2NtwJCRK!LgEJJ8Ffz?4=o~;HCH&3`HAvc0>5{wGl_7Hip@2!C?Emaos=A`&yvDjW}NjobW<@!?Yd z%WaYSp)ecqa!rLtl9Hnz7RfxZNT7kx;?V(AIKGL(HflrRL-8{IOxMO9UNpa=4Nfx@*f#UK5+~im48T%lesZD$l$Cm^PIJPg z2JL^Z7FcSu-K0c@i$oBnLaL|9kwX;yiXNQPOu0_jwT$^A_rr#p-Z=*G(DA1fT@SfL zy?Q^PeH+T5(xNkU-aS^=0<+{ql;)5(C{+$Ls4PIj-~JMZ;+!m=2| z4G=rZL^C3)eN&_-h@BgWqKs)nxf!#4E8Q${dyj?A;?Ir;ysg4l5tp3CUw&8)ZI7;m zQe&|gR@_{^<>llCxS7DV2>IgQf8=IHH$A~5)Bd}(JLavd=?LjW13Zv)XVrCoM%)$V z>a-qF3n85{`KJ~Asi8IFK>h&spG3!ptjwhm`DB4;mcPt8Gu&d-L%cl+5%>8?&K)C* zwa+E7?9S|$PoDGRj^$(_rU=hQg-lBv@A%L`VEtzLP~ZH`O9g{6ixl*%;k}H0YE*eK zVc(WoLhju(+yOw+1JnV+~$pVMv*RvOp#0 zD|a?GhbW^Ag%r6LW4*4j=h7x^{D#vPvQ*gSNx4PK&T8t_x#(8xl&AZ}(>Fv*vvgH}0sXo0eF{nD2A>sV2*+*%`xWMn3 z(u3|Co%M{gd0vxwG#rna3k|;iW)^@qrq9QgvF<(%sybNf$b>vM!ynWhXe{RzTQF=7 zMqxDT|Jwm~=&Z$H#fNRw&s6q$^nqbWJ=nm+w41rBgUh4NyCoGua+V z8;XHP_*O>W(p7`_Op|upcEp*+997dvPCYe=AOGR(5-$lOCBsL<#trw(CpgCm~`p&F;x;*>> zCAm(mY7UV=f4dYYS6~4K=+W~6ad|ZhW_gm96S$19#;^yk9Tq;wCxa+PHX?(8TG=bb z71wgXc+f{waL1E{r>haFi|-xVaGyeAD2*qgwfVQBuq!WlUY3i>T0U7YnkO+QMf6@A zyUxjGB@tL)M2$iwJ$5#2Z4wF=g1_Ya67Hz`39JIO;c&OZUm;2WhFrK-0%-ffZ}a9e zj`f{CFXs%>1+O*to4=aEYB%1q(a0&~ua6>qd!dI~IGem3+GmAW{pEVU;Yhj=3KVMC z-10ck0@AiJBHUcB5kRwRDGNk$EGXLJY3r+Ui9WMAo{=G0e5;hZ4Lxnqh#%k!^S4{*KzN^jEnm6-d8U6V-k|mCtD_%PwRcdpee|NqQvMfLB3@H#b{5xemR{BE zs;wK7JR(XH>_ROjcP^>Ic-Ml1i}IU!DHM)|o?&qlM5`#BhN#3#J;oU1Z8uU@mY;X> z{N7pzY@)F<%pMDN)ntB#JiSrWQ5SCK5{Tk-r(%G)HXkz=DxbmHxnML7DnamC@-sk* zQ35r3h8<196L)pE!;Fb;=3V}3j&t~8Oo&y&xH35TKF_&(KX6^Ssmh#XyVT z|BU|5ofah+#d?@c)~B%xowm_SWrM;1SA%HbhOE;-PaIU9wazVj(RUkOxV^=kQv4r2ZIy{zySu3U9md8lO$- z?39U<{fcdK-G~<@rNv^(3+YgI@>_79MM0kQ@&nqb=I=jbT}8C0xX!&Q#OoR2C{Vo) zSq16=Zxw>FwB0mN@!zX(r&B-x4MKBB`LQ4J7>5Xg%1mX(N;I{MP$P9`073C_gqqJ0 zN~14iU68woR^VUZh~>7~2)v-Qaym3bTVdcdPO_uOwmA}goDOyA2Ak~`I1mqp-6FK6 z&zLBOM$@^JOM;(AdK+5Zw<$0zM@d7!ijI>qH9V-MY(u9*)QvC2obZo&%P<6=&zI}4 z_((ysBrIXBGjoDhEFZAXXanleCdu3LNk14I|A90sv5axa>w^sn7N7egafcVhfQlOKcKZ8g0MeTTDi`^6V#?=a@ZF__rfrLB_Z2`R03a zK-m^CvO)#*={n&4=U~qK4hE6!uK5OWcHU;d6PYrJ#t4K)5eR(mQT+X8FV>f1P5eCh zIj?a-5}S}*av*0}U@o;&LkGVCaPRyVi34E;C)mB%`qva^UFdIAzT0WGf#pK}!vLyW zMOL{r4{)PNnaxexjE;=df5t%YxURR=3pi3c?7wkWA>^beO-I3+bwPmf20l~5R4ILgv|bqYq$is-gw1J*`}OX7Sefu`5$ z&K1>O96RNR$~qF!XMH=Zr`mJ(>AsWM)?ayZ6qRLIYb8*3eh+=uO$#; zX~r_E7%$yo@o+HB*oJuOq9JnB!OFMpHPu@L;eM^gyIh!UszWs^uYY6jj8(s9uq;-; zo=I{i^Tmt<-d)Ha?Z*Ccuz-NnnvxW>V>3;!PU>|cTfh^Kpk}e%24S3a^i zqHjVIWBNnp+oMw5cs~4YoRg@Co*1;AB#WA@!UUjoz3ly)(PK^HdzxxO*Jz3gH9eov z?>JZQw*`*LnEtWb{j!eanbgZ5P+K%K_-HOIN#g6#nA&XYt-Qg7BX96u3|ru&6_bm( zR~{Knm4DO2A$HM~i#i=wr`0vy=$}mAU0!bO7p9$`czejBkTEvN)tdJjT&t`@ zJSry>3M+B5A>gjU^q4uf>~<{p9zWt2ut6@KX}q)=3g@ZAMXU5>!aG&b(7flXDTfEf zpQ73V``w){4KW_`l6=`8CQEm77i>0K_(!}L#P5$k$%j9!tHhhTv<*8y%Ep7mt7TUn z4VNQ(IQ5;*du@FxR>?^c;XiK0hpgcMn;igx!z_VHVh0n;I$jdX;=Dv-6&>sA?aELY zphgkw$kN!{O4^htLkIKC`KPZA0$sBNfpmZM*niSBHC+nb5MsV*!AdV6-8G5 zF>GKWvkot>ZNt!#D~|iLk!GstWtR?**zFzG6oZ3C%kVu*sP!+Vz8)B*0l|Pi?{m0+ zU;CQR(iD5NAJd!lBAY9!0~+WCVmRc@L*TG#LiJ5wmV`7{C8>E$o#uz-xZCp~8@%lhEUVtl> z#|W2*x;NdA=8fFVn{~_JP_KWUpG;=Tcmly-)CWFet1@e|$WbU>WIXAQ%AW30`iML0 zgSYF?>eIi+sy@G2N5J0bQP2Yw*QIq5q1Xg&xSr%KSMnKisutSR_{8)O- ztc)Vwg8AA0xiy;+dxvQ)QA0mqJ9KTqXqjP&Wz6ah0-$NCcw~lwmUT_{pkYnKxd6?b zM-T{v&h|ZkNVJMR2U+T(HT1R-oPmDS)d3g0050`>?E8zc9<7<0u6KnmBxKFYIEFp%3xid=_gfBMBu^3}hSSMIb`VW!FSQCy9%Xo)NCK`ZP~mpwXT zn4PTqzse-~nZ-FRjqhORC5n`Zx2GJ?&)3f2Kp}dLAHmSjPTOP{#$na&f5?&Y%(&7j zww^pLYPa>px}eno_YFZtv(K1ti4Y~gJ`XzWwzotw??vhvc2%df2!ozTCkG`P$D#n` z$TJyV73@7as-4D|>LXjazfLVpb!zIaM(VSK1w((rj32nco?V~m%Ho_UT^2F3!KX~= zG>Y^VnB?>iT`P&CeM!5RJDZF>L3-ibFO0e{zRXv^U0GAr37eOPf2>PU-VE${9f6f; zvPjf*oqQx&ZuqD zh;*E4?_1Be2Cw!E4YL!!%?K1uycP7siONFt`^*D)-Px}_pWJx-&jZAabW%@bgF%^X z(O0;~5&N8q5^v|X;^r$BtA1NeoB1FCH9=1)Q`Qv?ce!ZiG9R7zkn8bj*y{l++Th2a zh}ad-x%Os0#!uAmGSy>IaZq93?Jbd)F`5f3eAXHgs{QyK^M1YQ*<*f=7tr^d3v5Qn zG-S}OL)ZFWHgF$1OdiDNQ5N+B2FXF2HQkn>EB9f1_DSLRFcu9NO(P`VVS>O0mcOWee_HTQF72T~YI_s8&c~}8& zYu8a5`*Cjt=hk2!E#!ANJt2fYUVNW?X6fY5QM)4=iR4$^<5vegt7F@_v1}BT00#V8 zE^qfI+BP2X+#NQTK}kK==tcIbO2q<4sv|6&8S1gGm^HM zbIKPa2Ls@KXMvdG;O-jQX{H2k1yx0wMIvirUY;ClK?!Zu9k%<-F$uSdUePgkB&*Rk z?mnF%U<@RW^&~`8s-Tb$ka$cxjPY-@8C4^<*0|!KLrKa%#@FjlO%UTQyt!1h<^U0o z1C?-#iNCePY3(v<^RFF!jw`N#gVONy)>oC>==itpmVn`-!7Y9`kEmsx{IA)VNE`UH zDr}CC*&*4#On-?v1W%X`TF4@4SV1*L?|9p<0g+>hjzDvD} zv>=?3gOz$D>g_-va`qz-djIp>pHGg)XSxW)m1}qcA>|t6VPs;iHmBN`IbVOO41okj KfR@luo%vt%L664( diff --git a/tests/reference/euler_2d_riemann2d_config3_hllc.npz b/tests/reference/euler_2d_riemann2d_config3_hllc.npz index 91f306438ce36e38c1c6adab36d6e1c9869e62dc..4f38dba966d5e6b0b2a824d967fd2ef345bbc0ea 100644 GIT binary patch delta 1785 zcmbW2X;9PW7RG~6qyz|vRRknzR2+5?2nHc4vMFH^&~QOw6qH2)WeHpOgG&&p7v*1q zvV#{di^^tY2@-7-G(v)G0Rlm=7=(bVAt76#&UB{z*k|T_XU_Yane*W{&v|8tRYdKO zl0wuu?F?{K2`&c(B}%?t@Tz6dEkcp_(Sffk;nzI#Eo>OW&vUh5TnEt&!Y$2BlX}A< ztU$M^OVTYB_u~#xZ1jdHm1K*qV`ZC%C4Gx%R)x%2f}WOn$+FgfJ{dT#tOfl2$;Hx5 z=2?DLjnl;9B)$t=@qXV55*TdiIq~AEOE)5k@`!tJdAof*&ToEVl-}gb&-F(1RF%Pp zWQmI>kjfcfZj#uZ<^3hnKmmpSg!bH@Z!W#0GvUh_#64+Uj+OQy`PVbU21ih1gUo8B z&cct!*V^0sx$hqZ?A0a*k_;re+GBN|0QG#Jo%!kzA&I;XS|y`PYcHXU2|>zBFp;aK z{I;h8$!MVdi^Ud`Ekva}50U{Gtb7329fB2_`GjJnr1EHNGEGd3C5Pc}eu9Zk7O(8< zw*dw}YQC{HlBvkU?RsHMvJeDWg^k6F9dr?&5(Ics7-Fe zFQ_b;%4_YKN{f>n5y2szC*>84ArOet`q>RRct?vUTNk(ox=T)F9TWz<2UT)NH<?NVjd>)O$VB1qQtdmYN;U1&h~nsT9>{y+;qwK6%^a@eh9YNW*uF#;)k)?7`4pE2h_2{)^#cu#CTjj^5jJ; z`Rh(KFp{>aVF!M4hY^m}gET6_OM@Zu3U=Ld@DQ2&KcH;3a}V2qvLO}7R!Cg%<;V-6 zF$pFSQ3-Mobud-+N5D*eo!`1wsIXl%KaHD7o1w0!Rsa~F)!qr<9+CFjE! zFx07Z_ww{!Ok)tL+-RCs*6sIf;6_=+ZOadxdgonHcP$L|I2x)POuus{ICS8*==~$x z9J_yE$Wnw06asusFe_&IeI*Mj9w_KLb%h8+ulZJGQ%M~FF260$bYh|RCwf4+k)dCy z8z^g{y1ww<*T^{&Os}6jyp)iEAdep^=am%UCoiyv! zh^tJj*}$!;y5eo&KkJ9ZT8|M9xrWfahwXv6(AvaEwiA0P%d4y{qH)1&vEVhUM%RY2 zmNX%KQz`>wm?;lrDSGs#G)8l+_um$mP6GU-RNHp8SjQiS#4Lf;DBt92=#Qqcw|~;0 zxu_GQc8z;rl{L!F$Kq6XXGHqTj^os_J949e_IgtH_|8&o+AGChu04+D<*zgk2QOCO z-g9e}8+&G$Pu&xfzN-148$SO|JdCB`skOb^) zo+&u6kh3QR#yvW!Y87^%DZ9=jJ5!GvgG@)CVkZJoRzV&wq&!~%aeBUO(;QYmIv|aU z@?+hNFHHK(P#z&V`tjaQxbIYc1w4PlsEl#XF3X?HetW~j(FIi}iK@`t9!veCkUw(g z@=L^jvXDDwZG?99OpQOFbYmB*Q+pff>pp=G%1)&E$;=2`o1N7$!az z0h>XldfE>g9~2by)iBf9*n%pXAdu8u5Qxg3vHE_c%E7=A4YG!_M2$lL delta 1762 zcmb7_eKgcr7{>=YA@4;aoK$KkG9qR*G1`#QtX^nYHPeJB%M{~fgr5?VyspW}`$5~5 zv0g&$&~TV7thYun3}Zymlrb`9hIw7KKlYscYxmyo^PF?;SYnhIYd!p%`c~#!o2kEE2*9&il!-0F{mI?iRk9OPE#=}P;Z=)yuT=J zd5|E5WMLFLG!uexaVwKqimu}#Yc2GP!0qB5MbtI-AN^J=q!=GG*OQSqcjuKFEzI$8 z2Sicl^4X3@PRde_r^gq-MG$LPQW;X1O`EPVae6)o7YX*OMu#@HH}Xdb%T|Tyhiv5E zGBT5Ov-$pyJ1__9%O6M=+Fbhb!6QHjFy>H3M%bsV5#<2v?^R8hF8}y~cAdni1 zLHeR)yv=JF2|Deq_RRqh2&AzdyFe+*Xnu>70c1N@HY%FO^*|KBVHkTt zyZmPNLrUjyF{>{$hGq2a#b+3UU=hLRV~BLkA!^nBdsEV)25KO$!9%$ zRQZAHwF@LmveWO(MHF3S6!YCG7Dzt!Wh5b%#ptVC%R#Rk3H#bBExqfJj9xhwkp5ZA zeqNS5CLr9qzo}T+z!~M@Rk1A_J*09uj^cf+mz8~Oy~IUT$Byn7#L&D4de$5xFP;8320)<3@Kb^ z58$e{PG)`ZnBiWeGsfymOpS~#@A&bZlv~^j+Gn@+S^1>eK7LRvNX>a$d5$}Se{-Pd z`+b>`20J{N5>silfA@fWQ>K6Z_tjbVycnD5{gqXh1BzRgN;Uc2J9GGbf<(e9U-(8a z>pbsIwch9CI-bTjxar2DlO>e~xGfm~JT$`4+hfM2<&j%;Kk8h#y&nK@DktmxoRgVz zRs!D~Gs7)rCQzfalMk!5FgiwtCq@~Rq03NxOdI<3<&(|Xh$b8{RP^+Tt8cCVTr?H+ zjPbGmc;v&AwP_~v989v&BgAA2drcl#i+{`sI-H*vdi{o@fYv0ZH6nYbhXB5=Vp{Lt z(xR)&I?ewPceQE$kHSf#G1gjTL^}}24Cz@E@9GuqC_0>A2HuNa+g-cQy)`gDV@WN@ zYmwu4#NmFf?}?GyPbLrgHp0Hc?HErVhLKV7*hD6EpnS8H(jZ{=3}HUof&>sG#3@5%XF6+b^pG4x#Q2`;yUPhD230QuUeP971QI-}inxp^}e`Lj5eY&Wm?jYUbAIwit5y zr?yzQ!DeLIF(oo!# zME$Jpl_<_qL3ST(bpmsq}F1`l~RI^2MfbHNe*j-1{jsa*r~ z7_)w@56V1c!T2dYT7X;T3r zb?e^(Z~QkJB$R=j>BeiPsR{z6>;!?d|2Emzl%k?ddSGDgw&B4I`=z-3`}~{^2oxLg f6E5f~o?sh!op9P4ylLYuczv3vfIvg~8>_zn8n}NL diff --git a/tests/reference/euler_2d_riemann2d_config3_rusanov.npz b/tests/reference/euler_2d_riemann2d_config3_rusanov.npz index 4a2e5c1169cbd5f350320cdb74dd4b480e4ae30b..a3f6bbc80c2fe6751d05f8cdf2f88a36cd792b66 100644 GIT binary patch delta 2840 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 F{2S=(x0C)m>n~hOWW;32t_g)KS;sO%mZ>a* z5!nWbVY0-`7z{IS-Fx5n-1ofaea`tl-#@<3dCqgrXL-J)^9$!|CU`iWs;LYiW_Tok z0XCLDV=e2z%2(=2}-Rk7?L&KBtX-E#&f*stip29$*KMtPbAj zQOg*kg?n~PwI5h|+C4R>o9_r-{Ix@9ah?$EYWLz>wK5N`VnFlku78_=uG)R!#a*jt z^YTTuUQgGMub)GEW8=VXZ49wH@;@e>M74Q-`+hZPd4P<6^`Hh$-oHI?HG^MHb}-m< zR`hh0&!8X5SM+wD{lgiB6F`)Ml;Vm@ZOuZRe1ttN#^b!fDnt^z3buV3JSNs2StkyH zI}aO_>nc`RX|Yzl4e_y52OjTLSr0TGKF-r7D}klGkPNI31eyjp>Yf;EfO&pn8khuj zOc3n{!_4vtWwVvl^?Wq}u>5iKM|ECRSzhTyPIZS$OZ@L1VvkC9fNQD!Q~LHd!wQ@9 z;jMYQ21%N;0DamKO1YS(W~{QI5OdC0IcIP4LU2iiAvJvMST?197UYv)Y+rx+o21sg z_4G4KqJtXSTEB+vsThNt1nqFjc=p}W8Y+O;D1-!c^c(t`ES~{SYrIMfg`?uhDUooh z(ZBg0c%+ynweD!!eL4OgbwB2BnGvk`8*_VlaEH<o=-&ngWum^G7I+sR%|0H9-2~$)^9>xOU8JS#ZOu;R{GiA z@Nx2z`{*Fz{8Zl10rCi$`^H;wNrv6oRZ#Q3)4dlb3AUc~qg1kOPA_baJ%-zbq65|4 zFSvX$yMN)|Ma#an_Fn`+IyEzx!S-o-h)MrGlqMq_rWRQ0PYnV=t;nxn+nylxZ zA5QVr)cZ-l-fK8SGP*3?x7)7dG2WV0?I79P;J-a@dBGhQH45c#y6UhqS&XG_xwta= z3xQn~UiLq5>GY!;V%+x^v9fM^M%fPGBzhCeO4gv*O4#s+Dzm}5Kf zroLI2UoGm10_EL%M;lAbiOQmLCeJO`o36%}M)fYRT+T6Z_8QK8R9G7VmB77?31^Hn z#&jD!a-4c8zqfZ-uq|hw70R1eu01yI1vGZ13~Ks)f6bRJ9=gYEHQ6!Uy=ZbSD2XDa zaIc-(J+)+ag5=>FOKw8W<&<)-_m$=NX|XE>LLi^wum&}X12!ZLT@J!zz5LARvFpAR ze0#|UL*<0}#GgzXlqSG5^z!B~bPkJkE1?jA)#I7B{VM8FqSBkJ2d6*dpY1&blAR)y z`J87vWQ#Jze+Rq-h+_065xq@4Qss z&4)K}*0ONDF%M%@Gn|S5N+hXp)%?JYIjTps`o9+jSl_e*+wMGpymMmq7d9l*(ewMM z`SgG;RcuO@%OwOgmv=w7|132?=UknClnjC22$9g}GS^%eMC=C`37X6*LyP2sc|wIA zlp}0ft=|MUI)q)Brf>B+VUrh>vlZ+j-5$cHwBgd1s#_FV3+Qh1RLX9cKPpT$?;3i! z3~GG$+sRNpn5MhFo^~PD8J_)7sEPH$#C>@4V2o09V-3rf&U@HTqia$%I@Z`N*gvEb1{&C$38+G%3A}VrsQ6=o#2wP@0?b~F zV(v>q+jXU>Zm)abav!p}z6jJyx?Tm{Y39YtYhx0kl%c-*h!E;%#N#Aoll6gNKO z)>gc%TJL2~O%0*i&GkayNG-I;-~;wm$e~qo)bhmP_Hb^De~QWT-&w~{I-`1b1S!A* zyE&Dv?R_h+|0b@XObm0|P?Fv{p8kGWJbwMYmm)Y^dlElHD2*qoYhz~u;7AlhZWS_0 zlv_R-im6+xu<$%ZKKU76!JoE%`WaIZV=%2q-e}kl=La?xH?Hi%()46^BfF}lR-&gQ zsHqwObR=Vw%O4okBXq2#?qS8wHy_wAAF(&-ktCpV+u(x*zG=p5pzVLEcX$yk$D=ua zeO3n$`hrSgzqa_VZT(o1h2_X!7WQX;%sPxn7L?%pWpLSuYC$2^8AOku1XtbhU(f#n Dx~ir8 diff --git a/tests/reference/euler_2d_riemann2d_config4_hll.npz b/tests/reference/euler_2d_riemann2d_config4_hll.npz index 9a5b57c0771b2cb8f6f135e31e335bca249701f1..17eff30b11a6193da6f928b22c741c81b934d008 100644 GIT binary patch delta 3485 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 diff --git a/tests/reference/euler_2d_riemann2d_config4_rusanov.npz b/tests/reference/euler_2d_riemann2d_config4_rusanov.npz index 1f1de4bff642efa12f4154b61896c6f56e450494..abe27d9a7e9abc791f7293964f6ee0a9be687764 100644 GIT binary patch delta 3600 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 F{{r6+DcAr2 delta 3565 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 From d44f9756d971ce9d0d3594b3d8556b68ccab5feb Mon Sep 17 00:00:00 2001 From: Loic Gouarin Date: Sat, 12 Sep 2026 14:58:57 +0200 Subject: [PATCH 3/8] Give configuration 12 the states of configuration 12 The registered states (rho = 0.5197 / 1 / 0.8 / 1, velocities +/-0.6259) were those of Lax & Liu configuration 8 with its 0.1 velocity offsets zeroed, and its quadrant 3, at rest in the reference, carried u = v = -0.6259 here. Replaced by the configuration the case claims to be: (0.5313,0,0,0.4) / (1,0.7276,0,1) / (0.8,0,0,1) / (1,0,0.7276,1). Configuration 8 comes back with the parameterised lax_liu case. The reference fields of riemann2d_config12 move with it, for the three schemes. --- euler/init/riemann_2d.hpp | 8 ++++---- .../euler_2d_riemann2d_config12_hll.npz | Bin 5257 -> 5314 bytes .../euler_2d_riemann2d_config12_hllc.npz | Bin 5255 -> 4391 bytes .../euler_2d_riemann2d_config12_rusanov.npz | Bin 5297 -> 5357 bytes 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/euler/init/riemann_2d.hpp b/euler/init/riemann_2d.hpp index 15b37a7..e9dd1f1 100644 --- a/euler/init/riemann_2d.hpp +++ b/euler/init/riemann_2d.hpp @@ -101,10 +101,10 @@ namespace test_case::riemann_2d inline const Config config_12{ 0.8, 0.8, - {PrimState<2>{0.5197, 0.4, {0., 0.}}, - PrimState<2>{1., 1., {-0.6259, 0.}}, - PrimState<2>{0.8, 1., {-0.6259, -0.6259}}, - PrimState<2>{1., 1., {0., -0.6259}}} + {PrimState<2>{0.5313, 0.4, {0., 0.}}, + PrimState<2>{1., 1., {0.7276, 0.}}, + PrimState<2>{0.8, 1., {0., 0.}}, + PrimState<2>{1., 1., {0., 0.7276}}} }; // One definition per configuration; `--riemann-config` will replace these diff --git a/tests/reference/euler_2d_riemann2d_config12_hll.npz b/tests/reference/euler_2d_riemann2d_config12_hll.npz index 7bc2a8574e51a4d8aafcdb1943008d1db3c5fca7..f512902f91f273211dff19dabea394ae5b4b06a9 100644 GIT binary patch delta 2795 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 delta 2764 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 delta 2736 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 diff --git a/tests/reference/euler_2d_riemann2d_config12_rusanov.npz b/tests/reference/euler_2d_riemann2d_config12_rusanov.npz index 054a5e8d478e0b3b8b56d9fcfad92d7f8725864a..a9884813897e67d48772cb2d2803deed4b555b5a 100644 GIT binary patch delta 2838 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 h{r;|Zm;^Df Date: Sat, 12 Sep 2026 15:00:27 +0200 Subject: [PATCH 4/8] Fix the typo in the velocities of Riemann configuration 4 The vertical component read 0.89396 in quadrants 3 and 4, against 0.8939 everywhere else in the case and in Lax & Liu. The effect is marginal, but it made the case asymmetric where the reference is symmetric. The reference fields of riemann2d_config4 move with it, for the three schemes. --- euler/init/riemann_2d.hpp | 4 ++-- .../euler_2d_riemann2d_config4_hll.npz | Bin 6037 -> 5271 bytes .../euler_2d_riemann2d_config4_hllc.npz | Bin 6010 -> 5263 bytes .../euler_2d_riemann2d_config4_rusanov.npz | Bin 6112 -> 5285 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/euler/init/riemann_2d.hpp b/euler/init/riemann_2d.hpp index e9dd1f1..b521b13 100644 --- a/euler/init/riemann_2d.hpp +++ b/euler/init/riemann_2d.hpp @@ -93,8 +93,8 @@ namespace test_case::riemann_2d 0.8, {PrimState<2>{1.1, 1.1, {0., 0.}}, PrimState<2>{0.5065, 0.35, {0.8939, 0.}}, - PrimState<2>{1.1, 1.1, {0.8939, 0.89396}}, - PrimState<2>{0.5065, 0.35, {0., 0.89396}}} + PrimState<2>{1.1, 1.1, {0.8939, 0.8939}}, + PrimState<2>{0.5065, 0.35, {0., 0.8939}}} }; // --- configuration 12 ---------------------------------------------------- diff --git a/tests/reference/euler_2d_riemann2d_config4_hll.npz b/tests/reference/euler_2d_riemann2d_config4_hll.npz index 17eff30b11a6193da6f928b22c741c81b934d008..bf5630218a948361b076ef487e9383fb39e34aa1 100644 GIT binary patch delta 2733 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 delta 3526 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 delta 3474 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 S|1Z$HlIq4TK&Q|7r{N!|4C~_n diff --git a/tests/reference/euler_2d_riemann2d_config4_rusanov.npz b/tests/reference/euler_2d_riemann2d_config4_rusanov.npz index abe27d9a7e9abc791f7293964f6ee0a9be687764..4d5176fe2a12cb48beafc02b57c38a443c026118 100644 GIT binary patch delta 2791 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 S?>pNCF?i6aqsSA7k^T*tj*F52 delta 3571 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 Date: Sat, 12 Sep 2026 15:12:59 +0200 Subject: [PATCH 5/8] Use the Kamm & Timmes cylindrical energy for the 2D Sedov blast The two-dimensional blast energy was 0.244816, a value that appears in no publication we could trace, while the 1D and 3D values of the file are those of the Kamm & Timmes verification suite. Since r_s ~ E^(1/4) in cylindrical geometry, the shock stood about 5.8% short of the analytic solution, which ruled the case out as a quantitative test. The reference fields of the 2D sedov_blast move with it, for the three schemes. --- euler/init/sedov_blast.hpp | 14 +++++--------- tests/reference/euler_2d_sedov_blast_hll.npz | Bin 3442 -> 3467 bytes tests/reference/euler_2d_sedov_blast_hllc.npz | Bin 3479 -> 3449 bytes .../euler_2d_sedov_blast_rusanov.npz | Bin 3426 -> 3422 bytes 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/euler/init/sedov_blast.hpp b/euler/init/sedov_blast.hpp index 4486545..75f6811 100644 --- a/euler/init/sedov_blast.hpp +++ b/euler/init/sedov_blast.hpp @@ -32,14 +32,10 @@ namespace test_case::sedov_blast inline constexpr double p_ambient = 1e-5; // ambient pressure (very small) inline constexpr double r_blast = 0.1; // blast radius - // Blast energy. These are the values that put the shock at r = 1 at t = 1 for - // gamma = 1.4 in the Kamm & Timmes verification suite (planar 0.0673185, - // spherical 0.851072; the same spherical value is used by clawpack and by - // lanl/HARD). - // - // NOTE the two-dimensional value below is NOT that suite's cylindrical one, - // which is 0.311357. It predates this file and is left as it was, since - // changing it changes results; worth settling separately. + // Blast energy: the value that puts the shock at r = 1 at t = 1 for + // gamma = 1.4, one per geometry, from the Kamm & Timmes verification suite + // (planar 0.0673185, cylindrical 0.311357, spherical 0.851072; the spherical + // value is the one used by clawpack and by lanl/HARD as well). template constexpr double blast_energy() { @@ -51,7 +47,7 @@ namespace test_case::sedov_blast } else if constexpr (dim == 2) { - return 0.244816; + return 0.311357; } else { diff --git a/tests/reference/euler_2d_sedov_blast_hll.npz b/tests/reference/euler_2d_sedov_blast_hll.npz index 6e3f49c609ed7bc1a236b91b1ac6844272ba6f30..21c8840690c5a2a8e77d5ad5264b30703eef5498 100644 GIT binary patch delta 833 zcmew))h)fDf`i3bV43se8V-5Jhm+@UWYkyX%}$;iq245y@%=*gH9vv(#jE}&$QSi$ zzMHPy)Yi$r<#)#0_xI*c^nP~cf5Q5&mo)ypS+c!AO3m)hA;xL@5BcVDtPLPr4_*tCz41x@^C$KqB+0ycMta{lmI*`!6m2qG9WWLRDl6GX!`uv*G830V{jP@%7j@U|zx^ihi^J~rxGlZ=%FA}XRsB7C z{-vy*sQZU9XZ-GA-hyf+_9KK@g+ewhp(9OO|CJ#^w<8<<^LH!+vm0|egAOUIro==Ra4}aqELHG&|PR37{WSv zBbQ2j86(ieK=Ah3dF{i6GRHq^s&8FA`P1E(-en0Io_mAeC{4O`&@pOT;e?mgC;MaW zs+zNB?a&JrdR-lIsPL$c-X!}2cfZ`NzO{VGPM_C5chpqXSAW0x{qpMf)${Lmp7`;k zWODx1?U~0Pt+YHYx8=>kBMq`!-nd+fEL`Nh*;8HYe|?o)pWd=ZOP{Z7eNnV0r2I=s z`>&?36~-C4k@c4!F+<$Oz>pzu?Re&a{pBzJg)BDg`LdsVp0RjdVZB|^hU&-bmKJZ1 z-5Z|wYu(>JFE^~%ni2a>{O$VhzZaX$n*D5_+zq+xZ{k|7J?(a1p0&G7{#M-K)`#NX zPpo!*&AZ-zOa1;m^Iz0`wUb{pv-tLpb=sEM?{3cgb0zx6zD;R+Lbud?`Q`fi^zY7h z;vee#Usa~n{8p_u-2Zv=t3O9i#GBN=HUA|3>HqzbfBn<`A202D9b><4-v6XC^%w18 zOaHwF8Jm@S=l_u%|2qr+3qStnevkLmoX2NMVZOScVaLcg*@>r-6_lJGPCmh75DH2< zPk{;=6c`wIUT`q1H5~GccP7u_$ViDQtA3GujEBYc!n=jyZ<ZUzq*jpk3sm zC1H0&91kC1zg4^CTY2fR_pCxw<=;rF>+RYd`B-*NTPOeaf`+B}5jKbaoSrZvx%`_( zQ(NcZE4$oVN^4dSn%iXj7P8Q%25j}8`A;6oNMVEnrfdhyY87dy` zJvn(ArwZdEphJ8nvvVobSA9C$BXl%!_1nZR4!hgqz6j2rHRW@B|E=?B8O6f<6>Q5B zA2GkRi~3!idm($~nPj}~}8U;IVG)~o*#GQ}S!1$3PNvh%)l7Vu2o$)!@C$_R8W z5WKy%(d%%4$gz)FA}%$|)+rY?N-n%o2--7yau)~JD}{s0LIk2OD+PU(6scif*d6to zp>a{O_sb=Z9x%Un_DCfn({Bm8Ov%c&|M@%T6zuT)u|wT5Hez0U%-hblNBQ3LMBn-H zCiApk`tmnRQqw=joh&Xh`xJNV?;gAQ*E!;MuYFBAr@3QoRZ5MH>C7!bi#=bT_%-*R z1jJzs3=S?TclO2XEqhuYt}HbtF`F{6^OYz@-dNKEBJD;6>Xl=ZoxK_S)e~|RbW;^A-2kYFvz5Z7J zd*S4Hw_nA)p7VF}@>QnOcko^Jsx}RJzx{Xb7xv$hH}!YSfBDS%@#*rP^Vy4I=NHf2 z9T)oVQ>?)z`JexDv;Ik&{y$v2ws>09+4{xL?05b*e)V5}&SU+##dkf{{`-HzdeIk| z^mWWok2I|K0gMJlCS7JkGMSvsQ^*QRw09;ylyUy#G+uc&C$J&_+2~;! diff --git a/tests/reference/euler_2d_sedov_blast_hllc.npz b/tests/reference/euler_2d_sedov_blast_hllc.npz index ad86e9a4ce57a21d2aaae91bdff54f33c649f6df..f5ae8b9bf8662d1ab4079a17aeb69000e1d2fceb 100644 GIT binary patch delta 834 zcmbO({Znc~1qVy5yGz&P8V-5J`;!lH`b>VoAyaRaS~|Vl{<*t_?S*#>#cMT-3qQWG zmVf&-)a=jx=-vg1kC@-uMg890Ykln6kvE(7UMev=yv)-7p@~n;j#g%!+QW||pT)0S z&3=_zZ*SvegTfiR9!}DC+x0*3i-+(39fuN^Os#+M#bfP%x0iucQ{SwG5a-=3c7>C^vK z?!C$G{e4fvWrL56W%6tP>c06B^YQcQ{BP{5Z6a>F&XDDE$ei(`fSWzySKCqJGxujY zU9MQXdneG*GRyLIJmD_+FMr_Sf9Ati{wv%5?Vncvk zKsTZ|@sK#vg2^YjRO%BMflda3x7YT2J0*%7D~z6fd$&Lpw@Q$dQA&1p=WPj#u4a30SaoornD@TE9=+)w3+XlTXD9^ zz)VQK*XrZK6`SAx@yiDVBp594Zi$y_ZGOFaL2U0k0g>$EOAkjGe4e-F{+@fR)|WSa z2>Yg_ab0=3aQgYE?rY29x9q=sU*3N4&dhh6mnuIhUdos|_43c-5%+5i3@SHm463*k zwZ*J<(ciRrFZTHDm*2O!{`Bc@`?3h z@7;gO&&F;4G~I0Hc0cXo8nRJ;E$zxP|A4) z)Y729z`z633gR<1O}5~bcK}5jD8?Eb(B)TgF));+=Hw@5mQ?EH6;uXzv$BBV)-R*HD zZ@126tk=GFd%NnBxU7hO0)FAnN7--HZdsK0@AvM|(4=ce_`f}WfBL3u^zZxsWTv!r z@^3F_SehSUbNJ6(wVlttFBURmm*5p{Un#Bklj-jN=LJ9h-!b_5-^2g^;-~WeY7FmO z`l(^-)qiR67ceCYrJJX-p}AH5!u<1-_i(Ay7cm0e4g_zn?e%sFlsH}}8*|Bif#MUV zgT52uR5X+-wrx||Al~Ajvfjld+$74VqwN^StwpLGVbNI`JCnDhZb@m5_70xBCAFmQ zAtPsWUd+DvPd~)S^~KfQc|K?I&!szCeJr*J-`e`wuX1gQfAlw>#8ZAzWe0V0rx!&> zZl6+LzHi?7XJ)7UURPGyhL=Qr{qQ3qODS`ykZ1P!U$gfKKpe-w;NY-E&NoeK;;QRw z-3)k+@xA`dKYd>Hoh@!_qu=Z8D*7m5`(5kw-}e)#^_e4VTtiEqw zy}3E!@zTB5@-Dq|U-XQ3PMY{(<bcTd}~Ds+DRi@L4zU;O=3XJ2CUeA~y^?Zwx2 z+AlYcoBjRzGp$`=e;56}TDRzX@P75Wea3ZvCe{Dm9aiZz{m$*|J;wEhpTs}?zyD>Y z?UHka$^W_y{~w+4Kj}<;Ex*9t`S;(q-+NIUJ^%5szy3YH=SzII|HP+J+-H0p8r%#H z0X0kk-i(udc^lbUkuPx&i z_0wHLhV7Q^;x8JuUj3JlDgJsXh5&D77F`Ag1`Z%rWZ2_4v+6$xOm5=r35fbN`9V+S z&EJ%kPZ0?_U(}HcmNGe?z{2JARvf z??Fbl!$;bqEe>2V*O{02@9vft54qRBol`J5j?0FHRe7=R{J8JW;$#KdvMi za0xey>9Tc~T0Pt+EHAMrwQ5iN(}&eHmGAoa&reUU&(gEDy)PKupSzn?|HSWiGamPe zU(P#J*sWTB_WWACsehX4zkjru9L>4s*yjYx@NZIIADk#Knp!Z)nKS+P&$$&m5VtWf zC@5Vz>9xwNFfZzAN87)3m#%`tB&z}dE<3|>C3vv3OkFPm!r1u{dWC* z`|sZ$l4pI3zki;&{rBVB&vpscuaW;2=3BN!MyAv*LpQ3ucG2I5b&G!2Z~guM!&KYt zYm0NA=bRJEPn&0S{hL-)`(KE3>-))N|BUTwC)a{^1 zf703dvsZ6eX6K%*-}uaa=YQjCfBo0|o*(hue&f6PC$fRxWYX6$L;cXOqJllZn~_PE z84=Mt=S+6t$!7&6x|5T4@EC-GV*W8uLxTbX1Kjf%VB-K~Xh_)r delta 717 zcmca7^+;+%1qX|$$ZCbjH5~GcCnnF~$f*By;PVt-+d7V_1$T`D{>f=RWcVC^_~&HK zNyYXz%>80Y$~Pagw%`?(&wJP)x8LBuk;=0hb8Wj8BtAN0*Dp3_)}PyW zzZn2s;jF(a;gQhW|Ihty%$8V}W3}hAV-o9VbS1R|q(*E}UnjH_mAKkkD zfr(Gej#g%!+QW||pWQ!n=E%)$o@@9FCdYHxuzX2AA~ktFmr8vGBhXGDczbQ5_hAQ- z;~!tV(AZ^}((S~qE9$aj`-;h38eCc$SC?6ctX^3nSQz+SY3|)SGFo>pJBkzvvdgmk zXXt&PkSC^nXLUuu61|BZ{^}g(?$7R%uiU$M<<65YTg_G{ytT+Q-~Y_=@HXQ~l0`|| zCZDXl9ha4?`h4l#_0Q`cugtl(*8cqZOy?c|_AKZJzE9>t1CH8N= zyJxGIpWGWE?H#dn_px0jRezt&iTio5?%T79e~wwITi*p=TK_$GQ~Ztk=ZF2D-7(wu z+U;Do)%VHAH`!h+&RYjICI0>L6#Ku`T4#(O-`4-B{nh z%l;ql{i(n6*Lk;dLDHY&-!Xc92plAcdSc3z) Oe9vS{UU@bnuqFV{nNSV@ From 3f145664829277472e28b66856f11b8f6637cb29 Mon Sep 17 00:00:00 2001 From: Loic Gouarin Date: Sat, 12 Sep 2026 15:37:21 +0200 Subject: [PATCH 6/8] Cite the paper each test case comes from, and check the cases against it Every case header now carries the reference its data was taken from, with the doi, the parameters as published and, where we depart from them, what we changed and why. The two cases that answer to no publication say so. Two exact solutions come with it, both self-checking so that they are references rather than second opinions: python/exact_riemann.py the exact Riemann solution of Toro chapter 4. Run alone it reproduces the star states of his Table 4.3 to the digits the book prints. python/sedov_exact.py the Sedov similarity solution, integrated rather than tabulated. It returns alpha = 0.851072 in spherical geometry, the published value for gamma = 1.4, which is what makes the planar and cylindrical constants it also produces trustworthy. and four validation runs that hold the cases to them: Toro test 2 and Sod against the exact Riemann solution, the Sedov shock against the similarity radius, and the symmetry of the three Lax & Liu configurations about their diagonal. They take 20 s together and are marked slow, like the rest of test_validation.py. Measured, at the resolutions those tests use: Sod L1 4.2e-3 with the shock 0.3% short of exact and a transverse velocity of 1.2e-3, the 2D Sedov front 1.2% outside the similarity radius, and the three Lax & Liu configurations symmetric to 3e-15. --- euler/init/closed_box.hpp | 3 + euler/init/double_mach.hpp | 13 +++ euler/init/double_rarefaction.hpp | 10 +- euler/init/free_stream.hpp | 4 + euler/init/isentropic_vortex.hpp | 13 ++- euler/init/kelvin_helmholtz.hpp | 39 ++++++- euler/init/riemann_2d.hpp | 19 ++- euler/init/sedov_blast.hpp | 43 ++++++- euler/init/sod.hpp | 16 +++ python/exact_riemann.py | 187 ++++++++++++++++++++++++++++++ python/sedov_exact.py | 154 ++++++++++++++++++++++++ tests/test_validation.py | 117 ++++++++++++++++++- tests/util.py | 14 +++ 13 files changed, 619 insertions(+), 13 deletions(-) create mode 100644 python/exact_riemann.py create mode 100644 python/sedov_exact.py diff --git a/euler/init/closed_box.hpp b/euler/init/closed_box.hpp index 5cc5d69..7cd6437 100644 --- a/euler/init/closed_box.hpp +++ b/euler/init/closed_box.hpp @@ -22,6 +22,9 @@ // check that a flux is conservative, which is the first thing a reconstruction // can quietly break, and it is the only case that exercises the Reflective // boundary condition. +// +// Like the free stream, this case has no publication behind it: what it checks +// is a conservation identity of the scheme, held to round-off. // ============================================================================= namespace test_case::closed_box diff --git a/euler/init/double_mach.hpp b/euler/init/double_mach.hpp index c0b5625..0428131 100644 --- a/euler/init/double_mach.hpp +++ b/euler/init/double_mach.hpp @@ -19,6 +19,19 @@ // wall along the bottom boundary starting at x0, the shock entering upstream of // it. The top boundary follows the analytic shock position, which is why the // boundary condition needs the current time. +// +// The set-up is the one of +// +// P. Woodward, P. Colella, "The numerical simulation of two-dimensional +// fluid flow with strong shocks", J. Comput. Phys. 54 (1) (1984) 115-173, +// https://doi.org/10.1016/0021-9991(84)90142-6 +// +// section IVa: domain [0,4] x [0,1], wall from x0 = 1/6, final time 0.2. +// +// The post-shock state below follows from the Rankine-Hugoniot conditions for +// a Mach 10 shock running into (rho, p) = (1.4, 1), a gas whose sound speed is +// therefore 1: density 1.4 (2.4 M^2)/(0.4 M^2 + 2) = 8, pressure +// (2.8 M^2 - 0.4)/2.4 = 116.5, speed (1 - 1.4/8) x 10 = 8.25. // ============================================================================= namespace test_case::double_mach_reflection diff --git a/euler/init/double_rarefaction.hpp b/euler/init/double_rarefaction.hpp index 85a89e7..592e7d2 100644 --- a/euler/init/double_rarefaction.hpp +++ b/euler/init/double_rarefaction.hpp @@ -22,7 +22,15 @@ // it fails loudly rather than quietly. It is the initial state euler_1d used // before the test cases were shared, kept here as its default. // -// Toro, "Riemann Solvers and Numerical Methods for Fluid Dynamics", test 2. +// The states are test 2 of Table 4.1 of +// +// E.F. Toro, "Riemann Solvers and Numerical Methods for Fluid Dynamics. +// A Practical Introduction", 3rd ed., Springer, 2009, +// https://doi.org/10.1007/b79761 +// +// whose exact solution python/exact_riemann.py computes: p* = 0.00189, +// u* = 0, and a star density of 0.02185 on both sides. That pressure is four +// orders of magnitude below the initial one. // ============================================================================= namespace test_case::double_rarefaction diff --git a/euler/init/free_stream.hpp b/euler/init/free_stream.hpp index 4977830..92b998c 100644 --- a/euler/init/free_stream.hpp +++ b/euler/init/free_stream.hpp @@ -23,6 +23,10 @@ // // The exact solution at any time is the same constant state, so the error is // obtained by comparing to the initial uniform values. +// +// No paper to compare this against: free-stream preservation is a property of +// the discretisation, so it is checked against machine precision rather than +// against a published figure. // ============================================================================= namespace test_case::free_stream diff --git a/euler/init/isentropic_vortex.hpp b/euler/init/isentropic_vortex.hpp index e0d7eae..9decc8e 100644 --- a/euler/init/isentropic_vortex.hpp +++ b/euler/init/isentropic_vortex.hpp @@ -23,10 +23,19 @@ // case the reference for measuring convergence rates; the moving structure also // exercises the mesh adaptation (the refined region must track the vortex). // -// Notation and formulas follow: +// The case goes back to +// C.-W. Shu, "Essentially non-oscillatory and weighted essentially +// non-oscillatory schemes for hyperbolic conservation laws", in: Advanced +// Numerical Approximation of Nonlinear Hyperbolic Equations, Lecture Notes +// in Mathematics 1697, Springer, 1998, pp. 325-432, +// https://doi.org/10.1007/BFb0096355 +// +// but the many variants of it in circulation differ in their scaling, so the +// notation and formulas here follow the survey that sorts them out: // S. C. Spiegel, H. T. Huynh, J. R. DeBonis, "A Survey of the Isentropic // Euler Vortex Problem using High-Order Methods", AIAA Paper 2015-2444, -// NASA Glenn Research Center, 2015 (NTRS 20150018403). +// NASA Glenn Research Center, 2015 (NTRS 20150018403), +// https://doi.org/10.2514/6.2015-2444. // Equation/section numbers below refer to that paper. The parameter set is the // "Shu" row of Table 1, in the paper's (sound-speed) non-dimensionalization: // rho_inf = 1, a_inf = 1, T_inf = 1, R_gas = 1, so p_inf = 1/gamma. diff --git a/euler/init/kelvin_helmholtz.hpp b/euler/init/kelvin_helmholtz.hpp index af9433c..255b141 100644 --- a/euler/init/kelvin_helmholtz.hpp +++ b/euler/init/kelvin_helmholtz.hpp @@ -13,9 +13,42 @@ #include "../variables.hpp" #include "registry.hpp" -// Kelvin-Helmholtz instability: two horizontal layers in shear. A small -// vertical-velocity perturbation localized at the two interfaces grows into -// the characteristic rolled-up billows. +// ============================================================================= +// Kelvin-Helmholtz instability +// ----------------------------------------------------------------------------- +// Two horizontal layers in shear. A small vertical-velocity perturbation +// localized at the two interfaces grows into the characteristic rolled-up +// billows. +// +// The layer states, the shear and the seeded perturbation follow the widely +// reproduced set-up of +// +// V. Springel, "E pur si muove: Galilean-invariant cosmological +// hydrodynamical simulations on a moving mesh", Mon. Not. R. Astron. Soc. +// 401 (2) (2010) 791-851, +// https://doi.org/10.1111/j.1365-2966.2009.15715.x +// +// with two departures from it, which matter as soon as a figure here is +// compared to a published one: +// +// - gamma is 1.4 here against 5/3 there, so that the case shares the +// equation of state of every other case in this repository; +// - the boundaries are outflow rather than periodic, periodicity not being +// wired through the mesh configuration yet. +// +// The interface is a discontinuity, which makes the growth of the billows +// depend on the resolution rather than converge to one answer: +// +// C.P. McNally, W. Lyra, J.-C. Passy, "A well-posed Kelvin-Helmholtz +// instability test and comparison", Astrophys. J. Suppl. Ser. 201 (2) +// (2012) 18, https://doi.org/10.1088/0067-0049/201/2/18 +// +// So the case is qualitative: it shows the scheme developing the instability +// and the adaptation following it. No number should be read off it. What earns +// it a place in the non-regression suite is being a moving, structured, +// adapted solution. +// ============================================================================= + namespace test_case::kelvin_helmholtz { using field_t = config<2>::field_t; diff --git a/euler/init/riemann_2d.hpp b/euler/init/riemann_2d.hpp index b521b13..9317f9c 100644 --- a/euler/init/riemann_2d.hpp +++ b/euler/init/riemann_2d.hpp @@ -18,7 +18,19 @@ // The nineteen admissible combinations are classified in // // P.D. Lax, X.-D. Liu, "Solution of two-dimensional Riemann problems of gas -// dynamics by positive schemes", SIAM J. Sci. Comput. 19 (1998) 319-340. +// dynamics by positive schemes", SIAM J. Sci. Comput. 19 (2) (1998) +// 319-340, https://doi.org/10.1137/S1064827595291819 +// +// and are tabulated, with this numbering, in +// +// A. Kurganov, E. Tadmor, "Solution of two-dimensional Riemann problems +// for gas dynamics without Riemann problem solvers", Numer. Methods +// Partial Differ. Equ. 18 (5) (2002) 584-608, +// https://doi.org/10.1002/num.10025 +// +// The states registered below are those tables, verbatim; the article this +// repository reproduces (eq. 4) takes configuration 3 as its reference case +// for performance. // // Quadrants are numbered counter-clockwise from the upper right: // q[0] : x >= x0, y >= y0 q[1] : x < x0, y >= y0 @@ -28,6 +40,11 @@ // article this repository reproduces: with t_f = 0.8 the waves then fill // the domain without reaching its boundary, where the outflow condition // would pollute them. +// +// All three configurations below are invariant under the reflection about the +// diagonal (x,y,u,v) -> (y,x,v,u), so their solution must be too. +// tests/test_validation.py asserts that, and a single mistyped digit in one +// quadrant is enough to break it. // ============================================================================= namespace test_case::riemann_2d diff --git a/euler/init/sedov_blast.hpp b/euler/init/sedov_blast.hpp index 75f6811..d3044d7 100644 --- a/euler/init/sedov_blast.hpp +++ b/euler/init/sedov_blast.hpp @@ -23,7 +23,32 @@ // up immediately as a broken symmetry. // // The definition is dimension agnostic — only the volume over which the energy -// is spread changes — so the same case serves euler_2d and euler_3d. +// is spread changes — so the same case serves euler_1d, euler_2d and euler_3d. +// +// Reference solution +// ------------------ +// L.I. Sedov, "Similarity and Dimensional Methods in Mechanics", Academic +// Press, New York, 1959, chapter IV. +// J.R. Kamm, "Evaluation of the Sedov-von Neumann-Taylor Blast Wave +// Solution", report LA-UR-00-6055, Los Alamos National Laboratory, 2000. +// J.R. Kamm, F.X. Timmes, "On Efficient Generation of Numerically Robust +// Sedov Solutions", report LA-UR-07-2849, Los Alamos National Laboratory, +// 2007. +// +// The similarity solution puts the shock at +// +// r_s(t) = ( E t^2 / (alpha rho_0) )^(1/(nu+2)), +// +// nu = 1, 2, 3 being the geometry and alpha the dimensionless energy of the +// solution, a number that depends on nu and gamma alone. Integrating the +// similarity equations for gamma = 1.4 gives +// +// alpha = 1.077485 (planar, energy counted on both sides of the plane) +// 0.984074 (cylindrical) +// 0.851072 (spherical) +// +// python/sedov_exact.py computes these constants and the radius they give, +// and the validation suite measures the computed shock against it. // ============================================================================= namespace test_case::sedov_blast @@ -32,10 +57,18 @@ namespace test_case::sedov_blast inline constexpr double p_ambient = 1e-5; // ambient pressure (very small) inline constexpr double r_blast = 0.1; // blast radius - // Blast energy: the value that puts the shock at r = 1 at t = 1 for - // gamma = 1.4, one per geometry, from the Kamm & Timmes verification suite - // (planar 0.0673185, cylindrical 0.311357, spherical 0.851072; the spherical - // value is the one used by clawpack and by lanl/HARD as well). + // Blast energy, one per geometry: the standard cases of the Kamm report, + // which fix E so that the shock sits at r = 0.5, 0.75 and 1 at t = 1 for + // gamma = 1.4 and rho_0 = 1. The spherical value is the one clawpack and + // lanl/HARD use as well, and equals alpha, spherical being the geometry + // whose shock is normalised to r = 1. + // + // NOTE the planar energy is Kamm's, and his planar problem releases it on + // ONE side of the plane, while the deposit below is symmetric about the + // origin. With rho_0 = 1 the 1D shock therefore reaches 0.397 at t = 1 + // rather than 0.5; matching his planar case exactly would mean depositing + // twice this energy. The 2D and 3D cases have no such convention to trip + // over and land on 0.75 and 1. template constexpr double blast_energy() { diff --git a/euler/init/sod.hpp b/euler/init/sod.hpp index ce23ffc..3082300 100644 --- a/euler/init/sod.hpp +++ b/euler/init/sod.hpp @@ -19,6 +19,22 @@ // that the solution is not aligned with the mesh. Any directional bias in the // scheme or in the adaptation shows up as a distortion of what should stay a // planar wave. +// +// The states are those of +// +// G.A. Sod, "A survey of several finite difference methods for systems of +// nonlinear hyperbolic conservation laws", J. Comput. Phys. 27 (1) (1978) +// 1-31, https://doi.org/10.1016/0021-9991(78)90023-2 +// +// reprinted as test 1 of Table 4.1 of +// +// E.F. Toro, "Riemann Solvers and Numerical Methods for Fluid Dynamics. +// A Practical Introduction", 3rd ed., Springer, 2009, +// https://doi.org/10.1007/b79761 +// +// whose exact solution python/exact_riemann.py computes: p* = 0.30313, +// u* = 0.92745. The 45 degree rotation is ours, not Sod's; the article this +// repository reproduces uses the axis-aligned tube. // ============================================================================= namespace test_case::sod diff --git a/python/exact_riemann.py b/python/exact_riemann.py new file mode 100644 index 0000000..3eda40a --- /dev/null +++ b/python/exact_riemann.py @@ -0,0 +1,187 @@ +# Copyright 2025 the samurai team +# SPDX-License-Identifier: BSD-3-Clause +""" +Exact solution of the one-dimensional Riemann problem for an ideal gas. + +The shock tube cases are checked against this. A convergence order says how +fast an error decays; this says where the shock, the contact and the +rarefaction are. + +The algorithm is the classical one of + + E.F. Toro, "Riemann Solvers and Numerical Methods for Fluid Dynamics. + A Practical Introduction", 3rd ed., Springer, 2009, + https://doi.org/10.1007/b79761 + +chapter 4: the star pressure solves the pressure-function equation + + f_L(p) + f_R(p) + (u_R - u_L) = 0, + +f_K being the shock (Rankine-Hugoniot) branch for p > p_K and the rarefaction +(isentropic) branch for p <= p_K. It is solved by Newton iterations from the +two-rarefaction guess, then the solution is sampled at a given x/t. + +Run the module to reproduce the star states of Toro's Table 4.3: + + python exact_riemann.py +""" + +import numpy as np + +__all__ = ["star_state", "sample", "solution"] + + +def _f(p, rho_k, p_k, gamma): + """Toro eq. (4.6)-(4.7): pressure function of one side, and its derivative.""" + a_k = np.sqrt(gamma * p_k / rho_k) + + if p > p_k: # shock + A = 2.0 / ((gamma + 1.0) * rho_k) + B = (gamma - 1.0) / (gamma + 1.0) * p_k + root = np.sqrt(A / (B + p)) + return (p - p_k) * root, root * (1.0 - 0.5 * (p - p_k) / (B + p)) + + # rarefaction + ratio = p / p_k + power = (gamma - 1.0) / (2.0 * gamma) + return ( + 2.0 * a_k / (gamma - 1.0) * (ratio**power - 1.0), + 1.0 / (rho_k * a_k) * ratio ** (-(gamma + 1.0) / (2.0 * gamma)), + ) + + +def star_state(left, right, gamma=1.4, tol=1e-14, maxiter=100): + """Pressure and velocity of the star region between the two states. + + `left` and `right` are (rho, u, p) triples. Raises if the two states have + already produced a vacuum, which is the case the iteration cannot solve + (Toro sec. 4.3.3, pressure positivity condition). + """ + rho_l, u_l, p_l = left + rho_r, u_r, p_r = right + a_l = np.sqrt(gamma * p_l / rho_l) + a_r = np.sqrt(gamma * p_r / rho_r) + + du = u_r - u_l + if 2.0 / (gamma - 1.0) * (a_l + a_r) <= du: + raise ValueError("vacuum generated by the initial data; no star state") + + # two-rarefaction guess (Toro eq. 4.46), always positive + power = (gamma - 1.0) / (2.0 * gamma) + p = ( + (a_l + a_r - 0.5 * (gamma - 1.0) * du) + / (a_l / p_l**power + a_r / p_r**power) + ) ** (1.0 / power) + + for _ in range(maxiter): + f_l, df_l = _f(p, rho_l, p_l, gamma) + f_r, df_r = _f(p, rho_r, p_r, gamma) + step = (f_l + f_r + du) / (df_l + df_r) + p_new = max(p - step, tol) + if abs(p_new - p) / (0.5 * (p_new + p)) < tol: + p = p_new + break + p = p_new + else: + raise RuntimeError("the star pressure iteration did not converge") + + f_l, _ = _f(p, rho_l, p_l, gamma) + f_r, _ = _f(p, rho_r, p_r, gamma) + return p, 0.5 * (u_l + u_r + f_r - f_l) + + +def _sample_side(s, state, p_star, u_star, gamma, mirror): + """Sample the side of the contact the ray s falls on. + + Written once for both sides. `mirror` is +1 on the left and -1 on the right: + negating x and u turns the right state into a left one, so the left-running + wave formulas of Toro sec. 4.5 serve both, which is all his two symmetric + sampling branches say. + """ + rho_k, u_k, p_k = state + a_k = np.sqrt(gamma * p_k / rho_k) + + s, u_k, u_star = mirror * s, mirror * u_k, mirror * u_star + ratio = p_star / p_k + + if p_star > p_k: # shock, Toro eq. (4.52)-(4.53) + beta = (gamma - 1.0) / (gamma + 1.0) + speed = u_k - a_k * np.sqrt((gamma + 1.0) / (2.0 * gamma) * ratio + (gamma - 1.0) / (2.0 * gamma)) + if s <= speed: + return rho_k, mirror * u_k, p_k + return rho_k * (ratio + beta) / (beta * ratio + 1.0), mirror * u_star, p_star + + # rarefaction, Toro eq. (4.55)-(4.56) + a_star = a_k * ratio ** ((gamma - 1.0) / (2.0 * gamma)) + head, tail = u_k - a_k, u_star - a_star + if s <= head: + return rho_k, mirror * u_k, p_k + if s >= tail: + return rho_k * ratio ** (1.0 / gamma), mirror * u_star, p_star + + # inside the fan + u = 2.0 / (gamma + 1.0) * (a_k + 0.5 * (gamma - 1.0) * u_k + s) + a = 2.0 / (gamma + 1.0) * (a_k + 0.5 * (gamma - 1.0) * (u_k - s)) + return ( + rho_k * (a / a_k) ** (2.0 / (gamma - 1.0)), + mirror * u, + p_k * (a / a_k) ** (2.0 * gamma / (gamma - 1.0)), + ) + + +def sample(s, left, right, p_star, u_star, gamma=1.4): + """State (rho, u, p) on the ray x/t = s.""" + if s <= u_star: + return _sample_side(s, left, p_star, u_star, gamma, +1) + return _sample_side(s, right, p_star, u_star, gamma, -1) + + +def solution(x, t, left, right, x0=0.5, gamma=1.4): + """The exact solution at time t on the points x, as (rho, u, p) arrays.""" + p_star, u_star = star_state(left, right, gamma) + s = (np.asarray(x, dtype=float) - x0) / t + out = np.array([sample(si, left, right, p_star, u_star, gamma) for si in s]) + return out[:, 0], out[:, 1], out[:, 2] + + +# --------------------------------------------------------------------------- +# Self test +# --------------------------------------------------------------------------- +# The five shock tubes of Toro's Table 4.1, with the star states of his Table +# 4.3. Reproducing them is what makes this module usable as a reference. The +# values are kept as the book prints them, and the comparison only asks for the +# digits it actually printed: one unit of the last one, or six significant +# digits, whichever is looser. Test 5 needs the second bound, its initial data +# being the star state of tests 3 and 4 as the book rounded it before reusing +# it. +TORO_TESTS = { + 1: ((1.0, 0.0, 1.0), (0.125, 0.0, 0.1), "0.30313", "0.92745"), + 2: ((1.0, -2.0, 0.4), (1.0, 2.0, 0.4), "0.00189", "0.00000"), + 3: ((1.0, 0.0, 1000.0), (1.0, 0.0, 0.01), "460.894", "19.5975"), + 4: ((1.0, 0.0, 0.01), (1.0, 0.0, 100.0), "46.0950", "-6.19633"), + 5: ((5.99924, 19.5975, 460.894), (5.99242, -6.19633, 46.0950), "1691.64", "8.68975"), +} + + +def _printed_tolerance(text): + """How far from a published value a value may sit and still match it.""" + decimals = len(text.split(".")[1]) if "." in text else 0 + return max(10.0**-decimals, 5e-6 * abs(float(text))) + + +def _self_test(): + print(f"{'test':>4} {'p* (Toro)':>10} {'p* (here)':>14} {'u* (Toro)':>10} {'u* (here)':>14}") + ok = True + for number, (left, right, p_ref, u_ref) in TORO_TESTS.items(): + p_star, u_star = star_state(left, right) + print(f"{number:>4} {p_ref:>10} {p_star:>14.6g} {u_ref:>10} {u_star:>14.6g}") + ok &= abs(p_star - float(p_ref)) <= _printed_tolerance(p_ref) + ok &= abs(u_star - float(u_ref)) <= _printed_tolerance(u_ref) + print("\nagrees with Table 4.3 to the printed digits" if ok else "\nDOES NOT agree with Table 4.3") + return ok + + +if __name__ == "__main__": + import sys + + sys.exit(0 if _self_test() else 1) diff --git a/python/sedov_exact.py b/python/sedov_exact.py new file mode 100644 index 0000000..fda2d93 --- /dev/null +++ b/python/sedov_exact.py @@ -0,0 +1,154 @@ +# Copyright 2025 the samurai team +# SPDX-License-Identifier: BSD-3-Clause +""" +Exact self-similar solution of the Sedov blast wave, in one, two and three +dimensions. + +This is what the Sedov case is checked against. A point-like release of energy E +in an ambient gas at rest drives a shock whose radius obeys + + r_s(t) = ( E t^2 / (alpha rho_0) )^(1/(nu+2)), + +nu = 1, 2, 3 being planar, cylindrical and spherical geometry. The constant +alpha depends on nu and gamma alone, and is computed here rather than quoted: +the similarity equations are integrated inward from the shock, where the strong +shock jump conditions give the starting values, and alpha follows from the +energy integral over the profile. + + L.I. Sedov, "Similarity and Dimensional Methods in Mechanics", Academic + Press, New York, 1959, chapter IV. + J.R. Kamm, F.X. Timmes, "On Efficient Generation of Numerically Robust + Sedov Solutions", report LA-UR-07-2849, Los Alamos National Laboratory, + 2007. + +The planar constant is computed with the energy counted on both sides of the +plane, which is how euler/init/sedov_blast.hpp deposits it. Kamm's planar +standard case counts one side, so his planar energy corresponds to half of +this one; the cylindrical and spherical cases have no such convention. + +Run the module to print the constants and check the spherical one against the +value published for gamma = 1.4: + + python sedov_exact.py +""" + +import numpy as np + +__all__ = ["alpha", "shock_radius", "profile"] + +# The similarity integration is deterministic and takes about half a second, so +# the constants are memoised rather than tabulated: no number in this file is +# copied from a paper. +_ALPHA_CACHE = {} + + +def _derivatives(lam, y, nu, gamma): + """Right-hand side of the similarity equations, in the variables + + rho = rho_0 G(lam), u = rdot_s V(lam), p = rho_0 rdot_s^2 P(lam), + + lam = r / r_s. Continuity, momentum and the entropy condition, with the + time dependence eliminated through r_s ~ t^(2/(nu+2)), leave three coupled + ordinary equations in lam. + """ + G, V, P = y + D = V - lam + Vp = (nu - gamma * (nu - 1) * V / lam - nu * V * D * G / (2.0 * P)) / (gamma - D * D * G / P) + Gp = -(G * Vp + (nu - 1) * G * V / lam) / D + Pp = G * (nu * V / 2.0 - D * Vp) + return np.array([Gp, Vp, Pp]) + + +def _integrate(nu, gamma, steps, lam_min): + """Integrate from the shock at lam = 1 down to lam_min, by RK4. + + Returns lam increasing, with G, V, P alongside. + """ + y = np.array( + [ + (gamma + 1.0) / (gamma - 1.0), # strong shock jump conditions + 2.0 / (gamma + 1.0), + 2.0 / (gamma + 1.0), + ] + ) + + h = -(1.0 - lam_min) / steps + lam = 1.0 + lams, ys = [lam], [y.copy()] + + for _ in range(steps): + k1 = _derivatives(lam, y, nu, gamma) + k2 = _derivatives(lam + 0.5 * h, y + 0.5 * h * k1, nu, gamma) + k3 = _derivatives(lam + 0.5 * h, y + 0.5 * h * k2, nu, gamma) + k4 = _derivatives(lam + h, y + h * k3, nu, gamma) + y = y + h / 6.0 * (k1 + 2.0 * k2 + 2.0 * k3 + k4) + lam += h + if not np.all(np.isfinite(y)) or y[2] <= 0.0: + break + lams.append(lam) + ys.append(y.copy()) + + return np.array(lams)[::-1], np.array(ys)[::-1] + + +def alpha(dim, gamma=1.4, steps=20000, lam_min=1e-6): + """Dimensionless energy of the similarity solution, for this geometry. + + The energy of the solution, in the similarity variables, is + + E = sigma_nu rho_0 r_s^nu rdot_s^2 Int, Int = int_0^1 (G V^2 / 2 + + P / (gamma - 1)) lam^(nu-1) dlam, + + and alpha = E t^2 / (rho_0 r_s^(nu+2)) follows from rdot_s = 2 r_s / + ((nu+2) t). sigma_nu is 2, 2 pi, 4 pi: the planar solution is counted on + both sides of the plane. + """ + key = (dim, gamma, steps, lam_min) + if key not in _ALPHA_CACHE: + lam, y = _integrate(dim, gamma, steps, lam_min) + G, V, P = y[:, 0], y[:, 1], y[:, 2] + integral = np.trapezoid((0.5 * G * V * V + P / (gamma - 1.0)) * lam ** (dim - 1), lam) + sigma = {1: 2.0, 2: 2.0 * np.pi, 3: 4.0 * np.pi}[dim] + _ALPHA_CACHE[key] = 4.0 * sigma * integral / (dim + 2.0) ** 2 + return _ALPHA_CACHE[key] + + +def shock_radius(energy, t, dim, gamma=1.4, rho_ambient=1.0): + """Where the shock stands at time t.""" + return (energy * t * t / (alpha(dim, gamma) * rho_ambient)) ** (1.0 / (dim + 2.0)) + + +def profile(energy, t, dim, gamma=1.4, rho_ambient=1.0, p_ambient=0.0): + """The exact solution at time t, as (r, rho, u, p) sampled on the profile. + + The points are those the integration produced, which cluster where the + solution varies; the last one is the shock. Outside it the gas is still + ambient, which the caller usually knows already. + """ + lam, y = _integrate(dim, gamma, 20000, 1e-6) + r_s = shock_radius(energy, t, dim, gamma, rho_ambient) + speed = 2.0 * r_s / ((dim + 2.0) * t) + return ( + lam * r_s, + rho_ambient * y[:, 0], + speed * y[:, 1], + rho_ambient * speed * speed * y[:, 2] + p_ambient, + ) + + +if __name__ == "__main__": + import sys + + # Published for gamma = 1.4: the spherical blast reaches r = 1 at t = 1 for + # E = 0.851072, so alpha is that same number. It is the one constant of the + # three that several codes quote, hence the one worth checking against. + SPHERICAL = 0.851072 + + print(f"gamma = 1.4\n{'geometry':>12} {'alpha':>10} E for r_s = 1 at t = 1") + for dim, name in ((1, "planar"), (2, "cylindrical"), (3, "spherical")): + a = alpha(dim) + print(f"{name:>12} {a:>10.6f} {a:.6f}") + + deviation = abs(alpha(3) - SPHERICAL) + print(f"\nspherical against the published {SPHERICAL}: {deviation:.1e}") + sys.exit(0 if deviation < 5e-7 else 1) diff --git a/tests/test_validation.py b/tests/test_validation.py index debc3a7..dfa5635 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -17,7 +17,7 @@ import numpy as np import pytest -from util import ROOT, level_count, read, run_case +from util import ROOT, level_count, read, run_case, sedov_blast_energy sys.path.insert(0, str(ROOT / "python")) from error_analysis import errors, exact_vortex # noqa: E402 @@ -91,3 +91,118 @@ def test_adaptation_costs_no_accuracy(tmp_path): assert adapted_l1 < 1.5 * uniform_l1, ( f"adapted L1 {adapted_l1:.3e} against uniform {uniform_l1:.3e}" ) + + +# --------------------------------------------------------------------------- +# The published test cases, against the solution their paper gives +# --------------------------------------------------------------------------- +# These check that the cases reproduce the papers they were taken from. +# test_regression.py checks something else, that they still compute what they +# computed yesterday. The thresholds are what a first-order scheme +# reaches at these resolutions, with room to spare; they should be tightened +# when the MUSCL-Hancock update lands. +from exact_riemann import solution as exact_riemann_solution # noqa: E402 +from exact_riemann import star_state # noqa: E402 +from sedov_exact import shock_radius # noqa: E402 + + +def test_double_rarefaction_matches_toro_test_2(tmp_path): + """The 123 problem against the exact solution of Toro's Table 4.1, test 2.""" + level, tf = 12, 0.15 + left, right = (1.0, -2.0, 0.4), (1.0, 2.0, 0.4) + + out, stem = run_case("euler_1d", tmp_path, "double_rarefaction", + min_level=level, max_level=level, Tf=tf) + centers, volume, fields = read(out / stem) + x = centers[:, 0] + rho, u, p = exact_riemann_solution(x, tf, left, right, x0=0.5) + + def l1(computed, exact): + return float(np.sum(np.abs(computed - exact) * volume) / np.sum(volume)) + + assert l1(fields["rho"], rho) < 1e-2 + assert l1(fields["velocity"][:, 0], u) < 3e-2 + assert l1(fields["pressure"], p) < 1e-2 + + # the near-vacuum is what the case is for: a first-order scheme sits above + # the exact star pressure, and must not sit far above it + p_star, _ = star_state(left, right) + assert p_star < fields["pressure"].min() < 3.0 * p_star + + +def test_sod_matches_its_exact_solution(tmp_path): + """Sod's tube, rotated 45 degrees, against the exact solution. + + Two things at once: the waves must be in the right place, and the solution + must stay one-dimensional along the diagonal. The transverse velocity is the + isotropy measure the rotation was introduced for. + """ + level, tf = 8, 0.2 + left, right = (1.0, 0.0, 1.0), (0.125, 0.0, 0.1) + + out, stem = run_case("euler_2d", tmp_path, "sod", + min_level=level, max_level=level, Tf=tf) + centers, volume, fields = read(out / stem) + x, y = centers[:, 0], centers[:, 1] + + # coordinate across the interface, and the velocity split along and across it + band = np.abs(x - y) < 0.3 # away from the corners, where outflow is not exact + xi = (x + y - 1.0) / np.sqrt(2.0) + along = (fields["velocity"][:, 0] + fields["velocity"][:, 1]) / np.sqrt(2.0) + across = (fields["velocity"][:, 0] - fields["velocity"][:, 1]) / np.sqrt(2.0) + + rho, u, p = exact_riemann_solution(xi[band], tf, left, right, x0=0.0) + weight = volume[band] + + def l1(computed, exact): + return float(np.sum(np.abs(computed - exact) * weight) / np.sum(weight)) + + assert l1(fields["rho"][band], rho) < 2e-2 + assert l1(along[band], u) < 2e-2 + assert l1(fields["pressure"][band], p) < 2e-2 + assert np.abs(across[band]).max() < 1e-2 + + +@pytest.mark.parametrize("binary,dim,level,tf", [("euler_2d", 2, 9, 0.6), ("euler_1d", 1, 12, 0.6)]) +def test_sedov_shock_sits_where_the_similarity_solution_puts_it(binary, dim, level, tf, tmp_path): + """The blast energy is only meaningful through the shock radius it produces. + + Measured as the outermost radius at which the density is still above halfway + to its peak, which is where a smeared shock front has its middle. A wrong + blast energy shows up here and nowhere else: every other check of this case + is a symmetry or a positivity, and both survive any energy at all. + """ + out, stem = run_case(binary, tmp_path, "sedov_blast", + min_level=level, max_level=level, Tf=tf) + centers, _, fields = read(out / stem) + + r = np.linalg.norm(centers[:, :dim], axis=1) + rho = fields["rho"] + front = r[rho > 0.5 * (rho.max() + 1.0)].max() + + expected = shock_radius(sedov_blast_energy(dim), tf, dim) + assert abs(front / expected - 1.0) < 0.1, f"shock at {front:.4f}, similarity solution at {expected:.4f}" + + +@pytest.mark.parametrize("case", ["riemann2d_config3", "riemann2d_config4", "riemann2d_config12"]) +def test_riemann_2d_keeps_the_symmetry_of_its_configuration(case, tmp_path): + """Lax & Liu configurations 3, 4 and 12 are symmetric about the diagonal. + + Their initial data is invariant under (x,y,u,v) -> (y,x,v,u), so the solution + is too, and a uniform mesh carries that symmetry exactly. It is the cheapest + check that the states were copied correctly: a single mistyped digit in one + quadrant breaks it, while leaving a picture that still looks plausible. + """ + level, tf = 7, 0.2 + out, stem = run_case("euler_2d", tmp_path, case, + min_level=level, max_level=level, Tf=tf) + centers, _, fields = read(out / stem) + + n = int(round(np.sqrt(centers.shape[0]))) + order = np.lexsort((centers[:, 0], centers[:, 1])) + rho = fields["rho"][order].reshape(n, n) + vx = fields["velocity"][order, 0].reshape(n, n) + vy = fields["velocity"][order, 1].reshape(n, n) + + assert np.abs(rho - rho.T).max() < 1e-12 + assert np.abs(vx - vy.T).max() < 1e-12 diff --git a/tests/util.py b/tests/util.py index 18fc6ea..b879fea 100644 --- a/tests/util.py +++ b/tests/util.py @@ -10,6 +10,7 @@ """ import os +import re import subprocess from pathlib import Path @@ -120,6 +121,19 @@ def finest_cell_size(volume, dim): return volume.min() ** (1.0 / dim) +def sedov_blast_energy(dim): + """The blast energy euler/init/sedov_blast.hpp compiles in, read from it. + + Restating the three numbers here would make a second source of truth that + eventually stops agreeing with the first. + """ + text = (ROOT / "euler" / "init" / "sedov_blast.hpp").read_text() + body = text.split("constexpr double blast_energy()", 1)[1] + values = re.findall(r"return\s+([0-9.eE+-]+);", body)[:3] + assert len(values) == 3, f"expected one blast energy per dimension, read {values}" + return float(values[dim - 1]) + + def level_count(volume): """Number of distinct cell sizes: 1 on a uniform mesh, more once adapted. From c2c1b0e361a1947cbad547e1235815649da7d028 Mon Sep 17 00:00:00 2001 From: Loic Gouarin Date: Sat, 12 Sep 2026 15:46:06 +0200 Subject: [PATCH 7/8] Deposit the planar Sedov energy on both sides of the origin Kamm's planar standard case releases E = 0.0673185 on one side of the plane and puts its shock at r = 0.5 at t = 1. The 1D case here straddles the origin and drives two shocks, so the same number split between them left each one at 0.397 instead. Depositing twice it gives each shock his energy, and the three dimensions now land on 0.5, 0.75 and 1 at t = 1 as the report tabulates them. python/sedov_exact.py computes the similarity constants this rests on, and the validation run measures the 1D front against them. The reference fields of the 1D sedov_blast move with it, for the three schemes. --- euler/init/sedov_blast.hpp | 12 +++++------- tests/reference/euler_1d_sedov_blast_hll.npz | Bin 2006 -> 2232 bytes tests/reference/euler_1d_sedov_blast_hllc.npz | Bin 2046 -> 2209 bytes .../euler_1d_sedov_blast_rusanov.npz | Bin 1985 -> 2176 bytes 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/euler/init/sedov_blast.hpp b/euler/init/sedov_blast.hpp index d3044d7..7870f23 100644 --- a/euler/init/sedov_blast.hpp +++ b/euler/init/sedov_blast.hpp @@ -63,12 +63,10 @@ namespace test_case::sedov_blast // lanl/HARD use as well, and equals alpha, spherical being the geometry // whose shock is normalised to r = 1. // - // NOTE the planar energy is Kamm's, and his planar problem releases it on - // ONE side of the plane, while the deposit below is symmetric about the - // origin. With rho_0 = 1 the 1D shock therefore reaches 0.397 at t = 1 - // rather than 0.5; matching his planar case exactly would mean depositing - // twice this energy. The 2D and 3D cases have no such convention to trip - // over and land on 0.75 and 1. + // The planar value is twice Kamm's 0.0673185 because his planar blast + // releases its energy on one side of the plane, while the deposit below + // straddles the origin and feeds two shocks. Doubling it gives each shock + // his energy, and puts both where his solution puts its own, at 0.5. template constexpr double blast_energy() { @@ -76,7 +74,7 @@ namespace test_case::sedov_blast if constexpr (dim == 1) { - return 0.0673185; + return 0.134637; // = 2 x 0.0673185, see above } else if constexpr (dim == 2) { diff --git a/tests/reference/euler_1d_sedov_blast_hll.npz b/tests/reference/euler_1d_sedov_blast_hll.npz index a520356711675a14033d2a93f2621900ff5f8dfe..2e4cbf48e8aa782b096e1d8d9f5557593dcbe4c9 100644 GIT binary patch delta 955 zcmV;s14R7R54aJq#{vY30?oUV%K{$(J(KGKR)6_4E0kVZ3!yLM)Ut!oxl0#dwZ?#4D6==-`m@=2(JGKq|M|lX8#A$=j_ zIYG^VnX3!6#}#U?0@NKacfs5_1M2P;s6P^+{yGBnC(PflaDasiESzBB1`9`6xUv$6 zhf#Wz9;Jz=0Z>Z=1T6pn00;m803iUtQUd7blLiDN0ZWrB1X_Rj^dBf4TJQu+7iKxm z1<@OfLd1D~J+W&)9KOI_3rASE{uw0kJxY(#!+{0>P)h>@EdUGv00;m803iSz5Pn3HPz59b zl9THKM3cD%5P#XgVEIgMi8&R!gBSiwn`{%hr(lVc@)~``y{r6hIRraD-FwV{`|w=r zCHqX1+h#5^v)TV~!AY*Clc(%IKUb1#^{u`8e|h!qS@Hku{&xMywyA8F_ZvUw+3a)a z(tev9;oX6z7xurmD2&ZWJ-NSTPD&b+;i3KE<{Q?}N`KqF|D($H?p(uF`}Y?g^FNnA zW52b8(|kSdrv3U>mRua~llSv4n%-^u({BG359w>d`uzKwZfsC9oqloO>c4(h>^|4+ zL-)thYaSqRyT#=jLF()j48Z#AT^EAQvHu7$*IpN5kNr-Fz4qTA?ywJoxXZp8;!gWd z5O>?#K}P&xZvyd`eFwy!_J1J$wugp;{U=Dc*qcGZ$^IrJ-0aq8g2T~v8^5d&FkEfZ z7fW&!*@oJr*lxBEDs8eJh&UewqhPoIlcffN1&RXAyFHUE2QUS|Qt0PPlVJxH0xtxU dcn2N@91wm)l9OQv6#=-Du?HUphz9@w004>H=@M~iMS*ZSNMqn(*T`{AXqAvb--q!gsd*plU zp1D%@@4>phA9o9u7t6n`3{%;c9{4xQzWD#w-C{BG-}-z0-hXX+b^8C8Yckw3-)sM_ zSp1cpZ`qzrUh01*STB`$JUakE8Exw|~C8vJR z_W3nC(xV^$|Lzv@o&QYC3|oWh#CHulPfNb?o3T6bU&GIAu`BcM1k@is#3-h>p`fW% zT1ST6%Fg{|V3oxsh5&D77F`Ag1`Z%rWH9^GU^&^5MTLM8d6b^Vh4*4zG7B$<2l zUs`PP^@XUr!j_p#?@I*MuCRamY3F?ZH-BWe%j`b+`R2K25x)NSo(ufGw4L8P?eq7W z`=>pdFzG~m)_=SAFE5EVNxyl1G9x$UOY-Ku>pSKao$h@5t*3ljWKsUz-27SFZGT&R zulxO@FZuQ9beRqOsV{w|h}mUCuh+{h`QG@_v3jSv^c$nK{I{w__axbQx=N+#ospZd z*P#5s9oAy?Gj|Q@5B&Mc_Ub&>iv5WX8MwtGEDj#x73*V`oxk{thOJB{nom_Gzqk4Q)oP`vd4@0F-Ftfdnmm8x=7RVcXUwPTSFicL{QTT+ zX~8#^{5`F9hQsb}>hFKLzq%*g(dmC1ANxH0W7_r3zw!I#e3-NU(}{nXGcVu&_~!2B z|A!M>J6Uz4zZ+|v{{A{u=Z1aesl9Lerr-L0e{R6LXIR{DK76#!PG!!UMe!Ytht7&g^=-TI?YxEr>*9t+#>wsMO{}2w$~2je!$1ZU z$vlh<3=P0I=K)4L3^Xu)VV)etA?E-J8!fB~>{uBX%2IRklQT;y_3{cT1H4(;K-yV> LPztDH8JGtEBBgjx diff --git a/tests/reference/euler_1d_sedov_blast_hllc.npz b/tests/reference/euler_1d_sedov_blast_hllc.npz index 65c6c73d5efd2efad0fafd3a40fc33c87859209b..0490b02f2175c783d40e2fc14968c13e2088f8a5 100644 GIT binary patch delta 978 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 f6;uXzGcxHiBa#3pkR-9{w3-~vA Date: Sun, 13 Sep 2026 06:50:12 +0200 Subject: [PATCH 8/8] fix CI --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2cf145..498fd4e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,12 @@ concurrency: jobs: build-and-test: runs-on: ubuntu-latest + env: + # Some of the Azure runners expose a MANA RDMA device. UCX picks it up, + # fails to open it, and MPI_Init aborts, which fails every test before it + # runs. The suite drives one rank, so keeping UCX on shared memory and TCP + # costs nothing. + UCX_TLS: sm,self,tcp steps: - uses: actions/checkout@v4