diff --git a/Docs/source/networks.rst b/Docs/source/networks.rst index ac6ebc07d..17574ea9b 100644 --- a/Docs/source/networks.rst +++ b/Docs/source/networks.rst @@ -185,16 +185,18 @@ This network is composed of 17 nuclei: $\isotm{H}{1,2}$, $\isotm{He}{3,4}$, $\isotm{Be}{7}$, $\isotm{B}{8}$, $\isotm{C}{12,13}$, $\isotm{N}{13-15}$, $\isotm{O}{14-17}$, $\isotm{F}{17,18}$ and is used to model the onset of a classical novae -thermonuclear runaway. The first set of nuclei, $\isotm{H}{1,2}$, -$\isotm{He}{3,4}$ represent the pp-chain sector of the reaction -network, while the second set, of $\isotm{Be}{7}$, and $\isotm{B}{8}$, -describe the involvement of the x-process. Finally, all the remaining -nuclei are active participants of the CNO cycle with endpoints at -$\isotm{F}{17}$ and $\isotm{F}{18}$. The triple-$\alpha$ reaction +thermonuclear runaway. These are linked together by 55 rates (including reverse rates). + +The first set of nuclei, $\isotm{H}{1,2}$, $\isotm{He}{3,4}$ represent +the pp-chain sector of the reaction network, while the second set, of +$\isotm{Be}{7}$, and $\isotm{B}{8}$, describe the involvement of the +x-process. Finally, all the remaining nuclei are active participants +of the CNO cycle with endpoints at $\isotm{F}{17}$ and +$\isotm{F}{18}$. The triple-$\alpha$ reaction $\alpha(\alpha\alpha,\gamma)\isotm{C}{12}$, serves as bridge between the nuclei of first and the last set. -The the cold-CNO chain of reactions of the CN-branch are: +The cold-CNO chain of reactions of the CN-branch are: * :math:`\isotm{C}{12}(p,\gamma)\isotm{N}{13}(\beta^{+}\nu_e)\isotm{C}{13}(p,\gamma)` @@ -202,14 +204,18 @@ while the NO-branch chain of reactions is: * :math:`\isotm{N}{14}(p,\gamma)\isotm{O}{15}(\beta^{+})\isotm{N}{15}(p,\gamma)\isotm{O}{16}(p,\gamma)\isotm{F}{17}(\beta^{+}\nu_e)\isotm{O}{17}` -where the isotopes $\isotm{N}{15}$ and $\isotm{O}{17}$ may decay back into $\isotm{C}{12}$ and $\isotm{N}{14}$ through -$\isotm{N}{15}(p,\alpha)\isotm{C}{12}$ and $\isotm{O}{17}(p,\alpha)\isotm{N}{14}$ respectively. +where the isotopes $\isotm{N}{15}$ and $\isotm{O}{17}$ may decay back +into $\isotm{C}{12}$ and $\isotm{N}{14}$ through +$\isotm{N}{15}(p,\alpha)\isotm{C}{12}$ and +$\isotm{O}{17}(p,\alpha)\isotm{N}{14}$ respectively. .. figure:: ../../networks/nova/nova.png :align: center -Once the temperature reaches a threshold of $\gtrsim 10^8\,\mathrm{K}$, the fast $p$-captures, for example, -$\isotm{N}{13}(p,\gamma)\isotm{O}{14}$, are more likely than the $\beta^{+}$-decays $\isotm{N}{13}(\beta^{+}\nu_e)\isotm{C}{13}$ +Once the temperature reaches a threshold of $\gtrsim +10^8\,\mathrm{K}$, the fast $p$-captures, for example, +$\isotm{N}{13}(p,\gamma)\isotm{O}{14}$, are more likely than the +$\beta^{+}$-decays $\isotm{N}{13}(\beta^{+}\nu_e)\isotm{C}{13}$ reactions. These rates are also included in this network. ``nova-li`` @@ -220,6 +226,11 @@ nuclei beyond fluorine. It should give a more accurate energy in late stages of the burst, and can also be used to explore lithium production. +To keep the network size down, a filtering process is done to remove +rates that are not expected to be important under the thermodynamic +conditions encountered in a nova. The result is that the network has +25 nuclei and 54 rates. + .. figure:: ../../networks/nova-li/nova-li.png :align: center diff --git a/networks/nova-li/actual_network.H b/networks/nova-li/actual_network.H index 452612048..ed09e9d40 100644 --- a/networks/nova-li/actual_network.H +++ b/networks/nova-li/actual_network.H @@ -243,57 +243,57 @@ namespace Rates k_N13_to_C13_reaclib = 2, k_O14_to_N14_reaclib = 3, k_O15_to_N15_reaclib = 4, - k_B8_to_p_Be7_reaclib = 5, - k_B8_to_He4_He4_reaclib = 6, - k_F17_to_p_O16_reaclib = 7, - k_p_p_to_d_reaclib_bet_pos = 8, - k_p_p_to_d_reaclib_electron_capture = 9, - k_p_d_to_He3_reaclib = 10, - k_d_d_to_He4_reaclib = 11, - k_p_He3_to_He4_reaclib = 12, - k_He4_He3_to_Be7_reaclib = 13, - k_He4_Li7_to_B11_reaclib = 14, - k_p_Be7_to_B8_reaclib = 15, - k_p_B11_to_C12_reaclib = 16, - k_p_C12_to_N13_reaclib = 17, - k_He4_C12_to_O16_reaclib = 18, - k_p_C13_to_N14_reaclib = 19, - k_p_N13_to_O14_reaclib = 20, - k_p_N14_to_O15_reaclib = 21, - k_He4_N14_to_F18_reaclib = 22, - k_p_N15_to_O16_reaclib = 23, - k_He4_N15_to_F19_reaclib = 24, - k_He4_O14_to_Ne18_reaclib = 25, - k_He4_O15_to_Ne19_reaclib = 26, - k_p_O16_to_F17_reaclib = 27, - k_He4_O16_to_Ne20_reaclib = 28, - k_p_O17_to_F18_reaclib = 29, - k_He4_O17_to_Ne21_reaclib = 30, - k_p_O18_to_F19_reaclib = 31, - k_p_F17_to_Ne18_reaclib = 32, - k_p_F18_to_Ne19_reaclib = 33, - k_p_F19_to_Ne20_reaclib = 34, - k_d_He3_to_p_He4_reaclib = 35, - k_p_Li7_to_He4_He4_reaclib = 36, - k_He4_N13_to_p_O16_reaclib = 37, - k_p_N15_to_He4_C12_reaclib = 38, - k_He4_O14_to_p_F17_reaclib = 39, - k_p_O17_to_He4_N14_reaclib = 40, - k_p_O18_to_He4_N15_reaclib = 41, - k_He4_F17_to_p_Ne20_reaclib = 42, - k_p_F18_to_He4_O15_reaclib = 43, - k_He4_F18_to_p_Ne21_reaclib = 44, - k_p_F19_to_He4_O16_reaclib = 45, - k_He3_He3_to_p_p_He4_reaclib = 46, - k_d_Be7_to_p_He4_He4_reaclib = 47, - k_p_B11_to_He4_He4_He4_reaclib = 48, - k_He3_Be7_to_p_p_He4_He4_reaclib = 49, - k_He4_He4_He4_to_C12_reaclib = 50, - k_F17_to_O17_weaktab = 51, - k_F18_to_O18_weaktab = 52, - k_Ne18_to_F18_weaktab = 53, - k_Ne19_to_F19_weaktab = 54, - NumRates = k_Ne19_to_F19_weaktab + k_B8_to_He4_He4_reaclib = 5, + k_p_p_to_d_reaclib_beta_pos = 6, + k_p_p_to_d_reaclib_electron_capture = 7, + k_p_d_to_He3_reaclib = 8, + k_d_d_to_He4_reaclib = 9, + k_p_He3_to_He4_reaclib = 10, + k_He4_He3_to_Be7_reaclib = 11, + k_He4_Li7_to_B11_reaclib = 12, + k_p_Be7_to_B8_reaclib = 13, + k_p_B11_to_C12_reaclib = 14, + k_p_C12_to_N13_reaclib = 15, + k_He4_C12_to_O16_reaclib = 16, + k_p_C13_to_N14_reaclib = 17, + k_p_N13_to_O14_reaclib = 18, + k_p_N14_to_O15_reaclib = 19, + k_He4_N14_to_F18_reaclib = 20, + k_p_N15_to_O16_reaclib = 21, + k_He4_N15_to_F19_reaclib = 22, + k_He4_O14_to_Ne18_reaclib = 23, + k_He4_O15_to_Ne19_reaclib = 24, + k_p_O16_to_F17_reaclib = 25, + k_He4_O16_to_Ne20_reaclib = 26, + k_p_O17_to_F18_reaclib = 27, + k_He4_O17_to_Ne21_reaclib = 28, + k_p_O18_to_F19_reaclib = 29, + k_p_F17_to_Ne18_reaclib = 30, + k_p_F18_to_Ne19_reaclib = 31, + k_p_F19_to_Ne20_reaclib = 32, + k_d_He3_to_p_He4_reaclib = 33, + k_p_Li7_to_He4_He4_reaclib = 34, + k_He4_N13_to_p_O16_reaclib = 35, + k_p_N15_to_He4_C12_reaclib = 36, + k_He4_O14_to_p_F17_reaclib = 37, + k_p_O17_to_He4_N14_reaclib = 38, + k_p_O18_to_He4_N15_reaclib = 39, + k_p_F18_to_He4_O15_reaclib = 40, + k_He4_F18_to_p_Ne21_reaclib = 41, + k_p_F19_to_He4_O16_reaclib = 42, + k_He3_He3_to_p_p_He4_reaclib = 43, + k_d_Be7_to_p_He4_He4_reaclib = 44, + k_p_B11_to_He4_He4_He4_reaclib = 45, + k_He3_Be7_to_p_p_He4_He4_reaclib = 46, + k_He4_He4_He4_to_C12_reaclib = 47, + k_F17_to_O17_weaktab = 48, + k_F18_to_O18_weaktab = 49, + k_Ne18_to_F18_weaktab = 50, + k_Ne19_to_F19_weaktab = 51, + k_B8_to_p_Be7_derived = 52, + k_F17_to_p_O16_derived = 53, + k_He4_F17_to_p_Ne20_derived = 54, + NumRates = k_He4_F17_to_p_Ne20_derived }; // rate names -- note: the rates are 1-based, not zero-based, so we pad @@ -306,56 +306,56 @@ namespace Rates "N13_to_C13_reaclib", // 2, "O14_to_N14_reaclib", // 3, "O15_to_N15_reaclib", // 4, - "B8_to_p_Be7_reaclib", // 5, - "B8_to_He4_He4_reaclib", // 6, - "F17_to_p_O16_reaclib", // 7, - "p_p_to_d_reaclib_bet_pos", // 8, - "p_p_to_d_reaclib_electron_capture", // 9, - "p_d_to_He3_reaclib", // 10, - "d_d_to_He4_reaclib", // 11, - "p_He3_to_He4_reaclib", // 12, - "He4_He3_to_Be7_reaclib", // 13, - "He4_Li7_to_B11_reaclib", // 14, - "p_Be7_to_B8_reaclib", // 15, - "p_B11_to_C12_reaclib", // 16, - "p_C12_to_N13_reaclib", // 17, - "He4_C12_to_O16_reaclib", // 18, - "p_C13_to_N14_reaclib", // 19, - "p_N13_to_O14_reaclib", // 20, - "p_N14_to_O15_reaclib", // 21, - "He4_N14_to_F18_reaclib", // 22, - "p_N15_to_O16_reaclib", // 23, - "He4_N15_to_F19_reaclib", // 24, - "He4_O14_to_Ne18_reaclib", // 25, - "He4_O15_to_Ne19_reaclib", // 26, - "p_O16_to_F17_reaclib", // 27, - "He4_O16_to_Ne20_reaclib", // 28, - "p_O17_to_F18_reaclib", // 29, - "He4_O17_to_Ne21_reaclib", // 30, - "p_O18_to_F19_reaclib", // 31, - "p_F17_to_Ne18_reaclib", // 32, - "p_F18_to_Ne19_reaclib", // 33, - "p_F19_to_Ne20_reaclib", // 34, - "d_He3_to_p_He4_reaclib", // 35, - "p_Li7_to_He4_He4_reaclib", // 36, - "He4_N13_to_p_O16_reaclib", // 37, - "p_N15_to_He4_C12_reaclib", // 38, - "He4_O14_to_p_F17_reaclib", // 39, - "p_O17_to_He4_N14_reaclib", // 40, - "p_O18_to_He4_N15_reaclib", // 41, - "He4_F17_to_p_Ne20_reaclib", // 42, - "p_F18_to_He4_O15_reaclib", // 43, - "He4_F18_to_p_Ne21_reaclib", // 44, - "p_F19_to_He4_O16_reaclib", // 45, - "He3_He3_to_p_p_He4_reaclib", // 46, - "d_Be7_to_p_He4_He4_reaclib", // 47, - "p_B11_to_He4_He4_He4_reaclib", // 48, - "He3_Be7_to_p_p_He4_He4_reaclib", // 49, - "He4_He4_He4_to_C12_reaclib", // 50, - "F17_to_O17_weaktab", // 51, - "F18_to_O18_weaktab", // 52, - "Ne18_to_F18_weaktab", // 53, - "Ne19_to_F19_weaktab" // 54, + "B8_to_He4_He4_reaclib", // 5, + "p_p_to_d_reaclib_beta_pos", // 6, + "p_p_to_d_reaclib_electron_capture", // 7, + "p_d_to_He3_reaclib", // 8, + "d_d_to_He4_reaclib", // 9, + "p_He3_to_He4_reaclib", // 10, + "He4_He3_to_Be7_reaclib", // 11, + "He4_Li7_to_B11_reaclib", // 12, + "p_Be7_to_B8_reaclib", // 13, + "p_B11_to_C12_reaclib", // 14, + "p_C12_to_N13_reaclib", // 15, + "He4_C12_to_O16_reaclib", // 16, + "p_C13_to_N14_reaclib", // 17, + "p_N13_to_O14_reaclib", // 18, + "p_N14_to_O15_reaclib", // 19, + "He4_N14_to_F18_reaclib", // 20, + "p_N15_to_O16_reaclib", // 21, + "He4_N15_to_F19_reaclib", // 22, + "He4_O14_to_Ne18_reaclib", // 23, + "He4_O15_to_Ne19_reaclib", // 24, + "p_O16_to_F17_reaclib", // 25, + "He4_O16_to_Ne20_reaclib", // 26, + "p_O17_to_F18_reaclib", // 27, + "He4_O17_to_Ne21_reaclib", // 28, + "p_O18_to_F19_reaclib", // 29, + "p_F17_to_Ne18_reaclib", // 30, + "p_F18_to_Ne19_reaclib", // 31, + "p_F19_to_Ne20_reaclib", // 32, + "d_He3_to_p_He4_reaclib", // 33, + "p_Li7_to_He4_He4_reaclib", // 34, + "He4_N13_to_p_O16_reaclib", // 35, + "p_N15_to_He4_C12_reaclib", // 36, + "He4_O14_to_p_F17_reaclib", // 37, + "p_O17_to_He4_N14_reaclib", // 38, + "p_O18_to_He4_N15_reaclib", // 39, + "p_F18_to_He4_O15_reaclib", // 40, + "He4_F18_to_p_Ne21_reaclib", // 41, + "p_F19_to_He4_O16_reaclib", // 42, + "He3_He3_to_p_p_He4_reaclib", // 43, + "d_Be7_to_p_He4_He4_reaclib", // 44, + "p_B11_to_He4_He4_He4_reaclib", // 45, + "He3_Be7_to_p_p_He4_He4_reaclib", // 46, + "He4_He4_He4_to_C12_reaclib", // 47, + "F17_to_O17_weaktab", // 48, + "F18_to_O18_weaktab", // 49, + "Ne18_to_F18_weaktab", // 50, + "Ne19_to_F19_weaktab", // 51, + "B8_to_p_Be7_derived", // 52, + "F17_to_p_O16_derived", // 53, + "He4_F17_to_p_Ne20_derived" // 54, }; } @@ -382,8 +382,8 @@ namespace NSE_INDEX constexpr int NumNSERatePairs = 2; inline AMREX_GPU_MANAGED amrex::Array2D rate_pair_data { - H1, Be7, -1, B8, -1, -1, Be7, B8, k_p_Be7_to_B8_reaclib, k_B8_to_p_Be7_reaclib, - H1, O16, -1, F17, -1, -1, O16, F17, k_p_O16_to_F17_reaclib, k_F17_to_p_O16_reaclib + H1, Be7, -1, B8, -1, -1, Be7, B8, k_p_Be7_to_B8_reaclib, k_B8_to_p_Be7_derived, + H1, O16, -1, F17, -1, -1, O16, F17, k_p_O16_to_F17_reaclib, k_F17_to_p_O16_derived }; } #endif diff --git a/networks/nova-li/actual_rhs.H b/networks/nova-li/actual_rhs.H index bb455ba18..236df84b1 100644 --- a/networks/nova-li/actual_rhs.H +++ b/networks/nova-li/actual_rhs.H @@ -97,11 +97,11 @@ void evaluate_rates(const burn_t& state, actual_screen(pstate, scn_fac, scor, dscor_dt); } - ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos); - rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos) *= scor; + ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos); + rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos) *= scor; if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos); - rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos) = ratraw * dscor_dt + dratraw_dT * scor; + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos); + rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos) = ratraw * dscor_dt + dratraw_dT * scor; } ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_electron_capture); @@ -553,20 +553,6 @@ void evaluate_rates(const burn_t& state, } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 9.0_rt, 17.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_F17_to_p_Ne20_reaclib); - rate_eval.screened_rates(k_He4_F17_to_p_Ne20_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_reaclib); - rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 9.0_rt, 18.0_rt); static_assert(scn_fac.z1 == 2.0_rt); @@ -643,6 +629,20 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib) = ratraw * (scor * dscor2_dt + dscor_dt * scor2) + dratraw_dT * scor * scor2; } + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 9.0_rt, 17.0_rt); + static_assert(scn_fac.z1 == 2.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_He4_F17_to_p_Ne20_derived); + rate_eval.screened_rates(k_He4_F17_to_p_Ne20_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_derived); + rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + #endif // Fill approximate rates @@ -764,12 +764,12 @@ void get_ydot_weak(const burn_t& state, auto screened_rates = rate_eval.screened_rates; ydot_nuc(H1) = - -screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + -screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho; ydot_nuc(H2) = - 0.5*screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + 0.5*screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e; ydot_nuc(He3) = @@ -852,18 +852,18 @@ void rhs_nuc(const burn_t& state, using namespace Rates; ydot_nuc(H1) = - -screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + -screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho + - (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_reaclib)*Y(B8)) + + (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_derived)*Y(B8)) + -screened_rates(k_p_B11_to_C12_reaclib)*Y(B11)*Y(H1)*state.rho + -screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + -screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + -screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + -screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + -screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + - (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_reaclib)*Y(F17)) + + (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + -screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_p_O18_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + @@ -876,17 +876,17 @@ void rhs_nuc(const burn_t& state, screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + - screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*Y(He4)*state.rho + -screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + -screened_rates(k_p_B11_to_He4_He4_He4_reaclib)*Y(B11)*Y(H1)*state.rho + - 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho; + 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + + screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho; ydot_nuc(H2) = - 0.5*screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + 0.5*screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + -screened_rates(k_d_d_to_He4_reaclib)*amrex::Math::powi<2>(Y(H2))*state.rho + @@ -921,7 +921,6 @@ void rhs_nuc(const burn_t& state, -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + - -screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*Y(He4)*state.rho + screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*Y(He4)*state.rho + screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + @@ -929,7 +928,8 @@ void rhs_nuc(const burn_t& state, 2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + 3.0*screened_rates(k_p_B11_to_He4_He4_He4_reaclib)*Y(B11)*Y(H1)*state.rho + 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + - -0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho); + -0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho) + + -screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho; ydot_nuc(Li7) = screened_rates(k_Be7_to_Li7_reaclib)*Y(Be7)*state.rho*state.y_e + @@ -939,13 +939,13 @@ void rhs_nuc(const burn_t& state, ydot_nuc(Be7) = -screened_rates(k_Be7_to_Li7_reaclib)*Y(Be7)*state.rho*state.y_e + screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + - (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_reaclib)*Y(B8)) + + (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_derived)*Y(B8)) + -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho; ydot_nuc(B8) = -screened_rates(k_B8_to_He4_He4_reaclib)*Y(B8) + - (screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + -screened_rates(k_B8_to_p_Be7_reaclib)*Y(B8)); + (screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + -screened_rates(k_B8_to_p_Be7_derived)*Y(B8)); ydot_nuc(B11) = screened_rates(k_He4_Li7_to_B11_reaclib)*Y(He4)*Y(Li7)*state.rho + @@ -998,7 +998,7 @@ void rhs_nuc(const burn_t& state, ydot_nuc(O16) = screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + - (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_reaclib)*Y(F17)) + + (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + -screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho; @@ -1015,10 +1015,10 @@ void rhs_nuc(const burn_t& state, screened_rates(k_F18_to_O18_weaktab)*Y(F18); ydot_nuc(F17) = - (screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + -screened_rates(k_F17_to_p_O16_reaclib)*Y(F17)) + + (screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + -screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + -screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + - -screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*Y(He4)*state.rho + + -screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_F17_to_O17_weaktab)*Y(F17); ydot_nuc(F18) = @@ -1050,7 +1050,7 @@ void rhs_nuc(const burn_t& state, ydot_nuc(Ne20) = screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + - screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*Y(He4)*state.rho; + screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho; ydot_nuc(Ne21) = screened_rates(k_He4_O17_to_Ne21_reaclib)*Y(He4)*Y(O17)*state.rho + @@ -1115,7 +1115,7 @@ void jac_nuc(const burn_t& state, amrex::Real scratch; - scratch = -screened_rates(k_p_B11_to_C12_reaclib)*Y(B11)*state.rho - screened_rates(k_p_B11_to_He4_He4_He4_reaclib)*Y(B11)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*state.rho - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_p_F18_to_Ne19_reaclib)*Y(F18)*state.rho - screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*state.rho - screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_Li7_to_He4_He4_reaclib)*Y(Li7)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O18_to_F19_reaclib)*Y(O18)*state.rho - screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_bet_pos)*Y(H1)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; + scratch = -screened_rates(k_p_B11_to_C12_reaclib)*Y(B11)*state.rho - screened_rates(k_p_B11_to_He4_He4_He4_reaclib)*Y(B11)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*state.rho - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_p_F18_to_Ne19_reaclib)*Y(F18)*state.rho - screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*state.rho - screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_Li7_to_He4_He4_reaclib)*Y(Li7)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O18_to_F19_reaclib)*Y(O18)*state.rho - screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_beta_pos)*Y(H1)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; jac.set(H1, H1, scratch); scratch = screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H1)*state.rho; @@ -1124,7 +1124,7 @@ void jac_nuc(const burn_t& state, scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; jac.set(H1, He3, scratch); - scratch = screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*state.rho + screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; + scratch = screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*state.rho + screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; jac.set(H1, He4, scratch); scratch = -screened_rates(k_p_Li7_to_He4_He4_reaclib)*Y(H1)*state.rho; @@ -1133,7 +1133,7 @@ void jac_nuc(const burn_t& state, scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(H1, Be7, scratch); - scratch = screened_rates(k_B8_to_p_Be7_reaclib); + scratch = screened_rates(k_B8_to_p_Be7_derived); jac.set(H1, B8, scratch); scratch = -screened_rates(k_p_B11_to_C12_reaclib)*Y(H1)*state.rho - screened_rates(k_p_B11_to_He4_He4_He4_reaclib)*Y(H1)*state.rho; @@ -1168,7 +1168,7 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_p_O18_to_F19_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(H1)*state.rho; jac.set(H1, O18, scratch); - scratch = screened_rates(k_F17_to_p_O16_reaclib) + screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F17_to_p_O16_derived) + screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; jac.set(H1, F17, scratch); scratch = screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(He4)*state.rho - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho - screened_rates(k_p_F18_to_Ne19_reaclib)*Y(H1)*state.rho; @@ -1185,7 +1185,7 @@ void jac_nuc(const burn_t& state, jac.set(H1, Ne21, 0.0); - scratch = -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_bet_pos)*Y(H1)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; + scratch = -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_beta_pos)*Y(H1)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; jac.set(H2, H1, scratch); scratch = -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho - 2.0*screened_rates(k_d_d_to_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H1)*state.rho; @@ -1303,7 +1303,7 @@ void jac_nuc(const burn_t& state, scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + 1.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He4)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho + screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; jac.set(He4, He3, scratch); - scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*state.rho - screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho - 1.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_He4_Li7_to_B11_reaclib)*Y(Li7)*state.rho - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_He4_N15_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(O14)*state.rho - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho - screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(O15)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_O17_to_Ne21_reaclib)*Y(O17)*state.rho; + scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*state.rho - screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(F18)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho - 1.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_He4_Li7_to_B11_reaclib)*Y(Li7)*state.rho - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_He4_N15_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(O14)*state.rho - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho - screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(O15)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_O17_to_Ne21_reaclib)*Y(O17)*state.rho; jac.set(He4, He4, scratch); scratch = -screened_rates(k_He4_Li7_to_B11_reaclib)*Y(He4)*state.rho + 2.0*screened_rates(k_p_Li7_to_He4_He4_reaclib)*Y(H1)*state.rho; @@ -1347,7 +1347,7 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(H1)*state.rho; jac.set(He4, O18, scratch); - scratch = -screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(He4)*state.rho; + scratch = -screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho; jac.set(He4, F17, scratch); scratch = -screened_rates(k_He4_F18_to_p_Ne21_reaclib)*Y(He4)*state.rho + screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; @@ -1435,7 +1435,7 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_Be7_to_Li7_reaclib)*state.rho*state.y_e - screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(Be7, Be7, scratch); - scratch = screened_rates(k_B8_to_p_Be7_reaclib); + scratch = screened_rates(k_B8_to_p_Be7_derived); jac.set(Be7, B8, scratch); jac.set(Be7, B11, 0.0); @@ -1488,7 +1488,7 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(B8, Be7, scratch); - scratch = -screened_rates(k_B8_to_He4_He4_reaclib) - screened_rates(k_B8_to_p_Be7_reaclib); + scratch = -screened_rates(k_B8_to_He4_He4_reaclib) - screened_rates(k_B8_to_p_Be7_derived); jac.set(B8, B8, scratch); jac.set(B8, B11, 0.0); @@ -2005,7 +2005,7 @@ void jac_nuc(const burn_t& state, jac.set(O16, O18, 0.0); - scratch = screened_rates(k_F17_to_p_O16_reaclib); + scratch = screened_rates(k_F17_to_p_O16_derived); jac.set(O16, F17, scratch); jac.set(O16, F18, 0.0); @@ -2135,7 +2135,7 @@ void jac_nuc(const burn_t& state, jac.set(F17, He3, 0.0); - scratch = -screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; + scratch = -screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; jac.set(F17, He4, scratch); jac.set(F17, Li7, 0.0); @@ -2168,7 +2168,7 @@ void jac_nuc(const burn_t& state, jac.set(F17, O18, 0.0); - scratch = -screened_rates(k_F17_to_O17_weaktab) - screened_rates(k_F17_to_p_O16_reaclib) - screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_F17_to_O17_weaktab) - screened_rates(k_F17_to_p_O16_derived) - screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; jac.set(F17, F17, scratch); jac.set(F17, F18, 0.0); @@ -2412,7 +2412,7 @@ void jac_nuc(const burn_t& state, jac.set(Ne20, He3, 0.0); - scratch = screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(F17)*state.rho + screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho; + scratch = screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*state.rho + screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho; jac.set(Ne20, He4, scratch); jac.set(Ne20, Li7, 0.0); @@ -2444,7 +2444,7 @@ void jac_nuc(const burn_t& state, jac.set(Ne20, O18, 0.0); - scratch = screened_rates(k_He4_F17_to_p_Ne20_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho; jac.set(Ne20, F17, scratch); jac.set(Ne20, F18, 0.0); diff --git a/networks/nova-li/derived_rates.H b/networks/nova-li/derived_rates.H index 579d7dd3d..e7d147a22 100644 --- a/networks/nova-li/derived_rates.H +++ b/networks/nova-li/derived_rates.H @@ -9,6 +9,204 @@ using namespace Rates; +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_B8_to_p_Be7_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // B8 --> p + Be7 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real Be7_log_pf, dBe7_log_pf_dT9; + + // setting Be7 log(partition function) to 0.0 by default, independent of T + Be7_log_pf = 0.0_rt; + dBe7_log_pf_dT9 = 0.0_rt; + + amrex::Real B8_log_pf, dB8_log_pf_dT9; + + // setting B8 log(partition function) to 0.0 by default, independent of T + B8_log_pf = 0.0_rt; + dB8_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + Be7_log_pf - B8_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dBe7_log_pf_dT9 - dB8_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrr + ln_set_rate = 31.03415329791634 + -8.927520483432566 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 8.927520483432566 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrn + ln_set_rate = 35.83166329791634 + -1.5825204834325672 * tfactors.T9i + -10.264 * tfactors.T913i + -0.203472 * tfactors.T913 + + 0.121083 * tfactors.T9 + -0.00700063 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 1.5825204834325672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -10.264 * tfactors.T943i + (1.0/3.0) * -0.203472 * tfactors.T923i + + 0.121083 + (5.0/3.0) * -0.00700063 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_F17_to_p_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F17 --> p + O16 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real F17_log_pf, dF17_log_pf_dT9; + + // interpolating F17 partition function + get_partition_function_cached(F17, tfactors.T9, pf_cache, F17_log_pf, dF17_log_pf_dT9); + + amrex::Real O16_log_pf, dO16_log_pf_dT9; + + // interpolating O16 partition function + get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + O16_log_pf - F17_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO16_log_pf_dT9 - dF17_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ia08n + ln_set_rate = 40.93184403787935 + -6.965832070525503 * tfactors.T9i + -16.696 * tfactors.T913i + -1.16252 * tfactors.T913 + + 0.267703 * tfactors.T9 + -0.0338411 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 6.965832070525503 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.696 * tfactors.T943i + (1.0/3.0) * -1.16252 * tfactors.T923i + + 0.267703 + (5.0/3.0) * -0.0338411 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_F17_to_p_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F17 + He4 --> p + Ne20 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real F17_log_pf, dF17_log_pf_dT9; + + // interpolating F17 partition function + get_partition_function_cached(F17, tfactors.T9, pf_cache, F17_log_pf, dF17_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real Ne20_log_pf, dNe20_log_pf_dT9; + + // interpolating Ne20 partition function + get_partition_function_cached(Ne20, tfactors.T9, pf_cache, Ne20_log_pf, dNe20_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + Ne20_log_pf - He4_log_pf - F17_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dNe20_log_pf_dT9 - dHe4_log_pf_dT9 - dF17_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacr + ln_set_rate = 38.645331236377224 + -0.004848799532844339 * tfactors.T9i + -43.18 * tfactors.T913i + 4.46827 * tfactors.T913 + + -1.63915 * tfactors.T9 + 0.123483 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 0.004848799532844339 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -43.18 * tfactors.T943i + (1.0/3.0) * 4.46827 * tfactors.T923i + + -1.63915 + (5.0/3.0) * 0.123483 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + template AMREX_GPU_HOST_DEVICE AMREX_INLINE @@ -22,6 +220,28 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) [[maybe_unused]] amrex::Real rate; [[maybe_unused]] amrex::Real drate_dT; + part_fun::pf_cache_t pf_cache{}; + + pf_cache.index_temp_array_1 = interp_net::find_index(tfactors.T9, part_fun::temp_array_1); + + rate_B8_to_p_Be7_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_B8_to_p_Be7_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_B8_to_p_Be7_derived) = drate_dT; + + } + rate_F17_to_p_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F17_to_p_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_to_p_O16_derived) = drate_dT; + + } + rate_He4_F17_to_p_Ne20_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_F17_to_p_Ne20_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_derived) = drate_dT; + + } } #endif diff --git a/networks/nova-li/nova-li.png b/networks/nova-li/nova-li.png index 35d9089e5..ad160c991 100644 Binary files a/networks/nova-li/nova-li.png and b/networks/nova-li/nova-li.png differ diff --git a/networks/nova-li/nova_li.py b/networks/nova-li/nova_li.py index 6b0172816..1beaa4d37 100644 --- a/networks/nova-li/nova_li.py +++ b/networks/nova-li/nova_li.py @@ -15,17 +15,9 @@ def create_network(): "f17", "f18", "f19", "ne18", "ne19", "ne20", "ne21"] - nova_library = rl.linking_nuclei(all_nuclei, with_reverse=True) - - tl = pyna.TabularLibrary(ordering=["ffn", "oda", "langanke"]) - weak_library = tl.linking_nuclei(all_nuclei) - - # remove duplicates - all_lib = nova_library + weak_library - - all_lib.eliminate_duplicates(rate_type_preference="tabular") - - net = AmrexAstroCxxNetwork(libraries=[all_lib]) + net = pyna.network_helper(all_nuclei, + tabular_ordering=["ffn", "langanke", "oda"], + network_type="amrex") # now remove unimportant rates diff --git a/networks/nova-li/partition_functions.H b/networks/nova-li/partition_functions.H index 33eaf69e8..eeb8dc8ef 100644 --- a/networks/nova-li/partition_functions.H +++ b/networks/nova-li/partition_functions.H @@ -18,6 +18,101 @@ using namespace Species; namespace part_fun { + constexpr int npts_1 = 72; + + // this is T9 + + inline AMREX_GPU_MANAGED amrex::Array1D temp_array_1 = { + 0.01, 0.15, 0.2, 0.3, 0.4, + 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.5, 2.0, 2.5, 3.0, + 3.5, 4.0, 4.5, 5.0, 6.0, + 7.0, 8.0, 9.0, 10.0, 12.0, + 14.0, 16.0, 18.0, 20.0, 22.0, + 24.0, 26.0, 28.0, 30.0, 35.0, + 40.0, 45.0, 50.0, 55.0, 60.0, + 65.0, 70.0, 75.0, 80.0, 85.0, + 90.0, 95.0, 100.0, 105.0, 110.0, + 115.0, 120.0, 125.0, 130.0, 135.0, + 140.0, 145.0, 150.0, 155.0, 160.0, + 165.0, 170.0, 175.0, 180.0, 190.0, + 200.0, 210.0, 220.0, 230.0, 240.0, + 250.0, 275.0, + }; + + + // O16 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D O16_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.02955880224154443, + 0.08617769624105241, 0.16551443847757333, 0.27763173659827955, 0.4252677354043441, 0.6043159668533296, + 0.7975071958841882, 1.007957920399979, 1.2296405510745139, 1.4609379041156563, 2.0681277817795625, + 2.70805020110221, 3.3775875160230218, 4.062165663857866, 4.7535901911063645, 5.4510384535657, + 6.142037405587356, 6.828712071641684, 7.512071245835466, 8.185907481482324, 8.85366542803745, + 9.517825071724143, 10.177324218165856, 10.831706855275558, 11.48246625748552, 12.128111104060462, + 12.774223335915433, 13.41652441595382, 14.054527458434775, 14.690979295318174, 15.324022551808413, + 15.956752500549557, 16.588099280204055, 17.216707939626428, 17.842646370492925, 18.469470908121796, + 19.09362521719479, 19.715407911546766, 20.337603356134426, 20.954377557909798, 22.19802884605391, + 23.43796058076729, 24.670655986211848, 25.905049387238495, 27.136724794113768, 28.368185181905268, + 29.602320498988682, 32.68726692127686, + }; + + constexpr amrex::Real O16_pf_threshold_T9 = 10.0; + + // F17 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D F17_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.009950330853168092, 0.01980262729617973, 0.02955880224154443, 0.04879016416943205, + 0.058268908123975824, 0.0769610411361284, 0.08617769624105241, 0.09531017980432493, 0.12221763272424911, + 0.13976194237515863, 0.1570037488096647, 0.17395330712343798, 0.19885085874516517, 0.26236426446749106, + 0.3293037471426003, 0.41871033485818504, 0.5247285289349821, 0.6471032420585384, 0.7884573603642703, + 0.9400072584914712, 1.1019400787607843, 1.2781522025001875, 1.4678743481123135, 1.9810014688665833, + 2.5416019934645457, 3.1441522786722644, 3.7612001156935624, 4.388257184424518, 5.0238805208462765, + 5.655991810819852, 6.2878585601617845, 6.917705609835305, 7.549609165154532, 8.183118079394745, + 8.814330422638774, 9.441452092939569, 10.077440859659566, 10.707728780601661, 11.33857207782545, + 11.970350312009105, 12.601487417784837, 13.233904752137237, 13.864300722133706, 14.498607402670718, + 15.131918791619999, 15.765697263786848, 16.3957273875566, 17.034386382832476, 17.667783558986645, + 18.301897207962398, 18.939474537367534, 19.571252771551187, 20.207427671356875, 21.479387816667746, + 22.755353682242777, 24.033808850340435, 25.311289864099532, 26.592562750080187, 27.877881193860073, + 29.165735482166713, 32.393195050726305, + }; + + constexpr amrex::Real F17_pf_threshold_T9 = 1.0; + + // Ne20 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D Ne20_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.5999872001381317e-05, 0.00038192705657577196, 0.0025407695097516073, 0.008962714607884434, + 0.02196890666877481, 0.04281712292730049, 0.07155385603147618, 0.10734115290026017, 0.19485435877707374, + 0.2952416765065437, 0.4013680599901673, 0.5094424676464369, 0.6178722970606984, 0.8329091229351039, + 1.0508216248317612, 1.269760544863939, 1.4929040961781488, 1.7191887763932197, 1.9530276168241774, + 2.194999882314108, 2.451005098112319, 2.714694743820879, 3.0007198150650303, 3.784189633918261, + 4.6443908991413725, 5.54907608489522, 6.46302945692067, 7.371489295214277, 8.266164436612492, + 9.148464968258095, 10.021270588192511, 10.881813675329736, 11.736069016284437, 12.584509081250419, + 13.425426551894413, 14.26019637922572, 15.096444403426338, 15.926935145497161, 16.75467248002987, + 17.579033555073977, 18.40149792453559, 19.222682329424394, 20.040068987239636, 20.854294099352817, + 21.671055235879937, 22.481123754498785, 23.295878067153517, 24.100853352969434, 24.909885675277682, + 25.720478110710527, 26.525384212323473, 27.329916023144627, 28.131796403841037, 29.741234316275136, + 31.347029237430736, 32.94914110977277, 34.548726725763856, 36.15618247699396, 37.76164424104842, + 39.36709013221299, 43.378053085496035, + }; + + constexpr amrex::Real Ne20_pf_threshold_T9 = 1.0; + // interpolation routine @@ -66,6 +161,8 @@ namespace part_fun { // Store the coefficient and derivative adjacent in memory, as they're // always accessed at the same time. amrex::Array2D data; + int index_temp_array_1{-1}; + AMREX_GPU_HOST_DEVICE AMREX_INLINE pf_cache_t() { // The entries will be default-initialized to -900, @@ -95,6 +192,24 @@ void get_partition_function(const int inuc, switch (inuc) { + case O16: + if (T9 > part_fun::O16_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::O16_pf_array, logpf, dlogpf_dT9); + } + break; + + case F17: + if (T9 > part_fun::F17_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::F17_pf_array, logpf, dlogpf_dT9); + } + break; + + case Ne20: + if (T9 > part_fun::Ne20_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::Ne20_pf_array, logpf, dlogpf_dT9); + } + break; + default: diff --git a/networks/nova-li/pynucastro-info.txt b/networks/nova-li/pynucastro-info.txt index e055581de..ddc63d065 100644 --- a/networks/nova-li/pynucastro-info.txt +++ b/networks/nova-li/pynucastro-info.txt @@ -1 +1 @@ -pynucastro version: 2.9.0-28-gbcc09d414 +pynucastro version: 2.9.0-44-g77ed73b73 diff --git a/networks/nova-li/reaclib_rates.H b/networks/nova-li/reaclib_rates.H index 5ea7dfc34..5f7747bfc 100644 --- a/networks/nova-li/reaclib_rates.H +++ b/networks/nova-li/reaclib_rates.H @@ -147,53 +147,6 @@ void rate_O15_to_N15_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Rea } -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_B8_to_p_Be7_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // B8 --> p + Be7 - - rate = 0.0; - drate_dT = 0.0; - - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; - - // nacrr - ln_set_rate = 31.0163 + -8.93482 * tfactors.T9i; - - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 8.93482 * tfactors.T9i * tfactors.T9i; - } - - // avoid underflows by zeroing rates in [0.0, 1.e-100] - ln_set_rate = std::max(ln_set_rate, -230.0); - set_rate = std::exp(ln_set_rate); - rate += set_rate; - if constexpr (do_T_derivatives) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; - } - - // nacrn - ln_set_rate = 35.8138 + -1.58982 * tfactors.T9i + -10.264 * tfactors.T913i + -0.203472 * tfactors.T913 - + 0.121083 * tfactors.T9 + -0.00700063 * tfactors.T953 + 0.833333 * tfactors.lnT9; - - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.58982 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -10.264 * tfactors.T943i + (1.0/3.0) * -0.203472 * tfactors.T923i - + 0.121083 + (5.0/3.0) * -0.00700063 * tfactors.T923 + 0.833333 * tfactors.T9i; - } - - // avoid underflows by zeroing rates in [0.0, 1.e-100] - ln_set_rate = std::max(ln_set_rate, -230.0); - set_rate = std::exp(ln_set_rate); - rate += set_rate; - if constexpr (do_T_derivatives) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; - } - -} - template AMREX_GPU_HOST_DEVICE AMREX_INLINE void rate_B8_to_He4_He4_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { @@ -227,39 +180,7 @@ void rate_B8_to_He4_He4_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_F17_to_p_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // F17 --> p + O16 - - rate = 0.0; - drate_dT = 0.0; - - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; - - // ia08n - ln_set_rate = 40.9135 + -6.96583 * tfactors.T9i + -16.696 * tfactors.T913i + -1.16252 * tfactors.T913 - + 0.267703 * tfactors.T9 + -0.0338411 * tfactors.T953 + 0.833333 * tfactors.lnT9; - - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 6.96583 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.696 * tfactors.T943i + (1.0/3.0) * -1.16252 * tfactors.T923i - + 0.267703 + (5.0/3.0) * -0.0338411 * tfactors.T923 + 0.833333 * tfactors.T9i; - } - - // avoid underflows by zeroing rates in [0.0, 1.e-100] - ln_set_rate = std::max(ln_set_rate, -230.0); - set_rate = std::exp(ln_set_rate); - rate += set_rate; - if constexpr (do_T_derivatives) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; - } - -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_p_to_d_reaclib_bet_pos(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_p_to_d_reaclib_beta_pos(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { // p + p --> d @@ -2348,38 +2269,6 @@ void rate_p_O18_to_He4_N15_reaclib(const tf_t& tfactors, amrex::Real& rate, amre } -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_F17_to_p_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // F17 + He4 --> p + Ne20 - - rate = 0.0; - drate_dT = 0.0; - - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; - - // nacr - ln_set_rate = 38.6287 + -43.18 * tfactors.T913i + 4.46827 * tfactors.T913 - + -1.63915 * tfactors.T9 + 0.123483 * tfactors.T953 + -0.666667 * tfactors.lnT9; - - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -43.18 * tfactors.T943i + (1.0/3.0) * 4.46827 * tfactors.T923i - + -1.63915 + (5.0/3.0) * 0.123483 * tfactors.T923 + -0.666667 * tfactors.T9i; - } - - // avoid underflows by zeroing rates in [0.0, 1.e-100] - ln_set_rate = std::max(ln_set_rate, -230.0); - set_rate = std::exp(ln_set_rate); - rate += set_rate; - if constexpr (do_T_derivatives) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; - } - -} - template AMREX_GPU_HOST_DEVICE AMREX_INLINE void rate_p_F18_to_He4_O15_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { @@ -2823,12 +2712,6 @@ fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) if constexpr (std::is_same_v) { rate_eval.dscreened_rates_dT(k_O15_to_N15_reaclib) = drate_dT; - } - rate_B8_to_p_Be7_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_B8_to_p_Be7_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_B8_to_p_Be7_reaclib) = drate_dT; - } rate_B8_to_He4_He4_reaclib(tfactors, rate, drate_dT); rate_eval.screened_rates(k_B8_to_He4_He4_reaclib) = rate; @@ -2836,16 +2719,10 @@ fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) rate_eval.dscreened_rates_dT(k_B8_to_He4_He4_reaclib) = drate_dT; } - rate_F17_to_p_O16_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_F17_to_p_O16_reaclib) = rate; + rate_p_p_to_d_reaclib_beta_pos(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos) = rate; if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F17_to_p_O16_reaclib) = drate_dT; - - } - rate_p_p_to_d_reaclib_bet_pos(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos) = drate_dT; + rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos) = drate_dT; } rate_p_p_to_d_reaclib_electron_capture(tfactors, rate, drate_dT); @@ -3045,12 +2922,6 @@ fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) if constexpr (std::is_same_v) { rate_eval.dscreened_rates_dT(k_p_O18_to_He4_N15_reaclib) = drate_dT; - } - rate_He4_F17_to_p_Ne20_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_F17_to_p_Ne20_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_F17_to_p_Ne20_reaclib) = drate_dT; - } rate_p_F18_to_He4_O15_reaclib(tfactors, rate, drate_dT); rate_eval.screened_rates(k_p_F18_to_He4_O15_reaclib) = rate; diff --git a/networks/nova/actual_network.H b/networks/nova/actual_network.H index df0e6ef0e..50a66631a 100644 --- a/networks/nova/actual_network.H +++ b/networks/nova/actual_network.H @@ -194,35 +194,59 @@ namespace Rates k_N13_to_C13_reaclib = 1, k_O14_to_N14_reaclib = 2, k_O15_to_N15_reaclib = 3, - k_F17_to_O17_reaclib = 4, - k_B8_to_He4_He4_reaclib = 5, - k_p_p_to_d_reaclib_bet_pos = 6, - k_p_p_to_d_reaclib_electron_capture = 7, - k_p_d_to_He3_reaclib = 8, - k_d_d_to_He4_reaclib = 9, - k_p_He3_to_He4_reaclib = 10, - k_He4_He3_to_Be7_reaclib = 11, - k_p_Be7_to_B8_reaclib = 12, - k_p_C12_to_N13_reaclib = 13, - k_He4_C12_to_O16_reaclib = 14, - k_p_C13_to_N14_reaclib = 15, - k_p_N13_to_O14_reaclib = 16, - k_p_N14_to_O15_reaclib = 17, - k_He4_N14_to_F18_reaclib = 18, - k_p_N15_to_O16_reaclib = 19, - k_p_O16_to_F17_reaclib = 20, - k_p_O17_to_F18_reaclib = 21, - k_d_He3_to_p_He4_reaclib = 22, - k_He4_N13_to_p_O16_reaclib = 23, - k_p_N15_to_He4_C12_reaclib = 24, - k_He4_O14_to_p_F17_reaclib = 25, - k_p_O17_to_He4_N14_reaclib = 26, - k_p_F18_to_He4_O15_reaclib = 27, - k_He3_He3_to_p_p_He4_reaclib = 28, - k_d_Be7_to_p_He4_He4_reaclib = 29, - k_He3_Be7_to_p_p_He4_He4_reaclib = 30, - k_He4_He4_He4_to_C12_reaclib = 31, - NumRates = k_He4_He4_He4_to_C12_reaclib + k_B8_to_He4_He4_reaclib = 4, + k_p_p_to_d_reaclib_beta_pos = 5, + k_p_p_to_d_reaclib_electron_capture = 6, + k_p_d_to_He3_reaclib = 7, + k_d_d_to_He4_reaclib = 8, + k_p_He3_to_He4_reaclib = 9, + k_He4_He3_to_Be7_reaclib = 10, + k_p_Be7_to_B8_reaclib = 11, + k_p_C12_to_N13_reaclib = 12, + k_He4_C12_to_O16_reaclib = 13, + k_p_C13_to_N14_reaclib = 14, + k_p_N13_to_O14_reaclib = 15, + k_p_N14_to_O15_reaclib = 16, + k_He4_N14_to_F18_reaclib = 17, + k_p_N15_to_O16_reaclib = 18, + k_p_O16_to_F17_reaclib = 19, + k_p_O17_to_F18_reaclib = 20, + k_d_He3_to_p_He4_reaclib = 21, + k_He4_N13_to_p_O16_reaclib = 22, + k_p_N15_to_He4_C12_reaclib = 23, + k_He4_O14_to_p_F17_reaclib = 24, + k_p_O17_to_He4_N14_reaclib = 25, + k_p_F18_to_He4_O15_reaclib = 26, + k_He3_He3_to_p_p_He4_reaclib = 27, + k_d_Be7_to_p_He4_He4_reaclib = 28, + k_He3_Be7_to_p_p_He4_He4_reaclib = 29, + k_He4_He4_He4_to_C12_reaclib = 30, + k_F17_to_O17_weaktab = 31, + k_O17_to_F17_weaktab = 32, + k_He3_to_p_d_derived = 33, + k_He4_to_d_d_derived = 34, + k_Be7_to_He4_He3_derived = 35, + k_B8_to_p_Be7_derived = 36, + k_N13_to_p_C12_derived = 37, + k_N14_to_p_C13_derived = 38, + k_O14_to_p_N13_derived = 39, + k_O15_to_p_N14_derived = 40, + k_O16_to_p_N15_derived = 41, + k_O16_to_He4_C12_derived = 42, + k_F17_to_p_O16_derived = 43, + k_F18_to_p_O17_derived = 44, + k_F18_to_He4_N14_derived = 45, + k_C12_to_He4_He4_He4_derived = 46, + k_p_He4_to_d_He3_derived = 47, + k_He4_C12_to_p_N15_derived = 48, + k_He4_N14_to_p_O17_derived = 49, + k_He4_O15_to_p_F18_derived = 50, + k_p_O16_to_He4_N13_derived = 51, + k_p_F17_to_He4_O14_derived = 52, + k_p_p_He4_to_He3_He3_derived = 53, + k_p_He4_He4_to_d_Be7_derived = 54, + k_p_p_He4_He4_to_He3_Be7_derived = 55, + NumRates = k_p_p_He4_He4_to_He3_Be7_derived }; // rate names -- note: the rates are 1-based, not zero-based, so we pad @@ -234,34 +258,58 @@ namespace Rates "N13_to_C13_reaclib", // 1, "O14_to_N14_reaclib", // 2, "O15_to_N15_reaclib", // 3, - "F17_to_O17_reaclib", // 4, - "B8_to_He4_He4_reaclib", // 5, - "p_p_to_d_reaclib_bet_pos", // 6, - "p_p_to_d_reaclib_electron_capture", // 7, - "p_d_to_He3_reaclib", // 8, - "d_d_to_He4_reaclib", // 9, - "p_He3_to_He4_reaclib", // 10, - "He4_He3_to_Be7_reaclib", // 11, - "p_Be7_to_B8_reaclib", // 12, - "p_C12_to_N13_reaclib", // 13, - "He4_C12_to_O16_reaclib", // 14, - "p_C13_to_N14_reaclib", // 15, - "p_N13_to_O14_reaclib", // 16, - "p_N14_to_O15_reaclib", // 17, - "He4_N14_to_F18_reaclib", // 18, - "p_N15_to_O16_reaclib", // 19, - "p_O16_to_F17_reaclib", // 20, - "p_O17_to_F18_reaclib", // 21, - "d_He3_to_p_He4_reaclib", // 22, - "He4_N13_to_p_O16_reaclib", // 23, - "p_N15_to_He4_C12_reaclib", // 24, - "He4_O14_to_p_F17_reaclib", // 25, - "p_O17_to_He4_N14_reaclib", // 26, - "p_F18_to_He4_O15_reaclib", // 27, - "He3_He3_to_p_p_He4_reaclib", // 28, - "d_Be7_to_p_He4_He4_reaclib", // 29, - "He3_Be7_to_p_p_He4_He4_reaclib", // 30, - "He4_He4_He4_to_C12_reaclib" // 31, + "B8_to_He4_He4_reaclib", // 4, + "p_p_to_d_reaclib_beta_pos", // 5, + "p_p_to_d_reaclib_electron_capture", // 6, + "p_d_to_He3_reaclib", // 7, + "d_d_to_He4_reaclib", // 8, + "p_He3_to_He4_reaclib", // 9, + "He4_He3_to_Be7_reaclib", // 10, + "p_Be7_to_B8_reaclib", // 11, + "p_C12_to_N13_reaclib", // 12, + "He4_C12_to_O16_reaclib", // 13, + "p_C13_to_N14_reaclib", // 14, + "p_N13_to_O14_reaclib", // 15, + "p_N14_to_O15_reaclib", // 16, + "He4_N14_to_F18_reaclib", // 17, + "p_N15_to_O16_reaclib", // 18, + "p_O16_to_F17_reaclib", // 19, + "p_O17_to_F18_reaclib", // 20, + "d_He3_to_p_He4_reaclib", // 21, + "He4_N13_to_p_O16_reaclib", // 22, + "p_N15_to_He4_C12_reaclib", // 23, + "He4_O14_to_p_F17_reaclib", // 24, + "p_O17_to_He4_N14_reaclib", // 25, + "p_F18_to_He4_O15_reaclib", // 26, + "He3_He3_to_p_p_He4_reaclib", // 27, + "d_Be7_to_p_He4_He4_reaclib", // 28, + "He3_Be7_to_p_p_He4_He4_reaclib", // 29, + "He4_He4_He4_to_C12_reaclib", // 30, + "F17_to_O17_weaktab", // 31, + "O17_to_F17_weaktab", // 32, + "He3_to_p_d_derived", // 33, + "He4_to_d_d_derived", // 34, + "Be7_to_He4_He3_derived", // 35, + "B8_to_p_Be7_derived", // 36, + "N13_to_p_C12_derived", // 37, + "N14_to_p_C13_derived", // 38, + "O14_to_p_N13_derived", // 39, + "O15_to_p_N14_derived", // 40, + "O16_to_p_N15_derived", // 41, + "O16_to_He4_C12_derived", // 42, + "F17_to_p_O16_derived", // 43, + "F18_to_p_O17_derived", // 44, + "F18_to_He4_N14_derived", // 45, + "C12_to_He4_He4_He4_derived", // 46, + "p_He4_to_d_He3_derived", // 47, + "He4_C12_to_p_N15_derived", // 48, + "He4_N14_to_p_O17_derived", // 49, + "He4_O15_to_p_F18_derived", // 50, + "p_O16_to_He4_N13_derived", // 51, + "p_F17_to_He4_O14_derived", // 52, + "p_p_He4_to_He3_He3_derived", // 53, + "p_He4_He4_to_d_Be7_derived", // 54, + "p_p_He4_He4_to_He3_Be7_derived" // 55, }; } @@ -285,9 +333,29 @@ namespace NSE_INDEX constexpr int H1_index = 1; constexpr int N_index = -1; constexpr int He4_index = 4; - constexpr int NumNSERatePairs = 0; + constexpr int NumNSERatePairs = 20; inline AMREX_GPU_MANAGED amrex::Array2D rate_pair_data { + H1, H2, -1, He3, -1, -1, H2, He3, k_p_d_to_He3_reaclib, k_He3_to_p_d_derived, + H2, H2, -1, He4, -1, -1, H2, H2, k_d_d_to_He4_reaclib, k_He4_to_d_d_derived, + He4, He3, -1, Be7, -1, -1, He3, Be7, k_He4_He3_to_Be7_reaclib, k_Be7_to_He4_He3_derived, + H1, Be7, -1, B8, -1, -1, Be7, B8, k_p_Be7_to_B8_reaclib, k_B8_to_p_Be7_derived, + H1, C12, -1, N13, -1, -1, C12, N13, k_p_C12_to_N13_reaclib, k_N13_to_p_C12_derived, + He4, C12, -1, O16, -1, -1, C12, O16, k_He4_C12_to_O16_reaclib, k_O16_to_He4_C12_derived, + H1, C13, -1, N14, -1, -1, C13, N14, k_p_C13_to_N14_reaclib, k_N14_to_p_C13_derived, + H1, N13, -1, O14, -1, -1, N13, O14, k_p_N13_to_O14_reaclib, k_O14_to_p_N13_derived, + H1, N14, -1, O15, -1, -1, N14, O15, k_p_N14_to_O15_reaclib, k_O15_to_p_N14_derived, + He4, N14, -1, F18, -1, -1, N14, F18, k_He4_N14_to_F18_reaclib, k_F18_to_He4_N14_derived, + H1, N15, -1, O16, -1, -1, N15, O16, k_p_N15_to_O16_reaclib, k_O16_to_p_N15_derived, + H1, O16, -1, F17, -1, -1, O16, F17, k_p_O16_to_F17_reaclib, k_F17_to_p_O16_derived, + H1, O17, -1, F18, -1, -1, O17, F18, k_p_O17_to_F18_reaclib, k_F18_to_p_O17_derived, + H2, He3, -1, H1, He4, -1, H2, He3, k_d_He3_to_p_He4_reaclib, k_p_He4_to_d_He3_derived, + He4, N13, -1, H1, O16, -1, N13, O16, k_He4_N13_to_p_O16_reaclib, k_p_O16_to_He4_N13_derived, + H1, N15, -1, He4, C12, -1, N15, C12, k_p_N15_to_He4_C12_reaclib, k_He4_C12_to_p_N15_derived, + He4, O14, -1, H1, F17, -1, O14, F17, k_He4_O14_to_p_F17_reaclib, k_p_F17_to_He4_O14_derived, + H1, O17, -1, He4, N14, -1, O17, N14, k_p_O17_to_He4_N14_reaclib, k_He4_N14_to_p_O17_derived, + H1, F18, -1, He4, O15, -1, F18, O15, k_p_F18_to_He4_O15_reaclib, k_He4_O15_to_p_F18_derived, + He4, He4, He4, C12, -1, -1, C12, -1, k_He4_He4_He4_to_C12_reaclib, k_C12_to_He4_He4_He4_derived }; } #endif diff --git a/networks/nova/actual_rhs.H b/networks/nova/actual_rhs.H index 8207a05fd..dce7b7a41 100644 --- a/networks/nova/actual_rhs.H +++ b/networks/nova/actual_rhs.H @@ -97,11 +97,11 @@ void evaluate_rates(const burn_t& state, actual_screen(pstate, scn_fac, scor, dscor_dt); } - ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos); - rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos) *= scor; + ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos); + rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos) *= scor; if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos); - rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos) = ratraw * dscor_dt + dratraw_dT * scor; + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos); + rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos) = ratraw * dscor_dt + dratraw_dT * scor; } ratraw = rate_eval.screened_rates(k_p_p_to_d_reaclib_electron_capture); @@ -111,6 +111,13 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_electron_capture) = ratraw * dscor_dt + dratraw_dT * scor; } + ratraw = rate_eval.screened_rates(k_p_p_He4_He4_to_He3_Be7_derived); + rate_eval.screened_rates(k_p_p_He4_He4_to_He3_Be7_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_He4_He4_to_He3_Be7_derived); + rate_eval.dscreened_rates_dT(k_p_p_He4_He4_to_He3_Be7_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 1.0_rt, 2.0_rt); @@ -209,6 +216,13 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_He4_C12_to_O16_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; } + ratraw = rate_eval.screened_rates(k_He4_C12_to_p_N15_derived); + rate_eval.screened_rates(k_He4_C12_to_p_N15_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_C12_to_p_N15_derived); + rate_eval.dscreened_rates_dT(k_He4_C12_to_p_N15_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 6.0_rt, 13.0_rt); @@ -265,6 +279,13 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_He4_N14_to_F18_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; } + ratraw = rate_eval.screened_rates(k_He4_N14_to_p_O17_derived); + rate_eval.screened_rates(k_He4_N14_to_p_O17_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_N14_to_p_O17_derived); + rate_eval.dscreened_rates_dT(k_He4_N14_to_p_O17_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 7.0_rt, 15.0_rt); @@ -300,6 +321,13 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_p_O16_to_F17_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; } + ratraw = rate_eval.screened_rates(k_p_O16_to_He4_N13_derived); + rate_eval.screened_rates(k_p_O16_to_He4_N13_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived); + rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 17.0_rt); @@ -440,6 +468,76 @@ void evaluate_rates(const burn_t& state, rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib) = ratraw * (scor * dscor2_dt + dscor_dt * scor2) + dratraw_dT * scor * scor2; } + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 2.0_rt, 4.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_p_He4_to_d_He3_derived); + rate_eval.screened_rates(k_p_He4_to_d_He3_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_He4_to_d_He3_derived); + rate_eval.dscreened_rates_dT(k_p_He4_to_d_He3_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 8.0_rt, 15.0_rt); + static_assert(scn_fac.z1 == 2.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_He4_O15_to_p_F18_derived); + rate_eval.screened_rates(k_He4_O15_to_p_F18_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_O15_to_p_F18_derived); + rate_eval.dscreened_rates_dT(k_He4_O15_to_p_F18_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 9.0_rt, 17.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_p_F17_to_He4_O14_derived); + rate_eval.screened_rates(k_p_F17_to_He4_O14_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_F17_to_He4_O14_derived); + rate_eval.dscreened_rates_dT(k_p_F17_to_He4_O14_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 1.0_rt, 1.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_p_p_He4_to_He3_He3_derived); + rate_eval.screened_rates(k_p_p_He4_to_He3_He3_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p_He4_to_He3_He3_derived); + rate_eval.dscreened_rates_dT(k_p_p_He4_to_He3_He3_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 2.0_rt, 4.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + ratraw = rate_eval.screened_rates(k_p_He4_He4_to_d_Be7_derived); + rate_eval.screened_rates(k_p_He4_He4_to_d_Be7_derived) *= scor; + if constexpr (std::is_same_v) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_He4_He4_to_d_Be7_derived); + rate_eval.dscreened_rates_dT(k_p_He4_He4_to_d_Be7_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + #endif // Fill approximate rates @@ -452,6 +550,25 @@ void evaluate_rates(const burn_t& state, rate_eval.enuc_weak = 0.0_rt; + amrex::Real log_temp = std::log10(state.T); + amrex::Real log_rhoy = std::log10(rhoy); + + tabular_evaluate(j_F17_O17_meta, j_F17_O17_rhoy, j_F17_O17_temp, j_F17_O17_data, + log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F17_to_O17_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_to_O17_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(F17) * (edot_nu + edot_gamma); + + tabular_evaluate(j_O17_F17_meta, j_O17_F17_rhoy, j_O17_F17_temp, j_O17_F17_data, + log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_O17_to_F17_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O17_to_F17_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(O17) * (edot_nu + edot_gamma); + } @@ -500,14 +617,28 @@ void get_ydot_weak(const burn_t& state, // Calculate tabular rates and get ydot_weak + amrex::Real log_temp = std::log10(state.T); + amrex::Real log_rhoy = std::log10(rhoy); + + tabular_evaluate(j_F17_O17_meta, j_F17_O17_rhoy, j_F17_O17_temp, j_F17_O17_data, + log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F17_to_O17_weaktab) = rate; + rate_eval.enuc_weak += C::n_A * Y(F17) * (edot_nu + edot_gamma); + + tabular_evaluate(j_O17_F17_meta, j_O17_F17_rhoy, j_O17_F17_temp, j_O17_F17_data, + log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_O17_to_F17_weaktab) = rate; + rate_eval.enuc_weak += C::n_A * Y(O17) * (edot_nu + edot_gamma); + + auto screened_rates = rate_eval.screened_rates; ydot_nuc(H1) = - -screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + -screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho; ydot_nuc(H2) = - 0.5*screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + 0.5*screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e; ydot_nuc(He3) = @@ -545,10 +676,10 @@ void get_ydot_weak(const burn_t& state, ydot_nuc(O16) = 0.0_rt; ydot_nuc(O17) = - screened_rates(k_F17_to_O17_reaclib)*Y(F17); + (screened_rates(k_F17_to_O17_weaktab)*Y(F17) + -screened_rates(k_O17_to_F17_weaktab)*Y(O17)); ydot_nuc(F17) = - -screened_rates(k_F17_to_O17_reaclib)*Y(F17); + (-screened_rates(k_F17_to_O17_weaktab)*Y(F17) + screened_rates(k_O17_to_F17_weaktab)*Y(O17)); ydot_nuc(F18) = 0.0_rt; @@ -566,130 +697,130 @@ void rhs_nuc(const burn_t& state, using namespace Rates; ydot_nuc(H1) = - -screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + -screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + - -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + + (-screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + screened_rates(k_He3_to_p_d_derived)*Y(He3)) + -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho + - -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + - -screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + - -screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + - -screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + - -screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + - -screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + - -screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + - -screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + - -screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + - -screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + - -screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + - screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + - screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + - 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho; + (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_derived)*Y(B8)) + + (-screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + screened_rates(k_N14_to_p_C13_derived)*Y(N14)) + + (-screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (-screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (-screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + -screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*Y(H1)*state.rho) + + (screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + -screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + + (-screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (-screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (-screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho) + + (screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + -screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)) + + (screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + -0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<2>(state.rho)) + + (2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + -0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho)); ydot_nuc(H2) = - 0.5*screened_rates(k_p_p_to_d_reaclib_bet_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_to_d_reaclib_beta_pos)*amrex::Math::powi<2>(Y(H1))*state.rho + 0.5*screened_rates(k_p_p_to_d_reaclib_electron_capture)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)*state.y_e + - -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + - -screened_rates(k_d_d_to_He4_reaclib)*amrex::Math::powi<2>(Y(H2))*state.rho + - -screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + - -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho; + (-screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + screened_rates(k_He3_to_p_d_derived)*Y(He3)) + + (-screened_rates(k_d_d_to_He4_reaclib)*amrex::Math::powi<2>(Y(H2))*state.rho + 2.0*screened_rates(k_He4_to_d_d_derived)*Y(He4)) + + (-screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*Y(H1)*state.rho) + + (-screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + 0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<2>(state.rho)); ydot_nuc(He3) = - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + + (screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*Y(H1)*state.rho + -screened_rates(k_He3_to_p_d_derived)*Y(He3)) + -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho + - -screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + - -screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + - -screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + - -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho; + (-screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + screened_rates(k_Be7_to_He4_He3_derived)*Y(Be7)) + + (-screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*Y(H1)*state.rho) + + (-screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)) + + (-screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + 0.25*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho)); ydot_nuc(He4) = 2.0*screened_rates(k_B8_to_He4_He4_reaclib)*Y(B8) + - 0.5*screened_rates(k_d_d_to_He4_reaclib)*amrex::Math::powi<2>(Y(H2))*state.rho + + (0.5*screened_rates(k_d_d_to_He4_reaclib)*amrex::Math::powi<2>(Y(H2))*state.rho + -screened_rates(k_He4_to_d_d_derived)*Y(He4)) + screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*Y(H1)*state.rho + - -screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + - -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + - -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + - -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + - -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + - 0.5*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + - 2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + - 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + - -0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho); + (-screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + screened_rates(k_Be7_to_He4_He3_derived)*Y(Be7)) + + (-screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (-screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*Y(H2)*state.rho + -screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*Y(H1)*state.rho) + + (-screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + + (screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (-screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho) + + (0.5*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + -0.5*screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho)) + + (2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + -screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<2>(state.rho)) + + (2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + -0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho)) + + (-0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho) + 3.0*screened_rates(k_C12_to_He4_He4_He4_derived)*Y(C12)); ydot_nuc(Be7) = - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + - -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + - -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + - -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho; + (screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*Y(He4)*state.rho + -screened_rates(k_Be7_to_He4_He3_derived)*Y(Be7)) + + (-screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + screened_rates(k_B8_to_p_Be7_derived)*Y(B8)) + + (-screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*Y(H2)*state.rho + 0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<2>(state.rho)) + + (-screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*Y(He3)*state.rho + 0.25*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho)); ydot_nuc(B8) = -screened_rates(k_B8_to_He4_He4_reaclib)*Y(B8) + - screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho; + (screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*Y(H1)*state.rho + -screened_rates(k_B8_to_p_Be7_derived)*Y(B8)); ydot_nuc(C12) = - -screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + - -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + - 0.16666666666666667*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho); + (-screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (0.16666666666666667*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<3>(Y(He4))*amrex::Math::powi<2>(state.rho) + -screened_rates(k_C12_to_He4_He4_He4_derived)*Y(C12)); ydot_nuc(C13) = screened_rates(k_N13_to_C13_reaclib)*Y(N13) + - -screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho; + (-screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + screened_rates(k_N14_to_p_C13_derived)*Y(N14)); ydot_nuc(N13) = -screened_rates(k_N13_to_C13_reaclib)*Y(N13) + - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + - -screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + - -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho; + (screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + -screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho); ydot_nuc(N14) = screened_rates(k_O14_to_N14_reaclib)*Y(O14) + - screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + - -screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + - -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho; + (screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + -screened_rates(k_N14_to_p_C13_derived)*Y(N14)) + + (-screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (-screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho); ydot_nuc(N15) = screened_rates(k_O15_to_N15_reaclib)*Y(O15) + - -screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + - -screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho; + (-screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho); ydot_nuc(O14) = -screened_rates(k_O14_to_N14_reaclib)*Y(O14) + - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + - -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho; + (screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + -screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho); ydot_nuc(O15) = -screened_rates(k_O15_to_N15_reaclib)*Y(O15) + - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho; + (screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + -screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho); ydot_nuc(O16) = - screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + - -screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho; + (screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + -screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + -screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho); ydot_nuc(O17) = - screened_rates(k_F17_to_O17_reaclib)*Y(F17) + - -screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + - -screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho; + (-screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (-screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (screened_rates(k_F17_to_O17_weaktab)*Y(F17) + -screened_rates(k_O17_to_F17_weaktab)*Y(O17)); ydot_nuc(F17) = - -screened_rates(k_F17_to_O17_reaclib)*Y(F17) + - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho; + (screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + -screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (-screened_rates(k_F17_to_O17_weaktab)*Y(F17) + screened_rates(k_O17_to_F17_weaktab)*Y(O17)); ydot_nuc(F18) = - screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + - screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + - -screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho; + (screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + -screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (-screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho); } @@ -750,64 +881,68 @@ void jac_nuc(const burn_t& state, amrex::Real scratch; - scratch = -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_bet_pos)*Y(H1)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; + scratch = -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*state.rho - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho - 0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho - screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho - screened_rates(k_p_O17_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho - 1.0*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<3>(state.rho) - 2.0*screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho) - 2.0*screened_rates(k_p_p_to_d_reaclib_beta_pos)*Y(H1)*state.rho - 2.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; jac.set(H1, H1, scratch); scratch = screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H1)*state.rho; jac.set(H1, H2, scratch); - scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; + scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_He3_to_p_d_derived) + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; jac.set(H1, He3, scratch); - scratch = screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; + scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_N14_to_p_O17_derived)*Y(N14)*state.rho + screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho + screened_rates(k_He4_O15_to_p_F18_derived)*Y(O15)*state.rho - 1.0*screened_rates(k_p_He4_He4_to_d_Be7_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho) - screened_rates(k_p_He4_to_d_He3_derived)*Y(H1)*state.rho - 1.0*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho) - screened_rates(k_p_p_He4_to_He3_He3_derived)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho); jac.set(H1, He4, scratch); scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(H1, Be7, scratch); - jac.set(H1, B8, 0.0); + scratch = screened_rates(k_B8_to_p_Be7_derived); + jac.set(H1, B8, scratch); - scratch = -screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(He4)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; jac.set(H1, C12, scratch); scratch = -screened_rates(k_p_C13_to_N14_reaclib)*Y(H1)*state.rho; jac.set(H1, C13, scratch); - scratch = screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho + screened_rates(k_N13_to_p_C12_derived) - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; jac.set(H1, N13, scratch); - scratch = -screened_rates(k_p_N14_to_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho + screened_rates(k_N14_to_p_C13_derived) - screened_rates(k_p_N14_to_O15_reaclib)*Y(H1)*state.rho; jac.set(H1, N14, scratch); scratch = -screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(H1)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(H1)*state.rho; jac.set(H1, N15, scratch); - scratch = screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho + screened_rates(k_O14_to_p_N13_derived); jac.set(H1, O14, scratch); - jac.set(H1, O15, 0.0); + scratch = screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho + screened_rates(k_O15_to_p_N14_derived); + jac.set(H1, O15, scratch); - scratch = -screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O16_to_p_N15_derived) - screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; jac.set(H1, O16, scratch); scratch = -screened_rates(k_p_O17_to_F18_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(H1, O17, scratch); - jac.set(H1, F17, 0.0); + scratch = screened_rates(k_F17_to_p_O16_derived) - screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; + jac.set(H1, F17, scratch); - scratch = -screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F18_to_p_O17_derived) - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; jac.set(H1, F18, scratch); - scratch = -screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_bet_pos)*Y(H1)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; + scratch = 0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) + screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_beta_pos)*Y(H1)*state.rho + 1.0*screened_rates(k_p_p_to_d_reaclib_electron_capture)*Y(H1)*amrex::Math::powi<2>(state.rho)*state.y_e; jac.set(H2, H1, scratch); scratch = -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho - 2.0*screened_rates(k_d_d_to_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_d_to_He3_reaclib)*Y(H1)*state.rho; jac.set(H2, H2, scratch); - scratch = -screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho; + scratch = screened_rates(k_He3_to_p_d_derived) - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho; jac.set(H2, He3, scratch); - jac.set(H2, He4, 0.0); + scratch = 2.0*screened_rates(k_He4_to_d_d_derived) + 1.0*screened_rates(k_p_He4_He4_to_d_Be7_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho) + screened_rates(k_p_He4_to_d_He3_derived)*Y(H1)*state.rho; + jac.set(H2, He4, scratch); scratch = -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho; jac.set(H2, Be7, scratch); @@ -836,19 +971,19 @@ void jac_nuc(const burn_t& state, jac.set(H2, F18, 0.0); - scratch = -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho; + scratch = -screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*state.rho + screened_rates(k_p_d_to_He3_reaclib)*Y(H2)*state.rho + 0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<3>(state.rho) + 2.0*screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho); jac.set(He3, H1, scratch); scratch = -screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_p_d_to_He3_reaclib)*Y(H1)*state.rho; jac.set(He3, H2, scratch); - scratch = -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho - 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He4)*state.rho - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho - 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He3_to_p_d_derived) - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He4)*state.rho - screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; jac.set(He3, He3, scratch); - scratch = -screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho; + scratch = -screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho + screened_rates(k_p_He4_to_d_He3_derived)*Y(H1)*state.rho + 0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho) + screened_rates(k_p_p_He4_to_He3_He3_derived)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho); jac.set(He3, He4, scratch); - scratch = -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho; + scratch = screened_rates(k_Be7_to_He4_He3_derived) - screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho; jac.set(He3, Be7, scratch); jac.set(He3, B8, 0.0); @@ -875,7 +1010,7 @@ void jac_nuc(const burn_t& state, jac.set(He3, F18, 0.0); - scratch = screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho + screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho + screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho; + scratch = screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*state.rho + screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho + screened_rates(k_p_He3_to_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_p_He4_to_d_He3_derived)*Y(He4)*state.rho + screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho + screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho - 1.0*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<3>(state.rho) - 1.0*screened_rates(k_p_p_He4_to_He3_He3_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho); jac.set(He4, H1, scratch); scratch = 2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(He3)*state.rho + 1.0*screened_rates(k_d_d_to_He4_reaclib)*Y(H2)*state.rho; @@ -884,16 +1019,16 @@ void jac_nuc(const burn_t& state, scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + 1.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He4)*state.rho + screened_rates(k_d_He3_to_p_He4_reaclib)*Y(H2)*state.rho + screened_rates(k_p_He3_to_He4_reaclib)*Y(H1)*state.rho; jac.set(He4, He3, scratch); - scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho - 1.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho; + scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho - screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho - 1.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_He4_N14_to_p_O17_derived)*Y(N14)*state.rho - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(O14)*state.rho - screened_rates(k_He4_O15_to_p_F18_derived)*Y(O15)*state.rho - screened_rates(k_He4_to_d_d_derived) - 2.0*screened_rates(k_p_He4_He4_to_d_Be7_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho) - screened_rates(k_p_He4_to_d_He3_derived)*Y(H1)*state.rho - 1.0*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho) - 0.5*screened_rates(k_p_p_He4_to_He3_He3_derived)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<2>(state.rho); jac.set(He4, He4, scratch); - scratch = 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho + 2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho; + scratch = screened_rates(k_Be7_to_He4_He3_derived) + 2.0*screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho + 2.0*screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho; jac.set(He4, Be7, scratch); scratch = 2.0*screened_rates(k_B8_to_He4_He4_reaclib); jac.set(He4, B8, scratch); - scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(He4)*state.rho; + scratch = 3.0*screened_rates(k_C12_to_He4_He4_He4_derived) - screened_rates(k_He4_C12_to_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_C12_to_p_N15_derived)*Y(He4)*state.rho; jac.set(He4, C12, scratch); jac.set(He4, C13, 0.0); @@ -901,7 +1036,7 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho; jac.set(He4, N13, scratch); - scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*state.rho; + scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho; jac.set(He4, N14, scratch); scratch = screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(H1)*state.rho; @@ -910,19 +1045,22 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho; jac.set(He4, O14, scratch); - jac.set(He4, O15, 0.0); + scratch = -screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho; + jac.set(He4, O15, scratch); - jac.set(He4, O16, 0.0); + scratch = screened_rates(k_O16_to_He4_C12_derived) + screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; + jac.set(He4, O16, scratch); scratch = screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(He4, O17, scratch); - jac.set(He4, F17, 0.0); + scratch = screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; + jac.set(He4, F17, scratch); - scratch = screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F18_to_He4_N14_derived) + screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; jac.set(He4, F18, scratch); - scratch = -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho; + scratch = -screened_rates(k_p_Be7_to_B8_reaclib)*Y(Be7)*state.rho + 0.5*screened_rates(k_p_He4_He4_to_d_Be7_derived)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho) + 0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*amrex::Math::powi<2>(Y(He4))*Y(H1)*amrex::Math::powi<3>(state.rho); jac.set(Be7, H1, scratch); scratch = -screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(Be7)*state.rho; @@ -931,13 +1069,14 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(Be7)*state.rho + screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He4)*state.rho; jac.set(Be7, He3, scratch); - scratch = screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho; + scratch = screened_rates(k_He4_He3_to_Be7_reaclib)*Y(He3)*state.rho + 1.0*screened_rates(k_p_He4_He4_to_d_Be7_derived)*Y(He4)*Y(H1)*amrex::Math::powi<2>(state.rho) + 0.5*screened_rates(k_p_p_He4_He4_to_He3_Be7_derived)*Y(He4)*amrex::Math::powi<2>(Y(H1))*amrex::Math::powi<3>(state.rho); jac.set(Be7, He4, scratch); - scratch = -screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_Be7_to_He4_He3_derived) - screened_rates(k_He3_Be7_to_p_p_He4_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_d_Be7_to_p_He4_He4_reaclib)*Y(H2)*state.rho - screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(Be7, Be7, scratch); - jac.set(Be7, B8, 0.0); + scratch = screened_rates(k_B8_to_p_Be7_derived); + jac.set(Be7, B8, scratch); jac.set(Be7, C12, 0.0); @@ -973,7 +1112,7 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_Be7_to_B8_reaclib)*Y(H1)*state.rho; jac.set(B8, Be7, scratch); - scratch = -screened_rates(k_B8_to_He4_He4_reaclib); + scratch = -screened_rates(k_B8_to_He4_He4_reaclib) - screened_rates(k_B8_to_p_Be7_derived); jac.set(B8, B8, scratch); jac.set(B8, C12, 0.0); @@ -1005,19 +1144,20 @@ void jac_nuc(const burn_t& state, jac.set(C12, He3, 0.0); - scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho + 0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho); + scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho + 0.5*screened_rates(k_He4_He4_He4_to_C12_reaclib)*amrex::Math::powi<2>(Y(He4))*amrex::Math::powi<2>(state.rho); jac.set(C12, He4, scratch); jac.set(C12, Be7, 0.0); jac.set(C12, B8, 0.0); - scratch = -screened_rates(k_He4_C12_to_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_C12_to_He4_He4_He4_derived) - screened_rates(k_He4_C12_to_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_C12_to_p_N15_derived)*Y(He4)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; jac.set(C12, C12, scratch); jac.set(C12, C13, 0.0); - jac.set(C12, N13, 0.0); + scratch = screened_rates(k_N13_to_p_C12_derived); + jac.set(C12, N13, scratch); jac.set(C12, N14, 0.0); @@ -1028,7 +1168,8 @@ void jac_nuc(const burn_t& state, jac.set(C12, O15, 0.0); - jac.set(C12, O16, 0.0); + scratch = screened_rates(k_O16_to_He4_C12_derived); + jac.set(C12, O16, scratch); jac.set(C12, O17, 0.0); @@ -1057,7 +1198,8 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_N13_to_C13_reaclib); jac.set(C13, N13, scratch); - jac.set(C13, N14, 0.0); + scratch = screened_rates(k_N14_to_p_C13_derived); + jac.set(C13, N14, scratch); jac.set(C13, N15, 0.0); @@ -1073,7 +1215,7 @@ void jac_nuc(const burn_t& state, jac.set(C13, F18, 0.0); - scratch = screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho; + scratch = screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho; jac.set(N13, H1, scratch); jac.set(N13, H2, 0.0); @@ -1092,18 +1234,20 @@ void jac_nuc(const burn_t& state, jac.set(N13, C13, 0.0); - scratch = -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_N13_to_C13_reaclib) - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_N13_to_C13_reaclib) - screened_rates(k_N13_to_p_C12_derived) - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; jac.set(N13, N13, scratch); jac.set(N13, N14, 0.0); jac.set(N13, N15, 0.0); - jac.set(N13, O14, 0.0); + scratch = screened_rates(k_O14_to_p_N13_derived); + jac.set(N13, O14, scratch); jac.set(N13, O15, 0.0); - jac.set(N13, O16, 0.0); + scratch = screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; + jac.set(N13, O16, scratch); jac.set(N13, O17, 0.0); @@ -1118,7 +1262,7 @@ void jac_nuc(const burn_t& state, jac.set(N14, He3, 0.0); - scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho; + scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_He4_N14_to_p_O17_derived)*Y(N14)*state.rho; jac.set(N14, He4, scratch); jac.set(N14, Be7, 0.0); @@ -1132,7 +1276,7 @@ void jac_nuc(const burn_t& state, jac.set(N14, N13, 0.0); - scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho - screened_rates(k_N14_to_p_C13_derived) - screened_rates(k_p_N14_to_O15_reaclib)*Y(H1)*state.rho; jac.set(N14, N14, scratch); jac.set(N14, N15, 0.0); @@ -1140,7 +1284,8 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_O14_to_N14_reaclib); jac.set(N14, O14, scratch); - jac.set(N14, O15, 0.0); + scratch = screened_rates(k_O15_to_p_N14_derived); + jac.set(N14, O15, scratch); jac.set(N14, O16, 0.0); @@ -1149,7 +1294,8 @@ void jac_nuc(const burn_t& state, jac.set(N14, F17, 0.0); - jac.set(N14, F18, 0.0); + scratch = screened_rates(k_F18_to_He4_N14_derived); + jac.set(N14, F18, scratch); scratch = -screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho; jac.set(N15, H1, scratch); @@ -1158,13 +1304,15 @@ void jac_nuc(const burn_t& state, jac.set(N15, He3, 0.0); - jac.set(N15, He4, 0.0); + scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho; + jac.set(N15, He4, scratch); jac.set(N15, Be7, 0.0); jac.set(N15, B8, 0.0); - jac.set(N15, C12, 0.0); + scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(He4)*state.rho; + jac.set(N15, C12, scratch); jac.set(N15, C13, 0.0); @@ -1180,7 +1328,8 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_O15_to_N15_reaclib); jac.set(N15, O15, scratch); - jac.set(N15, O16, 0.0); + scratch = screened_rates(k_O16_to_p_N15_derived); + jac.set(N15, O16, scratch); jac.set(N15, O17, 0.0); @@ -1188,7 +1337,7 @@ void jac_nuc(const burn_t& state, jac.set(N15, F18, 0.0); - scratch = screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho; + scratch = screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*state.rho + screened_rates(k_p_N13_to_O14_reaclib)*Y(N13)*state.rho; jac.set(O14, H1, scratch); jac.set(O14, H2, 0.0); @@ -1213,7 +1362,7 @@ void jac_nuc(const burn_t& state, jac.set(O14, N15, 0.0); - scratch = -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho - screened_rates(k_O14_to_N14_reaclib); + scratch = -screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho - screened_rates(k_O14_to_N14_reaclib) - screened_rates(k_O14_to_p_N13_derived); jac.set(O14, O14, scratch); jac.set(O14, O15, 0.0); @@ -1222,7 +1371,8 @@ void jac_nuc(const burn_t& state, jac.set(O14, O17, 0.0); - jac.set(O14, F17, 0.0); + scratch = screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; + jac.set(O14, F17, scratch); jac.set(O14, F18, 0.0); @@ -1233,7 +1383,8 @@ void jac_nuc(const burn_t& state, jac.set(O15, He3, 0.0); - jac.set(O15, He4, 0.0); + scratch = -screened_rates(k_He4_O15_to_p_F18_derived)*Y(O15)*state.rho; + jac.set(O15, He4, scratch); jac.set(O15, Be7, 0.0); @@ -1252,7 +1403,7 @@ void jac_nuc(const burn_t& state, jac.set(O15, O14, 0.0); - scratch = -screened_rates(k_O15_to_N15_reaclib); + scratch = -screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho - screened_rates(k_O15_to_N15_reaclib) - screened_rates(k_O15_to_p_N14_derived); jac.set(O15, O15, scratch); jac.set(O15, O16, 0.0); @@ -1264,7 +1415,7 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; jac.set(O15, F18, scratch); - scratch = screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho; + scratch = screened_rates(k_p_N15_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho; jac.set(O16, H1, scratch); jac.set(O16, H2, 0.0); @@ -1295,12 +1446,13 @@ void jac_nuc(const burn_t& state, jac.set(O16, O15, 0.0); - scratch = -screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_O16_to_He4_C12_derived) - screened_rates(k_O16_to_p_N15_derived) - screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; jac.set(O16, O16, scratch); jac.set(O16, O17, 0.0); - jac.set(O16, F17, 0.0); + scratch = screened_rates(k_F17_to_p_O16_derived); + jac.set(O16, F17, scratch); jac.set(O16, F18, 0.0); @@ -1311,7 +1463,8 @@ void jac_nuc(const burn_t& state, jac.set(O17, He3, 0.0); - jac.set(O17, He4, 0.0); + scratch = screened_rates(k_He4_N14_to_p_O17_derived)*Y(N14)*state.rho; + jac.set(O17, He4, scratch); jac.set(O17, Be7, 0.0); @@ -1323,7 +1476,8 @@ void jac_nuc(const burn_t& state, jac.set(O17, N13, 0.0); - jac.set(O17, N14, 0.0); + scratch = screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho; + jac.set(O17, N14, scratch); jac.set(O17, N15, 0.0); @@ -1333,15 +1487,16 @@ void jac_nuc(const burn_t& state, jac.set(O17, O16, 0.0); - scratch = -screened_rates(k_p_O17_to_F18_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_O17_to_F17_weaktab) - screened_rates(k_p_O17_to_F18_reaclib)*Y(H1)*state.rho - screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(O17, O17, scratch); - scratch = screened_rates(k_F17_to_O17_reaclib); + scratch = screened_rates(k_F17_to_O17_weaktab); jac.set(O17, F17, scratch); - jac.set(O17, F18, 0.0); + scratch = screened_rates(k_F18_to_p_O17_derived); + jac.set(O17, F18, scratch); - scratch = screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho; + scratch = -screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*state.rho + screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho; jac.set(F17, H1, scratch); jac.set(F17, H2, 0.0); @@ -1373,9 +1528,10 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho; jac.set(F17, O16, scratch); - jac.set(F17, O17, 0.0); + scratch = screened_rates(k_O17_to_F17_weaktab); + jac.set(F17, O17, scratch); - scratch = -screened_rates(k_F17_to_O17_reaclib); + scratch = -screened_rates(k_F17_to_O17_weaktab) - screened_rates(k_F17_to_p_O16_derived) - screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; jac.set(F17, F17, scratch); jac.set(F17, F18, 0.0); @@ -1387,7 +1543,7 @@ void jac_nuc(const burn_t& state, jac.set(F18, He3, 0.0); - scratch = screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho; + scratch = screened_rates(k_He4_N14_to_F18_reaclib)*Y(N14)*state.rho + screened_rates(k_He4_O15_to_p_F18_derived)*Y(O15)*state.rho; jac.set(F18, He4, scratch); jac.set(F18, Be7, 0.0); @@ -1407,7 +1563,8 @@ void jac_nuc(const burn_t& state, jac.set(F18, O14, 0.0); - jac.set(F18, O15, 0.0); + scratch = screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho; + jac.set(F18, O15, scratch); jac.set(F18, O16, 0.0); @@ -1416,7 +1573,7 @@ void jac_nuc(const burn_t& state, jac.set(F18, F17, 0.0); - scratch = -screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_F18_to_He4_N14_derived) - screened_rates(k_F18_to_p_O17_derived) - screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; jac.set(F18, F18, scratch); diff --git a/networks/nova/derived_rates.H b/networks/nova/derived_rates.H index 579d7dd3d..ad37fc3fb 100644 --- a/networks/nova/derived_rates.H +++ b/networks/nova/derived_rates.H @@ -9,6 +9,2061 @@ using namespace Rates; +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He3_to_p_d_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // He3 --> p + d + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He3_log_pf, dHe3_log_pf_dT9; + + // setting He3 log(partition function) to 0.0 by default, independent of T + He3_log_pf = 0.0_rt; + dHe3_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real d_log_pf, dd_log_pf_dT9; + + // setting d log(partition function) to 0.0 by default, independent of T + d_log_pf = 0.0_rt; + dd_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + d_log_pf - He3_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dd_log_pf_dT9 - dHe3_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from de04 + ln_set_rate = 32.462003866933586 + -63.74913110454079 * tfactors.T9i + -3.7208 * tfactors.T913i + 0.198654 * tfactors.T913 + + 1.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 63.74913110454079 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.7208 * tfactors.T943i + (1.0/3.0) * 0.198654 * tfactors.T923i + + 1.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from de04n + ln_set_rate = 31.055733866933583 + -63.74913110454079 * tfactors.T9i + -3.7208 * tfactors.T913i + 0.871782 * tfactors.T913 + + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 63.74913110454079 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.7208 * tfactors.T943i + (1.0/3.0) * 0.871782 * tfactors.T923i + + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_to_d_d_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // He4 --> d + d + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real d_log_pf, dd_log_pf_dT9; + + // setting d log(partition function) to 0.0 by default, independent of T + d_log_pf = 0.0_rt; + dd_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = d_log_pf + d_log_pf - He4_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dd_log_pf_dT9 + dd_log_pf_dT9 - dHe4_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrn + ln_set_rate = 28.331961272809913 + -276.72748859272605 * tfactors.T9i + -4.26166 * tfactors.T913i + -0.119233 * tfactors.T913 + + 0.778829 * tfactors.T9 + -0.0925203 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 276.72748859272605 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -4.26166 * tfactors.T943i + (1.0/3.0) * -0.119233 * tfactors.T923i + + 0.778829 + (5.0/3.0) * -0.0925203 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_Be7_to_He4_He3_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // Be7 --> He4 + He3 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He3_log_pf, dHe3_log_pf_dT9; + + // setting He3 log(partition function) to 0.0 by default, independent of T + He3_log_pf = 0.0_rt; + dHe3_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real Be7_log_pf, dBe7_log_pf_dT9; + + // setting Be7 log(partition function) to 0.0 by default, independent of T + Be7_log_pf = 0.0_rt; + dBe7_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He4_log_pf + He3_log_pf - Be7_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dHe3_log_pf_dT9 - dBe7_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from cd08n + ln_set_rate = 40.84436725519251 + -18.41793396772273 * tfactors.T9i + -12.8271 * tfactors.T913i + -3.8126 * tfactors.T913 + + 0.0942285 * tfactors.T9 + -0.00301018 * tfactors.T953 + 2.83333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 18.41793396772273 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -12.8271 * tfactors.T943i + (1.0/3.0) * -3.8126 * tfactors.T923i + + 0.0942285 + (5.0/3.0) * -0.00301018 * tfactors.T923 + 2.83333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from cd08n + ln_set_rate = 38.74676725519251 + -18.41793396772273 * tfactors.T9i + -12.8271 * tfactors.T913i + -0.0308225 * tfactors.T913 + + -0.654685 * tfactors.T9 + 0.0896331 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 18.41793396772273 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -12.8271 * tfactors.T943i + (1.0/3.0) * -0.0308225 * tfactors.T923i + + -0.654685 + (5.0/3.0) * 0.0896331 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_B8_to_p_Be7_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // B8 --> p + Be7 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real Be7_log_pf, dBe7_log_pf_dT9; + + // setting Be7 log(partition function) to 0.0 by default, independent of T + Be7_log_pf = 0.0_rt; + dBe7_log_pf_dT9 = 0.0_rt; + + amrex::Real B8_log_pf, dB8_log_pf_dT9; + + // setting B8 log(partition function) to 0.0 by default, independent of T + B8_log_pf = 0.0_rt; + dB8_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + Be7_log_pf - B8_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dBe7_log_pf_dT9 - dB8_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrr + ln_set_rate = 31.03415329791634 + -8.927520483432566 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 8.927520483432566 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrn + ln_set_rate = 35.83166329791634 + -1.5825204834325672 * tfactors.T9i + -10.264 * tfactors.T913i + -0.203472 * tfactors.T913 + + 0.121083 * tfactors.T9 + -0.00700063 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 1.5825204834325672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -10.264 * tfactors.T943i + (1.0/3.0) * -0.203472 * tfactors.T923i + + 0.121083 + (5.0/3.0) * -0.00700063 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_N13_to_p_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // N13 --> p + C12 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real C12_log_pf, dC12_log_pf_dT9; + + // setting C12 log(partition function) to 0.0 by default, independent of T + C12_log_pf = 0.0_rt; + dC12_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real N13_log_pf, dN13_log_pf_dT9; + + // setting N13 log(partition function) to 0.0 by default, independent of T + N13_log_pf = 0.0_rt; + dN13_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + C12_log_pf - N13_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dC12_log_pf_dT9 - dN13_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ls09n + ln_set_rate = 40.059128683693466 + -22.553277271250543 * tfactors.T9i + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 + + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 22.553277271250543 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.692 * tfactors.T943i + (1.0/3.0) * -0.230881 * tfactors.T923i + + 4.44362 + (5.0/3.0) * -3.15898 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from ls09r + ln_set_rate = 40.45372868369347 + -26.331767271250545 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 + + 0.148883 * tfactors.T9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 26.331767271250545 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.10735 * tfactors.T943i + (1.0/3.0) * -2.24111 * tfactors.T923i + + 0.148883; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_N14_to_p_C13_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // N14 --> p + C13 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real C13_log_pf, dC13_log_pf_dT9; + + // setting C13 log(partition function) to 0.0 by default, independent of T + C13_log_pf = 0.0_rt; + dC13_log_pf_dT9 = 0.0_rt; + + amrex::Real N14_log_pf, dN14_log_pf_dT9; + + // setting N14 log(partition function) to 0.0 by default, independent of T + N14_log_pf = 0.0_rt; + dN14_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + C13_log_pf - N14_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dC13_log_pf_dT9 - dN14_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrn + ln_set_rate = 41.72421240281699 + -87.62065170634826 * tfactors.T9i + -13.72 * tfactors.T913i + -0.450018 * tfactors.T913 + + 3.70823 * tfactors.T9 + -1.70545 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 87.62065170634826 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.72 * tfactors.T943i + (1.0/3.0) * -0.450018 * tfactors.T923i + + 3.70823 + (5.0/3.0) * -1.70545 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrr + ln_set_rate = 37.17241240281699 + -93.40212170634825 * tfactors.T9i + -0.196703 * tfactors.T913 + + 0.142126 * tfactors.T9 + -0.0238912 * tfactors.T953; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 93.40212170634825 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.196703 * tfactors.T923i + + 0.142126 + (5.0/3.0) * -0.0238912 * tfactors.T923; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrr + ln_set_rate = 38.39121240281698 + -101.17495170634825 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 101.17495170634825 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_O14_to_p_N13_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O14 --> p + N13 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real O14_log_pf, dO14_log_pf_dT9; + + // interpolating O14 partition function + get_partition_function_cached(O14, tfactors.T9, pf_cache, O14_log_pf, dO14_log_pf_dT9); + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real N13_log_pf, dN13_log_pf_dT9; + + // setting N13 log(partition function) to 0.0 by default, independent of T + N13_log_pf = 0.0_rt; + dN13_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + N13_log_pf - O14_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dN13_log_pf_dT9 - dO14_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from lg06r + ln_set_rate = 35.3038971632548 + -59.81629660012578 * tfactors.T9i + 1.57122 * tfactors.T913i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 59.81629660012578 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 1.57122 * tfactors.T943i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from lg06n + ln_set_rate = 42.44239716325481 + -53.690276600125785 * tfactors.T9i + -15.1676 * tfactors.T913i + 0.0955166 * tfactors.T913 + + 3.0659 * tfactors.T9 + -0.507339 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 53.690276600125785 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -15.1676 * tfactors.T943i + (1.0/3.0) * 0.0955166 * tfactors.T923i + + 3.0659 + (5.0/3.0) * -0.507339 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_O15_to_p_N14_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O15 --> p + N14 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real O15_log_pf, dO15_log_pf_dT9; + + // interpolating O15 partition function + get_partition_function_cached(O15, tfactors.T9, pf_cache, O15_log_pf, dO15_log_pf_dT9); + + amrex::Real N14_log_pf, dN14_log_pf_dT9; + + // setting N14 log(partition function) to 0.0 by default, independent of T + N14_log_pf = 0.0_rt; + dN14_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + N14_log_pf - O15_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dN14_log_pf_dT9 - dO15_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from im05r + ln_set_rate = 30.76303704754867 + -89.56670699689953 * tfactors.T9i + + 1.5682 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 89.56670699689953 * tfactors.T9i * tfactors.T9i + + 1.5682 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from im05r + ln_set_rate = 31.68169704754867 + -87.67370699689953 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 87.67370699689953 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from im05n + ln_set_rate = 44.144157047548674 + -84.67570699689952 * tfactors.T9i + -15.193 * tfactors.T913i + -4.63975 * tfactors.T913 + + 9.73458 * tfactors.T9 + -9.55051 * tfactors.T953 + 1.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 84.67570699689952 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -15.193 * tfactors.T943i + (1.0/3.0) * -4.63975 * tfactors.T923i + + 9.73458 + (5.0/3.0) * -9.55051 * tfactors.T923 + 1.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from im05n + ln_set_rate = 41.03725704754867 + -84.67570699689952 * tfactors.T9i + -15.193 * tfactors.T913i + -0.161954 * tfactors.T913 + + -7.52123 * tfactors.T9 + -0.987565 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 84.67570699689952 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -15.193 * tfactors.T943i + (1.0/3.0) * -0.161954 * tfactors.T923i + + -7.52123 + (5.0/3.0) * -0.987565 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_O16_to_p_N15_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O16 --> p + N15 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real N15_log_pf, dN15_log_pf_dT9; + + // setting N15 log(partition function) to 0.0 by default, independent of T + N15_log_pf = 0.0_rt; + dN15_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real O16_log_pf, dO16_log_pf_dT9; + + // interpolating O16 partition function + get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + N15_log_pf - O16_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dN15_log_pf_dT9 - dO16_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from li10r + ln_set_rate = 38.86679552635226 + -150.96226378057287 * tfactors.T9i + + 0.0459037 * tfactors.T9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 150.96226378057287 * tfactors.T9i * tfactors.T9i + + 0.0459037; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from li10r + ln_set_rate = 30.912955526352267 + -143.65591378057286 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 143.65591378057286 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from li10n + ln_set_rate = 44.33999552635227 + -140.73276378057287 * tfactors.T9i + -15.24 * tfactors.T913i + 0.334926 * tfactors.T913 + + 4.59088 * tfactors.T9 + -4.78468 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 140.73276378057287 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -15.24 * tfactors.T943i + (1.0/3.0) * 0.334926 * tfactors.T923i + + 4.59088 + (5.0/3.0) * -4.78468 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_O16_to_He4_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O16 --> He4 + C12 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real C12_log_pf, dC12_log_pf_dT9; + + // setting C12 log(partition function) to 0.0 by default, independent of T + C12_log_pf = 0.0_rt; + dC12_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real O16_log_pf, dO16_log_pf_dT9; + + // interpolating O16 partition function + get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + + amrex::Real net_log_pf = He4_log_pf + C12_log_pf - O16_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dC12_log_pf_dT9 - dO16_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nac2 + ln_set_rate = 279.29694929711803 + -84.95157686791683 * tfactors.T9i + 103.411 * tfactors.T913i + -420.567 * tfactors.T913 + + 64.0874 * tfactors.T9 + -12.4624 * tfactors.T953 + 138.803 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 84.95157686791683 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 103.411 * tfactors.T943i + (1.0/3.0) * -420.567 * tfactors.T923i + + 64.0874 + (5.0/3.0) * -12.4624 * tfactors.T923 + 138.803 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nac2 + ln_set_rate = 94.31554929711803 + -84.50314686791683 * tfactors.T9i + 58.9128 * tfactors.T913i + -148.273 * tfactors.T913 + + 9.08324 * tfactors.T9 + -0.541041 * tfactors.T953 + 71.8554 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 84.50314686791683 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 58.9128 * tfactors.T943i + (1.0/3.0) * -148.273 * tfactors.T923i + + 9.08324 + (5.0/3.0) * -0.541041 * tfactors.T923 + 71.8554 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_F17_to_p_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F17 --> p + O16 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real F17_log_pf, dF17_log_pf_dT9; + + // interpolating F17 partition function + get_partition_function_cached(F17, tfactors.T9, pf_cache, F17_log_pf, dF17_log_pf_dT9); + + amrex::Real O16_log_pf, dO16_log_pf_dT9; + + // interpolating O16 partition function + get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + O16_log_pf - F17_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO16_log_pf_dT9 - dF17_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ia08n + ln_set_rate = 40.93184403787935 + -6.965832070525503 * tfactors.T9i + -16.696 * tfactors.T913i + -1.16252 * tfactors.T913 + + 0.267703 * tfactors.T9 + -0.0338411 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 6.965832070525503 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.696 * tfactors.T943i + (1.0/3.0) * -1.16252 * tfactors.T923i + + 0.267703 + (5.0/3.0) * -0.0338411 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_F18_to_p_O17_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F18 --> p + O17 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real F18_log_pf, dF18_log_pf_dT9; + + // interpolating F18 partition function + get_partition_function_cached(F18, tfactors.T9, pf_cache, F18_log_pf, dF18_log_pf_dT9); + + amrex::Real O17_log_pf, dO17_log_pf_dT9; + + // interpolating O17 partition function + get_partition_function_cached(O17, tfactors.T9, pf_cache, O17_log_pf, dO17_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + O17_log_pf - F18_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO17_log_pf_dT9 - dF18_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from il10r + ln_set_rate = 33.72287495567065 + -71.29605321275191 * tfactors.T9i + 2.31435 * tfactors.T913 + + -0.302835 * tfactors.T9 + 0.020133 * tfactors.T953; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 71.29605321275191 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 2.31435 * tfactors.T923i + + -0.302835 + (5.0/3.0) * 0.020133 * tfactors.T923; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10r + ln_set_rate = 11.255394955670651 + -65.81406921275192 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.81406921275192 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10n + ln_set_rate = 40.22529495567065 + -65.06777321275192 * tfactors.T9i + -16.4035 * tfactors.T913i + 4.31885 * tfactors.T913 + + -0.709921 * tfactors.T9 + -2.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.06777321275192 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.4035 * tfactors.T943i + (1.0/3.0) * 4.31885 * tfactors.T923i + + -0.709921 + (5.0/3.0) * -2.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_F18_to_He4_N14_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F18 --> He4 + N14 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real F18_log_pf, dF18_log_pf_dT9; + + // interpolating F18 partition function + get_partition_function_cached(F18, tfactors.T9, pf_cache, F18_log_pf, dF18_log_pf_dT9); + + amrex::Real N14_log_pf, dN14_log_pf_dT9; + + // setting N14 log(partition function) to 0.0 by default, independent of T + N14_log_pf = 0.0_rt; + dN14_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He4_log_pf + N14_log_pf - F18_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dN14_log_pf_dT9 - dF18_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from il10r + ln_set_rate = 38.61662473666887 + -62.20224752987261 * tfactors.T9i + -5.6227 * tfactors.T913i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 62.20224752987261 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10r + ln_set_rate = 24.91396273666887 + -56.396987529872604 * tfactors.T9i; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 56.396987529872604 * tfactors.T9i * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10n + ln_set_rate = 46.25102473666887 + -51.236647529872606 * tfactors.T9i + -36.2504 * tfactors.T913i + + -5.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 51.236647529872606 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.2504 * tfactors.T943i + + (5.0/3.0) * -5.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // C12 --> 3 He4 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real C12_log_pf, dC12_log_pf_dT9; + + // setting C12 log(partition function) to 0.0 by default, independent of T + C12_log_pf = 0.0_rt; + dC12_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He4_log_pf + He4_log_pf + He4_log_pf - C12_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dHe4_log_pf_dT9 + dHe4_log_pf_dT9 - dC12_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from fy05r + ln_set_rate = 34.96090397991297 + -85.44440046993657 * tfactors.T9i + -23.57 * tfactors.T913i + 20.4886 * tfactors.T913 + + -12.9882 * tfactors.T9 + -20.0 * tfactors.T953 + 0.8333300000000001 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 85.44440046993657 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -23.57 * tfactors.T943i + (1.0/3.0) * 20.4886 * tfactors.T923i + + -12.9882 + (5.0/3.0) * -20.0 * tfactors.T923 + 0.8333300000000001 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from fy05n + ln_set_rate = 45.77825197991297 + -84.41994046993656 * tfactors.T9i + -37.06 * tfactors.T913i + 29.3493 * tfactors.T913 + + -115.507 * tfactors.T9 + -10.0 * tfactors.T953 + 1.66667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 84.41994046993656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.06 * tfactors.T943i + (1.0/3.0) * 29.3493 * tfactors.T923i + + -115.507 + (5.0/3.0) * -10.0 * tfactors.T923 + 1.66667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from fy05r + ln_set_rate = 22.398803979912973 + -88.54650046993656 * tfactors.T9i + -13.49 * tfactors.T913i + 21.4259 * tfactors.T913 + + -1.34769 * tfactors.T9 + 0.0879816 * tfactors.T953 + -10.1653 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 88.54650046993656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.49 * tfactors.T943i + (1.0/3.0) * 21.4259 * tfactors.T923i + + -1.34769 + (5.0/3.0) * 0.0879816 * tfactors.T923 + -10.1653 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_He4_to_d_He3_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // p + He4 --> d + He3 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He3_log_pf, dHe3_log_pf_dT9; + + // setting He3 log(partition function) to 0.0 by default, independent of T + He3_log_pf = 0.0_rt; + dHe3_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real d_log_pf, dd_log_pf_dT9; + + // setting d log(partition function) to 0.0 by default, independent of T + d_log_pf = 0.0_rt; + dd_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = d_log_pf + He3_log_pf - p_log_pf - He4_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dd_log_pf_dT9 + dHe3_log_pf_dT9 - dp_log_pf_dT9 - dHe4_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from de04 + ln_set_rate = 43.013484586436284 + -212.97835748819008 * tfactors.T9i + -7.182 * tfactors.T913i + -17.1349 * tfactors.T913 + + 1.36908 * tfactors.T9 + -0.0814423 * tfactors.T953 + 3.35395 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 212.97835748819008 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -7.182 * tfactors.T943i + (1.0/3.0) * -17.1349 * tfactors.T923i + + 1.36908 + (5.0/3.0) * -0.0814423 * tfactors.T923 + 3.35395 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from de04 + ln_set_rate = 26.40048458643628 + -212.97835748819008 * tfactors.T9i + -7.182 * tfactors.T913i + 0.473288 * tfactors.T913 + + 1.46847 * tfactors.T9 + -27.9603 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 212.97835748819008 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -7.182 * tfactors.T943i + (1.0/3.0) * 0.473288 * tfactors.T923i + + 1.46847 + (5.0/3.0) * -27.9603 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_C12_to_p_N15_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // C12 + He4 --> p + N15 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real N15_log_pf, dN15_log_pf_dT9; + + // setting N15 log(partition function) to 0.0 by default, independent of T + N15_log_pf = 0.0_rt; + dN15_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real C12_log_pf, dC12_log_pf_dT9; + + // setting C12 log(partition function) to 0.0 by default, independent of T + C12_log_pf = 0.0_rt; + dC12_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + N15_log_pf - He4_log_pf - C12_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dN15_log_pf_dT9 - dHe4_log_pf_dT9 - dC12_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrn + ln_set_rate = 27.135846229234243 + -57.62215691264642 * tfactors.T9i + -15.253 * tfactors.T913i + 1.59318 * tfactors.T913 + + 2.4479 * tfactors.T9 + -2.19708 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 57.62215691264642 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -15.253 * tfactors.T943i + (1.0/3.0) * 1.59318 * tfactors.T923i + + 2.4479 + (5.0/3.0) * -2.19708 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrr + ln_set_rate = -6.915773770765759 + -58.78595691264642 * tfactors.T9i + 22.7105 * tfactors.T913 + + -2.90707 * tfactors.T9 + 0.205754 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 58.78595691264642 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 22.7105 * tfactors.T923i + + -2.90707 + (5.0/3.0) * 0.205754 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrr + ln_set_rate = 20.556646229234243 + -65.02815691264642 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.02815691264642 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from nacrr + ln_set_rate = -5.21402377076576 + -59.643326912646415 * tfactors.T9i + 30.8497 * tfactors.T913 + + -8.50433 * tfactors.T9 + -1.54426 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 59.643326912646415 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 30.8497 * tfactors.T923i + + -8.50433 + (5.0/3.0) * -1.54426 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_N14_to_p_O17_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // N14 + He4 --> p + O17 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real O17_log_pf, dO17_log_pf_dT9; + + // interpolating O17 partition function + get_partition_function_cached(O17, tfactors.T9, pf_cache, O17_log_pf, dO17_log_pf_dT9); + + amrex::Real N14_log_pf, dN14_log_pf_dT9; + + // setting N14 log(partition function) to 0.0 by default, independent of T + N14_log_pf = 0.0_rt; + dN14_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + O17_log_pf - He4_log_pf - N14_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO17_log_pf_dT9 - dHe4_log_pf_dT9 - dN14_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from il10r + ln_set_rate = -7.592359780998223 + -14.584520682879308 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 14.584520682879308 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10n + ln_set_rate = 19.194270219001776 + -13.831125682879309 * tfactors.T9i + -16.9078 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 13.831125682879309 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.9078 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10r + ln_set_rate = 9.789270219001777 + -18.78977568287931 * tfactors.T9i + 5.10182 * tfactors.T913 + + 0.379373 * tfactors.T9 + -0.0672515 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 18.78977568287931 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.10182 * tfactors.T923i + + 0.379373 + (5.0/3.0) * -0.0672515 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10r + ln_set_rate = 5.148870219001777 + -15.945895682879309 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 15.945895682879309 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_O15_to_p_F18_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O15 + He4 --> p + F18 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real O15_log_pf, dO15_log_pf_dT9; + + // interpolating O15 partition function + get_partition_function_cached(O15, tfactors.T9, pf_cache, O15_log_pf, dO15_log_pf_dT9); + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real F18_log_pf, dF18_log_pf_dT9; + + // interpolating F18 partition function + get_partition_function_cached(F18, tfactors.T9, pf_cache, F18_log_pf, dF18_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + F18_log_pf - He4_log_pf - O15_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF18_log_pf_dT9 - dHe4_log_pf_dT9 - dO15_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from il10r + ln_set_rate = 1.0671723108797964 + -36.45580946704611 * tfactors.T9i + 13.3223 * tfactors.T913 + + -1.36696 * tfactors.T9 + 0.0757363 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 36.45580946704611 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 13.3223 * tfactors.T923i + + -1.36696 + (5.0/3.0) * 0.0757363 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10r + ln_set_rate = -32.4286676891202 + -33.81549146704611 * tfactors.T9i + 61.738 * tfactors.T913 + + -108.29 * tfactors.T9 + -34.2365 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 33.81549146704611 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 61.738 * tfactors.T923i + + -108.29 + (5.0/3.0) * -34.2365 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from il10n + ln_set_rate = 61.315932310879795 + -33.43905946704611 * tfactors.T9i + -21.4023 * tfactors.T913i + -80.8891 * tfactors.T913 + + 134.6 * tfactors.T9 + -126.504 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 33.43905946704611 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.4023 * tfactors.T943i + (1.0/3.0) * -80.8891 * tfactors.T923i + + 134.6 + (5.0/3.0) * -126.504 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_O16_to_He4_N13_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // O16 + p --> He4 + N13 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real O16_log_pf, dO16_log_pf_dT9; + + // interpolating O16 partition function + get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real N13_log_pf, dN13_log_pf_dT9; + + // setting N13 log(partition function) to 0.0 by default, independent of T + N13_log_pf = 0.0_rt; + dN13_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He4_log_pf + N13_log_pf - p_log_pf - O16_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dN13_log_pf_dT9 - dp_log_pf_dT9 - dO16_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from cf88n + ln_set_rate = 42.21642061342456 + -60.557329596678294 * tfactors.T9i + -35.829 * tfactors.T913i + -0.530275 * tfactors.T913 + + -0.982462 * tfactors.T9 + 0.0808059 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 60.557329596678294 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -35.829 * tfactors.T943i + (1.0/3.0) * -0.530275 * tfactors.T923i + + -0.982462 + (5.0/3.0) * 0.0808059 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_F17_to_He4_O14_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // F17 + p --> He4 + O14 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real O14_log_pf, dO14_log_pf_dT9; + + // interpolating O14 partition function + get_partition_function_cached(O14, tfactors.T9, pf_cache, O14_log_pf, dO14_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real F17_log_pf, dF17_log_pf_dT9; + + // interpolating F17 partition function + get_partition_function_cached(F17, tfactors.T9, pf_cache, F17_log_pf, dF17_log_pf_dT9); + + amrex::Real net_log_pf = He4_log_pf + O14_log_pf - p_log_pf - F17_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO14_log_pf_dT9 - dp_log_pf_dT9 - dF17_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from Ha96r + ln_set_rate = 11.415567488049104 + -25.85518506704921 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 25.85518506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from Ha96r + ln_set_rate = 17.938467488049106 + -39.83288506704921 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 39.83288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from Ha96n + ln_set_rate = 40.122467488049104 + -13.83288506704921 * tfactors.T9i + -39.388 * tfactors.T913i + -17.4673 * tfactors.T913 + + 35.3029 * tfactors.T9 + -24.8162 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 13.83288506704921 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.388 * tfactors.T943i + (1.0/3.0) * -17.4673 * tfactors.T923i + + 35.3029 + (5.0/3.0) * -24.8162 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from Ha96r + ln_set_rate = 15.595367488049106 + -36.34288506704921 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 36.34288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from Ha96r + ln_set_rate = 10.405067488049104 + -27.43288506704921 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 27.43288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + + // ReacLib set derived from Ha96r + ln_set_rate = -106.80433251195089 + -14.285921067049209 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 14.285921067049209 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_p_He4_to_He3_He3_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // p + p + He4 --> He3 + He3 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He3_log_pf, dHe3_log_pf_dT9; + + // setting He3 log(partition function) to 0.0 by default, independent of T + He3_log_pf = 0.0_rt; + dHe3_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He3_log_pf + He3_log_pf - p_log_pf - p_log_pf - He4_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe3_log_pf_dT9 + dHe3_log_pf_dT9 - dp_log_pf_dT9 - dp_log_pf_dT9 - dHe4_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from nacrn + ln_set_rate = 2.968630719502702 + -149.22922638364452 * tfactors.T9i + -12.277 * tfactors.T913i + -0.103699 * tfactors.T913 + + -0.0649967 * tfactors.T9 + 0.0168191 * tfactors.T953 + -2.166667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 149.22922638364452 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -12.277 * tfactors.T943i + (1.0/3.0) * -0.103699 * tfactors.T923i + + -0.0649967 + (5.0/3.0) * 0.0168191 * tfactors.T923 + -2.166667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_He4_He4_to_d_Be7_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // p + He4 + He4 --> d + Be7 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real d_log_pf, dd_log_pf_dT9; + + // setting d log(partition function) to 0.0 by default, independent of T + d_log_pf = 0.0_rt; + dd_log_pf_dT9 = 0.0_rt; + + amrex::Real Be7_log_pf, dBe7_log_pf_dT9; + + // setting Be7 log(partition function) to 0.0 by default, independent of T + Be7_log_pf = 0.0_rt; + dBe7_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = d_log_pf + Be7_log_pf - p_log_pf - He4_log_pf - He4_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dd_log_pf_dT9 + dBe7_log_pf_dT9 - dp_log_pf_dT9 - dHe4_log_pf_dT9 - dHe4_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from cf88n + ln_set_rate = 6.9715645118037095 + -194.56042352046737 * tfactors.T9i + -12.428 * tfactors.T913i + + -2.166667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 194.56042352046737 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -12.428 * tfactors.T943i + + -2.166667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_p_He4_He4_to_He3_Be7_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + + // p + p + He4 + He4 --> He3 + Be7 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real He3_log_pf, dHe3_log_pf_dT9; + + // setting He3 log(partition function) to 0.0 by default, independent of T + He3_log_pf = 0.0_rt; + dHe3_log_pf_dT9 = 0.0_rt; + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real Be7_log_pf, dBe7_log_pf_dT9; + + // setting Be7 log(partition function) to 0.0 by default, independent of T + Be7_log_pf = 0.0_rt; + dBe7_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = He3_log_pf + Be7_log_pf - p_log_pf - p_log_pf - He4_log_pf - He4_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe3_log_pf_dT9 + dBe7_log_pf_dT9 - dp_log_pf_dT9 - dp_log_pf_dT9 - dHe4_log_pf_dT9 - dHe4_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from mafon + ln_set_rate = -11.817242174569923 + -130.81129241593683 * tfactors.T9i + -21.793 * tfactors.T913i + -1.98126e-09 * tfactors.T913 + + 1.84204e-10 * tfactors.T9 + -1.46403e-11 * tfactors.T953 + -3.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 130.81129241593683 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.793 * tfactors.T943i + (1.0/3.0) * -1.98126e-09 * tfactors.T923i + + 1.84204e-10 + (5.0/3.0) * -1.46403e-11 * tfactors.T923 + -3.666667 * tfactors.T9i; + + dln_set_rate_dT9 += net_dlog_pf_dT9; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + template AMREX_GPU_HOST_DEVICE AMREX_INLINE @@ -22,6 +2077,148 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) [[maybe_unused]] amrex::Real rate; [[maybe_unused]] amrex::Real drate_dT; + part_fun::pf_cache_t pf_cache{}; + + pf_cache.index_temp_array_1 = interp_net::find_index(tfactors.T9, part_fun::temp_array_1); + + rate_He3_to_p_d_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He3_to_p_d_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He3_to_p_d_derived) = drate_dT; + + } + rate_He4_to_d_d_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_to_d_d_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_to_d_d_derived) = drate_dT; + + } + rate_Be7_to_He4_He3_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Be7_to_He4_He3_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Be7_to_He4_He3_derived) = drate_dT; + + } + rate_B8_to_p_Be7_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_B8_to_p_Be7_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_B8_to_p_Be7_derived) = drate_dT; + + } + rate_N13_to_p_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_N13_to_p_C12_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N13_to_p_C12_derived) = drate_dT; + + } + rate_N14_to_p_C13_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_N14_to_p_C13_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N14_to_p_C13_derived) = drate_dT; + + } + rate_O14_to_p_N13_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O14_to_p_N13_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O14_to_p_N13_derived) = drate_dT; + + } + rate_O15_to_p_N14_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O15_to_p_N14_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O15_to_p_N14_derived) = drate_dT; + + } + rate_O16_to_p_N15_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O16_to_p_N15_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_to_p_N15_derived) = drate_dT; + + } + rate_O16_to_He4_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O16_to_He4_C12_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_to_He4_C12_derived) = drate_dT; + + } + rate_F17_to_p_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F17_to_p_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_to_p_O16_derived) = drate_dT; + + } + rate_F18_to_p_O17_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F18_to_p_O17_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_to_p_O17_derived) = drate_dT; + + } + rate_F18_to_He4_N14_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F18_to_He4_N14_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_to_He4_N14_derived) = drate_dT; + + } + rate_C12_to_He4_He4_He4_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_C12_to_He4_He4_He4_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_to_He4_He4_He4_derived) = drate_dT; + + } + rate_p_He4_to_d_He3_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_He4_to_d_He3_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_He4_to_d_He3_derived) = drate_dT; + + } + rate_He4_C12_to_p_N15_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_C12_to_p_N15_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_C12_to_p_N15_derived) = drate_dT; + + } + rate_He4_N14_to_p_O17_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_N14_to_p_O17_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_N14_to_p_O17_derived) = drate_dT; + + } + rate_He4_O15_to_p_F18_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_O15_to_p_F18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_O15_to_p_F18_derived) = drate_dT; + + } + rate_p_O16_to_He4_N13_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_O16_to_He4_N13_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived) = drate_dT; + + } + rate_p_F17_to_He4_O14_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_F17_to_He4_O14_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_F17_to_He4_O14_derived) = drate_dT; + + } + rate_p_p_He4_to_He3_He3_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_p_He4_to_He3_He3_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_He4_to_He3_He3_derived) = drate_dT; + + } + rate_p_He4_He4_to_d_Be7_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_He4_He4_to_d_Be7_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_He4_He4_to_d_Be7_derived) = drate_dT; + + } + rate_p_p_He4_He4_to_He3_Be7_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_p_He4_He4_to_He3_Be7_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_He4_He4_to_He3_Be7_derived) = drate_dT; + + } } #endif diff --git a/networks/nova/nova.png b/networks/nova/nova.png index 5963b45df..83478b9df 100644 Binary files a/networks/nova/nova.png and b/networks/nova/nova.png differ diff --git a/networks/nova/nova.py b/networks/nova/nova.py index 8acf876f9..91ef46f1c 100644 --- a/networks/nova/nova.py +++ b/networks/nova/nova.py @@ -1,18 +1,16 @@ import pynucastro as pyna -from pynucastro.networks import AmrexAstroCxxNetwork def create_network(): - mylibrary = pyna.rates.ReacLibLibrary() - all_nuclei = ["p", "h2", "he3", "he4", "be7", "b8", "c12", "c13", "n13", "n14", "n15", "o14", "o15", "o16", "o17", "f17", "f18"] - nova_library = mylibrary.linking_nuclei(all_nuclei, with_reverse=False) + net = pyna.network_helper(all_nuclei, + tabular_ordering=["ffn", "langanke", "oda"], + network_type="amrex") - net = AmrexAstroCxxNetwork(libraries=[nova_library]) return net @@ -31,9 +29,10 @@ def create_network(): edge_labels = {(pyna.Nucleus("he4"), pyna.Nucleus("c12")): r"$\alpha(\alpha\alpha,\gamma){}^{12}\mathrm{C}$"} - net.plot(rho, T, comp, - rotated=False, outfile="nova.png", + net.plot(rotated=False, outfile="nova.png", N_range=(-1, 10), Z_range=(0, 10), hide_xalpha=True, hide_xp=True, - curved_edges=True, edge_labels=edge_labels, + edge_labels=edge_labels, node_size=300, node_font_size=10) + + net.summary() diff --git a/networks/nova/partition_functions.H b/networks/nova/partition_functions.H index a261ab648..68a41075a 100644 --- a/networks/nova/partition_functions.H +++ b/networks/nova/partition_functions.H @@ -18,6 +18,173 @@ using namespace Species; namespace part_fun { + constexpr int npts_1 = 72; + + // this is T9 + + inline AMREX_GPU_MANAGED amrex::Array1D temp_array_1 = { + 0.01, 0.15, 0.2, 0.3, 0.4, + 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.5, 2.0, 2.5, 3.0, + 3.5, 4.0, 4.5, 5.0, 6.0, + 7.0, 8.0, 9.0, 10.0, 12.0, + 14.0, 16.0, 18.0, 20.0, 22.0, + 24.0, 26.0, 28.0, 30.0, 35.0, + 40.0, 45.0, 50.0, 55.0, 60.0, + 65.0, 70.0, 75.0, 80.0, 85.0, + 90.0, 95.0, 100.0, 105.0, 110.0, + 115.0, 120.0, 125.0, 130.0, 135.0, + 140.0, 145.0, 150.0, 155.0, 160.0, + 165.0, 170.0, 175.0, 180.0, 190.0, + 200.0, 210.0, 220.0, 230.0, 240.0, + 250.0, 275.0, + }; + + + // O14 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D O14_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.04879016416943205, + 0.10436001532424286, 0.1823215567939546, 0.27763173659827955, 0.3852624007906449, 0.5007752879124892, + 0.6097655716208943, 0.712949807856125, 0.8153648132841944, 0.9082585601768908, 1.1085626195212777, + 1.269760544863939, 1.3937663759585917, 1.4906543764441336, 1.5644405465033646, 1.6193882432872684, + 1.6582280766035324, 1.6845453849209058, 1.6974487897568136, 1.7029282555214393, 1.6974487897568136, + 1.6845453849209058, 1.665818245870208, 1.6409365794934714, 1.6094379124341003, 1.5748464676644813, + 1.534714366238164, 1.4883995840570443, 1.4422019930581866, 1.3887912413184778, 1.33500106673234, + 1.2781522025001875, 1.2178757094949273, 1.1568811967920856, 1.091923300517313, 1.0260415958332743, + 0.9555114450274363, 0.8878912573524571, 0.8153648132841944, 0.7419373447293773, 0.5933268452777344, + 0.4382549309311553, 0.28517894223366247, 0.12221763272424911, -0.040821994520255166, -0.2045671657412744, + -0.3696154552144672, -0.7874578600311866, + }; + + constexpr amrex::Real O14_pf_threshold_T9 = 10.0; + + // O15 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D O15_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.04879016416943205, + 0.10436001532424286, 0.1906203596086497, 0.3148107398400336, 0.47000362924573563, 0.6418538861723947, + 0.8329091229351039, 1.0296194171811581, 1.2325602611778486, 1.43746264769429, 1.9572739077056285, + 2.4849066497880004, 3.0155349008501706, 3.55820113047182, 4.109233174715851, 4.672828834461906, + 5.241747015059643, 5.814130531825066, 6.391917113392602, 6.966024187106113, 7.549609165154532, + 8.125630988477065, 8.702842538302868, 9.277999020449997, 9.852194258148577, 10.42821608147111, + 11.00043178410354, 11.571194373094205, 12.144197241812087, 12.7098736543592, 13.279367126213993, + 13.845069360205818, 14.414347059052979, 14.975531474761027, 15.541842221869874, 16.105010411409665, + 16.666217059468007, 17.22995316637645, 17.793321303930423, 18.35560874720865, 19.47847103810022, + 20.602227508569356, 21.723897717254317, 22.846724264043022, 23.969756828847586, 25.09397871172002, + 26.22043406223961, 29.03956608598326, + }; + + constexpr amrex::Real O15_pf_threshold_T9 = 10.0; + + // O16 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D O16_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.02955880224154443, + 0.08617769624105241, 0.16551443847757333, 0.27763173659827955, 0.4252677354043441, 0.6043159668533296, + 0.7975071958841882, 1.007957920399979, 1.2296405510745139, 1.4609379041156563, 2.0681277817795625, + 2.70805020110221, 3.3775875160230218, 4.062165663857866, 4.7535901911063645, 5.4510384535657, + 6.142037405587356, 6.828712071641684, 7.512071245835466, 8.185907481482324, 8.85366542803745, + 9.517825071724143, 10.177324218165856, 10.831706855275558, 11.48246625748552, 12.128111104060462, + 12.774223335915433, 13.41652441595382, 14.054527458434775, 14.690979295318174, 15.324022551808413, + 15.956752500549557, 16.588099280204055, 17.216707939626428, 17.842646370492925, 18.469470908121796, + 19.09362521719479, 19.715407911546766, 20.337603356134426, 20.954377557909798, 22.19802884605391, + 23.43796058076729, 24.670655986211848, 25.905049387238495, 27.136724794113768, 28.368185181905268, + 29.602320498988682, 32.68726692127686, + }; + + constexpr amrex::Real O16_pf_threshold_T9 = 10.0; + + // O17 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D O17_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.009950330853168092, 0.009950330853168092, + 0.01980262729617973, 0.02955880224154443, 0.03922071315328133, 0.03922071315328133, 0.058268908123975824, + 0.0769610411361284, 0.09531017980432493, 0.12221763272424911, 0.13976194237515863, 0.2151113796169455, + 0.30010459245033816, 0.4054651081081644, 0.5364933705145685, 0.6830968447064438, 0.8458682675776092, + 1.0260415958332743, 1.2178757094949273, 1.4182774069729414, 1.631199404215613, 2.1972245773362196, + 2.803360380906535, 3.4339872044851463, 4.07753744390572, 4.727387818712341, 5.3706380281276624, + 6.018593214496234, 6.660575149839686, 7.299797366758161, 7.937374696163295, 8.573573524852344, + 9.20833836930551, 9.84161214881804, 10.474467099121865, 11.107960231903714, 11.744037185933616, + 12.375815420117268, 13.008074231002201, 13.641157170819497, 14.27293540500315, 14.907433858481587, + 15.541842221869874, 16.176364559082295, 16.811242831518264, 17.445170652418238, 18.081003376382203, + 18.713350357915186, 19.35284482498281, 19.98721115537519, 20.6234455016642, 21.895747974180978, + 23.17427093505873, 24.448959264183063, 25.72721214289187, 27.01298140785541, 28.298850488504204, + 29.585466167433697, 32.8184069217693, + }; + + constexpr amrex::Real O17_pf_threshold_T9 = 2.0; + + // F17 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D F17_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.009950330853168092, 0.01980262729617973, 0.02955880224154443, 0.04879016416943205, + 0.058268908123975824, 0.0769610411361284, 0.08617769624105241, 0.09531017980432493, 0.12221763272424911, + 0.13976194237515863, 0.1570037488096647, 0.17395330712343798, 0.19885085874516517, 0.26236426446749106, + 0.3293037471426003, 0.41871033485818504, 0.5247285289349821, 0.6471032420585384, 0.7884573603642703, + 0.9400072584914712, 1.1019400787607843, 1.2781522025001875, 1.4678743481123135, 1.9810014688665833, + 2.5416019934645457, 3.1441522786722644, 3.7612001156935624, 4.388257184424518, 5.0238805208462765, + 5.655991810819852, 6.2878585601617845, 6.917705609835305, 7.549609165154532, 8.183118079394745, + 8.814330422638774, 9.441452092939569, 10.077440859659566, 10.707728780601661, 11.33857207782545, + 11.970350312009105, 12.601487417784837, 13.233904752137237, 13.864300722133706, 14.498607402670718, + 15.131918791619999, 15.765697263786848, 16.3957273875566, 17.034386382832476, 17.667783558986645, + 18.301897207962398, 18.939474537367534, 19.571252771551187, 20.207427671356875, 21.479387816667746, + 22.755353682242777, 24.033808850340435, 25.311289864099532, 26.592562750080187, 27.877881193860073, + 29.165735482166713, 32.393195050726305, + }; + + constexpr amrex::Real F17_pf_threshold_T9 = 1.0; + + // F18 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D F18_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.01980262729617973, 0.058268908123975824, 0.11332868530700327, + 0.19885085874516517, 0.28517894223366247, 0.3852624007906449, 0.4762341789963717, 0.6523251860396901, + 0.8064758658669485, 0.9360933591703348, 1.0438040521731147, 1.1378330018213911, 1.5303947050936475, + 1.742219023667919, 1.9387416595767009, 2.125847914493992, 2.312535423847214, 2.4932054526026954, + 2.681021528714291, 2.8791984572980396, 3.0819099697950434, 3.292126286607793, 3.856510295497887, + 4.468204330914934, 5.111987788356544, 5.768320995793772, 6.431331081933479, 7.098375638590786, + 7.757906208351747, 8.420682291035394, 9.080231686629162, 9.740968623038354, 10.395130356885344, + 11.052476048529304, 11.711776323715394, 12.367340793126296, 13.025852477023484, 13.68426227135432, + 14.346138809026444, 15.003353980360327, 15.665538935316304, 16.325109820342647, 16.98938901690174, + 17.654962870557586, 18.319754825362406, 18.985994553002424, 19.650321295026878, 20.316800228504665, + 20.985630101413904, 21.65148513968584, 22.32265341352701, 22.991259485170836, 24.334183749590636, + 25.679092894547672, 27.02771463936839, 28.377709063416525, 29.735155270198756, 31.093627125719348, + 32.45933485323085, 35.88424876151032, + }; + + constexpr amrex::Real F18_pf_threshold_T9 = 1.5; + // interpolation routine @@ -66,6 +233,8 @@ namespace part_fun { // Store the coefficient and derivative adjacent in memory, as they're // always accessed at the same time. amrex::Array2D data; + int index_temp_array_1{-1}; + AMREX_GPU_HOST_DEVICE AMREX_INLINE pf_cache_t() { // The entries will be default-initialized to -900, @@ -95,6 +264,42 @@ void get_partition_function(const int inuc, switch (inuc) { + case O14: + if (T9 > part_fun::O14_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::O14_pf_array, logpf, dlogpf_dT9); + } + break; + + case O15: + if (T9 > part_fun::O15_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::O15_pf_array, logpf, dlogpf_dT9); + } + break; + + case O16: + if (T9 > part_fun::O16_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::O16_pf_array, logpf, dlogpf_dT9); + } + break; + + case O17: + if (T9 > part_fun::O17_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::O17_pf_array, logpf, dlogpf_dT9); + } + break; + + case F17: + if (T9 > part_fun::F17_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::F17_pf_array, logpf, dlogpf_dT9); + } + break; + + case F18: + if (T9 > part_fun::F18_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::F18_pf_array, logpf, dlogpf_dT9); + } + break; + default: diff --git a/networks/nova/pynucastro-info.txt b/networks/nova/pynucastro-info.txt index e055581de..ddc63d065 100644 --- a/networks/nova/pynucastro-info.txt +++ b/networks/nova/pynucastro-info.txt @@ -1 +1 @@ -pynucastro version: 2.9.0-28-gbcc09d414 +pynucastro version: 2.9.0-44-g77ed73b73 diff --git a/networks/nova/reaclib_rates.H b/networks/nova/reaclib_rates.H index cc9d86885..c4d04b26e 100644 --- a/networks/nova/reaclib_rates.H +++ b/networks/nova/reaclib_rates.H @@ -115,37 +115,6 @@ void rate_O15_to_N15_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Rea } -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_F17_to_O17_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // F17 --> O17 - - rate = 0.0; - drate_dT = 0.0; - - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; - - // wc12w - ln_set_rate = -4.53318; - amrex::ignore_unused(tfactors); - - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.0; - } - - // avoid underflows by zeroing rates in [0.0, 1.e-100] - ln_set_rate = std::max(ln_set_rate, -230.0); - set_rate = std::exp(ln_set_rate); - rate += set_rate; - if constexpr (do_T_derivatives) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; - } - -} - template AMREX_GPU_HOST_DEVICE AMREX_INLINE void rate_B8_to_He4_He4_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { @@ -179,7 +148,7 @@ void rate_B8_to_He4_He4_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_p_to_d_reaclib_bet_pos(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_p_to_d_reaclib_beta_pos(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { // p + p --> d @@ -1598,12 +1567,6 @@ fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) if constexpr (std::is_same_v) { rate_eval.dscreened_rates_dT(k_O15_to_N15_reaclib) = drate_dT; - } - rate_F17_to_O17_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_F17_to_O17_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F17_to_O17_reaclib) = drate_dT; - } rate_B8_to_He4_He4_reaclib(tfactors, rate, drate_dT); rate_eval.screened_rates(k_B8_to_He4_He4_reaclib) = rate; @@ -1611,10 +1574,10 @@ fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) rate_eval.dscreened_rates_dT(k_B8_to_He4_He4_reaclib) = drate_dT; } - rate_p_p_to_d_reaclib_bet_pos(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_p_to_d_reaclib_bet_pos) = rate; + rate_p_p_to_d_reaclib_beta_pos(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_reaclib_beta_pos) = rate; if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_bet_pos) = drate_dT; + rate_eval.dscreened_rates_dT(k_p_p_to_d_reaclib_beta_pos) = drate_dT; } rate_p_p_to_d_reaclib_electron_capture(tfactors, rate, drate_dT); diff --git a/networks/nova/table_rates.H b/networks/nova/table_rates.H index 6d3fff3c9..db2bd4b03 100644 --- a/networks/nova/table_rates.H +++ b/networks/nova/table_rates.H @@ -21,7 +21,7 @@ using namespace amrex::literals; // Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) // -const int num_tables = 0; +const int num_tables = 2; enum TableVars : std::uint8_t { @@ -54,6 +54,90 @@ constexpr int add_vars = 1; // 1 Additional Var in entries namespace rate_tables { + // F17 --> O17 + inline AMREX_GPU_MANAGED table_t j_F17_O17_meta{.ntemp=12, .nrhoy=11, .nvars=3, .nheader=5}; + inline AMREX_GPU_MANAGED amrex::Array1D j_F17_O17_rhoy{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0}; + inline AMREX_GPU_MANAGED amrex::Array1D j_F17_O17_temp{7.0, 8.0, 8.30103, 8.60206, 8.845098, 9.0, 9.176091, 9.30103, 9.477121, 9.69897, 10.0, 10.477121}; + // Array3D is column-major (Fortran-ordering). T varies fastest, then rho Ye, then the component + inline AMREX_GPU_MANAGED amrex::Array3D + j_F17_O17_data{ +-1.98599, -1.985996, -1.985997, -1.985998, -1.985991, -1.985811, -1.984179, -1.977601, -1.918501, -1.559899, -0.462121, 1.718247, // RATE +-1.985903, -1.985964, -1.985971, -1.985976, -1.985976, -1.985801, -1.984173, -1.977571, -1.918501, -1.559899, -0.462121, 1.718247, +-1.985273, -1.985641, -1.985715, -1.985762, -1.985784, -1.985681, -1.984074, -1.977479, -1.918324, -1.559899, -0.462121, 1.718247, +-1.982066, -1.982755, -1.98325, -1.983647, -1.983854, -1.983902, -1.982956, -1.976495, -1.917434, -1.559232, -0.462121, 1.718247, +-1.962293, -1.962505, -1.963077, -1.964279, -1.965373, -1.965787, -1.96628, -1.962645, -1.906863, -1.553549, -0.461157, 1.718247, +-1.822514, -1.822514, -1.822514, -1.821886, -1.820939, -1.819671, -1.816492, -1.812226, -1.783616, -1.497551, -0.452441, 1.719242, +-1.201147, -1.201147, -1.200311, -1.199474, -1.196963, -1.193611, -1.183682, -1.172312, -1.140726, -1.040908, -0.370812, 1.722232, +-0.075628, -0.075628, -0.075628, -0.075628, -0.073653, -0.071677, -0.06675, -0.060857, -0.041154, 0.012185, 0.215715, 1.752107, +1.273239, 1.273239, 1.273239, 1.273239, 1.273239, 1.274239, 1.276237, 1.280233, 1.289225, 1.314208, 1.405246, 2.033211, +2.796007, 2.796007, 2.796007, 2.796007, 2.796007, 2.796007, 2.797007, 2.799007, 2.802007, 2.812007, 2.843009, 3.076122, +4.404, 4.404, 4.404, 4.404, 4.404, 4.404, 4.404, 4.405, 4.406, 4.408, 4.416, 4.486005, +-7.78129, -7.78129, -7.78129, -7.78129, -7.78129, -7.78129, -7.77529, -7.74729, -7.56429, -6.87729, -5.49729, -2.92229, // NU +-7.78129, -7.78129, -7.78129, -7.78129, -7.78129, -7.78129, -7.77529, -7.74729, -7.56429, -6.87729, -5.49729, -2.92229, +-7.77929, -7.78029, -7.78029, -7.78029, -7.78029, -7.78029, -7.77429, -7.74729, -7.56329, -6.87729, -5.49729, -2.92229, +-7.77029, -7.77229, -7.77329, -7.77429, -7.77529, -7.77529, -7.77129, -7.74429, -7.56129, -6.87629, -5.49729, -2.92229, +-7.71829, -7.71829, -7.71929, -7.72229, -7.72429, -7.72429, -7.72329, -7.70629, -7.53729, -6.86929, -5.49629, -2.92229, +-7.41529, -7.41529, -7.41429, -7.41329, -7.40829, -7.40229, -7.38929, -7.37129, -7.29229, -6.79729, -5.48829, -2.92129, +-6.53729, -6.53629, -6.53629, -6.53429, -6.53029, -6.52229, -6.50629, -6.48329, -6.42629, -6.25829, -5.40329, -2.91829, +-5.25129, -5.25129, -5.25129, -5.25029, -5.24829, -5.24529, -5.23729, -5.22629, -5.19729, -5.11129, -4.79429, -2.88729, +-3.71829, -3.71829, -3.71829, -3.71829, -3.71729, -3.71629, -3.71329, -3.70929, -3.69629, -3.66029, -3.51729, -2.60029, +-1.96929, -1.96929, -1.96929, -1.96929, -1.96929, -1.96829, -1.96729, -1.96529, -1.95929, -1.94629, -1.89529, -1.50629, +-0.07329, -0.07329, -0.07329, -0.07329, -0.07329, -0.07329, -0.07329, -0.07229, -0.07029, -0.06629, -0.05229, 0.07271, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, // GAMMA +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, + }; + + // O17 --> F17 + inline AMREX_GPU_MANAGED table_t j_O17_F17_meta{.ntemp=12, .nrhoy=11, .nvars=3, .nheader=5}; + inline AMREX_GPU_MANAGED amrex::Array1D j_O17_F17_rhoy{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0}; + inline AMREX_GPU_MANAGED amrex::Array1D j_O17_F17_temp{7.0, 8.0, 8.30103, 8.60206, 8.845098, 9.0, 9.176091, 9.30103, 9.477121, 9.69897, 10.0, 10.477121}; + // Array3D is column-major (Fortran-ordering). T varies fastest, then rho Ye, then the component + inline AMREX_GPU_MANAGED amrex::Array3D + j_O17_F17_data{ +-99.69897, -99.69897, -72.639, -36.441, -21.007, -15.597, -11.237, -8.922, -6.409967, -4.069196, -1.723001, 1.202117, // RATE +-99.69897, -99.69897, -73.639, -37.441, -21.42, -15.619, -11.238, -8.923, -6.409967, -4.069196, -1.723001, 1.202117, +-99.69897, -99.69897, -74.645, -38.443, -22.368, -15.825, -11.253, -8.926, -6.409967, -4.069196, -1.723001, 1.202117, +-99.69897, -99.69897, -75.7, -39.46, -23.374, -16.647, -11.395, -8.957, -6.415967, -4.070194, -1.723997, 1.202117, +-99.69897, -99.69897, -77.203, -40.631, -24.441, -17.678, -12.128, -9.246, -6.468963, -4.078179, -1.723997, 1.202117, +-99.69897, -99.69897, -81.385, -42.905, -25.991, -18.982, -13.265, -10.212996, -6.911898, -4.161015, -1.732959, 1.202117, +-99.69897, -99.69897, -93.93, -49.222, -29.674, -21.645, -15.175994, -11.777875, -8.12459, -4.770369, -1.82157, 1.199117, +-99.69897, -99.69897, -99.69897, -64.67, -38.52992, -27.872783, -19.361149, -14.944239, -10.306988, -6.238059, -2.468687, 1.168123, +-99.69897, -99.69897, -99.69897, -98.710944, -57.848526, -41.325098, -28.297405, -21.662021, -14.845418, -9.070587, -4.075741, 0.87518, +-99.69897, -99.69897, -99.69897, -99.69897, -99.69897, -71.263098, -48.267405, -36.650021, -24.85878, -15.119379, -7.19457, -0.32867, +-99.69897, -99.69897, -99.69897, -99.69897, -99.69897, -99.69897, -91.333914, -68.95548, -46.405418, -28.066379, -13.71257, -2.65565, +-105.79529, -105.79529, -79.71329, -43.20829, -27.52229, -21.94929, -17.40029, -14.94929, -12.24129, -9.65029, -6.95829, -3.50429, // NU +-105.79529, -105.79529, -80.71429, -44.20829, -27.93529, -21.97129, -17.40229, -14.95029, -12.24129, -9.65029, -6.95829, -3.50429, +-105.79529, -105.79529, -81.71929, -45.21029, -28.88429, -22.17729, -17.41629, -14.95329, -12.24229, -9.65029, -6.95829, -3.50429, +-105.79529, -105.79529, -82.77429, -46.22829, -29.89029, -22.99929, -17.55829, -14.98429, -12.24729, -9.65029, -6.95829, -3.50429, +-105.79529, -105.79529, -84.27729, -47.39929, -30.95629, -24.03029, -18.29129, -15.27329, -12.30129, -9.65929, -6.95929, -3.50429, +-105.79529, -105.79529, -88.46029, -49.67329, -32.50629, -25.33429, -19.42829, -16.23929, -12.74329, -9.74129, -6.96829, -3.50429, +-105.79529, -105.79529, -101.00429, -55.98929, -36.19029, -27.99729, -21.33929, -17.80529, -13.95529, -10.35029, -7.05629, -3.50729, +-105.79529, -105.79529, -105.79529, -71.43729, -45.04529, -34.22129, -25.51129, -20.95629, -16.13629, -11.83029, -7.70729, -3.53929, +-105.79529, -105.79529, -105.79529, -105.71329, -64.38629, -47.70729, -34.50029, -27.73529, -20.72829, -14.69429, -9.32329, -3.83329, +-105.79529, -105.79529, -105.79529, -105.79529, -105.79529, -77.64529, -54.47029, -42.72329, -30.74129, -20.74329, -12.44229, -5.03929, +-105.79529, -105.79529, -105.79529, -105.79529, -105.79529, -105.79529, -97.53629, -75.02829, -52.28829, -33.69029, -18.96029, -7.36629, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, // GAMMA +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, +-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, + }; + }