hermes-3 icon indicating copy to clipboard operation
hermes-3 copied to clipboard

D-T-He 1D-recycling integrated (regression) test.

Open oparry-ukaea opened this issue 1 month ago • 3 comments

New integrated regression test for reaction diagnostics. Adds T and He ions,atoms to the 1D-recycling example in order to test non-symmetric charge exchange.

oparry-ukaea avatar Nov 17 '25 10:11 oparry-ukaea

Very weird test failure. On the CI, the integration tests are ostensibly configured with -DCMAKE_BUILD_TYPE=Release (i.e. -O3), but the diagnostics computed in the new test all match the reference data generated on my desktop with -O0. It's not just close, they're the same to within 4 ULPs. If I fudge it by setting the test to always compare against the -O0 reference data, it passes on CI.

Not sure what's going on here...

oparry-ukaea avatar Nov 18 '25 10:11 oparry-ukaea

@mikekryjak I've rejigged this test so that it applies strict (same double) tolerances when using -O0 or -01, but allows larger differences with -O2, -O3 or -Ofast.

I don't fully understand why those higher optimisation levels change the result on some cpus but not on others (e.g. those used by the default github runners). My local builds were using exactly the same gcc version and virtually identical flags to the github build... maybe the runner's architecture doesn't allow the same vectorisation that I was getting? Not sure.

Anyway, I think that's as good as I can do for now!

oparry-ukaea avatar Nov 21 '25 15:11 oparry-ukaea

Following advice from the dev meeting yesterday, I'll try and make this test more robust by comparing at steady state instead.

oparry-ukaea avatar Nov 25 '25 08:11 oparry-ukaea

This case sounds more and more useful the more I look at it. Two comments:

  • Add diagnose = true under each species block in the input file to enable all the diagnostic variables which will then allow temperature to be saved. We need temperature because it's the field most affected by conduction.
  • If we add thermal force, then it will basically test all the closure apart from electron viscosity, which would be awesome. However, thermal force currently won't work for interactions between light species because the closure is not valid in this limit: https://github.com/boutproject/hermes-3/blob/e027256ddb126faf676b453429352abd20048c17/docs/sphinx/equations.rst?plain=1#L562-L564 https://github.com/boutproject/hermes-3/blob/e027256ddb126faf676b453429352abd20048c17/src/thermal_force.cxx#L75-L81

Can we add an overwrite flag and include it in this simulation for testing purposes? We can then use it to test https://github.com/boutproject/hermes-3/pull/399.

mikekryjak avatar Nov 27 '25 09:11 mikekryjak

Can we add an overwrite flag and include it in this simulation for testing purposes? We can then use it to test #399.

This seems to increase the test (serial) run time from ~42 s to ~180 s...

oparry-ukaea avatar Dec 02 '25 10:12 oparry-ukaea

Can we add an overwrite flag and include it in this simulation for testing purposes? We can then use it to test #399.

This seems to increase the test (serial) run time from ~42 s to ~180 s...

Can you shorten the test? Now that we have the Zenodo route, could we use it to store the restart file? Saying that, I haven't implemented it yet...

mikekryjak avatar Dec 02 '25 11:12 mikekryjak

Currently I'm running from flat initial profiles with

nout = 3
timestep = 5000

Could certainly try restart files instead... I'll take a look at the CMake changes that David pointed us to and see how easy it it is to cherry pick them onto their own branch.

oparry-ukaea avatar Dec 02 '25 12:12 oparry-ukaea