From f45df1c2a780e126c3f6ba6affbbf4894f01b10a Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Tue, 30 Jun 2026 18:43:19 -0400 Subject: [PATCH 1/3] Rosenbrock: add step-rejection logic for SDC --- .../Rosenbrock/rosenbrock_integrator.H | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/integration/Rosenbrock/rosenbrock_integrator.H b/integration/Rosenbrock/rosenbrock_integrator.H index 535bad586..34b8e5a40 100644 --- a/integration/Rosenbrock/rosenbrock_integrator.H +++ b/integration/Rosenbrock/rosenbrock_integrator.H @@ -187,9 +187,10 @@ bool matrix_is_finite (const MatrixType& matrix) return true; } -template +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -bool valid_integrator_state (const amrex::Array1D& y) +bool valid_integrator_state ([[maybe_unused]] amrex::Real time, [[maybe_unused]] const BurnT& state, + const amrex::Array1D& y) { for (int n = 1; n <= int_neqs; ++n) { const amrex::Real yn = y(n); @@ -214,6 +215,24 @@ bool valid_integrator_state (const amrex::Array1D& y) } #endif +#ifdef SDC + amrex::Real rho_current = state.rho_orig + time * state.ydot_a[SRHO]; + + for (int n = 1; n <= NumSpec; ++n) { + if (y(n) < -integrator_rp::atol_spec) { + return false; + } + + if (! integrator_rp::use_number_densities && y(n) > rho_current) { + return false; + } + } + + if (y(net_ienuc) <= 0.0_rt) { + return false; + } +#endif + return true; } @@ -482,7 +501,10 @@ int rosenbrock_integrator (BurnT& state, rosenbrock_t()>& } } - if (! rosenbrock::valid_integrator_state(rstate.ynew)) { + // intermediate stage time + amrex::Real _time = x + C::ct(istage) * h; + + if (! rosenbrock::valid_integrator_state(_time, state, rstate.ynew)) { h *= 0.25_rt; reject = true; n_reject += 1; @@ -520,7 +542,8 @@ int rosenbrock_integrator (BurnT& state, rosenbrock_t()>& rstate.n_step += 1; - const bool valid_state = rosenbrock::valid_integrator_state(rstate.ynew); + amrex::Real _time = x + h; + const bool valid_state = rosenbrock::valid_integrator_state(_time, state, rstate.ynew); if (! valid_state) { reject = true; n_reject += 1; From 4b5b96d53a7891e31e88013670ab11d22768217d Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 1 Jul 2026 10:19:49 -0400 Subject: [PATCH 2/3] fix the fit --- integration/Rosenbrock/rosenbrock_integrator.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration/Rosenbrock/rosenbrock_integrator.H b/integration/Rosenbrock/rosenbrock_integrator.H index 34b8e5a40..f7557165b 100644 --- a/integration/Rosenbrock/rosenbrock_integrator.H +++ b/integration/Rosenbrock/rosenbrock_integrator.H @@ -219,11 +219,11 @@ bool valid_integrator_state ([[maybe_unused]] amrex::Real time, [[maybe_unused]] amrex::Real rho_current = state.rho_orig + time * state.ydot_a[SRHO]; for (int n = 1; n <= NumSpec; ++n) { - if (y(n) < -integrator_rp::atol_spec) { + if (y(n) < -integrator_rp::atol_spec * rho_current) { return false; } - if (! integrator_rp::use_number_densities && y(n) > rho_current) { + if (y(n) > (1.0_rt + integrator_rp::atol_spec) * rho_current) { return false; } } From 4824191acdef229d3214481d99089a9dacae0ffc Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Wed, 1 Jul 2026 10:40:22 -0400 Subject: [PATCH 3/3] update benchmark --- .../aprox19_Rosenbrock_state_over_time.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/unit_test/burn_cell_sdc/ci-benchmarks/aprox19_Rosenbrock_state_over_time.txt b/unit_test/burn_cell_sdc/ci-benchmarks/aprox19_Rosenbrock_state_over_time.txt index e5f5882fa..b24b6d047 100644 --- a/unit_test/burn_cell_sdc/ci-benchmarks/aprox19_Rosenbrock_state_over_time.txt +++ b/unit_test/burn_cell_sdc/ci-benchmarks/aprox19_Rosenbrock_state_over_time.txt @@ -3,11 +3,11 @@ 1e-10 1e+06 3.02858e+09 0.706587 0.00187781 0.215408 0.018277 0.0328286 0.0249997 2.1703e-05 3.97681e-09 1.44285e-11 1.21805e-15 1.84281e-20 1.24853e-25 1e-30 1e-30 1e-30 1e-30 1e-30 1.326e-30 1.326e-30 3.16228e-10 1e+06 3.03478e+09 0.705507 0.000621696 0.216227 0.00928497 0.0432755 0.024999 8.50451e-05 4.8139e-08 4.59412e-11 5.39967e-15 2.46795e-19 5.22916e-24 5.56043e-30 1e-30 1e-30 1e-30 1e-30 4.98321e-30 4.98321e-30 1e-09 1e+06 3.03971e+09 0.704283 0.000198657 0.216431 0.00109531 0.0526512 0.0249968 0.000342911 6.19758e-07 5.30816e-10 5.52756e-14 5.55311e-18 3.10505e-22 7.89137e-28 1.00062e-30 1e-30 1e-30 1e-30 1.85325e-29 1.85325e-29 -3.16228e-09 1e+06 3.04074e+09 0.704146 6.29115e-05 0.216257 1.27682e-06 0.0533161 0.0249897 0.00121971 7.35442e-06 1.85964e-08 4.22034e-12 9.17239e-16 1.11105e-19 6.35478e-25 2.18028e-30 1.00001e-30 1e-30 1e-30 6.41836e-29 6.41836e-29 - 1e-08 1e+06 3.04176e+09 0.70416 2.02945e-05 0.215457 1e-30 0.0514255 0.0249673 0.00389252 7.69421e-05 6.33172e-07 4.58512e-10 3.13381e-13 1.17255e-16 2.02585e-21 1.06369e-26 1.01828e-30 1.00001e-30 1e-30 2.11343e-28 2.11343e-28 -3.16228e-08 1e+06 3.04471e+09 0.704164 6.45032e-06 0.212968 2.58574e-11 0.0459009 0.0248981 0.011318 0.000724836 1.93831e-05 4.52477e-08 9.93417e-11 1.19159e-13 6.58859e-18 1.11508e-22 6.7928e-28 1e-30 1e-30 6.98363e-28 6.98363e-28 - 1e-07 1e+06 3.05275e+09 0.704166 2.03538e-06 0.206101 2.09306e-11 0.0322296 0.0246918 0.0266625 0.00563902 0.00050403 3.84343e-06 2.73378e-08 1.05952e-10 1.89002e-14 1.04953e-18 2.40869e-23 1e-30 1e-30 2.44823e-27 2.4427e-27 -3.16228e-07 1e+06 3.07034e+09 0.704166 6.23124e-07 0.191016 1.67082e-11 0.0110247 0.0241129 0.034574 0.0261435 0.00872747 0.00022935 5.47621e-06 7.07435e-08 4.19739e-11 8.0732e-15 8.27539e-19 1.75114e-23 3.2287e-27 9.9353e-27 6.58499e-25 - 1e-06 1e+06 3.09568e+09 0.704166 1.91644e-07 0.169097 1.16129e-11 0.00048084 0.0224667 0.00929987 0.0309788 0.057018 0.00594679 0.00052091 2.41397e-05 5.01037e-08 3.38968e-11 1.21299e-14 8.94134e-19 1.61876e-22 4.89043e-26 3.31161e-20 -3.16228e-06 1e+06 3.11505e+09 0.704167 5.91647e-08 0.150119 8.16837e-12 6.80402e-08 0.0180596 0.000891645 0.00274039 0.0735085 0.0352672 0.0127917 0.00243622 1.92922e-05 4.8563e-08 6.31556e-11 1.66878e-14 2.97805e-18 3.33147e-25 6.18066e-16 - 1e-05 1e+06 3.14015e+09 0.704167 1.86839e-08 0.120634 4.2724e-12 4.83314e-09 0.00987337 0.000461087 0.000861065 0.026814 0.0368458 0.0509423 0.0478243 0.00156166 1.5254e-05 7.37278e-08 7.0574e-11 1.23779e-14 2.01181e-21 2.61385e-12 +3.16228e-09 1e+06 3.04074e+09 0.704146 6.29132e-05 0.216257 1.27674e-06 0.0533161 0.0249897 0.00121971 7.35442e-06 1.85964e-08 4.22034e-12 9.17238e-16 1.11105e-19 6.35476e-25 2.18028e-30 1.00001e-30 1e-30 1e-30 6.41836e-29 6.41836e-29 + 1e-08 1e+06 3.04176e+09 0.70416 1.98924e-05 0.215457 2.39966e-11 0.0514253 0.0249673 0.00389252 7.69421e-05 6.33173e-07 4.58512e-10 3.13393e-13 1.17279e-16 2.03461e-21 1.12666e-26 1.03333e-30 1.00001e-30 1e-30 2.11342e-28 2.11342e-28 +3.16228e-08 1e+06 3.04471e+09 0.704165 6.40892e-06 0.212968 2.33019e-11 0.0459007 0.0248981 0.011318 0.000724835 1.93831e-05 4.52476e-08 9.93416e-11 1.19159e-13 6.58855e-18 1.11506e-22 6.79241e-28 1e-30 1e-30 6.98362e-28 6.98362e-28 + 1e-07 1e+06 3.05275e+09 0.704166 2.03124e-06 0.206101 2.10561e-11 0.0322295 0.0246918 0.0266625 0.005639 0.000504029 3.84342e-06 2.73377e-08 1.05951e-10 1.88999e-14 1.04948e-18 2.40832e-23 1e-30 1e-30 2.44822e-27 2.44269e-27 +3.16228e-07 1e+06 3.07034e+09 0.704166 6.22735e-07 0.191016 1.67082e-11 0.0110247 0.0241129 0.0345739 0.0261434 0.00872745 0.00022935 5.4762e-06 7.07433e-08 4.19738e-11 8.07318e-15 8.27536e-19 1.75113e-23 3.22869e-27 9.93526e-27 6.58497e-25 + 1e-06 1e+06 3.09567e+09 0.704167 1.91608e-07 0.169097 1.1613e-11 0.000480836 0.0224667 0.00929984 0.0309787 0.0570179 0.00594678 0.000520909 2.41397e-05 5.01036e-08 3.38968e-11 1.21299e-14 8.94136e-19 1.61877e-22 4.89041e-26 3.31162e-20 +3.16228e-06 1e+06 3.11505e+09 0.704167 5.91612e-08 0.150119 8.1684e-12 6.8041e-08 0.0180596 0.000891648 0.0027404 0.0735083 0.0352671 0.0127917 0.00243622 1.92922e-05 4.85629e-08 6.31553e-11 1.66875e-14 2.978e-18 3.33146e-25 6.18056e-16 + 1e-05 1e+06 3.14015e+09 0.704167 1.86836e-08 0.120635 4.27242e-12 4.83316e-09 0.00987336 0.000461087 0.000861064 0.026814 0.0368457 0.0509422 0.0478243 0.00156166 1.52541e-05 7.3728e-08 7.05731e-11 1.23777e-14 2.01191e-21 2.61382e-12