diff --git a/Docs/source/networks.rst b/Docs/source/networks.rst index de4a11e92..7593b0726 100644 --- a/Docs/source/networks.rst +++ b/Docs/source/networks.rst @@ -166,6 +166,8 @@ burning. This network is managed by pynucastro. .. figure:: ../../networks/CNO_extras/cno_extras_hide_alpha.png :align: center +Overall there are 22 nuclei and 74 rates explicitly connecting the nuclei. + .. note:: We add ${}^{56}\mathrm{Fe}$ as an inert nucleus to allow this to be diff --git a/networks/CNO_extras/CNO_extras.py b/networks/CNO_extras/CNO_extras.py index bee980f69..860aee3b9 100644 --- a/networks/CNO_extras/CNO_extras.py +++ b/networks/CNO_extras/CNO_extras.py @@ -3,15 +3,8 @@ def create_network(): - net = pyna.network_helper(["h1", "he4", - "c12", "c13", - "n13", "n14", "n15", - "o14", "o15", "o16", "o17", "o18", - "f17", "f18", "f19", - "ne18", "ne19", "ne20", - "mg22", "mg24"], - tabular_ordering=["ffn", "langanke", "oda"], - inert_nuclei=["fe56"], network_type="amrex") + net = pyna.common_networks.cno(network_type="amrex") + net.add_inert_nucleus("fe56") return net @@ -22,20 +15,17 @@ def doit(): net.write_network() - comp = pyna.Composition(net.get_nuclei()) - comp.set_solar_like() + comp = pyna.Composition(net.get_nuclei(), init="solar") - rho = 1.e6 + rho = 1.e4 T = 1.e8 net.plot(rho, T, comp, outfile="cno_extras.png", - Z_range=[1, 13], N_range=[1, 13]) - - net.plot(outfile="cno_extras_hide_alpha.png", - Z_range=[1, 13], N_range=[1, 13], - rotated=True, - hide_xalpha=True) + node_size=500, node_font_size="9", + Z_range=[0, 13], N_range=[-0.5, 12.5], + always_show_p=True) + net.summary() if __name__ == "__main__": doit() diff --git a/networks/CNO_extras/Make.package b/networks/CNO_extras/Make.package index 35413fdcf..e66796431 100644 --- a/networks/CNO_extras/Make.package +++ b/networks/CNO_extras/Make.package @@ -10,9 +10,11 @@ ifeq ($(USE_REACT),TRUE) CEXE_headers += rate_type.H CEXE_headers += reaclib_rates.H CEXE_headers += approximate_rates.H + CEXE_headers += branched_rates.H CEXE_headers += modified_rates.H CEXE_headers += table_rates.H CEXE_headers += temperature_table_rates.H + CEXE_headers += tabular_weak_rates.H CEXE_headers += derived_rates.H USE_SCREENING = TRUE USE_NEUTRINOS = TRUE diff --git a/networks/CNO_extras/actual_network.H b/networks/CNO_extras/actual_network.H index 6869d66e0..18987edc1 100644 --- a/networks/CNO_extras/actual_network.H +++ b/networks/CNO_extras/actual_network.H @@ -1,5 +1,5 @@ -#ifndef actual_network_H -#define actual_network_H +#ifndef ACTUAL_NETWORK_H +#define ACTUAL_NETWORK_H #include #include @@ -38,6 +38,9 @@ namespace network if constexpr (spec == H1) { return 0.0_rt; } + else if constexpr (spec == He3) { + return 7.718041347999588_rt; + } else if constexpr (spec == He4) { return 28.295662457999697_rt; } @@ -116,6 +119,9 @@ namespace network if constexpr (spec == H1) { return 1.6735328377636005e-24_rt; } + else if constexpr (spec == He3) { + return 5.008234515140786e-24_rt; + } else if constexpr (spec == He4) { return 6.646479071584587e-24_rt; } @@ -222,78 +228,91 @@ namespace Rates enum NetworkRates : std::uint8_t { - k_N13_to_C13_reaclib = 1, - k_O14_to_N14_reaclib = 2, - k_O15_to_N15_reaclib = 3, - k_p_C12_to_N13_reaclib = 4, - k_He4_C12_to_O16_reaclib = 5, - k_p_C13_to_N14_reaclib = 6, - k_p_N13_to_O14_reaclib = 7, - k_p_N14_to_O15_reaclib = 8, - k_He4_N14_to_F18_reaclib = 9, - k_p_N15_to_O16_reaclib = 10, - k_He4_N15_to_F19_reaclib = 11, - k_He4_O14_to_Ne18_reaclib = 12, - k_He4_O15_to_Ne19_reaclib = 13, - k_p_O16_to_F17_reaclib = 14, - k_He4_O16_to_Ne20_reaclib = 15, - k_p_O17_to_F18_reaclib = 16, - k_p_O18_to_F19_reaclib = 17, - k_p_F17_to_Ne18_reaclib = 18, - k_p_F18_to_Ne19_reaclib = 19, - k_p_F19_to_Ne20_reaclib = 20, - k_He4_Ne18_to_Mg22_reaclib = 21, - k_He4_Ne20_to_Mg24_reaclib = 22, - k_C12_C12_to_He4_Ne20_reaclib = 23, - k_He4_N13_to_p_O16_reaclib = 24, - k_p_N15_to_He4_C12_reaclib = 25, - k_He4_O14_to_p_F17_reaclib = 26, - k_C12_O16_to_He4_Mg24_reaclib = 27, - k_p_O17_to_He4_N14_reaclib = 28, - k_p_O18_to_He4_N15_reaclib = 29, - k_p_F18_to_He4_O15_reaclib = 30, - k_p_F19_to_He4_O16_reaclib = 31, - k_p_Ne20_to_He4_F17_reaclib = 32, - k_He4_He4_He4_to_C12_reaclib = 33, - k_F17_to_O17_weaktab = 34, - k_O17_to_F17_weaktab = 35, - k_F18_to_Ne18_weaktab = 36, - k_F18_to_O18_weaktab = 37, - k_Ne18_to_F18_weaktab = 38, - k_O18_to_F18_weaktab = 39, - k_F19_to_Ne19_weaktab = 40, - k_Ne19_to_F19_weaktab = 41, - k_N13_to_p_C12_derived = 42, - k_N14_to_p_C13_derived = 43, - k_O14_to_p_N13_derived = 44, - k_O15_to_p_N14_derived = 45, - k_O16_to_p_N15_derived = 46, - k_O16_to_He4_C12_derived = 47, - k_F17_to_p_O16_derived = 48, - k_F18_to_p_O17_derived = 49, - k_F18_to_He4_N14_derived = 50, - k_F19_to_p_O18_derived = 51, - k_F19_to_He4_N15_derived = 52, - k_Ne18_to_p_F17_derived = 53, - k_Ne18_to_He4_O14_derived = 54, - k_Ne19_to_p_F18_derived = 55, - k_Ne19_to_He4_O15_derived = 56, - k_Ne20_to_p_F19_derived = 57, - k_Ne20_to_He4_O16_derived = 58, - k_Mg22_to_He4_Ne18_derived = 59, - k_Mg24_to_He4_Ne20_derived = 60, - k_C12_to_He4_He4_He4_derived = 61, - k_He4_C12_to_p_N15_derived = 62, - k_He4_N14_to_p_O17_derived = 63, - k_He4_N15_to_p_O18_derived = 64, - k_He4_O15_to_p_F18_derived = 65, - k_p_O16_to_He4_N13_derived = 66, - k_He4_O16_to_p_F19_derived = 67, - k_p_F17_to_He4_O14_derived = 68, - k_He4_F17_to_p_Ne20_derived = 69, - k_He4_Ne20_to_C12_C12_derived = 70, - k_He4_Mg24_to_C12_O16_derived = 71, - NumRates = k_He4_Mg24_to_C12_O16_derived + k_N13_to_C13_beta_pos_reaclib = 1, + k_O14_to_N14_beta_pos_reaclib = 2, + k_O15_to_N15_beta_pos_reaclib = 3, + k_C12_p_to_N13_reaclib = 4, + k_C12_He4_to_O16_reaclib = 5, + k_C13_p_to_N14_reaclib = 6, + k_N13_p_to_O14_reaclib = 7, + k_N14_p_to_O15_reaclib = 8, + k_N14_He4_to_F18_reaclib = 9, + k_N15_p_to_O16_reaclib = 10, + k_N15_He4_to_F19_reaclib = 11, + k_O14_He4_to_Ne18_reaclib = 12, + k_O15_He4_to_Ne19_reaclib = 13, + k_O16_p_to_F17_reaclib = 14, + k_O16_He4_to_Ne20_reaclib = 15, + k_O17_p_to_F18_reaclib = 16, + k_O18_p_to_F19_reaclib = 17, + k_F17_p_to_Ne18_reaclib = 18, + k_F18_p_to_Ne19_reaclib = 19, + k_F19_p_to_Ne20_reaclib = 20, + k_Ne20_He4_to_Mg24_reaclib = 21, + k_N13_He4_to_p_O16_reaclib = 22, + k_N15_p_to_He4_C12_reaclib = 23, + k_O14_He4_to_p_F17_reaclib = 24, + k_O17_p_to_He4_N14_reaclib = 25, + k_O18_p_to_He4_N15_reaclib = 26, + k_F18_p_to_He4_O15_reaclib = 27, + k_F19_p_to_He4_O16_reaclib = 28, + k_Ne20_p_to_He4_F17_reaclib = 29, + k_He4_He4_He4_to_C12_reaclib = 30, + k_Ne18_He4_to_p_Na21_reaclib = 31, + k_Ne18_He4_to_Mg22_reaclib = 32, + k_Na21_p_to_Mg22_reaclib = 33, + k_Ne19_p_to_Na20_reaclib = 34, + k_Ne20_p_to_Na21_reaclib = 35, + k_p_p_to_d_beta_pos_reaclib = 36, + k_p_p_to_d_electron_capture_reaclib = 37, + k_He3_He3_to_p_p_He4_reaclib = 38, + k_He3_p_to_He4_beta_pos_reaclib = 39, + k_He3_He4_to_Be7_reaclib = 40, + k_F17_to_O17_electron_capture_weaktab = 41, + k_O17_to_F17_beta_neg_weaktab = 42, + k_F18_to_Ne18_beta_neg_weaktab = 43, + k_F18_to_O18_electron_capture_weaktab = 44, + k_Ne18_to_F18_electron_capture_weaktab = 45, + k_O18_to_F18_beta_neg_weaktab = 46, + k_F19_to_Ne19_beta_neg_weaktab = 47, + k_Ne19_to_F19_electron_capture_weaktab = 48, + k_Ne18_He4_to_Mg22_approx = 49, + k_Ne19_3p_to_Mg22_beta_pos_modified = 50, + k_Ne20_p_p_to_Mg22_modified = 51, + k_p_p_p_to_He3_beta_pos_modified = 52, + k_p_p_p_to_He3_electron_capture_modified = 53, + k_He3_He4_p_to_He4_He4_beta_pos_modified = 54, + k_N13_to_p_C12_derived = 55, + k_N14_to_p_C13_derived = 56, + k_O14_to_p_N13_derived = 57, + k_O15_to_p_N14_derived = 58, + k_O16_to_p_N15_derived = 59, + k_O16_to_He4_C12_derived = 60, + k_F17_to_p_O16_derived = 61, + k_F18_to_p_O17_derived = 62, + k_F18_to_He4_N14_derived = 63, + k_F19_to_p_O18_derived = 64, + k_F19_to_He4_N15_derived = 65, + k_Ne18_to_p_F17_derived = 66, + k_Ne18_to_He4_O14_derived = 67, + k_Ne19_to_p_F18_derived = 68, + k_Ne19_to_He4_O15_derived = 69, + k_Ne20_to_p_F19_derived = 70, + k_Ne20_to_He4_O16_derived = 71, + k_Mg22_to_He4_Ne18_derived = 72, + k_Mg24_to_He4_Ne20_derived = 73, + k_C12_to_3He4_derived = 74, + k_C12_He4_to_p_N15_derived = 75, + k_N14_He4_to_p_O17_derived = 76, + k_N15_He4_to_p_O18_derived = 77, + k_O15_He4_to_p_F18_derived = 78, + k_O16_p_to_He4_N13_derived = 79, + k_O16_He4_to_p_F19_derived = 80, + k_F17_p_to_He4_O14_derived = 81, + k_F17_He4_to_p_Ne20_derived = 82, + k_Na21_p_to_He4_Ne18_derived = 83, + k_Mg22_to_p_Na21_derived = 84, + NumRates = k_Mg22_to_p_Na21_derived }; enum ScreenPairs : @@ -302,30 +321,33 @@ namespace Rates k_He4_Ne18 = 1, k_p_F18 = 2, k_p_C12 = 3, - k_He4_O16 = 4, - k_He4_F17 = 5, - k_He4_N14 = 6, - k_p_F19 = 7, - k_p_C13 = 8, - k_He4_C12 = 9, - k_p_O17 = 10, - k_p_N15 = 11, - k_p_Ne20 = 12, - k_He4_Mg24 = 13, - k_C12_O16 = 14, - k_p_O18 = 15, - k_C12_C12 = 16, - k_He4_N15 = 17, - k_He4_Ne20 = 18, - k_p_N13 = 19, - k_He4_O14 = 20, - k_He4_He4 = 21, - k_He4_Be8 = 22, - k_p_O16 = 23, - k_p_N14 = 24, - k_p_F17 = 25, - k_He4_O15 = 26, - k_He4_N13 = 27, + k_p_Na21 = 4, + k_He4_O16 = 5, + k_He3_He3 = 6, + k_He4_F17 = 7, + k_He4_N14 = 8, + k_He3_He4 = 9, + k_p_F19 = 10, + k_p_C13 = 11, + k_He4_C12 = 12, + k_p_p = 13, + k_p_O17 = 14, + k_p_N15 = 15, + k_p_Ne20 = 16, + k_p_O18 = 17, + k_p_He3 = 18, + k_He4_N15 = 19, + k_He4_Ne20 = 20, + k_p_N13 = 21, + k_He4_O14 = 22, + k_He4_He4 = 23, + k_He4_Be8 = 24, + k_p_O16 = 25, + k_p_N14 = 26, + k_p_F17 = 27, + k_p_Ne19 = 28, + k_He4_O15 = 29, + k_He4_N13 = 30, NumScreenPairs = k_He4_N13 }; @@ -335,77 +357,90 @@ namespace Rates static const std::vector rate_names = { "", // 0 - "N13_to_C13_reaclib", // 1, - "O14_to_N14_reaclib", // 2, - "O15_to_N15_reaclib", // 3, - "p_C12_to_N13_reaclib", // 4, - "He4_C12_to_O16_reaclib", // 5, - "p_C13_to_N14_reaclib", // 6, - "p_N13_to_O14_reaclib", // 7, - "p_N14_to_O15_reaclib", // 8, - "He4_N14_to_F18_reaclib", // 9, - "p_N15_to_O16_reaclib", // 10, - "He4_N15_to_F19_reaclib", // 11, - "He4_O14_to_Ne18_reaclib", // 12, - "He4_O15_to_Ne19_reaclib", // 13, - "p_O16_to_F17_reaclib", // 14, - "He4_O16_to_Ne20_reaclib", // 15, - "p_O17_to_F18_reaclib", // 16, - "p_O18_to_F19_reaclib", // 17, - "p_F17_to_Ne18_reaclib", // 18, - "p_F18_to_Ne19_reaclib", // 19, - "p_F19_to_Ne20_reaclib", // 20, - "He4_Ne18_to_Mg22_reaclib", // 21, - "He4_Ne20_to_Mg24_reaclib", // 22, - "C12_C12_to_He4_Ne20_reaclib", // 23, - "He4_N13_to_p_O16_reaclib", // 24, - "p_N15_to_He4_C12_reaclib", // 25, - "He4_O14_to_p_F17_reaclib", // 26, - "C12_O16_to_He4_Mg24_reaclib", // 27, - "p_O17_to_He4_N14_reaclib", // 28, - "p_O18_to_He4_N15_reaclib", // 29, - "p_F18_to_He4_O15_reaclib", // 30, - "p_F19_to_He4_O16_reaclib", // 31, - "p_Ne20_to_He4_F17_reaclib", // 32, - "He4_He4_He4_to_C12_reaclib", // 33, - "F17_to_O17_weaktab", // 34, - "O17_to_F17_weaktab", // 35, - "F18_to_Ne18_weaktab", // 36, - "F18_to_O18_weaktab", // 37, - "Ne18_to_F18_weaktab", // 38, - "O18_to_F18_weaktab", // 39, - "F19_to_Ne19_weaktab", // 40, - "Ne19_to_F19_weaktab", // 41, - "N13_to_p_C12_derived", // 42, - "N14_to_p_C13_derived", // 43, - "O14_to_p_N13_derived", // 44, - "O15_to_p_N14_derived", // 45, - "O16_to_p_N15_derived", // 46, - "O16_to_He4_C12_derived", // 47, - "F17_to_p_O16_derived", // 48, - "F18_to_p_O17_derived", // 49, - "F18_to_He4_N14_derived", // 50, - "F19_to_p_O18_derived", // 51, - "F19_to_He4_N15_derived", // 52, - "Ne18_to_p_F17_derived", // 53, - "Ne18_to_He4_O14_derived", // 54, - "Ne19_to_p_F18_derived", // 55, - "Ne19_to_He4_O15_derived", // 56, - "Ne20_to_p_F19_derived", // 57, - "Ne20_to_He4_O16_derived", // 58, - "Mg22_to_He4_Ne18_derived", // 59, - "Mg24_to_He4_Ne20_derived", // 60, - "C12_to_He4_He4_He4_derived", // 61, - "He4_C12_to_p_N15_derived", // 62, - "He4_N14_to_p_O17_derived", // 63, - "He4_N15_to_p_O18_derived", // 64, - "He4_O15_to_p_F18_derived", // 65, - "p_O16_to_He4_N13_derived", // 66, - "He4_O16_to_p_F19_derived", // 67, - "p_F17_to_He4_O14_derived", // 68, - "He4_F17_to_p_Ne20_derived", // 69, - "He4_Ne20_to_C12_C12_derived", // 70, - "He4_Mg24_to_C12_O16_derived" // 71, + "N13_to_C13_beta_pos_reaclib", // 1, + "O14_to_N14_beta_pos_reaclib", // 2, + "O15_to_N15_beta_pos_reaclib", // 3, + "C12_p_to_N13_reaclib", // 4, + "C12_He4_to_O16_reaclib", // 5, + "C13_p_to_N14_reaclib", // 6, + "N13_p_to_O14_reaclib", // 7, + "N14_p_to_O15_reaclib", // 8, + "N14_He4_to_F18_reaclib", // 9, + "N15_p_to_O16_reaclib", // 10, + "N15_He4_to_F19_reaclib", // 11, + "O14_He4_to_Ne18_reaclib", // 12, + "O15_He4_to_Ne19_reaclib", // 13, + "O16_p_to_F17_reaclib", // 14, + "O16_He4_to_Ne20_reaclib", // 15, + "O17_p_to_F18_reaclib", // 16, + "O18_p_to_F19_reaclib", // 17, + "F17_p_to_Ne18_reaclib", // 18, + "F18_p_to_Ne19_reaclib", // 19, + "F19_p_to_Ne20_reaclib", // 20, + "Ne20_He4_to_Mg24_reaclib", // 21, + "N13_He4_to_p_O16_reaclib", // 22, + "N15_p_to_He4_C12_reaclib", // 23, + "O14_He4_to_p_F17_reaclib", // 24, + "O17_p_to_He4_N14_reaclib", // 25, + "O18_p_to_He4_N15_reaclib", // 26, + "F18_p_to_He4_O15_reaclib", // 27, + "F19_p_to_He4_O16_reaclib", // 28, + "Ne20_p_to_He4_F17_reaclib", // 29, + "He4_He4_He4_to_C12_reaclib", // 30, + "Ne18_He4_to_p_Na21_reaclib", // 31, + "Ne18_He4_to_Mg22_reaclib", // 32, + "Na21_p_to_Mg22_reaclib", // 33, + "Ne19_p_to_Na20_reaclib", // 34, + "Ne20_p_to_Na21_reaclib", // 35, + "p_p_to_d_beta_pos_reaclib", // 36, + "p_p_to_d_electron_capture_reaclib", // 37, + "He3_He3_to_p_p_He4_reaclib", // 38, + "He3_p_to_He4_beta_pos_reaclib", // 39, + "He3_He4_to_Be7_reaclib", // 40, + "F17_to_O17_electron_capture_weaktab", // 41, + "O17_to_F17_beta_neg_weaktab", // 42, + "F18_to_Ne18_beta_neg_weaktab", // 43, + "F18_to_O18_electron_capture_weaktab", // 44, + "Ne18_to_F18_electron_capture_weaktab", // 45, + "O18_to_F18_beta_neg_weaktab", // 46, + "F19_to_Ne19_beta_neg_weaktab", // 47, + "Ne19_to_F19_electron_capture_weaktab", // 48, + "Ne18_He4_to_Mg22_approx", // 49, + "Ne19_3p_to_Mg22_beta_pos_modified", // 50, + "Ne20_p_p_to_Mg22_modified", // 51, + "p_p_p_to_He3_beta_pos_modified", // 52, + "p_p_p_to_He3_electron_capture_modified", // 53, + "He3_He4_p_to_He4_He4_beta_pos_modified", // 54, + "N13_to_p_C12_derived", // 55, + "N14_to_p_C13_derived", // 56, + "O14_to_p_N13_derived", // 57, + "O15_to_p_N14_derived", // 58, + "O16_to_p_N15_derived", // 59, + "O16_to_He4_C12_derived", // 60, + "F17_to_p_O16_derived", // 61, + "F18_to_p_O17_derived", // 62, + "F18_to_He4_N14_derived", // 63, + "F19_to_p_O18_derived", // 64, + "F19_to_He4_N15_derived", // 65, + "Ne18_to_p_F17_derived", // 66, + "Ne18_to_He4_O14_derived", // 67, + "Ne19_to_p_F18_derived", // 68, + "Ne19_to_He4_O15_derived", // 69, + "Ne20_to_p_F19_derived", // 70, + "Ne20_to_He4_O16_derived", // 71, + "Mg22_to_He4_Ne18_derived", // 72, + "Mg24_to_He4_Ne20_derived", // 73, + "C12_to_3He4_derived", // 74, + "C12_He4_to_p_N15_derived", // 75, + "N14_He4_to_p_O17_derived", // 76, + "N15_He4_to_p_O18_derived", // 77, + "O15_He4_to_p_F18_derived", // 78, + "O16_p_to_He4_N13_derived", // 79, + "O16_He4_to_p_F19_derived", // 80, + "F17_p_to_He4_O14_derived", // 81, + "F17_He4_to_p_Ne20_derived", // 82, + "Na21_p_to_He4_Ne18_derived", // 83, + "Mg22_to_p_Na21_derived" // 84, }; template @@ -434,38 +469,38 @@ namespace NSE_INDEX constexpr int H1_index = 1; constexpr int N_index = -1; - constexpr int He4_index = 2; + constexpr int He4_index = 3; constexpr int NumNSERatePairs = 28; inline AMREX_GPU_MANAGED amrex::Array2D rate_pair_data { - 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, - He4, N15, -1, F19, -1, -1, N15, F19, k_He4_N15_to_F19_reaclib, k_F19_to_He4_N15_derived, - He4, O14, -1, Ne18, -1, -1, O14, Ne18, k_He4_O14_to_Ne18_reaclib, k_Ne18_to_He4_O14_derived, - He4, O15, -1, Ne19, -1, -1, O15, Ne19, k_He4_O15_to_Ne19_reaclib, k_Ne19_to_He4_O15_derived, - H1, O16, -1, F17, -1, -1, O16, F17, k_p_O16_to_F17_reaclib, k_F17_to_p_O16_derived, - He4, O16, -1, Ne20, -1, -1, O16, Ne20, k_He4_O16_to_Ne20_reaclib, k_Ne20_to_He4_O16_derived, - H1, O17, -1, F18, -1, -1, O17, F18, k_p_O17_to_F18_reaclib, k_F18_to_p_O17_derived, - H1, O18, -1, F19, -1, -1, O18, F19, k_p_O18_to_F19_reaclib, k_F19_to_p_O18_derived, - H1, F17, -1, Ne18, -1, -1, F17, Ne18, k_p_F17_to_Ne18_reaclib, k_Ne18_to_p_F17_derived, - H1, F18, -1, Ne19, -1, -1, F18, Ne19, k_p_F18_to_Ne19_reaclib, k_Ne19_to_p_F18_derived, - H1, F19, -1, Ne20, -1, -1, F19, Ne20, k_p_F19_to_Ne20_reaclib, k_Ne20_to_p_F19_derived, - He4, Ne18, -1, Mg22, -1, -1, Ne18, Mg22, k_He4_Ne18_to_Mg22_reaclib, k_Mg22_to_He4_Ne18_derived, - He4, Ne20, -1, Mg24, -1, -1, Ne20, Mg24, k_He4_Ne20_to_Mg24_reaclib, k_Mg24_to_He4_Ne20_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, O18, -1, He4, N15, -1, O18, N15, k_p_O18_to_He4_N15_reaclib, k_He4_N15_to_p_O18_derived, - H1, F18, -1, He4, O15, -1, F18, O15, k_p_F18_to_He4_O15_reaclib, k_He4_O15_to_p_F18_derived, - H1, F19, -1, He4, O16, -1, F19, O16, k_p_F19_to_He4_O16_reaclib, k_He4_O16_to_p_F19_derived, - He4, He4, He4, C12, -1, -1, C12, -1, k_He4_He4_He4_to_C12_reaclib, k_C12_to_He4_He4_He4_derived, - He4, F17, -1, H1, Ne20, -1, F17, Ne20, k_He4_F17_to_p_Ne20_derived, k_p_Ne20_to_He4_F17_reaclib + H1, C12, -1, N13, -1, -1, C12, N13, k_C12_p_to_N13_reaclib, k_N13_to_p_C12_derived, + He4, C12, -1, O16, -1, -1, C12, O16, k_C12_He4_to_O16_reaclib, k_O16_to_He4_C12_derived, + H1, C13, -1, N14, -1, -1, C13, N14, k_C13_p_to_N14_reaclib, k_N14_to_p_C13_derived, + H1, N13, -1, O14, -1, -1, N13, O14, k_N13_p_to_O14_reaclib, k_O14_to_p_N13_derived, + H1, N14, -1, O15, -1, -1, N14, O15, k_N14_p_to_O15_reaclib, k_O15_to_p_N14_derived, + He4, N14, -1, F18, -1, -1, N14, F18, k_N14_He4_to_F18_reaclib, k_F18_to_He4_N14_derived, + H1, N15, -1, O16, -1, -1, N15, O16, k_N15_p_to_O16_reaclib, k_O16_to_p_N15_derived, + He4, N15, -1, F19, -1, -1, N15, F19, k_N15_He4_to_F19_reaclib, k_F19_to_He4_N15_derived, + He4, O14, -1, Ne18, -1, -1, O14, Ne18, k_O14_He4_to_Ne18_reaclib, k_Ne18_to_He4_O14_derived, + He4, O15, -1, Ne19, -1, -1, O15, Ne19, k_O15_He4_to_Ne19_reaclib, k_Ne19_to_He4_O15_derived, + H1, O16, -1, F17, -1, -1, O16, F17, k_O16_p_to_F17_reaclib, k_F17_to_p_O16_derived, + He4, O16, -1, Ne20, -1, -1, O16, Ne20, k_O16_He4_to_Ne20_reaclib, k_Ne20_to_He4_O16_derived, + H1, O17, -1, F18, -1, -1, O17, F18, k_O17_p_to_F18_reaclib, k_F18_to_p_O17_derived, + H1, O18, -1, F19, -1, -1, O18, F19, k_O18_p_to_F19_reaclib, k_F19_to_p_O18_derived, + H1, F17, -1, Ne18, -1, -1, F17, Ne18, k_F17_p_to_Ne18_reaclib, k_Ne18_to_p_F17_derived, + H1, F18, -1, Ne19, -1, -1, F18, Ne19, k_F18_p_to_Ne19_reaclib, k_Ne19_to_p_F18_derived, + H1, F19, -1, Ne20, -1, -1, F19, Ne20, k_F19_p_to_Ne20_reaclib, k_Ne20_to_p_F19_derived, + He4, Ne20, -1, Mg24, -1, -1, Ne20, Mg24, k_Ne20_He4_to_Mg24_reaclib, k_Mg24_to_He4_Ne20_derived, + He4, N13, -1, H1, O16, -1, N13, O16, k_N13_He4_to_p_O16_reaclib, k_O16_p_to_He4_N13_derived, + H1, N15, -1, He4, C12, -1, N15, C12, k_N15_p_to_He4_C12_reaclib, k_C12_He4_to_p_N15_derived, + He4, O14, -1, H1, F17, -1, O14, F17, k_O14_He4_to_p_F17_reaclib, k_F17_p_to_He4_O14_derived, + H1, O17, -1, He4, N14, -1, O17, N14, k_O17_p_to_He4_N14_reaclib, k_N14_He4_to_p_O17_derived, + H1, O18, -1, He4, N15, -1, O18, N15, k_O18_p_to_He4_N15_reaclib, k_N15_He4_to_p_O18_derived, + H1, F18, -1, He4, O15, -1, F18, O15, k_F18_p_to_He4_O15_reaclib, k_O15_He4_to_p_F18_derived, + H1, F19, -1, He4, O16, -1, F19, O16, k_F19_p_to_He4_O16_reaclib, k_O16_He4_to_p_F19_derived, + He4, He4, He4, C12, -1, -1, C12, -1, k_He4_He4_He4_to_C12_reaclib, k_C12_to_3He4_derived, + He4, F17, -1, H1, Ne20, -1, F17, Ne20, k_F17_He4_to_p_Ne20_derived, k_Ne20_p_to_He4_F17_reaclib, + Ne18, He4, -1, Mg22, -1, -1, Ne18, Mg22, k_Ne18_He4_to_Mg22_approx, k_Mg22_to_He4_Ne18_derived }; } #endif diff --git a/networks/CNO_extras/actual_rhs.H b/networks/CNO_extras/actual_rhs.H index b0f96a6c3..7abcb45d6 100644 --- a/networks/CNO_extras/actual_rhs.H +++ b/networks/CNO_extras/actual_rhs.H @@ -19,17 +19,12 @@ #include #include #include -#include +#include #include +#include #include using namespace amrex::literals; -using namespace ArrayUtil; - -using namespace Species; -using namespace Rates; - -using namespace rate_tables; template AMREX_GPU_DEVICE AMREX_INLINE @@ -58,6 +53,8 @@ void evaluate_screening(const burn_t& state, const amrex::Array1D& Y, T& rate_eval) { + using namespace Rates; + // Evaluate screening terms using number_t = std::conditional_t; @@ -102,6 +99,16 @@ void evaluate_screening(const burn_t& state, } } + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 11.0_rt, 21.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Na21) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Na21) = dlog_scor_dT; + } + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 8.0_rt, 16.0_rt); static_assert(scn_fac.z1 == 2.0_rt); @@ -112,6 +119,16 @@ void evaluate_screening(const burn_t& state, } } + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 3.0_rt, 2.0_rt, 3.0_rt); + static_assert(scn_fac.z1 == 2.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He3_He3) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He3_He3) = dlog_scor_dT; + } + } + { 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); @@ -132,6 +149,16 @@ void evaluate_screening(const burn_t& state, } } + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 3.0_rt, 2.0_rt, 4.0_rt); + static_assert(scn_fac.z1 == 2.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He3_He4) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He3_He4) = dlog_scor_dT; + } + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 9.0_rt, 19.0_rt); static_assert(scn_fac.z1 == 1.0_rt); @@ -162,6 +189,16 @@ void evaluate_screening(const burn_t& state, } } + { + 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_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_p) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_p) = dlog_scor_dT; + } + } + { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 17.0_rt); static_assert(scn_fac.z1 == 1.0_rt); @@ -192,26 +229,6 @@ void evaluate_screening(const burn_t& state, } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 12.0_rt, 24.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); - rate_eval.log_screen(k_He4_Mg24) = log_scor; - if constexpr (do_T_derivatives) { - rate_eval.dlog_screen_dT(k_He4_Mg24) = dlog_scor_dT; - } - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(6.0_rt, 12.0_rt, 8.0_rt, 16.0_rt); - static_assert(scn_fac.z1 == 6.0_rt); - actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); - rate_eval.log_screen(k_C12_O16) = log_scor; - if constexpr (do_T_derivatives) { - rate_eval.dlog_screen_dT(k_C12_O16) = dlog_scor_dT; - } - } - { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 18.0_rt); static_assert(scn_fac.z1 == 1.0_rt); @@ -223,12 +240,12 @@ void evaluate_screening(const burn_t& state, } { - constexpr auto scn_fac = scrn::calculate_screen_factor(6.0_rt, 12.0_rt, 6.0_rt, 12.0_rt); - static_assert(scn_fac.z1 == 6.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 2.0_rt, 3.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); - rate_eval.log_screen(k_C12_C12) = log_scor; + rate_eval.log_screen(k_p_He3) = log_scor; if constexpr (do_T_derivatives) { - rate_eval.dlog_screen_dT(k_C12_C12) = dlog_scor_dT; + rate_eval.dlog_screen_dT(k_p_He3) = dlog_scor_dT; } } @@ -322,6 +339,16 @@ void evaluate_screening(const burn_t& state, } } + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 10.0_rt, 19.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Ne19) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Ne19) = dlog_scor_dT; + } + } + { 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); @@ -352,9 +379,11 @@ void evaluate_rates(const burn_t& state, const amrex::Array1D& Y, T& rate_eval) { + using namespace Rates; + // here Y is consistent with state.xn - [[maybe_unused]] amrex::Real rhoy = state.rho * state.y_e; + [[maybe_unused]] const amrex::Real rhoy = state.rho * state.y_e; const tf_t tfactors = evaluate_tfactors(state.T); @@ -366,7 +395,9 @@ void evaluate_rates(const burn_t& state, // Fill in different rates - fill_reaclib_rates(tfactors, rate_eval); + reaclib_rates::fill_rates(tfactors, rate_eval); + + tabular_weak_rates::fill_rates(state.T, rhoy, Y, rate_eval); temp_tabular::fill_rates(tfactors, rate_eval); @@ -374,91 +405,20 @@ void evaluate_rates(const burn_t& state, // TemperatureTabular/StarLib rates as the original rate modified_rates::fill_rates(tfactors, rate_eval); + // fill branched rates -- these can have ReacLib or + // TemperatureTabular/StarLib as the underlying rate or branches. + branched_rates::fill_rates(tfactors, rate_eval); + // Calculate Derived Rates next. This should go last but before // approx rates, since those may have ReacLibRate, // TemperatureTabularRate / StarLibRate, or DerivedRate as the // underlying rate. + derived_rates::fill_rates(tfactors, rate_eval); - fill_derived_rates(tfactors, rate_eval); // Fill approximate rates - - fill_approx_rates(tfactors, state.rho, Y, rate_eval); - - // Calculate tabular weak rates - - [[maybe_unused]] amrex::Real rate, drate_dt, edot_nu, edot_gamma; - - 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); - - tabular_evaluate(j_F18_Ne18_meta, j_F18_Ne18_rhoy, j_F18_Ne18_temp, j_F18_Ne18_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F18_to_Ne18_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F18_to_Ne18_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); - - tabular_evaluate(j_F18_O18_meta, j_F18_O18_rhoy, j_F18_O18_temp, j_F18_O18_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F18_to_O18_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F18_to_O18_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); - - tabular_evaluate(j_Ne18_F18_meta, j_Ne18_F18_rhoy, j_Ne18_F18_temp, j_Ne18_F18_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_Ne18_to_F18_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne18_to_F18_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(Ne18) * (edot_nu + edot_gamma); - - tabular_evaluate(j_O18_F18_meta, j_O18_F18_rhoy, j_O18_F18_temp, j_O18_F18_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_O18_to_F18_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O18_to_F18_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(O18) * (edot_nu + edot_gamma); - - tabular_evaluate(j_F19_Ne19_meta, j_F19_Ne19_rhoy, j_F19_Ne19_temp, j_F19_Ne19_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F19_to_Ne19_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F19_to_Ne19_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(F19) * (edot_nu + edot_gamma); - - tabular_evaluate(j_Ne19_F19_meta, j_Ne19_F19_rhoy, j_Ne19_F19_temp, j_Ne19_F19_data, - log_rhoy, log_temp, state.T, rate, drate_dt, edot_nu, edot_gamma); - rate_eval.screened_rates(k_Ne19_to_F19_weaktab) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne19_to_F19_weaktab) = drate_dt; - } - rate_eval.enuc_weak += C::n_A * Y(Ne19) * (edot_nu + edot_gamma); - + approximate_rates::fill_rates(tfactors, state.rho, Y, rate_eval); } @@ -510,132 +470,225 @@ void get_ydot_weak(const burn_t& state, // Compute all weak rates and get ydot_weak +#ifdef SCREENING + { + plasma_state_t pstate{}; + fill_plasma_state(pstate, state.T, state.rho, Y); + amrex::Real log_scor, dlog_scor_dT; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 3.0_rt, 2.0_rt, 4.0_rt); + static_assert(scn_fac.z1 == 2.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He3_He4) = log_scor; + } + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 10.0_rt, 19.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Ne19) = log_scor; + } + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 2.0_rt, 3.0_rt); + static_assert(scn_fac.z1 == 1.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_He3) = log_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_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_p) = log_scor; + } + + } +#endif + const tf_t tfactors = evaluate_tfactors(state.T); { - // N13_to_C13_reaclib + // N13_to_C13_beta_pos_reaclib amrex::Real log_scor {0.0_rt}; amrex::Real dlog_scor_dT {0.0_rt}; - rate_N13_to_C13_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_N13_to_C13_reaclib) = rate; + reaclib_rates::rate_N13_to_C13_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N13_to_C13_beta_pos_reaclib) = rate; } { - // O14_to_N14_reaclib + // O14_to_N14_beta_pos_reaclib amrex::Real log_scor {0.0_rt}; amrex::Real dlog_scor_dT {0.0_rt}; - rate_O14_to_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_O14_to_N14_reaclib) = rate; + reaclib_rates::rate_O14_to_N14_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O14_to_N14_beta_pos_reaclib) = rate; } { - // O15_to_N15_reaclib + // O15_to_N15_beta_pos_reaclib amrex::Real log_scor {0.0_rt}; amrex::Real dlog_scor_dT {0.0_rt}; - rate_O15_to_N15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_O15_to_N15_reaclib) = rate; + reaclib_rates::rate_O15_to_N15_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O15_to_N15_beta_pos_reaclib) = rate; } - amrex::Real log_temp = std::log10(state.T); - amrex::Real log_rhoy = std::log10(rhoy); + { + // p_p_to_d_beta_pos_reaclib - 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); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); +#endif + reaclib_rates::rate_p_p_to_d_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_beta_pos_reaclib) = rate; + } + + { + // p_p_to_d_electron_capture_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); +#endif + reaclib_rates::rate_p_p_to_d_electron_capture_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_electron_capture_reaclib) = rate; + } - 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); + { + // He3_p_to_He4_beta_pos_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_He3); +#endif + reaclib_rates::rate_He3_p_to_He4_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_p_to_He4_beta_pos_reaclib) = rate; + } + + { + // Ne19_3p_to_Mg22_beta_pos_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_Ne19); +#endif + modified_rates::rate_Ne19_3p_to_Mg22_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified) = rate; + } - tabular_evaluate(j_F18_Ne18_meta, j_F18_Ne18_rhoy, j_F18_Ne18_temp, j_F18_Ne18_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F18_to_Ne18_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); + { + // p_p_p_to_He3_beta_pos_modified - tabular_evaluate(j_F18_O18_meta, j_F18_O18_rhoy, j_F18_O18_temp, j_F18_O18_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F18_to_O18_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); +#endif + modified_rates::rate_p_p_p_to_He3_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_p_to_He3_beta_pos_modified) = rate; + } - tabular_evaluate(j_Ne18_F18_meta, j_Ne18_F18_rhoy, j_Ne18_F18_temp, j_Ne18_F18_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_Ne18_to_F18_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(Ne18) * (edot_nu + edot_gamma); + { + // p_p_p_to_He3_electron_capture_modified - tabular_evaluate(j_O18_F18_meta, j_O18_F18_rhoy, j_O18_F18_temp, j_O18_F18_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_O18_to_F18_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(O18) * (edot_nu + edot_gamma); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); +#endif + modified_rates::rate_p_p_p_to_He3_electron_capture_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_p_to_He3_electron_capture_modified) = rate; + } - tabular_evaluate(j_F19_Ne19_meta, j_F19_Ne19_rhoy, j_F19_Ne19_temp, j_F19_Ne19_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_F19_to_Ne19_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(F19) * (edot_nu + edot_gamma); + { + // He3_He4_p_to_He4_He4_beta_pos_modified - tabular_evaluate(j_Ne19_F19_meta, j_Ne19_F19_rhoy, j_Ne19_F19_temp, j_Ne19_F19_data, - log_rhoy, log_temp, state.T, rate, drate_dT, edot_nu, edot_gamma); - rate_eval.screened_rates(k_Ne19_to_F19_weaktab) = rate; - rate_eval.enuc_weak += C::n_A * Y(Ne19) * (edot_nu + edot_gamma); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He3_He4); +#endif + modified_rates::rate_He3_He4_p_to_He4_He4_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified) = rate; + } + tabular_weak_rates::fill_rates(state.T, rhoy, Y, rate_eval); const auto& screened_rates = rate_eval.screened_rates; - ydot_nuc(H1) = 0.0_rt; + ydot_nuc(H1) = + -3.0*screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho + + -1.5*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + -1.5*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + -screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; + + ydot_nuc(He3) = + 0.5*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + -screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + -screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; - ydot_nuc(He4) = 0.0_rt; + ydot_nuc(He4) = + screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; ydot_nuc(C12) = 0.0_rt; ydot_nuc(C13) = - screened_rates(k_N13_to_C13_reaclib)*Y(N13); + screened_rates(k_N13_to_C13_beta_pos_reaclib)*Y(N13); ydot_nuc(N13) = - -screened_rates(k_N13_to_C13_reaclib)*Y(N13); + -screened_rates(k_N13_to_C13_beta_pos_reaclib)*Y(N13); ydot_nuc(N14) = - screened_rates(k_O14_to_N14_reaclib)*Y(O14); + screened_rates(k_O14_to_N14_beta_pos_reaclib)*Y(O14); ydot_nuc(N15) = - screened_rates(k_O15_to_N15_reaclib)*Y(O15); + screened_rates(k_O15_to_N15_beta_pos_reaclib)*Y(O15); ydot_nuc(O14) = - -screened_rates(k_O14_to_N14_reaclib)*Y(O14); + -screened_rates(k_O14_to_N14_beta_pos_reaclib)*Y(O14); ydot_nuc(O15) = - -screened_rates(k_O15_to_N15_reaclib)*Y(O15); + -screened_rates(k_O15_to_N15_beta_pos_reaclib)*Y(O15); ydot_nuc(O16) = 0.0_rt; ydot_nuc(O17) = - (screened_rates(k_F17_to_O17_weaktab)*Y(F17) + -screened_rates(k_O17_to_F17_weaktab)*Y(O17)); + (screened_rates(k_F17_to_O17_electron_capture_weaktab)*Y(F17) + -screened_rates(k_O17_to_F17_beta_neg_weaktab)*Y(O17)); ydot_nuc(O18) = - (screened_rates(k_F18_to_O18_weaktab)*Y(F18) + -screened_rates(k_O18_to_F18_weaktab)*Y(O18)); + (screened_rates(k_F18_to_O18_electron_capture_weaktab)*Y(F18) + -screened_rates(k_O18_to_F18_beta_neg_weaktab)*Y(O18)); ydot_nuc(F17) = - (-screened_rates(k_F17_to_O17_weaktab)*Y(F17) + screened_rates(k_O17_to_F17_weaktab)*Y(O17)); + (-screened_rates(k_F17_to_O17_electron_capture_weaktab)*Y(F17) + screened_rates(k_O17_to_F17_beta_neg_weaktab)*Y(O17)); ydot_nuc(F18) = - (-screened_rates(k_F18_to_O18_weaktab)*Y(F18) + screened_rates(k_O18_to_F18_weaktab)*Y(O18)) + - (screened_rates(k_Ne18_to_F18_weaktab)*Y(Ne18) + -screened_rates(k_F18_to_Ne18_weaktab)*Y(F18)); + (-screened_rates(k_F18_to_O18_electron_capture_weaktab)*Y(F18) + screened_rates(k_O18_to_F18_beta_neg_weaktab)*Y(O18)) + + (screened_rates(k_Ne18_to_F18_electron_capture_weaktab)*Y(Ne18) + -screened_rates(k_F18_to_Ne18_beta_neg_weaktab)*Y(F18)); ydot_nuc(F19) = - (screened_rates(k_Ne19_to_F19_weaktab)*Y(Ne19) + -screened_rates(k_F19_to_Ne19_weaktab)*Y(F19)); + (screened_rates(k_Ne19_to_F19_electron_capture_weaktab)*Y(Ne19) + -screened_rates(k_F19_to_Ne19_beta_neg_weaktab)*Y(F19)); ydot_nuc(Ne18) = - (-screened_rates(k_Ne18_to_F18_weaktab)*Y(Ne18) + screened_rates(k_F18_to_Ne18_weaktab)*Y(F18)); + (-screened_rates(k_Ne18_to_F18_electron_capture_weaktab)*Y(Ne18) + screened_rates(k_F18_to_Ne18_beta_neg_weaktab)*Y(F18)); ydot_nuc(Ne19) = - (-screened_rates(k_Ne19_to_F19_weaktab)*Y(Ne19) + screened_rates(k_F19_to_Ne19_weaktab)*Y(F19)); + -screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho + + (-screened_rates(k_Ne19_to_F19_electron_capture_weaktab)*Y(Ne19) + screened_rates(k_F19_to_Ne19_beta_neg_weaktab)*Y(F19)); ydot_nuc(Ne20) = 0.0_rt; - ydot_nuc(Mg22) = 0.0_rt; + ydot_nuc(Mg22) = + screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho; ydot_nuc(Mg24) = 0.0_rt; @@ -650,161 +703,175 @@ AMREX_GPU_DEVICE AMREX_INLINE void rhs_nuc(const burn_t& state, amrex::Array1D& ydot_nuc, const amrex::Array1D& Y, - const amrex::Array1D& screened_rates) { + const amrex::Array1D& screened_rates) { using namespace Rates; ydot_nuc(H1) = - (-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_p_O18_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + - (-screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + screened_rates(k_Ne18_to_p_F17_derived)*Y(Ne18)) + - (-screened_rates(k_p_F18_to_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + - (-screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + - (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_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*Y(N15)*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_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho) + - (screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho); + (-screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_C13_p_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + screened_rates(k_N14_to_p_C13_derived)*Y(N14)) + + (-screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (-screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (-screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (-screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + + (-screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + screened_rates(k_Ne18_to_p_F17_derived)*Y(Ne18)) + + (-screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + + (-screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + + (screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + -screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + + (-screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (-screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (-screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*Y(N15)*state.rho) + + (-screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho) + + (-screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho) + + (screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho) + + -3.0*screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho + + -2.0*screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*Y(H1)*state.rho + + -1.5*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + -1.5*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*amrex::Math::powi<2>(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_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + -screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; + + ydot_nuc(He3) = + 0.5*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*amrex::Math::powi<2>(Y(H1))*state.rho + + 0.5*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*amrex::Math::powi<2>(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_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + -screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; ydot_nuc(He4) = - (-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_He4_N15_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + - (-screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + - (-screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + - (-screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + - (-screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*Y(Ne18)*state.rho + screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)) + - (-screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)) + - (0.5*screened_rates(k_C12_C12_to_He4_Ne20_reaclib)*amrex::Math::powi<2>(Y(C12))*state.rho + -screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*Y(Ne20)*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_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*Y(O16)*state.rho + -screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*Y(Mg24)*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_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*Y(N15)*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_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*Y(O16)*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)) + - (-screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho); + (-screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (-screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (-screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + + (-screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + + (-screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + + (-screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + + (-screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)) + + (-screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + + (screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (-screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*Y(N15)*state.rho) + + (screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho) + + (screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*Y(O16)*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_3He4_derived)*Y(C12)) + + (-screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho) + + (-screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*Y(Ne18)*state.rho + screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)) + + 0.5*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*amrex::Math::powi<2>(Y(He3))*state.rho + + screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*Y(H1)*state.rho + + screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*Y(He4)*state.rho; ydot_nuc(C12) = - (-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_C12_C12_to_He4_Ne20_reaclib)*amrex::Math::powi<2>(Y(C12))*state.rho + 2.0*screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*Y(Ne20)*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_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*Y(O16)*state.rho + screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*Y(Mg24)*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)); + (-screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_C12_He4_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_3He4_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_N14_to_p_C13_derived)*Y(N14)); + screened_rates(k_N13_to_C13_beta_pos_reaclib)*Y(N13) + + (-screened_rates(k_C13_p_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_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); + -screened_rates(k_N13_to_C13_beta_pos_reaclib)*Y(N13) + + (screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*Y(H1)*state.rho + -screened_rates(k_N13_to_p_C12_derived)*Y(N13)) + + (-screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + screened_rates(k_O16_p_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_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); + screened_rates(k_O14_to_N14_beta_pos_reaclib)*Y(O14) + + (screened_rates(k_C13_p_to_N14_reaclib)*Y(C13)*Y(H1)*state.rho + -screened_rates(k_N14_to_p_C13_derived)*Y(N14)) + + (-screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (-screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_N14_He4_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_O16_to_p_N15_derived)*Y(O16)) + - (-screened_rates(k_He4_N15_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + - (-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_p_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*Y(N15)*state.rho); + screened_rates(k_O15_to_N15_beta_pos_reaclib)*Y(O15) + + (-screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + + (-screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*Y(H1)*state.rho + screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*Y(He4)*state.rho) + + (screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*Y(N15)*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_O14_to_p_N13_derived)*Y(O14)) + - (-screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + - (-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_O14_to_N14_beta_pos_reaclib)*Y(O14) + + (screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*Y(H1)*state.rho + -screened_rates(k_O14_to_p_N13_derived)*Y(O14)) + + (-screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + + (-screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + screened_rates(k_F17_p_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_O15_to_p_N14_derived)*Y(O15)) + - (-screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + - (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_O15_to_N15_beta_pos_reaclib)*Y(O15) + + (screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*Y(H1)*state.rho + -screened_rates(k_O15_to_p_N14_derived)*Y(O15)) + + (-screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + + (screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_O15_He4_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_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_O16_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + - (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_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*Y(O16)*state.rho + screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*Y(Mg24)*state.rho) + - (screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho); + (screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*Y(He4)*state.rho + -screened_rates(k_O16_to_He4_C12_derived)*Y(O16)) + + (screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*Y(H1)*state.rho + -screened_rates(k_O16_to_p_N15_derived)*Y(O16)) + + (-screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (-screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + + (screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + -screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + + (screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho); ydot_nuc(O17) = - (-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)); + (-screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (-screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*Y(H1)*state.rho + screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*Y(N14)*state.rho) + + (screened_rates(k_F17_to_O17_electron_capture_weaktab)*Y(F17) + -screened_rates(k_O17_to_F17_beta_neg_weaktab)*Y(O17)); ydot_nuc(O18) = - (-screened_rates(k_p_O18_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + - (-screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*Y(N15)*state.rho) + - (screened_rates(k_F18_to_O18_weaktab)*Y(F18) + -screened_rates(k_O18_to_F18_weaktab)*Y(O18)); + (-screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + + (-screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*Y(H1)*state.rho + screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*Y(N15)*state.rho) + + (screened_rates(k_F18_to_O18_electron_capture_weaktab)*Y(F18) + -screened_rates(k_O18_to_F18_beta_neg_weaktab)*Y(O18)); ydot_nuc(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_Ne18_to_p_F17_derived)*Y(Ne18)) + - (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)) + - (-screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho); + (screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*Y(H1)*state.rho + -screened_rates(k_F17_to_p_O16_derived)*Y(F17)) + + (-screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + screened_rates(k_Ne18_to_p_F17_derived)*Y(Ne18)) + + (screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*Y(H1)*state.rho) + + (-screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho) + + (-screened_rates(k_F17_to_O17_electron_capture_weaktab)*Y(F17) + screened_rates(k_O17_to_F17_beta_neg_weaktab)*Y(O17)); ydot_nuc(F18) = - (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_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + - (-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_F18_to_O18_weaktab)*Y(F18) + screened_rates(k_O18_to_F18_weaktab)*Y(O18)) + - (screened_rates(k_Ne18_to_F18_weaktab)*Y(Ne18) + -screened_rates(k_F18_to_Ne18_weaktab)*Y(F18)); + (screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*Y(N14)*state.rho + -screened_rates(k_F18_to_He4_N14_derived)*Y(F18)) + + (screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*Y(H1)*state.rho + -screened_rates(k_F18_to_p_O17_derived)*Y(F18)) + + (-screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + + (-screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*Y(H1)*state.rho + screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*Y(O15)*state.rho) + + (-screened_rates(k_F18_to_O18_electron_capture_weaktab)*Y(F18) + screened_rates(k_O18_to_F18_beta_neg_weaktab)*Y(O18)) + + (screened_rates(k_Ne18_to_F18_electron_capture_weaktab)*Y(Ne18) + -screened_rates(k_F18_to_Ne18_beta_neg_weaktab)*Y(F18)); ydot_nuc(F19) = - (screened_rates(k_He4_N15_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + -screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + - (screened_rates(k_p_O18_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + - (-screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + - (-screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho) + - (screened_rates(k_Ne19_to_F19_weaktab)*Y(Ne19) + -screened_rates(k_F19_to_Ne19_weaktab)*Y(F19)); + (screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*Y(N15)*state.rho + -screened_rates(k_F19_to_He4_N15_derived)*Y(F19)) + + (screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*Y(H1)*state.rho + -screened_rates(k_F19_to_p_O18_derived)*Y(F19)) + + (-screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + + (-screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*Y(H1)*state.rho + screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*Y(O16)*state.rho) + + (screened_rates(k_Ne19_to_F19_electron_capture_weaktab)*Y(Ne19) + -screened_rates(k_F19_to_Ne19_beta_neg_weaktab)*Y(F19)); ydot_nuc(Ne18) = - (screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + - (screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + -screened_rates(k_Ne18_to_p_F17_derived)*Y(Ne18)) + - (-screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*Y(Ne18)*state.rho + screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)) + - (-screened_rates(k_Ne18_to_F18_weaktab)*Y(Ne18) + screened_rates(k_F18_to_Ne18_weaktab)*Y(F18)); + (screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*Y(O14)*state.rho + -screened_rates(k_Ne18_to_He4_O14_derived)*Y(Ne18)) + + (screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*Y(H1)*state.rho + -screened_rates(k_Ne18_to_p_F17_derived)*Y(Ne18)) + + (-screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*Y(Ne18)*state.rho + screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)) + + (-screened_rates(k_Ne18_to_F18_electron_capture_weaktab)*Y(Ne18) + screened_rates(k_F18_to_Ne18_beta_neg_weaktab)*Y(F18)); ydot_nuc(Ne19) = - (screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + -screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + - (screened_rates(k_p_F18_to_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + - (-screened_rates(k_Ne19_to_F19_weaktab)*Y(Ne19) + screened_rates(k_F19_to_Ne19_weaktab)*Y(F19)); + (screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*Y(O15)*state.rho + -screened_rates(k_Ne19_to_He4_O15_derived)*Y(Ne19)) + + (screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*Y(H1)*state.rho + -screened_rates(k_Ne19_to_p_F18_derived)*Y(Ne19)) + + -screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho + + (-screened_rates(k_Ne19_to_F19_electron_capture_weaktab)*Y(Ne19) + screened_rates(k_F19_to_Ne19_beta_neg_weaktab)*Y(F19)); ydot_nuc(Ne20) = - (screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + -screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + - (screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + - (-screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)) + - (0.5*screened_rates(k_C12_C12_to_He4_Ne20_reaclib)*amrex::Math::powi<2>(Y(C12))*state.rho + -screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*Y(Ne20)*state.rho) + - (screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho); + (screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*Y(O16)*state.rho + -screened_rates(k_Ne20_to_He4_O16_derived)*Y(Ne20)) + + (screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*Y(H1)*state.rho + -screened_rates(k_Ne20_to_p_F19_derived)*Y(Ne20)) + + (-screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)) + + (screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*Y(He4)*state.rho + -screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*Y(H1)*state.rho) + + -screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*Y(H1)*state.rho; ydot_nuc(Mg22) = - (screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*Y(Ne18)*state.rho + -screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)); + (screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*Y(Ne18)*state.rho + -screened_rates(k_Mg22_to_He4_Ne18_derived)*Y(Mg22)) + + screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*Y(H1)*state.rho + + screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*Y(H1)*state.rho; ydot_nuc(Mg24) = - (screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + -screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)) + - (screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*Y(O16)*state.rho + -screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*Y(Mg24)*state.rho); + (screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*Y(Ne20)*state.rho + -screened_rates(k_Mg24_to_He4_Ne20_derived)*Y(Mg24)); ydot_nuc(Fe56) = 0.0_rt; @@ -862,63 +929,68 @@ AMREX_GPU_DEVICE AMREX_INLINE void jac_nuc(const burn_t& state, MatrixType& jac, const amrex::Array1D& Y, - const amrex::Array1D& screened_rates) + const amrex::Array1D& screened_rates) { + using namespace Rates; + amrex::Real scratch; - scratch = -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_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_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_Ne20_to_He4_F17_reaclib)*Y(Ne20)*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_O18_to_F19_reaclib)*Y(O18)*state.rho - screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*state.rho; + scratch = -screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_C13_p_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*state.rho - screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*state.rho - screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*state.rho - screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*state.rho - screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*state.rho - screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*state.rho - screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*state.rho - screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*state.rho - screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*state.rho - 3.0*screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*state.rho - 2.0*screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*state.rho - screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*state.rho - screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*state.rho - screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*state.rho - screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*state.rho - screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*state.rho - 3.0*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*Y(H1)*state.rho - 3.0*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*Y(H1)*state.rho; jac.set(H1, H1, scratch); - scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho + screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*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_N15_to_p_O18_derived)*Y(N15)*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_O16_to_p_F19_derived)*Y(O16)*state.rho; + scratch = 2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He4)*state.rho - screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(H1)*state.rho; + jac.set(H1, He3, scratch); + + scratch = screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*state.rho + screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*state.rho - screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*state.rho + screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_N14_He4_to_p_O17_derived)*Y(N14)*state.rho + screened_rates(k_N15_He4_to_p_O18_derived)*Y(N15)*state.rho + screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(O14)*state.rho + screened_rates(k_O15_He4_to_p_F18_derived)*Y(O15)*state.rho + screened_rates(k_O16_He4_to_p_F19_derived)*Y(O16)*state.rho; jac.set(H1, He4, scratch); - 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; + scratch = screened_rates(k_C12_He4_to_p_N15_derived)*Y(He4)*state.rho - screened_rates(k_C12_p_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; + scratch = -screened_rates(k_C13_p_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_N13_to_p_C12_derived) - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_N13_p_to_O14_reaclib)*Y(H1)*state.rho + screened_rates(k_N13_to_p_C12_derived); jac.set(H1, N13, scratch); - 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; + scratch = screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*state.rho - screened_rates(k_N14_p_to_O15_reaclib)*Y(H1)*state.rho + screened_rates(k_N14_to_p_C13_derived); jac.set(H1, N14, scratch); - scratch = screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*state.rho - 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; + scratch = screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*state.rho - screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(H1)*state.rho - screened_rates(k_N15_p_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 + screened_rates(k_O14_to_p_N13_derived); + scratch = screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*state.rho + screened_rates(k_O14_to_p_N13_derived); jac.set(H1, O14, scratch); - scratch = screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho + screened_rates(k_O15_to_p_N14_derived); + scratch = screened_rates(k_O15_He4_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_He4_O16_to_p_F19_derived)*Y(He4)*state.rho + 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; + scratch = screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*state.rho - screened_rates(k_O16_p_to_F17_reaclib)*Y(H1)*state.rho - screened_rates(k_O16_p_to_He4_N13_derived)*Y(H1)*state.rho + screened_rates(k_O16_to_p_N15_derived); 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; + scratch = -screened_rates(k_O17_p_to_F18_reaclib)*Y(H1)*state.rho - screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(H1, O17, scratch); - 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; + scratch = -screened_rates(k_O18_p_to_F19_reaclib)*Y(H1)*state.rho - screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(H1)*state.rho; jac.set(H1, O18, scratch); - 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_He4_O14_derived)*Y(H1)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(He4)*state.rho - screened_rates(k_F17_p_to_He4_O14_derived)*Y(H1)*state.rho - screened_rates(k_F17_p_to_Ne18_reaclib)*Y(H1)*state.rho + screened_rates(k_F17_to_p_O16_derived); jac.set(H1, F17, scratch); - scratch = screened_rates(k_F18_to_p_O17_derived) - 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; + scratch = -screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(H1)*state.rho - screened_rates(k_F18_p_to_Ne19_reaclib)*Y(H1)*state.rho + screened_rates(k_F18_to_p_O17_derived); jac.set(H1, F18, scratch); - scratch = screened_rates(k_F19_to_p_O18_derived) - screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(H1)*state.rho - screened_rates(k_p_F19_to_Ne20_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(H1)*state.rho - screened_rates(k_F19_p_to_Ne20_reaclib)*Y(H1)*state.rho + screened_rates(k_F19_to_p_O18_derived); jac.set(H1, F19, scratch); scratch = screened_rates(k_Ne18_to_p_F17_derived); jac.set(H1, Ne18, scratch); - scratch = screened_rates(k_Ne19_to_p_F18_derived); + scratch = -3.0*screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(H1)*state.rho + screened_rates(k_Ne19_to_p_F18_derived); jac.set(H1, Ne19, scratch); - scratch = screened_rates(k_Ne20_to_p_F19_derived) - screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(H1)*state.rho; + scratch = -2.0*screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(H1)*state.rho - screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(H1)*state.rho + screened_rates(k_Ne20_to_p_F19_derived); jac.set(H1, Ne20, scratch); jac.set(H1, Mg22, 0.0); @@ -927,74 +999,126 @@ void jac_nuc(const burn_t& state, jac.set(H1, Fe56, 0.0); - 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_F19_to_He4_O16_reaclib)*Y(F19)*state.rho + screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho + screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*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 + screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*state.rho; + scratch = -screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*state.rho + 1.0*screened_rates(k_p_p_p_to_He3_beta_pos_modified)*Y(H1)*state.rho + 1.0*screened_rates(k_p_p_p_to_He3_electron_capture_modified)*Y(H1)*state.rho; + jac.set(He3, H1, scratch); + + scratch = -2.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho - screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He4)*state.rho - screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(H1)*state.rho; + jac.set(He3, He3, scratch); + + scratch = -screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He3)*state.rho; + jac.set(He3, He4, scratch); + + jac.set(He3, C12, 0.0); + + jac.set(He3, C13, 0.0); + + jac.set(He3, N13, 0.0); + + jac.set(He3, N14, 0.0); + + jac.set(He3, N15, 0.0); + + jac.set(He3, O14, 0.0); + + jac.set(He3, O15, 0.0); + + jac.set(He3, O16, 0.0); + + jac.set(He3, O17, 0.0); + + jac.set(He3, O18, 0.0); + + jac.set(He3, F17, 0.0); + + jac.set(He3, F18, 0.0); + + jac.set(He3, F19, 0.0); + + jac.set(He3, Ne18, 0.0); + + jac.set(He3, Ne19, 0.0); + + jac.set(He3, Ne20, 0.0); + + jac.set(He3, Mg22, 0.0); + + jac.set(He3, Mg24, 0.0); + + jac.set(He3, Fe56, 0.0); + + scratch = screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*state.rho + screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*state.rho + screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*state.rho + screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(He3)*state.rho + screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*state.rho + screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*state.rho + screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*state.rho + screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*state.rho + screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*state.rho; jac.set(He4, H1, scratch); - 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_F17_to_p_Ne20_derived)*Y(F17)*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_Mg24_to_C12_O16_derived)*Y(Mg24)*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_N15_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_He4_N15_to_p_O18_derived)*Y(N15)*state.rho - screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(Ne18)*state.rho - screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(Ne20)*state.rho - screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(Ne20)*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_O15_to_p_F18_derived)*Y(O15)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_O16_to_p_F19_derived)*Y(O16)*state.rho; + scratch = 1.0*screened_rates(k_He3_He3_to_p_p_He4_reaclib)*Y(He3)*state.rho + screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*Y(He4)*state.rho + screened_rates(k_He3_p_to_He4_beta_pos_reaclib)*Y(H1)*state.rho; + jac.set(He4, He3, scratch); + + scratch = -screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*state.rho - screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*state.rho + screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified)*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_N13_He4_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_N14_He4_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_N14_He4_to_p_O17_derived)*Y(N14)*state.rho - screened_rates(k_N15_He4_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_N15_He4_to_p_O18_derived)*Y(N15)*state.rho - screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(Ne18)*state.rho - screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(Ne20)*state.rho - screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(O14)*state.rho - screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(O14)*state.rho - screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(O15)*state.rho - screened_rates(k_O15_He4_to_p_F18_derived)*Y(O15)*state.rho - screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_O16_He4_to_p_F19_derived)*Y(O16)*state.rho; jac.set(He4, He4, scratch); - scratch = 1.0*screened_rates(k_C12_C12_to_He4_Ne20_reaclib)*Y(C12)*state.rho + screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(O16)*state.rho + 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; + scratch = -screened_rates(k_C12_He4_to_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_C12_He4_to_p_N15_derived)*Y(He4)*state.rho + 3.0*screened_rates(k_C12_to_3He4_derived); jac.set(He4, C12, scratch); jac.set(He4, C13, 0.0); - scratch = -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho; + scratch = -screened_rates(k_N13_He4_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 - screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho; + scratch = -screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*state.rho - screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*state.rho; jac.set(He4, N14, scratch); - scratch = -screened_rates(k_He4_N15_to_F19_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*state.rho + screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*state.rho - screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*state.rho + screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(H1)*state.rho; jac.set(He4, N15, scratch); - scratch = -screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho; + scratch = -screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*state.rho - screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*state.rho; jac.set(He4, O14, scratch); - scratch = -screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho; + scratch = -screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*state.rho - screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*state.rho; jac.set(He4, O15, scratch); - scratch = screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*state.rho + screened_rates(k_O16_to_He4_C12_derived) + screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; + scratch = -screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*state.rho + screened_rates(k_O16_p_to_He4_N13_derived)*Y(H1)*state.rho + screened_rates(k_O16_to_He4_C12_derived); jac.set(He4, O16, scratch); - scratch = screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(He4, O17, scratch); - scratch = screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(H1)*state.rho; jac.set(He4, O18, scratch); - scratch = -screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho + screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; + scratch = -screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(He4)*state.rho + screened_rates(k_F17_p_to_He4_O14_derived)*Y(H1)*state.rho; jac.set(He4, F17, scratch); - scratch = screened_rates(k_F18_to_He4_N14_derived) + screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(H1)*state.rho + screened_rates(k_F18_to_He4_N14_derived); jac.set(He4, F18, scratch); - scratch = screened_rates(k_F19_to_He4_N15_derived) + screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(H1)*state.rho + screened_rates(k_F19_to_He4_N15_derived); jac.set(He4, F19, scratch); - scratch = -screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived); + scratch = -screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*state.rho + screened_rates(k_Ne18_to_He4_O14_derived); jac.set(He4, Ne18, scratch); scratch = screened_rates(k_Ne19_to_He4_O15_derived); jac.set(He4, Ne19, scratch); - scratch = -screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*state.rho - screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived) + screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*state.rho + screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(H1)*state.rho + screened_rates(k_Ne20_to_He4_O16_derived); jac.set(He4, Ne20, scratch); scratch = screened_rates(k_Mg22_to_He4_Ne18_derived); jac.set(He4, Mg22, scratch); - scratch = -screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*state.rho + screened_rates(k_Mg24_to_He4_Ne20_derived); + scratch = screened_rates(k_Mg24_to_He4_Ne20_derived); jac.set(He4, Mg24, scratch); jac.set(He4, Fe56, 0.0); - scratch = -screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho + screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(N15)*state.rho; + scratch = -screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*state.rho + screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*state.rho; jac.set(C12, H1, scratch); - 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) + screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(Mg24)*state.rho + 2.0*screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(Ne20)*state.rho; + jac.set(C12, He3, 0.0); + + scratch = -screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_C12_He4_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); - scratch = -2.0*screened_rates(k_C12_C12_to_He4_Ne20_reaclib)*Y(C12)*state.rho - screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(O16)*state.rho - 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; + scratch = -screened_rates(k_C12_He4_to_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_C12_He4_to_p_N15_derived)*Y(He4)*state.rho - screened_rates(k_C12_p_to_N13_reaclib)*Y(H1)*state.rho - screened_rates(k_C12_to_3He4_derived); jac.set(C12, C12, scratch); jac.set(C12, C13, 0.0); @@ -1004,14 +1128,14 @@ void jac_nuc(const burn_t& state, jac.set(C12, N14, 0.0); - scratch = screened_rates(k_p_N15_to_He4_C12_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(H1)*state.rho; jac.set(C12, N15, scratch); jac.set(C12, O14, 0.0); jac.set(C12, O15, 0.0); - scratch = -screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*state.rho + screened_rates(k_O16_to_He4_C12_derived); + scratch = screened_rates(k_O16_to_He4_C12_derived); jac.set(C12, O16, scratch); jac.set(C12, O17, 0.0); @@ -1028,27 +1152,27 @@ void jac_nuc(const burn_t& state, jac.set(C12, Ne19, 0.0); - scratch = 2.0*screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*state.rho; - jac.set(C12, Ne20, scratch); + jac.set(C12, Ne20, 0.0); jac.set(C12, Mg22, 0.0); - scratch = screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*state.rho; - jac.set(C12, Mg24, scratch); + jac.set(C12, Mg24, 0.0); jac.set(C12, Fe56, 0.0); - scratch = -screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho; + scratch = -screened_rates(k_C13_p_to_N14_reaclib)*Y(C13)*state.rho; jac.set(C13, H1, scratch); + jac.set(C13, He3, 0.0); + jac.set(C13, He4, 0.0); jac.set(C13, C12, 0.0); - scratch = -screened_rates(k_p_C13_to_N14_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_C13_p_to_N14_reaclib)*Y(H1)*state.rho; jac.set(C13, C13, scratch); - scratch = screened_rates(k_N13_to_C13_reaclib); + scratch = screened_rates(k_N13_to_C13_beta_pos_reaclib); jac.set(C13, N13, scratch); scratch = screened_rates(k_N14_to_p_C13_derived); @@ -1084,18 +1208,20 @@ void jac_nuc(const burn_t& state, jac.set(C13, Fe56, 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 + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho; + scratch = screened_rates(k_C12_p_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*state.rho + screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*state.rho; jac.set(N13, H1, scratch); - scratch = -screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho; + jac.set(N13, He3, 0.0); + + scratch = -screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(N13)*state.rho; jac.set(N13, He4, scratch); - scratch = screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_C12_p_to_N13_reaclib)*Y(H1)*state.rho; jac.set(N13, C12, scratch); 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_N13_to_p_C12_derived) - screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*state.rho - screened_rates(k_N13_p_to_O14_reaclib)*Y(H1)*state.rho - screened_rates(k_N13_to_C13_beta_pos_reaclib) - screened_rates(k_N13_to_p_C12_derived); jac.set(N13, N13, scratch); jac.set(N13, N14, 0.0); @@ -1107,7 +1233,7 @@ void jac_nuc(const burn_t& state, jac.set(N13, O15, 0.0); - scratch = screened_rates(k_p_O16_to_He4_N13_derived)*Y(H1)*state.rho; + scratch = screened_rates(k_O16_p_to_He4_N13_derived)*Y(H1)*state.rho; jac.set(N13, O16, scratch); jac.set(N13, O17, 0.0); @@ -1132,25 +1258,27 @@ void jac_nuc(const burn_t& state, jac.set(N13, Fe56, 0.0); - scratch = screened_rates(k_p_C13_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho + screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(O17)*state.rho; + scratch = screened_rates(k_C13_p_to_N14_reaclib)*Y(C13)*state.rho - screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*state.rho + screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*state.rho; jac.set(N14, H1, scratch); - 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, He3, 0.0); + + scratch = -screened_rates(k_N14_He4_to_F18_reaclib)*Y(N14)*state.rho - screened_rates(k_N14_He4_to_p_O17_derived)*Y(N14)*state.rho; jac.set(N14, He4, scratch); jac.set(N14, C12, 0.0); - scratch = screened_rates(k_p_C13_to_N14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_C13_p_to_N14_reaclib)*Y(H1)*state.rho; jac.set(N14, C13, scratch); jac.set(N14, N13, 0.0); - 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; + scratch = -screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*state.rho - screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*state.rho - screened_rates(k_N14_p_to_O15_reaclib)*Y(H1)*state.rho - screened_rates(k_N14_to_p_C13_derived); jac.set(N14, N14, scratch); jac.set(N14, N15, 0.0); - scratch = screened_rates(k_O14_to_N14_reaclib); + scratch = screened_rates(k_O14_to_N14_beta_pos_reaclib); jac.set(N14, O14, scratch); scratch = screened_rates(k_O15_to_p_N14_derived); @@ -1158,7 +1286,7 @@ void jac_nuc(const burn_t& state, jac.set(N14, O16, 0.0); - scratch = screened_rates(k_p_O17_to_He4_N14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(H1)*state.rho; jac.set(N14, O17, scratch); jac.set(N14, O18, 0.0); @@ -1182,13 +1310,15 @@ void jac_nuc(const burn_t& state, jac.set(N14, Fe56, 0.0); - 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 + screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(O18)*state.rho; + scratch = -screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(N15)*state.rho - screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*state.rho + screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*state.rho; jac.set(N15, H1, scratch); - scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(C12)*state.rho - screened_rates(k_He4_N15_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_He4_N15_to_p_O18_derived)*Y(N15)*state.rho; + jac.set(N15, He3, 0.0); + + scratch = screened_rates(k_C12_He4_to_p_N15_derived)*Y(C12)*state.rho - screened_rates(k_N15_He4_to_F19_reaclib)*Y(N15)*state.rho - screened_rates(k_N15_He4_to_p_O18_derived)*Y(N15)*state.rho; jac.set(N15, He4, scratch); - scratch = screened_rates(k_He4_C12_to_p_N15_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_C12_He4_to_p_N15_derived)*Y(He4)*state.rho; jac.set(N15, C12, scratch); jac.set(N15, C13, 0.0); @@ -1197,12 +1327,12 @@ void jac_nuc(const burn_t& state, jac.set(N15, N14, 0.0); - scratch = -screened_rates(k_He4_N15_to_F19_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*state.rho - 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; + scratch = -screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*state.rho - screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*state.rho - screened_rates(k_N15_p_to_He4_C12_reaclib)*Y(H1)*state.rho - screened_rates(k_N15_p_to_O16_reaclib)*Y(H1)*state.rho; jac.set(N15, N15, scratch); jac.set(N15, O14, 0.0); - scratch = screened_rates(k_O15_to_N15_reaclib); + scratch = screened_rates(k_O15_to_N15_beta_pos_reaclib); jac.set(N15, O15, scratch); scratch = screened_rates(k_O16_to_p_N15_derived); @@ -1210,7 +1340,7 @@ void jac_nuc(const burn_t& state, jac.set(N15, O17, 0.0); - scratch = screened_rates(k_p_O18_to_He4_N15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(H1)*state.rho; jac.set(N15, O18, scratch); jac.set(N15, F17, 0.0); @@ -1232,24 +1362,26 @@ void jac_nuc(const burn_t& state, jac.set(N15, Fe56, 0.0); - 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; + scratch = screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*state.rho + screened_rates(k_N13_p_to_O14_reaclib)*Y(N13)*state.rho; jac.set(O14, H1, scratch); - scratch = -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; + jac.set(O14, He3, 0.0); + + scratch = -screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(O14)*state.rho - screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(O14)*state.rho; jac.set(O14, He4, scratch); jac.set(O14, C12, 0.0); jac.set(O14, C13, 0.0); - scratch = screened_rates(k_p_N13_to_O14_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_N13_p_to_O14_reaclib)*Y(H1)*state.rho; jac.set(O14, N13, scratch); jac.set(O14, N14, 0.0); jac.set(O14, N15, 0.0); - scratch = -screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*state.rho - 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); + scratch = -screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*state.rho - screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*state.rho - screened_rates(k_O14_to_N14_beta_pos_reaclib) - screened_rates(k_O14_to_p_N13_derived); jac.set(O14, O14, scratch); jac.set(O14, O15, 0.0); @@ -1260,7 +1392,7 @@ void jac_nuc(const burn_t& state, jac.set(O14, O18, 0.0); - scratch = screened_rates(k_p_F17_to_He4_O14_derived)*Y(H1)*state.rho; + scratch = screened_rates(k_F17_p_to_He4_O14_derived)*Y(H1)*state.rho; jac.set(O14, F17, scratch); jac.set(O14, F18, 0.0); @@ -1280,10 +1412,12 @@ void jac_nuc(const burn_t& state, jac.set(O14, Fe56, 0.0); - scratch = screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(F18)*state.rho + screened_rates(k_p_N14_to_O15_reaclib)*Y(N14)*state.rho; + scratch = screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*state.rho + screened_rates(k_N14_p_to_O15_reaclib)*Y(N14)*state.rho; jac.set(O15, H1, scratch); - scratch = -screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(O15)*state.rho - screened_rates(k_He4_O15_to_p_F18_derived)*Y(O15)*state.rho; + jac.set(O15, He3, 0.0); + + scratch = -screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(O15)*state.rho - screened_rates(k_O15_He4_to_p_F18_derived)*Y(O15)*state.rho; jac.set(O15, He4, scratch); jac.set(O15, C12, 0.0); @@ -1292,14 +1426,14 @@ void jac_nuc(const burn_t& state, jac.set(O15, N13, 0.0); - scratch = screened_rates(k_p_N14_to_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_N14_p_to_O15_reaclib)*Y(H1)*state.rho; jac.set(O15, N14, scratch); jac.set(O15, N15, 0.0); jac.set(O15, O14, 0.0); - scratch = -screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*state.rho - 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); + scratch = -screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*state.rho - screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*state.rho - screened_rates(k_O15_to_N15_beta_pos_reaclib) - screened_rates(k_O15_to_p_N14_derived); jac.set(O15, O15, scratch); jac.set(O15, O16, 0.0); @@ -1310,7 +1444,7 @@ void jac_nuc(const burn_t& state, jac.set(O15, F17, 0.0); - scratch = screened_rates(k_p_F18_to_He4_O15_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(H1)*state.rho; jac.set(O15, F18, scratch); jac.set(O15, F19, 0.0); @@ -1328,30 +1462,32 @@ void jac_nuc(const burn_t& state, jac.set(O15, Fe56, 0.0); - scratch = screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(F19)*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; + scratch = screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*state.rho + screened_rates(k_N15_p_to_O16_reaclib)*Y(N15)*state.rho - screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*state.rho - screened_rates(k_O16_p_to_He4_N13_derived)*Y(O16)*state.rho; jac.set(O16, H1, scratch); - scratch = screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho + screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(Mg24)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_O16_to_p_F19_derived)*Y(O16)*state.rho; + jac.set(O16, He3, 0.0); + + scratch = screened_rates(k_C12_He4_to_O16_reaclib)*Y(C12)*state.rho + screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(N13)*state.rho - screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_O16_He4_to_p_F19_derived)*Y(O16)*state.rho; jac.set(O16, He4, scratch); - scratch = -screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(O16)*state.rho + screened_rates(k_He4_C12_to_O16_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_C12_He4_to_O16_reaclib)*Y(He4)*state.rho; jac.set(O16, C12, scratch); jac.set(O16, C13, 0.0); - scratch = screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_N13_He4_to_p_O16_reaclib)*Y(He4)*state.rho; jac.set(O16, N13, scratch); jac.set(O16, N14, 0.0); - scratch = screened_rates(k_p_N15_to_O16_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_N15_p_to_O16_reaclib)*Y(H1)*state.rho; jac.set(O16, N15, scratch); jac.set(O16, O14, 0.0); jac.set(O16, O15, 0.0); - scratch = -screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*state.rho - 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; + scratch = -screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*state.rho - screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*state.rho - screened_rates(k_O16_p_to_F17_reaclib)*Y(H1)*state.rho - screened_rates(k_O16_p_to_He4_N13_derived)*Y(H1)*state.rho - screened_rates(k_O16_to_He4_C12_derived) - screened_rates(k_O16_to_p_N15_derived); jac.set(O16, O16, scratch); jac.set(O16, O17, 0.0); @@ -1363,7 +1499,7 @@ void jac_nuc(const burn_t& state, jac.set(O16, F18, 0.0); - scratch = screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(H1)*state.rho; jac.set(O16, F19, scratch); jac.set(O16, Ne18, 0.0); @@ -1375,15 +1511,16 @@ void jac_nuc(const burn_t& state, jac.set(O16, Mg22, 0.0); - scratch = screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*state.rho; - jac.set(O16, Mg24, scratch); + jac.set(O16, Mg24, 0.0); jac.set(O16, Fe56, 0.0); - scratch = -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; + scratch = -screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*state.rho - screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(O17)*state.rho; jac.set(O17, H1, scratch); - scratch = screened_rates(k_He4_N14_to_p_O17_derived)*Y(N14)*state.rho; + jac.set(O17, He3, 0.0); + + scratch = screened_rates(k_N14_He4_to_p_O17_derived)*Y(N14)*state.rho; jac.set(O17, He4, scratch); jac.set(O17, C12, 0.0); @@ -1392,7 +1529,7 @@ void jac_nuc(const burn_t& state, jac.set(O17, N13, 0.0); - scratch = screened_rates(k_He4_N14_to_p_O17_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_N14_He4_to_p_O17_derived)*Y(He4)*state.rho; jac.set(O17, N14, scratch); jac.set(O17, N15, 0.0); @@ -1403,12 +1540,12 @@ void jac_nuc(const burn_t& state, jac.set(O17, O16, 0.0); - 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; + scratch = -screened_rates(k_O17_p_to_F18_reaclib)*Y(H1)*state.rho - screened_rates(k_O17_p_to_He4_N14_reaclib)*Y(H1)*state.rho - screened_rates(k_O17_to_F17_beta_neg_weaktab); jac.set(O17, O17, scratch); jac.set(O17, O18, 0.0); - scratch = screened_rates(k_F17_to_O17_weaktab); + scratch = screened_rates(k_F17_to_O17_electron_capture_weaktab); jac.set(O17, F17, scratch); scratch = screened_rates(k_F18_to_p_O17_derived); @@ -1428,10 +1565,12 @@ void jac_nuc(const burn_t& state, jac.set(O17, Fe56, 0.0); - scratch = -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; + scratch = -screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*state.rho - screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(O18)*state.rho; jac.set(O18, H1, scratch); - scratch = screened_rates(k_He4_N15_to_p_O18_derived)*Y(N15)*state.rho; + jac.set(O18, He3, 0.0); + + scratch = screened_rates(k_N15_He4_to_p_O18_derived)*Y(N15)*state.rho; jac.set(O18, He4, scratch); jac.set(O18, C12, 0.0); @@ -1442,7 +1581,7 @@ void jac_nuc(const burn_t& state, jac.set(O18, N14, 0.0); - scratch = screened_rates(k_He4_N15_to_p_O18_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_N15_He4_to_p_O18_derived)*Y(He4)*state.rho; jac.set(O18, N15, scratch); jac.set(O18, O14, 0.0); @@ -1453,12 +1592,12 @@ void jac_nuc(const burn_t& state, jac.set(O18, O17, 0.0); - scratch = -screened_rates(k_O18_to_F18_weaktab) - 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; + scratch = -screened_rates(k_O18_p_to_F19_reaclib)*Y(H1)*state.rho - screened_rates(k_O18_p_to_He4_N15_reaclib)*Y(H1)*state.rho - screened_rates(k_O18_to_F18_beta_neg_weaktab); jac.set(O18, O18, scratch); jac.set(O18, F17, 0.0); - scratch = screened_rates(k_F18_to_O18_weaktab); + scratch = screened_rates(k_F18_to_O18_electron_capture_weaktab); jac.set(O18, F18, scratch); scratch = screened_rates(k_F19_to_p_O18_derived); @@ -1476,10 +1615,12 @@ void jac_nuc(const burn_t& state, jac.set(O18, Fe56, 0.0); - scratch = -screened_rates(k_p_F17_to_He4_O14_derived)*Y(F17)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*state.rho + screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*state.rho + screened_rates(k_p_O16_to_F17_reaclib)*Y(O16)*state.rho; + scratch = -screened_rates(k_F17_p_to_He4_O14_derived)*Y(F17)*state.rho - screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*state.rho + screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*state.rho + screened_rates(k_O16_p_to_F17_reaclib)*Y(O16)*state.rho; jac.set(F17, H1, scratch); - 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, He3, 0.0); + + scratch = -screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*state.rho + screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(O14)*state.rho; jac.set(F17, He4, scratch); jac.set(F17, C12, 0.0); @@ -1492,20 +1633,20 @@ void jac_nuc(const burn_t& state, jac.set(F17, N15, 0.0); - scratch = screened_rates(k_He4_O14_to_p_F17_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_O14_He4_to_p_F17_reaclib)*Y(He4)*state.rho; jac.set(F17, O14, scratch); jac.set(F17, O15, 0.0); - scratch = screened_rates(k_p_O16_to_F17_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O16_p_to_F17_reaclib)*Y(H1)*state.rho; jac.set(F17, O16, scratch); - scratch = screened_rates(k_O17_to_F17_weaktab); + scratch = screened_rates(k_O17_to_F17_beta_neg_weaktab); jac.set(F17, O17, scratch); jac.set(F17, O18, 0.0); - 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_He4_O14_derived)*Y(H1)*state.rho - screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(He4)*state.rho - screened_rates(k_F17_p_to_He4_O14_derived)*Y(H1)*state.rho - screened_rates(k_F17_p_to_Ne18_reaclib)*Y(H1)*state.rho - screened_rates(k_F17_to_O17_electron_capture_weaktab) - screened_rates(k_F17_to_p_O16_derived); jac.set(F17, F17, scratch); jac.set(F17, F18, 0.0); @@ -1517,7 +1658,7 @@ void jac_nuc(const burn_t& state, jac.set(F17, Ne19, 0.0); - scratch = screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(H1)*state.rho; jac.set(F17, Ne20, scratch); jac.set(F17, Mg22, 0.0); @@ -1526,10 +1667,12 @@ void jac_nuc(const burn_t& state, jac.set(F17, Fe56, 0.0); - scratch = -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_O17_to_F18_reaclib)*Y(O17)*state.rho; + scratch = -screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(F18)*state.rho - screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*state.rho + screened_rates(k_O17_p_to_F18_reaclib)*Y(O17)*state.rho; jac.set(F18, H1, scratch); - 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, He3, 0.0); + + scratch = screened_rates(k_N14_He4_to_F18_reaclib)*Y(N14)*state.rho + screened_rates(k_O15_He4_to_p_F18_derived)*Y(O15)*state.rho; jac.set(F18, He4, scratch); jac.set(F18, C12, 0.0); @@ -1538,32 +1681,32 @@ void jac_nuc(const burn_t& state, jac.set(F18, N13, 0.0); - scratch = screened_rates(k_He4_N14_to_F18_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_N14_He4_to_F18_reaclib)*Y(He4)*state.rho; jac.set(F18, N14, scratch); jac.set(F18, N15, 0.0); jac.set(F18, O14, 0.0); - scratch = screened_rates(k_He4_O15_to_p_F18_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_O15_He4_to_p_F18_derived)*Y(He4)*state.rho; jac.set(F18, O15, scratch); jac.set(F18, O16, 0.0); - scratch = screened_rates(k_p_O17_to_F18_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O17_p_to_F18_reaclib)*Y(H1)*state.rho; jac.set(F18, O17, scratch); - scratch = screened_rates(k_O18_to_F18_weaktab); + scratch = screened_rates(k_O18_to_F18_beta_neg_weaktab); jac.set(F18, O18, scratch); jac.set(F18, F17, 0.0); - scratch = -screened_rates(k_F18_to_He4_N14_derived) - screened_rates(k_F18_to_Ne18_weaktab) - screened_rates(k_F18_to_O18_weaktab) - screened_rates(k_F18_to_p_O17_derived) - 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; + scratch = -screened_rates(k_F18_p_to_He4_O15_reaclib)*Y(H1)*state.rho - screened_rates(k_F18_p_to_Ne19_reaclib)*Y(H1)*state.rho - screened_rates(k_F18_to_He4_N14_derived) - screened_rates(k_F18_to_Ne18_beta_neg_weaktab) - screened_rates(k_F18_to_O18_electron_capture_weaktab) - screened_rates(k_F18_to_p_O17_derived); jac.set(F18, F18, scratch); jac.set(F18, F19, 0.0); - scratch = screened_rates(k_Ne18_to_F18_weaktab); + scratch = screened_rates(k_Ne18_to_F18_electron_capture_weaktab); jac.set(F18, Ne18, scratch); scratch = screened_rates(k_Ne19_to_p_F18_derived); @@ -1577,10 +1720,12 @@ void jac_nuc(const burn_t& state, jac.set(F18, Fe56, 0.0); - scratch = -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_O18_to_F19_reaclib)*Y(O18)*state.rho; + scratch = -screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(F19)*state.rho - screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*state.rho + screened_rates(k_O18_p_to_F19_reaclib)*Y(O18)*state.rho; jac.set(F19, H1, scratch); - scratch = screened_rates(k_He4_N15_to_F19_reaclib)*Y(N15)*state.rho + screened_rates(k_He4_O16_to_p_F19_derived)*Y(O16)*state.rho; + jac.set(F19, He3, 0.0); + + scratch = screened_rates(k_N15_He4_to_F19_reaclib)*Y(N15)*state.rho + screened_rates(k_O16_He4_to_p_F19_derived)*Y(O16)*state.rho; jac.set(F19, He4, scratch); jac.set(F19, C12, 0.0); @@ -1591,31 +1736,31 @@ void jac_nuc(const burn_t& state, jac.set(F19, N14, 0.0); - scratch = screened_rates(k_He4_N15_to_F19_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_N15_He4_to_F19_reaclib)*Y(He4)*state.rho; jac.set(F19, N15, scratch); jac.set(F19, O14, 0.0); jac.set(F19, O15, 0.0); - scratch = screened_rates(k_He4_O16_to_p_F19_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_O16_He4_to_p_F19_derived)*Y(He4)*state.rho; jac.set(F19, O16, scratch); jac.set(F19, O17, 0.0); - scratch = screened_rates(k_p_O18_to_F19_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_O18_p_to_F19_reaclib)*Y(H1)*state.rho; jac.set(F19, O18, scratch); jac.set(F19, F17, 0.0); jac.set(F19, F18, 0.0); - scratch = -screened_rates(k_F19_to_He4_N15_derived) - screened_rates(k_F19_to_Ne19_weaktab) - screened_rates(k_F19_to_p_O18_derived) - screened_rates(k_p_F19_to_He4_O16_reaclib)*Y(H1)*state.rho - screened_rates(k_p_F19_to_Ne20_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_F19_p_to_He4_O16_reaclib)*Y(H1)*state.rho - screened_rates(k_F19_p_to_Ne20_reaclib)*Y(H1)*state.rho - screened_rates(k_F19_to_He4_N15_derived) - screened_rates(k_F19_to_Ne19_beta_neg_weaktab) - screened_rates(k_F19_to_p_O18_derived); jac.set(F19, F19, scratch); jac.set(F19, Ne18, 0.0); - scratch = screened_rates(k_Ne19_to_F19_weaktab); + scratch = screened_rates(k_Ne19_to_F19_electron_capture_weaktab); jac.set(F19, Ne19, scratch); scratch = screened_rates(k_Ne20_to_p_F19_derived); @@ -1627,10 +1772,12 @@ void jac_nuc(const burn_t& state, jac.set(F19, Fe56, 0.0); - scratch = screened_rates(k_p_F17_to_Ne18_reaclib)*Y(F17)*state.rho; + scratch = screened_rates(k_F17_p_to_Ne18_reaclib)*Y(F17)*state.rho; jac.set(Ne18, H1, scratch); - scratch = -screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(Ne18)*state.rho + screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(O14)*state.rho; + jac.set(Ne18, He3, 0.0); + + scratch = -screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(Ne18)*state.rho + screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(O14)*state.rho; jac.set(Ne18, He4, scratch); jac.set(Ne18, C12, 0.0); @@ -1643,7 +1790,7 @@ void jac_nuc(const burn_t& state, jac.set(Ne18, N15, 0.0); - scratch = screened_rates(k_He4_O14_to_Ne18_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_O14_He4_to_Ne18_reaclib)*Y(He4)*state.rho; jac.set(Ne18, O14, scratch); jac.set(Ne18, O15, 0.0); @@ -1654,15 +1801,15 @@ void jac_nuc(const burn_t& state, jac.set(Ne18, O18, 0.0); - scratch = screened_rates(k_p_F17_to_Ne18_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F17_p_to_Ne18_reaclib)*Y(H1)*state.rho; jac.set(Ne18, F17, scratch); - scratch = screened_rates(k_F18_to_Ne18_weaktab); + scratch = screened_rates(k_F18_to_Ne18_beta_neg_weaktab); jac.set(Ne18, F18, scratch); jac.set(Ne18, F19, 0.0); - scratch = -screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*state.rho - screened_rates(k_Ne18_to_F18_weaktab) - screened_rates(k_Ne18_to_He4_O14_derived) - screened_rates(k_Ne18_to_p_F17_derived); + scratch = -screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*state.rho - screened_rates(k_Ne18_to_F18_electron_capture_weaktab) - screened_rates(k_Ne18_to_He4_O14_derived) - screened_rates(k_Ne18_to_p_F17_derived); jac.set(Ne18, Ne18, scratch); jac.set(Ne18, Ne19, 0.0); @@ -1676,10 +1823,12 @@ void jac_nuc(const burn_t& state, jac.set(Ne18, Fe56, 0.0); - scratch = screened_rates(k_p_F18_to_Ne19_reaclib)*Y(F18)*state.rho; + scratch = screened_rates(k_F18_p_to_Ne19_reaclib)*Y(F18)*state.rho - screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*state.rho; jac.set(Ne19, H1, scratch); - scratch = screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(O15)*state.rho; + jac.set(Ne19, He3, 0.0); + + scratch = screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(O15)*state.rho; jac.set(Ne19, He4, scratch); jac.set(Ne19, C12, 0.0); @@ -1694,7 +1843,7 @@ void jac_nuc(const burn_t& state, jac.set(Ne19, O14, 0.0); - scratch = screened_rates(k_He4_O15_to_Ne19_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_O15_He4_to_Ne19_reaclib)*Y(He4)*state.rho; jac.set(Ne19, O15, scratch); jac.set(Ne19, O16, 0.0); @@ -1705,15 +1854,15 @@ void jac_nuc(const burn_t& state, jac.set(Ne19, F17, 0.0); - scratch = screened_rates(k_p_F18_to_Ne19_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F18_p_to_Ne19_reaclib)*Y(H1)*state.rho; jac.set(Ne19, F18, scratch); - scratch = screened_rates(k_F19_to_Ne19_weaktab); + scratch = screened_rates(k_F19_to_Ne19_beta_neg_weaktab); jac.set(Ne19, F19, scratch); jac.set(Ne19, Ne18, 0.0); - scratch = -screened_rates(k_Ne19_to_F19_weaktab) - screened_rates(k_Ne19_to_He4_O15_derived) - screened_rates(k_Ne19_to_p_F18_derived); + scratch = -screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(H1)*state.rho - screened_rates(k_Ne19_to_F19_electron_capture_weaktab) - screened_rates(k_Ne19_to_He4_O15_derived) - screened_rates(k_Ne19_to_p_F18_derived); jac.set(Ne19, Ne19, scratch); jac.set(Ne19, Ne20, 0.0); @@ -1724,14 +1873,15 @@ void jac_nuc(const burn_t& state, jac.set(Ne19, Fe56, 0.0); - scratch = screened_rates(k_p_F19_to_Ne20_reaclib)*Y(F19)*state.rho - screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(Ne20)*state.rho; + scratch = screened_rates(k_F19_p_to_Ne20_reaclib)*Y(F19)*state.rho - screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*state.rho - screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(Ne20)*state.rho; jac.set(Ne20, H1, scratch); - scratch = screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(F17)*state.rho - screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(Ne20)*state.rho - screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(Ne20)*state.rho + screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho; + jac.set(Ne20, He3, 0.0); + + scratch = screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(F17)*state.rho - screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(Ne20)*state.rho + screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(O16)*state.rho; jac.set(Ne20, He4, scratch); - scratch = 1.0*screened_rates(k_C12_C12_to_He4_Ne20_reaclib)*Y(C12)*state.rho; - jac.set(Ne20, C12, scratch); + jac.set(Ne20, C12, 0.0); jac.set(Ne20, C13, 0.0); @@ -1745,26 +1895,26 @@ void jac_nuc(const burn_t& state, jac.set(Ne20, O15, 0.0); - scratch = screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_O16_He4_to_Ne20_reaclib)*Y(He4)*state.rho; jac.set(Ne20, O16, scratch); jac.set(Ne20, O17, 0.0); jac.set(Ne20, O18, 0.0); - scratch = screened_rates(k_He4_F17_to_p_Ne20_derived)*Y(He4)*state.rho; + scratch = screened_rates(k_F17_He4_to_p_Ne20_derived)*Y(He4)*state.rho; jac.set(Ne20, F17, scratch); jac.set(Ne20, F18, 0.0); - scratch = screened_rates(k_p_F19_to_Ne20_reaclib)*Y(H1)*state.rho; + scratch = screened_rates(k_F19_p_to_Ne20_reaclib)*Y(H1)*state.rho; jac.set(Ne20, F19, scratch); jac.set(Ne20, Ne18, 0.0); jac.set(Ne20, Ne19, 0.0); - scratch = -screened_rates(k_He4_Ne20_to_C12_C12_derived)*Y(He4)*state.rho - screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*state.rho - screened_rates(k_Ne20_to_He4_O16_derived) - screened_rates(k_Ne20_to_p_F19_derived) - screened_rates(k_p_Ne20_to_He4_F17_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*state.rho - screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(H1)*state.rho - screened_rates(k_Ne20_p_to_He4_F17_reaclib)*Y(H1)*state.rho - screened_rates(k_Ne20_to_He4_O16_derived) - screened_rates(k_Ne20_to_p_F19_derived); jac.set(Ne20, Ne20, scratch); jac.set(Ne20, Mg22, 0.0); @@ -1774,9 +1924,12 @@ void jac_nuc(const burn_t& state, jac.set(Ne20, Fe56, 0.0); - jac.set(Mg22, H1, 0.0); + scratch = screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(Ne19)*state.rho + screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(Ne20)*state.rho; + jac.set(Mg22, H1, scratch); + + jac.set(Mg22, He3, 0.0); - scratch = screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(Ne18)*state.rho; + scratch = screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(Ne18)*state.rho; jac.set(Mg22, He4, scratch); jac.set(Mg22, C12, 0.0); @@ -1805,12 +1958,14 @@ void jac_nuc(const burn_t& state, jac.set(Mg22, F19, 0.0); - scratch = screened_rates(k_He4_Ne18_to_Mg22_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_Ne18_He4_to_Mg22_approx)*Y(He4)*state.rho; jac.set(Mg22, Ne18, scratch); - jac.set(Mg22, Ne19, 0.0); + scratch = screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified)*Y(H1)*state.rho; + jac.set(Mg22, Ne19, scratch); - jac.set(Mg22, Ne20, 0.0); + scratch = screened_rates(k_Ne20_p_p_to_Mg22_modified)*Y(H1)*state.rho; + jac.set(Mg22, Ne20, scratch); scratch = -screened_rates(k_Mg22_to_He4_Ne18_derived); jac.set(Mg22, Mg22, scratch); @@ -1821,11 +1976,12 @@ void jac_nuc(const burn_t& state, jac.set(Mg24, H1, 0.0); - scratch = -screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(Mg24)*state.rho + screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(Ne20)*state.rho; + jac.set(Mg24, He3, 0.0); + + scratch = screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(Ne20)*state.rho; jac.set(Mg24, He4, scratch); - scratch = screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(O16)*state.rho; - jac.set(Mg24, C12, scratch); + jac.set(Mg24, C12, 0.0); jac.set(Mg24, C13, 0.0); @@ -1839,8 +1995,7 @@ void jac_nuc(const burn_t& state, jac.set(Mg24, O15, 0.0); - scratch = screened_rates(k_C12_O16_to_He4_Mg24_reaclib)*Y(C12)*state.rho; - jac.set(Mg24, O16, scratch); + jac.set(Mg24, O16, 0.0); jac.set(Mg24, O17, 0.0); @@ -1856,18 +2011,20 @@ void jac_nuc(const burn_t& state, jac.set(Mg24, Ne19, 0.0); - scratch = screened_rates(k_He4_Ne20_to_Mg24_reaclib)*Y(He4)*state.rho; + scratch = screened_rates(k_Ne20_He4_to_Mg24_reaclib)*Y(He4)*state.rho; jac.set(Mg24, Ne20, scratch); jac.set(Mg24, Mg22, 0.0); - scratch = -screened_rates(k_He4_Mg24_to_C12_O16_derived)*Y(He4)*state.rho - screened_rates(k_Mg24_to_He4_Ne20_derived); + scratch = -screened_rates(k_Mg24_to_He4_Ne20_derived); jac.set(Mg24, Mg24, scratch); jac.set(Mg24, Fe56, 0.0); jac.set(Fe56, H1, 0.0); + jac.set(Fe56, He3, 0.0); + jac.set(Fe56, He4, 0.0); jac.set(Fe56, C12, 0.0); diff --git a/networks/CNO_extras/approximate_rates.H b/networks/CNO_extras/approximate_rates.H index 14d44a740..fdc51c685 100644 --- a/networks/CNO_extras/approximate_rates.H +++ b/networks/CNO_extras/approximate_rates.H @@ -8,24 +8,53 @@ #include #include -using namespace Rates; -using namespace Species; - - - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void -fill_approx_rates([[maybe_unused]] const tf_t& tfactors, - [[maybe_unused]] const amrex::Real rho, - [[maybe_unused]] const amrex::Array1D& Y, - [[maybe_unused]] T& rate_eval) -{ - - [[maybe_unused]] amrex::Real rate{}; - [[maybe_unused]] amrex::Real drate_dT{}; - - +namespace approximate_rates { + + using namespace Rates; + using namespace Species; + + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne18_He4_to_Mg22_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { + + amrex::Real r_pg = rate_eval.screened_rates(k_Na21_p_to_Mg22_reaclib); + amrex::Real r_pa = rate_eval.screened_rates(k_Na21_p_to_He4_Ne18_derived); + amrex::Real r_pY = 0.0_rt; + amrex::Real dd = 1.0_rt / (r_pg + r_pa + r_pY); + amrex::Real r_ag = rate_eval.screened_rates(k_Ne18_He4_to_Mg22_reaclib); + amrex::Real r_ap = rate_eval.screened_rates(k_Ne18_He4_to_p_Na21_reaclib); + rate = r_ag + r_ap * r_pg * dd; + if constexpr (std::is_same_v) { + amrex::Real drdT_ag = rate_eval.dscreened_rates_dT(k_Ne18_He4_to_Mg22_reaclib); + amrex::Real drdT_ap = rate_eval.dscreened_rates_dT(k_Ne18_He4_to_p_Na21_reaclib); + amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_Na21_p_to_Mg22_reaclib); + amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_Na21_p_to_He4_Ne18_derived); + amrex::Real drdT_pY = 0.0_rt; + drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa + drdT_pY); + } + } + + + + template + AMREX_GPU_DEVICE AMREX_INLINE + void + fill_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] const amrex::Real rho, + [[maybe_unused]] const amrex::Array1D& Y, + [[maybe_unused]] T& rate_eval) + { + + [[maybe_unused]] amrex::Real rate{}; + [[maybe_unused]] amrex::Real drate_dT{}; + + rate_Ne18_He4_to_Mg22_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_Ne18_He4_to_Mg22_approx) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_He4_to_Mg22_approx) = drate_dT; + } + + + } } - #endif diff --git a/networks/CNO_extras/branched_rates.H b/networks/CNO_extras/branched_rates.H new file mode 100644 index 000000000..903382523 --- /dev/null +++ b/networks/CNO_extras/branched_rates.H @@ -0,0 +1,33 @@ +#ifndef BRANCHED_RATES_H +#define BRANCHED_RATES_H + +#include +#include + +#include +#include +#include +#include +#include + +namespace branched_rates { + + using namespace Rates; + + using namespace temp_tabular; + + + template + AMREX_GPU_DEVICE AMREX_INLINE + void + fill_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] T& rate_eval) + { + + [[maybe_unused]] amrex::Real rate; + [[maybe_unused]] amrex::Real drate_dT; + + + } +} +#endif diff --git a/networks/CNO_extras/cno_extras.png b/networks/CNO_extras/cno_extras.png index c87507a74..720f19efb 100644 Binary files a/networks/CNO_extras/cno_extras.png and b/networks/CNO_extras/cno_extras.png differ diff --git a/networks/CNO_extras/cno_extras_hide_alpha.png b/networks/CNO_extras/cno_extras_hide_alpha.png deleted file mode 100644 index 86c0a6cd2..000000000 Binary files a/networks/CNO_extras/cno_extras_hide_alpha.png and /dev/null differ diff --git a/networks/CNO_extras/derived_rates.H b/networks/CNO_extras/derived_rates.H index da2e13d07..7c62f2ce3 100644 --- a/networks/CNO_extras/derived_rates.H +++ b/networks/CNO_extras/derived_rates.H @@ -7,3384 +7,3461 @@ #include #include -using namespace Rates; +namespace derived_rates { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_N13_to_p_C12_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + using namespace Rates; - // N13 --> p + C12 + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_N13_to_p_C12_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { - rate = 0.0; - drate_dT = 0.0; + // N13 --> p + C12 - // Evaluate partition function terms + rate = 0.0; + drate_dT = 0.0; - amrex::Real C12_log_pf, dC12_log_pf_dT9; + // Evaluate partition function terms - // 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 C12_log_pf, dC12_log_pf_dT9; - amrex::Real p_log_pf, dp_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; - // 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 p_log_pf, dp_log_pf_dT9; - amrex::Real N13_log_pf, dN13_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; - // 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 N13_log_pf, dN13_log_pf_dT9; - 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; + // 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 ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + 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; - // 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; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - ln_set_rate += net_log_pf + log_scor; + // 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; - 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; + ln_set_rate += net_log_pf + log_scor; - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + 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; - // 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; - } + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_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; + // 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; + } - ln_set_rate += net_log_pf + log_scor; + // 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; - 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; + ln_set_rate += net_log_pf + log_scor; - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + 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 + dlog_scor_dT * 1.0e9_rt; + } + + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N14_to_p_C13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_N14_to_p_C13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // N14 --> p + C13 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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; - // 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; - 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; - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from nacrr - ln_set_rate = 38.39121240281698 + -101.17495170634825 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 101.17495170634825 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 101.17495170634825 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O14_to_p_N13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O14_to_p_N13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O14 --> p + N13 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O14_log_pf, dO14_log_pf_dT9; - 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); - // 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; - 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; - // 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; - 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; - // 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 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}; - 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; - // ReacLib set derived from lg06r - ln_set_rate = 35.3038971632548 + -59.81629660012578 * tfactors.T9i + 1.57122 * tfactors.T913i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 59.81629660012578 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 1.57122 * tfactors.T943i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O15_to_p_N14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O15_to_p_N14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O15 --> p + N14 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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; - // 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 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}; - 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; - // ReacLib set derived from im05r - ln_set_rate = 30.76303704754867 + -89.56670699689953 * tfactors.T9i - + 1.5682 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 89.56670699689953 * tfactors.T9i * tfactors.T9i + + 1.5682 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from im05r - ln_set_rate = 31.68169704754867 + -87.67370699689953 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 87.67370699689953 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 87.67370699689953 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_to_p_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O16_to_p_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O16 --> p + N15 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real N15_log_pf, dN15_log_pf_dT9; - 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; - // 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; - 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; - // 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; - 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); - // 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 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}; - 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; - // ReacLib set derived from li10r - ln_set_rate = 38.86679552635226 + -150.96226378057287 * tfactors.T9i - + 0.0459037 * tfactors.T9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 150.96226378057287 * tfactors.T9i * tfactors.T9i + + 0.0459037; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from li10r - ln_set_rate = 30.912955526352267 + -143.65591378057286 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 143.65591378057286 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 143.65591378057286 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_to_He4_C12_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O16_to_He4_C12_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O16 --> He4 + C12 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real C12_log_pf, dC12_log_pf_dT9; - 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; - // 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; - 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; - // 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; - 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); - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F17_to_p_O16_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_F17_to_p_O16_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // F17 --> p + O16 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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); - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F18_to_p_O17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_F18_to_p_O17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // F18 --> p + O17 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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); - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from il10r - ln_set_rate = 11.255394955670651 + -65.81406921275192 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.81406921275192 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 65.81406921275192 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F18_to_He4_N14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_F18_to_He4_N14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // F18 --> He4 + N14 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real He4_log_pf, dHe4_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; - // 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; - 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); - // 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; - 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; - // 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 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}; - 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; - // ReacLib set derived from il10r - ln_set_rate = 38.61662473666887 + -62.20224752987261 * tfactors.T9i + -5.6227 * tfactors.T913i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 62.20224752987261 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from il10r - ln_set_rate = 24.91396273666887 + -56.396987529872604 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 56.396987529872604 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 56.396987529872604 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F19_to_p_O18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_F19_to_p_O18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // F19 --> p + O18 - // F19 --> p + O18 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O18_log_pf, dO18_log_pf_dT9; - amrex::Real O18_log_pf, dO18_log_pf_dT9; + // interpolating O18 partition function + get_partition_function_cached(O18, tfactors.T9, pf_cache, O18_log_pf, dO18_log_pf_dT9); - // interpolating O18 partition function - get_partition_function_cached(O18, tfactors.T9, pf_cache, O18_log_pf, dO18_log_pf_dT9); + amrex::Real p_log_pf, dp_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; - // 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 F19_log_pf, dF19_log_pf_dT9; - amrex::Real F19_log_pf, dF19_log_pf_dT9; + // interpolating F19 partition function + get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); - // interpolating F19 partition function - get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); + amrex::Real net_log_pf = p_log_pf + O18_log_pf - F19_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO18_log_pf_dT9 - dF19_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + O18_log_pf - F19_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO18_log_pf_dT9 - dF19_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 il10n + ln_set_rate = 42.868088644181995 + -92.7618744782197 * tfactors.T9i + -16.7246 * tfactors.T913i + + -3.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from il10n - ln_set_rate = 42.868088644181995 + -92.7618744782197 * tfactors.T9i + -16.7246 * tfactors.T913i - + -3.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 92.7618744782197 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.7246 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 92.7618744782197 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.7246 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 30.219848644181997 + -99.4871744782197 * tfactors.T9i + 3.99059 * tfactors.T913 + + -0.593127 * tfactors.T9 + 0.0877534 * tfactors.T953; - // ReacLib set derived from il10r - ln_set_rate = 30.219848644181997 + -99.4871744782197 * tfactors.T9i + 3.99059 * tfactors.T913 - + -0.593127 * tfactors.T9 + 0.0877534 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 99.4871744782197 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 3.99059 * tfactors.T923i + + -0.593127 + (5.0/3.0) * 0.0877534 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 99.4871744782197 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 3.99059 * tfactors.T923i - + -0.593127 + (5.0/3.0) * 0.0877534 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 28.027568644181997 + -94.41868447821969 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = 28.027568644181997 + -94.41868447821969 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 94.41868447821969 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 94.41868447821969 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = -12.056811355818002 + -93.0066174782197 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = -12.056811355818002 + -93.0066174782197 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 93.0066174782197 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 93.0066174782197 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F19_to_He4_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_F19_to_He4_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // F19 --> He4 + N15 - // F19 --> He4 + N15 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real N15_log_pf, dN15_log_pf_dT9; - 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; - // 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 He4_log_pf, dHe4_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; - // 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 F19_log_pf, dF19_log_pf_dT9; - amrex::Real F19_log_pf, dF19_log_pf_dT9; + // interpolating F19 partition function + get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); - // interpolating F19 partition function - get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); + amrex::Real net_log_pf = He4_log_pf + N15_log_pf - F19_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dN15_log_pf_dT9 - dF19_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + N15_log_pf - F19_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dN15_log_pf_dT9 - dF19_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 = -4.0595772096034 + -50.77806404408662 * tfactors.T9i + 35.4292 * tfactors.T913 + + -5.5767 * tfactors.T9 + 0.441293 * tfactors.T953; - // ReacLib set derived from il10r - ln_set_rate = -4.0595772096034 + -50.77806404408662 * tfactors.T9i + 35.4292 * tfactors.T913 - + -5.5767 * tfactors.T9 + 0.441293 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 50.77806404408662 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 35.4292 * tfactors.T923i + + -5.5767 + (5.0/3.0) * 0.441293 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 50.77806404408662 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 35.4292 * tfactors.T923i - + -5.5767 + (5.0/3.0) * 0.441293 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 28.273522790396598 + -53.56282404408662 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = 28.273522790396598 + -53.56282404408662 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 53.56282404408662 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 53.56282404408662 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 15.3204027903966 + -50.75615404408662 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = 15.3204027903966 + -50.75615404408662 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 50.75615404408662 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 50.75615404408662 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 50.130922790396596 + -46.57820404408662 * tfactors.T9i + -36.2324 * tfactors.T913i + + -2.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from il10n - ln_set_rate = 50.130922790396596 + -46.57820404408662 * tfactors.T9i + -36.2324 * tfactors.T913i - + -2.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 46.57820404408662 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.2324 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 46.57820404408662 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.2324 * tfactors.T943i - + (5.0/3.0) * -2.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne18_to_p_F17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne18_to_p_F17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne18 --> p + F17 - // Ne18 --> p + F17 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // interpolating F17 partition function - get_partition_function_cached(F17, tfactors.T9, pf_cache, F17_log_pf, dF17_log_pf_dT9); + amrex::Real Ne18_log_pf, dNe18_log_pf_dT9; - amrex::Real Ne18_log_pf, dNe18_log_pf_dT9; + // interpolating Ne18 partition function + get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); - // interpolating Ne18 partition function - get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); + amrex::Real net_log_pf = p_log_pf + F17_log_pf - Ne18_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF17_log_pf_dT9 - dNe18_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + F17_log_pf - Ne18_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF17_log_pf_dT9 - dNe18_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 cb09 + ln_set_rate = 17.58370046698957 + -45.55769965436449 * tfactors.T9i + -14.2191 * tfactors.T913i + 34.0647 * tfactors.T913 + + -16.5698 * tfactors.T9 + 2.48116 * tfactors.T953 + -0.6337600000000001 * tfactors.lnT9; - // ReacLib set derived from cb09 - ln_set_rate = 17.58370046698957 + -45.55769965436449 * tfactors.T9i + -14.2191 * tfactors.T913i + 34.0647 * tfactors.T913 - + -16.5698 * tfactors.T9 + 2.48116 * tfactors.T953 + -0.6337600000000001 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 45.55769965436449 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -14.2191 * tfactors.T943i + (1.0/3.0) * 34.0647 * tfactors.T923i + + -16.5698 + (5.0/3.0) * 2.48116 * tfactors.T923 + -0.6337600000000001 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 45.55769965436449 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -14.2191 * tfactors.T943i + (1.0/3.0) * 34.0647 * tfactors.T923i - + -16.5698 + (5.0/3.0) * 2.48116 * tfactors.T923 + -0.6337600000000001 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 cb09 + ln_set_rate = 53.00858046698957 + -50.485039254364494 * tfactors.T9i + -21.3249 * tfactors.T913i + -0.230774 * tfactors.T913 + + 0.917931 * tfactors.T9 + -0.0440377 * tfactors.T953 + -5.86014 * tfactors.lnT9; - // ReacLib set derived from cb09 - ln_set_rate = 53.00858046698957 + -50.485039254364494 * tfactors.T9i + -21.3249 * tfactors.T913i + -0.230774 * tfactors.T913 - + 0.917931 * tfactors.T9 + -0.0440377 * tfactors.T953 + -5.86014 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 50.485039254364494 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.3249 * tfactors.T943i + (1.0/3.0) * -0.230774 * tfactors.T923i + + 0.917931 + (5.0/3.0) * -0.0440377 * tfactors.T923 + -5.86014 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 50.485039254364494 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.3249 * tfactors.T943i + (1.0/3.0) * -0.230774 * tfactors.T923i - + 0.917931 + (5.0/3.0) * -0.0440377 * tfactors.T923 + -5.86014 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne18_to_He4_O14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne18_to_He4_O14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne18 --> He4 + O14 - // Ne18 --> He4 + O14 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O14_log_pf, dO14_log_pf_dT9; - 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); - // 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; - 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; - // 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 Ne18_log_pf, dNe18_log_pf_dT9; - amrex::Real Ne18_log_pf, dNe18_log_pf_dT9; + // interpolating Ne18 partition function + get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); - // interpolating Ne18 partition function - get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); + amrex::Real net_log_pf = He4_log_pf + O14_log_pf - Ne18_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO14_log_pf_dT9 - dNe18_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + O14_log_pf - Ne18_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO14_log_pf_dT9 - dNe18_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 wh87n + ln_set_rate = 51.160347955038674 + -59.35823432141371 * tfactors.T9i + -39.38 * tfactors.T913i + -0.0772187 * tfactors.T913 + + -0.635361 * tfactors.T9 + 0.106236 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from wh87n - ln_set_rate = 51.160347955038674 + -59.35823432141371 * tfactors.T9i + -39.38 * tfactors.T913i + -0.0772187 * tfactors.T913 - + -0.635361 * tfactors.T9 + 0.106236 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 59.35823432141371 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.38 * tfactors.T943i + (1.0/3.0) * -0.0772187 * tfactors.T923i + + -0.635361 + (5.0/3.0) * 0.106236 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 59.35823432141371 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.38 * tfactors.T943i + (1.0/3.0) * -0.0772187 * tfactors.T923i - + -0.635361 + (5.0/3.0) * 0.106236 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 wh87r + ln_set_rate = 20.01796795503867 + -71.51723432141371 * tfactors.T9i + + 6.5 * tfactors.lnT9; - // ReacLib set derived from wh87r - ln_set_rate = 20.01796795503867 + -71.51723432141371 * tfactors.T9i - + 6.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 71.51723432141371 * tfactors.T9i * tfactors.T9i + + 6.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 71.51723432141371 * tfactors.T9i * tfactors.T9i - + 6.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 wh87r + ln_set_rate = 28.243807955038672 + -81.96823432141372 * tfactors.T9i; - // ReacLib set derived from wh87r - ln_set_rate = 28.243807955038672 + -81.96823432141372 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 81.96823432141372 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 81.96823432141372 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 wh87r + ln_set_rate = 22.56327795503867 + -71.08823432141371 * tfactors.T9i; - // ReacLib set derived from wh87r - ln_set_rate = 22.56327795503867 + -71.08823432141371 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 71.08823432141371 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 71.08823432141371 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne19_to_p_F18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne19_to_p_F18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne19 --> p + F18 - // Ne19 --> p + F18 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // interpolating F18 partition function - get_partition_function_cached(F18, tfactors.T9, pf_cache, F18_log_pf, dF18_log_pf_dT9); + amrex::Real Ne19_log_pf, dNe19_log_pf_dT9; - amrex::Real Ne19_log_pf, dNe19_log_pf_dT9; + // interpolating Ne19 partition function + get_partition_function_cached(Ne19, tfactors.T9, pf_cache, Ne19_log_pf, dNe19_log_pf_dT9); - // interpolating Ne19 partition function - get_partition_function_cached(Ne19, tfactors.T9, pf_cache, Ne19_log_pf, dNe19_log_pf_dT9); + amrex::Real net_log_pf = p_log_pf + F18_log_pf - Ne19_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF18_log_pf_dT9 - dNe19_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + F18_log_pf - Ne19_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF18_log_pf_dT9 - dNe19_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 = 18.192220240787112 + -77.27667559674641 * tfactors.T9i + 13.1683 * tfactors.T913 + + -1.92023 * tfactors.T9 + 0.16901 * tfactors.T953; - // ReacLib set derived from il10r - ln_set_rate = 18.192220240787112 + -77.27667559674641 * tfactors.T9i + 13.1683 * tfactors.T913 - + -1.92023 * tfactors.T9 + 0.16901 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 77.27667559674641 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 13.1683 * tfactors.T923i + + -1.92023 + (5.0/3.0) * 0.16901 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 77.27667559674641 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 13.1683 * tfactors.T923i - + -1.92023 + (5.0/3.0) * 0.16901 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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.39950975921289 + -74.78415559674642 * tfactors.T9i + 22.4903 * tfactors.T913 + + 0.307872 * tfactors.T9 + -0.296226 * tfactors.T953; - // ReacLib set derived from il10r - ln_set_rate = -5.39950975921289 + -74.78415559674642 * tfactors.T9i + 22.4903 * tfactors.T913 - + 0.307872 * tfactors.T9 + -0.296226 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 74.78415559674642 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 22.4903 * tfactors.T923i + + 0.307872 + (5.0/3.0) * -0.296226 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 74.78415559674642 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 22.4903 * tfactors.T923i - + 0.307872 + (5.0/3.0) * -0.296226 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 81.45789024078711 + -74.38520559674642 * tfactors.T9i + -21.4023 * tfactors.T913i + -93.766 * tfactors.T913 + + 179.258 * tfactors.T9 + -202.561 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from il10n - ln_set_rate = 81.45789024078711 + -74.38520559674642 * tfactors.T9i + -21.4023 * tfactors.T913i + -93.766 * tfactors.T913 - + 179.258 * tfactors.T9 + -202.561 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 74.38520559674642 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.4023 * tfactors.T943i + (1.0/3.0) * -93.766 * tfactors.T923i + + 179.258 + (5.0/3.0) * -202.561 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 74.38520559674642 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.4023 * tfactors.T943i + (1.0/3.0) * -93.766 * tfactors.T923i - + 179.258 + (5.0/3.0) * -202.561 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne19_to_He4_O15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne19_to_He4_O15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne19 --> He4 + O15 - // Ne19 --> He4 + O15 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real He4_log_pf, dHe4_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; - // 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 O15_log_pf, dO15_log_pf_dT9; - 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); - // interpolating O15 partition function - get_partition_function_cached(O15, tfactors.T9, pf_cache, O15_log_pf, dO15_log_pf_dT9); + amrex::Real Ne19_log_pf, dNe19_log_pf_dT9; - amrex::Real Ne19_log_pf, dNe19_log_pf_dT9; + // interpolating Ne19 partition function + get_partition_function_cached(Ne19, tfactors.T9, pf_cache, Ne19_log_pf, dNe19_log_pf_dT9); - // interpolating Ne19 partition function - get_partition_function_cached(Ne19, tfactors.T9, pf_cache, Ne19_log_pf, dNe19_log_pf_dT9); + amrex::Real net_log_pf = He4_log_pf + O15_log_pf - Ne19_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO15_log_pf_dT9 - dNe19_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + O15_log_pf - Ne19_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO15_log_pf_dT9 - dNe19_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 dc11r + ln_set_rate = -7.510242070092687 + -45.15053612970033 * tfactors.T9i + -3.24609 * tfactors.T913i + 44.4647 * tfactors.T913 + + -9.79962 * tfactors.T9 + 0.841782 * tfactors.T953; - // ReacLib set derived from dc11r - ln_set_rate = -7.510242070092687 + -45.15053612970033 * tfactors.T9i + -3.24609 * tfactors.T913i + 44.4647 * tfactors.T913 - + -9.79962 * tfactors.T9 + 0.841782 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 45.15053612970033 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.24609 * tfactors.T943i + (1.0/3.0) * 44.4647 * tfactors.T923i + + -9.79962 + (5.0/3.0) * 0.841782 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 45.15053612970033 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.24609 * tfactors.T943i + (1.0/3.0) * 44.4647 * tfactors.T923i - + -9.79962 + (5.0/3.0) * 0.841782 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 dc11r + ln_set_rate = 24.694111429907313 + -46.83053612970032 * tfactors.T9i; - // ReacLib set derived from dc11r - ln_set_rate = 24.694111429907313 + -46.83053612970032 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 46.83053612970032 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 46.83053612970032 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 dc11n + ln_set_rate = 51.03075792990731 + -40.946146129700324 * tfactors.T9i + -39.578 * tfactors.T913i + + -3.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from dc11n - ln_set_rate = 51.03075792990731 + -40.946146129700324 * tfactors.T9i + -39.578 * tfactors.T913i - + -3.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 40.946146129700324 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.578 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 40.946146129700324 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.578 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne20_to_p_F19_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne20_to_p_F19_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne20 --> p + F19 - // Ne20 --> p + F19 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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 F19_log_pf, dF19_log_pf_dT9; - amrex::Real F19_log_pf, dF19_log_pf_dT9; + // interpolating F19 partition function + get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); - // interpolating F19 partition function - get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); + amrex::Real Ne20_log_pf, dNe20_log_pf_dT9; - 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); - // 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 + F19_log_pf - Ne20_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF19_log_pf_dT9 - dNe20_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + F19_log_pf - Ne20_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF19_log_pf_dT9 - dNe20_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 = 18.711255537457795 + -156.78628300750532 * tfactors.T9i + 31.6442 * tfactors.T913i + -58.6563 * tfactors.T913 + + 67.7365 * tfactors.T9 + -22.9721 * tfactors.T953; - // ReacLib set derived from nacrr - ln_set_rate = 18.711255537457795 + -156.78628300750532 * tfactors.T9i + 31.6442 * tfactors.T913i + -58.6563 * tfactors.T913 - + 67.7365 * tfactors.T9 + -22.9721 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 156.78628300750532 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 31.6442 * tfactors.T943i + (1.0/3.0) * -58.6563 * tfactors.T923i + + 67.7365 + (5.0/3.0) * -22.9721 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 156.78628300750532 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 31.6442 * tfactors.T943i + (1.0/3.0) * -58.6563 * tfactors.T923i - + 67.7365 + (5.0/3.0) * -22.9721 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 36.72378553745779 + -150.75597300750533 * tfactors.T9i + -11.3832 * tfactors.T913i + 5.47872 * tfactors.T913 + + -1.07203 * tfactors.T9 + 0.11196 * tfactors.T953; - // ReacLib set derived from nacrr - ln_set_rate = 36.72378553745779 + -150.75597300750533 * tfactors.T9i + -11.3832 * tfactors.T913i + 5.47872 * tfactors.T913 - + -1.07203 * tfactors.T9 + 0.11196 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 150.75597300750533 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -11.3832 * tfactors.T943i + (1.0/3.0) * 5.47872 * tfactors.T923i + + -1.07203 + (5.0/3.0) * 0.11196 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 150.75597300750533 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -11.3832 * tfactors.T943i + (1.0/3.0) * 5.47872 * tfactors.T923i - + -1.07203 + (5.0/3.0) * 0.11196 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 42.62288553745779 + -149.04214300750533 * tfactors.T9i + -18.116 * tfactors.T913i + -1.4622 * tfactors.T913 + + 6.95113 * tfactors.T9 + -2.90366 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from nacrn - ln_set_rate = 42.62288553745779 + -149.04214300750533 * tfactors.T9i + -18.116 * tfactors.T913i + -1.4622 * tfactors.T913 - + 6.95113 * tfactors.T9 + -2.90366 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 149.04214300750533 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -18.116 * tfactors.T943i + (1.0/3.0) * -1.4622 * tfactors.T923i + + 6.95113 + (5.0/3.0) * -2.90366 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 149.04214300750533 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -18.116 * tfactors.T943i + (1.0/3.0) * -1.4622 * tfactors.T923i - + 6.95113 + (5.0/3.0) * -2.90366 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Ne20 --> He4 + O16 - // Ne20 --> He4 + O16 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real He4_log_pf, dHe4_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; - // 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; - 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); - // interpolating O16 partition function - get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + amrex::Real Ne20_log_pf, dNe20_log_pf_dT9; - 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); - // 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 = He4_log_pf + O16_log_pf - Ne20_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO16_log_pf_dT9 - dNe20_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + O16_log_pf - Ne20_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dO16_log_pf_dT9 - dNe20_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 co10r + ln_set_rate = 28.644822801502126 + -65.24608327101186 * tfactors.T9i; - // ReacLib set derived from co10r - ln_set_rate = 28.644822801502126 + -65.24608327101186 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.24608327101186 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 65.24608327101186 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 co10n + ln_set_rate = 48.662112801502126 + -54.887583271011856 * tfactors.T9i + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 + + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from co10n - ln_set_rate = 48.662112801502126 + -54.887583271011856 * tfactors.T9i + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 - + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 54.887583271011856 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i + + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 54.887583271011856 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i - + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 co10r + ln_set_rate = 34.267592801502126 + -67.65188327101185 * tfactors.T9i + -3.65925 * tfactors.T913 + + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953; - // ReacLib set derived from co10r - ln_set_rate = 34.267592801502126 + -67.65188327101185 * tfactors.T9i + -3.65925 * tfactors.T913 - + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 67.65188327101185 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i + + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 67.65188327101185 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i - + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Mg22_to_He4_Ne18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Mg22_to_He4_Ne18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Mg22 --> He4 + Ne18 - // Mg22 --> He4 + Ne18 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real Mg22_log_pf, dMg22_log_pf_dT9; - amrex::Real Mg22_log_pf, dMg22_log_pf_dT9; + // interpolating Mg22 partition function + get_partition_function_cached(Mg22, tfactors.T9, pf_cache, Mg22_log_pf, dMg22_log_pf_dT9); - // interpolating Mg22 partition function - get_partition_function_cached(Mg22, tfactors.T9, pf_cache, Mg22_log_pf, dMg22_log_pf_dT9); + amrex::Real He4_log_pf, dHe4_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; - // 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 Ne18_log_pf, dNe18_log_pf_dT9; - amrex::Real Ne18_log_pf, dNe18_log_pf_dT9; + // interpolating Ne18 partition function + get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); - // interpolating Ne18 partition function - get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); + amrex::Real net_log_pf = He4_log_pf + Ne18_log_pf - Mg22_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNe18_log_pf_dT9 - dMg22_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + Ne18_log_pf - Mg22_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNe18_log_pf_dT9 - dMg22_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 ths8r + ln_set_rate = 57.680013188545345 + -94.4898569232192 * tfactors.T9i + -46.4859 * tfactors.T913i + 0.956741 * tfactors.T913 + + -0.914402 * tfactors.T9 + 0.0722478 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from ths8r - ln_set_rate = 57.680013188545345 + -94.4898569232192 * tfactors.T9i + -46.4859 * tfactors.T913i + 0.956741 * tfactors.T913 - + -0.914402 * tfactors.T9 + 0.0722478 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 94.4898569232192 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -46.4859 * tfactors.T943i + (1.0/3.0) * 0.956741 * tfactors.T923i + + -0.914402 + (5.0/3.0) * 0.0722478 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 94.4898569232192 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -46.4859 * tfactors.T943i + (1.0/3.0) * 0.956741 * tfactors.T923i - + -0.914402 + (5.0/3.0) * 0.0722478 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Mg24 --> He4 + Ne20 - // Mg24 --> He4 + Ne20 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real He4_log_pf, dHe4_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; - // 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 Mg24_log_pf, dMg24_log_pf_dT9; - amrex::Real Mg24_log_pf, dMg24_log_pf_dT9; + // interpolating Mg24 partition function + get_partition_function_cached(Mg24, tfactors.T9, pf_cache, Mg24_log_pf, dMg24_log_pf_dT9); - // interpolating Mg24 partition function - get_partition_function_cached(Mg24, tfactors.T9, pf_cache, Mg24_log_pf, dMg24_log_pf_dT9); + amrex::Real Ne20_log_pf, dNe20_log_pf_dT9; - 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); - // 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 = He4_log_pf + Ne20_log_pf - Mg24_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNe20_log_pf_dT9 - dMg24_log_pf_dT9; - amrex::Real net_log_pf = He4_log_pf + Ne20_log_pf - Mg24_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNe20_log_pf_dT9 - dMg24_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 = 16.022538839949377 + -120.89510873006793 * tfactors.T9i + 16.9229 * tfactors.T913 + + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953; - // ReacLib set derived from il10r - ln_set_rate = 16.022538839949377 + -120.89510873006793 * tfactors.T9i + 16.9229 * tfactors.T913 - + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 120.89510873006793 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i + + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 120.89510873006793 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i - + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 26.803878839949377 + -117.33446873006793 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = 26.803878839949377 + -117.33446873006793 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 117.33446873006793 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 117.33446873006793 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = -13.884691160050625 + -110.62025873006793 * tfactors.T9i; - // ReacLib set derived from il10r - ln_set_rate = -13.884691160050625 + -110.62025873006793 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 110.62025873006793 * tfactors.T9i * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 110.62025873006793 * tfactors.T9i * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 49.32660883994937 + -108.11420873006793 * tfactors.T9i + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 + + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + 0.833333 * tfactors.lnT9; - // ReacLib set derived from il10n - ln_set_rate = 49.32660883994937 + -108.11420873006793 * tfactors.T9i + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 - + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + 0.833333 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 108.11420873006793 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i + + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + 0.833333 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 108.11420873006793 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i - + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + 0.833333 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_C12_to_3He4_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // C12 --> 3 He4 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real C12_log_pf, dC12_log_pf_dT9; - 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; - // 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; - 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; - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_C12_He4_to_p_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_C12_to_p_N15_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // C12 + He4 --> p + N15 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real N15_log_pf, dN15_log_pf_dT9; - 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; - // 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; - 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; - // 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; - 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; - // 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; - 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; - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from nacrr - ln_set_rate = 20.556646229234243 + -65.02815691264642 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 65.02815691264642 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N14_He4_to_p_O17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_N14_to_p_O17_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // N14 + He4 --> p + O17 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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; - // 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; - 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); - // 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; - 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; - // 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 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}; - 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; - // ReacLib set derived from il10r - ln_set_rate = -7.592359780998223 + -14.584520682879308 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 14.584520682879308 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from il10r - ln_set_rate = 5.148870219001777 + -15.945895682879309 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 15.945895682879309 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N15_He4_to_p_O18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_N15_to_p_O18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // N15 + He4 --> p + O18 - // N15 + He4 --> p + O18 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O18_log_pf, dO18_log_pf_dT9; - amrex::Real O18_log_pf, dO18_log_pf_dT9; + // interpolating O18 partition function + get_partition_function_cached(O18, tfactors.T9, pf_cache, O18_log_pf, dO18_log_pf_dT9); - // interpolating O18 partition function - get_partition_function_cached(O18, tfactors.T9, pf_cache, O18_log_pf, dO18_log_pf_dT9); + amrex::Real p_log_pf, dp_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; - // 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; - 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; - // 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 N15_log_pf, dN15_log_pf_dT9; - 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; - // 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 net_log_pf = p_log_pf + O18_log_pf - He4_log_pf - N15_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO18_log_pf_dT9 - dHe4_log_pf_dT9 - dN15_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + O18_log_pf - He4_log_pf - N15_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dO18_log_pf_dT9 - dHe4_log_pf_dT9 - dN15_log_pf_dT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - 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 = -29.6926341462146 + -46.42955443414268 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // ReacLib set derived from il10r - ln_set_rate = -29.6926341462146 + -46.42955443414268 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 46.42955443414268 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 46.42955443414268 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 25.178865853785396 + -46.183670434142684 * tfactors.T9i + -16.6979 * tfactors.T913i + + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // ReacLib set derived from il10n - ln_set_rate = 25.178865853785396 + -46.183670434142684 * tfactors.T9i + -16.6979 * tfactors.T913i - + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 46.183670434142684 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.6979 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 46.183670434142684 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -16.6979 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 7.155285853785398 + -51.50702043414268 * tfactors.T9i + 11.6568 * tfactors.T913 + + -2.16303 * tfactors.T9 + 0.209965 * tfactors.T953 + -1.5 * tfactors.lnT9; - // ReacLib set derived from il10r - ln_set_rate = 7.155285853785398 + -51.50702043414268 * tfactors.T9i + 11.6568 * tfactors.T913 - + -2.16303 * tfactors.T9 + 0.209965 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 51.50702043414268 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.6568 * tfactors.T923i + + -2.16303 + (5.0/3.0) * 0.209965 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 51.50702043414268 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.6568 * tfactors.T923i - + -2.16303 + (5.0/3.0) * 0.209965 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 8.4842658537854 + -47.84667043414268 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // ReacLib set derived from il10r - ln_set_rate = 8.4842658537854 + -47.84667043414268 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 47.84667043414268 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 47.84667043414268 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O15_He4_to_p_F18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O15_to_p_F18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O15 + He4 --> p + F18 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O15_log_pf, dO15_log_pf_dT9; - 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); - // 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; - 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; - // 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; - 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); - // 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; - 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; - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_p_to_He4_N13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O16_to_He4_N13_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // O16 + p --> He4 + N13 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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; - // 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; - 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; - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_He4_to_p_F19_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O16_to_p_F19_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // O16 + He4 --> p + F19 - // O16 + He4 --> p + F19 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real O16_log_pf, dO16_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); - // interpolating O16 partition function - get_partition_function_cached(O16, tfactors.T9, pf_cache, O16_log_pf, dO16_log_pf_dT9); + amrex::Real p_log_pf, dp_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; - // 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 F19_log_pf, dF19_log_pf_dT9; - amrex::Real F19_log_pf, dF19_log_pf_dT9; + // interpolating F19 partition function + get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); - // interpolating F19 partition function - get_partition_function_cached(F19, tfactors.T9, pf_cache, F19_log_pf, dF19_log_pf_dT9); + amrex::Real He4_log_pf, dHe4_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; - // 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 + F19_log_pf - He4_log_pf - O16_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF19_log_pf_dT9 - dHe4_log_pf_dT9 - dO16_log_pf_dT9; - amrex::Real net_log_pf = p_log_pf + F19_log_pf - He4_log_pf - O16_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dF19_log_pf_dT9 - dHe4_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}; - 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 = -53.121227264044336 + -94.28220973651266 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // ReacLib set derived from nacr - ln_set_rate = -53.121227264044336 + -94.28220973651266 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 94.28220973651266 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 94.28220973651266 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 nacr + ln_set_rate = 25.874672735955667 + -94.15455973651265 * tfactors.T9i + -18.116 * tfactors.T913i + + 1.86674 * tfactors.T9 + -7.5666 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // ReacLib set derived from nacr - ln_set_rate = 25.874672735955667 + -94.15455973651265 * tfactors.T9i + -18.116 * tfactors.T913i - + 1.86674 * tfactors.T9 + -7.5666 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 94.15455973651265 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -18.116 * tfactors.T943i + + 1.86674 + (5.0/3.0) * -7.5666 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 94.15455973651265 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -18.116 * tfactors.T943i - + 1.86674 + (5.0/3.0) * -7.5666 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 13.941672735955667 + -97.44055973651265 * tfactors.T9i + + -0.21103 * tfactors.T9 + 2.87702 * tfactors.lnT9; - // ReacLib set derived from nacrr - ln_set_rate = 13.941672735955667 + -97.44055973651265 * tfactors.T9i - + -0.21103 * tfactors.T9 + 2.87702 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 97.44055973651265 * tfactors.T9i * tfactors.T9i + + -0.21103 + 2.87702 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 97.44055973651265 * tfactors.T9i * tfactors.T9i - + -0.21103 + 2.87702 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 nacr + ln_set_rate = 14.778572735955667 + -97.90640973651266 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // ReacLib set derived from nacr - ln_set_rate = 14.778572735955667 + -97.90640973651266 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 97.90640973651266 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 97.90640973651266 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 nacr + ln_set_rate = 7.822072735955667 + -96.62283973651265 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // ReacLib set derived from nacr - ln_set_rate = 7.822072735955667 + -96.62283973651265 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 96.62283973651265 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 96.62283973651265 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F17_p_to_He4_O14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F17_to_He4_O14_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // F17 + p --> He4 + O14 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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; - // 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; - 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); - // 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 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}; - 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; - // ReacLib set derived from Ha96r - ln_set_rate = 11.415567488049104 + -25.85518506704921 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 25.85518506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from Ha96r - ln_set_rate = 17.938467488049106 + -39.83288506704921 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 39.83288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from Ha96r - ln_set_rate = 15.595367488049106 + -36.34288506704921 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 36.34288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from Ha96r - ln_set_rate = 10.405067488049104 + -27.43288506704921 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 27.43288506704921 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - // ReacLib set derived from Ha96r - ln_set_rate = -106.80433251195089 + -14.285921067049209 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += net_log_pf + log_scor; - ln_set_rate += net_log_pf + log_scor; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 14.285921067049209 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F17_He4_to_p_Ne20_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_F17_to_p_Ne20_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, 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 - // F17 + He4 --> p + Ne20 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_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; - // 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; - 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); - // 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; - 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; - // 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; - 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); - // 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 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}; - 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; - // 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 + log_scor; - ln_set_rate += net_log_pf + log_scor; + 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; - 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 + dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Na21_p_to_He4_Ne18_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_Ne20_to_C12_C12_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // Na21 + p --> He4 + Ne18 - // Ne20 + He4 --> C12 + C12 + rate = 0.0; + drate_dT = 0.0; - rate = 0.0; - drate_dT = 0.0; + // Evaluate partition function terms - // Evaluate partition function terms + amrex::Real p_log_pf, dp_log_pf_dT9; - amrex::Real C12_log_pf, dC12_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; - // 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 Na21_log_pf, dNa21_log_pf_dT9; - amrex::Real He4_log_pf, dHe4_log_pf_dT9; + // interpolating Na21 partition function + get_partition_function_cached(Na21, tfactors.T9, pf_cache, Na21_log_pf, dNa21_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 He4_log_pf, dHe4_log_pf_dT9; - amrex::Real Ne20_log_pf, dNe20_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; - // interpolating Ne20 partition function - get_partition_function_cached(Ne20, tfactors.T9, pf_cache, Ne20_log_pf, dNe20_log_pf_dT9); + amrex::Real Ne18_log_pf, dNe18_log_pf_dT9; - amrex::Real net_log_pf = C12_log_pf + C12_log_pf - He4_log_pf - Ne20_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dC12_log_pf_dT9 + dC12_log_pf_dT9 - dHe4_log_pf_dT9 - dNe20_log_pf_dT9; + // interpolating Ne18 partition function + get_partition_function_cached(Ne18, tfactors.T9, pf_cache, Ne18_log_pf, dNe18_log_pf_dT9); - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + amrex::Real net_log_pf = He4_log_pf + Ne18_log_pf - p_log_pf - Na21_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNe18_log_pf_dT9 - dp_log_pf_dT9 - dNa21_log_pf_dT9; - // ReacLib set derived from cf88r - ln_set_rate = 61.474151468919175 + -53.57824966896331 * tfactors.T9i + -84.165 * tfactors.T913i + -1.56627 * tfactors.T913 - + -0.0736084 * tfactors.T9 + -0.072797 * tfactors.T953 + -0.666667 * tfactors.lnT9; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - ln_set_rate += net_log_pf + log_scor; + // ReacLib set derived from mo14r + ln_set_rate = -23.82911395968675 + -36.38615638318757 * tfactors.T9i + 8.5632e-08 * tfactors.T913i + 24.8579 * tfactors.T913 + + 0.0823845 * tfactors.T9 + -0.365374 * tfactors.T953 + -2.21415e-06 * tfactors.lnT9; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 53.57824966896331 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.56627 * tfactors.T923i - + -0.0736084 + (5.0/3.0) * -0.072797 * tfactors.T923 + -0.666667 * tfactors.T9i; + ln_set_rate += net_log_pf + log_scor; - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 36.38615638318757 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.5632e-08 * tfactors.T943i + (1.0/3.0) * 24.8579 * tfactors.T923i + + 0.0823845 + (5.0/3.0) * -0.365374 * tfactors.T923 + -2.21415e-06 * 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 (std::is_same_v) { - drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; - } + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } -} + // 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_DEVICE AMREX_INLINE -void rate_He4_Mg24_to_C12_O16_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { + // ReacLib set derived from mo14r + ln_set_rate = -22.686913959686752 + -40.87721638318757 * tfactors.T9i + 4.73034e-07 * tfactors.T913i + 36.29 * tfactors.T913 + + -6.56565 * tfactors.T9 + -2.96287e-06 * tfactors.T953 + -9.00373e-07 * tfactors.lnT9; - // Mg24 + He4 --> C12 + O16 + ln_set_rate += net_log_pf + log_scor; - rate = 0.0; - drate_dT = 0.0; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 40.87721638318757 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 4.73034e-07 * tfactors.T943i + (1.0/3.0) * 36.29 * tfactors.T923i + + -6.56565 + (5.0/3.0) * -2.96287e-06 * tfactors.T923 + -9.00373e-07 * tfactors.T9i; - // Evaluate partition function terms + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - amrex::Real C12_log_pf, dC12_log_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; + } - // 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; + // ReacLib set derived from mo14r + ln_set_rate = -37.64591395968675 + -34.48551638318757 * tfactors.T9i + 7.09521e-06 * tfactors.T913i + 34.1789 * tfactors.T913 + + -1.72974 * tfactors.T9 + -0.0395081 * tfactors.T953 + -7.82759e-07 * tfactors.lnT9; - amrex::Real He4_log_pf, dHe4_log_pf_dT9; + ln_set_rate += net_log_pf + log_scor; - // 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; + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 34.48551638318757 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 7.09521e-06 * tfactors.T943i + (1.0/3.0) * 34.1789 * tfactors.T923i + + -1.72974 + (5.0/3.0) * -0.0395081 * tfactors.T923 + -7.82759e-07 * tfactors.T9i; - amrex::Real Mg24_log_pf, dMg24_log_pf_dT9; + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - // interpolating Mg24 partition function - get_partition_function_cached(Mg24, tfactors.T9, pf_cache, Mg24_log_pf, dMg24_log_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; + } - 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); + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Mg22_to_p_Na21_derived(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { - amrex::Real net_log_pf = C12_log_pf + O16_log_pf - He4_log_pf - Mg24_log_pf; - [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dC12_log_pf_dT9 + dO16_log_pf_dT9 - dHe4_log_pf_dT9 - dMg24_log_pf_dT9; + // Mg22 --> p + Na21 - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + rate = 0.0; + drate_dT = 0.0; - // ReacLib set derived from cf88r - ln_set_rate = 49.57295819231048 + -78.2098115311048 * tfactors.T9i + -133.413 * tfactors.T913i + 50.1572 * tfactors.T913 - + -3.15987 * tfactors.T9 + 0.0178251 * tfactors.T953 + -23.7027 * tfactors.lnT9; + // Evaluate partition function terms - ln_set_rate += net_log_pf + log_scor; + amrex::Real Mg22_log_pf, dMg22_log_pf_dT9; - if constexpr (std::is_same_v) { - dln_set_rate_dT9 = 78.2098115311048 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -133.413 * tfactors.T943i + (1.0/3.0) * 50.1572 * tfactors.T923i - + -3.15987 + (5.0/3.0) * 0.0178251 * tfactors.T923 + -23.7027 * tfactors.T9i; + // interpolating Mg22 partition function + get_partition_function_cached(Mg22, tfactors.T9, pf_cache, Mg22_log_pf, dMg22_log_pf_dT9); - dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; - } + amrex::Real p_log_pf, dp_log_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; - } + // 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 Na21_log_pf, dNa21_log_pf_dT9; + // interpolating Na21 partition function + get_partition_function_cached(Na21, tfactors.T9, pf_cache, Na21_log_pf, dNa21_log_pf_dT9); -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void -fill_derived_rates(const tf_t& tfactors, T& rate_eval) -{ + amrex::Real net_log_pf = p_log_pf + Na21_log_pf - Mg22_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dNa21_log_pf_dT9 - dMg22_log_pf_dT9; - amrex::ignore_unused(tfactors); - amrex::ignore_unused(rate_eval); + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - [[maybe_unused]] amrex::Real rate; - [[maybe_unused]] amrex::Real drate_dT; + // ReacLib set derived from il10r + ln_set_rate = 31.321617148232104 + -71.35070054003162 * tfactors.T9i + 4.75873 * tfactors.T913 + + -0.708067 * tfactors.T9 + 0.0523665 * tfactors.T953; - part_fun::pf_cache_t pf_cache{}; + ln_set_rate += net_log_pf + log_scor; - pf_cache.index_temp_array_1 = interp_net::find_index(tfactors.T9, part_fun::temp_array_1); + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 71.35070054003162 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 4.75873 * tfactors.T923i + + -0.708067 + (5.0/3.0) * 0.0523665 * tfactors.T923; - { - // N13_to_p_C12_derived + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_N13_to_p_C12_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_N13_to_p_C12_derived) = rate; + // 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) { - rate_eval.dscreened_rates_dT(k_N13_to_p_C12_derived) = drate_dT; + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; } - } - { - // N14_to_p_C13_derived + // ReacLib set derived from il10r + ln_set_rate = 30.1207571482321 + -66.25985054003162 * tfactors.T9i; + + ln_set_rate += net_log_pf + log_scor; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_N14_to_p_C13_derived(tfactors, log_scor, dlog_scor_dT, 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; - } - } + dln_set_rate_dT9 = 66.25985054003162 * tfactors.T9i * tfactors.T9i; - { - // O14_to_p_N13_derived + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O14_to_p_N13_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_O14_to_p_N13_derived) = rate; + // 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) { - rate_eval.dscreened_rates_dT(k_O14_to_p_N13_derived) = drate_dT; + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; } - } - { - // O15_to_p_N14_derived + // ReacLib set derived from il10n + ln_set_rate = 43.697327148232105 + -63.87244054003162 * tfactors.T9i + -20.7329 * tfactors.T913i + + -1.5 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O15_to_p_N14_derived(tfactors, log_scor, dlog_scor_dT, 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; - } - } + dln_set_rate_dT9 = 63.87244054003162 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -20.7329 * tfactors.T943i + + (5.0/3.0) * -1.5 * tfactors.T923 + 0.833333 * tfactors.T9i; - { - // O16_to_p_N15_derived + dln_set_rate_dT9 += net_dlog_pf_dT9 + dlog_scor_dT * 1.0e9_rt; + } - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O16_to_p_N15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_O16_to_p_N15_derived) = rate; + // 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) { - rate_eval.dscreened_rates_dT(k_O16_to_p_N15_derived) = drate_dT; + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; } + } + + template + AMREX_GPU_DEVICE AMREX_INLINE + void + fill_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] T& rate_eval) { - // O16_to_He4_C12_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O16_to_He4_C12_derived(tfactors, log_scor, dlog_scor_dT, 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; + [[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); + + { + // N13_to_p_C12_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_N13_to_p_C12_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // F17_to_p_O16_derived + { + // N14_to_p_C13_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_F17_to_p_O16_derived(tfactors, log_scor, dlog_scor_dT, 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; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_N14_to_p_C13_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // F18_to_p_O17_derived + { + // O14_to_p_N13_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_F18_to_p_O17_derived(tfactors, log_scor, dlog_scor_dT, 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; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O14_to_p_N13_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // F18_to_He4_N14_derived + { + // O15_to_p_N14_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_F18_to_He4_N14_derived(tfactors, log_scor, dlog_scor_dT, 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; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O15_to_p_N14_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // F19_to_p_O18_derived + { + // O16_to_p_N15_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_F19_to_p_O18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_F19_to_p_O18_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F19_to_p_O18_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O16_to_p_N15_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // F19_to_He4_N15_derived + { + // O16_to_He4_C12_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_F19_to_He4_N15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_F19_to_He4_N15_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_F19_to_He4_N15_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O16_to_He4_C12_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // Ne18_to_p_F17_derived + { + // F17_to_p_O16_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne18_to_p_F17_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne18_to_p_F17_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne18_to_p_F17_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_F17_to_p_O16_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // Ne18_to_He4_O14_derived + { + // F18_to_p_O17_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne18_to_He4_O14_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne18_to_He4_O14_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne18_to_He4_O14_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_F18_to_p_O17_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // Ne19_to_p_F18_derived + { + // F18_to_He4_N14_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne19_to_p_F18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne19_to_p_F18_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne19_to_p_F18_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_F18_to_He4_N14_derived(tfactors, log_scor, dlog_scor_dT, 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; + } } - } - { - // Ne19_to_He4_O15_derived + { + // F19_to_p_O18_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne19_to_He4_O15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne19_to_He4_O15_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne19_to_He4_O15_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_F19_to_p_O18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F19_to_p_O18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F19_to_p_O18_derived) = drate_dT; + } } - } - { - // Ne20_to_p_F19_derived + { + // F19_to_He4_N15_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne20_to_p_F19_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne20_to_p_F19_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne20_to_p_F19_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_F19_to_He4_N15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F19_to_He4_N15_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F19_to_He4_N15_derived) = drate_dT; + } } - } - { - // Ne20_to_He4_O16_derived + { + // Ne18_to_p_F17_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Ne20_to_He4_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ne20_to_He4_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ne20_to_He4_O16_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne18_to_p_F17_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne18_to_p_F17_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_to_p_F17_derived) = drate_dT; + } } - } - { - // Mg22_to_He4_Ne18_derived + { + // Ne18_to_He4_O14_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Mg22_to_He4_Ne18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Mg22_to_He4_Ne18_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Mg22_to_He4_Ne18_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne18_to_He4_O14_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne18_to_He4_O14_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_to_He4_O14_derived) = drate_dT; + } } - } - { - // Mg24_to_He4_Ne20_derived + { + // Ne19_to_p_F18_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_Mg24_to_He4_Ne20_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Mg24_to_He4_Ne20_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Mg24_to_He4_Ne20_derived) = drate_dT; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne19_to_p_F18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne19_to_p_F18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne19_to_p_F18_derived) = drate_dT; + } } - } - { - // C12_to_He4_He4_He4_derived + { + // Ne19_to_He4_O15_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_C12_to_He4_He4_He4_derived(tfactors, log_scor, dlog_scor_dT, 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; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne19_to_He4_O15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne19_to_He4_O15_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne19_to_He4_O15_derived) = drate_dT; + } } - } - { - // He4_C12_to_p_N15_derived + { + // Ne20_to_p_F19_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_C12); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_C12); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne20_to_p_F19_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne20_to_p_F19_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_to_p_F19_derived) = drate_dT; + } } -#endif - rate_He4_C12_to_p_N15_derived(tfactors, log_scor, dlog_scor_dT, 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; + + { + // Ne20_to_He4_O16_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ne20_to_He4_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ne20_to_He4_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_to_He4_O16_derived) = drate_dT; + } } - } - { - // He4_N14_to_p_O17_derived + { + // Mg22_to_He4_Ne18_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_N14); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N14); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Mg22_to_He4_Ne18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Mg22_to_He4_Ne18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Mg22_to_He4_Ne18_derived) = drate_dT; + } } -#endif - rate_He4_N14_to_p_O17_derived(tfactors, log_scor, dlog_scor_dT, 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; + + { + // Mg24_to_He4_Ne20_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Mg24_to_He4_Ne20_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Mg24_to_He4_Ne20_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Mg24_to_He4_Ne20_derived) = drate_dT; + } } - } - { - // He4_N15_to_p_O18_derived + { + // C12_to_3He4_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_N15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N15); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_C12_to_3He4_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_C12_to_3He4_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_to_3He4_derived) = drate_dT; + } } + + { + // C12_He4_to_p_N15_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_C12); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_C12); + } #endif - rate_He4_N15_to_p_O18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_N15_to_p_O18_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_N15_to_p_O18_derived) = drate_dT; + rate_C12_He4_to_p_N15_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_C12_He4_to_p_N15_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_He4_to_p_N15_derived) = drate_dT; + } } - } - { - // He4_O15_to_p_F18_derived + { + // N14_He4_to_p_O17_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O15); - } + log_scor = rate_eval.log_screen(k_He4_N14); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N14); + } #endif - rate_He4_O15_to_p_F18_derived(tfactors, log_scor, dlog_scor_dT, 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_N14_He4_to_p_O17_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_N14_He4_to_p_O17_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N14_He4_to_p_O17_derived) = drate_dT; + } } - } - { - // p_O16_to_He4_N13_derived + { + // N15_He4_to_p_O18_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O16); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O16); - } + log_scor = rate_eval.log_screen(k_He4_N15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N15); + } #endif - rate_p_O16_to_He4_N13_derived(tfactors, log_scor, dlog_scor_dT, 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_N15_He4_to_p_O18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_N15_He4_to_p_O18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N15_He4_to_p_O18_derived) = drate_dT; + } } - } - { - // He4_O16_to_p_F19_derived + { + // O15_He4_to_p_F18_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O16); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O16); - } + log_scor = rate_eval.log_screen(k_He4_O15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O15); + } #endif - rate_He4_O16_to_p_F19_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_O16_to_p_F19_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_O16_to_p_F19_derived) = drate_dT; + rate_O15_He4_to_p_F18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O15_He4_to_p_F18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O15_He4_to_p_F18_derived) = drate_dT; + } } - } - { - // p_F17_to_He4_O14_derived + { + // O16_p_to_He4_N13_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F17); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F17); - } + log_scor = rate_eval.log_screen(k_p_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O16); + } #endif - rate_p_F17_to_He4_O14_derived(tfactors, log_scor, dlog_scor_dT, 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_O16_p_to_He4_N13_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O16_p_to_He4_N13_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_p_to_He4_N13_derived) = drate_dT; + } } - } - { - // He4_F17_to_p_Ne20_derived + { + // O16_He4_to_p_F19_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_F17); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_F17); - } + log_scor = rate_eval.log_screen(k_He4_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O16); + } #endif - rate_He4_F17_to_p_Ne20_derived(tfactors, log_scor, dlog_scor_dT, 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; + rate_O16_He4_to_p_F19_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_O16_He4_to_p_F19_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_He4_to_p_F19_derived) = drate_dT; + } } - } - { - // He4_Ne20_to_C12_C12_derived + { + // F17_p_to_He4_O14_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_Ne20); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne20); - } + log_scor = rate_eval.log_screen(k_p_F17); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F17); + } #endif - rate_He4_Ne20_to_C12_C12_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Ne20_to_C12_C12_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_C12_C12_derived) = drate_dT; + rate_F17_p_to_He4_O14_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F17_p_to_He4_O14_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_p_to_He4_O14_derived) = drate_dT; + } } - } - { - // He4_Mg24_to_C12_O16_derived + { + // F17_He4_to_p_Ne20_derived - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_Mg24); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mg24); + log_scor = rate_eval.log_screen(k_He4_F17); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_F17); + } +#endif + rate_F17_He4_to_p_Ne20_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_F17_He4_to_p_Ne20_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_He4_to_p_Ne20_derived) = drate_dT; + } } + + { + // Na21_p_to_He4_Ne18_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_Na21); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Na21); + } #endif - rate_He4_Mg24_to_C12_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Mg24_to_C12_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_C12_O16_derived) = drate_dT; + rate_Na21_p_to_He4_Ne18_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Na21_p_to_He4_Ne18_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Na21_p_to_He4_Ne18_derived) = drate_dT; + } } - } + { + // Mg22_to_p_Na21_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Mg22_to_p_Na21_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Mg22_to_p_Na21_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Mg22_to_p_Na21_derived) = drate_dT; + } + } + + + } } #endif diff --git a/networks/CNO_extras/modified_rates.H b/networks/CNO_extras/modified_rates.H index 37deb2947..a18c54c83 100644 --- a/networks/CNO_extras/modified_rates.H +++ b/networks/CNO_extras/modified_rates.H @@ -12,11 +12,64 @@ namespace modified_rates { + using namespace Rates; + + using namespace reaclib_rates; using namespace temp_tabular; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne19_3p_to_Mg22_beta_pos_modified(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Ne19 + 3 p --> Mg22 (calls the underlying rate) + // represents the sequence: Ne19(p,γ)Na20(p,γ)Mg21(β+)Na21(p,γ)Mg22 + + rate_Ne19_p_to_Na20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + } + + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne20_p_p_to_Mg22_modified(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Ne20 + p + p --> Mg22 (calls the underlying rate) + // represents the sequence: Ne20(p,γ)Na21(p,γ)Mg22 + + rate_Ne20_p_to_Na21_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + } + + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_p_p_p_to_He3_beta_pos_modified(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // 3 p --> He3 (calls the underlying rate) + // represents the sequence: p(p,e⁺ν)d(p,γ)He3 + + rate_p_p_to_d_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + } + + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_p_p_p_to_He3_electron_capture_modified(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // 3 p --> He3 (calls the underlying rate) + // represents the sequence: p(pe⁻,ν)d(p,γ)He3 + + rate_p_p_to_d_electron_capture_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + } + + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_He3_He4_p_to_He4_He4_beta_pos_modified(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // He3 + He4 + p --> He4 + He4 (calls the underlying rate) + // represents the sequence: He4(He3,γ)Be7(e⁻,ν)Li7(p,α)He4 + + rate_He3_He4_to_Be7_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + } + template - AMREX_GPU_HOST_DEVICE AMREX_INLINE + AMREX_GPU_DEVICE AMREX_INLINE void fill_rates([[maybe_unused]] const tf_t& tfactors, [[maybe_unused]] T& rate_eval) @@ -25,6 +78,96 @@ namespace modified_rates { [[maybe_unused]] amrex::Real rate; [[maybe_unused]] amrex::Real drate_dT; + { + // Ne19_3p_to_Mg22_beta_pos_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_Ne19); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne19); + } +#endif + rate_Ne19_3p_to_Mg22_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne19_3p_to_Mg22_beta_pos_modified) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne19_3p_to_Mg22_beta_pos_modified) = drate_dT; + } + } + + { + // Ne20_p_p_to_Mg22_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_Ne20); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne20); + } +#endif + rate_Ne20_p_p_to_Mg22_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne20_p_p_to_Mg22_modified) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_p_p_to_Mg22_modified) = drate_dT; + } + } + + { + // p_p_p_to_He3_beta_pos_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_p); + } +#endif + rate_p_p_p_to_He3_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_p_to_He3_beta_pos_modified) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_p_to_He3_beta_pos_modified) = drate_dT; + } + } + + { + // p_p_p_to_He3_electron_capture_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_p); + } +#endif + rate_p_p_p_to_He3_electron_capture_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_p_to_He3_electron_capture_modified) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_p_to_He3_electron_capture_modified) = drate_dT; + } + } + + { + // He3_He4_p_to_He4_He4_beta_pos_modified + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He3_He4); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He3_He4); + } +#endif + rate_He3_He4_p_to_He4_He4_beta_pos_modified(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_He4_p_to_He4_He4_beta_pos_modified) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He3_He4_p_to_He4_He4_beta_pos_modified) = drate_dT; + } + } + } } diff --git a/networks/CNO_extras/partition_functions.H b/networks/CNO_extras/partition_functions.H index f2d9cfbd3..7db274429 100644 --- a/networks/CNO_extras/partition_functions.H +++ b/networks/CNO_extras/partition_functions.H @@ -305,6 +305,30 @@ namespace part_fun { constexpr amrex::Real Ne20_pf_threshold_T9 = 1.0; + // Na21 + + // this is log(partition function) + + inline AMREX_GPU_DEVICE amrex::Array1D Na21_pf_array = { + 0.0, 0.0, 0.0, 3.999991999914312e-06, 9.899509982348023e-05, + 0.0006767709388771284, 0.0024410182892125013, 0.006096379259495127, 0.012091601053391313, 0.02055822411393352, + 0.031367844548991185, 0.10890821512347947, 0.19780358923836597, 0.2791911261787138, 0.34935391045177344, + 0.4096344045001922, 0.46235507851299057, 0.5096208983756856, 0.553076740604301, 0.6330866183819579, + 0.7085465000590935, 0.7825193104450235, 0.8564766065167109, 0.9311359936745833, 1.085189268335969, + 1.2412685890696329, 1.4085449700547104, 1.589235205116581, 1.7850704810772584, 2.0001277349601105, + 2.234306252240751, 2.4932054526026954, 2.766319109226186, 3.054001181677967, 3.8308129500026027, + 4.653960350157523, 5.484796933490655, 6.320768294250582, 7.154615356913663, 7.975908360165538, + 8.799360083179907, 9.615805480084347, 10.431170293368542, 11.246352355728682, 12.061046873479915, + 12.871334622600584, 13.68426227135432, 14.498607402670718, 15.308414654142423, 16.11809565095832, + 16.933460464242515, 17.7473361906886, 18.560442686327523, 19.37233861966381, 20.1854115407925, + 21.00089757354469, 21.81182778976102, 22.626864787930003, 23.43796058076729, 24.25549148101497, + 25.068369117515694, 25.88232113616094, 26.69707544881567, 27.513363072460315, 29.14614834889141, + 30.7794744765002, 32.41851285871059, 34.055890139833934, 35.69879731170744, 37.34213677581722, + 38.99428580634437, 43.132930627463054, + }; + + constexpr amrex::Real Na21_pf_threshold_T9 = 0.2; + // Mg22 // this is log(partition function) @@ -498,6 +522,12 @@ void get_partition_function(const int inuc, } break; + case Na21: + if (T9 > part_fun::Na21_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::Na21_pf_array, logpf, dlogpf_dT9); + } + break; + case Mg22: if (T9 > part_fun::Mg22_pf_threshold_T9) { part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::Mg22_pf_array, logpf, dlogpf_dT9); @@ -580,9 +610,9 @@ constexpr amrex::Real get_spin_state() { return 1.0_rt; } else if constexpr ( - spec == H1 || spec == C13 || spec == N13 || - spec == N15 || spec == O15 || spec == F19 || - spec == Ne19 + spec == H1 || spec == He3 || spec == C13 || + spec == N13 || spec == N15 || spec == O15 || + spec == F19 || spec == Ne19 ) { return 2.0_rt; @@ -593,6 +623,12 @@ constexpr amrex::Real get_spin_state() { { return 3.0_rt; } + else if constexpr ( + spec == Na21 + ) + { + return 4.0_rt; + } else if constexpr ( spec == O17 || spec == F17 ) diff --git a/networks/CNO_extras/pynucastro-info.txt b/networks/CNO_extras/pynucastro-info.txt index 204ad605a..29560334b 100644 --- a/networks/CNO_extras/pynucastro-info.txt +++ b/networks/CNO_extras/pynucastro-info.txt @@ -1 +1 @@ -pynucastro version: 2.12.0 +pynucastro version: 3.0.0-38-gd4179ae35 diff --git a/networks/CNO_extras/pynucastro.net b/networks/CNO_extras/pynucastro.net index 06be2012a..f385cf092 100644 --- a/networks/CNO_extras/pynucastro.net +++ b/networks/CNO_extras/pynucastro.net @@ -1,4 +1,5 @@ hydrogen-1 H1 1.0 1.0 +helium-3 He3 3.0 2.0 helium-4 He4 4.0 2.0 carbon-12 C12 12.0 6.0 carbon-13 C13 13.0 6.0 @@ -19,3 +20,4 @@ neon-20 Ne20 20.0 10.0 magnesium-22 Mg22 22.0 12.0 magnesium-24 Mg24 24.0 12.0 iron-56 Fe56 56.0 26.0 +__extra_sodium-21 Na21 21.0 11.0 diff --git a/networks/CNO_extras/reaclib_rates.H b/networks/CNO_extras/reaclib_rates.H index 0bdbe489c..6823d53ea 100644 --- a/networks/CNO_extras/reaclib_rates.H +++ b/networks/CNO_extras/reaclib_rates.H @@ -8,2979 +8,3549 @@ #include #include -using namespace Rates; -using namespace Species; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_N13_to_C13_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { +namespace reaclib_rates { - // N13 --> C13 + using namespace Rates; + using namespace Species; - rate = 0.0; - drate_dT = 0.0; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_N13_to_C13_beta_pos_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // N13 --> C13 - // wc12w - ln_set_rate = -6.7601; - amrex::ignore_unused(tfactors); + rate = 0.0; + drate_dT = 0.0; - ln_set_rate += log_scor; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.0; + // wc12w + ln_set_rate = -6.7601; + amrex::ignore_unused(tfactors); - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } + + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O14_to_N14_beta_pos_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O14_to_N14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O14 --> N14 - // O14 --> N14 + rate = 0.0; + drate_dT = 0.0; - 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}; - 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.62354; + amrex::ignore_unused(tfactors); - // wc12w - ln_set_rate = -4.62354; - amrex::ignore_unused(tfactors); + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.0; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O15_to_N15_beta_pos_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_O15_to_N15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O15 --> N15 - // O15 --> N15 + rate = 0.0; + drate_dT = 0.0; - 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}; - 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 = -5.17053; + amrex::ignore_unused(tfactors); - // wc12w - ln_set_rate = -5.17053; - amrex::ignore_unused(tfactors); + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.0; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_C12_p_to_N13_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_C12_to_N13_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // C12 + p --> N13 - // C12 + p --> N13 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // ls09n + ln_set_rate = 17.1482 + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 + + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // ls09n - ln_set_rate = 17.1482 + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 - + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // ls09r + ln_set_rate = 17.5428 + -3.77849 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 + + 0.148883 * tfactors.T9 + -1.5 * tfactors.lnT9; - // ls09r - ln_set_rate = 17.5428 + -3.77849 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 - + 0.148883 * tfactors.T9 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.77849 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.10735 * tfactors.T943i + (1.0/3.0) * -2.24111 * tfactors.T923i + + 0.148883 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 3.77849 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.10735 * tfactors.T943i + (1.0/3.0) * -2.24111 * tfactors.T923i - + 0.148883 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_C12_He4_to_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_C12_to_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // C12 + He4 --> O16 - // C12 + He4 --> O16 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // nac2 + ln_set_rate = 254.634 + -1.84097 * tfactors.T9i + 103.411 * tfactors.T913i + -420.567 * tfactors.T913 + + 64.0874 * tfactors.T9 + -12.4624 * tfactors.T953 + 137.303 * tfactors.lnT9; - // nac2 - ln_set_rate = 254.634 + -1.84097 * tfactors.T9i + 103.411 * tfactors.T913i + -420.567 * tfactors.T913 - + 64.0874 * tfactors.T9 + -12.4624 * tfactors.T953 + 137.303 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.84097 * 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 + 137.303 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.84097 * 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 + 137.303 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nac2 + ln_set_rate = 69.6526 + -1.39254 * tfactors.T9i + 58.9128 * tfactors.T913i + -148.273 * tfactors.T913 + + 9.08324 * tfactors.T9 + -0.541041 * tfactors.T953 + 70.3554 * tfactors.lnT9; - // nac2 - ln_set_rate = 69.6526 + -1.39254 * tfactors.T9i + 58.9128 * tfactors.T913i + -148.273 * tfactors.T913 - + 9.08324 * tfactors.T9 + -0.541041 * tfactors.T953 + 70.3554 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.39254 * 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 + 70.3554 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.39254 * 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 + 70.3554 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_C13_p_to_N14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_C13_to_N14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // C13 + p --> N14 - // C13 + p --> N14 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // nacrn + ln_set_rate = 18.5155 + -13.72 * tfactors.T913i + -0.450018 * tfactors.T913 + + 3.70823 * tfactors.T9 + -1.70545 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // nacrn - ln_set_rate = 18.5155 + -13.72 * tfactors.T913i + -0.450018 * tfactors.T913 - + 3.70823 * tfactors.T9 + -1.70545 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = 13.9637 + -5.78147 * tfactors.T9i + -0.196703 * tfactors.T913 + + 0.142126 * tfactors.T9 + -0.0238912 * tfactors.T953 + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = 13.9637 + -5.78147 * tfactors.T9i + -0.196703 * tfactors.T913 - + 0.142126 * tfactors.T9 + -0.0238912 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.78147 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.196703 * tfactors.T923i + + 0.142126 + (5.0/3.0) * -0.0238912 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 5.78147 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.196703 * tfactors.T923i - + 0.142126 + (5.0/3.0) * -0.0238912 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = 15.1825 + -13.5543 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = 15.1825 + -13.5543 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 13.5543 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 13.5543 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N13_p_to_O14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_N13_to_O14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N13 + p --> O14 - // N13 + p --> O14 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // lg06r + ln_set_rate = 10.9971 + -6.12602 * tfactors.T9i + 1.57122 * tfactors.T913i + + -1.5 * tfactors.lnT9; - // lg06r - ln_set_rate = 10.9971 + -6.12602 * tfactors.T9i + 1.57122 * tfactors.T913i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.12602 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 1.57122 * tfactors.T943i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 6.12602 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 1.57122 * tfactors.T943i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // lg06n + ln_set_rate = 18.1356 + -15.1676 * tfactors.T913i + 0.0955166 * tfactors.T913 + + 3.0659 * tfactors.T9 + -0.507339 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // lg06n - ln_set_rate = 18.1356 + -15.1676 * tfactors.T913i + 0.0955166 * tfactors.T913 - + 3.0659 * tfactors.T9 + -0.507339 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N14_p_to_O15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_N14_to_O15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N14 + p --> O15 - // N14 + p --> O15 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // im05r + ln_set_rate = 6.73578 + -4.891 * tfactors.T9i + + 0.0682 * tfactors.lnT9; - // im05r - ln_set_rate = 6.73578 + -4.891 * tfactors.T9i - + 0.0682 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.891 * tfactors.T9i * tfactors.T9i + + 0.0682 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.891 * tfactors.T9i * tfactors.T9i - + 0.0682 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // im05r + ln_set_rate = 7.65444 + -2.998 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // im05r - ln_set_rate = 7.65444 + -2.998 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.998 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.998 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // im05n + ln_set_rate = 20.1169 + -15.193 * tfactors.T913i + -4.63975 * tfactors.T913 + + 9.73458 * tfactors.T9 + -9.55051 * tfactors.T953 + 0.333333 * tfactors.lnT9; - // im05n - ln_set_rate = 20.1169 + -15.193 * tfactors.T913i + -4.63975 * tfactors.T913 - + 9.73458 * tfactors.T9 + -9.55051 * tfactors.T953 + 0.333333 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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 + 0.333333 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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 + 0.333333 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // im05n + ln_set_rate = 17.01 + -15.193 * tfactors.T913i + -0.161954 * tfactors.T913 + + -7.52123 * tfactors.T9 + -0.987565 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // im05n - ln_set_rate = 17.01 + -15.193 * tfactors.T913i + -0.161954 * tfactors.T913 - + -7.52123 * tfactors.T9 + -0.987565 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N14_He4_to_F18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_N14_to_F18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N14 + He4 --> F18 - // N14 + He4 --> F18 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = 13.8995 + -10.9656 * tfactors.T9i + -5.6227 * tfactors.T913i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 13.8995 + -10.9656 * tfactors.T9i + -5.6227 * tfactors.T913i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.9656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 10.9656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 0.196838 + -5.16034 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 0.196838 + -5.16034 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.16034 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 5.16034 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 21.5339 + -36.2504 * tfactors.T913i + + -5.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 21.5339 + -36.2504 * tfactors.T913i - + -5.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -36.2504 * tfactors.T943i + + (5.0/3.0) * -5.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -36.2504 * tfactors.T943i - + (5.0/3.0) * -5.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N15_p_to_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_N15_to_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N15 + p --> O16 - // N15 + p --> O16 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // li10r + ln_set_rate = 14.5444 + -10.2295 * tfactors.T9i + + 0.0459037 * tfactors.T9 + -1.5 * tfactors.lnT9; - // li10r - ln_set_rate = 14.5444 + -10.2295 * tfactors.T9i - + 0.0459037 * tfactors.T9 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.2295 * tfactors.T9i * tfactors.T9i + + 0.0459037 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 10.2295 * tfactors.T9i * tfactors.T9i - + 0.0459037 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // li10r + ln_set_rate = 6.59056 + -2.92315 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // li10r - ln_set_rate = 6.59056 + -2.92315 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.92315 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.92315 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // li10n + ln_set_rate = 20.0176 + -15.24 * tfactors.T913i + 0.334926 * tfactors.T913 + + 4.59088 * tfactors.T9 + -4.78468 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // li10n - ln_set_rate = 20.0176 + -15.24 * tfactors.T913i + 0.334926 * tfactors.T913 - + 4.59088 * tfactors.T9 + -4.78468 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N15_He4_to_F19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_N15_to_F19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N15 + He4 --> F19 - // N15 + He4 --> F19 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = -28.7989 + -4.19986 * tfactors.T9i + 35.4292 * tfactors.T913 + + -5.5767 * tfactors.T9 + 0.441293 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -28.7989 + -4.19986 * tfactors.T9i + 35.4292 * tfactors.T913 - + -5.5767 * tfactors.T9 + 0.441293 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.19986 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 35.4292 * tfactors.T923i + + -5.5767 + (5.0/3.0) * 0.441293 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.19986 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 35.4292 * tfactors.T923i - + -5.5767 + (5.0/3.0) * 0.441293 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 3.5342 + -6.98462 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 3.5342 + -6.98462 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.98462 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 6.98462 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = -9.41892 + -4.17795 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -9.41892 + -4.17795 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.17795 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.17795 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 25.3916 + -36.2324 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 25.3916 + -36.2324 * tfactors.T913i - + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -36.2324 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -36.2324 * tfactors.T943i - + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O14_He4_to_Ne18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O14_to_Ne18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O14 + He4 --> Ne18 - // O14 + He4 --> Ne18 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // wh87n + ln_set_rate = 26.4429 + -39.38 * tfactors.T913i + -0.0772187 * tfactors.T913 + + -0.635361 * tfactors.T9 + 0.106236 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // wh87n - ln_set_rate = 26.4429 + -39.38 * tfactors.T913i + -0.0772187 * tfactors.T913 - + -0.635361 * tfactors.T9 + 0.106236 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.38 * tfactors.T943i + (1.0/3.0) * -0.0772187 * tfactors.T923i + + -0.635361 + (5.0/3.0) * 0.106236 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -39.38 * tfactors.T943i + (1.0/3.0) * -0.0772187 * tfactors.T923i - + -0.635361 + (5.0/3.0) * 0.106236 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // wh87r + ln_set_rate = -4.69948 + -12.159 * tfactors.T9i + + 5.0 * tfactors.lnT9; - // wh87r - ln_set_rate = -4.69948 + -12.159 * tfactors.T9i - + 5.0 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.159 * tfactors.T9i * tfactors.T9i + + 5.0 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 12.159 * tfactors.T9i * tfactors.T9i - + 5.0 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // wh87r + ln_set_rate = 3.52636 + -22.61 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // wh87r - ln_set_rate = 3.52636 + -22.61 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.61 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 22.61 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // wh87r + ln_set_rate = -2.15417 + -11.73 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // wh87r - ln_set_rate = -2.15417 + -11.73 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 11.73 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 11.73 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O15_He4_to_Ne19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O15_to_Ne19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O15 + He4 --> Ne19 - // O15 + He4 --> Ne19 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // dc11r + ln_set_rate = -32.2496 + -4.20439 * tfactors.T9i + -3.24609 * tfactors.T913i + 44.4647 * tfactors.T913 + + -9.79962 * tfactors.T9 + 0.841782 * tfactors.T953 + -1.5 * tfactors.lnT9; - // dc11r - ln_set_rate = -32.2496 + -4.20439 * tfactors.T9i + -3.24609 * tfactors.T913i + 44.4647 * tfactors.T913 - + -9.79962 * tfactors.T9 + 0.841782 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.20439 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.24609 * tfactors.T943i + (1.0/3.0) * 44.4647 * tfactors.T923i + + -9.79962 + (5.0/3.0) * 0.841782 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.20439 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -3.24609 * tfactors.T943i + (1.0/3.0) * 44.4647 * tfactors.T923i - + -9.79962 + (5.0/3.0) * 0.841782 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // dc11r + ln_set_rate = -0.0452465 + -5.88439 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // dc11r - ln_set_rate = -0.0452465 + -5.88439 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.88439 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 5.88439 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // dc11n + ln_set_rate = 26.2914 + -39.578 * tfactors.T913i + + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // dc11n - ln_set_rate = 26.2914 + -39.578 * tfactors.T913i - + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.578 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -39.578 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_p_to_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O16_to_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O16 + p --> F17 - // O16 + p --> F17 + rate = 0.0; + drate_dT = 0.0; - 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}; - 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 = 19.0904 + -16.696 * tfactors.T913i + -1.16252 * tfactors.T913 + + 0.267703 * tfactors.T9 + -0.0338411 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // ia08n - ln_set_rate = 19.0904 + -16.696 * tfactors.T913i + -1.16252 * tfactors.T913 - + 0.267703 * tfactors.T9 + -0.0338411 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O16_He4_to_Ne20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O16 + He4 --> Ne20 - // O16 + He4 --> Ne20 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // co10r + ln_set_rate = 3.88571 + -10.3585 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // co10r - ln_set_rate = 3.88571 + -10.3585 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.3585 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 10.3585 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // co10n + ln_set_rate = 23.903 + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 + + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // co10n - ln_set_rate = 23.903 + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 - + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i + + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i - + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // co10r + ln_set_rate = 9.50848 + -12.7643 * tfactors.T9i + -3.65925 * tfactors.T913 + + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953 + -1.5 * tfactors.lnT9; - // co10r - ln_set_rate = 9.50848 + -12.7643 * tfactors.T9i + -3.65925 * tfactors.T913 - + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.7643 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i + + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 12.7643 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i - + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O17_p_to_F18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O17_to_F18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O17 + p --> F18 - // O17 + p --> F18 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = 9.39048 + -6.22828 * tfactors.T9i + 2.31435 * tfactors.T913 + + -0.302835 * tfactors.T9 + 0.020133 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 9.39048 + -6.22828 * tfactors.T9i + 2.31435 * tfactors.T913 - + -0.302835 * tfactors.T9 + 0.020133 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.22828 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 2.31435 * tfactors.T923i + + -0.302835 + (5.0/3.0) * 0.020133 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 6.22828 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 2.31435 * tfactors.T923i - + -0.302835 + (5.0/3.0) * 0.020133 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = -13.077 + -0.746296 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -13.077 + -0.746296 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.746296 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.746296 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 15.8929 + -16.4035 * tfactors.T913i + 4.31885 * tfactors.T913 + + -0.709921 * tfactors.T9 + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 15.8929 + -16.4035 * tfactors.T913i + 4.31885 * tfactors.T913 - + -0.709921 * tfactors.T9 + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O18_p_to_F19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O18_to_F19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O18 + p --> F19 - // O18 + p --> F19 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10n + ln_set_rate = 19.917 + -16.7246 * tfactors.T913i + + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 19.917 + -16.7246 * tfactors.T913i - + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -16.7246 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -16.7246 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 7.26876 + -6.7253 * tfactors.T9i + 3.99059 * tfactors.T913 + + -0.593127 * tfactors.T9 + 0.0877534 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 7.26876 + -6.7253 * tfactors.T9i + 3.99059 * tfactors.T913 - + -0.593127 * tfactors.T9 + 0.0877534 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.7253 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 3.99059 * tfactors.T923i + + -0.593127 + (5.0/3.0) * 0.0877534 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 6.7253 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 3.99059 * tfactors.T923i - + -0.593127 + (5.0/3.0) * 0.0877534 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 5.07648 + -1.65681 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 5.07648 + -1.65681 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.65681 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.65681 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = -35.0079 + -0.244743 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -35.0079 + -0.244743 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.244743 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.244743 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F17_p_to_Ne18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F17_to_Ne18_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // F17 + p --> Ne18 - // F17 + p --> Ne18 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // cb09 + ln_set_rate = -7.84708 + -0.0323504 * tfactors.T9i + -14.2191 * tfactors.T913i + 34.0647 * tfactors.T913 + + -16.5698 * tfactors.T9 + 2.48116 * tfactors.T953 + -2.13376 * tfactors.lnT9; - // cb09 - ln_set_rate = -7.84708 + -0.0323504 * tfactors.T9i + -14.2191 * tfactors.T913i + 34.0647 * tfactors.T913 - + -16.5698 * tfactors.T9 + 2.48116 * tfactors.T953 + -2.13376 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0323504 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -14.2191 * tfactors.T943i + (1.0/3.0) * 34.0647 * tfactors.T923i + + -16.5698 + (5.0/3.0) * 2.48116 * tfactors.T923 + -2.13376 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.0323504 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -14.2191 * tfactors.T943i + (1.0/3.0) * 34.0647 * tfactors.T923i - + -16.5698 + (5.0/3.0) * 2.48116 * tfactors.T923 + -2.13376 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // cb09 + ln_set_rate = 27.5778 + -4.95969 * tfactors.T9i + -21.3249 * tfactors.T913i + -0.230774 * tfactors.T913 + + 0.917931 * tfactors.T9 + -0.0440377 * tfactors.T953 + -7.36014 * tfactors.lnT9; - // cb09 - ln_set_rate = 27.5778 + -4.95969 * tfactors.T9i + -21.3249 * tfactors.T913i + -0.230774 * tfactors.T913 - + 0.917931 * tfactors.T9 + -0.0440377 * tfactors.T953 + -7.36014 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.95969 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.3249 * tfactors.T943i + (1.0/3.0) * -0.230774 * tfactors.T923i + + 0.917931 + (5.0/3.0) * -0.0440377 * tfactors.T923 + -7.36014 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.95969 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -21.3249 * tfactors.T943i + (1.0/3.0) * -0.230774 * tfactors.T923i - + 0.917931 + (5.0/3.0) * -0.0440377 * tfactors.T923 + -7.36014 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F18_p_to_Ne19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F18_to_Ne19_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // F18 + p --> Ne19 - // F18 + p --> Ne19 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = -5.85727 + -2.89147 * tfactors.T9i + 13.1683 * tfactors.T913 + + -1.92023 * tfactors.T9 + 0.16901 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -5.85727 + -2.89147 * tfactors.T9i + 13.1683 * tfactors.T913 - + -1.92023 * tfactors.T9 + 0.16901 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.89147 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 13.1683 * tfactors.T923i + + -1.92023 + (5.0/3.0) * 0.16901 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.89147 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 13.1683 * tfactors.T923i - + -1.92023 + (5.0/3.0) * 0.16901 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = -29.449 + -0.39895 * tfactors.T9i + 22.4903 * tfactors.T913 + + 0.307872 * tfactors.T9 + -0.296226 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -29.449 + -0.39895 * tfactors.T9i + 22.4903 * tfactors.T913 - + 0.307872 * tfactors.T9 + -0.296226 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.39895 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 22.4903 * tfactors.T923i + + 0.307872 + (5.0/3.0) * -0.296226 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.39895 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 22.4903 * tfactors.T923i - + 0.307872 + (5.0/3.0) * -0.296226 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 57.4084 + -21.4023 * tfactors.T913i + -93.766 * tfactors.T913 + + 179.258 * tfactors.T9 + -202.561 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 57.4084 + -21.4023 * tfactors.T913i + -93.766 * tfactors.T913 - + 179.258 * tfactors.T9 + -202.561 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -21.4023 * tfactors.T943i + (1.0/3.0) * -93.766 * tfactors.T923i + + 179.258 + (5.0/3.0) * -202.561 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -21.4023 * tfactors.T943i + (1.0/3.0) * -93.766 * tfactors.T923i - + 179.258 + (5.0/3.0) * -202.561 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_F19_p_to_Ne20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F19_to_Ne20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // F19 + p --> Ne20 - // F19 + p --> Ne20 + rate = 0.0; + drate_dT = 0.0; - 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}; - 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 = -5.63093 + -7.74414 * tfactors.T9i + 31.6442 * tfactors.T913i + -58.6563 * tfactors.T913 + + 67.7365 * tfactors.T9 + -22.9721 * tfactors.T953 + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = -5.63093 + -7.74414 * tfactors.T9i + 31.6442 * tfactors.T913i + -58.6563 * tfactors.T913 - + 67.7365 * tfactors.T9 + -22.9721 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 7.74414 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 31.6442 * tfactors.T943i + (1.0/3.0) * -58.6563 * tfactors.T923i + + 67.7365 + (5.0/3.0) * -22.9721 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 7.74414 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 31.6442 * tfactors.T943i + (1.0/3.0) * -58.6563 * tfactors.T923i - + 67.7365 + (5.0/3.0) * -22.9721 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = 12.3816 + -1.71383 * tfactors.T9i + -11.3832 * tfactors.T913i + 5.47872 * tfactors.T913 + + -1.07203 * tfactors.T9 + 0.11196 * tfactors.T953 + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = 12.3816 + -1.71383 * tfactors.T9i + -11.3832 * tfactors.T913i + 5.47872 * tfactors.T913 - + -1.07203 * tfactors.T9 + 0.11196 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.71383 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -11.3832 * tfactors.T943i + (1.0/3.0) * 5.47872 * tfactors.T923i + + -1.07203 + (5.0/3.0) * 0.11196 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.71383 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -11.3832 * tfactors.T943i + (1.0/3.0) * 5.47872 * tfactors.T923i - + -1.07203 + (5.0/3.0) * 0.11196 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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 = 18.2807 + -18.116 * tfactors.T913i + -1.4622 * tfactors.T913 + + 6.95113 * tfactors.T9 + -2.90366 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // nacrn - ln_set_rate = 18.2807 + -18.116 * tfactors.T913i + -1.4622 * tfactors.T913 - + 6.95113 * tfactors.T9 + -2.90366 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -18.116 * tfactors.T943i + (1.0/3.0) * -1.4622 * tfactors.T923i + + 6.95113 + (5.0/3.0) * -2.90366 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -18.116 * tfactors.T943i + (1.0/3.0) * -1.4622 * tfactors.T923i - + 6.95113 + (5.0/3.0) * -2.90366 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne20_He4_to_Mg24_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_Ne18_to_Mg22_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // Ne20 + He4 --> Mg24 - // Ne18 + He4 --> Mg22 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = -8.79827 + -12.7809 * tfactors.T9i + 16.9229 * tfactors.T913 + + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953 + -1.5 * tfactors.lnT9; - // ths8r - ln_set_rate = 32.8865 + -46.4859 * tfactors.T913i + 0.956741 * tfactors.T913 - + -0.914402 * tfactors.T9 + 0.0722478 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.7809 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i + + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -46.4859 * tfactors.T943i + (1.0/3.0) * 0.956741 * tfactors.T923i - + -0.914402 + (5.0/3.0) * 0.0722478 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 1.98307 + -9.22026 * tfactors.T9i + + -1.5 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 9.22026 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - // Ne20 + He4 --> Mg24 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = -38.7055 + -2.50605 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -8.79827 + -12.7809 * tfactors.T9i + 16.9229 * tfactors.T913 - + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.50605 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 12.7809 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i - + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 24.5058 + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 + + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10r - ln_set_rate = 1.98307 + -9.22026 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i + + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 9.22026 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // il10r - ln_set_rate = -38.7055 + -2.50605 * tfactors.T9i - + -1.5 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_N13_He4_to_p_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // N13 + He4 --> p + O16 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.50605 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // cf88n + ln_set_rate = 40.4644 + -35.829 * tfactors.T913i + -0.530275 * tfactors.T913 + + -0.982462 * tfactors.T9 + 0.0808059 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10n - ln_set_rate = 24.5058 + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 - + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i - + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_N15_p_to_He4_C12_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_C12_C12_to_He4_Ne20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // N15 + p --> He4 + C12 - // C12 + C12 --> He4 + Ne20 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // nacrn + ln_set_rate = 27.4764 + -15.253 * tfactors.T913i + 1.59318 * tfactors.T913 + + 2.4479 * tfactors.T9 + -2.19708 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // cf88r - ln_set_rate = 61.2863 + -84.165 * tfactors.T913i + -1.56627 * tfactors.T913 - + -0.0736084 * tfactors.T9 + -0.072797 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.56627 * tfactors.T923i - + -0.0736084 + (5.0/3.0) * -0.072797 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = -6.57522 + -1.1638 * tfactors.T9i + 22.7105 * tfactors.T913 + + -2.90707 * tfactors.T9 + 0.205754 * tfactors.T953 + -1.5 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_N13_to_p_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.1638 * 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; - // N13 + He4 --> p + O16 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - 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 = 20.8972 + -7.406 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // cf88n - ln_set_rate = 40.4644 + -35.829 * tfactors.T913i + -0.530275 * tfactors.T913 - + -0.982462 * tfactors.T9 + 0.0808059 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 7.406 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = -4.87347 + -2.02117 * tfactors.T9i + 30.8497 * tfactors.T913 + + -8.50433 * tfactors.T9 + -1.54426 * tfactors.T953 + -1.5 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_N15_to_He4_C12_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.02117 * 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; - // N15 + p --> He4 + C12 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + } - // nacrn - ln_set_rate = 27.4764 + -15.253 * tfactors.T913i + 1.59318 * tfactors.T913 - + 2.4479 * tfactors.T9 + -2.19708 * tfactors.T953 + -0.666667 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_O14_He4_to_p_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // O14 + He4 --> p + F17 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // Ha96r + ln_set_rate = 12.1289 + -12.0223 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = -6.57522 + -1.1638 * tfactors.T9i + 22.7105 * tfactors.T913 - + -2.90707 * tfactors.T9 + 0.205754 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.0223 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.1638 * 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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // Ha96r + ln_set_rate = 18.6518 + -26.0 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // nacrr - ln_set_rate = 20.8972 + -7.406 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 26.0 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 7.406 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // Ha96n + ln_set_rate = 40.8358 + -39.388 * tfactors.T913i + -17.4673 * tfactors.T913 + + 35.3029 * tfactors.T9 + -24.8162 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // nacrr - ln_set_rate = -4.87347 + -2.02117 * tfactors.T9i + 30.8497 * tfactors.T913 - + -8.50433 * tfactors.T9 + -1.54426 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.02117 * 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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // Ha96r + ln_set_rate = 16.3087 + -22.51 * tfactors.T9i + + -1.5 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_O14_to_p_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.51 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - // O14 + He4 --> p + F17 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // Ha96r + ln_set_rate = 11.1184 + -13.6 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // Ha96r - ln_set_rate = 12.1289 + -12.0223 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 13.6 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 12.0223 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // Ha96r + ln_set_rate = -106.091 + -0.453036 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // Ha96r - ln_set_rate = 18.6518 + -26.0 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.453036 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 26.0 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // Ha96n - ln_set_rate = 40.8358 + -39.388 * tfactors.T913i + -17.4673 * tfactors.T913 - + 35.3029 * tfactors.T9 + -24.8162 * tfactors.T953 + -0.666667 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_O17_p_to_He4_N14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // O17 + p --> He4 + N14 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // il10r + ln_set_rate = -7.20763 + -0.753395 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // Ha96r - ln_set_rate = 16.3087 + -22.51 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.753395 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 22.51 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 19.579 + -16.9078 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // Ha96r - ln_set_rate = 11.1184 + -13.6 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -16.9078 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 13.6 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 10.174 + -4.95865 * tfactors.T9i + 5.10182 * tfactors.T913 + + 0.379373 * tfactors.T9 + -0.0672515 * tfactors.T953 + -1.5 * tfactors.lnT9; - // Ha96r - ln_set_rate = -106.091 + -0.453036 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.95865 * 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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.453036 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } + + // il10r + ln_set_rate = 5.5336 + -2.11477 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.11477 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } + + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_O18_p_to_He4_N15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_C12_O16_to_He4_Mg24_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // O18 + p --> He4 + N15 - // O16 + C12 --> He4 + Mg24 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = -27.9044 + -0.245884 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // cf88r - ln_set_rate = 48.5341 + 0.37204 * tfactors.T9i + -133.413 * tfactors.T913i + 50.1572 * tfactors.T913 - + -3.15987 * tfactors.T9 + 0.0178251 * tfactors.T953 + -23.7027 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.245884 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = -0.37204 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -133.413 * tfactors.T943i + (1.0/3.0) * 50.1572 * tfactors.T923i - + -3.15987 + (5.0/3.0) * 0.0178251 * tfactors.T923 + -23.7027 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10n + ln_set_rate = 26.9671 + -16.6979 * tfactors.T913i + + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O17_to_He4_N14_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -16.6979 * tfactors.T943i + + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - // O17 + p --> He4 + N14 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10r + ln_set_rate = 8.94352 + -5.32335 * tfactors.T9i + 11.6568 * tfactors.T913 + + -2.16303 * tfactors.T9 + 0.209965 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -7.20763 + -0.753395 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.32335 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.6568 * tfactors.T923i + + -2.16303 + (5.0/3.0) * 0.209965 * tfactors.T923 + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.753395 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = 10.2725 + -1.663 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10n - ln_set_rate = 19.579 + -16.9078 * tfactors.T913i - + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.663 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -16.9078 * tfactors.T943i - + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // il10r - ln_set_rate = 10.174 + -4.95865 * tfactors.T9i + 5.10182 * tfactors.T913 - + 0.379373 * tfactors.T9 + -0.0672515 * tfactors.T953 + -1.5 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_F18_p_to_He4_O15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // F18 + p --> He4 + O15 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.95865 * 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; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // il10r + ln_set_rate = 1.75704 + -3.01675 * tfactors.T9i + 13.3223 * tfactors.T913 + + -1.36696 * tfactors.T9 + 0.0757363 * tfactors.T953 + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 5.5336 + -2.11477 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.01675 * 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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.11477 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // il10r + ln_set_rate = -31.7388 + -0.376432 * tfactors.T9i + 61.738 * tfactors.T913 + + -108.29 * tfactors.T9 + -34.2365 * tfactors.T953 + -1.5 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_O18_to_He4_N15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.376432 * 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; - // O18 + p --> He4 + N15 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // il10n + ln_set_rate = 62.0058 + -21.4023 * tfactors.T913i + -80.8891 * tfactors.T913 + + 134.6 * tfactors.T9 + -126.504 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10r - ln_set_rate = -27.9044 + -0.245884 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.245884 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // il10n - ln_set_rate = 26.9671 + -16.6979 * tfactors.T913i - + -3.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_F19_p_to_He4_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // F19 + p --> He4 + O16 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -16.6979 * tfactors.T943i - + (5.0/3.0) * -3.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // nacr + ln_set_rate = -52.7043 + -0.12765 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 8.94352 + -5.32335 * tfactors.T9i + 11.6568 * tfactors.T913 - + -2.16303 * tfactors.T9 + 0.209965 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.12765 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 5.32335 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.6568 * tfactors.T923i - + -2.16303 + (5.0/3.0) * 0.209965 * tfactors.T923 + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacr + ln_set_rate = 26.2916 + -18.116 * tfactors.T913i + + 1.86674 * tfactors.T9 + -7.5666 * tfactors.T953 + -0.666667 * tfactors.lnT9; - // il10r - ln_set_rate = 10.2725 + -1.663 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -18.116 * tfactors.T943i + + 1.86674 + (5.0/3.0) * -7.5666 * tfactors.T923 + -0.666667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.663 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacrr + ln_set_rate = 14.3586 + -3.286 * tfactors.T9i + + -0.21103 * tfactors.T9 + 2.87702 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F18_to_He4_O15_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.286 * tfactors.T9i * tfactors.T9i + + -0.21103 + 2.87702 * tfactors.T9i; - // F18 + p --> He4 + O15 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - 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 = 15.1955 + -3.75185 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = 1.75704 + -3.01675 * tfactors.T9i + 13.3223 * tfactors.T913 - + -1.36696 * tfactors.T9 + 0.0757363 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.75185 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 3.01675 * 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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // nacr + ln_set_rate = 8.239 + -2.46828 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // il10r - ln_set_rate = -31.7388 + -0.376432 * tfactors.T9i + 61.738 * tfactors.T913 - + -108.29 * tfactors.T9 + -34.2365 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.46828 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.376432 * 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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // il10n - ln_set_rate = 62.0058 + -21.4023 * tfactors.T913i + -80.8891 * tfactors.T913 - + 134.6 * tfactors.T9 + -126.504 * tfactors.T953 + -0.666667 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne20_p_to_He4_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // Ne20 + p --> He4 + F17 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + 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 = 41.563 + -47.9266 * 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 += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 47.9266 * 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 += dlog_scor_dT * 1.0e9_rt; + } + + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_F19_to_He4_O16_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + // 3 He4 --> C12 - // F19 + p --> He4 + O16 + rate = 0.0; + drate_dT = 0.0; - 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}; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // fy05r + ln_set_rate = -11.7884 + -1.02446 * tfactors.T9i + -23.57 * tfactors.T913i + 20.4886 * tfactors.T913 + + -12.9882 * tfactors.T9 + -20.0 * tfactors.T953 + -2.16667 * tfactors.lnT9; - // nacr - ln_set_rate = -52.7043 + -0.12765 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.02446 * 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 + -2.16667 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 0.12765 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // fy05n + ln_set_rate = -0.971052 + -37.06 * tfactors.T913i + 29.3493 * tfactors.T913 + + -115.507 * tfactors.T9 + -10.0 * tfactors.T953 + -1.33333 * tfactors.lnT9; - // nacr - ln_set_rate = 26.2916 + -18.116 * tfactors.T913i - + 1.86674 * tfactors.T9 + -7.5666 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.33333 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -18.116 * tfactors.T943i - + 1.86674 + (5.0/3.0) * -7.5666 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // fy05r + ln_set_rate = -24.3505 + -4.12656 * tfactors.T9i + -13.49 * tfactors.T913i + 21.4259 * tfactors.T913 + + -1.34769 * tfactors.T9 + 0.0879816 * tfactors.T953 + -13.1653 * tfactors.lnT9; - // nacrr - ln_set_rate = 14.3586 + -3.286 * tfactors.T9i - + -0.21103 * tfactors.T9 + 2.87702 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.12656 * 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 + -13.1653 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 3.286 * tfactors.T9i * tfactors.T9i - + -0.21103 + 2.87702 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; } - // nacr - ln_set_rate = 15.1955 + -3.75185 * tfactors.T9i - + -1.5 * tfactors.lnT9; + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne18_He4_to_p_Na21_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - ln_set_rate += log_scor; + // Ne18 + He4 --> p + Na21 - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 3.75185 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + rate = 0.0; + drate_dT = 0.0; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{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; - } + // mo14r + ln_set_rate = -23.5811 + -5.76874 * tfactors.T9i + 8.5632e-08 * tfactors.T913i + 24.8579 * tfactors.T913 + + 0.0823845 * tfactors.T9 + -0.365374 * tfactors.T953 + -2.21415e-06 * tfactors.lnT9; - // nacr - ln_set_rate = 8.239 + -2.46828 * tfactors.T9i - + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.76874 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.5632e-08 * tfactors.T943i + (1.0/3.0) * 24.8579 * tfactors.T923i + + 0.0823845 + (5.0/3.0) * -0.365374 * tfactors.T923 + -2.21415e-06 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 2.46828 * tfactors.T9i * tfactors.T9i - + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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; - } + // mo14r + ln_set_rate = -22.4389 + -10.2598 * tfactors.T9i + 4.73034e-07 * tfactors.T913i + 36.29 * tfactors.T913 + + -6.56565 * tfactors.T9 + -2.96287e-06 * tfactors.T953 + -9.00373e-07 * tfactors.lnT9; -} + ln_set_rate += log_scor; -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_p_Ne20_to_He4_F17_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.2598 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 4.73034e-07 * tfactors.T943i + (1.0/3.0) * 36.29 * tfactors.T923i + + -6.56565 + (5.0/3.0) * -2.96287e-06 * tfactors.T923 + -9.00373e-07 * tfactors.T9i; - // Ne20 + p --> He4 + F17 + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - rate = 0.0; - drate_dT = 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; + } - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + // mo14r + ln_set_rate = -37.3979 + -3.8681 * tfactors.T9i + 7.09521e-06 * tfactors.T913i + 34.1789 * tfactors.T913 + + -1.72974 * tfactors.T9 + -0.0395081 * tfactors.T953 + -7.82759e-07 * tfactors.lnT9; - // nacr - ln_set_rate = 41.563 + -47.9266 * 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 += log_scor; - ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.8681 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 7.09521e-06 * tfactors.T943i + (1.0/3.0) * 34.1789 * tfactors.T923i + + -1.72974 + (5.0/3.0) * -0.0395081 * tfactors.T923 + -7.82759e-07 * tfactors.T9i; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 47.9266 * 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 += dlog_scor_dT * 1.0e9_rt; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // 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; + } - // 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_DEVICE AMREX_INLINE + void rate_Ne18_He4_to_Mg22_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Ne18 + He4 --> Mg22 -template -AMREX_GPU_DEVICE AMREX_INLINE -void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + rate = 0.0; + drate_dT = 0.0; - // 3 He4 --> C12 + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - rate = 0.0; - drate_dT = 0.0; + // ths8r + ln_set_rate = 32.8865 + -46.4859 * tfactors.T913i + 0.956741 * tfactors.T913 + + -0.914402 * tfactors.T9 + 0.0722478 * tfactors.T953 + -0.666667 * tfactors.lnT9; - amrex::Real ln_set_rate{0.0}; - amrex::Real dln_set_rate_dT9{0.0}; - amrex::Real set_rate{0.0}; + ln_set_rate += log_scor; - // fy05r - ln_set_rate = -11.7884 + -1.02446 * tfactors.T9i + -23.57 * tfactors.T913i + 20.4886 * tfactors.T913 - + -12.9882 * tfactors.T9 + -20.0 * tfactors.T953 + -2.16667 * tfactors.lnT9; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -46.4859 * tfactors.T943i + (1.0/3.0) * 0.956741 * tfactors.T923i + + -0.914402 + (5.0/3.0) * 0.0722478 * tfactors.T923 + -0.666667 * tfactors.T9i; - ln_set_rate += log_scor; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 1.02446 * 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 + -2.16667 * 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; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } - // 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_DEVICE AMREX_INLINE + void rate_Na21_p_to_Mg22_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - // fy05n - ln_set_rate = -0.971052 + -37.06 * tfactors.T913i + 29.3493 * tfactors.T913 - + -115.507 * tfactors.T9 + -10.0 * tfactors.T953 + -1.33333 * tfactors.lnT9; + // Na21 + p --> Mg22 - ln_set_rate += log_scor; + rate = 0.0; + drate_dT = 0.0; - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(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.33333 * tfactors.T9i; + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // il10r + ln_set_rate = 6.28009 + -7.47826 * tfactors.T9i + 4.75873 * tfactors.T913 + + -0.708067 * tfactors.T9 + 0.0523665 * tfactors.T953 + -1.5 * tfactors.lnT9; - // 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; - } + ln_set_rate += log_scor; - // fy05r - ln_set_rate = -24.3505 + -4.12656 * tfactors.T9i + -13.49 * tfactors.T913i + 21.4259 * tfactors.T913 - + -1.34769 * tfactors.T9 + 0.0879816 * tfactors.T953 + -13.1653 * tfactors.lnT9; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 7.47826 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 4.75873 * tfactors.T923i + + -0.708067 + (5.0/3.0) * 0.0523665 * tfactors.T923 + -1.5 * tfactors.T9i; - ln_set_rate += log_scor; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = 4.12656 * 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 + -13.1653 * 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; + } - dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; - } + // il10r + ln_set_rate = 5.07923 + -2.38741 * tfactors.T9i + + -1.5 * tfactors.lnT9; - // 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; - } + ln_set_rate += log_scor; -} + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.38741 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void -fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, - [[maybe_unused]] T& rate_eval) -{ + // 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; + } - [[maybe_unused]] amrex::Real rate; - [[maybe_unused]] amrex::Real drate_dT; + // il10n + ln_set_rate = 18.6558 + -20.7329 * tfactors.T913i + + -1.5 * tfactors.T953 + -0.666667 * tfactors.lnT9; - { - // N13_to_C13_reaclib + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -20.7329 * tfactors.T943i + + (5.0/3.0) * -1.5 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_N13_to_C13_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_N13_to_C13_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_N13_to_C13_reaclib) = drate_dT; + // 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; } + } - { - // O14_to_N14_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne19_p_to_Na20_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Ne19 + p --> Na20 + + 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}; + + // il10r + ln_set_rate = 5.63289 + -5.07623 * tfactors.T9i + 1.23704 * tfactors.T913 + + 0.337618 * tfactors.T9 + -0.0562825 * tfactors.T953 + -1.5 * tfactors.lnT9; + + ln_set_rate += log_scor; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O14_to_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_O14_to_N14_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O14_to_N14_reaclib) = drate_dT; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.07623 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 1.23704 * tfactors.T923i + + 0.337618 + (5.0/3.0) * -0.0562825 * tfactors.T923 + -1.5 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } - } - { - // O15_to_N15_reaclib + // 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; + } + + // il10n + ln_set_rate = 17.822 + -19.5908 * tfactors.T913i + -2.37696 * tfactors.T913 + + 3.26815 * tfactors.T9 + -1.06524 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; - rate_O15_to_N15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_O15_to_N15_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O15_to_N15_reaclib) = drate_dT; + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -19.5908 * tfactors.T943i + (1.0/3.0) * -2.37696 * tfactors.T923i + + 3.26815 + (5.0/3.0) * -1.06524 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; + } + + // 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; } + } - { - // p_C12_to_N13_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_Ne20_p_to_Na21_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_C12); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_C12); + // Ne20 + p --> Na21 + + 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}; + + // ly18 + ln_set_rate = 195297.0 + -61.14 * tfactors.T9i + 21894.7 * tfactors.T913i + -319153.0 * tfactors.T913 + + 224369.0 * tfactors.T9 + -188049.0 * tfactors.T953 + 48703.4 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 61.14 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21894.7 * tfactors.T943i + (1.0/3.0) * -319153.0 * tfactors.T923i + + 224369.0 + (5.0/3.0) * -188049.0 * tfactors.T923 + 48703.4 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_p_C12_to_N13_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_C12_to_N13_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_C12_to_N13_reaclib) = drate_dT; + + // 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; } - } - { - // He4_C12_to_O16_reaclib + // ly18 + ln_set_rate = 207.877 + -0.152711 * tfactors.T9i + 15.325 * tfactors.T913i + -294.859 * tfactors.T913 + + 107.692 * tfactors.T9 + -46.2072 * tfactors.T953 + 57.8398 * tfactors.lnT9; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_C12); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_C12); + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.152711 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 15.325 * tfactors.T943i + (1.0/3.0) * -294.859 * tfactors.T923i + + 107.692 + (5.0/3.0) * -46.2072 * tfactors.T923 + 57.8398 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_He4_C12_to_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_C12_to_O16_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_C12_to_O16_reaclib) = drate_dT; + + // 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; } - } - { - // p_C13_to_N14_reaclib + // ly18 + ln_set_rate = 5.83103 + -8.838 * tfactors.T9i + 20.5893 * tfactors.T913i + -17.5841 * tfactors.T913 + + 0.243226 * tfactors.T9 + -0.000231418 * tfactors.T953 + 12.8398 * tfactors.lnT9; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_C13); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_C13); + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 8.838 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 20.5893 * tfactors.T943i + (1.0/3.0) * -17.5841 * tfactors.T923i + + 0.243226 + (5.0/3.0) * -0.000231418 * tfactors.T923 + 12.8398 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_p_C13_to_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_C13_to_N14_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_C13_to_N14_reaclib) = drate_dT; + + // 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; } - } - { - // p_N13_to_O14_reaclib + // ly18 + ln_set_rate = 230.019 + -4.45358 * tfactors.T9i + 258.57 * tfactors.T913i + -506.387 * tfactors.T913 + + 22.1576 * tfactors.T9 + -0.721182 * tfactors.T953 + 230.288 * tfactors.lnT9; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_N13); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N13); + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.45358 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 258.57 * tfactors.T943i + (1.0/3.0) * -506.387 * tfactors.T923i + + 22.1576 + (5.0/3.0) * -0.721182 * tfactors.T923 + 230.288 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_p_N13_to_O14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_N13_to_O14_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_N13_to_O14_reaclib) = drate_dT; + + // 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; } + } - { - // p_N14_to_O15_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_p_p_to_d_beta_pos_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_N14); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N14); + // p + p --> d + + 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}; + + // bet+w + ln_set_rate = -34.7863 + -3.51193 * tfactors.T913i + 3.10086 * tfactors.T913 + + -0.198314 * tfactors.T9 + 0.0126251 * tfactors.T953 + -1.02517 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -3.51193 * tfactors.T943i + (1.0/3.0) * 3.10086 * tfactors.T923i + + -0.198314 + (5.0/3.0) * 0.0126251 * tfactors.T923 + -1.02517 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_p_N14_to_O15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_N14_to_O15_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_N14_to_O15_reaclib) = drate_dT; + + // 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; } + } - { - // He4_N14_to_F18_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_p_p_to_d_electron_capture_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_N14); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N14); + // p + p --> d + + 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}; + + // ecw + ln_set_rate = -43.6499 + -0.00246064 * tfactors.T9i + -2.7507 * tfactors.T913i + -0.424877 * tfactors.T913 + + 0.015987 * tfactors.T9 + -0.000690875 * tfactors.T953 + -0.207625 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.00246064 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -2.7507 * tfactors.T943i + (1.0/3.0) * -0.424877 * tfactors.T923i + + 0.015987 + (5.0/3.0) * -0.000690875 * tfactors.T923 + -0.207625 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_He4_N14_to_F18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_N14_to_F18_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_N14_to_F18_reaclib) = drate_dT; + + // 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; } + } - { - // p_N15_to_O16_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_He3_He3_to_p_p_He4_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_N15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N15); + // He3 + He3 --> p + p + He4 + + 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}; + + // nacrn + ln_set_rate = 24.7788 + -12.277 * tfactors.T913i + -0.103699 * tfactors.T913 + + -0.0649967 * tfactors.T9 + 0.0168191 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_p_N15_to_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_N15_to_O16_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_N15_to_O16_reaclib) = drate_dT; + + // 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; } + } - { - // He4_N15_to_F19_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_He3_p_to_He4_beta_pos_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_N15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N15); + // He3 + p --> He4 + + 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}; + + // bet+w + ln_set_rate = -27.7611 + -4.30107e-12 * tfactors.T9i + -6.141 * tfactors.T913i + -1.93473e-09 * tfactors.T913 + + 2.04145e-10 * tfactors.T9 + -1.80372e-11 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.30107e-12 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -6.141 * tfactors.T943i + (1.0/3.0) * -1.93473e-09 * tfactors.T923i + + 2.04145e-10 + (5.0/3.0) * -1.80372e-11 * tfactors.T923 + -0.666667 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_He4_N15_to_F19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_N15_to_F19_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_N15_to_F19_reaclib) = drate_dT; + + // 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; } + } - { - // He4_O14_to_Ne18_reaclib + template + AMREX_GPU_DEVICE AMREX_INLINE + void rate_He3_He4_to_Be7_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O14); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O14); + // He3 + He4 --> 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}; + + // cd08n + ln_set_rate = 17.7075 + -12.8271 * tfactors.T913i + -3.8126 * tfactors.T913 + + 0.0942285 * tfactors.T9 + -0.00301018 * tfactors.T953 + 1.33333 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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 + 1.33333 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_He4_O14_to_Ne18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_O14_to_Ne18_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_O14_to_Ne18_reaclib) = drate_dT; + + // 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; } - } - { - // He4_O15_to_Ne19_reaclib + // cd08n + ln_set_rate = 15.6099 + -12.8271 * tfactors.T913i + -0.0308225 * tfactors.T913 + + -0.654685 * tfactors.T9 + 0.0896331 * tfactors.T953 + -0.666667 * tfactors.lnT9; - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O15); + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(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.666667 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } -#endif - rate_He4_O15_to_Ne19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_O15_to_Ne19_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_O15_to_Ne19_reaclib) = drate_dT; + + // 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_DEVICE AMREX_INLINE + void + fill_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] T& rate_eval) { - // p_O16_to_F17_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O16); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O16); + [[maybe_unused]] amrex::Real rate; + [[maybe_unused]] amrex::Real drate_dT; + + { + // N13_to_C13_beta_pos_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_N13_to_C13_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N13_to_C13_beta_pos_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N13_to_C13_beta_pos_reaclib) = drate_dT; + } } -#endif - rate_p_O16_to_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_O16_to_F17_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O16_to_F17_reaclib) = drate_dT; + + { + // O14_to_N14_beta_pos_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O14_to_N14_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O14_to_N14_beta_pos_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O14_to_N14_beta_pos_reaclib) = drate_dT; + } } - } - { - // He4_O16_to_Ne20_reaclib + { + // O15_to_N15_beta_pos_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; -#ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O16); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O16); + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_O15_to_N15_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O15_to_N15_beta_pos_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O15_to_N15_beta_pos_reaclib) = drate_dT; + } } + + { + // C12_p_to_N13_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_C12); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_C12); + } #endif - rate_He4_O16_to_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_O16_to_Ne20_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_O16_to_Ne20_reaclib) = drate_dT; + rate_C12_p_to_N13_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_p_to_N13_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_p_to_N13_reaclib) = drate_dT; + } } - } - { - // p_O17_to_F18_reaclib + { + // C12_He4_to_O16_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O17); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O17); + log_scor = rate_eval.log_screen(k_He4_C12); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_C12); + } +#endif + rate_C12_He4_to_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_He4_to_O16_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_He4_to_O16_reaclib) = drate_dT; + } } + + { + // C13_p_to_N14_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_C13); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_C13); + } #endif - rate_p_O17_to_F18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_O17_to_F18_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O17_to_F18_reaclib) = drate_dT; + rate_C13_p_to_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C13_p_to_N14_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C13_p_to_N14_reaclib) = drate_dT; + } } - } - { - // p_O18_to_F19_reaclib + { + // N13_p_to_O14_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O18); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O18); + log_scor = rate_eval.log_screen(k_p_N13); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N13); + } +#endif + rate_N13_p_to_O14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N13_p_to_O14_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N13_p_to_O14_reaclib) = drate_dT; + } } + + { + // N14_p_to_O15_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_N14); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N14); + } #endif - rate_p_O18_to_F19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_O18_to_F19_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O18_to_F19_reaclib) = drate_dT; + rate_N14_p_to_O15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N14_p_to_O15_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N14_p_to_O15_reaclib) = drate_dT; + } } - } - { - // p_F17_to_Ne18_reaclib + { + // N14_He4_to_F18_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F17); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F17); + log_scor = rate_eval.log_screen(k_He4_N14); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N14); + } +#endif + rate_N14_He4_to_F18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N14_He4_to_F18_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N14_He4_to_F18_reaclib) = drate_dT; + } } + + { + // N15_p_to_O16_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_N15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N15); + } #endif - rate_p_F17_to_Ne18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_F17_to_Ne18_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_F17_to_Ne18_reaclib) = drate_dT; + rate_N15_p_to_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N15_p_to_O16_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N15_p_to_O16_reaclib) = drate_dT; + } } - } - { - // p_F18_to_Ne19_reaclib + { + // N15_He4_to_F19_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F18); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F18); + log_scor = rate_eval.log_screen(k_He4_N15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N15); + } +#endif + rate_N15_He4_to_F19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N15_He4_to_F19_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N15_He4_to_F19_reaclib) = drate_dT; + } } + + { + // O14_He4_to_Ne18_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_O14); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O14); + } #endif - rate_p_F18_to_Ne19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_F18_to_Ne19_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_F18_to_Ne19_reaclib) = drate_dT; + rate_O14_He4_to_Ne18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O14_He4_to_Ne18_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O14_He4_to_Ne18_reaclib) = drate_dT; + } } - } - { - // p_F19_to_Ne20_reaclib + { + // O15_He4_to_Ne19_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F19); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F19); + log_scor = rate_eval.log_screen(k_He4_O15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O15); + } +#endif + rate_O15_He4_to_Ne19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O15_He4_to_Ne19_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O15_He4_to_Ne19_reaclib) = drate_dT; + } } + + { + // O16_p_to_F17_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O16); + } #endif - rate_p_F19_to_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_F19_to_Ne20_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_F19_to_Ne20_reaclib) = drate_dT; + rate_O16_p_to_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O16_p_to_F17_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_p_to_F17_reaclib) = drate_dT; + } } - } - { - // He4_Ne18_to_Mg22_reaclib + { + // O16_He4_to_Ne20_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_Ne18); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne18); + log_scor = rate_eval.log_screen(k_He4_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O16); + } +#endif + rate_O16_He4_to_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O16_He4_to_Ne20_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_He4_to_Ne20_reaclib) = drate_dT; + } } + + { + // O17_p_to_F18_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_O17); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O17); + } #endif - rate_He4_Ne18_to_Mg22_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ne18_to_Mg22_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ne18_to_Mg22_reaclib) = drate_dT; + rate_O17_p_to_F18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O17_p_to_F18_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O17_p_to_F18_reaclib) = drate_dT; + } } - } - { - // He4_Ne20_to_Mg24_reaclib + { + // O18_p_to_F19_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_Ne20); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne20); + log_scor = rate_eval.log_screen(k_p_O18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O18); + } +#endif + rate_O18_p_to_F19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O18_p_to_F19_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O18_p_to_F19_reaclib) = drate_dT; + } } + + { + // F17_p_to_Ne18_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_F17); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F17); + } #endif - rate_He4_Ne20_to_Mg24_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ne20_to_Mg24_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_Mg24_reaclib) = drate_dT; + rate_F17_p_to_Ne18_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_F17_p_to_Ne18_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_p_to_Ne18_reaclib) = drate_dT; + } } - } - { - // C12_C12_to_He4_Ne20_reaclib + { + // F18_p_to_Ne19_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_C12_C12); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_C12); + log_scor = rate_eval.log_screen(k_p_F18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F18); + } +#endif + rate_F18_p_to_Ne19_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_F18_p_to_Ne19_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_p_to_Ne19_reaclib) = drate_dT; + } } + + { + // F19_p_to_Ne20_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_F19); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F19); + } #endif - rate_C12_C12_to_He4_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_C12_C12_to_He4_Ne20_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_C12_to_He4_Ne20_reaclib) = drate_dT; + rate_F19_p_to_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_F19_p_to_Ne20_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F19_p_to_Ne20_reaclib) = drate_dT; + } } - } - { - // He4_N13_to_p_O16_reaclib + { + // Ne20_He4_to_Mg24_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_N13); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N13); + log_scor = rate_eval.log_screen(k_He4_Ne20); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne20); + } +#endif + rate_Ne20_He4_to_Mg24_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne20_He4_to_Mg24_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_He4_to_Mg24_reaclib) = drate_dT; + } } + + { + // N13_He4_to_p_O16_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_N13); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_N13); + } #endif - rate_He4_N13_to_p_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_N13_to_p_O16_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_N13_to_p_O16_reaclib) = drate_dT; + rate_N13_He4_to_p_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N13_He4_to_p_O16_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N13_He4_to_p_O16_reaclib) = drate_dT; + } } - } - { - // p_N15_to_He4_C12_reaclib + { + // N15_p_to_He4_C12_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_N15); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N15); + log_scor = rate_eval.log_screen(k_p_N15); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_N15); + } +#endif + rate_N15_p_to_He4_C12_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_N15_p_to_He4_C12_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_N15_p_to_He4_C12_reaclib) = drate_dT; + } } + + { + // O14_He4_to_p_F17_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_O14); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O14); + } #endif - rate_p_N15_to_He4_C12_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_N15_to_He4_C12_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_N15_to_He4_C12_reaclib) = drate_dT; + rate_O14_He4_to_p_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O14_He4_to_p_F17_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O14_He4_to_p_F17_reaclib) = drate_dT; + } } - } - { - // He4_O14_to_p_F17_reaclib + { + // O17_p_to_He4_N14_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_O14); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_O14); + log_scor = rate_eval.log_screen(k_p_O17); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O17); + } +#endif + rate_O17_p_to_He4_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O17_p_to_He4_N14_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O17_p_to_He4_N14_reaclib) = drate_dT; + } } + + { + // O18_p_to_He4_N15_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_O18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O18); + } #endif - rate_He4_O14_to_p_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_O14_to_p_F17_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_O14_to_p_F17_reaclib) = drate_dT; + rate_O18_p_to_He4_N15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O18_p_to_He4_N15_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O18_p_to_He4_N15_reaclib) = drate_dT; + } } - } - { - // C12_O16_to_He4_Mg24_reaclib + { + // F18_p_to_He4_O15_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_C12_O16); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_O16); + log_scor = rate_eval.log_screen(k_p_F18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F18); + } +#endif + rate_F18_p_to_He4_O15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_F18_p_to_He4_O15_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_p_to_He4_O15_reaclib) = drate_dT; + } } + + { + // F19_p_to_He4_O16_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_F19); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F19); + } #endif - rate_C12_O16_to_He4_Mg24_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_C12_O16_to_He4_Mg24_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_O16_to_He4_Mg24_reaclib) = drate_dT; + rate_F19_p_to_He4_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_F19_p_to_He4_O16_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F19_p_to_He4_O16_reaclib) = drate_dT; + } } - } - { - // p_O17_to_He4_N14_reaclib + { + // Ne20_p_to_He4_F17_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O17); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O17); + log_scor = rate_eval.log_screen(k_p_Ne20); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne20); + } +#endif + rate_Ne20_p_to_He4_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne20_p_to_He4_F17_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_p_to_He4_F17_reaclib) = drate_dT; + } } + + { + // He4_He4_He4_to_C12_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_He4) + rate_eval.log_screen(k_He4_Be8); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_He4) + rate_eval.dlog_screen_dT(k_He4_Be8); + } #endif - rate_p_O17_to_He4_N14_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_O17_to_He4_N14_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O17_to_He4_N14_reaclib) = drate_dT; + rate_He4_He4_He4_to_C12_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_He4_He4_to_C12_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib) = drate_dT; + } } - } - { - // p_O18_to_He4_N15_reaclib + { + // Ne18_He4_to_p_Na21_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_O18); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_O18); + log_scor = rate_eval.log_screen(k_He4_Ne18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne18); + } +#endif + rate_Ne18_He4_to_p_Na21_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne18_He4_to_p_Na21_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_He4_to_p_Na21_reaclib) = drate_dT; + } } + + { + // Ne18_He4_to_Mg22_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_Ne18); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne18); + } #endif - rate_p_O18_to_He4_N15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_O18_to_He4_N15_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O18_to_He4_N15_reaclib) = drate_dT; + rate_Ne18_He4_to_Mg22_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne18_He4_to_Mg22_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_He4_to_Mg22_reaclib) = drate_dT; + } } - } - { - // p_F18_to_He4_O15_reaclib + { + // Na21_p_to_Mg22_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F18); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F18); + log_scor = rate_eval.log_screen(k_p_Na21); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Na21); + } +#endif + rate_Na21_p_to_Mg22_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Na21_p_to_Mg22_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Na21_p_to_Mg22_reaclib) = drate_dT; + } } + + { + // Ne19_p_to_Na20_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_Ne19); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne19); + } #endif - rate_p_F18_to_He4_O15_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_F18_to_He4_O15_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_F18_to_He4_O15_reaclib) = drate_dT; + rate_Ne19_p_to_Na20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne19_p_to_Na20_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne19_p_to_Na20_reaclib) = drate_dT; + } } - } - { - // p_F19_to_He4_O16_reaclib + { + // Ne20_p_to_Na21_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_F19); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_F19); + log_scor = rate_eval.log_screen(k_p_Ne20); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne20); + } +#endif + rate_Ne20_p_to_Na21_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_Ne20_p_to_Na21_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne20_p_to_Na21_reaclib) = drate_dT; + } } + + { + // p_p_to_d_beta_pos_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_p); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_p); + } #endif - rate_p_F19_to_He4_O16_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_F19_to_He4_O16_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_F19_to_He4_O16_reaclib) = drate_dT; + rate_p_p_to_d_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_beta_pos_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_to_d_beta_pos_reaclib) = drate_dT; + } } - } - { - // p_Ne20_to_He4_F17_reaclib + { + // p_p_to_d_electron_capture_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_p_Ne20); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ne20); + log_scor = rate_eval.log_screen(k_p_p); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_p); + } +#endif + rate_p_p_to_d_electron_capture_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_p_to_d_electron_capture_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_p_to_d_electron_capture_reaclib) = drate_dT; + } } + + { + // He3_He3_to_p_p_He4_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He3_He3); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He3_He3); + } #endif - rate_p_Ne20_to_He4_F17_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_p_Ne20_to_He4_F17_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Ne20_to_He4_F17_reaclib) = drate_dT; + rate_He3_He3_to_p_p_He4_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_He3_to_p_p_He4_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He3_He3_to_p_p_He4_reaclib) = drate_dT; + } } - } - { - // He4_He4_He4_to_C12_reaclib + { + // He3_p_to_He4_beta_pos_reaclib - amrex::Real log_scor {0.0_rt}; - amrex::Real dlog_scor_dT {0.0_rt}; + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; #ifdef SCREENING - log_scor = rate_eval.log_screen(k_He4_He4) + rate_eval.log_screen(k_He4_Be8); - if constexpr (std::is_same_v) { - dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_He4) + rate_eval.dlog_screen_dT(k_He4_Be8); + log_scor = rate_eval.log_screen(k_p_He3); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_He3); + } +#endif + rate_He3_p_to_He4_beta_pos_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_p_to_He4_beta_pos_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He3_p_to_He4_beta_pos_reaclib) = drate_dT; + } } + + { + // He3_He4_to_Be7_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He3_He4); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He3_He4); + } #endif - rate_He4_He4_He4_to_C12_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); - rate_eval.screened_rates(k_He4_He4_He4_to_C12_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib) = drate_dT; + rate_He3_He4_to_Be7_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He3_He4_to_Be7_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He3_He4_to_Be7_reaclib) = drate_dT; + } } - } + } } - #endif diff --git a/networks/CNO_extras/tabular_weak_rates.H b/networks/CNO_extras/tabular_weak_rates.H new file mode 100644 index 000000000..f5828f9de --- /dev/null +++ b/networks/CNO_extras/tabular_weak_rates.H @@ -0,0 +1,100 @@ +#ifndef TABULAR_WEAK_RATES_H +#define TABULAR_WEAK_RATES_H + +#include + +#include + +namespace tabular_weak_rates { + + using namespace Rates; + using namespace Species; + + using namespace rate_tables; + + template + AMREX_GPU_DEVICE AMREX_INLINE + void + fill_rates([[maybe_unused]] const amrex::Real temp, + [[maybe_unused]] const amrex::Real rhoy, + [[maybe_unused]] const amrex::Array1D& Y, + [[maybe_unused]] T& rate_eval) + { + + // Calculate tabular weak rates + + [[maybe_unused]] amrex::Real rate, drate_dt, edot_nu, edot_gamma; + + rate_eval.enuc_weak = 0.0_rt; + + const amrex::Real log_temp = std::log10(temp); + const 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, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F17_to_O17_electron_capture_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F17_to_O17_electron_capture_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, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_O17_to_F17_beta_neg_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O17_to_F17_beta_neg_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(O17) * (edot_nu + edot_gamma); + + tabular_evaluate(j_F18_Ne18_meta, j_F18_Ne18_rhoy, j_F18_Ne18_temp, j_F18_Ne18_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F18_to_Ne18_beta_neg_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_to_Ne18_beta_neg_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); + + tabular_evaluate(j_F18_O18_meta, j_F18_O18_rhoy, j_F18_O18_temp, j_F18_O18_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F18_to_O18_electron_capture_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F18_to_O18_electron_capture_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(F18) * (edot_nu + edot_gamma); + + tabular_evaluate(j_Ne18_F18_meta, j_Ne18_F18_rhoy, j_Ne18_F18_temp, j_Ne18_F18_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_Ne18_to_F18_electron_capture_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne18_to_F18_electron_capture_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(Ne18) * (edot_nu + edot_gamma); + + tabular_evaluate(j_O18_F18_meta, j_O18_F18_rhoy, j_O18_F18_temp, j_O18_F18_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_O18_to_F18_beta_neg_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O18_to_F18_beta_neg_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(O18) * (edot_nu + edot_gamma); + + tabular_evaluate(j_F19_Ne19_meta, j_F19_Ne19_rhoy, j_F19_Ne19_temp, j_F19_Ne19_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_F19_to_Ne19_beta_neg_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_F19_to_Ne19_beta_neg_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(F19) * (edot_nu + edot_gamma); + + tabular_evaluate(j_Ne19_F19_meta, j_Ne19_F19_rhoy, j_Ne19_F19_temp, j_Ne19_F19_data, + log_rhoy, log_temp, temp, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_Ne19_to_F19_electron_capture_weaktab) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ne19_to_F19_electron_capture_weaktab) = drate_dt; + } + rate_eval.enuc_weak += C::n_A * Y(Ne19) * (edot_nu + edot_gamma); + + } + +} +#endif diff --git a/networks/CNO_extras/temperature_table_rates.H b/networks/CNO_extras/temperature_table_rates.H index 849033267..6f88b70ce 100644 --- a/networks/CNO_extras/temperature_table_rates.H +++ b/networks/CNO_extras/temperature_table_rates.H @@ -9,21 +9,19 @@ using namespace amrex::literals; -using namespace Rates; - namespace temp_tabular { + using namespace Rates; + template - AMREX_GPU_HOST_DEVICE AMREX_INLINE + AMREX_GPU_DEVICE AMREX_INLINE void - fill_rates(const tf_t& tfactors, T& rate_eval) + fill_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] T& rate_eval) { - amrex::ignore_unused(tfactors); - amrex::ignore_unused(rate_eval); - [[maybe_unused]] amrex::Real rate; [[maybe_unused]] amrex::Real drate_dT; @@ -31,6 +29,5 @@ namespace temp_tabular { } - } #endif