From 5e4f36ac815043852a6e0920e8d93acee73d7c3d Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 10 May 2026 09:25:04 -0400 Subject: [PATCH 1/2] update network --- networks/he-burn/ase-iron/Make.package | 4 +- networks/he-burn/ase-iron/actual_network.H | 614 ++-- networks/he-burn/ase-iron/actual_rhs.H | 1230 ++++---- networks/he-burn/ase-iron/ase-iron.png | Bin 79340 -> 78211 bytes networks/he-burn/ase-iron/ase_iron.py | 6 +- networks/he-burn/ase-iron/derived_rates.H | 1978 +++++++++---- .../he-burn/ase-iron/partition_functions.H | 79 +- networks/he-burn/ase-iron/pynucastro-info.txt | 2 +- networks/he-burn/ase-iron/pynucastro.net | 2 + networks/he-burn/ase-iron/reaclib_rates.H | 2483 +++++++++++------ .../ase-iron/temperature_table_rates.H | 3 +- 11 files changed, 4042 insertions(+), 2359 deletions(-) diff --git a/networks/he-burn/ase-iron/Make.package b/networks/he-burn/ase-iron/Make.package index fd942a5ce..35413fdcf 100644 --- a/networks/he-burn/ase-iron/Make.package +++ b/networks/he-burn/ase-iron/Make.package @@ -2,13 +2,15 @@ PYNUCASTRO_NETWORK = TRUE CEXE_headers += network_properties.H ifeq ($(USE_REACT),TRUE) - CEXE_sources += actual_network_data.cpp CEXE_headers += actual_network.H CEXE_headers += tfactors.H CEXE_headers += interp_tools.H CEXE_headers += partition_functions.H CEXE_headers += actual_rhs.H + CEXE_headers += rate_type.H CEXE_headers += reaclib_rates.H + CEXE_headers += approximate_rates.H + CEXE_headers += modified_rates.H CEXE_headers += table_rates.H CEXE_headers += temperature_table_rates.H CEXE_headers += derived_rates.H diff --git a/networks/he-burn/ase-iron/actual_network.H b/networks/he-burn/ase-iron/actual_network.H index 0aaa22d7c..3ff57c477 100644 --- a/networks/he-burn/ase-iron/actual_network.H +++ b/networks/he-burn/ase-iron/actual_network.H @@ -1,18 +1,25 @@ #ifndef actual_network_H #define actual_network_H +#include #include #include #include #include +#include #include #include using namespace amrex::literals; -void actual_network_init(); + +inline +void actual_network_init() { + + +} constexpr std::string_view network_name = "pynucastro-cxx"; @@ -106,6 +113,12 @@ namespace network else if constexpr (spec == Ni58) { return 506.4596327920008_rt; } + else if constexpr (spec == Cu59) { + return 509.8782038560021_rt; + } + else if constexpr (spec == Zn60) { + return 514.9831749199948_rt; + } // Return zero if we don't recognize the species. @@ -199,6 +212,12 @@ namespace network else if constexpr (spec == Ni58) { return 9.620389809618879e-23_rt; } + else if constexpr (spec == Cu59) { + return 9.787133677749025e-23_rt; + } + else if constexpr (spec == Zn60) { + return 9.953576917772707e-23_rt; + } // Return zero if we don't recognize the species. @@ -259,134 +278,191 @@ namespace Rates k_He4_Mn51_to_Co55_reaclib = 12, k_He4_Fe52_to_Ni56_reaclib = 13, k_p_Co55_to_Ni56_reaclib = 14, - k_C12_C12_to_p_Na23_reaclib = 15, - k_C12_C12_to_He4_Ne20_reaclib = 16, - k_He4_N13_to_p_O16_reaclib = 17, - k_C12_O16_to_p_Al27_reaclib = 18, - k_C12_O16_to_He4_Mg24_reaclib = 19, - k_O16_O16_to_p_P31_reaclib = 20, - k_O16_O16_to_He4_Si28_reaclib = 21, - k_p_Na23_to_He4_Ne20_reaclib = 22, - k_p_Al27_to_He4_Mg24_reaclib = 23, - k_p_P31_to_He4_Si28_reaclib = 24, - k_He4_Cr48_to_p_Mn51_reaclib = 25, - k_He4_Fe52_to_p_Co55_reaclib = 26, - k_He4_He4_He4_to_C12_reaclib = 27, - k_C12_C12_to_n_Mg23_removed = 28, - k_O16_O16_to_n_S31_removed = 29, - k_C12_O16_to_n_Si27_removed = 30, - k_p_Fe54_to_Co55_reaclib = 31, - k_He4_Fe54_to_Ni58_reaclib = 32, - k_p_Fe56_to_Co57_reaclib = 33, - k_n_Co55_to_Co56_reaclib = 34, - k_n_Co56_to_Co57_reaclib = 35, - k_p_Co57_to_Ni58_reaclib = 36, - k_He4_Mn51_to_p_Fe54_reaclib = 37, - k_He4_Co55_to_p_Ni58_reaclib = 38, - k_n_Co56_to_p_Fe56_reaclib = 39, - k_p_Co57_to_He4_Fe54_reaclib = 40, - k_n_Ni56_to_p_Co56_reaclib = 41, - k_He4_S32_to_Ar36_removed = 42, - k_p_Cl35_to_Ar36_removed = 43, - k_p_Cl35_to_He4_S32_removed = 44, - k_He4_Ar36_to_Ca40_removed = 45, - k_p_K39_to_Ca40_removed = 46, - k_p_K39_to_He4_Ar36_removed = 47, - k_He4_Ca40_to_Ti44_removed = 48, - k_p_Sc43_to_Ti44_removed = 49, - k_p_Sc43_to_He4_Ca40_removed = 50, - k_He4_Ti44_to_Cr48_removed = 51, - k_He4_Ti44_to_p_V47_removed = 52, - k_p_V47_to_Cr48_removed = 53, - k_n_Fe52_to_Fe53_removed = 54, - k_n_Fe53_to_Fe54_removed = 55, - k_n_Fe54_to_Fe55_removed = 56, - k_n_Fe55_to_Fe56_removed = 57, - k_n_Ni56_to_Ni57_removed = 58, - k_n_Ni57_to_Ni58_removed = 59, - k_Co56_to_Fe56_weaktab = 60, - k_Co56_to_Ni56_weaktab = 61, - k_Fe56_to_Co56_weaktab = 62, - k_Ni56_to_Co56_weaktab = 63, - k_n_to_p_weaktab = 64, - k_p_to_n_weaktab = 65, - k_S32_He4_to_Ar36_approx = 66, - k_Ar36_to_S32_He4_approx = 67, - k_Ar36_He4_to_Ca40_approx = 68, - k_Ca40_to_Ar36_He4_approx = 69, - k_Ca40_He4_to_Ti44_approx = 70, - k_Ti44_to_Ca40_He4_approx = 71, - k_Ti44_He4_to_Cr48_approx = 72, - k_Cr48_to_Ti44_He4_approx = 73, - k_Fe52_n_n_to_Fe54_approx = 74, - k_Fe54_to_Fe52_n_n_approx = 75, - k_Fe54_n_n_to_Fe56_approx = 76, - k_Fe56_to_Fe54_n_n_approx = 77, - k_Ni56_n_n_to_Ni58_approx = 78, - k_Ni58_to_Ni56_n_n_approx = 79, - k_C12_C12_to_Mg24_modified = 80, - k_O16_O16_to_S32_modified = 81, - k_C12_O16_to_Si28_modified = 82, - k_N13_to_p_C12_derived = 83, - k_O16_to_He4_C12_derived = 84, - k_Ne20_to_He4_O16_derived = 85, - k_Mg24_to_p_Na23_derived = 86, - k_Mg24_to_He4_Ne20_derived = 87, - k_Si28_to_p_Al27_derived = 88, - k_Si28_to_He4_Mg24_derived = 89, - k_S32_to_p_P31_derived = 90, - k_S32_to_He4_Si28_derived = 91, - k_Fe52_to_p_Mn51_derived = 92, - k_Fe52_to_He4_Cr48_derived = 93, - k_Co55_to_He4_Mn51_derived = 94, - k_Ni56_to_p_Co55_derived = 95, - k_Ni56_to_He4_Fe52_derived = 96, - k_C12_to_He4_He4_He4_derived = 97, - k_p_O16_to_He4_N13_derived = 98, - k_He4_Ne20_to_p_Na23_derived = 99, - k_He4_Ne20_to_C12_C12_derived = 100, - k_p_Na23_to_C12_C12_derived = 101, - k_He4_Mg24_to_p_Al27_derived = 102, - k_He4_Mg24_to_C12_O16_derived = 103, - k_p_Al27_to_C12_O16_derived = 104, - k_He4_Si28_to_p_P31_derived = 105, - k_He4_Si28_to_O16_O16_derived = 106, - k_p_P31_to_O16_O16_derived = 107, - k_p_Mn51_to_He4_Cr48_derived = 108, - k_p_Co55_to_He4_Fe52_derived = 109, - k_Mg24_to_C12_C12_derived = 110, - k_S32_to_O16_O16_derived = 111, - k_Si28_to_C12_O16_derived = 112, - k_Co55_to_p_Fe54_derived = 113, - k_Co56_to_n_Co55_derived = 114, - k_Co57_to_n_Co56_derived = 115, - k_Co57_to_p_Fe56_derived = 116, - k_Ni58_to_p_Co57_derived = 117, - k_Ni58_to_He4_Fe54_derived = 118, - k_p_Fe54_to_He4_Mn51_derived = 119, - k_He4_Fe54_to_p_Co57_derived = 120, - k_p_Fe56_to_n_Co56_derived = 121, - k_p_Co56_to_n_Ni56_derived = 122, - k_p_Ni58_to_He4_Co55_derived = 123, - k_He4_S32_to_p_Cl35_removed = 124, - k_Ar36_to_He4_S32_removed = 125, - k_Ar36_to_p_Cl35_removed = 126, - k_He4_Ar36_to_p_K39_removed = 127, - k_Ca40_to_He4_Ar36_removed = 128, - k_Ca40_to_p_K39_removed = 129, - k_He4_Ca40_to_p_Sc43_removed = 130, - k_Ti44_to_He4_Ca40_removed = 131, - k_Ti44_to_p_Sc43_removed = 132, - k_Cr48_to_He4_Ti44_removed = 133, - k_Cr48_to_p_V47_removed = 134, - k_p_V47_to_He4_Ti44_removed = 135, - k_Fe54_to_n_Fe53_removed = 136, - k_Fe53_to_n_Fe52_removed = 137, - k_Fe56_to_n_Fe55_removed = 138, - k_Fe55_to_n_Fe54_removed = 139, - k_Ni58_to_n_Ni57_removed = 140, - k_Ni57_to_n_Ni56_removed = 141, - NumRates = k_Ni57_to_n_Ni56_removed + k_He4_Co55_to_Cu59_reaclib = 15, + k_He4_Ni56_to_Zn60_reaclib = 16, + k_p_Cu59_to_Zn60_reaclib = 17, + k_C12_C12_to_p_Na23_reaclib = 18, + k_C12_C12_to_He4_Ne20_reaclib = 19, + k_He4_N13_to_p_O16_reaclib = 20, + k_C12_O16_to_p_Al27_reaclib = 21, + k_C12_O16_to_He4_Mg24_reaclib = 22, + k_O16_O16_to_p_P31_reaclib = 23, + k_O16_O16_to_He4_Si28_reaclib = 24, + k_p_Na23_to_He4_Ne20_reaclib = 25, + k_p_Al27_to_He4_Mg24_reaclib = 26, + k_p_P31_to_He4_Si28_reaclib = 27, + k_He4_Cr48_to_p_Mn51_reaclib = 28, + k_He4_Fe52_to_p_Co55_reaclib = 29, + k_p_Cu59_to_He4_Ni56_reaclib = 30, + k_He4_He4_He4_to_C12_reaclib = 31, + k_C12_C12_to_n_Mg23_reaclib = 32, + k_O16_O16_to_n_S31_reaclib = 33, + k_C12_O16_to_n_Si27_reaclib = 34, + k_p_Fe54_to_Co55_reaclib = 35, + k_He4_Fe54_to_Ni58_reaclib = 36, + k_p_Fe56_to_Co57_reaclib = 37, + k_n_Co55_to_Co56_reaclib = 38, + k_n_Co56_to_Co57_reaclib = 39, + k_p_Co57_to_Ni58_reaclib = 40, + k_p_Ni58_to_Cu59_reaclib = 41, + k_He4_Mn51_to_p_Fe54_reaclib = 42, + k_He4_Co55_to_p_Ni58_reaclib = 43, + k_n_Co56_to_p_Fe56_reaclib = 44, + k_p_Co57_to_He4_Fe54_reaclib = 45, + k_n_Ni56_to_p_Co56_reaclib = 46, + k_n_Cu59_to_He4_Co56_reaclib = 47, + k_He4_S32_to_Ar36_reaclib = 48, + k_p_Cl35_to_Ar36_reaclib = 49, + k_p_Cl35_to_He4_S32_reaclib = 50, + k_He4_Ar36_to_Ca40_reaclib = 51, + k_p_K39_to_Ca40_reaclib = 52, + k_p_K39_to_He4_Ar36_reaclib = 53, + k_He4_Ca40_to_Ti44_reaclib = 54, + k_p_Sc43_to_Ti44_reaclib = 55, + k_p_Sc43_to_He4_Ca40_reaclib = 56, + k_He4_Ti44_to_Cr48_reaclib = 57, + k_He4_Ti44_to_p_V47_reaclib = 58, + k_p_V47_to_Cr48_reaclib = 59, + k_n_Fe52_to_Fe53_reaclib = 60, + k_n_Fe53_to_Fe54_reaclib = 61, + k_n_Fe54_to_Fe55_reaclib = 62, + k_n_Fe55_to_Fe56_reaclib = 63, + k_n_Ni56_to_Ni57_reaclib = 64, + k_n_Ni57_to_Ni58_reaclib = 65, + k_Co56_to_Fe56_weaktab = 66, + k_Co56_to_Ni56_weaktab = 67, + k_Fe56_to_Co56_weaktab = 68, + k_Ni56_to_Co56_weaktab = 69, + k_n_to_p_weaktab = 70, + k_p_to_n_weaktab = 71, + k_S32_He4_to_Ar36_approx = 72, + k_Ar36_to_S32_He4_approx = 73, + k_Ar36_He4_to_Ca40_approx = 74, + k_Ca40_to_Ar36_He4_approx = 75, + k_Ca40_He4_to_Ti44_approx = 76, + k_Ti44_to_Ca40_He4_approx = 77, + k_Ti44_He4_to_Cr48_approx = 78, + k_Cr48_to_Ti44_He4_approx = 79, + k_Fe52_n_n_to_Fe54_approx = 80, + k_Fe54_to_Fe52_n_n_approx = 81, + k_Fe54_n_n_to_Fe56_approx = 82, + k_Fe56_to_Fe54_n_n_approx = 83, + k_Ni56_n_n_to_Ni58_approx = 84, + k_Ni58_to_Ni56_n_n_approx = 85, + k_C12_C12_to_Mg24_modified = 86, + k_O16_O16_to_S32_modified = 87, + k_C12_O16_to_Si28_modified = 88, + k_N13_to_p_C12_derived = 89, + k_O16_to_He4_C12_derived = 90, + k_Ne20_to_He4_O16_derived = 91, + k_Mg24_to_p_Na23_derived = 92, + k_Mg24_to_He4_Ne20_derived = 93, + k_Si28_to_p_Al27_derived = 94, + k_Si28_to_He4_Mg24_derived = 95, + k_S32_to_p_P31_derived = 96, + k_S32_to_He4_Si28_derived = 97, + k_Fe52_to_p_Mn51_derived = 98, + k_Fe52_to_He4_Cr48_derived = 99, + k_Co55_to_He4_Mn51_derived = 100, + k_Ni56_to_p_Co55_derived = 101, + k_Ni56_to_He4_Fe52_derived = 102, + k_Cu59_to_He4_Co55_derived = 103, + k_Zn60_to_p_Cu59_derived = 104, + k_Zn60_to_He4_Ni56_derived = 105, + k_C12_to_He4_He4_He4_derived = 106, + k_p_O16_to_He4_N13_derived = 107, + k_He4_Ne20_to_p_Na23_derived = 108, + k_He4_Ne20_to_C12_C12_derived = 109, + k_p_Na23_to_C12_C12_derived = 110, + k_He4_Mg24_to_p_Al27_derived = 111, + k_He4_Mg24_to_C12_O16_derived = 112, + k_p_Al27_to_C12_O16_derived = 113, + k_He4_Si28_to_p_P31_derived = 114, + k_He4_Si28_to_O16_O16_derived = 115, + k_p_P31_to_O16_O16_derived = 116, + k_p_Mn51_to_He4_Cr48_derived = 117, + k_p_Co55_to_He4_Fe52_derived = 118, + k_He4_Ni56_to_p_Cu59_derived = 119, + k_Mg24_to_C12_C12_derived = 120, + k_S32_to_O16_O16_derived = 121, + k_Si28_to_C12_O16_derived = 122, + k_Co55_to_p_Fe54_derived = 123, + k_Co56_to_n_Co55_derived = 124, + k_Co57_to_n_Co56_derived = 125, + k_Co57_to_p_Fe56_derived = 126, + k_Ni58_to_p_Co57_derived = 127, + k_Ni58_to_He4_Fe54_derived = 128, + k_Cu59_to_p_Ni58_derived = 129, + k_p_Fe54_to_He4_Mn51_derived = 130, + k_He4_Fe54_to_p_Co57_derived = 131, + k_p_Fe56_to_n_Co56_derived = 132, + k_p_Co56_to_n_Ni56_derived = 133, + k_He4_Co56_to_n_Cu59_derived = 134, + k_p_Ni58_to_He4_Co55_derived = 135, + k_He4_S32_to_p_Cl35_derived = 136, + k_Ar36_to_He4_S32_derived = 137, + k_Ar36_to_p_Cl35_derived = 138, + k_He4_Ar36_to_p_K39_derived = 139, + k_Ca40_to_He4_Ar36_derived = 140, + k_Ca40_to_p_K39_derived = 141, + k_He4_Ca40_to_p_Sc43_derived = 142, + k_Ti44_to_He4_Ca40_derived = 143, + k_Ti44_to_p_Sc43_derived = 144, + k_Cr48_to_He4_Ti44_derived = 145, + k_Cr48_to_p_V47_derived = 146, + k_p_V47_to_He4_Ti44_derived = 147, + k_Fe54_to_n_Fe53_derived = 148, + k_Fe53_to_n_Fe52_derived = 149, + k_Fe56_to_n_Fe55_derived = 150, + k_Fe55_to_n_Fe54_derived = 151, + k_Ni58_to_n_Ni57_derived = 152, + k_Ni57_to_n_Ni56_derived = 153, + NumRates = k_Ni57_to_n_Ni56_derived + }; + + enum ScreenPairs : + std::uint8_t + { + k_p_C12 = 1, + k_He4_O16 = 2, + k_p_Co57 = 3, + k_p_K39 = 4, + k_He4_Ca40 = 5, + k_He4_Ar36 = 6, + k_p_Sc43 = 7, + k_p_Fe56 = 8, + k_He4_C12 = 9, + k_He4_Ti44 = 10, + k_He4_Mg24 = 11, + k_C12_O16 = 12, + k_p_V47 = 13, + k_He4_Cr48 = 14, + k_p_Co55 = 15, + k_C12_C12 = 16, + k_He4_Ne20 = 17, + k_p_Al27 = 18, + k_p_Mn51 = 19, + k_p_Na23 = 20, + k_p_Co56 = 21, + k_p_Fe54 = 22, + k_He4_Fe52 = 23, + k_p_Cu59 = 24, + k_He4_S32 = 25, + k_He4_Mn51 = 26, + k_He4_Co55 = 27, + k_He4_Ni56 = 28, + k_p_P31 = 29, + k_He4_He4 = 30, + k_p_Ni58 = 31, + k_p_O16 = 32, + k_He4_Co56 = 33, + k_He4_Si28 = 34, + k_He4_Fe54 = 35, + k_p_Cl35 = 36, + k_O16_O16 = 37, + k_He4_Be8 = 38, + k_He4_N13 = 39, + NumScreenPairs = k_He4_N13 }; // rate names -- note: the rates are 1-based, not zero-based, so we pad @@ -409,135 +485,153 @@ namespace Rates "He4_Mn51_to_Co55_reaclib", // 12, "He4_Fe52_to_Ni56_reaclib", // 13, "p_Co55_to_Ni56_reaclib", // 14, - "C12_C12_to_p_Na23_reaclib", // 15, - "C12_C12_to_He4_Ne20_reaclib", // 16, - "He4_N13_to_p_O16_reaclib", // 17, - "C12_O16_to_p_Al27_reaclib", // 18, - "C12_O16_to_He4_Mg24_reaclib", // 19, - "O16_O16_to_p_P31_reaclib", // 20, - "O16_O16_to_He4_Si28_reaclib", // 21, - "p_Na23_to_He4_Ne20_reaclib", // 22, - "p_Al27_to_He4_Mg24_reaclib", // 23, - "p_P31_to_He4_Si28_reaclib", // 24, - "He4_Cr48_to_p_Mn51_reaclib", // 25, - "He4_Fe52_to_p_Co55_reaclib", // 26, - "He4_He4_He4_to_C12_reaclib", // 27, - "C12_C12_to_n_Mg23_removed", // 28, - "O16_O16_to_n_S31_removed", // 29, - "C12_O16_to_n_Si27_removed", // 30, - "p_Fe54_to_Co55_reaclib", // 31, - "He4_Fe54_to_Ni58_reaclib", // 32, - "p_Fe56_to_Co57_reaclib", // 33, - "n_Co55_to_Co56_reaclib", // 34, - "n_Co56_to_Co57_reaclib", // 35, - "p_Co57_to_Ni58_reaclib", // 36, - "He4_Mn51_to_p_Fe54_reaclib", // 37, - "He4_Co55_to_p_Ni58_reaclib", // 38, - "n_Co56_to_p_Fe56_reaclib", // 39, - "p_Co57_to_He4_Fe54_reaclib", // 40, - "n_Ni56_to_p_Co56_reaclib", // 41, - "He4_S32_to_Ar36_removed", // 42, - "p_Cl35_to_Ar36_removed", // 43, - "p_Cl35_to_He4_S32_removed", // 44, - "He4_Ar36_to_Ca40_removed", // 45, - "p_K39_to_Ca40_removed", // 46, - "p_K39_to_He4_Ar36_removed", // 47, - "He4_Ca40_to_Ti44_removed", // 48, - "p_Sc43_to_Ti44_removed", // 49, - "p_Sc43_to_He4_Ca40_removed", // 50, - "He4_Ti44_to_Cr48_removed", // 51, - "He4_Ti44_to_p_V47_removed", // 52, - "p_V47_to_Cr48_removed", // 53, - "n_Fe52_to_Fe53_removed", // 54, - "n_Fe53_to_Fe54_removed", // 55, - "n_Fe54_to_Fe55_removed", // 56, - "n_Fe55_to_Fe56_removed", // 57, - "n_Ni56_to_Ni57_removed", // 58, - "n_Ni57_to_Ni58_removed", // 59, - "Co56_to_Fe56_weaktab", // 60, - "Co56_to_Ni56_weaktab", // 61, - "Fe56_to_Co56_weaktab", // 62, - "Ni56_to_Co56_weaktab", // 63, - "n_to_p_weaktab", // 64, - "p_to_n_weaktab", // 65, - "S32_He4_to_Ar36_approx", // 66, - "Ar36_to_S32_He4_approx", // 67, - "Ar36_He4_to_Ca40_approx", // 68, - "Ca40_to_Ar36_He4_approx", // 69, - "Ca40_He4_to_Ti44_approx", // 70, - "Ti44_to_Ca40_He4_approx", // 71, - "Ti44_He4_to_Cr48_approx", // 72, - "Cr48_to_Ti44_He4_approx", // 73, - "Fe52_n_n_to_Fe54_approx", // 74, - "Fe54_to_Fe52_n_n_approx", // 75, - "Fe54_n_n_to_Fe56_approx", // 76, - "Fe56_to_Fe54_n_n_approx", // 77, - "Ni56_n_n_to_Ni58_approx", // 78, - "Ni58_to_Ni56_n_n_approx", // 79, - "C12_C12_to_Mg24_modified", // 80, - "O16_O16_to_S32_modified", // 81, - "C12_O16_to_Si28_modified", // 82, - "N13_to_p_C12_derived", // 83, - "O16_to_He4_C12_derived", // 84, - "Ne20_to_He4_O16_derived", // 85, - "Mg24_to_p_Na23_derived", // 86, - "Mg24_to_He4_Ne20_derived", // 87, - "Si28_to_p_Al27_derived", // 88, - "Si28_to_He4_Mg24_derived", // 89, - "S32_to_p_P31_derived", // 90, - "S32_to_He4_Si28_derived", // 91, - "Fe52_to_p_Mn51_derived", // 92, - "Fe52_to_He4_Cr48_derived", // 93, - "Co55_to_He4_Mn51_derived", // 94, - "Ni56_to_p_Co55_derived", // 95, - "Ni56_to_He4_Fe52_derived", // 96, - "C12_to_He4_He4_He4_derived", // 97, - "p_O16_to_He4_N13_derived", // 98, - "He4_Ne20_to_p_Na23_derived", // 99, - "He4_Ne20_to_C12_C12_derived", // 100, - "p_Na23_to_C12_C12_derived", // 101, - "He4_Mg24_to_p_Al27_derived", // 102, - "He4_Mg24_to_C12_O16_derived", // 103, - "p_Al27_to_C12_O16_derived", // 104, - "He4_Si28_to_p_P31_derived", // 105, - "He4_Si28_to_O16_O16_derived", // 106, - "p_P31_to_O16_O16_derived", // 107, - "p_Mn51_to_He4_Cr48_derived", // 108, - "p_Co55_to_He4_Fe52_derived", // 109, - "Mg24_to_C12_C12_derived", // 110, - "S32_to_O16_O16_derived", // 111, - "Si28_to_C12_O16_derived", // 112, - "Co55_to_p_Fe54_derived", // 113, - "Co56_to_n_Co55_derived", // 114, - "Co57_to_n_Co56_derived", // 115, - "Co57_to_p_Fe56_derived", // 116, - "Ni58_to_p_Co57_derived", // 117, - "Ni58_to_He4_Fe54_derived", // 118, - "p_Fe54_to_He4_Mn51_derived", // 119, - "He4_Fe54_to_p_Co57_derived", // 120, - "p_Fe56_to_n_Co56_derived", // 121, - "p_Co56_to_n_Ni56_derived", // 122, - "p_Ni58_to_He4_Co55_derived", // 123, - "He4_S32_to_p_Cl35_removed", // 124, - "Ar36_to_He4_S32_removed", // 125, - "Ar36_to_p_Cl35_removed", // 126, - "He4_Ar36_to_p_K39_removed", // 127, - "Ca40_to_He4_Ar36_removed", // 128, - "Ca40_to_p_K39_removed", // 129, - "He4_Ca40_to_p_Sc43_removed", // 130, - "Ti44_to_He4_Ca40_removed", // 131, - "Ti44_to_p_Sc43_removed", // 132, - "Cr48_to_He4_Ti44_removed", // 133, - "Cr48_to_p_V47_removed", // 134, - "p_V47_to_He4_Ti44_removed", // 135, - "Fe54_to_n_Fe53_removed", // 136, - "Fe53_to_n_Fe52_removed", // 137, - "Fe56_to_n_Fe55_removed", // 138, - "Fe55_to_n_Fe54_removed", // 139, - "Ni58_to_n_Ni57_removed", // 140, - "Ni57_to_n_Ni56_removed" // 141, + "He4_Co55_to_Cu59_reaclib", // 15, + "He4_Ni56_to_Zn60_reaclib", // 16, + "p_Cu59_to_Zn60_reaclib", // 17, + "C12_C12_to_p_Na23_reaclib", // 18, + "C12_C12_to_He4_Ne20_reaclib", // 19, + "He4_N13_to_p_O16_reaclib", // 20, + "C12_O16_to_p_Al27_reaclib", // 21, + "C12_O16_to_He4_Mg24_reaclib", // 22, + "O16_O16_to_p_P31_reaclib", // 23, + "O16_O16_to_He4_Si28_reaclib", // 24, + "p_Na23_to_He4_Ne20_reaclib", // 25, + "p_Al27_to_He4_Mg24_reaclib", // 26, + "p_P31_to_He4_Si28_reaclib", // 27, + "He4_Cr48_to_p_Mn51_reaclib", // 28, + "He4_Fe52_to_p_Co55_reaclib", // 29, + "p_Cu59_to_He4_Ni56_reaclib", // 30, + "He4_He4_He4_to_C12_reaclib", // 31, + "C12_C12_to_n_Mg23_reaclib", // 32, + "O16_O16_to_n_S31_reaclib", // 33, + "C12_O16_to_n_Si27_reaclib", // 34, + "p_Fe54_to_Co55_reaclib", // 35, + "He4_Fe54_to_Ni58_reaclib", // 36, + "p_Fe56_to_Co57_reaclib", // 37, + "n_Co55_to_Co56_reaclib", // 38, + "n_Co56_to_Co57_reaclib", // 39, + "p_Co57_to_Ni58_reaclib", // 40, + "p_Ni58_to_Cu59_reaclib", // 41, + "He4_Mn51_to_p_Fe54_reaclib", // 42, + "He4_Co55_to_p_Ni58_reaclib", // 43, + "n_Co56_to_p_Fe56_reaclib", // 44, + "p_Co57_to_He4_Fe54_reaclib", // 45, + "n_Ni56_to_p_Co56_reaclib", // 46, + "n_Cu59_to_He4_Co56_reaclib", // 47, + "He4_S32_to_Ar36_reaclib", // 48, + "p_Cl35_to_Ar36_reaclib", // 49, + "p_Cl35_to_He4_S32_reaclib", // 50, + "He4_Ar36_to_Ca40_reaclib", // 51, + "p_K39_to_Ca40_reaclib", // 52, + "p_K39_to_He4_Ar36_reaclib", // 53, + "He4_Ca40_to_Ti44_reaclib", // 54, + "p_Sc43_to_Ti44_reaclib", // 55, + "p_Sc43_to_He4_Ca40_reaclib", // 56, + "He4_Ti44_to_Cr48_reaclib", // 57, + "He4_Ti44_to_p_V47_reaclib", // 58, + "p_V47_to_Cr48_reaclib", // 59, + "n_Fe52_to_Fe53_reaclib", // 60, + "n_Fe53_to_Fe54_reaclib", // 61, + "n_Fe54_to_Fe55_reaclib", // 62, + "n_Fe55_to_Fe56_reaclib", // 63, + "n_Ni56_to_Ni57_reaclib", // 64, + "n_Ni57_to_Ni58_reaclib", // 65, + "Co56_to_Fe56_weaktab", // 66, + "Co56_to_Ni56_weaktab", // 67, + "Fe56_to_Co56_weaktab", // 68, + "Ni56_to_Co56_weaktab", // 69, + "n_to_p_weaktab", // 70, + "p_to_n_weaktab", // 71, + "S32_He4_to_Ar36_approx", // 72, + "Ar36_to_S32_He4_approx", // 73, + "Ar36_He4_to_Ca40_approx", // 74, + "Ca40_to_Ar36_He4_approx", // 75, + "Ca40_He4_to_Ti44_approx", // 76, + "Ti44_to_Ca40_He4_approx", // 77, + "Ti44_He4_to_Cr48_approx", // 78, + "Cr48_to_Ti44_He4_approx", // 79, + "Fe52_n_n_to_Fe54_approx", // 80, + "Fe54_to_Fe52_n_n_approx", // 81, + "Fe54_n_n_to_Fe56_approx", // 82, + "Fe56_to_Fe54_n_n_approx", // 83, + "Ni56_n_n_to_Ni58_approx", // 84, + "Ni58_to_Ni56_n_n_approx", // 85, + "C12_C12_to_Mg24_modified", // 86, + "O16_O16_to_S32_modified", // 87, + "C12_O16_to_Si28_modified", // 88, + "N13_to_p_C12_derived", // 89, + "O16_to_He4_C12_derived", // 90, + "Ne20_to_He4_O16_derived", // 91, + "Mg24_to_p_Na23_derived", // 92, + "Mg24_to_He4_Ne20_derived", // 93, + "Si28_to_p_Al27_derived", // 94, + "Si28_to_He4_Mg24_derived", // 95, + "S32_to_p_P31_derived", // 96, + "S32_to_He4_Si28_derived", // 97, + "Fe52_to_p_Mn51_derived", // 98, + "Fe52_to_He4_Cr48_derived", // 99, + "Co55_to_He4_Mn51_derived", // 100, + "Ni56_to_p_Co55_derived", // 101, + "Ni56_to_He4_Fe52_derived", // 102, + "Cu59_to_He4_Co55_derived", // 103, + "Zn60_to_p_Cu59_derived", // 104, + "Zn60_to_He4_Ni56_derived", // 105, + "C12_to_He4_He4_He4_derived", // 106, + "p_O16_to_He4_N13_derived", // 107, + "He4_Ne20_to_p_Na23_derived", // 108, + "He4_Ne20_to_C12_C12_derived", // 109, + "p_Na23_to_C12_C12_derived", // 110, + "He4_Mg24_to_p_Al27_derived", // 111, + "He4_Mg24_to_C12_O16_derived", // 112, + "p_Al27_to_C12_O16_derived", // 113, + "He4_Si28_to_p_P31_derived", // 114, + "He4_Si28_to_O16_O16_derived", // 115, + "p_P31_to_O16_O16_derived", // 116, + "p_Mn51_to_He4_Cr48_derived", // 117, + "p_Co55_to_He4_Fe52_derived", // 118, + "He4_Ni56_to_p_Cu59_derived", // 119, + "Mg24_to_C12_C12_derived", // 120, + "S32_to_O16_O16_derived", // 121, + "Si28_to_C12_O16_derived", // 122, + "Co55_to_p_Fe54_derived", // 123, + "Co56_to_n_Co55_derived", // 124, + "Co57_to_n_Co56_derived", // 125, + "Co57_to_p_Fe56_derived", // 126, + "Ni58_to_p_Co57_derived", // 127, + "Ni58_to_He4_Fe54_derived", // 128, + "Cu59_to_p_Ni58_derived", // 129, + "p_Fe54_to_He4_Mn51_derived", // 130, + "He4_Fe54_to_p_Co57_derived", // 131, + "p_Fe56_to_n_Co56_derived", // 132, + "p_Co56_to_n_Ni56_derived", // 133, + "He4_Co56_to_n_Cu59_derived", // 134, + "p_Ni58_to_He4_Co55_derived", // 135, + "He4_S32_to_p_Cl35_derived", // 136, + "Ar36_to_He4_S32_derived", // 137, + "Ar36_to_p_Cl35_derived", // 138, + "He4_Ar36_to_p_K39_derived", // 139, + "Ca40_to_He4_Ar36_derived", // 140, + "Ca40_to_p_K39_derived", // 141, + "He4_Ca40_to_p_Sc43_derived", // 142, + "Ti44_to_He4_Ca40_derived", // 143, + "Ti44_to_p_Sc43_derived", // 144, + "Cr48_to_He4_Ti44_derived", // 145, + "Cr48_to_p_V47_derived", // 146, + "p_V47_to_He4_Ti44_derived", // 147, + "Fe54_to_n_Fe53_derived", // 148, + "Fe53_to_n_Fe52_derived", // 149, + "Fe56_to_n_Fe55_derived", // 150, + "Fe55_to_n_Fe54_derived", // 151, + "Ni58_to_n_Ni57_derived", // 152, + "Ni57_to_n_Ni56_derived" // 153, }; + template + AMREX_GPU_HOST_DEVICE AMREX_INLINE + constexpr amrex::Real get_p_random() { + return 0.0_rt; + } + } #ifdef NSE_NET @@ -559,7 +653,7 @@ namespace NSE_INDEX constexpr int H1_index = 2; constexpr int N_index = 1; constexpr int He4_index = 3; - constexpr int NumNSERatePairs = 36; + constexpr int NumNSERatePairs = 42; 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, @@ -576,12 +670,16 @@ namespace NSE_INDEX He4, Mn51, -1, Co55, -1, -1, Mn51, Co55, k_He4_Mn51_to_Co55_reaclib, k_Co55_to_He4_Mn51_derived, He4, Fe52, -1, Ni56, -1, -1, Fe52, Ni56, k_He4_Fe52_to_Ni56_reaclib, k_Ni56_to_He4_Fe52_derived, H1, Co55, -1, Ni56, -1, -1, Co55, Ni56, k_p_Co55_to_Ni56_reaclib, k_Ni56_to_p_Co55_derived, + He4, Co55, -1, Cu59, -1, -1, Co55, Cu59, k_He4_Co55_to_Cu59_reaclib, k_Cu59_to_He4_Co55_derived, + He4, Ni56, -1, Zn60, -1, -1, Ni56, Zn60, k_He4_Ni56_to_Zn60_reaclib, k_Zn60_to_He4_Ni56_derived, + H1, Cu59, -1, Zn60, -1, -1, Cu59, Zn60, k_p_Cu59_to_Zn60_reaclib, k_Zn60_to_p_Cu59_derived, He4, N13, -1, H1, O16, -1, N13, O16, k_He4_N13_to_p_O16_reaclib, k_p_O16_to_He4_N13_derived, H1, Na23, -1, He4, Ne20, -1, Na23, Ne20, k_p_Na23_to_He4_Ne20_reaclib, k_He4_Ne20_to_p_Na23_derived, H1, Al27, -1, He4, Mg24, -1, Al27, Mg24, k_p_Al27_to_He4_Mg24_reaclib, k_He4_Mg24_to_p_Al27_derived, H1, P31, -1, He4, Si28, -1, P31, Si28, k_p_P31_to_He4_Si28_reaclib, k_He4_Si28_to_p_P31_derived, He4, Cr48, -1, H1, Mn51, -1, Cr48, Mn51, k_He4_Cr48_to_p_Mn51_reaclib, k_p_Mn51_to_He4_Cr48_derived, He4, Fe52, -1, H1, Co55, -1, Fe52, Co55, k_He4_Fe52_to_p_Co55_reaclib, k_p_Co55_to_He4_Fe52_derived, + H1, Cu59, -1, He4, Ni56, -1, Cu59, Ni56, k_p_Cu59_to_He4_Ni56_reaclib, k_He4_Ni56_to_p_Cu59_derived, He4, He4, He4, C12, -1, -1, C12, -1, k_He4_He4_He4_to_C12_reaclib, k_C12_to_He4_He4_He4_derived, H1, Fe54, -1, Co55, -1, -1, Fe54, Co55, k_p_Fe54_to_Co55_reaclib, k_Co55_to_p_Fe54_derived, He4, Fe54, -1, Ni58, -1, -1, Fe54, Ni58, k_He4_Fe54_to_Ni58_reaclib, k_Ni58_to_He4_Fe54_derived, @@ -589,11 +687,13 @@ namespace NSE_INDEX N, Co55, -1, Co56, -1, -1, Co55, Co56, k_n_Co55_to_Co56_reaclib, k_Co56_to_n_Co55_derived, N, Co56, -1, Co57, -1, -1, Co56, Co57, k_n_Co56_to_Co57_reaclib, k_Co57_to_n_Co56_derived, H1, Co57, -1, Ni58, -1, -1, Co57, Ni58, k_p_Co57_to_Ni58_reaclib, k_Ni58_to_p_Co57_derived, + H1, Ni58, -1, Cu59, -1, -1, Ni58, Cu59, k_p_Ni58_to_Cu59_reaclib, k_Cu59_to_p_Ni58_derived, He4, Mn51, -1, H1, Fe54, -1, Mn51, Fe54, k_He4_Mn51_to_p_Fe54_reaclib, k_p_Fe54_to_He4_Mn51_derived, He4, Co55, -1, H1, Ni58, -1, Co55, Ni58, k_He4_Co55_to_p_Ni58_reaclib, k_p_Ni58_to_He4_Co55_derived, N, Co56, -1, H1, Fe56, -1, Co56, Fe56, k_n_Co56_to_p_Fe56_reaclib, k_p_Fe56_to_n_Co56_derived, H1, Co57, -1, He4, Fe54, -1, Co57, Fe54, k_p_Co57_to_He4_Fe54_reaclib, k_He4_Fe54_to_p_Co57_derived, N, Ni56, -1, H1, Co56, -1, Ni56, Co56, k_n_Ni56_to_p_Co56_reaclib, k_p_Co56_to_n_Ni56_derived, + N, Cu59, -1, He4, Co56, -1, Cu59, Co56, k_n_Cu59_to_He4_Co56_reaclib, k_He4_Co56_to_n_Cu59_derived, S32, He4, -1, Ar36, -1, -1, S32, Ar36, k_S32_He4_to_Ar36_approx, k_Ar36_to_S32_He4_approx, Ar36, He4, -1, Ca40, -1, -1, Ar36, Ca40, k_Ar36_He4_to_Ca40_approx, k_Ca40_to_Ar36_He4_approx, Ca40, He4, -1, Ti44, -1, -1, Ca40, Ti44, k_Ca40_He4_to_Ti44_approx, k_Ti44_to_Ca40_He4_approx, diff --git a/networks/he-burn/ase-iron/actual_rhs.H b/networks/he-burn/ase-iron/actual_rhs.H index 7440354fe..eb26913b3 100644 --- a/networks/he-burn/ase-iron/actual_rhs.H +++ b/networks/he-burn/ase-iron/actual_rhs.H @@ -1,5 +1,5 @@ -#ifndef actual_rhs_H -#define actual_rhs_H +#ifndef ACTUAL_RHS_H +#define ACTUAL_RHS_H #include #include @@ -15,7 +15,10 @@ #ifdef NEUTRINOS #include #endif +#include #include +#include +#include #include #include #include @@ -28,7 +31,6 @@ using namespace Rates; using namespace rate_tables; - template AMREX_GPU_HOST_DEVICE AMREX_INLINE void ener_gener_rate(T const& dydt, amrex::Real& enuc) @@ -49,17 +51,14 @@ void ener_gener_rate(T const& dydt, amrex::Real& enuc) } +#ifdef SCREENING template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void evaluate_rates(const burn_t& state, - const amrex::Array1D& Y, - T& rate_eval) { - - // here Y is consistent with state.xn +void evaluate_screening(const burn_t& state, + const amrex::Array1D& Y, + T& rate_eval) { - [[maybe_unused]] amrex::Real rhoy = state.rho * state.y_e; - - // Calculate Reaclib rates + // Evaluate screening terms using number_t = std::conditional_t; number_t temp = state.T; @@ -68,777 +67,446 @@ void evaluate_rates(const burn_t& state, autodiff::seed(temp); } -#ifdef SCREENING plasma_state_t pstate{}; fill_plasma_state(pstate, temp, state.rho, Y); -#endif - - const tf_t tfactors = evaluate_tfactors(state.T); - - fill_reaclib_rates(tfactors, rate_eval); - - temp_tabular::fill_rates(tfactors, rate_eval); - - // Calculate Derived Rates. This should go last but before approx rates. - fill_derived_rates(tfactors, rate_eval); - - -#ifdef SCREENING - // Evaluate screening factors - - amrex::Real ratraw, dratraw_dT; - amrex::Real scor, dscor_dt; - [[maybe_unused]] amrex::Real scor2, dscor2_dt; + amrex::Real log_scor, dlog_scor_dT; { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 6.0_rt, 12.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_C12_to_N13_reaclib); - rate_eval.screened_rates(k_p_C12_to_N13_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_C12_to_N13_reaclib); - rate_eval.dscreened_rates_dT(k_p_C12_to_N13_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 6.0_rt, 12.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_C12_to_O16_reaclib); - rate_eval.screened_rates(k_He4_C12_to_O16_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_C12_to_O16_reaclib); - rate_eval.dscreened_rates_dT(k_He4_C12_to_O16_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_C12) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_C12) = 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); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_O16) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_O16) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_O16_to_Ne20_reaclib); - rate_eval.screened_rates(k_He4_O16_to_Ne20_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_O16_to_Ne20_reaclib); - rate_eval.dscreened_rates_dT(k_He4_O16_to_Ne20_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 10.0_rt, 20.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Ne20_to_Mg24_reaclib); - rate_eval.screened_rates(k_He4_Ne20_to_Mg24_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ne20_to_Mg24_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_Mg24_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Ne20_to_p_Na23_derived); - rate_eval.screened_rates(k_He4_Ne20_to_p_Na23_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ne20_to_p_Na23_derived); - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_p_Na23_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Ne20_to_C12_C12_derived); - rate_eval.screened_rates(k_He4_Ne20_to_C12_C12_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ne20_to_C12_C12_derived); - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_C12_C12_derived) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 57.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_Co57) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Co57) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 11.0_rt, 23.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 19.0_rt, 39.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_K39) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_K39) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_Na23_to_Mg24_reaclib); - rate_eval.screened_rates(k_p_Na23_to_Mg24_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Na23_to_Mg24_reaclib); - rate_eval.dscreened_rates_dT(k_p_Na23_to_Mg24_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Na23_to_He4_Ne20_reaclib); - rate_eval.screened_rates(k_p_Na23_to_He4_Ne20_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Na23_to_He4_Ne20_reaclib); - rate_eval.dscreened_rates_dT(k_p_Na23_to_He4_Ne20_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Na23_to_C12_C12_derived); - rate_eval.screened_rates(k_p_Na23_to_C12_C12_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Na23_to_C12_C12_derived); - rate_eval.dscreened_rates_dT(k_p_Na23_to_C12_C12_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 12.0_rt, 24.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 20.0_rt, 40.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Mg24_to_Si28_reaclib); - rate_eval.screened_rates(k_He4_Mg24_to_Si28_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Mg24_to_Si28_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_Si28_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Mg24_to_p_Al27_derived); - rate_eval.screened_rates(k_He4_Mg24_to_p_Al27_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Mg24_to_p_Al27_derived); - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_p_Al27_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Mg24_to_C12_O16_derived); - rate_eval.screened_rates(k_He4_Mg24_to_C12_O16_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Mg24_to_C12_O16_derived); - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_C12_O16_derived) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Ca40) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Ca40) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 13.0_rt, 27.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Al27_to_Si28_reaclib); - rate_eval.screened_rates(k_p_Al27_to_Si28_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Al27_to_Si28_reaclib); - rate_eval.dscreened_rates_dT(k_p_Al27_to_Si28_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Al27_to_He4_Mg24_reaclib); - rate_eval.screened_rates(k_p_Al27_to_He4_Mg24_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Al27_to_He4_Mg24_reaclib); - rate_eval.dscreened_rates_dT(k_p_Al27_to_He4_Mg24_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Al27_to_C12_O16_derived); - rate_eval.screened_rates(k_p_Al27_to_C12_O16_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Al27_to_C12_O16_derived); - rate_eval.dscreened_rates_dT(k_p_Al27_to_C12_O16_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 14.0_rt, 28.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 18.0_rt, 36.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Si28_to_S32_reaclib); - rate_eval.screened_rates(k_He4_Si28_to_S32_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Si28_to_S32_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Si28_to_S32_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Ar36) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Ar36) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_Si28_to_p_P31_derived); - rate_eval.screened_rates(k_He4_Si28_to_p_P31_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Si28_to_p_P31_derived); - rate_eval.dscreened_rates_dT(k_He4_Si28_to_p_P31_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Si28_to_O16_O16_derived); - rate_eval.screened_rates(k_He4_Si28_to_O16_O16_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Si28_to_O16_O16_derived); - rate_eval.dscreened_rates_dT(k_He4_Si28_to_O16_O16_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 15.0_rt, 31.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 21.0_rt, 43.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_P31_to_S32_reaclib); - rate_eval.screened_rates(k_p_P31_to_S32_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_P31_to_S32_reaclib); - rate_eval.dscreened_rates_dT(k_p_P31_to_S32_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_P31_to_He4_Si28_reaclib); - rate_eval.screened_rates(k_p_P31_to_He4_Si28_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_P31_to_He4_Si28_reaclib); - rate_eval.dscreened_rates_dT(k_p_P31_to_He4_Si28_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Sc43) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Sc43) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_P31_to_O16_O16_derived); - rate_eval.screened_rates(k_p_P31_to_O16_O16_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_P31_to_O16_O16_derived); - rate_eval.dscreened_rates_dT(k_p_P31_to_O16_O16_derived) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 56.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_Fe56) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Fe56) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 24.0_rt, 48.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 6.0_rt, 12.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Cr48_to_Fe52_reaclib); - rate_eval.screened_rates(k_He4_Cr48_to_Fe52_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Cr48_to_Fe52_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Cr48_to_Fe52_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_C12) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_C12) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_Cr48_to_p_Mn51_reaclib); - rate_eval.screened_rates(k_He4_Cr48_to_p_Mn51_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Cr48_to_p_Mn51_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Cr48_to_p_Mn51_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 25.0_rt, 51.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Mn51_to_Fe52_reaclib); - rate_eval.screened_rates(k_p_Mn51_to_Fe52_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Mn51_to_Fe52_reaclib); - rate_eval.dscreened_rates_dT(k_p_Mn51_to_Fe52_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Mn51_to_He4_Cr48_derived); - rate_eval.screened_rates(k_p_Mn51_to_He4_Cr48_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Mn51_to_He4_Cr48_derived); - rate_eval.dscreened_rates_dT(k_p_Mn51_to_He4_Cr48_derived) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 22.0_rt, 44.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_Ti44) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Ti44) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 25.0_rt, 51.0_rt); + 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_screen(pstate, scn_fac, scor, dscor_dt); + 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; + } } - ratraw = rate_eval.screened_rates(k_He4_Mn51_to_Co55_reaclib); - rate_eval.screened_rates(k_He4_Mn51_to_Co55_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Mn51_to_Co55_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Mn51_to_Co55_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + { + 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; + } } - ratraw = rate_eval.screened_rates(k_He4_Mn51_to_p_Fe54_reaclib); - rate_eval.screened_rates(k_He4_Mn51_to_p_Fe54_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Mn51_to_p_Fe54_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Mn51_to_p_Fe54_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 23.0_rt, 47.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_V47) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_V47) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 52.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 24.0_rt, 48.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Fe52_to_Ni56_reaclib); - rate_eval.screened_rates(k_He4_Fe52_to_Ni56_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Fe52_to_Ni56_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Fe52_to_Ni56_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Fe52_to_p_Co55_reaclib); - rate_eval.screened_rates(k_He4_Fe52_to_p_Co55_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Fe52_to_p_Co55_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Fe52_to_p_Co55_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Cr48) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Cr48) = dlog_scor_dT; + } } - { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 55.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Co55_to_Ni56_reaclib); - rate_eval.screened_rates(k_p_Co55_to_Ni56_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Co55_to_Ni56_reaclib); - rate_eval.dscreened_rates_dT(k_p_Co55_to_Ni56_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Co55_to_He4_Fe52_derived); - rate_eval.screened_rates(k_p_Co55_to_He4_Fe52_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Co55_to_He4_Fe52_derived); - rate_eval.dscreened_rates_dT(k_p_Co55_to_He4_Fe52_derived) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Co55) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Co55) = dlog_scor_dT; + } } - { 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); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_C12_C12_to_p_Na23_reaclib); - rate_eval.screened_rates(k_C12_C12_to_p_Na23_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_C12_to_p_Na23_reaclib); - rate_eval.dscreened_rates_dT(k_C12_C12_to_p_Na23_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_C12_C12) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_C12_C12) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_C12_C12_to_He4_Ne20_reaclib); - rate_eval.screened_rates(k_C12_C12_to_He4_Ne20_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_C12_to_He4_Ne20_reaclib); - rate_eval.dscreened_rates_dT(k_C12_C12_to_He4_Ne20_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_C12_C12_to_Mg24_modified); - rate_eval.screened_rates(k_C12_C12_to_Mg24_modified) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_C12_to_Mg24_modified); - rate_eval.dscreened_rates_dT(k_C12_C12_to_Mg24_modified) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 7.0_rt, 13.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 10.0_rt, 20.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Ne20) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Ne20) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_N13_to_p_O16_reaclib); - rate_eval.screened_rates(k_He4_N13_to_p_O16_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_N13_to_p_O16_reaclib); - rate_eval.dscreened_rates_dT(k_He4_N13_to_p_O16_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - 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_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_C12_O16_to_p_Al27_reaclib); - rate_eval.screened_rates(k_C12_O16_to_p_Al27_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_O16_to_p_Al27_reaclib); - rate_eval.dscreened_rates_dT(k_C12_O16_to_p_Al27_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_C12_O16_to_He4_Mg24_reaclib); - rate_eval.screened_rates(k_C12_O16_to_He4_Mg24_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_O16_to_He4_Mg24_reaclib); - rate_eval.dscreened_rates_dT(k_C12_O16_to_He4_Mg24_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_C12_O16_to_Si28_modified); - rate_eval.screened_rates(k_C12_O16_to_Si28_modified) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_C12_O16_to_Si28_modified); - rate_eval.dscreened_rates_dT(k_C12_O16_to_Si28_modified) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 13.0_rt, 27.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_Al27) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Al27) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(8.0_rt, 16.0_rt, 8.0_rt, 16.0_rt); - static_assert(scn_fac.z1 == 8.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_O16_O16_to_p_P31_reaclib); - rate_eval.screened_rates(k_O16_O16_to_p_P31_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_O16_O16_to_p_P31_reaclib); - rate_eval.dscreened_rates_dT(k_O16_O16_to_p_P31_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_O16_O16_to_He4_Si28_reaclib); - rate_eval.screened_rates(k_O16_O16_to_He4_Si28_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_O16_O16_to_He4_Si28_reaclib); - rate_eval.dscreened_rates_dT(k_O16_O16_to_He4_Si28_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_O16_O16_to_S32_modified); - rate_eval.screened_rates(k_O16_O16_to_S32_modified) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_O16_O16_to_S32_modified); - rate_eval.dscreened_rates_dT(k_O16_O16_to_S32_modified) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 25.0_rt, 51.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_Mn51) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Mn51) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 2.0_rt, 4.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 11.0_rt, 23.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_Na23) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Na23) = dlog_scor_dT; + } } - { - constexpr auto scn_fac2 = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 4.0_rt, 8.0_rt); - static_assert(scn_fac2.z1 == 2.0_rt); - actual_screen(pstate, scn_fac2, scor2, dscor2_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_He4_He4_to_C12_reaclib); - rate_eval.screened_rates(k_He4_He4_He4_to_C12_reaclib) *= scor * scor2; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib); - rate_eval.dscreened_rates_dT(k_He4_He4_He4_to_C12_reaclib) = ratraw * (scor * dscor2_dt + dscor_dt * scor2) + dratraw_dT * scor * scor2; + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 56.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_Co56) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Co56) = dlog_scor_dT; + } } - { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 54.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Fe54) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Fe54) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_Fe54_to_Co55_reaclib); - rate_eval.screened_rates(k_p_Fe54_to_Co55_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Fe54_to_Co55_reaclib); - rate_eval.dscreened_rates_dT(k_p_Fe54_to_Co55_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Fe54_to_He4_Mn51_derived); - rate_eval.screened_rates(k_p_Fe54_to_He4_Mn51_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Fe54_to_He4_Mn51_derived); - rate_eval.dscreened_rates_dT(k_p_Fe54_to_He4_Mn51_derived) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 54.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 52.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Fe54_to_Ni58_reaclib); - rate_eval.screened_rates(k_He4_Fe54_to_Ni58_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Fe54_to_Ni58_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Fe54_to_Ni58_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Fe54_to_p_Co57_derived); - rate_eval.screened_rates(k_He4_Fe54_to_p_Co57_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Fe54_to_p_Co57_derived); - rate_eval.dscreened_rates_dT(k_He4_Fe54_to_p_Co57_derived) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Fe52) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Fe52) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 56.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 29.0_rt, 59.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Fe56_to_Co57_reaclib); - rate_eval.screened_rates(k_p_Fe56_to_Co57_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Fe56_to_Co57_reaclib); - rate_eval.dscreened_rates_dT(k_p_Fe56_to_Co57_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Fe56_to_n_Co56_derived); - rate_eval.screened_rates(k_p_Fe56_to_n_Co56_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Fe56_to_n_Co56_derived); - rate_eval.dscreened_rates_dT(k_p_Fe56_to_n_Co56_derived) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Cu59) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Cu59) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 57.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Co57_to_Ni58_reaclib); - rate_eval.screened_rates(k_p_Co57_to_Ni58_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Co57_to_Ni58_reaclib); - rate_eval.dscreened_rates_dT(k_p_Co57_to_Ni58_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 16.0_rt, 32.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_S32) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_S32) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_Co57_to_He4_Fe54_reaclib); - rate_eval.screened_rates(k_p_Co57_to_He4_Fe54_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Co57_to_He4_Fe54_reaclib); - rate_eval.dscreened_rates_dT(k_p_Co57_to_He4_Fe54_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 25.0_rt, 51.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_Mn51) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Mn51) = dlog_scor_dT; + } } - { constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 27.0_rt, 55.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Co55_to_p_Ni58_reaclib); - rate_eval.screened_rates(k_He4_Co55_to_p_Ni58_reaclib) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Co55_to_p_Ni58_reaclib); - rate_eval.dscreened_rates_dT(k_He4_Co55_to_p_Ni58_reaclib) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Co55) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Co55) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 16.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_O16_to_He4_N13_derived); - rate_eval.screened_rates(k_p_O16_to_He4_N13_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived); - rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 28.0_rt, 56.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_Ni56) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Ni56) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 56.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 15.0_rt, 31.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_P31) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_P31) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_Co56_to_n_Ni56_derived); - rate_eval.screened_rates(k_p_Co56_to_n_Ni56_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Co56_to_n_Ni56_derived); - rate_eval.dscreened_rates_dT(k_p_Co56_to_n_Ni56_derived) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.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_He4_He4) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_He4) = dlog_scor_dT; + } } - { constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 28.0_rt, 58.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Ni58) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Ni58) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_Ni58_to_He4_Co55_derived); - rate_eval.screened_rates(k_p_Ni58_to_He4_Co55_derived) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Ni58_to_He4_Co55_derived); - rate_eval.dscreened_rates_dT(k_p_Ni58_to_He4_Co55_derived) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 16.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_O16) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_O16) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 16.0_rt, 32.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 27.0_rt, 56.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_S32_to_Ar36_removed); - rate_eval.screened_rates(k_He4_S32_to_Ar36_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_S32_to_Ar36_removed); - rate_eval.dscreened_rates_dT(k_He4_S32_to_Ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Co56) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Co56) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_S32_to_p_Cl35_removed); - rate_eval.screened_rates(k_He4_S32_to_p_Cl35_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_S32_to_p_Cl35_removed); - rate_eval.dscreened_rates_dT(k_He4_S32_to_p_Cl35_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } - - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 17.0_rt, 35.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_p_Cl35_to_Ar36_removed); - rate_eval.screened_rates(k_p_Cl35_to_Ar36_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_removed); - rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_p_Cl35_to_He4_S32_removed); - rate_eval.screened_rates(k_p_Cl35_to_He4_S32_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_removed); - rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_removed) = ratraw * dscor_dt + dratraw_dT * scor; + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 14.0_rt, 28.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_Si28) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Si28) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 18.0_rt, 36.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 54.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } - - ratraw = rate_eval.screened_rates(k_He4_Ar36_to_Ca40_removed); - rate_eval.screened_rates(k_He4_Ar36_to_Ca40_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ar36_to_Ca40_removed); - rate_eval.dscreened_rates_dT(k_He4_Ar36_to_Ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } - - ratraw = rate_eval.screened_rates(k_He4_Ar36_to_p_K39_removed); - rate_eval.screened_rates(k_He4_Ar36_to_p_K39_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ar36_to_p_K39_removed); - rate_eval.dscreened_rates_dT(k_He4_Ar36_to_p_K39_removed) = ratraw * dscor_dt + dratraw_dT * scor; + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_Fe54) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Fe54) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 19.0_rt, 39.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 17.0_rt, 35.0_rt); static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_p_Cl35) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_p_Cl35) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_K39_to_Ca40_removed); - rate_eval.screened_rates(k_p_K39_to_Ca40_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_removed); - rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(8.0_rt, 16.0_rt, 8.0_rt, 16.0_rt); + static_assert(scn_fac.z1 == 8.0_rt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_O16_O16) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_O16_O16) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_p_K39_to_He4_Ar36_removed); - rate_eval.screened_rates(k_p_K39_to_He4_Ar36_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_removed); - rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 4.0_rt, 8.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_Be8) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_Be8) = dlog_scor_dT; + } } - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 20.0_rt, 40.0_rt); + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 7.0_rt, 13.0_rt); static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); + actual_log_screen(pstate, scn_fac, log_scor, dlog_scor_dT); + rate_eval.log_screen(k_He4_N13) = log_scor; + if constexpr (do_T_derivatives) { + rate_eval.dlog_screen_dT(k_He4_N13) = dlog_scor_dT; + } } - ratraw = rate_eval.screened_rates(k_He4_Ca40_to_Ti44_removed); - rate_eval.screened_rates(k_He4_Ca40_to_Ti44_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ca40_to_Ti44_removed); - rate_eval.dscreened_rates_dT(k_He4_Ca40_to_Ti44_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } +} +#endif - ratraw = rate_eval.screened_rates(k_He4_Ca40_to_p_Sc43_removed); - rate_eval.screened_rates(k_He4_Ca40_to_p_Sc43_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ca40_to_p_Sc43_removed); - rate_eval.dscreened_rates_dT(k_He4_Ca40_to_p_Sc43_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void evaluate_rates(const burn_t& state, + const amrex::Array1D& Y, + T& rate_eval) { - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 21.0_rt, 43.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } + // here Y is consistent with state.xn - ratraw = rate_eval.screened_rates(k_p_Sc43_to_Ti44_removed); - rate_eval.screened_rates(k_p_Sc43_to_Ti44_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_removed); - rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + [[maybe_unused]] amrex::Real rhoy = state.rho * state.y_e; - ratraw = rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_removed); - rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_removed); - rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + const tf_t tfactors = evaluate_tfactors(state.T); + // Precompute screening terms - { - constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 22.0_rt, 44.0_rt); - static_assert(scn_fac.z1 == 2.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } +#ifdef SCREENING + evaluate_screening(state, Y, rate_eval); +#endif - ratraw = rate_eval.screened_rates(k_He4_Ti44_to_Cr48_removed); - rate_eval.screened_rates(k_He4_Ti44_to_Cr48_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ti44_to_Cr48_removed); - rate_eval.dscreened_rates_dT(k_He4_Ti44_to_Cr48_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + // Fill in different rates - ratraw = rate_eval.screened_rates(k_He4_Ti44_to_p_V47_removed); - rate_eval.screened_rates(k_He4_Ti44_to_p_V47_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_He4_Ti44_to_p_V47_removed); - rate_eval.dscreened_rates_dT(k_He4_Ti44_to_p_V47_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + fill_reaclib_rates(tfactors, rate_eval); + temp_tabular::fill_rates(tfactors, rate_eval); - { - constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 23.0_rt, 47.0_rt); - static_assert(scn_fac.z1 == 1.0_rt); - actual_screen(pstate, scn_fac, scor, dscor_dt); - } + // fill modified rates next -- these can have ReacLib or + // TemperatureTabular/StarLib rates as the original rate + modified_rates::fill_rates(tfactors, rate_eval); - ratraw = rate_eval.screened_rates(k_p_V47_to_Cr48_removed); - rate_eval.screened_rates(k_p_V47_to_Cr48_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_removed); - rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + // 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. - ratraw = rate_eval.screened_rates(k_p_V47_to_He4_Ti44_removed); - rate_eval.screened_rates(k_p_V47_to_He4_Ti44_removed) *= scor; - if constexpr (std::is_same_v) { - dratraw_dT = rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_removed); - rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_removed) = ratraw * dscor_dt + dratraw_dT * scor; - } + fill_derived_rates(tfactors, rate_eval); -#endif // Fill approximate rates fill_approx_rates(tfactors, state.rho, Y, rate_eval); - // Calculate tabular rates + // Calculate tabular weak rates [[maybe_unused]] amrex::Real rate, drate_dt, edot_nu, edot_gamma; @@ -976,7 +644,7 @@ void get_ydot_weak(const burn_t& state, rate_eval.screened_rates(k_p_to_n_weaktab) = rate; rate_eval.enuc_weak += C::n_A * Y(H1) * (edot_nu + edot_gamma); - auto screened_rates = rate_eval.screened_rates; + const auto& screened_rates = rate_eval.screened_rates; ydot_nuc(N) = (-screened_rates(k_n_to_p_weaktab)*Y(N) + screened_rates(k_p_to_n_weaktab)*Y(H1)); @@ -1036,6 +704,10 @@ void get_ydot_weak(const burn_t& state, ydot_nuc(Ni58) = 0.0_rt; + ydot_nuc(Cu59) = 0.0_rt; + + ydot_nuc(Zn60) = 0.0_rt; + enuc_weak = rate_eval.enuc_weak; } #endif @@ -1054,6 +726,7 @@ void rhs_nuc(const burn_t& state, (-screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*Y(N)*state.rho + screened_rates(k_Co57_to_n_Co56_derived)*Y(Co57)) + (-screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*Y(N)*state.rho + screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*Y(H1)*state.rho) + (-screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*Y(N)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*Y(H1)*state.rho) + + (-screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*Y(N)*state.rho + screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*Y(He4)*state.rho) + (-2.0*screened_rates(k_Fe52_n_n_to_Fe54_approx)*Y(Fe52)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) + 2.0*screened_rates(k_Fe54_to_Fe52_n_n_approx)*Y(Fe54)) + (-2.0*screened_rates(k_Fe54_n_n_to_Fe56_approx)*Y(Fe54)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) + 2.0*screened_rates(k_Fe56_to_Fe54_n_n_approx)*Y(Fe56)) + (-2.0*screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) + 2.0*screened_rates(k_Ni58_to_Ni56_n_n_approx)*Y(Ni58)) + @@ -1066,6 +739,7 @@ void rhs_nuc(const burn_t& state, (-screened_rates(k_p_P31_to_S32_reaclib)*Y(P31)*Y(H1)*state.rho + screened_rates(k_S32_to_p_P31_derived)*Y(S32)) + (-screened_rates(k_p_Mn51_to_Fe52_reaclib)*Y(Mn51)*Y(H1)*state.rho + screened_rates(k_Fe52_to_p_Mn51_derived)*Y(Fe52)) + (-screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*Y(H1)*state.rho + screened_rates(k_Ni56_to_p_Co55_derived)*Y(Ni56)) + + (-screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*Y(H1)*state.rho + screened_rates(k_Zn60_to_p_Cu59_derived)*Y(Zn60)) + (0.5*screened_rates(k_C12_C12_to_p_Na23_reaclib)*amrex::Math::powi<2>(Y(C12))*state.rho + -screened_rates(k_p_Na23_to_C12_C12_derived)*Y(Na23)*Y(H1)*state.rho) + (screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(He4)*Y(N13)*state.rho + -screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*Y(H1)*state.rho) + (screened_rates(k_C12_O16_to_p_Al27_reaclib)*Y(C12)*Y(O16)*state.rho + -screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*Y(H1)*state.rho) + @@ -1075,9 +749,11 @@ void rhs_nuc(const burn_t& state, (-screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*Y(H1)*state.rho + screened_rates(k_He4_Si28_to_p_P31_derived)*Y(He4)*Y(Si28)*state.rho) + (screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*Y(He4)*state.rho + -screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*Y(H1)*state.rho) + (screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*Y(He4)*state.rho + -screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*Y(H1)*state.rho) + + (-screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*Y(H1)*state.rho + screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*Y(Ni56)*state.rho) + (-screened_rates(k_p_Fe54_to_Co55_reaclib)*Y(Fe54)*Y(H1)*state.rho + screened_rates(k_Co55_to_p_Fe54_derived)*Y(Co55)) + (-screened_rates(k_p_Fe56_to_Co57_reaclib)*Y(Fe56)*Y(H1)*state.rho + screened_rates(k_Co57_to_p_Fe56_derived)*Y(Co57)) + (-screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*Y(H1)*state.rho + screened_rates(k_Ni58_to_p_Co57_derived)*Y(Ni58)) + + (-screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*Y(H1)*state.rho + screened_rates(k_Cu59_to_p_Ni58_derived)*Y(Cu59)) + (screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(He4)*Y(Mn51)*state.rho + -screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*Y(H1)*state.rho) + (screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*Y(He4)*state.rho + -screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*Y(H1)*state.rho) + (screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*Y(N)*state.rho + -screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*Y(H1)*state.rho) + @@ -1094,6 +770,8 @@ void rhs_nuc(const burn_t& state, (-screened_rates(k_He4_Cr48_to_Fe52_reaclib)*Y(Cr48)*Y(He4)*state.rho + screened_rates(k_Fe52_to_He4_Cr48_derived)*Y(Fe52)) + (-screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(He4)*Y(Mn51)*state.rho + screened_rates(k_Co55_to_He4_Mn51_derived)*Y(Co55)) + (-screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*Y(He4)*state.rho + screened_rates(k_Ni56_to_He4_Fe52_derived)*Y(Ni56)) + + (-screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_Cu59_to_He4_Co55_derived)*Y(Cu59)) + + (-screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*Y(Ni56)*state.rho + screened_rates(k_Zn60_to_He4_Ni56_derived)*Y(Zn60)) + (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_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) + @@ -1103,11 +781,13 @@ void rhs_nuc(const burn_t& state, (screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*Y(H1)*state.rho + -screened_rates(k_He4_Si28_to_p_P31_derived)*Y(He4)*Y(Si28)*state.rho) + (-screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*Y(He4)*state.rho + screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*Y(H1)*state.rho) + (-screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*Y(He4)*state.rho + screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*Y(H1)*state.rho) + + (screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*Y(H1)*state.rho + -screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*Y(Ni56)*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_Fe54_to_Ni58_reaclib)*Y(Fe54)*Y(He4)*state.rho + screened_rates(k_Ni58_to_He4_Fe54_derived)*Y(Ni58)) + (-screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(He4)*Y(Mn51)*state.rho + screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*Y(H1)*state.rho) + (-screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*Y(H1)*state.rho) + (screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(Co57)*Y(H1)*state.rho + -screened_rates(k_He4_Fe54_to_p_Co57_derived)*Y(Fe54)*Y(He4)*state.rho) + + (screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*Y(N)*state.rho + -screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*Y(He4)*state.rho) + (-screened_rates(k_S32_He4_to_Ar36_approx)*Y(He4)*Y(S32)*state.rho + screened_rates(k_Ar36_to_S32_He4_approx)*Y(Ar36)) + (-screened_rates(k_Ar36_He4_to_Ca40_approx)*Y(Ar36)*Y(He4)*state.rho + screened_rates(k_Ca40_to_Ar36_He4_approx)*Y(Ca40)) + (-screened_rates(k_Ca40_He4_to_Ti44_approx)*Y(Ca40)*Y(He4)*state.rho + screened_rates(k_Ti44_to_Ca40_He4_approx)*Y(Ti44)) + @@ -1229,6 +909,7 @@ void rhs_nuc(const burn_t& state, ydot_nuc(Co55) = (screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(He4)*Y(Mn51)*state.rho + -screened_rates(k_Co55_to_He4_Mn51_derived)*Y(Co55)) + (-screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*Y(H1)*state.rho + screened_rates(k_Ni56_to_p_Co55_derived)*Y(Ni56)) + + (-screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_Cu59_to_He4_Co55_derived)*Y(Cu59)) + (screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*Y(He4)*state.rho + -screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*Y(H1)*state.rho) + (screened_rates(k_p_Fe54_to_Co55_reaclib)*Y(Fe54)*Y(H1)*state.rho + -screened_rates(k_Co55_to_p_Fe54_derived)*Y(Co55)) + (-screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*Y(N)*state.rho + screened_rates(k_Co56_to_n_Co55_derived)*Y(Co56)) + @@ -1239,6 +920,7 @@ void rhs_nuc(const burn_t& state, (-screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*Y(N)*state.rho + screened_rates(k_Co57_to_n_Co56_derived)*Y(Co57)) + (-screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*Y(N)*state.rho + screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*Y(H1)*state.rho) + (screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*Y(N)*state.rho + -screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*Y(H1)*state.rho) + + (screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*Y(N)*state.rho + -screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*Y(He4)*state.rho) + (-screened_rates(k_Co56_to_Fe56_weaktab)*Y(Co56) + screened_rates(k_Fe56_to_Co56_weaktab)*Y(Fe56)) + (screened_rates(k_Ni56_to_Co56_weaktab)*Y(Ni56) + -screened_rates(k_Co56_to_Ni56_weaktab)*Y(Co56)); @@ -1251,6 +933,8 @@ void rhs_nuc(const burn_t& state, ydot_nuc(Ni56) = (screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*Y(He4)*state.rho + -screened_rates(k_Ni56_to_He4_Fe52_derived)*Y(Ni56)) + (screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*Y(H1)*state.rho + -screened_rates(k_Ni56_to_p_Co55_derived)*Y(Ni56)) + + (-screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*Y(Ni56)*state.rho + screened_rates(k_Zn60_to_He4_Ni56_derived)*Y(Zn60)) + + (screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*Y(H1)*state.rho + -screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*Y(Ni56)*state.rho) + (-screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*Y(N)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*Y(H1)*state.rho) + (-screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) + screened_rates(k_Ni58_to_Ni56_n_n_approx)*Y(Ni58)) + (-screened_rates(k_Ni56_to_Co56_weaktab)*Y(Ni56) + screened_rates(k_Co56_to_Ni56_weaktab)*Y(Co56)); @@ -1258,9 +942,21 @@ void rhs_nuc(const burn_t& state, ydot_nuc(Ni58) = (screened_rates(k_He4_Fe54_to_Ni58_reaclib)*Y(Fe54)*Y(He4)*state.rho + -screened_rates(k_Ni58_to_He4_Fe54_derived)*Y(Ni58)) + (screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*Y(H1)*state.rho + -screened_rates(k_Ni58_to_p_Co57_derived)*Y(Ni58)) + + (-screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*Y(H1)*state.rho + screened_rates(k_Cu59_to_p_Ni58_derived)*Y(Cu59)) + (screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*Y(He4)*state.rho + -screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*Y(H1)*state.rho) + (screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) + -screened_rates(k_Ni58_to_Ni56_n_n_approx)*Y(Ni58)); + ydot_nuc(Cu59) = + (screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*Y(He4)*state.rho + -screened_rates(k_Cu59_to_He4_Co55_derived)*Y(Cu59)) + + (-screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*Y(H1)*state.rho + screened_rates(k_Zn60_to_p_Cu59_derived)*Y(Zn60)) + + (-screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*Y(H1)*state.rho + screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*Y(Ni56)*state.rho) + + (screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*Y(H1)*state.rho + -screened_rates(k_Cu59_to_p_Ni58_derived)*Y(Cu59)) + + (-screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*Y(N)*state.rho + screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*Y(He4)*state.rho); + + ydot_nuc(Zn60) = + (screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*Y(Ni56)*state.rho + -screened_rates(k_Zn60_to_He4_Ni56_derived)*Y(Zn60)) + + (screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*Y(H1)*state.rho + -screened_rates(k_Zn60_to_p_Cu59_derived)*Y(Zn60)); + } @@ -1320,13 +1016,14 @@ void jac_nuc(const burn_t& state, amrex::Real scratch; - scratch = -4.0*screened_rates(k_Fe52_n_n_to_Fe54_approx)*Y(Fe52)*Y(N)*amrex::Math::powi<2>(state.rho) - 4.0*screened_rates(k_Fe54_n_n_to_Fe56_approx)*Y(Fe54)*Y(N)*amrex::Math::powi<2>(state.rho) - 4.0*screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*Y(N)*amrex::Math::powi<2>(state.rho) - screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho - screened_rates(k_n_to_p_weaktab); + scratch = -4.0*screened_rates(k_Fe52_n_n_to_Fe54_approx)*Y(Fe52)*Y(N)*amrex::Math::powi<2>(state.rho) - 4.0*screened_rates(k_Fe54_n_n_to_Fe56_approx)*Y(Fe54)*Y(N)*amrex::Math::powi<2>(state.rho) - 4.0*screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*Y(N)*amrex::Math::powi<2>(state.rho) - screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*state.rho - screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho - screened_rates(k_n_to_p_weaktab); jac.set(N, N, scratch); scratch = screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho + screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*state.rho + screened_rates(k_p_to_n_weaktab); jac.set(N, H1, scratch); - jac.set(N, He4, 0.0); + scratch = screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*state.rho; + jac.set(N, He4, scratch); jac.set(N, C12, 0.0); @@ -1370,7 +1067,7 @@ void jac_nuc(const burn_t& state, scratch = -screened_rates(k_n_Co55_to_Co56_reaclib)*Y(N)*state.rho; jac.set(N, Co55, scratch); - scratch = screened_rates(k_Co56_to_n_Co55_derived) - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(N)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(N)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(H1)*state.rho; + scratch = screened_rates(k_Co56_to_n_Co55_derived) + screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(He4)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(N)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(N)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(H1)*state.rho; jac.set(N, Co56, scratch); scratch = screened_rates(k_Co57_to_n_Co56_derived); @@ -1382,13 +1079,18 @@ void jac_nuc(const burn_t& state, scratch = 2.0*screened_rates(k_Ni58_to_Ni56_n_n_approx); jac.set(N, Ni58, scratch); + scratch = -screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(N)*state.rho; + jac.set(N, Cu59, scratch); + + jac.set(N, Zn60, 0.0); + scratch = screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho + screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho + screened_rates(k_n_to_p_weaktab); jac.set(H1, N, scratch); - scratch = -screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_Si28_reaclib)*Y(Al27)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*state.rho - screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*state.rho - screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho - screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Fe54_to_Co55_reaclib)*Y(Fe54)*state.rho - screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*state.rho - screened_rates(k_p_Fe56_to_Co57_reaclib)*Y(Fe56)*state.rho - screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*state.rho - screened_rates(k_p_Mn51_to_Fe52_reaclib)*Y(Mn51)*state.rho - screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho - screened_rates(k_p_Na23_to_C12_C12_derived)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_Mg24_reaclib)*Y(Na23)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho - screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho - screened_rates(k_p_P31_to_O16_O16_derived)*Y(P31)*state.rho - screened_rates(k_p_P31_to_S32_reaclib)*Y(P31)*state.rho - screened_rates(k_p_to_n_weaktab); + scratch = -screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_Si28_reaclib)*Y(Al27)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho - screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*state.rho - screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*state.rho - screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho - screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*state.rho - screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*state.rho - screened_rates(k_p_Fe54_to_Co55_reaclib)*Y(Fe54)*state.rho - screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*state.rho - screened_rates(k_p_Fe56_to_Co57_reaclib)*Y(Fe56)*state.rho - screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*state.rho - screened_rates(k_p_Mn51_to_Fe52_reaclib)*Y(Mn51)*state.rho - screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho - screened_rates(k_p_Na23_to_C12_C12_derived)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_Mg24_reaclib)*Y(Na23)*state.rho - screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho - screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho - screened_rates(k_p_P31_to_O16_O16_derived)*Y(P31)*state.rho - screened_rates(k_p_P31_to_S32_reaclib)*Y(P31)*state.rho - screened_rates(k_p_to_n_weaktab); jac.set(H1, H1, scratch); - scratch = screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*state.rho + screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho + screened_rates(k_He4_Fe54_to_p_Co57_derived)*Y(Fe54)*state.rho + screened_rates(k_He4_Mg24_to_p_Al27_derived)*Y(Mg24)*state.rho + screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(Mn51)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_Ne20_to_p_Na23_derived)*Y(Ne20)*state.rho + screened_rates(k_He4_Si28_to_p_P31_derived)*Y(Si28)*state.rho; + scratch = screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*state.rho + screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho + screened_rates(k_He4_Fe54_to_p_Co57_derived)*Y(Fe54)*state.rho + screened_rates(k_He4_Mg24_to_p_Al27_derived)*Y(Mg24)*state.rho + screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(Mn51)*state.rho + screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*state.rho + screened_rates(k_He4_Ne20_to_p_Na23_derived)*Y(Ne20)*state.rho + screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(Ni56)*state.rho + screened_rates(k_He4_Si28_to_p_P31_derived)*Y(Si28)*state.rho; jac.set(H1, He4, scratch); scratch = 1.0*screened_rates(k_C12_C12_to_p_Na23_reaclib)*Y(C12)*state.rho + screened_rates(k_C12_O16_to_p_Al27_reaclib)*Y(O16)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(H1)*state.rho; @@ -1451,18 +1153,25 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_Co57_to_p_Fe56_derived) - screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(H1)*state.rho - screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(H1)*state.rho; jac.set(H1, Co57, scratch); - scratch = screened_rates(k_Ni56_to_p_Co55_derived) + screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(N)*state.rho; + scratch = screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*state.rho + screened_rates(k_Ni56_to_p_Co55_derived) + screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(N)*state.rho; jac.set(H1, Ni56, scratch); - scratch = screened_rates(k_Ni58_to_p_Co57_derived) - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; + scratch = screened_rates(k_Ni58_to_p_Co57_derived) - screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(H1)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; jac.set(H1, Ni58, scratch); - jac.set(He4, N, 0.0); + scratch = screened_rates(k_Cu59_to_p_Ni58_derived) - screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(H1)*state.rho - screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(H1)*state.rho; + jac.set(H1, Cu59, scratch); - scratch = screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho + screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*state.rho + screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(Co57)*state.rho + screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*state.rho + screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho + screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho + screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho + screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho; + scratch = screened_rates(k_Zn60_to_p_Cu59_derived); + jac.set(H1, Zn60, scratch); + + scratch = screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*state.rho; + jac.set(He4, N, scratch); + + scratch = screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho + screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*state.rho + screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(Co57)*state.rho + screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*state.rho + screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*state.rho + screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho + screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho + screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho + screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho; jac.set(He4, H1, scratch); - scratch = -screened_rates(k_Ar36_He4_to_Ca40_approx)*Y(Ar36)*state.rho - screened_rates(k_Ca40_He4_to_Ti44_approx)*Y(Ca40)*state.rho - screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho - screened_rates(k_He4_Cr48_to_Fe52_reaclib)*Y(Cr48)*state.rho - screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*state.rho - screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*state.rho - screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho - screened_rates(k_He4_Fe54_to_Ni58_reaclib)*Y(Fe54)*state.rho - screened_rates(k_He4_Fe54_to_p_Co57_derived)*Y(Fe54)*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_Mg24_to_Si28_reaclib)*Y(Mg24)*state.rho - screened_rates(k_He4_Mg24_to_p_Al27_derived)*Y(Mg24)*state.rho - screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(Mn51)*state.rho - screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(Mn51)*state.rho - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*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_Ne20_to_p_Na23_derived)*Y(Ne20)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_Si28_to_O16_O16_derived)*Y(Si28)*state.rho - screened_rates(k_He4_Si28_to_S32_reaclib)*Y(Si28)*state.rho - screened_rates(k_He4_Si28_to_p_P31_derived)*Y(Si28)*state.rho - screened_rates(k_S32_He4_to_Ar36_approx)*Y(S32)*state.rho - screened_rates(k_Ti44_He4_to_Cr48_approx)*Y(Ti44)*state.rho; + scratch = -screened_rates(k_Ar36_He4_to_Ca40_approx)*Y(Ar36)*state.rho - screened_rates(k_Ca40_He4_to_Ti44_approx)*Y(Ca40)*state.rho - screened_rates(k_He4_C12_to_O16_reaclib)*Y(C12)*state.rho - screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*state.rho - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho - screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*state.rho - screened_rates(k_He4_Cr48_to_Fe52_reaclib)*Y(Cr48)*state.rho - screened_rates(k_He4_Cr48_to_p_Mn51_reaclib)*Y(Cr48)*state.rho - screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*state.rho - screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho - screened_rates(k_He4_Fe54_to_Ni58_reaclib)*Y(Fe54)*state.rho - screened_rates(k_He4_Fe54_to_p_Co57_derived)*Y(Fe54)*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_Mg24_to_Si28_reaclib)*Y(Mg24)*state.rho - screened_rates(k_He4_Mg24_to_p_Al27_derived)*Y(Mg24)*state.rho - screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(Mn51)*state.rho - screened_rates(k_He4_Mn51_to_p_Fe54_reaclib)*Y(Mn51)*state.rho - screened_rates(k_He4_N13_to_p_O16_reaclib)*Y(N13)*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_Ne20_to_p_Na23_derived)*Y(Ne20)*state.rho - screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(Ni56)*state.rho - screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(Ni56)*state.rho - screened_rates(k_He4_O16_to_Ne20_reaclib)*Y(O16)*state.rho - screened_rates(k_He4_Si28_to_O16_O16_derived)*Y(Si28)*state.rho - screened_rates(k_He4_Si28_to_S32_reaclib)*Y(Si28)*state.rho - screened_rates(k_He4_Si28_to_p_P31_derived)*Y(Si28)*state.rho - screened_rates(k_S32_He4_to_Ar36_approx)*Y(S32)*state.rho - screened_rates(k_Ti44_He4_to_Cr48_approx)*Y(Ti44)*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; @@ -1518,20 +1227,27 @@ void jac_nuc(const burn_t& state, jac.set(He4, Fe56, 0.0); - scratch = screened_rates(k_Co55_to_He4_Mn51_derived) - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(He4)*state.rho + screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(H1)*state.rho; + scratch = screened_rates(k_Co55_to_He4_Mn51_derived) - screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(He4)*state.rho + screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(H1)*state.rho; jac.set(He4, Co55, scratch); - jac.set(He4, Co56, 0.0); + scratch = -screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(He4)*state.rho; + jac.set(He4, Co56, scratch); scratch = screened_rates(k_p_Co57_to_He4_Fe54_reaclib)*Y(H1)*state.rho; jac.set(He4, Co57, scratch); - scratch = screened_rates(k_Ni56_to_He4_Fe52_derived); + scratch = -screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*state.rho + screened_rates(k_Ni56_to_He4_Fe52_derived); jac.set(He4, Ni56, scratch); scratch = screened_rates(k_Ni58_to_He4_Fe54_derived) + screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; jac.set(He4, Ni58, scratch); + scratch = screened_rates(k_Cu59_to_He4_Co55_derived) + screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(N)*state.rho + screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(H1)*state.rho; + jac.set(He4, Cu59, scratch); + + scratch = screened_rates(k_Zn60_to_He4_Ni56_derived); + jac.set(He4, Zn60, scratch); + jac.set(C12, N, 0.0); scratch = screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*state.rho - screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho + 2.0*screened_rates(k_p_Na23_to_C12_C12_derived)*Y(Na23)*state.rho; @@ -1594,6 +1310,10 @@ void jac_nuc(const burn_t& state, jac.set(C12, Ni58, 0.0); + jac.set(C12, Cu59, 0.0); + + jac.set(C12, Zn60, 0.0); + jac.set(N13, N, 0.0); scratch = screened_rates(k_p_C12_to_N13_reaclib)*Y(C12)*state.rho + screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho; @@ -1651,6 +1371,10 @@ void jac_nuc(const burn_t& state, jac.set(N13, Ni58, 0.0); + jac.set(N13, Cu59, 0.0); + + jac.set(N13, Zn60, 0.0); + jac.set(O16, N, 0.0); scratch = screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*state.rho - screened_rates(k_p_O16_to_He4_N13_derived)*Y(O16)*state.rho + 2.0*screened_rates(k_p_P31_to_O16_O16_derived)*Y(P31)*state.rho; @@ -1714,6 +1438,10 @@ void jac_nuc(const burn_t& state, jac.set(O16, Ni58, 0.0); + jac.set(O16, Cu59, 0.0); + + jac.set(O16, Zn60, 0.0); + jac.set(Ne20, N, 0.0); scratch = screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho; @@ -1773,6 +1501,10 @@ void jac_nuc(const burn_t& state, jac.set(Ne20, Ni58, 0.0); + jac.set(Ne20, Cu59, 0.0); + + jac.set(Ne20, Zn60, 0.0); + jac.set(Na23, N, 0.0); scratch = -screened_rates(k_p_Na23_to_C12_C12_derived)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_He4_Ne20_reaclib)*Y(Na23)*state.rho - screened_rates(k_p_Na23_to_Mg24_reaclib)*Y(Na23)*state.rho; @@ -1831,6 +1563,10 @@ void jac_nuc(const burn_t& state, jac.set(Na23, Ni58, 0.0); + jac.set(Na23, Cu59, 0.0); + + jac.set(Na23, Zn60, 0.0); + jac.set(Mg24, N, 0.0); scratch = screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho + screened_rates(k_p_Na23_to_Mg24_reaclib)*Y(Na23)*state.rho; @@ -1892,6 +1628,10 @@ void jac_nuc(const burn_t& state, jac.set(Mg24, Ni58, 0.0); + jac.set(Mg24, Cu59, 0.0); + + jac.set(Mg24, Zn60, 0.0); + jac.set(Al27, N, 0.0); scratch = -screened_rates(k_p_Al27_to_C12_O16_derived)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_He4_Mg24_reaclib)*Y(Al27)*state.rho - screened_rates(k_p_Al27_to_Si28_reaclib)*Y(Al27)*state.rho; @@ -1951,6 +1691,10 @@ void jac_nuc(const burn_t& state, jac.set(Al27, Ni58, 0.0); + jac.set(Al27, Cu59, 0.0); + + jac.set(Al27, Zn60, 0.0); + jac.set(Si28, N, 0.0); scratch = screened_rates(k_p_Al27_to_Si28_reaclib)*Y(Al27)*state.rho + screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho; @@ -2012,6 +1756,10 @@ void jac_nuc(const burn_t& state, jac.set(Si28, Ni58, 0.0); + jac.set(Si28, Cu59, 0.0); + + jac.set(Si28, Zn60, 0.0); + jac.set(P31, N, 0.0); scratch = -screened_rates(k_p_P31_to_He4_Si28_reaclib)*Y(P31)*state.rho - screened_rates(k_p_P31_to_O16_O16_derived)*Y(P31)*state.rho - screened_rates(k_p_P31_to_S32_reaclib)*Y(P31)*state.rho; @@ -2070,6 +1818,10 @@ void jac_nuc(const burn_t& state, jac.set(P31, Ni58, 0.0); + jac.set(P31, Cu59, 0.0); + + jac.set(P31, Zn60, 0.0); + jac.set(S32, N, 0.0); scratch = screened_rates(k_p_P31_to_S32_reaclib)*Y(P31)*state.rho; @@ -2129,6 +1881,10 @@ void jac_nuc(const burn_t& state, jac.set(S32, Ni58, 0.0); + jac.set(S32, Cu59, 0.0); + + jac.set(S32, Zn60, 0.0); + jac.set(Ar36, N, 0.0); jac.set(Ar36, H1, 0.0); @@ -2185,6 +1941,10 @@ void jac_nuc(const burn_t& state, jac.set(Ar36, Ni58, 0.0); + jac.set(Ar36, Cu59, 0.0); + + jac.set(Ar36, Zn60, 0.0); + jac.set(Ca40, N, 0.0); jac.set(Ca40, H1, 0.0); @@ -2241,6 +2001,10 @@ void jac_nuc(const burn_t& state, jac.set(Ca40, Ni58, 0.0); + jac.set(Ca40, Cu59, 0.0); + + jac.set(Ca40, Zn60, 0.0); + jac.set(Ti44, N, 0.0); jac.set(Ti44, H1, 0.0); @@ -2297,6 +2061,10 @@ void jac_nuc(const burn_t& state, jac.set(Ti44, Ni58, 0.0); + jac.set(Ti44, Cu59, 0.0); + + jac.set(Ti44, Zn60, 0.0); + jac.set(Cr48, N, 0.0); scratch = screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho; @@ -2355,6 +2123,10 @@ void jac_nuc(const burn_t& state, jac.set(Cr48, Ni58, 0.0); + jac.set(Cr48, Cu59, 0.0); + + jac.set(Cr48, Zn60, 0.0); + jac.set(Mn51, N, 0.0); scratch = screened_rates(k_p_Fe54_to_He4_Mn51_derived)*Y(Fe54)*state.rho - screened_rates(k_p_Mn51_to_Fe52_reaclib)*Y(Mn51)*state.rho - screened_rates(k_p_Mn51_to_He4_Cr48_derived)*Y(Mn51)*state.rho; @@ -2414,6 +2186,10 @@ void jac_nuc(const burn_t& state, jac.set(Mn51, Ni58, 0.0); + jac.set(Mn51, Cu59, 0.0); + + jac.set(Mn51, Zn60, 0.0); + scratch = -2.0*screened_rates(k_Fe52_n_n_to_Fe54_approx)*Y(Fe52)*Y(N)*amrex::Math::powi<2>(state.rho); jac.set(Fe52, N, scratch); @@ -2475,6 +2251,10 @@ void jac_nuc(const burn_t& state, jac.set(Fe52, Ni58, 0.0); + jac.set(Fe52, Cu59, 0.0); + + jac.set(Fe52, Zn60, 0.0); + scratch = 2.0*screened_rates(k_Fe52_n_n_to_Fe54_approx)*Y(Fe52)*Y(N)*amrex::Math::powi<2>(state.rho) - 2.0*screened_rates(k_Fe54_n_n_to_Fe56_approx)*Y(Fe54)*Y(N)*amrex::Math::powi<2>(state.rho); jac.set(Fe54, N, scratch); @@ -2537,6 +2317,10 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_Ni58_to_He4_Fe54_derived); jac.set(Fe54, Ni58, scratch); + jac.set(Fe54, Cu59, 0.0); + + jac.set(Fe54, Zn60, 0.0); + scratch = 2.0*screened_rates(k_Fe54_n_n_to_Fe56_approx)*Y(Fe54)*Y(N)*amrex::Math::powi<2>(state.rho) + screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho; jac.set(Fe56, N, scratch); @@ -2595,13 +2379,17 @@ void jac_nuc(const burn_t& state, jac.set(Fe56, Ni58, 0.0); + jac.set(Fe56, Cu59, 0.0); + + jac.set(Fe56, Zn60, 0.0); + scratch = -screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*state.rho; jac.set(Co55, N, scratch); scratch = -screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(Co55)*state.rho - screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*state.rho + screened_rates(k_p_Fe54_to_Co55_reaclib)*Y(Fe54)*state.rho + screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho; jac.set(Co55, H1, scratch); - scratch = -screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho + screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(Mn51)*state.rho; + scratch = -screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*state.rho - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Fe52_to_p_Co55_reaclib)*Y(Fe52)*state.rho + screened_rates(k_He4_Mn51_to_Co55_reaclib)*Y(Mn51)*state.rho; jac.set(Co55, He4, scratch); jac.set(Co55, C12, 0.0); @@ -2643,7 +2431,7 @@ void jac_nuc(const burn_t& state, jac.set(Co55, Fe56, 0.0); - scratch = -screened_rates(k_Co55_to_He4_Mn51_derived) - screened_rates(k_Co55_to_p_Fe54_derived) - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(He4)*state.rho - screened_rates(k_n_Co55_to_Co56_reaclib)*Y(N)*state.rho - screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(H1)*state.rho - screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(H1)*state.rho; + scratch = -screened_rates(k_Co55_to_He4_Mn51_derived) - screened_rates(k_Co55_to_p_Fe54_derived) - screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(He4)*state.rho - screened_rates(k_n_Co55_to_Co56_reaclib)*Y(N)*state.rho - screened_rates(k_p_Co55_to_He4_Fe52_derived)*Y(H1)*state.rho - screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(H1)*state.rho; jac.set(Co55, Co55, scratch); scratch = screened_rates(k_Co56_to_n_Co55_derived); @@ -2657,13 +2445,19 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; jac.set(Co55, Ni58, scratch); - scratch = screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho + screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho; + scratch = screened_rates(k_Cu59_to_He4_Co55_derived); + jac.set(Co55, Cu59, scratch); + + jac.set(Co55, Zn60, 0.0); + + scratch = screened_rates(k_n_Co55_to_Co56_reaclib)*Y(Co55)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(Co56)*state.rho + screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*state.rho + screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho; jac.set(Co56, N, scratch); scratch = -screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho + screened_rates(k_p_Fe56_to_n_Co56_derived)*Y(Fe56)*state.rho; jac.set(Co56, H1, scratch); - jac.set(Co56, He4, 0.0); + scratch = -screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*state.rho; + jac.set(Co56, He4, scratch); jac.set(Co56, C12, 0.0); @@ -2705,7 +2499,7 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_n_Co55_to_Co56_reaclib)*Y(N)*state.rho; jac.set(Co56, Co55, scratch); - scratch = -screened_rates(k_Co56_to_Fe56_weaktab) - screened_rates(k_Co56_to_Ni56_weaktab) - screened_rates(k_Co56_to_n_Co55_derived) - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(N)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(N)*state.rho - screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(H1)*state.rho; + scratch = -screened_rates(k_Co56_to_Fe56_weaktab) - screened_rates(k_Co56_to_Ni56_weaktab) - screened_rates(k_Co56_to_n_Co55_derived) - screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(He4)*state.rho - screened_rates(k_n_Co56_to_Co57_reaclib)*Y(N)*state.rho - screened_rates(k_n_Co56_to_p_Fe56_reaclib)*Y(N)*state.rho - screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(H1)*state.rho; jac.set(Co56, Co56, scratch); scratch = screened_rates(k_Co57_to_n_Co56_derived); @@ -2716,6 +2510,11 @@ void jac_nuc(const burn_t& state, jac.set(Co56, Ni58, 0.0); + scratch = screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(N)*state.rho; + jac.set(Co56, Cu59, scratch); + + jac.set(Co56, Zn60, 0.0); + scratch = screened_rates(k_n_Co56_to_Co57_reaclib)*Y(Co56)*state.rho; jac.set(Co57, N, scratch); @@ -2776,13 +2575,17 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_Ni58_to_p_Co57_derived); jac.set(Co57, Ni58, scratch); + jac.set(Co57, Cu59, 0.0); + + jac.set(Co57, Zn60, 0.0); + scratch = -2.0*screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*Y(N)*amrex::Math::powi<2>(state.rho) - screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(Ni56)*state.rho; jac.set(Ni56, N, scratch); - scratch = screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho; + scratch = screened_rates(k_p_Co55_to_Ni56_reaclib)*Y(Co55)*state.rho + screened_rates(k_p_Co56_to_n_Ni56_derived)*Y(Co56)*state.rho + screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*state.rho; jac.set(Ni56, H1, scratch); - scratch = screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*state.rho; + scratch = screened_rates(k_He4_Fe52_to_Ni56_reaclib)*Y(Fe52)*state.rho - screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(Ni56)*state.rho - screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(Ni56)*state.rho; jac.set(Ni56, He4, scratch); jac.set(Ni56, C12, 0.0); @@ -2830,16 +2633,22 @@ void jac_nuc(const burn_t& state, jac.set(Ni56, Co57, 0.0); - scratch = -screened_rates(k_Ni56_n_n_to_Ni58_approx)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) - screened_rates(k_Ni56_to_Co56_weaktab) - screened_rates(k_Ni56_to_He4_Fe52_derived) - screened_rates(k_Ni56_to_p_Co55_derived) - screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(N)*state.rho; + scratch = -screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*state.rho - screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*state.rho - screened_rates(k_Ni56_n_n_to_Ni58_approx)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho) - screened_rates(k_Ni56_to_Co56_weaktab) - screened_rates(k_Ni56_to_He4_Fe52_derived) - screened_rates(k_Ni56_to_p_Co55_derived) - screened_rates(k_n_Ni56_to_p_Co56_reaclib)*Y(N)*state.rho; jac.set(Ni56, Ni56, scratch); scratch = screened_rates(k_Ni58_to_Ni56_n_n_approx); jac.set(Ni56, Ni58, scratch); + scratch = screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(H1)*state.rho; + jac.set(Ni56, Cu59, scratch); + + scratch = screened_rates(k_Zn60_to_He4_Ni56_derived); + jac.set(Ni56, Zn60, scratch); + scratch = 2.0*screened_rates(k_Ni56_n_n_to_Ni58_approx)*Y(Ni56)*Y(N)*amrex::Math::powi<2>(state.rho); jac.set(Ni58, N, scratch); - scratch = screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho; + scratch = screened_rates(k_p_Co57_to_Ni58_reaclib)*Y(Co57)*state.rho - screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(Ni58)*state.rho; jac.set(Ni58, H1, scratch); scratch = screened_rates(k_He4_Co55_to_p_Ni58_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Fe54_to_Ni58_reaclib)*Y(Fe54)*state.rho; @@ -2893,9 +2702,140 @@ void jac_nuc(const burn_t& state, scratch = screened_rates(k_Ni56_n_n_to_Ni58_approx)*amrex::Math::powi<2>(Y(N))*amrex::Math::powi<2>(state.rho); jac.set(Ni58, Ni56, scratch); - scratch = -screened_rates(k_Ni58_to_He4_Fe54_derived) - screened_rates(k_Ni58_to_Ni56_n_n_approx) - screened_rates(k_Ni58_to_p_Co57_derived) - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; + scratch = -screened_rates(k_Ni58_to_He4_Fe54_derived) - screened_rates(k_Ni58_to_Ni56_n_n_approx) - screened_rates(k_Ni58_to_p_Co57_derived) - screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(H1)*state.rho - screened_rates(k_p_Ni58_to_He4_Co55_derived)*Y(H1)*state.rho; jac.set(Ni58, Ni58, scratch); + scratch = screened_rates(k_Cu59_to_p_Ni58_derived); + jac.set(Ni58, Cu59, scratch); + + jac.set(Ni58, Zn60, 0.0); + + scratch = -screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(Cu59)*state.rho; + jac.set(Cu59, N, scratch); + + scratch = -screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(Cu59)*state.rho - screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*state.rho + screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(Ni58)*state.rho; + jac.set(Cu59, H1, scratch); + + scratch = screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(Co55)*state.rho + screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(Co56)*state.rho + screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(Ni56)*state.rho; + jac.set(Cu59, He4, scratch); + + jac.set(Cu59, C12, 0.0); + + jac.set(Cu59, N13, 0.0); + + jac.set(Cu59, O16, 0.0); + + jac.set(Cu59, Ne20, 0.0); + + jac.set(Cu59, Na23, 0.0); + + jac.set(Cu59, Mg24, 0.0); + + jac.set(Cu59, Al27, 0.0); + + jac.set(Cu59, Si28, 0.0); + + jac.set(Cu59, P31, 0.0); + + jac.set(Cu59, S32, 0.0); + + jac.set(Cu59, Ar36, 0.0); + + jac.set(Cu59, Ca40, 0.0); + + jac.set(Cu59, Ti44, 0.0); + + jac.set(Cu59, Cr48, 0.0); + + jac.set(Cu59, Mn51, 0.0); + + jac.set(Cu59, Fe52, 0.0); + + jac.set(Cu59, Fe54, 0.0); + + jac.set(Cu59, Fe56, 0.0); + + scratch = screened_rates(k_He4_Co55_to_Cu59_reaclib)*Y(He4)*state.rho; + jac.set(Cu59, Co55, scratch); + + scratch = screened_rates(k_He4_Co56_to_n_Cu59_derived)*Y(He4)*state.rho; + jac.set(Cu59, Co56, scratch); + + jac.set(Cu59, Co57, 0.0); + + scratch = screened_rates(k_He4_Ni56_to_p_Cu59_derived)*Y(He4)*state.rho; + jac.set(Cu59, Ni56, scratch); + + scratch = screened_rates(k_p_Ni58_to_Cu59_reaclib)*Y(H1)*state.rho; + jac.set(Cu59, Ni58, scratch); + + scratch = -screened_rates(k_Cu59_to_He4_Co55_derived) - screened_rates(k_Cu59_to_p_Ni58_derived) - screened_rates(k_n_Cu59_to_He4_Co56_reaclib)*Y(N)*state.rho - screened_rates(k_p_Cu59_to_He4_Ni56_reaclib)*Y(H1)*state.rho - screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(H1)*state.rho; + jac.set(Cu59, Cu59, scratch); + + scratch = screened_rates(k_Zn60_to_p_Cu59_derived); + jac.set(Cu59, Zn60, scratch); + + jac.set(Zn60, N, 0.0); + + scratch = screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(Cu59)*state.rho; + jac.set(Zn60, H1, scratch); + + scratch = screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(Ni56)*state.rho; + jac.set(Zn60, He4, scratch); + + jac.set(Zn60, C12, 0.0); + + jac.set(Zn60, N13, 0.0); + + jac.set(Zn60, O16, 0.0); + + jac.set(Zn60, Ne20, 0.0); + + jac.set(Zn60, Na23, 0.0); + + jac.set(Zn60, Mg24, 0.0); + + jac.set(Zn60, Al27, 0.0); + + jac.set(Zn60, Si28, 0.0); + + jac.set(Zn60, P31, 0.0); + + jac.set(Zn60, S32, 0.0); + + jac.set(Zn60, Ar36, 0.0); + + jac.set(Zn60, Ca40, 0.0); + + jac.set(Zn60, Ti44, 0.0); + + jac.set(Zn60, Cr48, 0.0); + + jac.set(Zn60, Mn51, 0.0); + + jac.set(Zn60, Fe52, 0.0); + + jac.set(Zn60, Fe54, 0.0); + + jac.set(Zn60, Fe56, 0.0); + + jac.set(Zn60, Co55, 0.0); + + jac.set(Zn60, Co56, 0.0); + + jac.set(Zn60, Co57, 0.0); + + scratch = screened_rates(k_He4_Ni56_to_Zn60_reaclib)*Y(He4)*state.rho; + jac.set(Zn60, Ni56, scratch); + + jac.set(Zn60, Ni58, 0.0); + + scratch = screened_rates(k_p_Cu59_to_Zn60_reaclib)*Y(H1)*state.rho; + jac.set(Zn60, Cu59, scratch); + + scratch = -screened_rates(k_Zn60_to_He4_Ni56_derived) - screened_rates(k_Zn60_to_p_Cu59_derived); + jac.set(Zn60, Zn60, scratch); + } diff --git a/networks/he-burn/ase-iron/ase-iron.png b/networks/he-burn/ase-iron/ase-iron.png index d8a00636c4dd740001a00c455d226b3b7b90af89..87a853fd62d58fed5ce222dc4be4e8d867414778 100644 GIT binary patch literal 78211 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 diff --git a/networks/he-burn/ase-iron/ase_iron.py b/networks/he-burn/ase-iron/ase_iron.py index 2439cdbca..f8275c598 100644 --- a/networks/he-burn/ase-iron/ase_iron.py +++ b/networks/he-burn/ase-iron/ase_iron.py @@ -13,7 +13,7 @@ def get_library(): all_reactants = ["p", "he4", "c12", "o16", "ne20", "mg24", "si28", "s32", - "ar36", "ca40", "ti44", "cr48", "fe52", "ni56", + "ar36", "ca40", "ti44", "cr48", "fe52", "ni56", "cu59", "zn60", "al27", "p31", "cl35", "k39", "sc43", "v47", "mn51", "co55", "n13", "na23"] @@ -54,7 +54,7 @@ def get_library(): "mn51", "fe52", "fe53", "fe54", "fe55", "fe56", "co55", "co56", "co57", - "ni56", "ni57", "ni58"] + "ni56", "ni57", "ni58", "cu59", "zn60"] subch += reaclib_lib.linking_nuclei(iron_peak) weak_lib = pyna.TabularLibrary(ordering=["ffn", "langanke", "oda"]) iron_weak_lib = weak_lib.linking_nuclei(set(iron_peak + all_reactants)) @@ -110,7 +110,7 @@ def doit(): rotated=True, hide_xalpha=True, size=(1500, 450), node_size=600, node_font_size=9, - Z_range=(1, 29)) + Z_range=(1, 31)) net.write_network() diff --git a/networks/he-burn/ase-iron/derived_rates.H b/networks/he-burn/ase-iron/derived_rates.H index 36ccd5901..ac0e5a488 100644 --- a/networks/he-burn/ase-iron/derived_rates.H +++ b/networks/he-burn/ase-iron/derived_rates.H @@ -11,7 +11,7 @@ using namespace Rates; template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_N13_to_p_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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) { // N13 --> p + C12 @@ -49,13 +49,13 @@ void rate_N13_to_p_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 40.059128683693466 + -22.553277271250543 * tfactors.T9i + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 22.553277271250543 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.692 * tfactors.T943i + (1.0/3.0) * -0.230881 * tfactors.T923i + 4.44362 + (5.0/3.0) * -3.15898 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -70,13 +70,13 @@ void rate_N13_to_p_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 40.45372868369347 + -26.331767271250545 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 + 0.148883 * tfactors.T9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; 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; + 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] @@ -91,7 +91,7 @@ void rate_N13_to_p_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_O16_to_He4_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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 @@ -128,13 +128,13 @@ void rate_O16_to_He4_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex: 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -149,13 +149,13 @@ void rate_O16_to_He4_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex: 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -170,7 +170,7 @@ void rate_O16_to_He4_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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 @@ -205,12 +205,12 @@ void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex // ReacLib set derived from co10r ln_set_rate = 28.644822801502126 + -65.24608327101186 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 65.24608327101186 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -225,13 +225,13 @@ void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -246,13 +246,13 @@ void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -267,7 +267,7 @@ void rate_Ne20_to_He4_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Mg24_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Mg24_to_p_Na23_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 --> p + Na23 @@ -303,13 +303,13 @@ void rate_Mg24_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 34.107544561463015 + -138.96838756220697 * tfactors.T9i + -0.360588 * tfactors.T913 + 1.4187 * tfactors.T9 + -0.184061 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 138.96838756220697 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.360588 * tfactors.T923i + 1.4187 + (5.0/3.0) * -0.184061 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -323,12 +323,12 @@ void rate_Mg24_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex: // ReacLib set derived from il10r ln_set_rate = 20.02229456146302 + -137.30028756220696 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 137.30028756220696 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -343,13 +343,13 @@ void rate_Mg24_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 43.95564456146302 + -135.68809756220696 * tfactors.T9i + -20.6428 * tfactors.T913i + 1.52954 * tfactors.T913 + 2.7487 * tfactors.T9 + -1.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 135.68809756220696 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -20.6428 * tfactors.T943i + (1.0/3.0) * 1.52954 * tfactors.T923i + 2.7487 + (5.0/3.0) * -1.0 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -364,7 +364,7 @@ void rate_Mg24_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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 @@ -400,13 +400,13 @@ void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -420,12 +420,12 @@ void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amre // ReacLib set derived from il10r ln_set_rate = 26.803878839949377 + -117.33446873006793 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 117.33446873006793 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -439,12 +439,12 @@ void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amre // ReacLib set derived from il10r ln_set_rate = -13.884691160050625 + -110.62025873006793 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 110.62025873006793 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -459,13 +459,13 @@ void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -480,7 +480,7 @@ void rate_Mg24_to_He4_Ne20_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Si28_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Si28_to_p_Al27_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) { // Si28 --> p + Al27 @@ -516,13 +516,13 @@ void rate_Si28_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 11.796402252999236 + -136.3412367256539 * tfactors.T9i + 23.8634 * tfactors.T913 + -3.70135 * tfactors.T9 + 0.28964 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 136.3412367256539 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 23.8634 * tfactors.T923i + -3.70135 + (5.0/3.0) * 0.28964 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -537,13 +537,13 @@ void rate_Si28_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 111.48620225299923 + -134.8245897256539 * tfactors.T9i + -26.8327 * tfactors.T913i + -116.137 * tfactors.T913 + 0.00950567 * tfactors.T9 + 0.00999755 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 134.8245897256539 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.8327 * tfactors.T943i + (1.0/3.0) * -116.137 * tfactors.T923i + 0.00950567 + (5.0/3.0) * 0.00999755 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -558,13 +558,13 @@ void rate_Si28_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 46.569302252999236 + -134.4372767256539 * tfactors.T9i + -23.2205 * tfactors.T913i + -2.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 134.4372767256539 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -23.2205 * tfactors.T943i + (5.0/3.0) * -2.0 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -579,7 +579,7 @@ void rate_Si28_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Si28_to_He4_Mg24_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Si28_to_He4_Mg24_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) { // Si28 --> He4 + Mg24 @@ -614,12 +614,12 @@ void rate_Si28_to_He4_Mg24_derived(const tf_t& tfactors, amrex::Real& rate, amre // ReacLib set derived from st08r ln_set_rate = 32.902724006057724 + -131.4900751873663 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 131.4900751873663 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -634,13 +634,13 @@ void rate_Si28_to_He4_Mg24_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = -25.68644599394228 + -128.6942751873663 * tfactors.T9i + 21.3721 * tfactors.T913i + 37.7649 * tfactors.T913 + -4.10635 * tfactors.T9 + 0.249618 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 128.6942751873663 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.3721 * tfactors.T943i + (1.0/3.0) * 37.7649 * tfactors.T923i + -4.10635 + (5.0/3.0) * 0.249618 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -655,7 +655,7 @@ void rate_Si28_to_He4_Mg24_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_S32_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_S32_to_p_P31_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) { // S32 --> p + P31 @@ -691,13 +691,13 @@ void rate_S32_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 25.192389422303183 + -106.63906812813134 * tfactors.T9i + 8.09341 * tfactors.T913 + -0.615971 * tfactors.T9 + 0.031159 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 106.63906812813134 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 8.09341 * tfactors.T923i + -0.615971 + (5.0/3.0) * 0.031159 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -711,12 +711,12 @@ void rate_S32_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R // ReacLib set derived from il10r ln_set_rate = 21.702443422303183 + -105.12160812813134 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 105.12160812813134 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -731,13 +731,13 @@ void rate_S32_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 43.630433422303184 + -102.86202812813134 * tfactors.T9i + -25.3278 * tfactors.T913i + 6.4931 * tfactors.T913 + -9.27513 * tfactors.T9 + -0.610439 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 102.86202812813134 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -25.3278 * tfactors.T943i + (1.0/3.0) * 6.4931 * tfactors.T923i + -9.27513 + (5.0/3.0) * -0.610439 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -752,7 +752,7 @@ void rate_S32_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::R template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_S32_to_He4_Si28_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_S32_to_He4_Si28_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) { // S32 --> He4 + Si28 @@ -788,13 +788,13 @@ void rate_S32_to_He4_Si28_derived(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 72.8147025119699 + -80.62419844573513 * tfactors.T9i + -59.4896 * tfactors.T913i + 4.47205 * tfactors.T913 + -4.78989 * tfactors.T9 + 0.557201 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 80.62419844573513 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -59.4896 * tfactors.T943i + (1.0/3.0) * 4.47205 * tfactors.T923i + -4.78989 + (5.0/3.0) * 0.557201 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -809,7 +809,7 @@ void rate_S32_to_He4_Si28_derived(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe52_to_p_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe52_to_p_Mn51_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) { // Fe52 --> p + Mn51 @@ -845,13 +845,13 @@ void rate_Fe52_to_p_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 61.74743132228039 + -85.61663846070292 * tfactors.T9i + -36.1825 * tfactors.T913i + 0.873042 * tfactors.T913 + -2.89731 * tfactors.T9 + 0.364394 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 85.61663846070292 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.1825 * tfactors.T943i + (1.0/3.0) * 0.873042 * tfactors.T923i + -2.89731 + (5.0/3.0) * 0.364394 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -866,7 +866,7 @@ void rate_Fe52_to_p_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe52_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe52_to_He4_Cr48_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) { // Fe52 --> He4 + Cr48 @@ -902,13 +902,13 @@ void rate_Fe52_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 90.149113992515 + -92.09363997638769 * tfactors.T9i + -86.7459 * tfactors.T913i + -9.79373 * tfactors.T913 + -0.772169 * tfactors.T9 + 0.155883 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 92.09363997638769 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * -9.79373 * tfactors.T923i + -0.772169 + (5.0/3.0) * 0.155883 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -923,7 +923,7 @@ void rate_Fe52_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Co55_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Co55_to_He4_Mn51_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) { // Co55 --> He4 + Mn51 @@ -959,13 +959,13 @@ void rate_Co55_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 90.61473213109255 + -95.29300562248025 * tfactors.T9i + -89.274 * tfactors.T913i + -10.4373 * tfactors.T913 + 1.00492 * tfactors.T9 + -0.125548 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 95.29300562248025 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -10.4373 * tfactors.T923i + 1.00492 + (5.0/3.0) * -0.125548 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -980,7 +980,7 @@ void rate_Co55_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni56_to_p_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni56_to_p_Co55_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) { // Ni56 --> p + Co55 @@ -1016,13 +1016,13 @@ void rate_Ni56_to_p_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 63.15120404192561 + -83.16460378149378 * tfactors.T9i + -38.1053 * tfactors.T913i + -0.210947 * tfactors.T913 + -2.68377 * tfactors.T9 + 0.355814 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 83.16460378149378 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1053 * tfactors.T943i + (1.0/3.0) * -0.210947 * tfactors.T923i + -2.68377 + (5.0/3.0) * 0.355814 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1037,7 +1037,7 @@ void rate_Ni56_to_p_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni56_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni56_to_He4_Fe52_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) { // Ni56 --> He4 + Fe52 @@ -1073,13 +1073,13 @@ void rate_Ni56_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 91.62430485073777 + -92.84097094326391 * tfactors.T9i + -91.6819 * tfactors.T913i + -9.51885 * tfactors.T913 + -0.533014 * tfactors.T9 + 0.0892607 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 92.84097094326391 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -9.51885 * tfactors.T923i + -0.533014 + (5.0/3.0) * 0.0892607 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1094,7 +1094,178 @@ void rate_Ni56_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Cu59_to_He4_Co55_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) { + + // Cu59 --> He4 + Co55 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real Cu59_log_pf, dCu59_log_pf_dT9; + + // interpolating Cu59 partition function + get_partition_function_cached(Cu59, tfactors.T9, pf_cache, Cu59_log_pf, dCu59_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real Co55_log_pf, dCo55_log_pf_dT9; + + // interpolating Co55 partition function + get_partition_function_cached(Co55, tfactors.T9, pf_cache, Co55_log_pf, dCo55_log_pf_dT9); + + amrex::Real net_log_pf = He4_log_pf + Co55_log_pf - Cu59_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dCo55_log_pf_dT9 - dCu59_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ths8r + ln_set_rate = 90.97354557942113 + -55.1611006026015 * tfactors.T9i + -94.1404 * tfactors.T913i + -2.62786 * tfactors.T913 + + -2.12066 * tfactors.T9 + 0.237999 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 55.1611006026015 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * -2.62786 * tfactors.T923i + + -2.12066 + (5.0/3.0) * 0.237999 * tfactors.T923 + 0.833333 * tfactors.T9i; + + 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_HOST_DEVICE AMREX_INLINE +void rate_Zn60_to_p_Cu59_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) { + + // Zn60 --> p + Cu59 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real Cu59_log_pf, dCu59_log_pf_dT9; + + // interpolating Cu59 partition function + get_partition_function_cached(Cu59, tfactors.T9, pf_cache, Cu59_log_pf, dCu59_log_pf_dT9); + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real Zn60_log_pf, dZn60_log_pf_dT9; + + // interpolating Zn60 partition function + get_partition_function_cached(Zn60, tfactors.T9, pf_cache, Zn60_log_pf, dZn60_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + Cu59_log_pf - Zn60_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dCu59_log_pf_dT9 - dZn60_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ths8r + ln_set_rate = 62.31218638341413 + -59.240729222177784 * tfactors.T9i + -39.9808 * tfactors.T913i + 1.17311 * tfactors.T913 + + -2.90486 * tfactors.T9 + 0.339644 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 59.240729222177784 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.9808 * tfactors.T943i + (1.0/3.0) * 1.17311 * tfactors.T923i + + -2.90486 + (5.0/3.0) * 0.339644 * tfactors.T923 + 0.833333 * tfactors.T9i; + + 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_HOST_DEVICE AMREX_INLINE +void rate_Zn60_to_He4_Ni56_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) { + + // Zn60 --> He4 + Ni56 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real Ni56_log_pf, dNi56_log_pf_dT9; + + // interpolating Ni56 partition function + get_partition_function_cached(Ni56, tfactors.T9, pf_cache, Ni56_log_pf, dNi56_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real Zn60_log_pf, dZn60_log_pf_dT9; + + // interpolating Zn60 partition function + get_partition_function_cached(Zn60, tfactors.T9, pf_cache, Zn60_log_pf, dZn60_log_pf_dT9); + + amrex::Real net_log_pf = He4_log_pf + Ni56_log_pf - Zn60_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dHe4_log_pf_dT9 + dNi56_log_pf_dT9 - dZn60_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ths8r + ln_set_rate = 86.06332792090964 + -31.2372260432927 * tfactors.T9i + -96.4898 * tfactors.T913i + 6.47209 * tfactors.T913 + + -5.2029 * tfactors.T9 + 0.533391 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 31.2372260432927 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -96.4898 * tfactors.T943i + (1.0/3.0) * 6.47209 * tfactors.T923i + + -5.2029 + (5.0/3.0) * 0.533391 * tfactors.T923 + 0.833333 * tfactors.T9i; + + 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_HOST_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 @@ -1126,13 +1297,13 @@ void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1147,13 +1318,13 @@ void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1168,13 +1339,13 @@ void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1189,7 +1360,7 @@ void rate_C12_to_He4_He4_He4_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_O16_to_He4_N13_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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 @@ -1232,13 +1403,13 @@ void rate_p_O16_to_He4_N13_derived(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1253,7 +1424,7 @@ void rate_p_O16_to_He4_N13_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ne20_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Ne20_to_p_Na23_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 --> p + Na23 @@ -1295,13 +1466,13 @@ void rate_He4_Ne20_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -6.360024278486355 + -29.889658832139027 * tfactors.T9i + 19.7297 * tfactors.T913 + -2.20987 * tfactors.T9 + 0.153374 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 29.889658832139027 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 19.7297 * tfactors.T923i + -2.20987 + (5.0/3.0) * 0.153374 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1316,13 +1487,13 @@ void rate_He4_Ne20_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 0.24516522151364528 + -29.434918832139026 * tfactors.T9i + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 29.434918832139026 * tfactors.T9i * tfactors.T9i + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1337,13 +1508,13 @@ void rate_He4_Ne20_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 19.202935721513644 + -27.573888832139026 * tfactors.T9i + -20.0024 * tfactors.T913i + 11.5988 * tfactors.T913 + -1.37398 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 27.573888832139026 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -20.0024 * tfactors.T943i + (1.0/3.0) * 11.5988 * tfactors.T923i + -1.37398 + (5.0/3.0) * -1.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1358,7 +1529,7 @@ void rate_He4_Ne20_to_p_Na23_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ne20_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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) { // Ne20 + He4 --> C12 + C12 @@ -1395,13 +1566,13 @@ void rate_He4_Ne20_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, a 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; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1416,7 +1587,7 @@ void rate_He4_Ne20_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Na23_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Na23_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) { // Na23 + p --> C12 + C12 @@ -1453,13 +1624,13 @@ void rate_p_Na23_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 60.92541574740554 + -26.004360836807496 * tfactors.T9i + -84.165 * tfactors.T913i + -1.4191 * tfactors.T913 + -0.114619 * tfactors.T9 + -0.070307 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 26.004360836807496 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.4191 * tfactors.T923i + -0.114619 + (5.0/3.0) * -0.070307 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1474,7 +1645,7 @@ void rate_p_Na23_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Mg24_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Mg24_to_p_Al27_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 --> p + Al27 @@ -1516,13 +1687,13 @@ void rate_He4_Mg24_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -6.4280417530584835 + -22.818701538287602 * tfactors.T9i + 18.0416 * tfactors.T913 + -1.54137 * tfactors.T9 + 0.0847506 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 22.818701538287602 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0416 * tfactors.T923i + -1.54137 + (5.0/3.0) * 0.0847506 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1537,13 +1708,13 @@ void rate_He4_Mg24_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -26.268451753058486 + -19.5392135382876 * tfactors.T9i + 5.18642 * tfactors.T913i + -34.7936 * tfactors.T913 + 168.225 * tfactors.T9 + -115.825 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 19.5392135382876 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 5.18642 * tfactors.T943i + (1.0/3.0) * -34.7936 * tfactors.T923i + 168.225 + (5.0/3.0) * -115.825 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1558,13 +1729,13 @@ void rate_He4_Mg24_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 30.057448246941515 + -18.576201538287602 * tfactors.T9i + -26.4162 * tfactors.T913i + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 18.576201538287602 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.4162 * tfactors.T943i + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1579,7 +1750,7 @@ void rate_He4_Mg24_to_p_Al27_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Mg24_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +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) { // Mg24 + He4 --> C12 + O16 @@ -1621,13 +1792,13 @@ void rate_He4_Mg24_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, a 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; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; 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; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1642,7 +1813,7 @@ void rate_He4_Mg24_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Al27_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Al27_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) { // Al27 + p --> C12 + O16 @@ -1684,13 +1855,13 @@ void rate_p_Al27_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 68.96430994536895 + -59.8005159928172 * tfactors.T9i + -119.242 * tfactors.T913i + 13.3667 * tfactors.T913 + 0.295425 * tfactors.T9 + -0.267288 * tfactors.T953 + -9.91729 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 59.8005159928172 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.242 * tfactors.T943i + (1.0/3.0) * 13.3667 * tfactors.T923i + 0.295425 + (5.0/3.0) * -0.267288 * tfactors.T923 + -9.91729 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1705,7 +1876,7 @@ void rate_p_Al27_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Si28_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Si28_to_p_P31_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) { // Si28 + He4 --> p + P31 @@ -1747,13 +1918,13 @@ void rate_He4_Si28_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -11.415669089666713 + -25.663579682396225 * tfactors.T9i + 21.521 * tfactors.T913 + -1.90355 * tfactors.T9 + 0.092724 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 25.663579682396225 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 21.521 * tfactors.T923i + -1.90355 + (5.0/3.0) * 0.092724 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1768,13 +1939,13 @@ void rate_He4_Si28_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -13.441669089666712 + -24.114989682396224 * tfactors.T9i + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 24.114989682396224 * tfactors.T9i * tfactors.T9i + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1789,13 +1960,13 @@ void rate_He4_Si28_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 60.360230910333286 + -22.237829682396224 * tfactors.T9i + -31.932 * tfactors.T913i + -77.0334 * tfactors.T913 + -43.6847 * tfactors.T9 + -4.28955 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 22.237829682396224 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -31.932 * tfactors.T943i + (1.0/3.0) * -77.0334 * tfactors.T923i + -43.6847 + (5.0/3.0) * -4.28955 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1810,7 +1981,7 @@ void rate_He4_Si28_to_p_P31_derived(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Si28_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Si28_to_O16_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) { // Si28 + He4 --> O16 + O16 @@ -1846,13 +2017,13 @@ void rate_He4_Si28_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, a ln_set_rate = 97.78921572069022 + -111.60083385054465 * tfactors.T9i + -119.324 * tfactors.T913i + -32.2497 * tfactors.T913 + 1.46214 * tfactors.T9 + -0.200893 * tfactors.T953 + 13.2148 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 111.60083385054465 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.324 * tfactors.T943i + (1.0/3.0) * -32.2497 * tfactors.T923i + 1.46214 + (5.0/3.0) * -0.200893 * tfactors.T923 + 13.2148 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1867,7 +2038,7 @@ void rate_He4_Si28_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_P31_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_P31_to_O16_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) { // P31 + p --> O16 + O16 @@ -1903,13 +2074,13 @@ void rate_p_P31_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 86.33118481035693 + -88.87103716814843 * tfactors.T9i + -145.844 * tfactors.T913i + 8.72612 * tfactors.T913 + -0.554035 * tfactors.T9 + -0.137562 * tfactors.T953 + -6.88807 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 88.87103716814843 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -145.844 * tfactors.T943i + (1.0/3.0) * 8.72612 * tfactors.T923i + -0.554035 + (5.0/3.0) * -0.137562 * tfactors.T923 + -6.88807 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1924,7 +2095,7 @@ void rate_p_P31_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Mn51_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Mn51_to_He4_Cr48_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) { // Mn51 + p --> He4 + Cr48 @@ -1966,13 +2137,13 @@ void rate_p_Mn51_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 58.71348267023461 + -6.47700151570639 * tfactors.T9i + -86.7459 * tfactors.T913i + 1.05653 * tfactors.T913 + -1.15757 * tfactors.T9 + 0.0877546 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 6.47700151570639 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * 1.05653 * tfactors.T923i + -1.15757 + (5.0/3.0) * 0.0877546 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -1987,7 +2158,7 @@ void rate_p_Mn51_to_He4_Cr48_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Co55_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Co55_to_He4_Fe52_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) { // Co55 + p --> He4 + Fe52 @@ -2029,13 +2200,13 @@ void rate_p_Co55_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 61.42570080881217 + -9.676367161770125 * tfactors.T9i + -91.6819 * tfactors.T913i + -0.329235 * tfactors.T913 + -0.780924 * tfactors.T9 + 0.0425179 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 9.676367161770125 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -0.329235 * tfactors.T923i + -0.780924 + (5.0/3.0) * 0.0425179 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2050,7 +2221,70 @@ void rate_p_Co55_to_He4_Fe52_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Mg24_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Ni56_to_p_Cu59_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) { + + // Ni56 + He4 --> p + Cu59 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real Cu59_log_pf, dCu59_log_pf_dT9; + + // interpolating Cu59 partition function + get_partition_function_cached(Cu59, tfactors.T9, pf_cache, Cu59_log_pf, dCu59_log_pf_dT9); + + amrex::Real Ni56_log_pf, dNi56_log_pf_dT9; + + // interpolating Ni56 partition function + get_partition_function_cached(Ni56, tfactors.T9, pf_cache, Ni56_log_pf, dNi56_log_pf_dT9); + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real net_log_pf = p_log_pf + Cu59_log_pf - He4_log_pf - Ni56_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dCu59_log_pf_dT9 - dHe4_log_pf_dT9 - dNi56_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ths8r + ln_set_rate = 20.864958462504486 + -28.003503178913892 * tfactors.T9i + -39.9808 * tfactors.T913i + 13.6773 * tfactors.T913 + + -3.76429 * tfactors.T9 + 0.438096 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 28.003503178913892 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.9808 * tfactors.T943i + (1.0/3.0) * 13.6773 * tfactors.T923i + + -3.76429 + (5.0/3.0) * 0.438096 * tfactors.T923 + -0.666667 * tfactors.T9i; + + 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_HOST_DEVICE AMREX_INLINE +void rate_Mg24_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) { // Mg24 --> C12 + C12 @@ -2081,13 +2315,13 @@ void rate_Mg24_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 12.203060308868553 + -191.84225839903127 * tfactors.T9i + 11.4826 * tfactors.T913 + 1.82849 * tfactors.T9 + -0.34844 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 191.84225839903127 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.4826 * tfactors.T923i + 1.82849 + (5.0/3.0) * -0.34844 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2102,7 +2336,7 @@ void rate_Mg24_to_C12_C12_derived(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_S32_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_S32_to_O16_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) { // S32 --> O16 + O16 @@ -2132,13 +2366,13 @@ void rate_S32_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 102.9883182326601 + -192.3301592962798 * tfactors.T9i + -120.83 * tfactors.T913i + -7.72334 * tfactors.T913 + -2.27939 * tfactors.T9 + 0.167655 * tfactors.T953 + 9.12001 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 192.3301592962798 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -120.83 * tfactors.T943i + (1.0/3.0) * -7.72334 * tfactors.T923i + -2.27939 + (5.0/3.0) * 0.167655 * tfactors.T923 + 9.12001 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2153,7 +2387,7 @@ void rate_S32_to_O16_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Si28_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Si28_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) { // Si28 --> C12 + O16 @@ -2189,13 +2423,13 @@ void rate_Si28_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = -106.3111878016318 + -195.9077167184711 * tfactors.T9i + -293.089 * tfactors.T913i + 414.404 * tfactors.T913 + -28.0562 * tfactors.T9 + 1.61807 * tfactors.T953 + -176.78 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 195.9077167184711 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -293.089 * tfactors.T943i + (1.0/3.0) * 414.404 * tfactors.T923i + -28.0562 + (5.0/3.0) * 1.61807 * tfactors.T923 + -176.78 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2210,7 +2444,7 @@ void rate_Si28_to_C12_O16_derived(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Co55_to_p_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Co55_to_p_Fe54_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) { // Co55 --> p + Fe54 @@ -2246,13 +2480,13 @@ void rate_Co55_to_p_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 57.84851844810452 + -58.76958578644693 * tfactors.T9i + -37.1544 * tfactors.T913i + 0.950364 * tfactors.T913 + -1.77529 * tfactors.T9 + 0.198562 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 58.76958578644693 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.1544 * tfactors.T943i + (1.0/3.0) * 0.950364 * tfactors.T923i + -1.77529 + (5.0/3.0) * 0.198562 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2267,7 +2501,7 @@ void rate_Co55_to_p_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Co56_to_n_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Co56_to_n_Co55_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) { // Co56 --> n + Co55 @@ -2303,13 +2537,13 @@ void rate_Co56_to_n_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 40.647564333711024 + -116.994640839646 * tfactors.T9i + -1.86357 * tfactors.T913 + 0.616591 * tfactors.T9 + -0.0839313 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 116.994640839646 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.86357 * tfactors.T923i + 0.616591 + (5.0/3.0) * -0.0839313 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2324,7 +2558,7 @@ void rate_Co56_to_n_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Co57_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Co57_to_n_Co56_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) { // Co57 --> n + Co56 @@ -2360,13 +2594,13 @@ void rate_Co57_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 41.17386809654295 + -132.01901045161702 * tfactors.T9i + -1.37855 * tfactors.T913 + 0.299896 * tfactors.T9 + -0.04382 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 132.01901045161702 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.37855 * tfactors.T923i + 0.299896 + (5.0/3.0) * -0.04382 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2381,7 +2615,7 @@ void rate_Co57_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Co57_to_p_Fe56_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Co57_to_p_Fe56_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) { // Co57 --> p + Fe56 @@ -2417,13 +2651,13 @@ void rate_Co57_to_p_Fe56_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 57.68564187237867 + -69.94636137001572 * tfactors.T9i + -37.1625 * tfactors.T913i + 1.06776 * tfactors.T913 + -1.31689 * tfactors.T9 + 0.122089 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 69.94636137001572 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.1625 * tfactors.T943i + (1.0/3.0) * 1.06776 * tfactors.T923i + -1.31689 + (5.0/3.0) * 0.122089 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2438,7 +2672,7 @@ void rate_Co57_to_p_Fe56_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni58_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni58_to_p_Co57_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) { // Ni58 --> p + Co57 @@ -2474,13 +2708,13 @@ void rate_Ni58_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 61.794489871251855 + -94.83410720454592 * tfactors.T9i + -38.1133 * tfactors.T913i + 1.77414 * tfactors.T913 + -1.48268 * tfactors.T9 + 0.121073 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 94.83410720454592 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 1.77414 * tfactors.T923i + -1.48268 + (5.0/3.0) * 0.121073 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2495,7 +2729,7 @@ void rate_Ni58_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni58_to_He4_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni58_to_He4_Fe54_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) { // Ni58 --> He4 + Fe54 @@ -2531,13 +2765,70 @@ void rate_Ni58_to_He4_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 85.23428031558652 + -74.25981652709197 * tfactors.T9i + -91.7628 * tfactors.T913i + 4.23027 * tfactors.T913 + -3.31305 * tfactors.T9 + 0.271293 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 74.25981652709197 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.7628 * tfactors.T943i + (1.0/3.0) * 4.23027 * tfactors.T923i + -3.31305 + (5.0/3.0) * 0.271293 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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_HOST_DEVICE AMREX_INLINE +void rate_Cu59_to_p_Ni58_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) { + + // Cu59 --> p + Ni58 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real Cu59_log_pf, dCu59_log_pf_dT9; + + // interpolating Cu59 partition function + get_partition_function_cached(Cu59, tfactors.T9, pf_cache, Cu59_log_pf, dCu59_log_pf_dT9); + + amrex::Real p_log_pf, dp_log_pf_dT9; + + // setting p log(partition function) to 0.0 by default, independent of T + p_log_pf = 0.0_rt; + dp_log_pf_dT9 = 0.0_rt; + + amrex::Real Ni58_log_pf, dNi58_log_pf_dT9; + + // interpolating Ni58 partition function + get_partition_function_cached(Ni58, tfactors.T9, pf_cache, Ni58_log_pf, dNi58_log_pf_dT9); + + amrex::Real net_log_pf = p_log_pf + Ni58_log_pf - Cu59_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dp_log_pf_dT9 + dNi58_log_pf_dT9 - dCu59_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from si13n + ln_set_rate = 58.97928371193912 + -39.67086986195644 * tfactors.T9i + -39.0526 * tfactors.T913i + 1.0436 * tfactors.T913 + + -2.10834 * tfactors.T9 + 0.239559 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 39.67086986195644 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.0526 * tfactors.T943i + (1.0/3.0) * 1.0436 * tfactors.T923i + + -2.10834 + (5.0/3.0) * 0.239559 * tfactors.T923 + 0.833333 * tfactors.T9i; + + 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] @@ -2552,7 +2843,7 @@ void rate_Ni58_to_He4_Fe54_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Fe54_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Fe54_to_He4_Mn51_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) { // Fe54 + p --> He4 + Mn51 @@ -2594,13 +2885,13 @@ void rate_p_Fe54_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 65.35241368298804 + -36.52341983603332 * tfactors.T9i + -89.274 * tfactors.T913i + -0.862452 * tfactors.T913 + -0.635672 * tfactors.T9 + 0.0196464 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 36.52341983603332 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -0.862452 * tfactors.T923i + -0.635672 + (5.0/3.0) * 0.0196464 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2615,7 +2906,7 @@ void rate_p_Fe54_to_He4_Mn51_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Fe54_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Fe54_to_p_Co57_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) { // Fe54 + He4 --> p + Co57 @@ -2657,13 +2948,13 @@ void rate_He4_Fe54_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -1.404090444334669 + -20.574290677453938 * tfactors.T9i + -38.1133 * tfactors.T913i + 29.3541 * tfactors.T913 + -4.75966 * tfactors.T9 + 0.40418 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 20.574290677453938 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 29.3541 * tfactors.T923i + -4.75966 + (5.0/3.0) * 0.40418 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2678,7 +2969,7 @@ void rate_He4_Fe54_to_p_Co57_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Fe56_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Fe56_to_n_Co56_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) { // Fe56 + p --> n + Co56 @@ -2720,13 +3011,13 @@ void rate_p_Fe56_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 22.653426224164285 + -62.07264908160129 * tfactors.T9i + -1.13331 * tfactors.T913 + 0.347185 * tfactors.T9 + -0.0328879 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 62.07264908160129 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.13331 * tfactors.T923i + 0.347185 + (5.0/3.0) * -0.0328879 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2741,7 +3032,7 @@ void rate_p_Fe56_to_n_Co56_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Co56_to_n_Ni56_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Co56_to_n_Ni56_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) { // Co56 + p --> n + Ni56 @@ -2783,13 +3074,76 @@ void rate_p_Co56_to_n_Ni56_derived(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 13.374260291785419 + -33.830037058152215 * tfactors.T9i + 1.76846 * tfactors.T913 + 0.197992 * tfactors.T9 + -0.017494 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 33.830037058152215 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 1.76846 * tfactors.T923i + 0.197992 + (5.0/3.0) * -0.017494 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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_HOST_DEVICE AMREX_INLINE +void rate_He4_Co56_to_n_Cu59_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) { + + // Co56 + He4 --> n + Cu59 + + rate = 0.0; + drate_dT = 0.0; + + // Evaluate partition function terms + + amrex::Real n_log_pf, dn_log_pf_dT9; + + // setting n log(partition function) to 0.0 by default, independent of T + n_log_pf = 0.0_rt; + dn_log_pf_dT9 = 0.0_rt; + + amrex::Real Cu59_log_pf, dCu59_log_pf_dT9; + + // interpolating Cu59 partition function + get_partition_function_cached(Cu59, tfactors.T9, pf_cache, Cu59_log_pf, dCu59_log_pf_dT9); + + amrex::Real He4_log_pf, dHe4_log_pf_dT9; + + // setting He4 log(partition function) to 0.0 by default, independent of T + He4_log_pf = 0.0_rt; + dHe4_log_pf_dT9 = 0.0_rt; + + amrex::Real Co56_log_pf, dCo56_log_pf_dT9; + + // interpolating Co56 partition function + get_partition_function_cached(Co56, tfactors.T9, pf_cache, Co56_log_pf, dCo56_log_pf_dT9); + + amrex::Real net_log_pf = n_log_pf + Cu59_log_pf - He4_log_pf - Co56_log_pf; + [[maybe_unused]] amrex::Real net_dlog_pf_dT9 = dn_log_pf_dT9 + dCu59_log_pf_dT9 - dHe4_log_pf_dT9 - dCo56_log_pf_dT9; + + amrex::Real ln_set_rate{0.0}; + amrex::Real dln_set_rate_dT9{0.0}; + amrex::Real set_rate{0.0}; + + // ReacLib set derived from ths8r + ln_set_rate = 8.911918754289905 + -61.8335402370445 * tfactors.T9i + -1.00882 * tfactors.T913 + + 1.88993 * tfactors.T9 + -0.202319 * tfactors.T953; + + ln_set_rate += net_log_pf + log_scor; + + if constexpr (std::is_same_v) { + dln_set_rate_dT9 = 61.8335402370445 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.00882 * tfactors.T923i + + 1.88993 + (5.0/3.0) * -0.202319 * tfactors.T923; + + 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] @@ -2804,7 +3158,7 @@ void rate_p_Co56_to_n_Ni56_derived(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Ni58_to_He4_Co55_derived(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_Ni58_to_He4_Co55_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) { // Ni58 + p --> He4 + Co55 @@ -2846,13 +3200,13 @@ void rate_p_Ni58_to_He4_Co55_derived(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 63.596461867482006 + -15.490230740645051 * tfactors.T9i + -94.1404 * tfactors.T913i + 3.39179 * tfactors.T913 + -1.71062 * tfactors.T9 + 0.133003 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 15.490230740645051 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * 3.39179 * tfactors.T923i + -1.71062 + (5.0/3.0) * 0.133003 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2867,7 +3221,7 @@ void rate_p_Ni58_to_He4_Co55_derived(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_S32_to_p_Cl35_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) { // S32 + He4 --> p + Cl35 @@ -2909,13 +3263,13 @@ void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -0.8597847344696254 + -25.589703706656966 * tfactors.T9i + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 25.589703706656966 * tfactors.T9i * tfactors.T9i + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2930,13 +3284,13 @@ void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -57.37716473446963 + -22.187684706656967 * tfactors.T9i + 25.5338 * tfactors.T913 + 6.45824 * tfactors.T9 + -0.950294 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 22.187684706656967 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 25.5338 * tfactors.T923i + 6.45824 + (5.0/3.0) * -0.950294 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2951,13 +3305,13 @@ void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 32.27223526553037 + -21.654753706656965 * tfactors.T9i + -30.9147 * tfactors.T913i + -1.2345 * tfactors.T913 + 22.5118 * tfactors.T9 + -33.0589 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 21.654753706656965 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -30.9147 * tfactors.T943i + (1.0/3.0) * -1.2345 * tfactors.T923i + 22.5118 + (5.0/3.0) * -33.0589 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2972,13 +3326,13 @@ void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 2.4434452655303747 + -27.664513706656965 * tfactors.T9i + 5.33756 * tfactors.T913 + 1.64418 * tfactors.T9 + -0.246167 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 27.664513706656965 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.33756 * tfactors.T923i + 1.64418 + (5.0/3.0) * -0.246167 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -2993,7 +3347,7 @@ void rate_He4_S32_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ar36_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ar36_to_He4_S32_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) { // Ar36 --> He4 + S32 @@ -3029,13 +3383,13 @@ void rate_Ar36_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 73.81807507159112 + -77.06468541928012 * tfactors.T9i + -65.3709 * tfactors.T913i + 5.68294 * tfactors.T913 + -5.00388 * tfactors.T9 + 0.571407 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 77.06468541928012 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -65.3709 * tfactors.T943i + (1.0/3.0) * 5.68294 * tfactors.T923i + -5.00388 + (5.0/3.0) * 0.571407 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3050,7 +3404,7 @@ void rate_Ar36_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ar36_to_p_Cl35_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) { // Ar36 --> p + Cl35 @@ -3085,12 +3439,12 @@ void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex: // ReacLib set derived from il10r ln_set_rate = -17.455589662878502 + -99.28409012589869 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 99.28409012589869 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3105,13 +3459,13 @@ void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 60.7561103371215 + -98.71943912589869 * tfactors.T9i + -27.8971 * tfactors.T913i + -16.2304 * tfactors.T913 + 35.255 * tfactors.T9 + -25.8411 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 98.71943912589869 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -27.8971 * tfactors.T943i + (1.0/3.0) * -16.2304 * tfactors.T923i + 35.255 + (5.0/3.0) * -25.8411 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3126,13 +3480,13 @@ void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 17.222320337121502 + -102.37035912589869 * tfactors.T9i + 18.0179 * tfactors.T913 + -2.86304 * tfactors.T9 + 0.250854 * tfactors.T953; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 102.37035912589869 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0179 * tfactors.T923i + -2.86304 + (5.0/3.0) * 0.250854 * tfactors.T923; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3146,12 +3500,12 @@ void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex: // ReacLib set derived from il10r ln_set_rate = 16.0363703371215 + -100.7293991258987 * tfactors.T9i; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 100.7293991258987 * tfactors.T9i * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3166,7 +3520,7 @@ void rate_Ar36_to_p_Cl35_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ar36_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Ar36_to_p_K39_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) { // Ar36 + He4 --> p + K39 @@ -3208,13 +3562,13 @@ void rate_He4_Ar36_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 20.654451232729432 + -14.951286608188834 * tfactors.T9i + -30.0732 * tfactors.T913i + 7.03263 * tfactors.T913 + -1.10085 * tfactors.T9 + 0.133768 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 14.951286608188834 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -30.0732 * tfactors.T943i + (1.0/3.0) * 7.03263 * tfactors.T923i + -1.10085 + (5.0/3.0) * 0.133768 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3229,7 +3583,7 @@ void rate_He4_Ar36_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ca40_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ca40_to_He4_Ar36_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) { // Ca40 --> He4 + Ar36 @@ -3265,13 +3619,13 @@ void rate_Ca40_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 77.28432125250924 + -81.69320665503751 * tfactors.T9i + -71.0046 * tfactors.T913i + 4.0656 * tfactors.T913 + -5.26509 * tfactors.T9 + 0.683546 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 81.69320665503751 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -71.0046 * tfactors.T943i + (1.0/3.0) * 4.0656 * tfactors.T923i + -5.26509 + (5.0/3.0) * 0.683546 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3286,7 +3640,7 @@ void rate_Ca40_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ca40_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ca40_to_p_K39_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) { // Ca40 --> p + K39 @@ -3322,13 +3676,13 @@ void rate_Ca40_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 2786.453572485239 + -101.86683326322635 * tfactors.T9i + 802.18 * tfactors.T913i + -4010.27 * tfactors.T913 + 1137.69 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 101.86683326322635 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 802.18 * tfactors.T943i + (1.0/3.0) * -4010.27 * tfactors.T923i + 1137.69 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3343,13 +3697,13 @@ void rate_Ca40_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 613.1725724852387 + -109.20919326322635 * tfactors.T9i + 641.844 * tfactors.T913i + -1248.49 * tfactors.T913 + 566.426 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 109.20919326322635 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 641.844 * tfactors.T943i + (1.0/3.0) * -1248.49 * tfactors.T923i + 566.426 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3364,13 +3718,13 @@ void rate_Ca40_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 127.32557248523868 + -98.30957326322635 * tfactors.T9i + 41.1723 * tfactors.T913i + -149.299 * tfactors.T913 + 10.5229 * tfactors.T9 + -0.68208 * tfactors.T953 + 60.7367 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 98.30957326322635 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 41.1723 * tfactors.T943i + (1.0/3.0) * -149.299 * tfactors.T923i + 10.5229 + (5.0/3.0) * -0.68208 * tfactors.T923 + 60.7367 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3385,7 +3739,7 @@ void rate_Ca40_to_p_K39_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ca40_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_He4_Ca40_to_p_Sc43_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) { // Ca40 + He4 --> p + Sc43 @@ -3427,13 +3781,13 @@ void rate_He4_Ca40_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 35.67546755788414 + -40.87525788838128 * tfactors.T9i + -32.1734 * tfactors.T913i + 0.0296879 * tfactors.T913 + -0.95232 * tfactors.T9 + 0.129022 * tfactors.T953 + -0.666667 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 40.87525788838128 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * 0.0296879 * tfactors.T923i + -0.95232 + (5.0/3.0) * 0.129022 * tfactors.T923 + -0.666667 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3448,7 +3802,7 @@ void rate_He4_Ca40_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ti44_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ti44_to_He4_Ca40_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) { // Ti44 --> He4 + Ca40 @@ -3484,13 +3838,13 @@ void rate_Ti44_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 78.7006646483486 + -59.49768581557457 * tfactors.T9i + -76.4273 * tfactors.T913i + 3.87451 * tfactors.T913 + -3.61477 * tfactors.T9 + 0.367451 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 59.49768581557457 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -76.4273 * tfactors.T943i + (1.0/3.0) * 3.87451 * tfactors.T923i + -3.61477 + (5.0/3.0) * 0.367451 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3505,7 +3859,7 @@ void rate_Ti44_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ti44_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ti44_to_p_Sc43_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) { // Ti44 --> p + Sc43 @@ -3541,13 +3895,13 @@ void rate_Ti44_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 62.61343220623275 + -100.37294370395585 * tfactors.T9i + -32.1734 * tfactors.T913i + -1.77078 * tfactors.T913 + -2.21706 * tfactors.T9 + 0.298499 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 100.37294370395585 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * -1.77078 * tfactors.T923i + -2.21706 + (5.0/3.0) * 0.298499 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3562,7 +3916,7 @@ void rate_Ti44_to_p_Sc43_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Cr48_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Cr48_to_He4_Ti44_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) { // Cr48 --> He4 + Ti44 @@ -3598,13 +3952,13 @@ void rate_Cr48_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 89.75906465832496 + -89.32364150067336 * tfactors.T9i + -81.667 * tfactors.T913i + -10.6333 * tfactors.T913 + -0.672613 * tfactors.T9 + 0.161209 * tfactors.T953 + 0.833333 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 89.32364150067336 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -81.667 * tfactors.T943i + (1.0/3.0) * -10.6333 * tfactors.T923i + -0.672613 + (5.0/3.0) * 0.161209 * tfactors.T923 + 0.833333 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3619,7 +3973,7 @@ void rate_Cr48_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Cr48_to_p_V47_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) { // Cr48 --> p + V47 @@ -3655,13 +4009,13 @@ void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 67.75975303984967 + -100.08956223422913 * tfactors.T9i + -34.0548 * tfactors.T913i + -3.41973 * tfactors.T913 + 1.16501 * tfactors.T9 + -0.105543 * tfactors.T953 + -6.20886 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 100.08956223422913 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -34.0548 * tfactors.T943i + (1.0/3.0) * -3.41973 * tfactors.T923i + 1.16501 + (5.0/3.0) * -0.105543 * tfactors.T923 + -6.20886 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3676,13 +4030,13 @@ void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 536.5429530398497 + -99.32517223422914 * tfactors.T9i + 317.171 * tfactors.T913i + -911.679 * tfactors.T913 + 94.4245 * tfactors.T9 + -10.1973 * tfactors.T953 + 332.227 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 99.32517223422914 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 317.171 * tfactors.T943i + (1.0/3.0) * -911.679 * tfactors.T923i + 94.4245 + (5.0/3.0) * -10.1973 * tfactors.T923 + 332.227 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3697,13 +4051,13 @@ void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 48.911453039849675 + -93.78359723422915 * tfactors.T9i + -45.9868 * tfactors.T913i + 13.6822 * tfactors.T913 + -0.376902 * tfactors.T9 + -0.0194875 * tfactors.T953 + -6.9232499999999995 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 93.78359723422915 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -45.9868 * tfactors.T943i + (1.0/3.0) * 13.6822 * tfactors.T923i + -0.376902 + (5.0/3.0) * -0.0194875 * tfactors.T923 + -6.9232499999999995 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3718,13 +4072,13 @@ void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 65.64255303984967 + -94.54467623422914 * tfactors.T9i + -110.655 * tfactors.T913i + 83.0232 * tfactors.T913 + -19.7762 * tfactors.T9 + 3.03961 * tfactors.T953 + -47.9742 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 94.54467623422914 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -110.655 * tfactors.T943i + (1.0/3.0) * 83.0232 * tfactors.T923i + -19.7762 + (5.0/3.0) * 3.03961 * tfactors.T923 + -47.9742 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3739,7 +4093,7 @@ void rate_Cr48_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_V47_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_p_V47_to_He4_Ti44_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) { // V47 + p --> He4 + Ti44 @@ -3781,13 +4135,13 @@ void rate_p_V47_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -76.63208838152472 + -6.086479266444236 * tfactors.T9i + 70.2835 * tfactors.T913 + -7.99061 * tfactors.T9 + 0.486213 * tfactors.T953 + -1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 6.086479266444236 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 70.2835 * tfactors.T923i + -7.99061 + (5.0/3.0) * 0.486213 * tfactors.T923 + -1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3802,7 +4156,7 @@ void rate_p_V47_to_He4_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe54_to_n_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe54_to_n_Fe53_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) { // Fe54 --> n + Fe53 @@ -3838,13 +4192,13 @@ void rate_Fe54_to_n_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 42.23234536763494 + -155.25009527915816 * tfactors.T9i + -1.10421 * tfactors.T913 + 0.379905 * tfactors.T9 + -0.0581878 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 155.25009527915816 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.10421 * tfactors.T923i + 0.379905 + (5.0/3.0) * -0.0581878 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3859,7 +4213,7 @@ void rate_Fe54_to_n_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe53_to_n_Fe52_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe53_to_n_Fe52_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) { // Fe53 --> n + Fe52 @@ -3895,13 +4249,13 @@ void rate_Fe53_to_n_Fe52_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 37.50789742709652 + -124.01421385132892 * tfactors.T9i + -0.344319 * tfactors.T913 + 0.178277 * tfactors.T9 + -0.0334326 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 124.01421385132892 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.344319 * tfactors.T923i + 0.178277 + (5.0/3.0) * -0.0334326 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3916,7 +4270,7 @@ void rate_Fe53_to_n_Fe52_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe56_to_n_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe56_to_n_Fe55_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) { // Fe56 --> n + Fe55 @@ -3952,13 +4306,13 @@ void rate_Fe56_to_n_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 46.806892234523204 + -130.0322634199283 * tfactors.T9i + 8.06062 * tfactors.T913i + -14.4809 * tfactors.T913 + 0.94252 * tfactors.T9 + -0.0776007 * tfactors.T953 + 7.97093 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 130.0322634199283 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.06062 * tfactors.T943i + (1.0/3.0) * -14.4809 * tfactors.T923i + 0.94252 + (5.0/3.0) * -0.0776007 * tfactors.T923 + 7.97093 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -3973,7 +4327,7 @@ void rate_Fe56_to_n_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe55_to_n_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Fe55_to_n_Fe54_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) { // Fe55 --> n + Fe54 @@ -4009,13 +4363,13 @@ void rate_Fe55_to_n_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 21.50487677145662 + -107.84100838776591 * tfactors.T9i + -8.66617 * tfactors.T913i + 26.4472 * tfactors.T913 + -1.9222 * tfactors.T9 + 0.0986404 * tfactors.T953 + -8.28317 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 107.84100838776591 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -8.66617 * tfactors.T943i + (1.0/3.0) * 26.4472 * tfactors.T923i + -1.9222 + (5.0/3.0) * 0.0986404 * tfactors.T923 + -8.28317 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -4030,7 +4384,7 @@ void rate_Fe55_to_n_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni58_to_n_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni58_to_n_Ni57_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) { // Ni58 --> n + Ni57 @@ -4066,13 +4420,13 @@ void rate_Ni58_to_n_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 42.36077897558323 + -141.76332431826057 * tfactors.T9i + -1.90814 * tfactors.T913 + 0.493188 * tfactors.T9 + -0.0684633 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 141.76332431826057 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.90814 * tfactors.T923i + 0.493188 + (5.0/3.0) * -0.0684633 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -4087,7 +4441,7 @@ void rate_Ni58_to_n_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni57_to_n_Ni56_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT, [[maybe_unused]] const T& rate_eval, [[maybe_unused]] part_fun::pf_cache_t& pf_cache) { +void rate_Ni57_to_n_Ni56_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) { // Ni57 --> n + Ni56 @@ -4123,13 +4477,13 @@ void rate_Ni57_to_n_Ni56_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 38.391039283996996 + -118.91983039605458 * tfactors.T9i + -1.19665 * tfactors.T913 + 0.507179 * tfactors.T9 + -0.074604 * tfactors.T953 + 1.5 * tfactors.lnT9; - ln_set_rate += net_log_pf; + ln_set_rate += net_log_pf + log_scor; if constexpr (std::is_same_v) { dln_set_rate_dT9 = 118.91983039605458 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.19665 * tfactors.T923i + 0.507179 + (5.0/3.0) * -0.074604 * tfactors.T923 + 1.5 * tfactors.T9i; - dln_set_rate_dT9 += net_dlog_pf_dT9; + 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] @@ -4159,360 +4513,794 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) pf_cache.index_temp_array_1 = interp_net::find_index(tfactors.T9, part_fun::temp_array_1); - rate_N13_to_p_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_N13_to_p_C12_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_N13_to_p_C12_derived) = drate_dT; - - } - rate_O16_to_He4_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_O16_to_He4_C12_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O16_to_He4_C12_derived) = drate_dT; - - } - rate_Ne20_to_He4_O16_derived(tfactors, 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; - - } - rate_Mg24_to_p_Na23_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Mg24_to_p_Na23_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Mg24_to_p_Na23_derived) = drate_dT; - - } - rate_Mg24_to_He4_Ne20_derived(tfactors, 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; - - } - rate_Si28_to_p_Al27_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Si28_to_p_Al27_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Si28_to_p_Al27_derived) = drate_dT; - - } - rate_Si28_to_He4_Mg24_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Si28_to_He4_Mg24_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Si28_to_He4_Mg24_derived) = drate_dT; - - } - rate_S32_to_p_P31_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_S32_to_p_P31_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_S32_to_p_P31_derived) = drate_dT; - - } - rate_S32_to_He4_Si28_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_S32_to_He4_Si28_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_S32_to_He4_Si28_derived) = drate_dT; - - } - rate_Fe52_to_p_Mn51_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe52_to_p_Mn51_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe52_to_p_Mn51_derived) = drate_dT; - - } - rate_Fe52_to_He4_Cr48_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe52_to_He4_Cr48_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe52_to_He4_Cr48_derived) = drate_dT; - - } - rate_Co55_to_He4_Mn51_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Co55_to_He4_Mn51_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Co55_to_He4_Mn51_derived) = drate_dT; - - } - rate_Ni56_to_p_Co55_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni56_to_p_Co55_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni56_to_p_Co55_derived) = drate_dT; - - } - rate_Ni56_to_He4_Fe52_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni56_to_He4_Fe52_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni56_to_He4_Fe52_derived) = drate_dT; - - } - rate_C12_to_He4_He4_He4_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_C12_to_He4_He4_He4_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_to_He4_He4_He4_derived) = drate_dT; - - } - rate_p_O16_to_He4_N13_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_O16_to_He4_N13_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_O16_to_He4_N13_derived) = drate_dT; - - } - rate_He4_Ne20_to_p_Na23_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Ne20_to_p_Na23_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ne20_to_p_Na23_derived) = drate_dT; - - } - rate_He4_Ne20_to_C12_C12_derived(tfactors, 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_p_Na23_to_C12_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Na23_to_C12_C12_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Na23_to_C12_C12_derived) = drate_dT; - - } - rate_He4_Mg24_to_p_Al27_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Mg24_to_p_Al27_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_p_Al27_derived) = drate_dT; - - } - rate_He4_Mg24_to_C12_O16_derived(tfactors, 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_p_Al27_to_C12_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Al27_to_C12_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Al27_to_C12_O16_derived) = drate_dT; - - } - rate_He4_Si28_to_p_P31_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Si28_to_p_P31_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Si28_to_p_P31_derived) = drate_dT; - - } - rate_He4_Si28_to_O16_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Si28_to_O16_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Si28_to_O16_O16_derived) = drate_dT; - - } - rate_p_P31_to_O16_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_P31_to_O16_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_P31_to_O16_O16_derived) = drate_dT; - - } - rate_p_Mn51_to_He4_Cr48_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Mn51_to_He4_Cr48_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Mn51_to_He4_Cr48_derived) = drate_dT; - - } - rate_p_Co55_to_He4_Fe52_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Co55_to_He4_Fe52_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Co55_to_He4_Fe52_derived) = drate_dT; - - } - rate_Mg24_to_C12_C12_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Mg24_to_C12_C12_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Mg24_to_C12_C12_derived) = drate_dT; - - } - rate_S32_to_O16_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_S32_to_O16_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_S32_to_O16_O16_derived) = drate_dT; - - } - rate_Si28_to_C12_O16_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Si28_to_C12_O16_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Si28_to_C12_O16_derived) = drate_dT; - - } - rate_Co55_to_p_Fe54_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Co55_to_p_Fe54_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Co55_to_p_Fe54_derived) = drate_dT; - - } - rate_Co56_to_n_Co55_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Co56_to_n_Co55_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Co56_to_n_Co55_derived) = drate_dT; - - } - rate_Co57_to_n_Co56_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Co57_to_n_Co56_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Co57_to_n_Co56_derived) = drate_dT; - - } - rate_Co57_to_p_Fe56_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Co57_to_p_Fe56_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Co57_to_p_Fe56_derived) = drate_dT; - - } - rate_Ni58_to_p_Co57_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni58_to_p_Co57_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni58_to_p_Co57_derived) = drate_dT; - - } - rate_Ni58_to_He4_Fe54_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni58_to_He4_Fe54_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni58_to_He4_Fe54_derived) = drate_dT; - - } - rate_p_Fe54_to_He4_Mn51_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Fe54_to_He4_Mn51_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Fe54_to_He4_Mn51_derived) = drate_dT; - - } - rate_He4_Fe54_to_p_Co57_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Fe54_to_p_Co57_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Fe54_to_p_Co57_derived) = drate_dT; - - } - rate_p_Fe56_to_n_Co56_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Fe56_to_n_Co56_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Fe56_to_n_Co56_derived) = drate_dT; - - } - rate_p_Co56_to_n_Ni56_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Co56_to_n_Ni56_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Co56_to_n_Ni56_derived) = drate_dT; - - } - rate_p_Ni58_to_He4_Co55_derived(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_Ni58_to_He4_Co55_derived) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Ni58_to_He4_Co55_derived) = drate_dT; - - } - rate_He4_S32_to_p_Cl35_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_S32_to_p_Cl35_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_S32_to_p_Cl35_removed) = drate_dT; - - } - rate_Ar36_to_He4_S32_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ar36_to_He4_S32_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ar36_to_He4_S32_removed) = drate_dT; - - } - rate_Ar36_to_p_Cl35_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ar36_to_p_Cl35_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ar36_to_p_Cl35_removed) = drate_dT; - - } - rate_He4_Ar36_to_p_K39_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Ar36_to_p_K39_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ar36_to_p_K39_removed) = drate_dT; - - } - rate_Ca40_to_He4_Ar36_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ca40_to_He4_Ar36_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ca40_to_He4_Ar36_removed) = drate_dT; - - } - rate_Ca40_to_p_K39_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ca40_to_p_K39_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ca40_to_p_K39_removed) = drate_dT; - - } - rate_He4_Ca40_to_p_Sc43_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_He4_Ca40_to_p_Sc43_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ca40_to_p_Sc43_removed) = drate_dT; - - } - rate_Ti44_to_He4_Ca40_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ti44_to_He4_Ca40_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ti44_to_He4_Ca40_removed) = drate_dT; - - } - rate_Ti44_to_p_Sc43_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ti44_to_p_Sc43_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ti44_to_p_Sc43_removed) = drate_dT; - - } - rate_Cr48_to_He4_Ti44_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Cr48_to_He4_Ti44_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Cr48_to_He4_Ti44_removed) = drate_dT; - - } - rate_Cr48_to_p_V47_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Cr48_to_p_V47_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Cr48_to_p_V47_removed) = drate_dT; - - } - rate_p_V47_to_He4_Ti44_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_p_V47_to_He4_Ti44_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_removed) = drate_dT; - - } - rate_Fe54_to_n_Fe53_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe54_to_n_Fe53_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe54_to_n_Fe53_removed) = drate_dT; - - } - rate_Fe53_to_n_Fe52_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe53_to_n_Fe52_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe53_to_n_Fe52_removed) = drate_dT; - - } - rate_Fe56_to_n_Fe55_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe56_to_n_Fe55_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe56_to_n_Fe55_removed) = drate_dT; - - } - rate_Fe55_to_n_Fe54_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Fe55_to_n_Fe54_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe55_to_n_Fe54_removed) = drate_dT; - - } - rate_Ni58_to_n_Ni57_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni58_to_n_Ni57_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni58_to_n_Ni57_removed) = drate_dT; - + { + 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; + } + } + + { + 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; + } + } + + { + 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_Mg24_to_p_Na23_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Mg24_to_p_Na23_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Mg24_to_p_Na23_derived) = drate_dT; + } + } + + { + 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_Si28_to_p_Al27_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Si28_to_p_Al27_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Si28_to_p_Al27_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Si28_to_He4_Mg24_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Si28_to_He4_Mg24_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Si28_to_He4_Mg24_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_S32_to_p_P31_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_S32_to_p_P31_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_S32_to_p_P31_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_S32_to_He4_Si28_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_S32_to_He4_Si28_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_S32_to_He4_Si28_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe52_to_p_Mn51_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe52_to_p_Mn51_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe52_to_p_Mn51_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe52_to_He4_Cr48_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe52_to_He4_Cr48_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe52_to_He4_Cr48_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Co55_to_He4_Mn51_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Co55_to_He4_Mn51_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Co55_to_He4_Mn51_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni56_to_p_Co55_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni56_to_p_Co55_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni56_to_p_Co55_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni56_to_He4_Fe52_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni56_to_He4_Fe52_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni56_to_He4_Fe52_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Cu59_to_He4_Co55_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Cu59_to_He4_Co55_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Cu59_to_He4_Co55_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Zn60_to_p_Cu59_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Zn60_to_p_Cu59_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Zn60_to_p_Cu59_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Zn60_to_He4_Ni56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Zn60_to_He4_Ni56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Zn60_to_He4_Ni56_derived) = drate_dT; + } + } + + { + 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}; +#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_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; + } + } + + { + 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); + } +#endif + rate_He4_Ne20_to_p_Na23_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Ne20_to_p_Na23_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ne20_to_p_Na23_derived) = 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_Ne20); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ne20); + } +#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; + } + } + + { + 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_Na23); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Na23); + } +#endif + rate_p_Na23_to_C12_C12_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Na23_to_C12_C12_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Na23_to_C12_C12_derived) = 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_Mg24); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mg24); + } +#endif + rate_He4_Mg24_to_p_Al27_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Mg24_to_p_Al27_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Mg24_to_p_Al27_derived) = 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_Mg24); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mg24); + } +#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; + } + } + + { + 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_Al27); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Al27); + } +#endif + rate_p_Al27_to_C12_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Al27_to_C12_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Al27_to_C12_O16_derived) = 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_Si28); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Si28); + } +#endif + rate_He4_Si28_to_p_P31_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Si28_to_p_P31_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Si28_to_p_P31_derived) = 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_Si28); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Si28); + } +#endif + rate_He4_Si28_to_O16_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Si28_to_O16_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Si28_to_O16_O16_derived) = 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_P31); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_P31); + } +#endif + rate_p_P31_to_O16_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_P31_to_O16_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_P31_to_O16_O16_derived) = 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_Mn51); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Mn51); + } +#endif + rate_p_Mn51_to_He4_Cr48_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Mn51_to_He4_Cr48_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Mn51_to_He4_Cr48_derived) = 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_Co55); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Co55); + } +#endif + rate_p_Co55_to_He4_Fe52_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Co55_to_He4_Fe52_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Co55_to_He4_Fe52_derived) = 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_Ni56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ni56); + } +#endif + rate_He4_Ni56_to_p_Cu59_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Ni56_to_p_Cu59_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ni56_to_p_Cu59_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Mg24_to_C12_C12_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Mg24_to_C12_C12_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Mg24_to_C12_C12_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_S32_to_O16_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_S32_to_O16_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_S32_to_O16_O16_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Si28_to_C12_O16_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Si28_to_C12_O16_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Si28_to_C12_O16_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Co55_to_p_Fe54_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Co55_to_p_Fe54_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Co55_to_p_Fe54_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Co56_to_n_Co55_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Co56_to_n_Co55_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Co56_to_n_Co55_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Co57_to_n_Co56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Co57_to_n_Co56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Co57_to_n_Co56_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Co57_to_p_Fe56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Co57_to_p_Fe56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Co57_to_p_Fe56_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni58_to_p_Co57_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni58_to_p_Co57_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni58_to_p_Co57_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni58_to_He4_Fe54_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni58_to_He4_Fe54_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni58_to_He4_Fe54_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Cu59_to_p_Ni58_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Cu59_to_p_Ni58_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Cu59_to_p_Ni58_derived) = 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_Fe54); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Fe54); + } +#endif + rate_p_Fe54_to_He4_Mn51_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Fe54_to_He4_Mn51_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Fe54_to_He4_Mn51_derived) = 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_Fe54); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Fe54); + } +#endif + rate_He4_Fe54_to_p_Co57_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Fe54_to_p_Co57_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Fe54_to_p_Co57_derived) = 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_Fe56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Fe56); + } +#endif + rate_p_Fe56_to_n_Co56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Fe56_to_n_Co56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Fe56_to_n_Co56_derived) = 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_Co56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Co56); + } +#endif + rate_p_Co56_to_n_Ni56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Co56_to_n_Ni56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Co56_to_n_Ni56_derived) = 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_Co56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Co56); + } +#endif + rate_He4_Co56_to_n_Cu59_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Co56_to_n_Cu59_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Co56_to_n_Cu59_derived) = 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_Ni58); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ni58); + } +#endif + rate_p_Ni58_to_He4_Co55_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_Ni58_to_He4_Co55_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Ni58_to_He4_Co55_derived) = 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_S32); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_S32); + } +#endif + rate_He4_S32_to_p_Cl35_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_S32_to_p_Cl35_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_S32_to_p_Cl35_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ar36_to_He4_S32_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ar36_to_He4_S32_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ar36_to_He4_S32_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ar36_to_p_Cl35_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ar36_to_p_Cl35_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ar36_to_p_Cl35_derived) = 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_Ar36); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ar36); + } +#endif + rate_He4_Ar36_to_p_K39_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Ar36_to_p_K39_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ar36_to_p_K39_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ca40_to_He4_Ar36_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ca40_to_He4_Ar36_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ca40_to_He4_Ar36_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ca40_to_p_K39_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ca40_to_p_K39_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ca40_to_p_K39_derived) = 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_Ca40); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ca40); + } +#endif + rate_He4_Ca40_to_p_Sc43_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_He4_Ca40_to_p_Sc43_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ca40_to_p_Sc43_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ti44_to_He4_Ca40_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ti44_to_He4_Ca40_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ti44_to_He4_Ca40_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ti44_to_p_Sc43_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ti44_to_p_Sc43_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ti44_to_p_Sc43_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Cr48_to_He4_Ti44_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Cr48_to_He4_Ti44_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Cr48_to_He4_Ti44_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Cr48_to_p_V47_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Cr48_to_p_V47_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Cr48_to_p_V47_derived) = 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_V47); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_V47); + } +#endif + rate_p_V47_to_He4_Ti44_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_p_V47_to_He4_Ti44_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe54_to_n_Fe53_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe54_to_n_Fe53_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe54_to_n_Fe53_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe53_to_n_Fe52_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe53_to_n_Fe52_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe53_to_n_Fe52_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe56_to_n_Fe55_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe56_to_n_Fe55_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe56_to_n_Fe55_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Fe55_to_n_Fe54_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Fe55_to_n_Fe54_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Fe55_to_n_Fe54_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni58_to_n_Ni57_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni58_to_n_Ni57_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni58_to_n_Ni57_derived) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_Ni57_to_n_Ni56_derived(tfactors, log_scor, dlog_scor_dT, rate, drate_dT, rate_eval, pf_cache); + rate_eval.screened_rates(k_Ni57_to_n_Ni56_derived) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_Ni57_to_n_Ni56_derived) = drate_dT; + } } - rate_Ni57_to_n_Ni56_removed(tfactors, rate, drate_dT, rate_eval, pf_cache); - rate_eval.screened_rates(k_Ni57_to_n_Ni56_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni57_to_n_Ni56_removed) = drate_dT; - } } #endif diff --git a/networks/he-burn/ase-iron/partition_functions.H b/networks/he-burn/ase-iron/partition_functions.H index 23de163bb..4c4c2114c 100644 --- a/networks/he-burn/ase-iron/partition_functions.H +++ b/networks/he-burn/ase-iron/partition_functions.H @@ -120,7 +120,7 @@ namespace part_fun { inline AMREX_GPU_MANAGED amrex::Array1D Mg24_pf_array = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 9.999994999180668e-07, 0.0001259920626667995, 0.0017764212290928272, 0.008665347199341391, 0.02478529122240376, + 9.999994999180668e-07, 0.0001259920626667995, 0.0017764212290928272, 0.008665347199341391, 0.024785291222403763, 0.05209612203517594, 0.09017063128626053, 0.13704782771330884, 0.19024508258946665, 0.30679917070896673, 0.42717245621910793, 0.5457138884802113, 0.660894613389287, 0.773014180490088, 0.9932517730102834, 1.2119409739751128, 1.4398351280479205, 1.682688374173693, 1.9487632180377197, 2.244955980157409, @@ -217,7 +217,7 @@ namespace part_fun { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.1999928000476974e-05, 0.0001599872013651075, 0.0008965979359162839, - 0.0030782573008273765, 0.007778667567807429, 0.01603376935914739, 0.02868269041229125, 0.06934041108806749, + 0.003078257300827377, 0.007778667567807429, 0.01603376935914739, 0.02868269041229125, 0.06934041108806749, 0.13236245968854618, 0.21875794860165648, 0.32915769331179123, 0.4643325791959468, 0.8109302162163288, 1.2669476034873244, 1.81319474994812, 2.4336133554004498, 3.086486636822455, 3.756538102587751, 4.4272389774954295, 5.093750200806762, 5.746203190540153, 6.386879319362645, 7.940939762327791, @@ -552,7 +552,7 @@ namespace part_fun { inline AMREX_GPU_MANAGED amrex::Array1D Fe56_pf_array = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.999991999914312e-06, 2.2999735504161862e-05, 9.099585975123644e-05, - 0.00026996355655966415, 0.007115623795532719, 0.036122649876509136, 0.09416770925148646, 0.17582214798729476, + 0.00026996355655966415, 0.00711562379553272, 0.036122649876509136, 0.09416770925148646, 0.17582214798729476, 0.2723587679931664, 0.37744210592173955, 0.4880608616770881, 0.6035325999923254, 0.8511487220072201, 1.1254226572294825, 1.4290963940696066, 1.7632754575255085, 2.1292725925101696, 2.9601050959108397, 3.9080149840306073, 4.9344739331306915, 6.0014148779611505, 7.07326971745971, 8.151909872940905, @@ -577,7 +577,7 @@ namespace part_fun { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.9999980000601777e-06, 3.299945551192844e-05, 0.0002149768908123338, - 0.0008776147834635239, 0.002650484360963482, 0.006510758935580232, 0.013783568660113304, 0.04542450669313041, + 0.0008776147834635239, 0.0026504843609634825, 0.006510758935580232, 0.013783568660113304, 0.04542450669313041, 0.11337689843044624, 0.2341190990271887, 0.4197354671252422, 0.6733637730790638, 1.3506671834767394, 2.175887439948088, 3.068052935133617, 3.9982007016691985, 4.948759890378168, 5.910796644040527, 6.887552571664617, 7.874739125171811, 8.869257522797287, 9.87302834505142, 12.392552212472792, @@ -649,7 +649,7 @@ namespace part_fun { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.999994999180668e-07, 1.7999838002017484e-05, 0.00014798904908051437, - 0.0006687763192560828, 0.0021007917908672197, 0.0051805577080849445, 0.0108093677159202, 0.033929817942853414, + 0.0006687763192560828, 0.0021007917908672197, 0.005180557708084945, 0.0108093677159202, 0.033929817942853414, 0.08125919821801637, 0.16557206393583876, 0.30308828495767837, 0.5109446166860524, 1.172482137234565, 2.102913897864978, 3.1654750481410856, 4.272490747605575, 5.389071729816501, 6.498282149476434, 7.605890001053122, 8.712759974960212, 9.814656338829513, 10.918718232265187, 13.664687668229691, @@ -697,7 +697,7 @@ namespace part_fun { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.499788759151895e-05, 0.0010874085569544608, 0.005954238288214293, 0.018769741111677243, - 0.04333627107625303, 0.08256291389970516, 0.13844890680808367, 0.21212628348615897, 0.4130674701171434, + 0.04333627107625303, 0.08256291389970516, 0.1384489068080837, 0.21212628348615897, 0.4130674701171434, 0.6787038764017188, 0.9964869046943904, 1.355513968039992, 1.7493953139667429, 2.624668592163159, 3.6082115510464816, 4.653960350157523, 5.736572297479192, 6.834108738813838, 7.937374696163295, 9.038365107236372, 10.142504453006628, 11.247656987355347, 12.35017298950393, 15.107494239612924, @@ -713,6 +713,54 @@ namespace part_fun { constexpr amrex::Real Ni58_pf_threshold_T9 = 1.0; + // Cu59 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D Cu59_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 5.99998200002249e-06, 3.7999278018272636e-05, 0.00014598934303724457, 0.00040491800963663984, 0.0008995952428359939, + 0.0017105361984473075, 0.012428445906924757, 0.03638689398559588, 0.073626784973166, 0.12292623116658526, + 0.18321282616205353, 0.25408159613801906, 0.3357819984616533, 0.4289771867440828, 0.6529614419193162, + 0.930428717890741, 1.2607722370732148, 1.6382636305011102, 2.0542709023528873, 2.9601050959108397, + 3.9318256327243257, 4.9344739331306915, 5.961005339623274, 6.993932975223189, 8.039157390473237, + 9.090430075303626, 10.142504453006628, 11.202315887874743, 12.259613412458204, 14.920767389351052, + 17.579033555073977, 20.235505486111418, 22.88543877622371, 25.527286881679668, 28.15574964486353, + 30.7794744765002, 33.38992288980583, 35.99039022215122, 38.58182766274523, 41.16549414415971, + 43.739066431033365, 46.3063440782545, 48.86711057930362, 51.417677874902765, 53.96375874805992, + 56.50619682581586, 59.0416760492395, 61.57377704101001, 64.10131892244245, 66.62414480709275, + 69.14521143829519, 71.66531682504908, 74.17741921764556, 76.6933438618572, 79.20817591494125, + 81.71864934570125, 84.23069253692425, 86.74108102323788, 89.24917100848154, 94.26902295768272, + 99.28879073534225, 104.31446390680304, 109.33991428668443, 114.37210213916643, 119.410078778867, + 124.45292370698547, 137.09667508060747, + }; + + constexpr amrex::Real Cu59_pf_threshold_T9 = 0.4; + + // Zn60 + + // this is log(partition function) + + inline AMREX_GPU_MANAGED amrex::Array1D Zn60_pf_array = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.9999980000601777e-06, 1.1999928000476974e-05, + 4.299907552651673e-05, 0.0021107707552105327, 0.014655087692010784, 0.04650565189537119, 0.0995484583270208, + 0.1701865579572265, 0.2532334746219091, 0.3443326907187112, 0.4407942846867419, 0.647054549773612, + 0.8778621209250755, 1.1497805752425092, 1.4806165530248636, 1.881161777329219, 2.8735646395797834, + 4.032469158504013, 5.241747015059643, 6.459904454377535, 7.6638772587034705, 8.85366542803745, + 10.025705185260378, 11.188579408146856, 12.337100907936577, 13.481435445942783, 16.308716010566968, + 19.11382792451231, 21.895747974180978, 24.660956589123135, 27.411620550893172, 30.14871758853954, + 32.87804518808903, 35.593088424682215, 38.29531449749844, 40.987665789057544, 43.67007355954642, + 46.34437147384374, 49.00661213891465, 51.66117365506587, 54.30753028716274, 56.946587616778004, + 59.57953034539341, 62.209018223992516, 64.82303947544645, 67.44279706940299, 70.0521124298195, + 72.6582900853156, 75.26170168075885, 77.86171501209185, 80.45808906674586, 83.05006709659531, + 85.6467240601399, 88.23539759975046, 90.82326955447033, 93.411736539412, 98.58498084903826, + 103.75609112710721, 108.92953516377385, 114.09923515249979, 119.2755589508551, 124.45292370698547, + 129.6379123882265, 142.61871220130905, + }; + + constexpr amrex::Real Zn60_pf_threshold_T9 = 0.7; + // interpolation routine @@ -960,6 +1008,18 @@ void get_partition_function(const int inuc, } break; + case Cu59: + if (T9 > part_fun::Cu59_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::Cu59_pf_array, logpf, dlogpf_dT9); + } + break; + + case Zn60: + if (T9 > part_fun::Zn60_pf_threshold_T9) { + part_fun::interpolate_pf(T9, pf_cache.index_temp_array_1, part_fun::temp_array_1, part_fun::Zn60_pf_array, logpf, dlogpf_dT9); + } + break; + default: @@ -1026,7 +1086,7 @@ constexpr amrex::Real get_spin_state() { spec == S32 || spec == Ar36 || spec == Ca40 || spec == Ti44 || spec == Cr48 || spec == Fe52 || spec == Fe54 || spec == Fe56 || spec == Ni56 || - spec == Ni58 + spec == Ni58 || spec == Zn60 ) { return 1.0_rt; @@ -1039,8 +1099,9 @@ constexpr amrex::Real get_spin_state() { return 2.0_rt; } else if constexpr ( - spec == Na23 || spec == Cl35 || spec == K39 || - spec == V47 || spec == Fe55 || spec == Ni57 + spec == Na23 || spec == Cu59 || spec == Cl35 || + spec == K39 || spec == V47 || spec == Fe55 || + spec == Ni57 ) { return 4.0_rt; diff --git a/networks/he-burn/ase-iron/pynucastro-info.txt b/networks/he-burn/ase-iron/pynucastro-info.txt index e055581de..1e77fc5d4 100644 --- a/networks/he-burn/ase-iron/pynucastro-info.txt +++ b/networks/he-burn/ase-iron/pynucastro-info.txt @@ -1 +1 @@ -pynucastro version: 2.9.0-28-gbcc09d414 +pynucastro version: 2.10.0-1-g9f83d7cdd diff --git a/networks/he-burn/ase-iron/pynucastro.net b/networks/he-burn/ase-iron/pynucastro.net index 56b5f8cfb..5310557c3 100644 --- a/networks/he-burn/ase-iron/pynucastro.net +++ b/networks/he-burn/ase-iron/pynucastro.net @@ -24,6 +24,8 @@ cobalt-56 Co56 56.0 27.0 cobalt-57 Co57 57.0 27.0 nickel-56 Ni56 56.0 28.0 nickel-58 Ni58 58.0 28.0 +copper-59 Cu59 59.0 29.0 +zinc-60 Zn60 60.0 30.0 __extra_chlorine-35 Cl35 35.0 17.0 __extra_potassium-39 K39 39.0 19.0 __extra_scandium-43 Sc43 43.0 21.0 diff --git a/networks/he-burn/ase-iron/reaclib_rates.H b/networks/he-burn/ase-iron/reaclib_rates.H index f991ab47c..4f9ecede1 100644 --- a/networks/he-burn/ase-iron/reaclib_rates.H +++ b/networks/he-burn/ase-iron/reaclib_rates.H @@ -6,25 +6,14 @@ #include #include +#include using namespace Rates; using namespace Species; -struct rate_t { - amrex::Array1D screened_rates; - amrex::Real enuc_weak; -}; - -struct rate_derivs_t { - amrex::Array1D screened_rates; - amrex::Array1D dscreened_rates_dT; - amrex::Real enuc_weak; -}; - - template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_C12_to_N13_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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 @@ -39,9 +28,13 @@ void rate_p_C12_to_N13_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -56,9 +49,13 @@ void rate_p_C12_to_N13_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -73,7 +70,7 @@ void rate_p_C12_to_N13_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_C12_to_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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 @@ -88,9 +85,13 @@ void rate_He4_C12_to_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -105,9 +106,13 @@ void rate_He4_C12_to_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -122,7 +127,7 @@ void rate_He4_C12_to_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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 @@ -137,9 +142,13 @@ void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 3.88571 + -10.3585 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -154,9 +163,13 @@ void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -171,9 +184,13 @@ void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -188,7 +205,7 @@ void rate_He4_O16_to_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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) { // Ne20 + He4 --> Mg24 @@ -203,9 +220,13 @@ void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -220,9 +241,13 @@ void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 1.98307 + -9.22026 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -237,9 +262,13 @@ void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = -38.7055 + -2.50605 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 2.50605 * 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] @@ -254,9 +283,13 @@ void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -271,7 +304,7 @@ void rate_He4_Ne20_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Na23_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Na23_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) { // Na23 + p --> Mg24 @@ -286,9 +319,13 @@ void rate_p_Na23_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 9.0594 + -3.28029 * tfactors.T9i + -0.360588 * tfactors.T913 + 1.4187 * tfactors.T9 + -0.184061 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 3.28029 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.360588 * tfactors.T923i + 1.4187 + (5.0/3.0) * -0.184061 * tfactors.T923 + -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] @@ -303,9 +340,13 @@ void rate_p_Na23_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -5.02585 + -1.61219 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.61219 * 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] @@ -320,9 +361,13 @@ void rate_p_Na23_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 18.9075 + -20.6428 * tfactors.T913i + 1.52954 * tfactors.T913 + 2.7487 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -20.6428 * tfactors.T943i + (1.0/3.0) * 1.52954 * tfactors.T923i + 2.7487 + (5.0/3.0) * -1.0 * 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] @@ -337,7 +382,7 @@ void rate_p_Na23_to_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Mg24_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Mg24_to_Si28_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Mg24 + He4 --> Si28 @@ -352,9 +397,13 @@ void rate_He4_Mg24_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 8.03977 + -15.629 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 15.629 * 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] @@ -369,9 +418,13 @@ void rate_He4_Mg24_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = -50.5494 + -12.8332 * tfactors.T9i + 21.3721 * tfactors.T913i + 37.7649 * tfactors.T913 + -4.10635 * tfactors.T9 + 0.249618 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 12.8332 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.3721 * tfactors.T943i + (1.0/3.0) * 37.7649 * tfactors.T923i + -4.10635 + (5.0/3.0) * 0.249618 * tfactors.T923 + -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] @@ -386,7 +439,7 @@ void rate_He4_Mg24_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Al27 + p --> Si28 @@ -401,9 +454,13 @@ void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -13.6664 + -1.90396 * tfactors.T9i + 23.8634 * tfactors.T913 + -3.70135 * tfactors.T9 + 0.28964 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.90396 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 23.8634 * tfactors.T923i + -3.70135 + (5.0/3.0) * 0.28964 * tfactors.T923 + -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] @@ -418,9 +475,13 @@ void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 86.0234 + -0.387313 * tfactors.T9i + -26.8327 * tfactors.T913i + -116.137 * tfactors.T913 + 0.00950567 * tfactors.T9 + 0.00999755 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.387313 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.8327 * tfactors.T943i + (1.0/3.0) * -116.137 * tfactors.T923i + 0.00950567 + (5.0/3.0) * 0.00999755 * tfactors.T923 + -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] @@ -435,9 +496,13 @@ void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 21.1065 + -23.2205 * tfactors.T913i + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -23.2205 * tfactors.T943i + (5.0/3.0) * -2.0 * 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] @@ -452,7 +517,7 @@ void rate_p_Al27_to_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Si28_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Si28_to_S32_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Si28 + He4 --> S32 @@ -467,9 +532,13 @@ void rate_He4_Si28_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 47.9212 + -59.4896 * tfactors.T913i + 4.47205 * tfactors.T913 + -4.78989 * tfactors.T9 + 0.557201 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -59.4896 * tfactors.T943i + (1.0/3.0) * 4.47205 * tfactors.T923i + -4.78989 + (5.0/3.0) * 0.557201 * 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] @@ -484,7 +553,7 @@ void rate_He4_Si28_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // P31 + p --> S32 @@ -499,9 +568,13 @@ void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 0.821556 + -3.77704 * tfactors.T9i + 8.09341 * tfactors.T913 + -0.615971 * tfactors.T9 + 0.031159 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 3.77704 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 8.09341 * tfactors.T923i + -0.615971 + (5.0/3.0) * 0.031159 * tfactors.T923 + -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] @@ -516,9 +589,13 @@ void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = -2.66839 + -2.25958 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 2.25958 * 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] @@ -533,9 +610,13 @@ void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R ln_set_rate = 19.2596 + -25.3278 * tfactors.T913i + 6.4931 * tfactors.T913 + -9.27513 * tfactors.T9 + -0.610439 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -25.3278 * tfactors.T943i + (1.0/3.0) * 6.4931 * tfactors.T923i + -9.27513 + (5.0/3.0) * -0.610439 * 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] @@ -550,7 +631,7 @@ void rate_p_P31_to_S32_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::R template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Cr48_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Cr48_to_Fe52_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Cr48 + He4 --> Fe52 @@ -565,9 +646,13 @@ void rate_He4_Cr48_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 65.1754 + -86.7459 * tfactors.T913i + -9.79373 * tfactors.T913 + -0.772169 * tfactors.T9 + 0.155883 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * -9.79373 * tfactors.T923i + -0.772169 + (5.0/3.0) * 0.155883 * 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] @@ -582,7 +667,7 @@ void rate_He4_Cr48_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Mn51_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Mn51_to_Fe52_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Mn51 + p --> Fe52 @@ -597,9 +682,13 @@ void rate_p_Mn51_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 36.2596 + -36.1825 * tfactors.T913i + 0.873042 * tfactors.T913 + -2.89731 * tfactors.T9 + 0.364394 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -36.1825 * tfactors.T943i + (1.0/3.0) * 0.873042 * tfactors.T923i + -2.89731 + (5.0/3.0) * 0.364394 * 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] @@ -614,7 +703,7 @@ void rate_p_Mn51_to_Fe52_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Mn51_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Mn51_to_Co55_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Mn51 + He4 --> Co55 @@ -629,9 +718,13 @@ void rate_He4_Mn51_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 65.9219 + -89.274 * tfactors.T913i + -10.4373 * tfactors.T913 + 1.00492 * tfactors.T9 + -0.125548 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -10.4373 * tfactors.T923i + 1.00492 + (5.0/3.0) * -0.125548 * 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] @@ -646,7 +739,7 @@ void rate_He4_Mn51_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Fe52_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Fe52_to_Ni56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe52 + He4 --> Ni56 @@ -661,9 +754,13 @@ void rate_He4_Fe52_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 66.6417 + -91.6819 * tfactors.T913i + -9.51885 * tfactors.T913 + -0.533014 * tfactors.T9 + 0.0892607 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -9.51885 * tfactors.T923i + -0.533014 + (5.0/3.0) * 0.0892607 * 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] @@ -678,7 +775,7 @@ void rate_He4_Fe52_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Co55_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Co55_to_Ni56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Co55 + p --> Ni56 @@ -693,9 +790,121 @@ void rate_p_Co55_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 37.3736 + -38.1053 * tfactors.T913i + -0.210947 * tfactors.T913 + -2.68377 * tfactors.T9 + 0.355814 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -38.1053 * tfactors.T943i + (1.0/3.0) * -0.210947 * tfactors.T923i + -2.68377 + (5.0/3.0) * 0.355814 * 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; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_Co55_to_Cu59_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Co55 + He4 --> Cu59 + + 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}; + + // ths8r + ln_set_rate = 65.2921 + -94.1404 * tfactors.T913i + -2.62786 * tfactors.T913 + + -2.12066 * tfactors.T9 + 0.237999 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * -2.62786 * tfactors.T923i + + -2.12066 + (5.0/3.0) * 0.237999 * 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; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_He4_Ni56_to_Zn60_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Ni56 + He4 --> Zn60 + + 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}; + + // ths8r + ln_set_rate = 61.0733 + -96.4898 * tfactors.T913i + 6.47209 * tfactors.T913 + + -5.2029 * tfactors.T9 + 0.533391 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -96.4898 * tfactors.T943i + (1.0/3.0) * 6.47209 * tfactors.T923i + + -5.2029 + (5.0/3.0) * 0.533391 * 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; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_Cu59_to_Zn60_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Cu59 + p --> Zn60 + + 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}; + + // ths8r + ln_set_rate = 37.226 + -39.9808 * tfactors.T913i + 1.17311 * tfactors.T913 + + -2.90486 * tfactors.T9 + 0.339644 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.9808 * tfactors.T943i + (1.0/3.0) * 1.17311 * tfactors.T923i + + -2.90486 + (5.0/3.0) * 0.339644 * 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] @@ -710,7 +919,7 @@ void rate_p_Co55_to_Ni56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_C12_to_p_Na23_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_C12_C12_to_p_Na23_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // C12 + C12 --> p + Na23 @@ -725,9 +934,13 @@ void rate_C12_C12_to_p_Na23_reaclib(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 60.9649 + -84.165 * tfactors.T913i + -1.4191 * tfactors.T913 + -0.114619 * tfactors.T9 + -0.070307 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.4191 * tfactors.T923i + -0.114619 + (5.0/3.0) * -0.070307 * 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] @@ -742,7 +955,7 @@ void rate_C12_C12_to_p_Na23_reaclib(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_C12_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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) { // C12 + C12 --> He4 + Ne20 @@ -757,9 +970,13 @@ void rate_C12_C12_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, a 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -774,7 +991,7 @@ void rate_C12_C12_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_N13_to_p_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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) { // N13 + He4 --> p + O16 @@ -789,9 +1006,13 @@ void rate_He4_N13_to_p_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amre 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -806,7 +1027,7 @@ void rate_He4_N13_to_p_O16_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_O16_to_p_Al27_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_C12_O16_to_p_Al27_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // O16 + C12 --> p + Al27 @@ -821,9 +1042,13 @@ void rate_C12_O16_to_p_Al27_reaclib(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 68.5253 + 0.205134 * tfactors.T9i + -119.242 * tfactors.T913i + 13.3667 * tfactors.T913 + 0.295425 * tfactors.T9 + -0.267288 * tfactors.T953 + -9.91729 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = -0.205134 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.242 * tfactors.T943i + (1.0/3.0) * 13.3667 * tfactors.T923i + 0.295425 + (5.0/3.0) * -0.267288 * tfactors.T923 + -9.91729 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -838,7 +1063,7 @@ void rate_C12_O16_to_p_Al27_reaclib(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_O16_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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) { // O16 + C12 --> He4 + Mg24 @@ -853,9 +1078,13 @@ void rate_C12_O16_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, a 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; + 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; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -870,7 +1099,7 @@ void rate_C12_O16_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_O16_O16_to_p_P31_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_O16_O16_to_p_P31_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // O16 + O16 --> p + P31 @@ -885,9 +1114,13 @@ void rate_O16_O16_to_p_P31_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 85.2628 + 0.223453 * tfactors.T9i + -145.844 * tfactors.T913i + 8.72612 * tfactors.T913 + -0.554035 * tfactors.T9 + -0.137562 * tfactors.T953 + -6.88807 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = -0.223453 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -145.844 * tfactors.T943i + (1.0/3.0) * 8.72612 * tfactors.T923i + -0.554035 + (5.0/3.0) * -0.137562 * tfactors.T923 + -6.88807 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -902,7 +1135,7 @@ void rate_O16_O16_to_p_P31_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_O16_O16_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_O16_O16_to_He4_Si28_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // O16 + O16 --> He4 + Si28 @@ -917,9 +1150,13 @@ void rate_O16_O16_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, a ln_set_rate = 97.2435 + -0.268514 * tfactors.T9i + -119.324 * tfactors.T913i + -32.2497 * tfactors.T913 + 1.46214 * tfactors.T9 + -0.200893 * tfactors.T953 + 13.2148 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.268514 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.324 * tfactors.T943i + (1.0/3.0) * -32.2497 * tfactors.T923i + 1.46214 + (5.0/3.0) * -0.200893 * tfactors.T923 + 13.2148 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -934,7 +1171,7 @@ void rate_O16_O16_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, a template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Na23_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Na23_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) { // Na23 + p --> He4 + Ne20 @@ -949,9 +1186,13 @@ void rate_p_Na23_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -6.58736 + -2.31577 * tfactors.T9i + 19.7297 * tfactors.T913 + -2.20987 * tfactors.T9 + 0.153374 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 2.31577 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 19.7297 * tfactors.T923i + -2.20987 + (5.0/3.0) * 0.153374 * tfactors.T923 + -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] @@ -966,9 +1207,13 @@ void rate_p_Na23_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 0.0178295 + -1.86103 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.86103 * 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] @@ -983,9 +1228,13 @@ void rate_p_Na23_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 18.9756 + -20.0024 * tfactors.T913i + 11.5988 * tfactors.T913 + -1.37398 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -20.0024 * tfactors.T943i + (1.0/3.0) * 11.5988 * tfactors.T923i + -1.37398 + (5.0/3.0) * -1.0 * 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] @@ -1000,7 +1249,7 @@ void rate_p_Na23_to_He4_Ne20_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Al27_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Al27_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) { // Al27 + p --> He4 + Mg24 @@ -1015,9 +1264,13 @@ void rate_p_Al27_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -7.02789 + -4.2425 * tfactors.T9i + 18.0416 * tfactors.T913 + -1.54137 * tfactors.T9 + 0.0847506 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 4.2425 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0416 * tfactors.T923i + -1.54137 + (5.0/3.0) * 0.0847506 * tfactors.T923 + -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] @@ -1032,9 +1285,13 @@ void rate_p_Al27_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -26.8683 + -0.963012 * tfactors.T9i + 5.18642 * tfactors.T913i + -34.7936 * tfactors.T913 + 168.225 * tfactors.T9 + -115.825 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.963012 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 5.18642 * tfactors.T943i + (1.0/3.0) * -34.7936 * tfactors.T923i + 168.225 + (5.0/3.0) * -115.825 * tfactors.T923 + -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] @@ -1049,9 +1306,13 @@ void rate_p_Al27_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 29.4576 + -26.4162 * tfactors.T913i + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -26.4162 * tfactors.T943i + (5.0/3.0) * -2.0 * 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] @@ -1066,7 +1327,7 @@ void rate_p_Al27_to_He4_Mg24_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // P31 + p --> He4 + Si28 @@ -1081,9 +1342,13 @@ void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -10.893 + -3.42575 * tfactors.T9i + 21.521 * tfactors.T913 + -1.90355 * tfactors.T9 + 0.092724 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 3.42575 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 21.521 * tfactors.T923i + -1.90355 + (5.0/3.0) * 0.092724 * tfactors.T923 + -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] @@ -1098,9 +1363,13 @@ void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -12.919 + -1.87716 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.87716 * 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] @@ -1115,9 +1384,13 @@ void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 60.8829 + -31.932 * tfactors.T913i + -77.0334 * tfactors.T913 + -43.6847 * tfactors.T9 + -4.28955 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -31.932 * tfactors.T943i + (1.0/3.0) * -77.0334 * tfactors.T923i + -43.6847 + (5.0/3.0) * -4.28955 * 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] @@ -1132,7 +1405,7 @@ void rate_p_P31_to_He4_Si28_reaclib(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Cr48_to_p_Mn51_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Cr48_to_p_Mn51_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Cr48 + He4 --> p + Mn51 @@ -1147,9 +1420,13 @@ void rate_He4_Cr48_to_p_Mn51_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 59.2276 + -86.7459 * tfactors.T913i + 1.05653 * tfactors.T913 + -1.15757 * tfactors.T9 + 0.0877546 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * 1.05653 * tfactors.T923i + -1.15757 + (5.0/3.0) * 0.0877546 * 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] @@ -1164,7 +1441,7 @@ void rate_He4_Cr48_to_p_Mn51_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Fe52_to_p_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Fe52_to_p_Co55_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe52 + He4 --> p + Co55 @@ -1179,9 +1456,49 @@ void rate_He4_Fe52_to_p_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 62.2207 + -91.6819 * tfactors.T913i + -0.329235 * tfactors.T913 + -0.780924 * tfactors.T9 + 0.0425179 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -0.329235 * tfactors.T923i + -0.780924 + (5.0/3.0) * 0.0425179 * 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; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_Cu59_to_He4_Ni56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Cu59 + p --> He4 + Ni56 + + 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}; + + // ths8r + ln_set_rate = 20.7688 + -39.9808 * tfactors.T913i + 13.6773 * tfactors.T913 + + -3.76429 * tfactors.T9 + 0.438096 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.9808 * tfactors.T943i + (1.0/3.0) * 13.6773 * tfactors.T923i + + -3.76429 + (5.0/3.0) * 0.438096 * 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] @@ -1196,7 +1513,7 @@ void rate_He4_Fe52_to_p_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +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) { // 3 He4 --> C12 @@ -1211,9 +1528,13 @@ void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1228,9 +1549,13 @@ void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1245,9 +1570,13 @@ void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, amrex::Real& rate, am 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; + 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; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1262,7 +1591,7 @@ void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_C12_to_n_Mg23_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_C12_C12_to_n_Mg23_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // C12 + C12 --> n + Mg23 @@ -1277,9 +1606,13 @@ void rate_C12_C12_to_n_Mg23_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -12.8056 + -30.1498 * tfactors.T9i + 11.4826 * tfactors.T913 + 1.82849 * tfactors.T9 + -0.34844 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 30.1498 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.4826 * tfactors.T923i + 1.82849 + (5.0/3.0) * -0.34844 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1294,7 +1627,7 @@ void rate_C12_C12_to_n_Mg23_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_O16_O16_to_n_S31_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_O16_O16_to_n_S31_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // O16 + O16 --> n + S31 @@ -1309,9 +1642,13 @@ void rate_O16_O16_to_n_S31_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 77.5491 + -0.373641 * tfactors.T9i + -120.83 * tfactors.T913i + -7.72334 * tfactors.T913 + -2.27939 * tfactors.T9 + 0.167655 * tfactors.T953 + 7.62001 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.373641 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -120.83 * tfactors.T943i + (1.0/3.0) * -7.72334 * tfactors.T923i + -2.27939 + (5.0/3.0) * 0.167655 * tfactors.T923 + 7.62001 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1326,7 +1663,7 @@ void rate_O16_O16_to_n_S31_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_O16_to_n_Si27_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_C12_O16_to_n_Si27_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // O16 + C12 --> n + Si27 @@ -1341,9 +1678,13 @@ void rate_C12_O16_to_n_Si27_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -132.213 + -1.46479 * tfactors.T9i + -293.089 * tfactors.T913i + 414.404 * tfactors.T913 + -28.0562 * tfactors.T9 + 1.61807 * tfactors.T953 + -178.28 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.46479 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -293.089 * tfactors.T943i + (1.0/3.0) * 414.404 * tfactors.T923i + -28.0562 + (5.0/3.0) * 1.61807 * tfactors.T923 + -178.28 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1358,7 +1699,7 @@ void rate_C12_O16_to_n_Si27_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Fe54_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Fe54_to_Co55_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe54 + p --> Co55 @@ -1373,9 +1714,13 @@ void rate_p_Fe54_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 36.2304 + -37.1544 * tfactors.T913i + 0.950364 * tfactors.T913 + -1.77529 * tfactors.T9 + 0.198562 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -37.1544 * tfactors.T943i + (1.0/3.0) * 0.950364 * tfactors.T923i + -1.77529 + (5.0/3.0) * 0.198562 * 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] @@ -1390,7 +1735,7 @@ void rate_p_Fe54_to_Co55_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Fe54_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Fe54_to_Ni58_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe54 + He4 --> Ni58 @@ -1405,9 +1750,13 @@ void rate_He4_Fe54_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 60.2478 + -91.7628 * tfactors.T913i + 4.23027 * tfactors.T913 + -3.31305 * tfactors.T9 + 0.271293 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -91.7628 * tfactors.T943i + (1.0/3.0) * 4.23027 * tfactors.T923i + -3.31305 + (5.0/3.0) * 0.271293 * 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] @@ -1422,7 +1771,7 @@ void rate_He4_Fe54_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Fe56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Fe56_to_Co57_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe56 + p --> Co57 @@ -1437,9 +1786,13 @@ void rate_p_Fe56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 36.0665 + -37.1625 * tfactors.T913i + 1.06776 * tfactors.T913 + -1.31689 * tfactors.T9 + 0.122089 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -37.1625 * tfactors.T943i + (1.0/3.0) * 1.06776 * tfactors.T923i + -1.31689 + (5.0/3.0) * 0.122089 * 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] @@ -1454,7 +1807,7 @@ void rate_p_Fe56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Co55_to_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Co55_to_Co56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Co55 + n --> Co56 @@ -1469,9 +1822,13 @@ void rate_n_Co55_to_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 17.065 + -1.86357 * tfactors.T913 + 0.616591 * tfactors.T9 + -0.0839313 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.86357 * tfactors.T923i + 0.616591 + (5.0/3.0) * -0.0839313 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1486,7 +1843,7 @@ void rate_n_Co55_to_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Co56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Co56_to_Co57_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Co56 + n --> Co57 @@ -1501,9 +1858,13 @@ void rate_n_Co56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 17.3552 + -1.37855 * tfactors.T913 + 0.299896 * tfactors.T9 + -0.04382 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.37855 * tfactors.T923i + 0.299896 + (5.0/3.0) * -0.04382 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1518,7 +1879,7 @@ void rate_n_Co56_to_Co57_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Co57_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Co57_to_Ni58_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Co57 + p --> Ni58 @@ -1533,9 +1894,13 @@ void rate_p_Co57_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 36.0159 + -38.1133 * tfactors.T913i + 1.77414 * tfactors.T913 + -1.48268 * tfactors.T9 + 0.121073 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 1.77414 * tfactors.T923i + -1.48268 + (5.0/3.0) * 0.121073 * 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] @@ -1550,9 +1915,9 @@ void rate_p_Co57_to_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Mn51_to_p_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Ni58_to_Cu59_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - // Mn51 + He4 --> p + Fe54 + // Ni58 + p --> Cu59 rate = 0.0; drate_dT = 0.0; @@ -1561,13 +1926,17 @@ void rate_He4_Mn51_to_p_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, am amrex::Real dln_set_rate_dT9{0.0}; amrex::Real set_rate{0.0}; - // ths8r - ln_set_rate = 62.2777 + -89.274 * tfactors.T913i + -0.862452 * tfactors.T913 - + -0.635672 * tfactors.T9 + 0.0196464 * tfactors.T953 + -0.666667 * tfactors.lnT9; + // si13n + ln_set_rate = 36.6662 + -39.0526 * tfactors.T913i + 1.0436 * tfactors.T913 + + -2.10834 * tfactors.T9 + 0.239559 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -0.862452 * tfactors.T923i - + -0.635672 + (5.0/3.0) * 0.0196464 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 = + -(1.0/3.0) * -39.0526 * tfactors.T943i + (1.0/3.0) * 1.0436 * tfactors.T923i + + -2.10834 + (5.0/3.0) * 0.239559 * 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] @@ -1582,9 +1951,9 @@ void rate_He4_Mn51_to_p_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Co55_to_p_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Mn51_to_p_Fe54_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - // Co55 + He4 --> p + Ni58 + // Mn51 + He4 --> p + Fe54 rate = 0.0; drate_dT = 0.0; @@ -1594,12 +1963,16 @@ void rate_He4_Co55_to_p_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, am amrex::Real set_rate{0.0}; // ths8r - ln_set_rate = 60.2281 + -94.1404 * tfactors.T913i + 3.39179 * tfactors.T913 - + -1.71062 * tfactors.T9 + 0.133003 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate = 62.2777 + -89.274 * tfactors.T913i + -0.862452 * tfactors.T913 + + -0.635672 * tfactors.T9 + 0.0196464 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; if constexpr (do_T_derivatives) { - dln_set_rate_dT9 = + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * 3.39179 * tfactors.T923i - + -1.71062 + (5.0/3.0) * 0.133003 * tfactors.T923 + -0.666667 * tfactors.T9i; + dln_set_rate_dT9 = + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -0.862452 * tfactors.T923i + + -0.635672 + (5.0/3.0) * 0.0196464 * 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] @@ -1614,9 +1987,9 @@ void rate_He4_Co55_to_p_Ni58_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Co56_to_p_Fe56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Co55_to_p_Ni58_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { - // Co56 + n --> p + Fe56 + // Co55 + He4 --> p + Ni58 rate = 0.0; drate_dT = 0.0; @@ -1626,12 +1999,52 @@ void rate_n_Co56_to_p_Fe56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre amrex::Real set_rate{0.0}; // ths8r - ln_set_rate = 20.4539 + -1.13331 * tfactors.T913 - + 0.347185 * tfactors.T9 + -0.0328879 * tfactors.T953; - + ln_set_rate = 60.2281 + -94.1404 * tfactors.T913i + 3.39179 * tfactors.T913 + + -1.71062 * tfactors.T9 + 0.133003 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * 3.39179 * tfactors.T923i + + -1.71062 + (5.0/3.0) * 0.133003 * 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; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_Co56_to_p_Fe56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Co56 + n --> p + Fe56 + + 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}; + + // ths8r + ln_set_rate = 20.4539 + -1.13331 * tfactors.T913 + + 0.347185 * tfactors.T9 + -0.0328879 * tfactors.T953; + + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.13331 * tfactors.T923i + 0.347185 + (5.0/3.0) * -0.0328879 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1646,7 +2059,7 @@ void rate_n_Co56_to_p_Fe56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Co57_to_He4_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Co57_to_He4_Fe54_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Co57 + p --> He4 + Fe54 @@ -1661,9 +2074,13 @@ void rate_p_Co57_to_He4_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = -2.1962 + -38.1133 * tfactors.T913i + 29.3541 * tfactors.T913 + -4.75966 * tfactors.T9 + 0.40418 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 29.3541 * tfactors.T923i + -4.75966 + (5.0/3.0) * 0.40418 * 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] @@ -1678,7 +2095,7 @@ void rate_p_Co57_to_He4_Fe54_reaclib(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Ni56_to_p_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Ni56_to_p_Co56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ni56 + n --> p + Co56 @@ -1693,9 +2110,49 @@ void rate_n_Ni56_to_p_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 15.5693 + 1.76846 * tfactors.T913 + 0.197992 * tfactors.T9 + -0.017494 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * 1.76846 * tfactors.T923i + 0.197992 + (5.0/3.0) * -0.017494 * tfactors.T923; + + 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_HOST_DEVICE AMREX_INLINE +void rate_n_Cu59_to_He4_Co56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { + + // Cu59 + n --> He4 + Co56 + + 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}; + + // ths8r + ln_set_rate = 11.0108 + -1.00882 * tfactors.T913 + + 1.88993 * tfactors.T9 + -0.202319 * tfactors.T953; + + ln_set_rate += log_scor; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.00882 * tfactors.T923i + + 1.88993 + (5.0/3.0) * -0.202319 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1710,7 +2167,7 @@ void rate_n_Ni56_to_p_Co56_reaclib(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_S32_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_S32_to_Ar36_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // S32 + He4 --> Ar36 @@ -1725,9 +2182,13 @@ void rate_He4_S32_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex ln_set_rate = 48.901 + -65.3709 * tfactors.T913i + 5.68294 * tfactors.T913 + -5.00388 * tfactors.T9 + 0.571407 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -65.3709 * tfactors.T943i + (1.0/3.0) * 5.68294 * tfactors.T923i + -5.00388 + (5.0/3.0) * 0.571407 * 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] @@ -1742,7 +2203,7 @@ void rate_He4_S32_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Cl35_to_Ar36_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Cl35 + p --> Ar36 @@ -1757,9 +2218,13 @@ void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -42.5249 + -0.564651 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.564651 * 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] @@ -1774,9 +2239,13 @@ void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 35.6868 + -27.8971 * tfactors.T913i + -16.2304 * tfactors.T913 + 35.255 * tfactors.T9 + -25.8411 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -27.8971 * tfactors.T943i + (1.0/3.0) * -16.2304 * tfactors.T923i + 35.255 + (5.0/3.0) * -25.8411 * 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] @@ -1791,9 +2260,13 @@ void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -7.84699 + -3.65092 * tfactors.T9i + 18.0179 * tfactors.T913 + -2.86304 * tfactors.T9 + 0.250854 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 3.65092 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0179 * tfactors.T923i + -2.86304 + (5.0/3.0) * 0.250854 * tfactors.T923 + -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] @@ -1808,9 +2281,13 @@ void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -9.03294 + -2.00996 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 2.00996 * 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] @@ -1825,7 +2302,7 @@ void rate_p_Cl35_to_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Cl35_to_He4_S32_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Cl35 + p --> He4 + S32 @@ -1840,9 +2317,13 @@ void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -1.01202 + -3.93495 * tfactors.T9i + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 3.93495 * 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] @@ -1857,9 +2338,13 @@ void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -57.5294 + -0.532931 * tfactors.T9i + 25.5338 * tfactors.T913 + 6.45824 * tfactors.T9 + -0.950294 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.532931 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 25.5338 * tfactors.T923i + 6.45824 + (5.0/3.0) * -0.950294 * tfactors.T923 + -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] @@ -1874,9 +2359,13 @@ void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 32.12 + -30.9147 * tfactors.T913i + -1.2345 * tfactors.T913 + 22.5118 * tfactors.T9 + -33.0589 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -30.9147 * tfactors.T943i + (1.0/3.0) * -1.2345 * tfactors.T923i + 22.5118 + (5.0/3.0) * -33.0589 * 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] @@ -1891,9 +2380,13 @@ void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 2.29121 + -6.00976 * tfactors.T9i + 5.33756 * tfactors.T913 + 1.64418 * tfactors.T9 + -0.246167 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 6.00976 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.33756 * tfactors.T923i + 1.64418 + (5.0/3.0) * -0.246167 * tfactors.T923 + -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] @@ -1908,7 +2401,7 @@ void rate_p_Cl35_to_He4_S32_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ar36_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Ar36_to_Ca40_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ar36 + He4 --> Ca40 @@ -1923,9 +2416,13 @@ void rate_He4_Ar36_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 52.3486 + -71.0046 * tfactors.T913i + 4.0656 * tfactors.T913 + -5.26509 * tfactors.T9 + 0.683546 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -71.0046 * tfactors.T943i + (1.0/3.0) * 4.0656 * tfactors.T923i + -5.26509 + (5.0/3.0) * 0.683546 * 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] @@ -1940,7 +2437,7 @@ void rate_He4_Ar36_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_K39_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_K39_to_Ca40_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // K39 + p --> Ca40 @@ -1955,9 +2452,13 @@ void rate_p_K39_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 2761.38 + -5.22234 * tfactors.T9i + 802.18 * tfactors.T913i + -4010.27 * tfactors.T913 + 1136.19 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 5.22234 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 802.18 * tfactors.T943i + (1.0/3.0) * -4010.27 * tfactors.T923i + 1136.19 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1972,9 +2473,13 @@ void rate_p_K39_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 588.099 + -12.5647 * tfactors.T9i + 641.844 * tfactors.T913i + -1248.49 * tfactors.T913 + 564.926 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 12.5647 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 641.844 * tfactors.T943i + (1.0/3.0) * -1248.49 * tfactors.T923i + 564.926 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -1989,9 +2494,13 @@ void rate_p_K39_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 102.252 + -1.66508 * tfactors.T9i + 41.1723 * tfactors.T913i + -149.299 * tfactors.T913 + 10.5229 * tfactors.T9 + -0.68208 * tfactors.T953 + 59.2367 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 1.66508 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 41.1723 * tfactors.T943i + (1.0/3.0) * -149.299 * tfactors.T923i + 10.5229 + (5.0/3.0) * -0.68208 * tfactors.T923 + 59.2367 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2006,7 +2515,7 @@ void rate_p_K39_to_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_K39_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_K39_to_He4_Ar36_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // K39 + p --> He4 + Ar36 @@ -2021,9 +2530,13 @@ void rate_p_K39_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = 20.5166 + -30.0732 * tfactors.T913i + 7.03263 * tfactors.T913 + -1.10085 * tfactors.T9 + 0.133768 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -30.0732 * tfactors.T943i + (1.0/3.0) * 7.03263 * tfactors.T923i + -1.10085 + (5.0/3.0) * 0.133768 * 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] @@ -2038,7 +2551,7 @@ void rate_p_K39_to_He4_Ar36_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ca40_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Ca40_to_Ti44_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ca40 + He4 --> Ti44 @@ -2053,9 +2566,13 @@ void rate_He4_Ca40_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 53.75 + -76.4273 * tfactors.T913i + 3.87451 * tfactors.T913 + -3.61477 * tfactors.T9 + 0.367451 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -76.4273 * tfactors.T943i + (1.0/3.0) * 3.87451 * tfactors.T923i + -3.61477 + (5.0/3.0) * 0.367451 * 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] @@ -2070,7 +2587,7 @@ void rate_He4_Ca40_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Sc43_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Sc43_to_Ti44_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Sc43 + p --> Ti44 @@ -2085,9 +2602,13 @@ void rate_p_Sc43_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 36.8432 + -32.1734 * tfactors.T913i + -1.77078 * tfactors.T913 + -2.21706 * tfactors.T9 + 0.298499 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * -1.77078 * tfactors.T923i + -2.21706 + (5.0/3.0) * 0.298499 * 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] @@ -2102,7 +2623,7 @@ void rate_p_Sc43_to_Ti44_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_Sc43_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_Sc43_to_He4_Ca40_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Sc43 + p --> He4 + Ca40 @@ -2117,9 +2638,13 @@ void rate_p_Sc43_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, am ln_set_rate = 34.8559 + -32.1734 * tfactors.T913i + 0.0296879 * tfactors.T913 + -0.95232 * tfactors.T9 + 0.129022 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * 0.0296879 * tfactors.T923i + -0.95232 + (5.0/3.0) * 0.129022 * 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] @@ -2134,7 +2659,7 @@ void rate_p_Sc43_to_He4_Ca40_removed(const tf_t& tfactors, amrex::Real& rate, am template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ti44_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Ti44_to_Cr48_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ti44 + He4 --> Cr48 @@ -2149,9 +2674,13 @@ void rate_He4_Ti44_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amre ln_set_rate = 64.7958 + -81.667 * tfactors.T913i + -10.6333 * tfactors.T913 + -0.672613 * tfactors.T9 + 0.161209 * tfactors.T953 + -0.666667 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + -(1.0/3.0) * -81.667 * tfactors.T943i + (1.0/3.0) * -10.6333 * tfactors.T923i + -0.672613 + (5.0/3.0) * 0.161209 * 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] @@ -2166,7 +2695,7 @@ void rate_He4_Ti44_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amre template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_He4_Ti44_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_He4_Ti44_to_p_V47_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ti44 + He4 --> p + V47 @@ -2181,9 +2710,13 @@ void rate_He4_Ti44_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amr ln_set_rate = -76.5154 + -10.7931 * tfactors.T9i + 70.2835 * tfactors.T913 + -7.99061 * tfactors.T9 + 0.486213 * tfactors.T953 + -1.5 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 10.7931 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 70.2835 * tfactors.T923i + -7.99061 + (5.0/3.0) * 0.486213 * tfactors.T923 + -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] @@ -2198,7 +2731,7 @@ void rate_He4_Ti44_to_p_V47_removed(const tf_t& tfactors, amrex::Real& rate, amr template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_p_V47_to_Cr48_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // V47 + p --> Cr48 @@ -2213,9 +2746,13 @@ void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 42.6798 + -6.0593 * tfactors.T9i + -34.0548 * tfactors.T913i + -3.41973 * tfactors.T913 + 1.16501 * tfactors.T9 + -0.105543 * tfactors.T953 + -7.70886 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 6.0593 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -34.0548 * tfactors.T943i + (1.0/3.0) * -3.41973 * tfactors.T923i + 1.16501 + (5.0/3.0) * -0.105543 * tfactors.T923 + -7.70886 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2230,9 +2767,13 @@ void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 511.463 + -5.29491 * tfactors.T9i + 317.171 * tfactors.T913i + -911.679 * tfactors.T913 + 94.4245 * tfactors.T9 + -10.1973 * tfactors.T953 + 330.727 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 5.29491 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 317.171 * tfactors.T943i + (1.0/3.0) * -911.679 * tfactors.T923i + 94.4245 + (5.0/3.0) * -10.1973 * tfactors.T923 + 330.727 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2247,9 +2788,13 @@ void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 23.8315 + 0.246665 * tfactors.T9i + -45.9868 * tfactors.T913i + 13.6822 * tfactors.T913 + -0.376902 * tfactors.T9 + -0.0194875 * tfactors.T953 + -8.42325 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = -0.246665 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -45.9868 * tfactors.T943i + (1.0/3.0) * 13.6822 * tfactors.T923i + -0.376902 + (5.0/3.0) * -0.0194875 * tfactors.T923 + -8.42325 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2264,9 +2809,13 @@ void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: ln_set_rate = 40.5626 + -0.514414 * tfactors.T9i + -110.655 * tfactors.T913i + 83.0232 * tfactors.T913 + -19.7762 * tfactors.T9 + 3.03961 * tfactors.T953 + -49.4742 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.514414 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -110.655 * tfactors.T943i + (1.0/3.0) * 83.0232 * tfactors.T923i + -19.7762 + (5.0/3.0) * 3.03961 * tfactors.T923 + -49.4742 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2281,7 +2830,7 @@ void rate_p_V47_to_Cr48_removed(const tf_t& tfactors, amrex::Real& rate, amrex:: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Fe52_to_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Fe52_to_Fe53_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe52 + n --> Fe53 @@ -2296,9 +2845,13 @@ void rate_n_Fe52_to_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 15.8885 + -0.344319 * tfactors.T913 + 0.178277 * tfactors.T9 + -0.0334326 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -0.344319 * tfactors.T923i + 0.178277 + (5.0/3.0) * -0.0334326 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2313,7 +2866,7 @@ void rate_n_Fe52_to_Fe53_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Fe53_to_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Fe53_to_Fe54_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe53 + n --> Fe54 @@ -2328,9 +2881,13 @@ void rate_n_Fe53_to_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 16.4534 + -1.10421 * tfactors.T913 + 0.379905 * tfactors.T9 + -0.0581878 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.10421 * tfactors.T923i + 0.379905 + (5.0/3.0) * -0.0581878 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2345,7 +2902,7 @@ void rate_n_Fe53_to_Fe54_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Fe54_to_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Fe54_to_Fe55_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe54 + n --> Fe55 @@ -2360,9 +2917,13 @@ void rate_n_Fe54_to_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = -0.80864 + 0.0591716 * tfactors.T9i + -8.66617 * tfactors.T913i + 26.4472 * tfactors.T913 + -1.9222 * tfactors.T9 + 0.0986404 * tfactors.T953 + -9.78317 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = -0.0591716 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -8.66617 * tfactors.T943i + (1.0/3.0) * 26.4472 * tfactors.T923i + -1.9222 + (5.0/3.0) * 0.0986404 * tfactors.T923 + -9.78317 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2377,7 +2938,7 @@ void rate_n_Fe54_to_Fe55_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Fe55_to_Fe56_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Fe55_to_Fe56_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Fe55 + n --> Fe56 @@ -2392,9 +2953,13 @@ void rate_n_Fe55_to_Fe56_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 21.7202 + -0.0955677 * tfactors.T9i + 8.06062 * tfactors.T913i + -14.4809 * tfactors.T913 + 0.94252 * tfactors.T9 + -0.0776007 * tfactors.T953 + 6.47093 * tfactors.lnT9; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = 0.0955677 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.06062 * tfactors.T943i + (1.0/3.0) * -14.4809 * tfactors.T923i + 0.94252 + (5.0/3.0) * -0.0776007 * tfactors.T923 + 6.47093 * tfactors.T9i; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2409,7 +2974,7 @@ void rate_n_Fe55_to_Fe56_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Ni56_to_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Ni56_to_Ni57_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ni56 + n --> Ni57 @@ -2424,9 +2989,13 @@ void rate_n_Ni56_to_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 16.0765 + -1.19665 * tfactors.T913 + 0.507179 * tfactors.T9 + -0.074604 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.19665 * tfactors.T923i + 0.507179 + (5.0/3.0) * -0.074604 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2441,7 +3010,7 @@ void rate_n_Ni56_to_Ni57_removed(const tf_t& tfactors, amrex::Real& rate, amrex: template AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_n_Ni57_to_Ni58_removed(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { +void rate_n_Ni57_to_Ni58_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { // Ni57 + n --> Ni58 @@ -2456,9 +3025,13 @@ void rate_n_Ni57_to_Ni58_removed(const tf_t& tfactors, amrex::Real& rate, amrex: ln_set_rate = 17.2731 + -1.90814 * tfactors.T913 + 0.493188 * tfactors.T9 + -0.0684633 * tfactors.T953; + ln_set_rate += log_scor; + if constexpr (do_T_derivatives) { dln_set_rate_dT9 = + (1.0/3.0) * -1.90814 * tfactors.T923i + 0.493188 + (5.0/3.0) * -0.0684633 * tfactors.T923; + + dln_set_rate_dT9 += dlog_scor_dT * 1.0e9_rt; } // avoid underflows by zeroing rates in [0.0, 1.e-100] @@ -2471,775 +3044,991 @@ void rate_n_Ni57_to_Ni58_removed(const tf_t& tfactors, amrex::Real& rate, amrex: } -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_C12_to_Mg24_modified(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // C12 + C12 --> Mg24 (calls the underlying rate) - - rate_C12_C12_to_n_Mg23_removed(tfactors, rate, drate_dT); -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_O16_O16_to_S32_modified(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // O16 + O16 --> S32 (calls the underlying rate) - - rate_O16_O16_to_n_S31_removed(tfactors, rate, drate_dT); -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_C12_O16_to_Si28_modified(const tf_t& tfactors, amrex::Real& rate, amrex::Real& drate_dT) { - - // O16 + C12 --> Si28 (calls the underlying rate) - - rate_C12_O16_to_n_Si27_removed(tfactors, rate, drate_dT); -} - - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_S32_He4_to_Ar36_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ag = rate_eval.screened_rates(k_He4_S32_to_Ar36_removed); - amrex::Real r_ap = rate_eval.screened_rates(k_He4_S32_to_p_Cl35_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_Cl35_to_Ar36_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_Cl35_to_He4_S32_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ag + r_ap * r_pg * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ag = rate_eval.dscreened_rates_dT(k_He4_S32_to_Ar36_removed); - amrex::Real drdT_ap = rate_eval.dscreened_rates_dT(k_He4_S32_to_p_Cl35_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_removed); - drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ar36_to_S32_He4_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ga = rate_eval.screened_rates(k_Ar36_to_He4_S32_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_Cl35_to_He4_S32_removed); - amrex::Real r_gp = rate_eval.screened_rates(k_Ar36_to_p_Cl35_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_Cl35_to_Ar36_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ga + r_gp * r_pa * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ga = rate_eval.dscreened_rates_dT(k_Ar36_to_He4_S32_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_removed); - amrex::Real drdT_gp = rate_eval.dscreened_rates_dT(k_Ar36_to_p_Cl35_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_removed); - drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ar36_He4_to_Ca40_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ag = rate_eval.screened_rates(k_He4_Ar36_to_Ca40_removed); - amrex::Real r_ap = rate_eval.screened_rates(k_He4_Ar36_to_p_K39_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_K39_to_Ca40_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_K39_to_He4_Ar36_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ag + r_ap * r_pg * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ag = rate_eval.dscreened_rates_dT(k_He4_Ar36_to_Ca40_removed); - amrex::Real drdT_ap = rate_eval.dscreened_rates_dT(k_He4_Ar36_to_p_K39_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_removed); - drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ca40_to_Ar36_He4_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ga = rate_eval.screened_rates(k_Ca40_to_He4_Ar36_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_K39_to_He4_Ar36_removed); - amrex::Real r_gp = rate_eval.screened_rates(k_Ca40_to_p_K39_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_K39_to_Ca40_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ga + r_gp * r_pa * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ga = rate_eval.dscreened_rates_dT(k_Ca40_to_He4_Ar36_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_removed); - amrex::Real drdT_gp = rate_eval.dscreened_rates_dT(k_Ca40_to_p_K39_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_removed); - drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ca40_He4_to_Ti44_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ag = rate_eval.screened_rates(k_He4_Ca40_to_Ti44_removed); - amrex::Real r_ap = rate_eval.screened_rates(k_He4_Ca40_to_p_Sc43_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_Sc43_to_Ti44_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ag + r_ap * r_pg * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ag = rate_eval.dscreened_rates_dT(k_He4_Ca40_to_Ti44_removed); - amrex::Real drdT_ap = rate_eval.dscreened_rates_dT(k_He4_Ca40_to_p_Sc43_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_removed); - drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ti44_to_Ca40_He4_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ga = rate_eval.screened_rates(k_Ti44_to_He4_Ca40_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_removed); - amrex::Real r_gp = rate_eval.screened_rates(k_Ti44_to_p_Sc43_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_Sc43_to_Ti44_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ga + r_gp * r_pa * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ga = rate_eval.dscreened_rates_dT(k_Ti44_to_He4_Ca40_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_removed); - amrex::Real drdT_gp = rate_eval.dscreened_rates_dT(k_Ti44_to_p_Sc43_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_removed); - drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ti44_He4_to_Cr48_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ag = rate_eval.screened_rates(k_He4_Ti44_to_Cr48_removed); - amrex::Real r_ap = rate_eval.screened_rates(k_He4_Ti44_to_p_V47_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_V47_to_Cr48_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_V47_to_He4_Ti44_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ag + r_ap * r_pg * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ag = rate_eval.dscreened_rates_dT(k_He4_Ti44_to_Cr48_removed); - amrex::Real drdT_ap = rate_eval.dscreened_rates_dT(k_He4_Ti44_to_p_V47_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_removed); - drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Cr48_to_Ti44_He4_approx(const T& rate_eval, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real r_ga = rate_eval.screened_rates(k_Cr48_to_He4_Ti44_removed); - amrex::Real r_pa = rate_eval.screened_rates(k_p_V47_to_He4_Ti44_removed); - amrex::Real r_gp = rate_eval.screened_rates(k_Cr48_to_p_V47_removed); - amrex::Real r_pg = rate_eval.screened_rates(k_p_V47_to_Cr48_removed); - amrex::Real dd = 1.0_rt / (r_pg + r_pa); - rate = r_ga + r_gp * r_pa * dd; - if constexpr (std::is_same_v) { - amrex::Real drdT_ga = rate_eval.dscreened_rates_dT(k_Cr48_to_He4_Ti44_removed); - amrex::Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_V47_to_He4_Ti44_removed); - amrex::Real drdT_gp = rate_eval.dscreened_rates_dT(k_Cr48_to_p_V47_removed); - amrex::Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_removed); - drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe52_n_n_to_Fe54_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_ng = rate_eval.screened_rates(k_n_Fe52_to_Fe53_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Fe53_to_Fe54_removed); - amrex::Real r1_gn = rate_eval.screened_rates(k_Fe53_to_n_Fe52_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_ng * r2_ng * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe52_to_Fe53_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe53_to_Fe54_removed); - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Fe53_to_n_Fe52_removed); - drate_dT = dr1dT_ng * r2_ng * dd + r1_ng * dr2dT_ng * dd - r1_ng * r2_ng * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe54_to_Fe52_n_n_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_gn = rate_eval.screened_rates(k_Fe53_to_n_Fe52_removed); - amrex::Real r2_gn = rate_eval.screened_rates(k_Fe54_to_n_Fe53_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Fe53_to_Fe54_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_gn * r2_gn * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Fe53_to_n_Fe52_removed); - amrex::Real dr2dT_gn = rate_eval.dscreened_rates_dT(k_Fe54_to_n_Fe53_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe53_to_Fe54_removed); - drate_dT = dr1dT_gn * r2_gn * dd + r1_gn * dr2dT_gn * dd - r1_gn * r2_gn * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe54_n_n_to_Fe56_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_ng = rate_eval.screened_rates(k_n_Fe54_to_Fe55_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Fe55_to_Fe56_removed); - amrex::Real r1_gn = rate_eval.screened_rates(k_Fe55_to_n_Fe54_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_ng * r2_ng * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe54_to_Fe55_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe55_to_Fe56_removed); - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Fe55_to_n_Fe54_removed); - drate_dT = dr1dT_ng * r2_ng * dd + r1_ng * dr2dT_ng * dd - r1_ng * r2_ng * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Fe56_to_Fe54_n_n_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_gn = rate_eval.screened_rates(k_Fe55_to_n_Fe54_removed); - amrex::Real r2_gn = rate_eval.screened_rates(k_Fe56_to_n_Fe55_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Fe55_to_Fe56_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_gn * r2_gn * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Fe55_to_n_Fe54_removed); - amrex::Real dr2dT_gn = rate_eval.dscreened_rates_dT(k_Fe56_to_n_Fe55_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Fe55_to_Fe56_removed); - drate_dT = dr1dT_gn * r2_gn * dd + r1_gn * dr2dT_gn * dd - r1_gn * r2_gn * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni56_n_n_to_Ni58_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_ng = rate_eval.screened_rates(k_n_Ni56_to_Ni57_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Ni57_to_Ni58_removed); - amrex::Real r1_gn = rate_eval.screened_rates(k_Ni57_to_n_Ni56_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_ng * r2_ng * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_ng = rate_eval.dscreened_rates_dT(k_n_Ni56_to_Ni57_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Ni57_to_Ni58_removed); - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Ni57_to_n_Ni56_removed); - drate_dT = dr1dT_ng * r2_ng * dd + r1_ng * dr2dT_ng * dd - r1_ng * r2_ng * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - -template -AMREX_GPU_HOST_DEVICE AMREX_INLINE -void rate_Ni58_to_Ni56_n_n_approx(const T& rate_eval, const amrex::Real rho, const amrex::Array1D& Y, amrex::Real& rate, amrex::Real& drate_dT) { - - amrex::Real Yn = Y(N); - amrex::Real r1_gn = rate_eval.screened_rates(k_Ni57_to_n_Ni56_removed); - amrex::Real r2_gn = rate_eval.screened_rates(k_Ni58_to_n_Ni57_removed); - amrex::Real r2_ng = rate_eval.screened_rates(k_n_Ni57_to_Ni58_removed); - amrex::Real dd = 1.0_rt / (rho * Yn * r2_ng + r1_gn); - rate = r1_gn * r2_gn * dd; - if constexpr (std::is_same_v) { - amrex::Real dr1dT_gn = rate_eval.dscreened_rates_dT(k_Ni57_to_n_Ni56_removed); - amrex::Real dr2dT_gn = rate_eval.dscreened_rates_dT(k_Ni58_to_n_Ni57_removed); - amrex::Real dr2dT_ng = rate_eval.dscreened_rates_dT(k_n_Ni57_to_Ni58_removed); - drate_dT = dr1dT_gn * r2_gn * dd + r1_gn * dr2dT_gn * dd - r1_gn * r2_gn * dd * dd * (rho * Yn * dr2dT_ng + dr1dT_gn); - } -} - template AMREX_GPU_HOST_DEVICE AMREX_INLINE void -fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) +fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, + [[maybe_unused]] T& rate_eval) { - amrex::Real rate; - amrex::Real drate_dT; - - rate_p_C12_to_N13_reaclib(tfactors, 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; - - } - rate_He4_C12_to_O16_reaclib(tfactors, 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; - - } - rate_He4_O16_to_Ne20_reaclib(tfactors, 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_He4_Ne20_to_Mg24_reaclib(tfactors, 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_p_Na23_to_Mg24_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Na23_to_Mg24_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Na23_to_Mg24_reaclib) = drate_dT; - - } - rate_He4_Mg24_to_Si28_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Mg24_to_Si28_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Mg24_to_Si28_reaclib) = drate_dT; - - } - rate_p_Al27_to_Si28_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Al27_to_Si28_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Al27_to_Si28_reaclib) = drate_dT; - - } - rate_He4_Si28_to_S32_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Si28_to_S32_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Si28_to_S32_reaclib) = drate_dT; - - } - rate_p_P31_to_S32_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_P31_to_S32_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_P31_to_S32_reaclib) = drate_dT; - - } - rate_He4_Cr48_to_Fe52_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Cr48_to_Fe52_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Cr48_to_Fe52_reaclib) = drate_dT; - - } - rate_p_Mn51_to_Fe52_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Mn51_to_Fe52_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Mn51_to_Fe52_reaclib) = drate_dT; - - } - rate_He4_Mn51_to_Co55_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Mn51_to_Co55_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Mn51_to_Co55_reaclib) = drate_dT; - - } - rate_He4_Fe52_to_Ni56_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Fe52_to_Ni56_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Fe52_to_Ni56_reaclib) = drate_dT; - - } - rate_p_Co55_to_Ni56_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Co55_to_Ni56_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Co55_to_Ni56_reaclib) = drate_dT; - - } - rate_C12_C12_to_p_Na23_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_C12_to_p_Na23_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_C12_to_p_Na23_reaclib) = drate_dT; - - } - rate_C12_C12_to_He4_Ne20_reaclib(tfactors, 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_He4_N13_to_p_O16_reaclib(tfactors, 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_C12_O16_to_p_Al27_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_O16_to_p_Al27_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_O16_to_p_Al27_reaclib) = drate_dT; - - } - rate_C12_O16_to_He4_Mg24_reaclib(tfactors, 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_O16_O16_to_p_P31_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_O16_O16_to_p_P31_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O16_O16_to_p_P31_reaclib) = drate_dT; - - } - rate_O16_O16_to_He4_Si28_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_O16_O16_to_He4_Si28_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O16_O16_to_He4_Si28_reaclib) = drate_dT; - - } - rate_p_Na23_to_He4_Ne20_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Na23_to_He4_Ne20_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Na23_to_He4_Ne20_reaclib) = drate_dT; - - } - rate_p_Al27_to_He4_Mg24_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Al27_to_He4_Mg24_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Al27_to_He4_Mg24_reaclib) = drate_dT; - - } - rate_p_P31_to_He4_Si28_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_P31_to_He4_Si28_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_P31_to_He4_Si28_reaclib) = drate_dT; - - } - rate_He4_Cr48_to_p_Mn51_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Cr48_to_p_Mn51_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Cr48_to_p_Mn51_reaclib) = drate_dT; - - } - rate_He4_Fe52_to_p_Co55_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Fe52_to_p_Co55_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Fe52_to_p_Co55_reaclib) = drate_dT; - - } - rate_He4_He4_He4_to_C12_reaclib(tfactors, 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_C12_C12_to_n_Mg23_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_C12_to_n_Mg23_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_C12_to_n_Mg23_removed) = drate_dT; - - } - rate_O16_O16_to_n_S31_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_O16_O16_to_n_S31_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O16_O16_to_n_S31_removed) = drate_dT; - - } - rate_C12_O16_to_n_Si27_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_O16_to_n_Si27_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_O16_to_n_Si27_removed) = drate_dT; - - } - rate_p_Fe54_to_Co55_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Fe54_to_Co55_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Fe54_to_Co55_reaclib) = drate_dT; - - } - rate_He4_Fe54_to_Ni58_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Fe54_to_Ni58_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Fe54_to_Ni58_reaclib) = drate_dT; - - } - rate_p_Fe56_to_Co57_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Fe56_to_Co57_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Fe56_to_Co57_reaclib) = drate_dT; - - } - rate_n_Co55_to_Co56_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Co55_to_Co56_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Co55_to_Co56_reaclib) = drate_dT; - - } - rate_n_Co56_to_Co57_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Co56_to_Co57_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Co56_to_Co57_reaclib) = drate_dT; - - } - rate_p_Co57_to_Ni58_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Co57_to_Ni58_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Co57_to_Ni58_reaclib) = drate_dT; - - } - rate_He4_Mn51_to_p_Fe54_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Mn51_to_p_Fe54_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Mn51_to_p_Fe54_reaclib) = drate_dT; - - } - rate_He4_Co55_to_p_Ni58_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Co55_to_p_Ni58_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Co55_to_p_Ni58_reaclib) = drate_dT; - - } - rate_n_Co56_to_p_Fe56_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Co56_to_p_Fe56_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Co56_to_p_Fe56_reaclib) = drate_dT; - - } - rate_p_Co57_to_He4_Fe54_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Co57_to_He4_Fe54_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Co57_to_He4_Fe54_reaclib) = drate_dT; - - } - rate_n_Ni56_to_p_Co56_reaclib(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Ni56_to_p_Co56_reaclib) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Ni56_to_p_Co56_reaclib) = drate_dT; - - } - rate_He4_S32_to_Ar36_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_S32_to_Ar36_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_S32_to_Ar36_removed) = drate_dT; - - } - rate_p_Cl35_to_Ar36_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Cl35_to_Ar36_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_removed) = drate_dT; - - } - rate_p_Cl35_to_He4_S32_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Cl35_to_He4_S32_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_removed) = drate_dT; - - } - rate_He4_Ar36_to_Ca40_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ar36_to_Ca40_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ar36_to_Ca40_removed) = drate_dT; - - } - rate_p_K39_to_Ca40_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_K39_to_Ca40_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_removed) = drate_dT; - - } - rate_p_K39_to_He4_Ar36_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_K39_to_He4_Ar36_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_removed) = drate_dT; - - } - rate_He4_Ca40_to_Ti44_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ca40_to_Ti44_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ca40_to_Ti44_removed) = drate_dT; - - } - rate_p_Sc43_to_Ti44_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Sc43_to_Ti44_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_removed) = drate_dT; - - } - rate_p_Sc43_to_He4_Ca40_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_removed) = drate_dT; - - } - rate_He4_Ti44_to_Cr48_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ti44_to_Cr48_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ti44_to_Cr48_removed) = drate_dT; - - } - rate_He4_Ti44_to_p_V47_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_He4_Ti44_to_p_V47_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_He4_Ti44_to_p_V47_removed) = drate_dT; - - } - rate_p_V47_to_Cr48_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_p_V47_to_Cr48_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_removed) = drate_dT; - - } - rate_n_Fe52_to_Fe53_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Fe52_to_Fe53_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Fe52_to_Fe53_removed) = drate_dT; - - } - rate_n_Fe53_to_Fe54_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Fe53_to_Fe54_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Fe53_to_Fe54_removed) = drate_dT; - - } - rate_n_Fe54_to_Fe55_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Fe54_to_Fe55_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Fe54_to_Fe55_removed) = drate_dT; - - } - rate_n_Fe55_to_Fe56_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Fe55_to_Fe56_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Fe55_to_Fe56_removed) = drate_dT; - - } - rate_n_Ni56_to_Ni57_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Ni56_to_Ni57_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Ni56_to_Ni57_removed) = drate_dT; - - } - rate_n_Ni57_to_Ni58_removed(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_n_Ni57_to_Ni58_removed) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_n_Ni57_to_Ni58_removed) = drate_dT; - - } - rate_C12_C12_to_Mg24_modified(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_C12_to_Mg24_modified) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_C12_to_Mg24_modified) = drate_dT; - - } - rate_O16_O16_to_S32_modified(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_O16_O16_to_S32_modified) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_O16_O16_to_S32_modified) = drate_dT; - - } - rate_C12_O16_to_Si28_modified(tfactors, rate, drate_dT); - rate_eval.screened_rates(k_C12_O16_to_Si28_modified) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_C12_O16_to_Si28_modified) = drate_dT; - - } - -} - -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{}; - - rate_S32_He4_to_Ar36_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_S32_He4_to_Ar36_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_S32_He4_to_Ar36_approx) = drate_dT; - - } - rate_Ar36_to_S32_He4_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ar36_to_S32_He4_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ar36_to_S32_He4_approx) = drate_dT; - - } - rate_Ar36_He4_to_Ca40_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ar36_He4_to_Ca40_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ar36_He4_to_Ca40_approx) = drate_dT; - - } - rate_Ca40_to_Ar36_He4_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ca40_to_Ar36_He4_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ca40_to_Ar36_He4_approx) = drate_dT; - - } - rate_Ca40_He4_to_Ti44_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ca40_He4_to_Ti44_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ca40_He4_to_Ti44_approx) = drate_dT; - - } - rate_Ti44_to_Ca40_He4_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ti44_to_Ca40_He4_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ti44_to_Ca40_He4_approx) = drate_dT; - - } - rate_Ti44_He4_to_Cr48_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Ti44_He4_to_Cr48_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ti44_He4_to_Cr48_approx) = drate_dT; - - } - rate_Cr48_to_Ti44_He4_approx(rate_eval, rate, drate_dT); - rate_eval.screened_rates(k_Cr48_to_Ti44_He4_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Cr48_to_Ti44_He4_approx) = drate_dT; - - } - rate_Fe52_n_n_to_Fe54_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Fe52_n_n_to_Fe54_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe52_n_n_to_Fe54_approx) = drate_dT; - - } - rate_Fe54_to_Fe52_n_n_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Fe54_to_Fe52_n_n_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe54_to_Fe52_n_n_approx) = drate_dT; - - } - rate_Fe54_n_n_to_Fe56_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Fe54_n_n_to_Fe56_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe54_n_n_to_Fe56_approx) = drate_dT; - - } - rate_Fe56_to_Fe54_n_n_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Fe56_to_Fe54_n_n_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Fe56_to_Fe54_n_n_approx) = drate_dT; - - } - rate_Ni56_n_n_to_Ni58_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Ni56_n_n_to_Ni58_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni56_n_n_to_Ni58_approx) = drate_dT; - + [[maybe_unused]] amrex::Real rate; + [[maybe_unused]] 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); + } +#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; + } + } + + { + 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_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; + } + } + + { + 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); + } +#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; + } + } + + { + 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); + } +#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; + } + } + + { + 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_Na23); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Na23); + } +#endif + rate_p_Na23_to_Mg24_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Na23_to_Mg24_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Na23_to_Mg24_reaclib) = 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_Mg24); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mg24); + } +#endif + rate_He4_Mg24_to_Si28_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Mg24_to_Si28_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Mg24_to_Si28_reaclib) = 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_Al27); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Al27); + } +#endif + rate_p_Al27_to_Si28_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Al27_to_Si28_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Al27_to_Si28_reaclib) = 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_Si28); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Si28); + } +#endif + rate_He4_Si28_to_S32_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Si28_to_S32_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Si28_to_S32_reaclib) = 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_P31); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_P31); + } +#endif + rate_p_P31_to_S32_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_P31_to_S32_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_P31_to_S32_reaclib) = 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_Cr48); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Cr48); + } +#endif + rate_He4_Cr48_to_Fe52_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Cr48_to_Fe52_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Cr48_to_Fe52_reaclib) = 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_Mn51); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Mn51); + } +#endif + rate_p_Mn51_to_Fe52_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Mn51_to_Fe52_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Mn51_to_Fe52_reaclib) = 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_Mn51); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mn51); + } +#endif + rate_He4_Mn51_to_Co55_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Mn51_to_Co55_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Mn51_to_Co55_reaclib) = 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_Fe52); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Fe52); + } +#endif + rate_He4_Fe52_to_Ni56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Fe52_to_Ni56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Fe52_to_Ni56_reaclib) = 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_Co55); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Co55); + } +#endif + rate_p_Co55_to_Ni56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Co55_to_Ni56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Co55_to_Ni56_reaclib) = 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_Co55); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Co55); + } +#endif + rate_He4_Co55_to_Cu59_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Co55_to_Cu59_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Co55_to_Cu59_reaclib) = 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_Ni56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ni56); + } +#endif + rate_He4_Ni56_to_Zn60_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Ni56_to_Zn60_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ni56_to_Zn60_reaclib) = 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_Cu59); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Cu59); + } +#endif + rate_p_Cu59_to_Zn60_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Cu59_to_Zn60_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Cu59_to_Zn60_reaclib) = 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_C12_C12); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_C12); + } +#endif + rate_C12_C12_to_p_Na23_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_C12_to_p_Na23_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_C12_to_p_Na23_reaclib) = 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_C12_C12); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_C12); + } +#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; + } + } + + { + 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; + } + } + + { + 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); + } +#endif + rate_C12_O16_to_p_Al27_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_O16_to_p_Al27_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_O16_to_p_Al27_reaclib) = 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_C12_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_O16); + } +#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; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_O16_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_O16_O16); + } +#endif + rate_O16_O16_to_p_P31_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O16_O16_to_p_P31_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_O16_to_p_P31_reaclib) = 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_O16_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_O16_O16); + } +#endif + rate_O16_O16_to_He4_Si28_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O16_O16_to_He4_Si28_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_O16_to_He4_Si28_reaclib) = 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_Na23); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Na23); + } +#endif + rate_p_Na23_to_He4_Ne20_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Na23_to_He4_Ne20_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Na23_to_He4_Ne20_reaclib) = 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_Al27); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Al27); + } +#endif + rate_p_Al27_to_He4_Mg24_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Al27_to_He4_Mg24_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Al27_to_He4_Mg24_reaclib) = 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_P31); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_P31); + } +#endif + rate_p_P31_to_He4_Si28_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_P31_to_He4_Si28_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_P31_to_He4_Si28_reaclib) = 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_Cr48); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Cr48); + } +#endif + rate_He4_Cr48_to_p_Mn51_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Cr48_to_p_Mn51_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Cr48_to_p_Mn51_reaclib) = 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_Fe52); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Fe52); + } +#endif + rate_He4_Fe52_to_p_Co55_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Fe52_to_p_Co55_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Fe52_to_p_Co55_reaclib) = 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_Cu59); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Cu59); + } +#endif + rate_p_Cu59_to_He4_Ni56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Cu59_to_He4_Ni56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Cu59_to_He4_Ni56_reaclib) = 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_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_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; + } + } + + { + 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); + } +#endif + rate_C12_C12_to_n_Mg23_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_C12_to_n_Mg23_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_C12_to_n_Mg23_reaclib) = 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_O16_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_O16_O16); + } +#endif + rate_O16_O16_to_n_S31_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_O16_O16_to_n_S31_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_O16_O16_to_n_S31_reaclib) = 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_C12_O16); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_C12_O16); + } +#endif + rate_C12_O16_to_n_Si27_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_C12_O16_to_n_Si27_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_C12_O16_to_n_Si27_reaclib) = 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_Fe54); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Fe54); + } +#endif + rate_p_Fe54_to_Co55_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Fe54_to_Co55_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Fe54_to_Co55_reaclib) = 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_Fe54); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Fe54); + } +#endif + rate_He4_Fe54_to_Ni58_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Fe54_to_Ni58_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Fe54_to_Ni58_reaclib) = 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_Fe56); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Fe56); + } +#endif + rate_p_Fe56_to_Co57_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Fe56_to_Co57_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Fe56_to_Co57_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Co55_to_Co56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Co55_to_Co56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Co55_to_Co56_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Co56_to_Co57_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Co56_to_Co57_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Co56_to_Co57_reaclib) = 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_Co57); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Co57); + } +#endif + rate_p_Co57_to_Ni58_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Co57_to_Ni58_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Co57_to_Ni58_reaclib) = 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_Ni58); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Ni58); + } +#endif + rate_p_Ni58_to_Cu59_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Ni58_to_Cu59_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Ni58_to_Cu59_reaclib) = 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_Mn51); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Mn51); + } +#endif + rate_He4_Mn51_to_p_Fe54_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Mn51_to_p_Fe54_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Mn51_to_p_Fe54_reaclib) = 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_Co55); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Co55); + } +#endif + rate_He4_Co55_to_p_Ni58_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Co55_to_p_Ni58_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Co55_to_p_Ni58_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Co56_to_p_Fe56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Co56_to_p_Fe56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Co56_to_p_Fe56_reaclib) = 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_Co57); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Co57); + } +#endif + rate_p_Co57_to_He4_Fe54_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Co57_to_He4_Fe54_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Co57_to_He4_Fe54_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Ni56_to_p_Co56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Ni56_to_p_Co56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Ni56_to_p_Co56_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Cu59_to_He4_Co56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Cu59_to_He4_Co56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Cu59_to_He4_Co56_reaclib) = 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_S32); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_S32); + } +#endif + rate_He4_S32_to_Ar36_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_S32_to_Ar36_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_S32_to_Ar36_reaclib) = 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_Cl35); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Cl35); + } +#endif + rate_p_Cl35_to_Ar36_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Cl35_to_Ar36_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Cl35_to_Ar36_reaclib) = 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_Cl35); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Cl35); + } +#endif + rate_p_Cl35_to_He4_S32_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Cl35_to_He4_S32_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Cl35_to_He4_S32_reaclib) = 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_Ar36); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ar36); + } +#endif + rate_He4_Ar36_to_Ca40_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Ar36_to_Ca40_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ar36_to_Ca40_reaclib) = 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_K39); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_K39); + } +#endif + rate_p_K39_to_Ca40_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_K39_to_Ca40_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_K39_to_Ca40_reaclib) = 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_K39); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_K39); + } +#endif + rate_p_K39_to_He4_Ar36_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_K39_to_He4_Ar36_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_K39_to_He4_Ar36_reaclib) = 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_Ca40); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ca40); + } +#endif + rate_He4_Ca40_to_Ti44_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Ca40_to_Ti44_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ca40_to_Ti44_reaclib) = 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_Sc43); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Sc43); + } +#endif + rate_p_Sc43_to_Ti44_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Sc43_to_Ti44_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Sc43_to_Ti44_reaclib) = 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_Sc43); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_Sc43); + } +#endif + rate_p_Sc43_to_He4_Ca40_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_Sc43_to_He4_Ca40_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_Sc43_to_He4_Ca40_reaclib) = 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_Ti44); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ti44); + } +#endif + rate_He4_Ti44_to_Cr48_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Ti44_to_Cr48_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ti44_to_Cr48_reaclib) = 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_Ti44); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_He4_Ti44); + } +#endif + rate_He4_Ti44_to_p_V47_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_He4_Ti44_to_p_V47_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_He4_Ti44_to_p_V47_reaclib) = 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_V47); + if constexpr (std::is_same_v) { + dlog_scor_dT = rate_eval.dlog_screen_dT(k_p_V47); + } +#endif + rate_p_V47_to_Cr48_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_p_V47_to_Cr48_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_p_V47_to_Cr48_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Fe52_to_Fe53_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Fe52_to_Fe53_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Fe52_to_Fe53_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Fe53_to_Fe54_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Fe53_to_Fe54_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Fe53_to_Fe54_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Fe54_to_Fe55_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Fe54_to_Fe55_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Fe54_to_Fe55_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Fe55_to_Fe56_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Fe55_to_Fe56_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Fe55_to_Fe56_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Ni56_to_Ni57_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Ni56_to_Ni57_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Ni56_to_Ni57_reaclib) = drate_dT; + } + } + + { + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; + rate_n_Ni57_to_Ni58_reaclib(tfactors, log_scor, dlog_scor_dT, rate, drate_dT); + rate_eval.screened_rates(k_n_Ni57_to_Ni58_reaclib) = rate; + if constexpr (std::is_same_v) { + rate_eval.dscreened_rates_dT(k_n_Ni57_to_Ni58_reaclib) = drate_dT; + } } - rate_Ni58_to_Ni56_n_n_approx(rate_eval, rho, Y, rate, drate_dT); - rate_eval.screened_rates(k_Ni58_to_Ni56_n_n_approx) = rate; - if constexpr (std::is_same_v) { - rate_eval.dscreened_rates_dT(k_Ni58_to_Ni56_n_n_approx) = drate_dT; - } } diff --git a/networks/he-burn/ase-iron/temperature_table_rates.H b/networks/he-burn/ase-iron/temperature_table_rates.H index 4fdd0d89c..849033267 100644 --- a/networks/he-burn/ase-iron/temperature_table_rates.H +++ b/networks/he-burn/ase-iron/temperature_table_rates.H @@ -5,7 +5,7 @@ #include #include - +#include using namespace amrex::literals; @@ -28,6 +28,7 @@ namespace temp_tabular { [[maybe_unused]] amrex::Real drate_dT; + } From bfba08d8a51e91cc6c9e58376799d80b345bca79 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Sun, 10 May 2026 09:36:11 -0400 Subject: [PATCH 2/2] update ase-iron we now include Cu59 and Fe60 -- these seem to help with stiffness and Ni58 production --- Docs/source/networks.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Docs/source/networks.rst b/Docs/source/networks.rst index ac6ebc07d..cde8808dd 100644 --- a/Docs/source/networks.rst +++ b/Docs/source/networks.rst @@ -415,13 +415,14 @@ The full network appears as: As with ``ase``, this network is constructed to have reverse rates for all forward rates, allowing it to be used with the :ref:`self_consistent_nse` solver. It builds off of ``ase`` by including -more iron-group nuclei (using the same nuclei as ``he-burn-28amnp``). +more iron-group nuclei. The full network appears as: .. figure:: ../../networks/he-burn/ase-iron/ase-iron.png :align: center +Overall there are 28 nuclei with 7 approximated-out nuclei and 153 rates. ``cno_he_burn_33a`` -------------------