diff --git a/Docs/source/networks.rst b/Docs/source/networks.rst index 94d5f5b62..696b9cc11 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`` ------------------- diff --git a/networks/he-burn/ase-iron/actual_network.H b/networks/he-burn/ase-iron/actual_network.H index 575bf69ca..b6151ecc2 100644 --- a/networks/he-burn/ase-iron/actual_network.H +++ b/networks/he-burn/ase-iron/actual_network.H @@ -113,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. @@ -206,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. @@ -266,133 +278,145 @@ 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_reaclib = 28, - k_O16_O16_to_n_S31_reaclib = 29, - k_C12_O16_to_n_Si27_reaclib = 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_reaclib = 42, - k_p_Cl35_to_Ar36_reaclib = 43, - k_p_Cl35_to_He4_S32_reaclib = 44, - k_He4_Ar36_to_Ca40_reaclib = 45, - k_p_K39_to_Ca40_reaclib = 46, - k_p_K39_to_He4_Ar36_reaclib = 47, - k_He4_Ca40_to_Ti44_reaclib = 48, - k_p_Sc43_to_Ti44_reaclib = 49, - k_p_Sc43_to_He4_Ca40_reaclib = 50, - k_He4_Ti44_to_Cr48_reaclib = 51, - k_He4_Ti44_to_p_V47_reaclib = 52, - k_p_V47_to_Cr48_reaclib = 53, - k_n_Fe52_to_Fe53_reaclib = 54, - k_n_Fe53_to_Fe54_reaclib = 55, - k_n_Fe54_to_Fe55_reaclib = 56, - k_n_Fe55_to_Fe56_reaclib = 57, - k_n_Ni56_to_Ni57_reaclib = 58, - k_n_Ni57_to_Ni58_reaclib = 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_derived = 124, - k_Ar36_to_He4_S32_derived = 125, - k_Ar36_to_p_Cl35_derived = 126, - k_He4_Ar36_to_p_K39_derived = 127, - k_Ca40_to_He4_Ar36_derived = 128, - k_Ca40_to_p_K39_derived = 129, - k_He4_Ca40_to_p_Sc43_derived = 130, - k_Ti44_to_He4_Ca40_derived = 131, - k_Ti44_to_p_Sc43_derived = 132, - k_Cr48_to_He4_Ti44_derived = 133, - k_Cr48_to_p_V47_derived = 134, - k_p_V47_to_He4_Ti44_derived = 135, - k_Fe54_to_n_Fe53_derived = 136, - k_Fe53_to_n_Fe52_derived = 137, - k_Fe56_to_n_Fe55_derived = 138, - k_Fe55_to_n_Fe54_derived = 139, - k_Ni58_to_n_Ni57_derived = 140, - k_Ni57_to_n_Ni56_derived = 141, + 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 }; @@ -422,19 +446,22 @@ namespace Rates k_p_Co56 = 21, k_p_Fe54 = 22, k_He4_Fe52 = 23, - k_He4_S32 = 24, - k_He4_Mn51 = 25, - k_He4_Co55 = 26, - k_p_P31 = 27, - k_He4_He4 = 28, - k_p_Ni58 = 29, - k_p_O16 = 30, - k_He4_Si28 = 31, - k_He4_Fe54 = 32, - k_p_Cl35 = 33, - k_O16_O16 = 34, - k_He4_Be8 = 35, - k_He4_N13 = 36, + 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 }; @@ -458,133 +485,145 @@ 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_reaclib", // 28, - "O16_O16_to_n_S31_reaclib", // 29, - "C12_O16_to_n_Si27_reaclib", // 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_reaclib", // 42, - "p_Cl35_to_Ar36_reaclib", // 43, - "p_Cl35_to_He4_S32_reaclib", // 44, - "He4_Ar36_to_Ca40_reaclib", // 45, - "p_K39_to_Ca40_reaclib", // 46, - "p_K39_to_He4_Ar36_reaclib", // 47, - "He4_Ca40_to_Ti44_reaclib", // 48, - "p_Sc43_to_Ti44_reaclib", // 49, - "p_Sc43_to_He4_Ca40_reaclib", // 50, - "He4_Ti44_to_Cr48_reaclib", // 51, - "He4_Ti44_to_p_V47_reaclib", // 52, - "p_V47_to_Cr48_reaclib", // 53, - "n_Fe52_to_Fe53_reaclib", // 54, - "n_Fe53_to_Fe54_reaclib", // 55, - "n_Fe54_to_Fe55_reaclib", // 56, - "n_Fe55_to_Fe56_reaclib", // 57, - "n_Ni56_to_Ni57_reaclib", // 58, - "n_Ni57_to_Ni58_reaclib", // 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_derived", // 124, - "Ar36_to_He4_S32_derived", // 125, - "Ar36_to_p_Cl35_derived", // 126, - "He4_Ar36_to_p_K39_derived", // 127, - "Ca40_to_He4_Ar36_derived", // 128, - "Ca40_to_p_K39_derived", // 129, - "He4_Ca40_to_p_Sc43_derived", // 130, - "Ti44_to_He4_Ca40_derived", // 131, - "Ti44_to_p_Sc43_derived", // 132, - "Cr48_to_He4_Ti44_derived", // 133, - "Cr48_to_p_V47_derived", // 134, - "p_V47_to_He4_Ti44_derived", // 135, - "Fe54_to_n_Fe53_derived", // 136, - "Fe53_to_n_Fe52_derived", // 137, - "Fe56_to_n_Fe55_derived", // 138, - "Fe55_to_n_Fe54_derived", // 139, - "Ni58_to_n_Ni57_derived", // 140, - "Ni57_to_n_Ni56_derived" // 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 @@ -614,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, @@ -631,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, @@ -644,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 9a5536d05..28e5bd857 100644 --- a/networks/he-burn/ase-iron/actual_rhs.H +++ b/networks/he-burn/ase-iron/actual_rhs.H @@ -302,6 +302,16 @@ void evaluate_screening(const burn_t& state, } } + { + 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_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(2.0_rt, 4.0_rt, 16.0_rt, 32.0_rt); static_assert(scn_fac.z1 == 2.0_rt); @@ -332,6 +342,16 @@ void evaluate_screening(const burn_t& state, } } + { + 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, 15.0_rt, 31.0_rt); static_assert(scn_fac.z1 == 1.0_rt); @@ -372,6 +392,16 @@ void evaluate_screening(const burn_t& state, } } + { + 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_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; + } + } + { 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); @@ -678,6 +708,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 @@ -696,6 +730,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)) + @@ -708,6 +743,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) + @@ -717,9 +753,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) + @@ -736,6 +774,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) + @@ -745,11 +785,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)) + @@ -871,6 +913,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)) + @@ -881,6 +924,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)); @@ -893,6 +937,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)); @@ -900,9 +946,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)); + } @@ -962,13 +1020,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); @@ -1012,7 +1071,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); @@ -1024,13 +1083,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; @@ -1093,18 +1157,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_Zn60_to_p_Cu59_derived); + jac.set(H1, Zn60, 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_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; @@ -1160,20 +1231,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; @@ -1236,6 +1314,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; @@ -1293,6 +1375,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; @@ -1356,6 +1442,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; @@ -1415,6 +1505,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; @@ -1473,6 +1567,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; @@ -1534,6 +1632,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; @@ -1593,6 +1695,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; @@ -1654,6 +1760,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; @@ -1712,6 +1822,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; @@ -1771,6 +1885,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); @@ -1827,6 +1945,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); @@ -1883,6 +2005,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); @@ -1939,6 +2065,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; @@ -1997,6 +2127,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; @@ -2056,6 +2190,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); @@ -2117,6 +2255,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); @@ -2179,6 +2321,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); @@ -2237,13 +2383,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); @@ -2285,7 +2435,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); @@ -2299,13 +2449,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); @@ -2347,7 +2503,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); @@ -2358,6 +2514,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); @@ -2418,13 +2579,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); @@ -2472,16 +2637,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; @@ -2535,9 +2706,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 9377bd040..87a853fd6 100644 Binary files a/networks/he-burn/ase-iron/ase-iron.png and b/networks/he-burn/ase-iron/ase-iron.png differ 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 d00e7f7d5..29189db5f 100644 --- a/networks/he-burn/ase-iron/derived_rates.H +++ b/networks/he-burn/ase-iron/derived_rates.H @@ -1092,6 +1092,177 @@ void rate_Ni56_to_He4_Fe52_derived(const tf_t& tfactors, const amrex::Real log_s } +template +AMREX_GPU_DEVICE AMREX_INLINE +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_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_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_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) { @@ -2048,6 +2219,69 @@ void rate_p_Co55_to_He4_Fe52_derived(const tf_t& tfactors, const amrex::Real log } +template +AMREX_GPU_DEVICE AMREX_INLINE +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_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) { @@ -2550,6 +2784,63 @@ void rate_Ni58_to_He4_Fe54_derived(const tf_t& tfactors, const amrex::Real log_s } +template +AMREX_GPU_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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_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) { @@ -2802,6 +3093,69 @@ void rate_p_Co56_to_n_Ni56_derived(const tf_t& tfactors, const amrex::Real log_s } +template +AMREX_GPU_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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (std::is_same_v) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9_rt; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_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) { @@ -4327,6 +4681,42 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) } } + { + // Cu59_to_He4_Co55_derived + + 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; + } + } + + { + // Zn60_to_p_Cu59_derived + + 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; + } + } + + { + // Zn60_to_He4_Ni56_derived + + 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; + } + } + { // C12_to_He4_He4_He4_derived @@ -4555,6 +4945,24 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) } } + { + // He4_Ni56_to_p_Cu59_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_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; + } + } + { // Mg24_to_C12_C12_derived @@ -4663,6 +5071,18 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) } } + { + // Cu59_to_p_Ni58_derived + + 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; + } + } + { // p_Fe54_to_He4_Mn51_derived @@ -4735,6 +5155,24 @@ fill_derived_rates(const tf_t& tfactors, T& rate_eval) } } + { + // He4_Co56_to_n_Cu59_derived + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_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; + } + } + { // p_Ni58_to_He4_Co55_derived diff --git a/networks/he-burn/ase-iron/partition_functions.H b/networks/he-burn/ase-iron/partition_functions.H index f4ac1b3b6..9fd59d303 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_DEVICE 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.024785291222403763, + 9.999994999180668e-07, 0.0001259920626667995, 0.0017764212290928272, 0.008665347199341391, 0.02478529122240376, 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.003078257300827377, 0.007778667567807429, 0.01603376935914739, 0.02868269041229125, 0.06934041108806749, + 0.0030782573008273765, 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_DEVICE 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.00711562379553272, 0.036122649876509136, 0.09416770925148646, 0.17582214798729476, + 0.00026996355655966415, 0.007115623795532719, 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.0026504843609634825, 0.006510758935580232, 0.013783568660113304, 0.04542450669313041, + 0.0008776147834635239, 0.002650484360963482, 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.005180557708084945, 0.0108093677159202, 0.033929817942853414, + 0.0006687763192560828, 0.0021007917908672197, 0.0051805577080849445, 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.1384489068080837, 0.21212628348615897, 0.4130674701171434, + 0.04333627107625303, 0.08256291389970516, 0.13844890680808367, 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_DEVICE 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_DEVICE 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.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 4bb3aeb91..901673f6e 100644 --- a/networks/he-burn/ase-iron/reaclib_rates.H +++ b/networks/he-burn/ase-iron/reaclib_rates.H @@ -809,6 +809,114 @@ void rate_p_Co55_to_Ni56_reaclib(const tf_t& tfactors, const amrex::Real log_sco } +template +AMREX_GPU_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_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_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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_C12_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) { @@ -1367,6 +1475,42 @@ void rate_He4_Fe52_to_p_Co55_reaclib(const tf_t& tfactors, const amrex::Real log } +template +AMREX_GPU_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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_He4_He4_He4_to_C12_reaclib(const tf_t& tfactors, const amrex::Real log_scor, const amrex::Real dlog_scor_dT, amrex::Real& rate, amrex::Real& drate_dT) { @@ -1769,6 +1913,42 @@ void rate_p_Co57_to_Ni58_reaclib(const tf_t& tfactors, const amrex::Real log_sco } +template +AMREX_GPU_DEVICE AMREX_INLINE +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) { + + // Ni58 + p --> 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}; + + // 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) * -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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_He4_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) { @@ -1949,6 +2129,42 @@ void rate_n_Ni56_to_p_Co56_reaclib(const tf_t& tfactors, const amrex::Real log_s } +template +AMREX_GPU_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] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 * 1.0e-9; + } + +} + template AMREX_GPU_DEVICE AMREX_INLINE void rate_He4_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) { @@ -3091,6 +3307,60 @@ fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, } } + { + // He4_Co55_to_Cu59_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_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; + } + } + + { + // He4_Ni56_to_Zn60_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_He4_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; + } + } + + { + // p_Cu59_to_Zn60_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_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; + } + } + { // C12_C12_to_p_Na23_reaclib @@ -3307,6 +3577,24 @@ fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, } } + { + // p_Cu59_to_He4_Ni56_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_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; + } + } + { // He4_He4_He4_to_C12_reaclib @@ -3475,6 +3763,24 @@ fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, } } + { + // p_Ni58_to_Cu59_reaclib + + amrex::Real log_scor {0.0_rt}; + amrex::Real dlog_scor_dT {0.0_rt}; +#ifdef SCREENING + log_scor = rate_eval.log_screen(k_p_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; + } + } + { // He4_Mn51_to_p_Fe54_reaclib @@ -3553,6 +3859,18 @@ fill_reaclib_rates([[maybe_unused]] const tf_t& tfactors, } } + { + // n_Cu59_to_He4_Co56_reaclib + + 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; + } + } + { // He4_S32_to_Ar36_reaclib