From bf999d59657bb1b13db09b265a475b671e73c6b8 Mon Sep 17 00:00:00 2001 From: Michael Zingale Date: Fri, 13 Oct 2023 07:58:50 -0400 Subject: [PATCH 1/2] add new H-C-Fe-group network (#1322) this is based on subch_simple but adds a lot of Fe group --- .../55co-55fe_electroncapture.dat | 148 + .../He-C-Fe-group/55fe-55co_betadecay.dat | 148 + .../56co-56fe_electroncapture.dat | 148 + .../He-C-Fe-group/56co-56ni_betadecay.dat | 148 + .../He-C-Fe-group/56fe-56co_betadecay.dat | 148 + .../56ni-56co_electroncapture.dat | 148 + .../He-C-Fe-group/57co-57ni_betadecay.dat | 148 + .../57ni-57co_electroncapture.dat | 148 + networks/He-C-Fe-group/He-C-Fe-group.png | Bin 0 -> 134209 bytes networks/He-C-Fe-group/He-C-Fe-group.py | 140 + networks/He-C-Fe-group/Make.package | 14 + networks/He-C-Fe-group/README.md | 7 + networks/He-C-Fe-group/_parameters | 2 + networks/He-C-Fe-group/actual_network.H | 407 + .../He-C-Fe-group/actual_network_data.cpp | 245 + networks/He-C-Fe-group/actual_rhs.H | 2809 +++++ networks/He-C-Fe-group/inputs.burn_cell.VODE | 62 + networks/He-C-Fe-group/partition_functions.H | 1011 ++ networks/He-C-Fe-group/pynucastro.net | 40 + networks/He-C-Fe-group/reaclib_rates.H | 9303 +++++++++++++++++ networks/He-C-Fe-group/table_rates.H | 440 + networks/He-C-Fe-group/table_rates_data.cpp | 153 + networks/He-C-Fe-group/tfactors.H | 34 + 23 files changed, 15851 insertions(+) create mode 100644 networks/He-C-Fe-group/55co-55fe_electroncapture.dat create mode 100644 networks/He-C-Fe-group/55fe-55co_betadecay.dat create mode 100644 networks/He-C-Fe-group/56co-56fe_electroncapture.dat create mode 100644 networks/He-C-Fe-group/56co-56ni_betadecay.dat create mode 100644 networks/He-C-Fe-group/56fe-56co_betadecay.dat create mode 100644 networks/He-C-Fe-group/56ni-56co_electroncapture.dat create mode 100644 networks/He-C-Fe-group/57co-57ni_betadecay.dat create mode 100644 networks/He-C-Fe-group/57ni-57co_electroncapture.dat create mode 100644 networks/He-C-Fe-group/He-C-Fe-group.png create mode 100644 networks/He-C-Fe-group/He-C-Fe-group.py create mode 100644 networks/He-C-Fe-group/Make.package create mode 100644 networks/He-C-Fe-group/README.md create mode 100644 networks/He-C-Fe-group/_parameters create mode 100644 networks/He-C-Fe-group/actual_network.H create mode 100644 networks/He-C-Fe-group/actual_network_data.cpp create mode 100644 networks/He-C-Fe-group/actual_rhs.H create mode 100644 networks/He-C-Fe-group/inputs.burn_cell.VODE create mode 100644 networks/He-C-Fe-group/partition_functions.H create mode 100644 networks/He-C-Fe-group/pynucastro.net create mode 100644 networks/He-C-Fe-group/reaclib_rates.H create mode 100644 networks/He-C-Fe-group/table_rates.H create mode 100644 networks/He-C-Fe-group/table_rates_data.cpp create mode 100644 networks/He-C-Fe-group/tfactors.H diff --git a/networks/He-C-Fe-group/55co-55fe_electroncapture.dat b/networks/He-C-Fe-group/55co-55fe_electroncapture.dat new file mode 100644 index 0000000000..3d05c44ab4 --- /dev/null +++ b/networks/He-C-Fe-group/55co-55fe_electroncapture.dat @@ -0,0 +1,148 @@ +!55co -> 55fe, e- capture +!Q=-2.9403 MeV +! +!Log(rhoY) Log(temp) mu dQ Vs Log(e-cap-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -8.471000 -1.103229e+01 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -8.964000 -1.103229e+01 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -9.106000 -1.103229e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -9.235000 -1.103229e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -8.679000 -1.103229e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -7.399000 -1.102629e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -6.240000 -1.094929e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -5.556000 -1.070929e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -4.648000 -9.893290e+00 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -3.243000 -8.401290e+00 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -1.052000 -6.117290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 4.619000 4.487104e-01 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -7.492000 -1.102829e+01 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -7.965000 -1.103129e+01 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -8.106000 -1.103129e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -8.235000 -1.103229e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -8.266000 -1.103229e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -7.377000 -1.102629e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -6.239000 -1.094929e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -5.556000 -1.070929e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -4.648000 -9.893290e+00 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -3.243000 -8.401290e+00 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -1.052000 -6.117290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 4.619000 4.487104e-01 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -6.622000 -1.099829e+01 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -6.971000 -1.101729e+01 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -7.108000 -1.102129e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -7.235000 -1.102429e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -7.319000 -1.102529e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -7.172000 -1.102229e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -6.224000 -1.094629e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -5.553000 -1.070729e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -4.647000 -9.893290e+00 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -3.243000 -8.401290e+00 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -1.052000 -6.117290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 4.619000 4.487104e-01 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -5.913000 -1.087929e+01 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -6.024000 -1.090929e+01 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -6.128000 -1.093229e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -6.241000 -1.095329e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -6.321000 -1.096429e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -6.354000 -1.096829e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -6.084000 -1.091729e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -5.521000 -1.069129e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -4.642000 -9.889290e+00 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -3.242000 -8.400290e+00 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -1.052000 -6.117290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 4.619000 4.487104e-01 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -5.211000 -1.053529e+01 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -5.218000 -1.053929e+01 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -5.239000 -1.055329e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -5.287000 -1.058229e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -5.337000 -1.061129e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -5.364000 -1.062329e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -5.366000 -1.061729e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -5.239000 -1.052129e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -4.590000 -9.855290e+00 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -3.234000 -8.395290e+00 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -1.051000 -6.116290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 4.619000 4.487104e-01 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -4.399000 -9.845290e+00 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -4.399000 -9.845290e+00 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -4.398000 -9.844290e+00 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -4.398000 -9.843290e+00 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -4.397000 -9.839290e+00 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -4.394000 -9.831290e+00 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -4.380000 -9.810290e+00 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -4.348000 -9.770290e+00 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -4.166000 -9.530290e+00 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -3.152000 -8.343290e+00 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -1.042000 -6.109290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 1.851000 -2.843290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 4.620000 4.487104e-01 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -3.354000 -8.788290e+00 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -3.354000 -8.788290e+00 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -3.353000 -8.787290e+00 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -3.351000 -8.785290e+00 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -3.345000 -8.778290e+00 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -3.335000 -8.766290e+00 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -3.309000 -8.739290e+00 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -3.268000 -8.699290e+00 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -3.126000 -8.557290e+00 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -2.564000 -7.886290e+00 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -0.955000 -6.031290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 1.854000 -2.840290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 4.620000 4.487104e-01 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -1.817000 -7.283290e+00 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -1.816000 -7.283290e+00 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -1.816000 -7.282290e+00 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -1.814000 -7.280290e+00 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -1.807000 -7.274290e+00 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -1.797000 -7.264290e+00 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -1.770000 -7.240290e+00 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -1.729000 -7.204290e+00 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -1.603000 -7.086290e+00 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -1.223000 -6.632290e+00 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -0.324000 -5.441290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 1.885000 -2.809290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 4.620000 4.497104e-01 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 0.654000 -4.759290e+00 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 0.654000 -4.759290e+00 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 0.654000 -4.759290e+00 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 0.655000 -4.758290e+00 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 0.657000 -4.755290e+00 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 0.660000 -4.750290e+00 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 0.667000 -4.738290e+00 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 0.677000 -4.722290e+00 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 0.705000 -4.677290e+00 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 0.789000 -4.538290e+00 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 1.094000 -4.025290e+00 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 2.174000 -2.519290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 4.629000 4.587104e-01 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 2.827000 -2.139290e+00 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 2.827000 -2.139290e+00 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 2.827000 -2.139290e+00 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 2.827000 -2.139290e+00 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 2.828000 -2.138290e+00 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 2.828000 -2.138290e+00 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 2.829000 -2.136290e+00 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 2.830000 -2.134290e+00 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 2.833000 -2.128290e+00 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 2.844000 -2.107290e+00 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 2.898000 -2.007290e+00 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 3.270000 -1.386290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 4.711000 5.417104e-01 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 4.688000 1.267104e-01 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 4.688000 1.267104e-01 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 4.688000 1.267104e-01 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 4.688000 1.267104e-01 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 4.689000 1.267104e-01 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 4.689000 1.267104e-01 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 4.689000 1.277104e-01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 4.689000 1.277104e-01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 4.689000 1.287104e-01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 4.691000 1.317104e-01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 4.702000 1.507104e-01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 4.800000 3.217104e-01 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 5.317000 1.161710e+00 -100.00 diff --git a/networks/He-C-Fe-group/55fe-55co_betadecay.dat b/networks/He-C-Fe-group/55fe-55co_betadecay.dat new file mode 100644 index 0000000000..6b66518a29 --- /dev/null +++ b/networks/He-C-Fe-group/55fe-55co_betadecay.dat @@ -0,0 +1,148 @@ +!55fe -> 55co, beta-decay +!Q=2.9403 MeV +! +!Log(rhoY) Log(temp) mu dQ VS Log(beta-decay-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -96.772000 -9.948629e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -52.485000 -5.427829e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -33.018000 -3.484629e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -24.674000 -2.776129e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -17.690000 -2.201029e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -13.998000 -1.891129e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -9.940000 -1.531829e+01 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -6.406000 -1.173529e+01 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -3.762000 -8.319290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -96.772000 -1.004873e+02 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -52.485000 -5.527829e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -33.018000 -3.525929e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -24.674000 -2.778329e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -17.690000 -2.201129e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -13.998000 -1.891129e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -9.940000 -1.531829e+01 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -6.406000 -1.173529e+01 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -3.762000 -8.319290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -96.780000 -1.014913e+02 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -52.488000 -5.627929e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -33.019000 -3.620729e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -24.674000 -2.798929e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -17.690000 -2.202629e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -13.998000 -1.891429e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -9.940000 -1.531929e+01 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -6.406000 -1.173529e+01 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -3.762000 -8.319290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -96.858000 -1.025333e+02 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -52.522000 -5.729529e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -33.028000 -3.721129e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -24.677000 -2.880729e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -17.691000 -2.216429e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -13.998000 -1.894329e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -9.940000 -1.532229e+01 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -6.406000 -1.173529e+01 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -3.762000 -8.319290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -97.567000 -1.039783e+02 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -52.825000 -5.844929e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -33.114000 -3.825929e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -24.710000 -2.980829e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -17.703000 -2.285229e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -14.003000 -1.919329e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -9.942000 -1.535329e+01 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -6.407000 -1.174029e+01 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -3.762000 -8.320290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -54.401000 -6.060929e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -33.677000 -3.964929e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -24.962000 -3.086129e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -17.818000 -2.366429e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -14.070000 -1.982029e+01 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -9.961000 -1.556229e+01 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -6.412000 -1.178529e+01 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -3.763000 -8.328290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 -1.818000 -4.527290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -59.235000 -6.588029e+01 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -35.768000 -4.219829e+01 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -26.201000 -3.251429e+01 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -18.580000 -2.470329e+01 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -14.533000 -2.047229e+01 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -10.152000 -1.592629e+01 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -6.481000 -1.205729e+01 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -3.776000 -8.406290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 -1.819000 -4.530290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 -0.709000 -1.237290e+00 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -72.880000 -7.956929e+01 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -42.934000 -4.942729e+01 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -30.798000 -3.715029e+01 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -21.182000 -2.736129e+01 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -16.256000 -2.232029e+01 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -11.204000 -1.712129e+01 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -7.057000 -1.279529e+01 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -3.940000 -8.962290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 -1.827000 -4.561290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 -0.709000 -1.238290e+00 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 -61.932000 -6.847329e+01 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 -43.926000 -5.031829e+01 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 -29.767000 -3.599629e+01 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 -22.594000 -2.871229e+01 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 -15.315000 -2.128129e+01 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 -9.401000 -1.518829e+01 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 -4.950000 -1.031929e+01 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 -1.920000 -4.853290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 -0.711000 -1.246290e+00 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 -73.707000 -8.010929e+01 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 -49.589000 -5.582629e+01 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 -37.437000 -4.356029e+01 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 -25.181000 -3.114929e+01 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 -15.290000 -2.107529e+01 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 -7.846000 -1.328029e+01 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 -2.660000 -6.053290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 -0.736000 -1.330290e+00 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 -92.618000 -9.885329e+01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 -69.704000 -7.582429e+01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 -46.686000 -5.265029e+01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 -28.188000 -3.396729e+01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 -14.288000 -1.972329e+01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 -4.720000 -8.372290e+00 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 -1.018000 -1.964290e+00 -100.00 diff --git a/networks/He-C-Fe-group/56co-56fe_electroncapture.dat b/networks/He-C-Fe-group/56co-56fe_electroncapture.dat new file mode 100644 index 0000000000..4407bda39e --- /dev/null +++ b/networks/He-C-Fe-group/56co-56fe_electroncapture.dat @@ -0,0 +1,148 @@ +!56co -> 56fe, e- capture +!Q=-4.055 MeV +! +!Log(rhoY) Log(temp) mu dQ Vs Log(e-cap-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -9.845000 -1.359829e+01 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -10.330000 -1.360129e+01 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -10.463000 -1.357029e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -10.543000 -1.269229e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -9.823000 -1.190729e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -8.389000 -1.158929e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -7.035000 -1.124329e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -6.195000 -1.068229e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -5.039000 -9.477290e+00 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -3.446000 -8.079290e+00 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -1.241000 -6.190290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 1.752000 -2.941290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -8.866000 -1.357129e+01 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -9.331000 -1.359129e+01 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -9.463000 -1.356429e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -9.543000 -1.269129e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -9.410000 -1.190729e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -8.367000 -1.158929e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -7.034000 -1.124329e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -6.195000 -1.068229e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -5.039000 -9.477290e+00 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -3.446000 -8.079290e+00 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -1.241000 -6.190290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 1.752000 -2.941290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -7.995000 -1.341529e+01 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -8.337000 -1.350629e+01 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -8.465000 -1.350229e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -8.544000 -1.268329e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -8.463000 -1.190529e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -8.161000 -1.158829e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -7.020000 -1.124229e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -6.192000 -1.068229e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -5.039000 -9.477290e+00 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -3.446000 -8.079290e+00 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -1.241000 -6.190290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 1.752000 -2.941290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -7.282000 -1.302429e+01 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -7.388000 -1.309829e+01 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -7.483000 -1.314829e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -7.549000 -1.261229e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -7.465000 -1.188529e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -7.343000 -1.157529e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -6.879000 -1.123529e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -6.161000 -1.067929e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -5.033000 -9.476290e+00 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -3.445000 -8.079290e+00 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -1.241000 -6.190290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 1.752000 -2.941290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -6.561000 -1.240329e+01 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -6.566000 -1.240729e+01 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -6.580000 -1.241729e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -6.584000 -1.223429e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -6.475000 -1.173129e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -6.349000 -1.145429e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -6.159000 -1.114429e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -5.877000 -1.064329e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -4.981000 -9.469290e+00 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -3.437000 -8.077290e+00 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -1.240000 -6.190290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 1.752000 -2.941290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -5.669000 -1.151229e+01 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -5.669000 -1.151029e+01 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -5.666000 -1.150729e+01 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -5.632000 -1.142629e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -5.490000 -1.113829e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -5.347000 -1.091629e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -5.152000 -1.064429e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -4.975000 -1.031029e+01 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -4.556000 -9.385290e+00 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -3.357000 -8.050290e+00 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -1.231000 -6.183290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 1.752000 -2.940290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -4.359000 -1.014129e+01 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -4.358000 -1.014029e+01 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -4.356000 -1.013829e+01 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -4.334000 -1.010029e+01 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -4.236000 -9.941290e+00 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -4.129000 -9.784290e+00 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -3.974000 -9.572290e+00 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -3.829000 -9.359290e+00 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -3.513000 -8.813290e+00 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -2.785000 -7.770290e+00 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -1.145000 -6.111290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 1.755000 -2.937290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 4.567000 3.947104e-01 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -2.447000 -8.087290e+00 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -2.446000 -8.086290e+00 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -2.445000 -8.085290e+00 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -2.438000 -8.073290e+00 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -2.403000 -8.018290e+00 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -2.361000 -7.952290e+00 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -2.289000 -7.849290e+00 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -2.214000 -7.743290e+00 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -2.029000 -7.469290e+00 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -1.539000 -6.764290e+00 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -0.523000 -5.552290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 1.786000 -2.906290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 4.568000 3.957104e-01 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 0.248000 -5.230290e+00 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 0.248000 -5.230290e+00 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 0.249000 -5.229290e+00 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 0.250000 -5.228290e+00 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 0.252000 -5.222290e+00 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 0.256000 -5.213290e+00 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 0.266000 -5.195290e+00 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 0.281000 -5.170290e+00 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 0.324000 -5.099290e+00 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 0.456000 -4.874290e+00 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 0.880000 -4.206290e+00 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 2.075000 -2.616290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 4.576000 4.037104e-01 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 2.669000 -2.340290e+00 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 2.669000 -2.340290e+00 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 2.669000 -2.340290e+00 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 2.669000 -2.340290e+00 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 2.669000 -2.340290e+00 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 2.668000 -2.340290e+00 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 2.668000 -2.339290e+00 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 2.669000 -2.337290e+00 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 2.673000 -2.330290e+00 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 2.688000 -2.302290e+00 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 2.759000 -2.169290e+00 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 3.178000 -1.483290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 4.659000 4.867104e-01 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 4.604000 2.371039e-02 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 4.604000 2.371039e-02 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 4.604000 2.371039e-02 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 4.604000 2.371039e-02 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 4.603000 2.371039e-02 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 4.603000 2.271039e-02 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 4.603000 2.271039e-02 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 4.603000 2.271039e-02 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 4.603000 2.371039e-02 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 4.605000 2.771039e-02 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 4.619000 5.271039e-02 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 4.727000 2.397104e-01 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 5.265000 1.107710e+00 -100.00 diff --git a/networks/He-C-Fe-group/56co-56ni_betadecay.dat b/networks/He-C-Fe-group/56co-56ni_betadecay.dat new file mode 100644 index 0000000000..bc7ca8dc68 --- /dev/null +++ b/networks/He-C-Fe-group/56co-56ni_betadecay.dat @@ -0,0 +1,148 @@ +!56co -> 56ni, beta-decay +!Q=1.624 MeV +! +!Log(rhoY) Log(temp) mu dQ VS Log(beta-decay-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -69.759000 -7.612229e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -37.930000 -4.395729e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -24.300000 -2.897729e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -18.824000 -2.366129e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -14.132000 -1.931729e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -11.418000 -1.689029e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -8.606000 -1.416229e+01 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -6.346000 -1.151229e+01 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -4.350000 -8.551290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 -2.008000 -4.678290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -69.759000 -7.612329e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -37.930000 -4.424529e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -24.300000 -2.937629e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -18.824000 -2.368129e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -14.132000 -1.931829e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -11.418000 -1.689129e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -8.606000 -1.416229e+01 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -6.346000 -1.151229e+01 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -4.350000 -8.551290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 -2.008000 -4.678290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -69.760000 -7.612429e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -37.931000 -4.428929e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -24.300000 -3.017529e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -18.824000 -2.387829e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -14.133000 -1.933129e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -11.418000 -1.689329e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -8.606000 -1.416329e+01 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -6.346000 -1.151229e+01 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -4.350000 -8.551290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 -2.008000 -4.678290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -69.773000 -7.614229e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -37.939000 -4.430529e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -24.306000 -3.058529e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -18.827000 -2.458029e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -14.133000 -1.944629e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -11.418000 -1.691229e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -8.607000 -1.416629e+01 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -6.346000 -1.151329e+01 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -4.350000 -8.551290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 -2.008000 -4.678290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -69.870000 -7.627929e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -38.017000 -4.441029e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -24.360000 -3.072629e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -18.864000 -2.506929e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -14.144000 -1.990129e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -11.422000 -1.706829e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -8.608000 -1.419329e+01 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -6.347000 -1.151929e+01 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -4.350000 -8.552290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 -2.008000 -4.678290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -70.529000 -7.717829e+01 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -38.608000 -4.518429e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -24.816000 -3.129129e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -19.180000 -2.548729e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -14.247000 -2.020929e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -11.475000 -1.735229e+01 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -8.633000 -1.437729e+01 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -6.355000 -1.158329e+01 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -4.351000 -8.560290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 -2.008000 -4.679290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -80.670000 -8.774329e+01 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -43.872000 -5.066029e+01 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -27.609000 -3.396729e+01 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -20.521000 -2.667329e+01 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -14.783000 -2.084629e+01 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -11.864000 -1.787129e+01 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -8.894000 -1.480829e+01 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -6.463000 -1.200229e+01 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -4.365000 -8.644290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 -2.009000 -4.682290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 -0.359000 -1.273290e+00 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -57.166000 -6.396229e+01 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -34.496000 -4.105829e+01 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -25.280000 -3.169429e+01 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -17.978000 -2.423329e+01 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -14.249000 -2.039929e+01 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -10.429000 -1.643629e+01 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -7.254000 -1.301329e+01 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -4.537000 -9.249290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 -2.016000 -4.713290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 -0.359000 -1.274290e+00 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 -91.260000 -9.805129e+01 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 -53.829000 -6.038529e+01 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 -38.714000 -4.512229e+01 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 -26.826000 -3.306929e+01 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 -20.801000 -2.693229e+01 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 -14.680000 -2.066129e+01 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 -9.657000 -1.543829e+01 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 -5.530000 -1.070929e+01 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 -2.101000 -5.005290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 -0.361000 -1.283290e+00 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 -96.457000 -1.030123e+02 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 -68.516000 -7.492229e+01 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 -46.653000 -5.289529e+01 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 -35.642000 -4.177129e+01 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 -24.535000 -3.051129e+01 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 -15.521000 -2.129929e+01 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 -8.385000 -1.369229e+01 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 -2.775000 -6.204290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 -0.381000 -1.366290e+00 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 -89.674000 -9.591429e+01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 -67.900000 -7.402629e+01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 -46.031000 -5.200129e+01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 -28.406000 -3.417629e+01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 -14.767000 -2.010129e+01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 -4.615000 -8.507290e+00 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 -0.624000 -2.000290e+00 -100.00 diff --git a/networks/He-C-Fe-group/56fe-56co_betadecay.dat b/networks/He-C-Fe-group/56fe-56co_betadecay.dat new file mode 100644 index 0000000000..630b61dc92 --- /dev/null +++ b/networks/He-C-Fe-group/56fe-56co_betadecay.dat @@ -0,0 +1,148 @@ +!56fe -> 56co, beta-decay +!Q=4.055 MeV +! +!Log(rhoY) Log(temp) mu dQ VS Log(beta-decay-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -66.195000 -6.958329e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -40.317000 -4.373429e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -29.773000 -3.392829e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -21.201000 -2.592829e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -16.597000 -2.162029e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -11.487000 -1.678829e+01 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -6.920000 -1.221529e+01 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -3.437000 -8.200290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -66.195000 -7.058129e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -40.317000 -4.414629e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -29.773000 -3.394929e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -21.201000 -2.592929e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -16.597000 -2.162029e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -11.487000 -1.678829e+01 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -6.920000 -1.221529e+01 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -3.437000 -8.200290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -66.197000 -7.156029e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -40.318000 -4.508829e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -29.773000 -3.415429e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -21.201000 -2.594329e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -16.597000 -2.162329e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -11.487000 -1.678929e+01 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -6.920000 -1.221629e+01 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -3.437000 -8.200290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -66.213000 -7.239829e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -40.327000 -4.603329e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -29.778000 -3.495229e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -21.202000 -2.607829e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -16.597000 -2.165129e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -11.487000 -1.679229e+01 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -6.920000 -1.221629e+01 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -3.437000 -8.200290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -66.363000 -7.293929e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -40.413000 -4.675229e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -29.823000 -3.579129e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -21.219000 -2.672229e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -16.602000 -2.189129e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -11.488000 -1.682529e+01 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -6.920000 -1.222029e+01 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -3.438000 -8.201290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -67.649000 -7.445329e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -41.092000 -4.760029e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -30.179000 -3.646829e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -21.373000 -2.738129e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -16.673000 -2.245629e+01 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -11.505000 -1.704429e+01 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -6.924000 -1.226129e+01 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -3.438000 -8.208290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 -1.450000 -4.328290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -73.046000 -7.985329e+01 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -43.828000 -5.039029e+01 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -31.880000 -3.821729e+01 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -22.204000 -2.828029e+01 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -17.107000 -2.302529e+01 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -11.672000 -1.739629e+01 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -6.975000 -1.248929e+01 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -3.449000 -8.280290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 -1.450000 -4.331290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 -0.583000 -1.107290e+00 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -87.074000 -9.383229e+01 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -51.037000 -5.748829e+01 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -36.358000 -4.265529e+01 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -24.715000 -3.083529e+01 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -18.730000 -2.472029e+01 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -12.543000 -1.837029e+01 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -7.409000 -1.306929e+01 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -3.585000 -8.764290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 -1.458000 -4.362290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 -0.583000 -1.108290e+00 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 -69.155000 -7.570329e+01 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 -48.720000 -5.511629e+01 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 -32.645000 -3.887129e+01 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 -24.497000 -3.060529e+01 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 -16.232000 -2.218229e+01 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 -9.514000 -1.528229e+01 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 -4.522000 -9.984290e+00 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 -1.554000 -4.653290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 -0.586000 -1.116290e+00 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 -78.495000 -8.489429e+01 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 -52.454000 -5.868529e+01 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 -39.327000 -4.544229e+01 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 -26.090000 -3.204829e+01 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 -15.401000 -2.117629e+01 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 -7.428000 -1.292829e+01 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 -2.317000 -5.852290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 -0.611000 -1.199290e+00 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 -95.485000 -1.017163e+02 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 -71.597000 -7.771229e+01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 -47.600000 -5.355729e+01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 -28.307000 -3.407929e+01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 -13.887000 -1.938129e+01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 -4.434000 -8.171290e+00 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 -0.899000 -1.833290e+00 -100.00 diff --git a/networks/He-C-Fe-group/56ni-56co_electroncapture.dat b/networks/He-C-Fe-group/56ni-56co_electroncapture.dat new file mode 100644 index 0000000000..71e499bc25 --- /dev/null +++ b/networks/He-C-Fe-group/56ni-56co_electroncapture.dat @@ -0,0 +1,148 @@ +!56ni -> 56co, e- capture +!Q=-1.624 MeV +! +!Log(rhoY) Log(temp) mu dQ Vs Log(e-cap-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -8.684000 -1.486129e+01 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -9.164000 -1.533229e+01 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -9.291000 -1.544729e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -9.387000 -1.551729e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -8.777000 -1.485829e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -7.439000 -1.346429e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -6.184000 -1.211329e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -5.406000 -1.124729e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -4.325000 -1.001729e+01 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -2.782000 -8.181290e+00 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -0.691000 -5.723290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 2.011000 -2.678290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -7.705000 -1.388129e+01 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -8.165000 -1.433229e+01 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -8.291000 -1.444829e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -8.387000 -1.451729e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -8.364000 -1.444529e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -7.418000 -1.344329e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -6.182000 -1.211229e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -5.406000 -1.124729e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -4.325000 -1.001729e+01 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -2.782000 -8.181290e+00 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -0.691000 -5.723290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 2.011000 -2.678290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -6.834000 -1.300929e+01 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -7.171000 -1.333829e+01 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -7.293000 -1.344929e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -7.388000 -1.351729e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -7.417000 -1.349729e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -7.212000 -1.323729e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -6.168000 -1.209729e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -5.403000 -1.124429e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -4.324000 -1.001729e+01 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -2.782000 -8.181290e+00 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -0.691000 -5.723290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 2.011000 -2.678290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -6.118000 -1.228929e+01 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -6.220000 -1.238529e+01 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -6.310000 -1.246529e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -6.392000 -1.252029e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -6.418000 -1.249829e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -6.393000 -1.241829e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -6.027000 -1.195629e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -5.372000 -1.121229e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -4.319000 -1.001129e+01 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -2.781000 -8.180290e+00 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -0.691000 -5.723290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 2.011000 -2.678290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -5.384000 -1.153229e+01 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -5.388000 -1.153329e+01 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -5.399000 -1.153829e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -5.421000 -1.153729e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -5.423000 -1.149429e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -5.395000 -1.141429e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -5.305000 -1.123129e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -5.087000 -1.092729e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -4.266000 -9.960290e+00 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -2.773000 -8.174290e+00 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -0.690000 -5.722290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 2.011000 -2.678290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -4.448000 -1.050329e+01 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -4.447000 -1.050129e+01 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -4.444000 -1.049429e+01 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -4.432000 -1.047129e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -4.403000 -1.041229e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -4.363000 -1.033429e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -4.278000 -1.017529e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -4.170000 -9.994290e+00 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -3.834000 -9.531290e+00 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -2.691000 -8.105290e+00 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -0.682000 -5.714290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 2.012000 -2.677290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -3.134000 -8.963290e+00 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -3.134000 -8.962290e+00 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -3.132000 -8.960290e+00 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -3.127000 -8.951290e+00 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -3.113000 -8.927290e+00 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -3.091000 -8.892290e+00 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -3.039000 -8.809290e+00 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -2.964000 -8.700290e+00 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -2.727000 -8.397290e+00 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -2.093000 -7.561290e+00 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -0.595000 -5.637290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 2.015000 -2.674290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 4.728000 5.607104e-01 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -1.311000 -6.966290e+00 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -1.311000 -6.966290e+00 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -1.310000 -6.965290e+00 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -1.305000 -6.960290e+00 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -1.293000 -6.948290e+00 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -1.275000 -6.929290e+00 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -1.232000 -6.883290e+00 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -1.177000 -6.819290e+00 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -1.039000 -6.646290e+00 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -0.719000 -6.191290e+00 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 0.028000 -5.049290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 2.046000 -2.643290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 4.729000 5.607104e-01 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 1.069000 -4.277290e+00 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 1.069000 -4.277290e+00 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 1.069000 -4.277290e+00 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 1.070000 -4.276290e+00 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 1.071000 -4.274290e+00 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 1.073000 -4.270290e+00 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 1.078000 -4.262290e+00 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 1.085000 -4.250290e+00 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 1.104000 -4.217290e+00 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 1.159000 -4.117290e+00 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 1.386000 -3.681290e+00 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 2.333000 -2.353290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 4.737000 5.697104e-01 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 3.035000 -1.889290e+00 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 3.034000 -1.889290e+00 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 3.034000 -1.889290e+00 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 3.034000 -1.889290e+00 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 3.035000 -1.888290e+00 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 3.035000 -1.888290e+00 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 3.036000 -1.887290e+00 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 3.037000 -1.885290e+00 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 3.040000 -1.879290e+00 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 3.048000 -1.864290e+00 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 3.084000 -1.782290e+00 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 3.420000 -1.226290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 4.819000 6.527104e-01 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 4.825000 2.827104e-01 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 4.826000 2.827104e-01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 4.826000 2.837104e-01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 4.826000 2.847104e-01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 4.827000 2.867104e-01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 4.831000 2.977104e-01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 4.926000 4.587104e-01 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 5.424000 1.272710e+00 -100.00 diff --git a/networks/He-C-Fe-group/57co-57ni_betadecay.dat b/networks/He-C-Fe-group/57co-57ni_betadecay.dat new file mode 100644 index 0000000000..a61cf7db64 --- /dev/null +++ b/networks/He-C-Fe-group/57co-57ni_betadecay.dat @@ -0,0 +1,148 @@ +!57co -> 57ni, beta-decay +!Q=2.7532 MeV +! +!Log(rhoY) Log(temp) mu dQ VS Log(beta-decay-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -96.775000 -9.530129e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -51.579000 -5.243729e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -32.097000 -3.400129e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -24.151000 -2.730929e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -17.517000 -2.184729e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -13.874000 -1.884529e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -9.905000 -1.529829e+01 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -6.454000 -1.174429e+01 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -3.681000 -8.172290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -96.775000 -9.630129e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -51.579000 -5.343729e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -32.097000 -3.441429e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -24.151000 -2.733029e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -17.517000 -2.184829e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -13.874000 -1.884529e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -9.905000 -1.529829e+01 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -6.454000 -1.174429e+01 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -3.681000 -8.172290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -96.776000 -9.730729e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -51.580000 -5.443929e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -32.098000 -3.536229e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -24.151000 -2.753629e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -17.517000 -2.186229e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -13.875000 -1.884829e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -9.905000 -1.529829e+01 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -6.454000 -1.174429e+01 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -3.681000 -8.172290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -96.793000 -9.836229e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -51.591000 -5.545629e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -32.104000 -3.636529e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -24.155000 -2.835529e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -17.518000 -2.200129e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -13.875000 -1.887629e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -9.905000 -1.530129e+01 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -6.454000 -1.174429e+01 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -3.681000 -8.172290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -96.924000 -9.986529e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -51.686000 -5.661529e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -32.165000 -3.740429e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -24.190000 -2.935429e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -17.530000 -2.268529e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -13.879000 -1.911829e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -9.907000 -1.533329e+01 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -6.454000 -1.174929e+01 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -3.681000 -8.173290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -97.900000 -1.039633e+02 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -52.439000 -5.868429e+01 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -32.666000 -3.875629e+01 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -24.480000 -3.041629e+01 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -17.642000 -2.346829e+01 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -13.936000 -1.968729e+01 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -9.926000 -1.554629e+01 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -6.460000 -1.180029e+01 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -3.682000 -8.181290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 -1.738000 -4.305290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -57.478000 -6.412529e+01 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -35.000000 -4.140829e+01 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -25.767000 -3.203029e+01 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -18.296000 -2.435729e+01 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -14.331000 -2.026929e+01 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -10.130000 -1.594029e+01 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -6.538000 -1.211229e+01 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -3.696000 -8.261290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 -1.739000 -4.308290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 -0.687000 -1.025290e+00 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -70.894000 -7.767829e+01 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -42.039000 -4.854829e+01 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -30.284000 -3.663729e+01 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -20.973000 -2.717229e+01 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -16.218000 -2.231329e+01 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -11.318000 -1.726729e+01 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -7.168000 -1.292229e+01 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -3.867000 -8.831290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 -1.746000 -4.339290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 -0.687000 -1.026290e+00 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 -61.151000 -6.770529e+01 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 -43.563000 -4.996729e+01 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 -29.722000 -3.595829e+01 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 -22.694000 -2.881629e+01 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 -15.514000 -2.148329e+01 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 -9.548000 -1.533329e+01 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 -4.885000 -1.021429e+01 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 -1.837000 -4.631290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 -0.689000 -1.035290e+00 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 -73.334000 -7.973829e+01 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 -49.526000 -5.576429e+01 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 -37.518000 -4.364129e+01 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 -25.359000 -3.132729e+01 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 -15.409000 -2.119129e+01 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 -7.753000 -1.316329e+01 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 -2.554000 -5.832290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 -0.714000 -1.118290e+00 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 -99.999000 -1.057943e+02 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 -92.524000 -9.875729e+01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 -69.750000 -7.586829e+01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 -46.826000 -5.278529e+01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 -28.262000 -3.402729e+01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 -14.133000 -1.954729e+01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 -4.558000 -8.151290e+00 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 -1.004000 -1.753290e+00 -100.00 diff --git a/networks/He-C-Fe-group/57ni-57co_electroncapture.dat b/networks/He-C-Fe-group/57ni-57co_electroncapture.dat new file mode 100644 index 0000000000..6afc604de0 --- /dev/null +++ b/networks/He-C-Fe-group/57ni-57co_electroncapture.dat @@ -0,0 +1,148 @@ +!57ni -> 57co, e- capture +!Q=-2.7532 MeV +! +!Log(rhoY) Log(temp) mu dQ Vs Log(e-cap-rate) Log(nu-energy-loss) Log(gamma-energy) +!Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +1.000000 7.000000 -4.806530e-09 0.00 0.00 -8.322000 -1.175729e+01 -100.00 +1.000000 8.000000 -9.292624e-08 0.00 0.00 -8.814000 -1.175929e+01 -100.00 +1.000000 8.301030 -2.146917e-07 0.00 0.00 -8.955000 -1.176029e+01 -100.00 +1.000000 8.602060 -4.902661e-07 0.00 0.00 -9.083000 -1.176029e+01 -100.00 +1.000000 8.845098 -8.058948e-07 0.00 0.00 -8.525000 -1.175729e+01 -100.00 +1.000000 9.000000 -8.187123e-07 0.00 0.00 -7.242000 -1.167529e+01 -100.00 +1.000000 9.176091 -8.187123e-07 0.00 0.00 -6.073000 -1.107329e+01 -100.00 +1.000000 9.301030 -8.187123e-07 0.00 0.00 -5.366000 -1.047129e+01 -100.00 +1.000000 9.477121 -8.187123e-07 0.00 0.00 -4.399000 -9.642290e+00 -100.00 +1.000000 9.698970 -8.187123e-07 0.00 0.00 -3.016000 -8.268290e+00 -100.00 +1.000000 10.000000 -8.187123e-07 0.00 0.00 -0.921000 -5.964290e+00 -100.00 +1.000000 10.477121 -8.187123e-07 0.00 0.00 1.959000 -2.733290e+00 -100.00 +1.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +2.000000 7.000000 -1.602177e-09 0.00 0.00 -7.342000 -1.173129e+01 -100.00 +2.000000 8.000000 -6.088271e-08 0.00 0.00 -7.814000 -1.175029e+01 -100.00 +2.000000 8.301030 -1.522068e-07 0.00 0.00 -7.955000 -1.175329e+01 -100.00 +2.000000 8.602060 -3.636941e-07 0.00 0.00 -8.083000 -1.175529e+01 -100.00 +2.000000 8.845098 -7.145708e-07 0.00 0.00 -8.112000 -1.175429e+01 -100.00 +2.000000 9.000000 -8.107014e-07 0.00 0.00 -7.221000 -1.167329e+01 -100.00 +2.000000 9.176091 -8.187123e-07 0.00 0.00 -6.071000 -1.107329e+01 -100.00 +2.000000 9.301030 -8.187123e-07 0.00 0.00 -5.365000 -1.047129e+01 -100.00 +2.000000 9.477121 -8.187123e-07 0.00 0.00 -4.399000 -9.642290e+00 -100.00 +2.000000 9.698970 -8.187123e-07 0.00 0.00 -3.016000 -8.268290e+00 -100.00 +2.000000 10.000000 -8.187123e-07 0.00 0.00 -0.921000 -5.964290e+00 -100.00 +2.000000 10.477121 -8.187123e-07 0.00 0.00 1.959000 -2.733290e+00 -100.00 +2.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +3.000000 7.000000 3.204353e-09 0.00 0.00 -6.472000 -1.157729e+01 -100.00 +3.000000 8.000000 -2.883918e-08 0.00 0.00 -6.821000 -1.166829e+01 -100.00 +3.000000 8.301030 -8.811971e-08 0.00 0.00 -6.957000 -1.169129e+01 -100.00 +3.000000 8.602060 -2.355200e-07 0.00 0.00 -7.084000 -1.170729e+01 -100.00 +3.000000 8.845098 -5.030835e-07 0.00 0.00 -7.165000 -1.171429e+01 -100.00 +3.000000 9.000000 -7.450121e-07 0.00 0.00 -7.015000 -1.165229e+01 -100.00 +3.000000 9.176091 -8.107014e-07 0.00 0.00 -6.057000 -1.106929e+01 -100.00 +3.000000 9.301030 -8.171101e-07 0.00 0.00 -5.362000 -1.047029e+01 -100.00 +3.000000 9.477121 -8.187123e-07 0.00 0.00 -4.399000 -9.642290e+00 -100.00 +3.000000 9.698970 -8.187123e-07 0.00 0.00 -3.016000 -8.268290e+00 -100.00 +3.000000 10.000000 -8.187123e-07 0.00 0.00 -0.921000 -5.964290e+00 -100.00 +3.000000 10.477121 -8.187123e-07 0.00 0.00 1.959000 -2.733290e+00 -100.00 +3.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +4.000000 7.000000 1.922612e-08 0.00 0.00 -5.763000 -1.119229e+01 -100.00 +4.000000 8.000000 8.010883e-09 0.00 0.00 -5.874000 -1.126929e+01 -100.00 +4.000000 8.301030 -2.082830e-08 0.00 0.00 -5.977000 -1.133529e+01 -100.00 +4.000000 8.602060 -1.073458e-07 0.00 0.00 -6.090000 -1.140029e+01 -100.00 +4.000000 8.845098 -2.787787e-07 0.00 0.00 -6.167000 -1.143829e+01 -100.00 +4.000000 9.000000 -4.838573e-07 0.00 0.00 -6.197000 -1.142429e+01 -100.00 +4.000000 9.176091 -7.434100e-07 0.00 0.00 -5.916000 -1.102029e+01 -100.00 +4.000000 9.301030 -7.962818e-07 0.00 0.00 -5.331000 -1.045729e+01 -100.00 +4.000000 9.477121 -8.123036e-07 0.00 0.00 -4.393000 -9.639290e+00 -100.00 +4.000000 9.698970 -8.171101e-07 0.00 0.00 -3.015000 -8.267290e+00 -100.00 +4.000000 10.000000 -8.187123e-07 0.00 0.00 -0.921000 -5.964290e+00 -100.00 +4.000000 10.477121 -8.187123e-07 0.00 0.00 1.959000 -2.733290e+00 -100.00 +4.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +5.000000 7.000000 8.491536e-08 0.00 0.00 -5.060000 -1.059129e+01 -100.00 +5.000000 8.000000 8.331318e-08 0.00 0.00 -5.067000 -1.059829e+01 -100.00 +5.000000 8.301030 7.530230e-08 0.00 0.00 -5.087000 -1.061529e+01 -100.00 +5.000000 8.602060 4.165659e-08 0.00 0.00 -5.134000 -1.065629e+01 -100.00 +5.000000 8.845098 -4.165659e-08 0.00 0.00 -5.183000 -1.069429e+01 -100.00 +5.000000 9.000000 -1.570133e-07 0.00 0.00 -5.207000 -1.070329e+01 -100.00 +5.000000 9.176091 -3.941355e-07 0.00 0.00 -5.198000 -1.060329e+01 -100.00 +5.000000 9.301030 -6.136337e-07 0.00 0.00 -5.048000 -1.031329e+01 -100.00 +5.000000 9.477121 -7.626361e-07 0.00 0.00 -4.341000 -9.605290e+00 -100.00 +5.000000 9.698970 -8.042927e-07 0.00 0.00 -3.007000 -8.261290e+00 -100.00 +5.000000 10.000000 -8.155079e-07 0.00 0.00 -0.920000 -5.963290e+00 -100.00 +5.000000 10.477121 -8.187123e-07 0.00 0.00 1.959000 -2.733290e+00 -100.00 +5.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +6.000000 7.000000 3.444680e-07 0.00 0.00 -4.243000 -9.783290e+00 -100.00 +6.000000 8.000000 3.428658e-07 0.00 0.00 -4.243000 -9.783290e+00 -100.00 +6.000000 8.301030 3.412636e-07 0.00 0.00 -4.242000 -9.782290e+00 -100.00 +6.000000 8.602060 3.316506e-07 0.00 0.00 -4.241000 -9.779290e+00 -100.00 +6.000000 8.845098 3.028114e-07 0.00 0.00 -4.239000 -9.772290e+00 -100.00 +6.000000 9.000000 2.579504e-07 0.00 0.00 -4.234000 -9.760290e+00 -100.00 +6.000000 9.176091 1.490024e-07 0.00 0.00 -4.210000 -9.711290e+00 -100.00 +6.000000 9.301030 1.602177e-09 0.00 0.00 -4.156000 -9.610290e+00 -100.00 +6.000000 9.477121 -3.396614e-07 0.00 0.00 -3.917000 -9.286290e+00 -100.00 +6.000000 9.698970 -6.729142e-07 0.00 0.00 -2.926000 -8.201290e+00 -100.00 +6.000000 10.000000 -7.866687e-07 0.00 0.00 -0.911000 -5.956290e+00 -100.00 +6.000000 10.477121 -8.155079e-07 0.00 0.00 1.959000 -2.732290e+00 -100.00 +6.000000 11.000000 -8.187123e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +7.000000 7.000000 1.140750e-06 0.00 0.00 -3.181000 -8.674290e+00 -100.00 +7.000000 8.000000 1.139148e-06 0.00 0.00 -3.181000 -8.673290e+00 -100.00 +7.000000 8.301030 1.139148e-06 0.00 0.00 -3.180000 -8.672290e+00 -100.00 +7.000000 8.602060 1.134341e-06 0.00 0.00 -3.178000 -8.669290e+00 -100.00 +7.000000 8.845098 1.123126e-06 0.00 0.00 -3.171000 -8.661290e+00 -100.00 +7.000000 9.000000 1.103900e-06 0.00 0.00 -3.160000 -8.647290e+00 -100.00 +7.000000 9.176091 1.060641e-06 0.00 0.00 -3.128000 -8.607290e+00 -100.00 +7.000000 9.301030 9.965539e-07 0.00 0.00 -3.071000 -8.535290e+00 -100.00 +7.000000 9.477121 8.171101e-07 0.00 0.00 -2.880000 -8.316290e+00 -100.00 +7.000000 9.698970 2.996070e-07 0.00 0.00 -2.338000 -7.703290e+00 -100.00 +7.000000 10.000000 -5.046856e-07 0.00 0.00 -0.824000 -5.881290e+00 -100.00 +7.000000 10.477121 -7.850666e-07 0.00 0.00 1.962000 -2.729290e+00 -100.00 +7.000000 11.000000 -8.155079e-07 0.00 0.00 4.710000 5.407104e-01 -100.00 +8.000000 7.000000 3.101814e-06 0.00 0.00 -1.641000 -7.126290e+00 -100.00 +8.000000 8.000000 3.101814e-06 0.00 0.00 -1.641000 -7.125290e+00 -100.00 +8.000000 8.301030 3.100212e-06 0.00 0.00 -1.640000 -7.125290e+00 -100.00 +8.000000 8.602060 3.098610e-06 0.00 0.00 -1.637000 -7.122290e+00 -100.00 +8.000000 8.845098 3.093803e-06 0.00 0.00 -1.627000 -7.115290e+00 -100.00 +8.000000 9.000000 3.085792e-06 0.00 0.00 -1.613000 -7.104290e+00 -100.00 +8.000000 9.176091 3.064964e-06 0.00 0.00 -1.575000 -7.072290e+00 -100.00 +8.000000 9.301030 3.036125e-06 0.00 0.00 -1.518000 -7.016290e+00 -100.00 +8.000000 9.477121 2.954414e-06 0.00 0.00 -1.362000 -6.847290e+00 -100.00 +8.000000 9.698970 2.693259e-06 0.00 0.00 -1.005000 -6.419290e+00 -100.00 +8.000000 10.000000 1.573337e-06 0.00 0.00 -0.193000 -5.302290e+00 -100.00 +8.000000 10.477121 -4.838573e-07 0.00 0.00 1.993000 -2.698290e+00 -100.00 +8.000000 11.000000 -7.882709e-07 0.00 0.00 4.711000 5.417104e-01 -100.00 +9.000000 7.000000 7.480563e-06 0.00 0.00 0.856000 -4.539290e+00 -100.00 +9.000000 8.000000 7.480563e-06 0.00 0.00 0.856000 -4.539290e+00 -100.00 +9.000000 8.301030 7.480563e-06 0.00 0.00 0.856000 -4.539290e+00 -100.00 +9.000000 8.602060 7.480563e-06 0.00 0.00 0.857000 -4.538290e+00 -100.00 +9.000000 8.845098 7.477358e-06 0.00 0.00 0.858000 -4.535290e+00 -100.00 +9.000000 9.000000 7.474154e-06 0.00 0.00 0.861000 -4.530290e+00 -100.00 +9.000000 9.176091 7.464541e-06 0.00 0.00 0.867000 -4.520290e+00 -100.00 +9.000000 9.301030 7.450121e-06 0.00 0.00 0.874000 -4.506290e+00 -100.00 +9.000000 9.477121 7.413271e-06 0.00 0.00 0.893000 -4.468290e+00 -100.00 +9.000000 9.698970 7.291506e-06 0.00 0.00 0.952000 -4.355290e+00 -100.00 +9.000000 10.000000 6.724335e-06 0.00 0.00 1.217000 -3.895290e+00 -100.00 +9.000000 10.477121 2.340780e-06 0.00 0.00 2.281000 -2.408290e+00 -100.00 +9.000000 11.000000 -5.191052e-07 0.00 0.00 4.720000 5.497104e-01 -100.00 +10.000000 7.000000 1.699429e-05 0.00 0.00 2.953000 -1.999290e+00 -100.00 +10.000000 8.000000 1.699429e-05 0.00 0.00 2.953000 -1.999290e+00 -100.00 +10.000000 8.301030 1.699429e-05 0.00 0.00 2.953000 -1.999290e+00 -100.00 +10.000000 8.602060 1.699429e-05 0.00 0.00 2.953000 -1.999290e+00 -100.00 +10.000000 8.845098 1.699269e-05 0.00 0.00 2.953000 -1.998290e+00 -100.00 +10.000000 9.000000 1.699108e-05 0.00 0.00 2.953000 -1.998290e+00 -100.00 +10.000000 9.176091 1.698628e-05 0.00 0.00 2.954000 -1.997290e+00 -100.00 +10.000000 9.301030 1.697987e-05 0.00 0.00 2.954000 -1.996290e+00 -100.00 +10.000000 9.477121 1.696224e-05 0.00 0.00 2.953000 -1.995290e+00 -100.00 +10.000000 9.698970 1.690617e-05 0.00 0.00 2.952000 -1.987290e+00 -100.00 +10.000000 10.000000 1.664181e-05 0.00 0.00 2.995000 -1.901290e+00 -100.00 +10.000000 10.477121 1.386203e-05 0.00 0.00 3.374000 -1.278290e+00 -100.00 +10.000000 11.000000 2.164541e-06 0.00 0.00 4.802000 6.327104e-01 -100.00 +11.000000 7.000000 3.752778e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 8.000000 3.752778e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 8.301030 3.752778e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 8.602060 3.752778e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 8.845098 3.752618e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 9.000000 3.752618e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 9.176091 3.752298e-05 0.00 0.00 4.790000 2.347104e-01 -100.00 +11.000000 9.301030 3.752137e-05 0.00 0.00 4.789000 2.337104e-01 -100.00 +11.000000 9.477121 3.751176e-05 0.00 0.00 4.786000 2.307104e-01 -100.00 +11.000000 9.698970 3.748613e-05 0.00 0.00 4.779000 2.247104e-01 -100.00 +11.000000 10.000000 3.736436e-05 0.00 0.00 4.782000 2.357104e-01 -100.00 +11.000000 10.477121 3.605538e-05 0.00 0.00 4.894000 4.207104e-01 -100.00 +11.000000 11.000000 2.244810e-05 0.00 0.00 5.407000 1.252710e+00 -100.00 diff --git a/networks/He-C-Fe-group/He-C-Fe-group.png b/networks/He-C-Fe-group/He-C-Fe-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6daf1fc36a61d9560aa0c89ea6ddd26a26458c2c GIT binary patch literal 134209 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

F+ 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

tXD{F1b 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 +#include + +#include +#include + +using namespace amrex; + +void actual_network_init(); + +const std::string network_name = "pynucastro-cxx"; + +namespace network +{ + extern AMREX_GPU_MANAGED amrex::Array1D bion; + extern AMREX_GPU_MANAGED amrex::Array1D mion; +} + +namespace Rates +{ + + enum NetworkRates + { + k_p_c12_to_n13 = 1, + k_he4_c12_to_o16 = 2, + k_he4_n14_to_f18 = 3, + k_he4_o16_to_ne20 = 4, + k_he4_f18_to_na22 = 5, + k_he4_ne20_to_mg24 = 6, + k_p_ne21_to_na22 = 7, + k_p_na23_to_mg24 = 8, + k_he4_mg24_to_si28 = 9, + k_p_al27_to_si28 = 10, + k_he4_si28_to_s32 = 11, + k_p_p31_to_s32 = 12, + k_he4_cr48_to_fe52 = 13, + k_p_mn51_to_fe52 = 14, + k_he4_mn51_to_co55 = 15, + k_he4_fe52_to_ni56 = 16, + k_p_co55_to_ni56 = 17, + k_he4_co55_to_cu59 = 18, + k_he4_ni56_to_zn60 = 19, + k_p_cu59_to_zn60 = 20, + k_c12_c12_to_p_na23 = 21, + k_c12_c12_to_he4_ne20 = 22, + k_he4_n13_to_p_o16 = 23, + k_c12_o16_to_p_al27 = 24, + k_c12_o16_to_he4_mg24 = 25, + k_o16_o16_to_p_p31 = 26, + k_o16_o16_to_he4_si28 = 27, + k_he4_f18_to_p_ne21 = 28, + k_p_na23_to_he4_ne20 = 29, + k_p_al27_to_he4_mg24 = 30, + k_p_p31_to_he4_si28 = 31, + k_he4_cr48_to_p_mn51 = 32, + k_he4_fe52_to_p_co55 = 33, + k_p_cu59_to_he4_ni56 = 34, + k_he4_he4_he4_to_c12 = 35, + k_c12_c12_to_mg24_modified = 36, + k_o16_o16_to_s32_modified = 37, + k_c12_o16_to_si28_modified = 38, + k_n_to_p_weak_wc12 = 39, + k_p_mn55_to_fe56 = 40, + k_n_fe52_to_fe53 = 41, + k_n_fe53_to_fe54 = 42, + k_he4_fe53_to_ni57 = 43, + k_n_fe54_to_fe55 = 44, + k_p_fe54_to_co55 = 45, + k_he4_fe54_to_ni58 = 46, + k_n_fe55_to_fe56 = 47, + k_p_fe55_to_co56 = 48, + k_p_fe56_to_co57 = 49, + k_n_co55_to_co56 = 50, + k_n_co56_to_co57 = 51, + k_p_co56_to_ni57 = 52, + k_p_co57_to_ni58 = 53, + k_n_ni56_to_ni57 = 54, + k_n_ni57_to_ni58 = 55, + k_p_ni58_to_cu59 = 56, + k_he4_mn51_to_p_fe54 = 57, + k_he4_fe53_to_p_co56 = 58, + k_n_fe55_to_p_mn55 = 59, + k_n_co55_to_p_fe55 = 60, + k_he4_co55_to_p_ni58 = 61, + k_n_co56_to_p_fe56 = 62, + k_p_co57_to_he4_fe54 = 63, + k_n_ni56_to_p_co56 = 64, + k_n_ni56_to_he4_fe53 = 65, + k_n_ni57_to_p_co57 = 66, + k_n_ni57_to_he4_fe54 = 67, + k_n_ni58_to_he4_fe55 = 68, + k_n_cu59_to_he4_co56 = 69, + k_n_zn60_to_he4_ni57 = 70, + k_he4_s32_to_ar36_removed = 71, + k_p_cl35_to_ar36_removed = 72, + k_p_cl35_to_he4_s32_removed = 73, + k_he4_ar36_to_ca40_removed = 74, + k_p_k39_to_ca40_removed = 75, + k_p_k39_to_he4_ar36_removed = 76, + k_he4_ca40_to_ti44_removed = 77, + k_p_sc43_to_ti44_removed = 78, + k_p_sc43_to_he4_ca40_removed = 79, + k_he4_ti44_to_cr48_removed = 80, + k_he4_ti44_to_p_v47_removed = 81, + k_p_v47_to_cr48_removed = 82, + k_co55_to_fe55 = 83, + k_co56_to_fe56 = 84, + k_co56_to_ni56 = 85, + k_co57_to_ni57 = 86, + k_fe55_to_co55 = 87, + k_fe55_to_mn55 = 88, + k_fe56_to_co56 = 89, + k_mn55_to_fe55 = 90, + k_ni56_to_co56 = 91, + k_ni57_to_co57 = 92, + k_s32_he4_to_ar36_approx = 93, + k_ar36_to_s32_he4_approx = 94, + k_ar36_he4_to_ca40_approx = 95, + k_ca40_to_ar36_he4_approx = 96, + k_ca40_he4_to_ti44_approx = 97, + k_ti44_to_ca40_he4_approx = 98, + k_ti44_he4_to_cr48_approx = 99, + k_cr48_to_ti44_he4_approx = 100, + k_n13_to_p_c12_derived = 101, + k_o16_to_he4_c12_derived = 102, + k_f18_to_he4_n14_derived = 103, + k_ne20_to_he4_o16_derived = 104, + k_na22_to_p_ne21_derived = 105, + k_na22_to_he4_f18_derived = 106, + k_mg24_to_p_na23_derived = 107, + k_mg24_to_he4_ne20_derived = 108, + k_si28_to_p_al27_derived = 109, + k_si28_to_he4_mg24_derived = 110, + k_s32_to_p_p31_derived = 111, + k_s32_to_he4_si28_derived = 112, + k_fe52_to_p_mn51_derived = 113, + k_fe52_to_he4_cr48_derived = 114, + k_co55_to_he4_mn51_derived = 115, + k_ni56_to_p_co55_derived = 116, + k_ni56_to_he4_fe52_derived = 117, + k_cu59_to_he4_co55_derived = 118, + k_zn60_to_p_cu59_derived = 119, + k_zn60_to_he4_ni56_derived = 120, + k_c12_to_he4_he4_he4_derived = 121, + k_p_o16_to_he4_n13_derived = 122, + k_he4_ne20_to_p_na23_derived = 123, + k_p_ne21_to_he4_f18_derived = 124, + k_he4_mg24_to_p_al27_derived = 125, + k_he4_si28_to_p_p31_derived = 126, + k_p_mn51_to_he4_cr48_derived = 127, + k_p_co55_to_he4_fe52_derived = 128, + k_he4_ni56_to_p_cu59_derived = 129, + k_fe53_to_n_fe52_derived = 130, + k_fe54_to_n_fe53_derived = 131, + k_fe55_to_n_fe54_derived = 132, + k_fe56_to_n_fe55_derived = 133, + k_fe56_to_p_mn55_derived = 134, + k_co55_to_p_fe54_derived = 135, + k_co56_to_n_co55_derived = 136, + k_co56_to_p_fe55_derived = 137, + k_co57_to_n_co56_derived = 138, + k_co57_to_p_fe56_derived = 139, + k_ni57_to_n_ni56_derived = 140, + k_ni57_to_p_co56_derived = 141, + k_ni57_to_he4_fe53_derived = 142, + k_ni58_to_n_ni57_derived = 143, + k_ni58_to_p_co57_derived = 144, + k_ni58_to_he4_fe54_derived = 145, + k_cu59_to_p_ni58_derived = 146, + k_p_mn55_to_n_fe55_derived = 147, + k_he4_fe53_to_n_ni56_derived = 148, + k_p_fe54_to_he4_mn51_derived = 149, + k_he4_fe54_to_n_ni57_derived = 150, + k_he4_fe54_to_p_co57_derived = 151, + k_p_fe55_to_n_co55_derived = 152, + k_he4_fe55_to_n_ni58_derived = 153, + k_p_fe56_to_n_co56_derived = 154, + k_p_co56_to_n_ni56_derived = 155, + k_p_co56_to_he4_fe53_derived = 156, + k_he4_co56_to_n_cu59_derived = 157, + k_p_co57_to_n_ni57_derived = 158, + k_he4_ni57_to_n_zn60_derived = 159, + k_p_ni58_to_he4_co55_derived = 160, + k_he4_s32_to_p_cl35_derived_removed = 161, + k_ar36_to_he4_s32_derived_removed = 162, + k_ar36_to_p_cl35_derived_removed = 163, + k_he4_ar36_to_p_k39_derived_removed = 164, + k_ca40_to_he4_ar36_derived_removed = 165, + k_ca40_to_p_k39_derived_removed = 166, + k_he4_ca40_to_p_sc43_derived_removed = 167, + k_ti44_to_he4_ca40_derived_removed = 168, + k_ti44_to_p_sc43_derived_removed = 169, + k_cr48_to_he4_ti44_derived_removed = 170, + k_cr48_to_p_v47_derived_removed = 171, + k_p_v47_to_he4_ti44_derived_removed = 172, + NumRates = k_p_v47_to_he4_ti44_derived_removed + }; + + // number of reaclib rates + + const int NrateReaclib = 154; + + // number of tabular rates + + const int NrateTabular = 10; + + // rate names -- note: the rates are 1-based, not zero-based, so we pad + // this vector with rate_names[0] = "" so the indices line up with the + // NetworkRates enum + + static const std::vector rate_names = { + "", // 0 + "p_c12_to_n13", // 1, + "he4_c12_to_o16", // 2, + "he4_n14_to_f18", // 3, + "he4_o16_to_ne20", // 4, + "he4_f18_to_na22", // 5, + "he4_ne20_to_mg24", // 6, + "p_ne21_to_na22", // 7, + "p_na23_to_mg24", // 8, + "he4_mg24_to_si28", // 9, + "p_al27_to_si28", // 10, + "he4_si28_to_s32", // 11, + "p_p31_to_s32", // 12, + "he4_cr48_to_fe52", // 13, + "p_mn51_to_fe52", // 14, + "he4_mn51_to_co55", // 15, + "he4_fe52_to_ni56", // 16, + "p_co55_to_ni56", // 17, + "he4_co55_to_cu59", // 18, + "he4_ni56_to_zn60", // 19, + "p_cu59_to_zn60", // 20, + "c12_c12_to_p_na23", // 21, + "c12_c12_to_he4_ne20", // 22, + "he4_n13_to_p_o16", // 23, + "c12_o16_to_p_al27", // 24, + "c12_o16_to_he4_mg24", // 25, + "o16_o16_to_p_p31", // 26, + "o16_o16_to_he4_si28", // 27, + "he4_f18_to_p_ne21", // 28, + "p_na23_to_he4_ne20", // 29, + "p_al27_to_he4_mg24", // 30, + "p_p31_to_he4_si28", // 31, + "he4_cr48_to_p_mn51", // 32, + "he4_fe52_to_p_co55", // 33, + "p_cu59_to_he4_ni56", // 34, + "he4_he4_he4_to_c12", // 35, + "c12_c12_to_mg24_modified", // 36, + "o16_o16_to_s32_modified", // 37, + "c12_o16_to_si28_modified", // 38, + "n_to_p_weak_wc12", // 39, + "p_mn55_to_fe56", // 40, + "n_fe52_to_fe53", // 41, + "n_fe53_to_fe54", // 42, + "he4_fe53_to_ni57", // 43, + "n_fe54_to_fe55", // 44, + "p_fe54_to_co55", // 45, + "he4_fe54_to_ni58", // 46, + "n_fe55_to_fe56", // 47, + "p_fe55_to_co56", // 48, + "p_fe56_to_co57", // 49, + "n_co55_to_co56", // 50, + "n_co56_to_co57", // 51, + "p_co56_to_ni57", // 52, + "p_co57_to_ni58", // 53, + "n_ni56_to_ni57", // 54, + "n_ni57_to_ni58", // 55, + "p_ni58_to_cu59", // 56, + "he4_mn51_to_p_fe54", // 57, + "he4_fe53_to_p_co56", // 58, + "n_fe55_to_p_mn55", // 59, + "n_co55_to_p_fe55", // 60, + "he4_co55_to_p_ni58", // 61, + "n_co56_to_p_fe56", // 62, + "p_co57_to_he4_fe54", // 63, + "n_ni56_to_p_co56", // 64, + "n_ni56_to_he4_fe53", // 65, + "n_ni57_to_p_co57", // 66, + "n_ni57_to_he4_fe54", // 67, + "n_ni58_to_he4_fe55", // 68, + "n_cu59_to_he4_co56", // 69, + "n_zn60_to_he4_ni57", // 70, + "he4_s32_to_ar36_removed", // 71, + "p_cl35_to_ar36_removed", // 72, + "p_cl35_to_he4_s32_removed", // 73, + "he4_ar36_to_ca40_removed", // 74, + "p_k39_to_ca40_removed", // 75, + "p_k39_to_he4_ar36_removed", // 76, + "he4_ca40_to_ti44_removed", // 77, + "p_sc43_to_ti44_removed", // 78, + "p_sc43_to_he4_ca40_removed", // 79, + "he4_ti44_to_cr48_removed", // 80, + "he4_ti44_to_p_v47_removed", // 81, + "p_v47_to_cr48_removed", // 82, + "co55_to_fe55", // 83, + "co56_to_fe56", // 84, + "co56_to_ni56", // 85, + "co57_to_ni57", // 86, + "fe55_to_co55", // 87, + "fe55_to_mn55", // 88, + "fe56_to_co56", // 89, + "mn55_to_fe55", // 90, + "ni56_to_co56", // 91, + "ni57_to_co57", // 92, + "s32_he4_to_ar36_approx", // 93, + "ar36_to_s32_he4_approx", // 94, + "ar36_he4_to_ca40_approx", // 95, + "ca40_to_ar36_he4_approx", // 96, + "ca40_he4_to_ti44_approx", // 97, + "ti44_to_ca40_he4_approx", // 98, + "ti44_he4_to_cr48_approx", // 99, + "cr48_to_ti44_he4_approx", // 100, + "n13_to_p_c12_derived", // 101, + "o16_to_he4_c12_derived", // 102, + "f18_to_he4_n14_derived", // 103, + "ne20_to_he4_o16_derived", // 104, + "na22_to_p_ne21_derived", // 105, + "na22_to_he4_f18_derived", // 106, + "mg24_to_p_na23_derived", // 107, + "mg24_to_he4_ne20_derived", // 108, + "si28_to_p_al27_derived", // 109, + "si28_to_he4_mg24_derived", // 110, + "s32_to_p_p31_derived", // 111, + "s32_to_he4_si28_derived", // 112, + "fe52_to_p_mn51_derived", // 113, + "fe52_to_he4_cr48_derived", // 114, + "co55_to_he4_mn51_derived", // 115, + "ni56_to_p_co55_derived", // 116, + "ni56_to_he4_fe52_derived", // 117, + "cu59_to_he4_co55_derived", // 118, + "zn60_to_p_cu59_derived", // 119, + "zn60_to_he4_ni56_derived", // 120, + "c12_to_he4_he4_he4_derived", // 121, + "p_o16_to_he4_n13_derived", // 122, + "he4_ne20_to_p_na23_derived", // 123, + "p_ne21_to_he4_f18_derived", // 124, + "he4_mg24_to_p_al27_derived", // 125, + "he4_si28_to_p_p31_derived", // 126, + "p_mn51_to_he4_cr48_derived", // 127, + "p_co55_to_he4_fe52_derived", // 128, + "he4_ni56_to_p_cu59_derived", // 129, + "fe53_to_n_fe52_derived", // 130, + "fe54_to_n_fe53_derived", // 131, + "fe55_to_n_fe54_derived", // 132, + "fe56_to_n_fe55_derived", // 133, + "fe56_to_p_mn55_derived", // 134, + "co55_to_p_fe54_derived", // 135, + "co56_to_n_co55_derived", // 136, + "co56_to_p_fe55_derived", // 137, + "co57_to_n_co56_derived", // 138, + "co57_to_p_fe56_derived", // 139, + "ni57_to_n_ni56_derived", // 140, + "ni57_to_p_co56_derived", // 141, + "ni57_to_he4_fe53_derived", // 142, + "ni58_to_n_ni57_derived", // 143, + "ni58_to_p_co57_derived", // 144, + "ni58_to_he4_fe54_derived", // 145, + "cu59_to_p_ni58_derived", // 146, + "p_mn55_to_n_fe55_derived", // 147, + "he4_fe53_to_n_ni56_derived", // 148, + "p_fe54_to_he4_mn51_derived", // 149, + "he4_fe54_to_n_ni57_derived", // 150, + "he4_fe54_to_p_co57_derived", // 151, + "p_fe55_to_n_co55_derived", // 152, + "he4_fe55_to_n_ni58_derived", // 153, + "p_fe56_to_n_co56_derived", // 154, + "p_co56_to_n_ni56_derived", // 155, + "p_co56_to_he4_fe53_derived", // 156, + "he4_co56_to_n_cu59_derived", // 157, + "p_co57_to_n_ni57_derived", // 158, + "he4_ni57_to_n_zn60_derived", // 159, + "p_ni58_to_he4_co55_derived", // 160, + "he4_s32_to_p_cl35_derived_removed", // 161, + "ar36_to_he4_s32_derived_removed", // 162, + "ar36_to_p_cl35_derived_removed", // 163, + "he4_ar36_to_p_k39_derived_removed", // 164, + "ca40_to_he4_ar36_derived_removed", // 165, + "ca40_to_p_k39_derived_removed", // 166, + "he4_ca40_to_p_sc43_derived_removed", // 167, + "ti44_to_he4_ca40_derived_removed", // 168, + "ti44_to_p_sc43_derived_removed", // 169, + "cr48_to_he4_ti44_derived_removed", // 170, + "cr48_to_p_v47_derived_removed", // 171, + "p_v47_to_he4_ti44_derived_removed" // 172, + }; + +} + +#ifdef NSE_NET +namespace NSE_INDEX +{ + constexpr int h1_index = 1; + constexpr int n_index = 0; + constexpr int he4_index = 2; + + // Each row corresponds to the rate in NetworkRates enum + // First 3 row indices for reactants, followed by 3 product indices + // last index is the corresponding reverse rate index. + + extern AMREX_GPU_MANAGED amrex::Array2D rate_indices; +} +#endif + +#endif diff --git a/networks/He-C-Fe-group/actual_network_data.cpp b/networks/He-C-Fe-group/actual_network_data.cpp new file mode 100644 index 0000000000..ee6d37c71b --- /dev/null +++ b/networks/He-C-Fe-group/actual_network_data.cpp @@ -0,0 +1,245 @@ +#include + + +namespace network +{ + AMREX_GPU_MANAGED amrex::Array1D bion; + AMREX_GPU_MANAGED amrex::Array1D mion; +} + +#ifdef NSE_NET +namespace NSE_INDEX +{ + AMREX_GPU_MANAGED amrex::Array2D rate_indices { + -1, 1, 3, -1, -1, 4, 101, + -1, 2, 3, -1, -1, 6, 102, + -1, 2, 5, -1, -1, 7, 103, + -1, 2, 6, -1, -1, 8, 104, + -1, 2, 7, -1, -1, 10, 106, + -1, 2, 8, -1, -1, 12, 108, + -1, 1, 9, -1, -1, 10, 105, + -1, 1, 11, -1, -1, 12, 107, + -1, 2, 12, -1, -1, 14, 110, + -1, 1, 13, -1, -1, 14, 109, + -1, 2, 14, -1, -1, 16, 112, + -1, 1, 15, -1, -1, 16, 111, + -1, 2, 20, -1, -1, 23, 114, + -1, 1, 21, -1, -1, 23, 113, + -1, 2, 21, -1, -1, 28, 115, + -1, 2, 23, -1, -1, 31, 117, + -1, 1, 28, -1, -1, 31, 116, + -1, 2, 28, -1, -1, 34, 118, + -1, 2, 31, -1, -1, 35, 120, + -1, 1, 34, -1, -1, 35, 119, + -1, 3, 3, -1, 1, 11, -1, + -1, 3, 3, -1, 2, 8, -1, + -1, 2, 4, -1, 1, 6, 122, + -1, 3, 6, -1, 1, 13, -1, + -1, 3, 6, -1, 2, 12, -1, + -1, 6, 6, -1, 1, 15, -1, + -1, 6, 6, -1, 2, 14, -1, + -1, 2, 7, -1, 1, 9, 124, + -1, 1, 11, -1, 2, 8, 123, + -1, 1, 13, -1, 2, 12, 125, + -1, 1, 15, -1, 2, 14, 126, + -1, 2, 20, -1, 1, 21, 127, + -1, 2, 23, -1, 1, 28, 128, + -1, 1, 34, -1, 2, 31, 129, + 2, 2, 2, -1, -1, 3, 121, + -1, 3, 3, -1, -1, 12, -1, + -1, 6, 6, -1, -1, 16, -1, + -1, 3, 6, -1, -1, 14, -1, + -1, -1, 0, -1, -1, 1, -1, + -1, 1, 22, -1, -1, 27, 134, + -1, 0, 23, -1, -1, 24, 130, + -1, 0, 24, -1, -1, 25, 131, + -1, 2, 24, -1, -1, 32, 142, + -1, 0, 25, -1, -1, 26, 132, + -1, 1, 25, -1, -1, 28, 135, + -1, 2, 25, -1, -1, 33, 145, + -1, 0, 26, -1, -1, 27, 133, + -1, 1, 26, -1, -1, 29, 137, + -1, 1, 27, -1, -1, 30, 139, + -1, 0, 28, -1, -1, 29, 136, + -1, 0, 29, -1, -1, 30, 138, + -1, 1, 29, -1, -1, 32, 141, + -1, 1, 30, -1, -1, 33, 144, + -1, 0, 31, -1, -1, 32, 140, + -1, 0, 32, -1, -1, 33, 143, + -1, 1, 33, -1, -1, 34, 146, + -1, 2, 21, -1, 1, 25, 149, + -1, 2, 24, -1, 1, 29, 156, + -1, 0, 26, -1, 1, 22, 147, + -1, 0, 28, -1, 1, 26, 152, + -1, 2, 28, -1, 1, 33, 160, + -1, 0, 29, -1, 1, 27, 154, + -1, 1, 30, -1, 2, 25, 151, + -1, 0, 31, -1, 1, 29, 155, + -1, 0, 31, -1, 2, 24, 148, + -1, 0, 32, -1, 1, 30, 158, + -1, 0, 32, -1, 2, 25, 150, + -1, 0, 33, -1, 2, 26, 153, + -1, 0, 34, -1, 2, 29, 157, + -1, 0, 35, -1, 2, 32, 159, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, 28, -1, -1, 26, 87, + -1, -1, 29, -1, -1, 27, 89, + -1, -1, 29, -1, -1, 31, -1, + -1, -1, 30, -1, -1, 32, -1, + -1, -1, 26, -1, -1, 28, -1, + -1, -1, 26, -1, -1, 22, 90, + -1, -1, 27, -1, -1, 29, -1, + -1, -1, 22, -1, -1, 26, -1, + -1, -1, 31, -1, -1, 29, 85, + -1, -1, 32, -1, -1, 30, 86, + -1, 2, 16, -1, -1, 17, 94, + -1, -1, 17, -1, 2, 16, -1, + -1, 2, 17, -1, -1, 18, 96, + -1, -1, 18, -1, 2, 17, -1, + -1, 2, 18, -1, -1, 19, 98, + -1, -1, 19, -1, 2, 18, -1, + -1, 2, 19, -1, -1, 20, 100, + -1, -1, 20, -1, 2, 19, -1, + -1, -1, 4, -1, 1, 3, -1, + -1, -1, 6, -1, 2, 3, -1, + -1, -1, 7, -1, 2, 5, -1, + -1, -1, 8, -1, 2, 6, -1, + -1, -1, 10, -1, 1, 9, -1, + -1, -1, 10, -1, 2, 7, -1, + -1, -1, 12, -1, 1, 11, -1, + -1, -1, 12, -1, 2, 8, -1, + -1, -1, 14, -1, 1, 13, -1, + -1, -1, 14, -1, 2, 12, -1, + -1, -1, 16, -1, 1, 15, -1, + -1, -1, 16, -1, 2, 14, -1, + -1, -1, 23, -1, 1, 21, -1, + -1, -1, 23, -1, 2, 20, -1, + -1, -1, 28, -1, 2, 21, -1, + -1, -1, 31, -1, 1, 28, -1, + -1, -1, 31, -1, 2, 23, -1, + -1, -1, 34, -1, 2, 28, -1, + -1, -1, 35, -1, 1, 34, -1, + -1, -1, 35, -1, 2, 31, -1, + -1, -1, 3, 2, 2, 2, -1, + -1, 1, 6, -1, 2, 4, -1, + -1, 2, 8, -1, 1, 11, -1, + -1, 1, 9, -1, 2, 7, -1, + -1, 2, 12, -1, 1, 13, -1, + -1, 2, 14, -1, 1, 15, -1, + -1, 1, 21, -1, 2, 20, -1, + -1, 1, 28, -1, 2, 23, -1, + -1, 2, 31, -1, 1, 34, -1, + -1, -1, 24, -1, 0, 23, -1, + -1, -1, 25, -1, 0, 24, -1, + -1, -1, 26, -1, 0, 25, -1, + -1, -1, 27, -1, 0, 26, -1, + -1, -1, 27, -1, 1, 22, -1, + -1, -1, 28, -1, 1, 25, -1, + -1, -1, 29, -1, 0, 28, -1, + -1, -1, 29, -1, 1, 26, -1, + -1, -1, 30, -1, 0, 29, -1, + -1, -1, 30, -1, 1, 27, -1, + -1, -1, 32, -1, 0, 31, -1, + -1, -1, 32, -1, 1, 29, -1, + -1, -1, 32, -1, 2, 24, -1, + -1, -1, 33, -1, 0, 32, -1, + -1, -1, 33, -1, 1, 30, -1, + -1, -1, 33, -1, 2, 25, -1, + -1, -1, 34, -1, 1, 33, -1, + -1, 1, 22, -1, 0, 26, -1, + -1, 2, 24, -1, 0, 31, -1, + -1, 1, 25, -1, 2, 21, -1, + -1, 2, 25, -1, 0, 32, -1, + -1, 2, 25, -1, 1, 30, -1, + -1, 1, 26, -1, 0, 28, -1, + -1, 2, 26, -1, 0, 33, -1, + -1, 1, 27, -1, 0, 29, -1, + -1, 1, 29, -1, 0, 31, -1, + -1, 1, 29, -1, 2, 24, -1, + -1, 2, 29, -1, 0, 34, -1, + -1, 1, 30, -1, 0, 32, -1, + -1, 2, 32, -1, 0, 35, -1, + -1, 1, 33, -1, 2, 28, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1 + }; +} +#endif + +void actual_network_init() +{ + using namespace Species; + using namespace network; + + // binding energies per nucleon in MeV + amrex::Array1D ebind_per_nucleon; + + ebind_per_nucleon(N) = 0.0_rt; + ebind_per_nucleon(H1) = 0.0_rt; + ebind_per_nucleon(He4) = 7.073915_rt; + ebind_per_nucleon(C12) = 7.680144_rt; + ebind_per_nucleon(N13) = 7.238863_rt; + ebind_per_nucleon(N14) = 7.475613999999999_rt; + ebind_per_nucleon(O16) = 7.976206_rt; + ebind_per_nucleon(F18) = 7.631638_rt; + ebind_per_nucleon(Ne20) = 8.03224_rt; + ebind_per_nucleon(Ne21) = 7.971712999999999_rt; + ebind_per_nucleon(Na22) = 7.915667_rt; + ebind_per_nucleon(Na23) = 8.111493000000001_rt; + ebind_per_nucleon(Mg24) = 8.260709_rt; + ebind_per_nucleon(Al27) = 8.331553_rt; + ebind_per_nucleon(Si28) = 8.447744_rt; + ebind_per_nucleon(P31) = 8.481167_rt; + ebind_per_nucleon(S32) = 8.493129000000001_rt; + ebind_per_nucleon(Ar36) = 8.519909_rt; + ebind_per_nucleon(Ca40) = 8.551303_rt; + ebind_per_nucleon(Ti44) = 8.533520000000001_rt; + ebind_per_nucleon(Cr48) = 8.572269_rt; + ebind_per_nucleon(Mn51) = 8.633772_rt; + ebind_per_nucleon(Mn55) = 8.765022_rt; + ebind_per_nucleon(Fe52) = 8.609574_rt; + ebind_per_nucleon(Fe53) = 8.648799_rt; + ebind_per_nucleon(Fe54) = 8.736381999999999_rt; + ebind_per_nucleon(Fe55) = 8.746595_rt; + ebind_per_nucleon(Fe56) = 8.790353999999999_rt; + ebind_per_nucleon(Co55) = 8.669618_rt; + ebind_per_nucleon(Co56) = 8.694835999999999_rt; + ebind_per_nucleon(Co57) = 8.741882_rt; + ebind_per_nucleon(Ni56) = 8.642779_rt; + ebind_per_nucleon(Ni57) = 8.670933000000002_rt; + ebind_per_nucleon(Ni58) = 8.732059_rt; + ebind_per_nucleon(Cu59) = 8.642_rt; + ebind_per_nucleon(Zn60) = 8.58305_rt; + + // convert to binding energies per nucleus in MeV + for (int i = 1; i <= NumSpec; ++i) { + bion(i) = ebind_per_nucleon(i) * aion[i-1]; + } + + // Set the mass -- this will be in grams + for (int i = 1; i <= NumSpec; ++i) { + mion(i) = (aion[i-1] - zion[i-1]) * C::Legacy::m_n + zion[i-1] * (C::Legacy::m_p + C::Legacy::m_e) - bion(i) * C::Legacy::MeV2gr; + } + +} diff --git a/networks/He-C-Fe-group/actual_rhs.H b/networks/He-C-Fe-group/actual_rhs.H new file mode 100644 index 0000000000..3e0bbfb218 --- /dev/null +++ b/networks/He-C-Fe-group/actual_rhs.H @@ -0,0 +1,2809 @@ +#ifndef actual_rhs_H +#define actual_rhs_H + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace amrex; +using namespace ArrayUtil; + +using namespace Species; +using namespace Rates; + +using namespace rate_tables; + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void ener_gener_rate(T const& dydt, Real& enuc) +{ + + // Computes the instantaneous energy generation rate (from the nuclei) + + // This is basically e = m c**2 + + enuc = 0.0_rt; + + for (int n = 1; n <= NumSpec; ++n) { + enuc += dydt(n) * network::mion(n); + } + + enuc *= C::Legacy::enuc_conv2; +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void evaluate_rates(const burn_t& state, T& rate_eval) { + + + // create molar fractions + + Array1D Y; + for (int n = 1; n <= NumSpec; ++n) { + Y(n) = state.xn[n-1] * aion_inv[n-1]; + } + + [[maybe_unused]] Real rhoy = state.rho * state.y_e; + + // Calculate Reaclib rates + + plasma_state_t pstate{}; + fill_plasma_state(pstate, state.T, state.rho, Y); + + tf_t tfactors = evaluate_tfactors(state.T); + + fill_reaclib_rates(tfactors, rate_eval); + + + + // Evaluate screening factors + + Real ratraw, dratraw_dT; + Real scor, dscor_dt; + [[maybe_unused]] Real scor2, dscor2_dt; + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 6.0_rt, 12.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_c12_to_n13); + rate_eval.screened_rates(k_p_c12_to_n13) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_c12_to_n13); + rate_eval.dscreened_rates_dT(k_p_c12_to_n13) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 6.0_rt, 12.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_c12_to_o16); + rate_eval.screened_rates(k_he4_c12_to_o16) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_c12_to_o16); + rate_eval.dscreened_rates_dT(k_he4_c12_to_o16) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 7.0_rt, 14.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_n14_to_f18); + rate_eval.screened_rates(k_he4_n14_to_f18) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_n14_to_f18); + rate_eval.dscreened_rates_dT(k_he4_n14_to_f18) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 8.0_rt, 16.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_o16_to_ne20); + rate_eval.screened_rates(k_he4_o16_to_ne20) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_o16_to_ne20); + rate_eval.dscreened_rates_dT(k_he4_o16_to_ne20) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 9.0_rt, 18.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_f18_to_na22); + rate_eval.screened_rates(k_he4_f18_to_na22) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_f18_to_na22); + rate_eval.dscreened_rates_dT(k_he4_f18_to_na22) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_f18_to_p_ne21); + rate_eval.screened_rates(k_he4_f18_to_p_ne21) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_f18_to_p_ne21); + rate_eval.dscreened_rates_dT(k_he4_f18_to_p_ne21) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 10.0_rt, 20.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ne20_to_mg24); + rate_eval.screened_rates(k_he4_ne20_to_mg24) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ne20_to_mg24); + rate_eval.dscreened_rates_dT(k_he4_ne20_to_mg24) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_ne20_to_p_na23_derived); + rate_eval.screened_rates(k_he4_ne20_to_p_na23_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ne20_to_p_na23_derived); + rate_eval.dscreened_rates_dT(k_he4_ne20_to_p_na23_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 10.0_rt, 21.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_ne21_to_na22); + rate_eval.screened_rates(k_p_ne21_to_na22) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_ne21_to_na22); + rate_eval.dscreened_rates_dT(k_p_ne21_to_na22) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_ne21_to_he4_f18_derived); + rate_eval.screened_rates(k_p_ne21_to_he4_f18_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_ne21_to_he4_f18_derived); + rate_eval.dscreened_rates_dT(k_p_ne21_to_he4_f18_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 11.0_rt, 23.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_na23_to_mg24); + rate_eval.screened_rates(k_p_na23_to_mg24) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_na23_to_mg24); + rate_eval.dscreened_rates_dT(k_p_na23_to_mg24) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_na23_to_he4_ne20); + rate_eval.screened_rates(k_p_na23_to_he4_ne20) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_na23_to_he4_ne20); + rate_eval.dscreened_rates_dT(k_p_na23_to_he4_ne20) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 12.0_rt, 24.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_mg24_to_si28); + rate_eval.screened_rates(k_he4_mg24_to_si28) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_mg24_to_si28); + rate_eval.dscreened_rates_dT(k_he4_mg24_to_si28) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_mg24_to_p_al27_derived); + rate_eval.screened_rates(k_he4_mg24_to_p_al27_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_mg24_to_p_al27_derived); + rate_eval.dscreened_rates_dT(k_he4_mg24_to_p_al27_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 13.0_rt, 27.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_al27_to_si28); + rate_eval.screened_rates(k_p_al27_to_si28) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_al27_to_si28); + rate_eval.dscreened_rates_dT(k_p_al27_to_si28) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_al27_to_he4_mg24); + rate_eval.screened_rates(k_p_al27_to_he4_mg24) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_al27_to_he4_mg24); + rate_eval.dscreened_rates_dT(k_p_al27_to_he4_mg24) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 14.0_rt, 28.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_si28_to_s32); + rate_eval.screened_rates(k_he4_si28_to_s32) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_si28_to_s32); + rate_eval.dscreened_rates_dT(k_he4_si28_to_s32) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_si28_to_p_p31_derived); + rate_eval.screened_rates(k_he4_si28_to_p_p31_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_si28_to_p_p31_derived); + rate_eval.dscreened_rates_dT(k_he4_si28_to_p_p31_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 15.0_rt, 31.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_p31_to_s32); + rate_eval.screened_rates(k_p_p31_to_s32) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p31_to_s32); + rate_eval.dscreened_rates_dT(k_p_p31_to_s32) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_p31_to_he4_si28); + rate_eval.screened_rates(k_p_p31_to_he4_si28) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_p31_to_he4_si28); + rate_eval.dscreened_rates_dT(k_p_p31_to_he4_si28) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 24.0_rt, 48.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_cr48_to_fe52); + rate_eval.screened_rates(k_he4_cr48_to_fe52) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_cr48_to_fe52); + rate_eval.dscreened_rates_dT(k_he4_cr48_to_fe52) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_cr48_to_p_mn51); + rate_eval.screened_rates(k_he4_cr48_to_p_mn51) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_cr48_to_p_mn51); + rate_eval.dscreened_rates_dT(k_he4_cr48_to_p_mn51) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 25.0_rt, 51.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_mn51_to_fe52); + rate_eval.screened_rates(k_p_mn51_to_fe52) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_mn51_to_fe52); + rate_eval.dscreened_rates_dT(k_p_mn51_to_fe52) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_mn51_to_he4_cr48_derived); + rate_eval.screened_rates(k_p_mn51_to_he4_cr48_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_mn51_to_he4_cr48_derived); + rate_eval.dscreened_rates_dT(k_p_mn51_to_he4_cr48_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 25.0_rt, 51.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_mn51_to_co55); + rate_eval.screened_rates(k_he4_mn51_to_co55) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_mn51_to_co55); + rate_eval.dscreened_rates_dT(k_he4_mn51_to_co55) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_mn51_to_p_fe54); + rate_eval.screened_rates(k_he4_mn51_to_p_fe54) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_mn51_to_p_fe54); + rate_eval.dscreened_rates_dT(k_he4_mn51_to_p_fe54) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 52.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_fe52_to_ni56); + rate_eval.screened_rates(k_he4_fe52_to_ni56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe52_to_ni56); + rate_eval.dscreened_rates_dT(k_he4_fe52_to_ni56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_fe52_to_p_co55); + rate_eval.screened_rates(k_he4_fe52_to_p_co55) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe52_to_p_co55); + rate_eval.dscreened_rates_dT(k_he4_fe52_to_p_co55) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 55.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_co55_to_ni56); + rate_eval.screened_rates(k_p_co55_to_ni56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co55_to_ni56); + rate_eval.dscreened_rates_dT(k_p_co55_to_ni56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_co55_to_he4_fe52_derived); + rate_eval.screened_rates(k_p_co55_to_he4_fe52_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co55_to_he4_fe52_derived); + rate_eval.dscreened_rates_dT(k_p_co55_to_he4_fe52_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 27.0_rt, 55.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_co55_to_cu59); + rate_eval.screened_rates(k_he4_co55_to_cu59) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_co55_to_cu59); + rate_eval.dscreened_rates_dT(k_he4_co55_to_cu59) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_co55_to_p_ni58); + rate_eval.screened_rates(k_he4_co55_to_p_ni58) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_co55_to_p_ni58); + rate_eval.dscreened_rates_dT(k_he4_co55_to_p_ni58) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 28.0_rt, 56.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ni56_to_zn60); + rate_eval.screened_rates(k_he4_ni56_to_zn60) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ni56_to_zn60); + rate_eval.dscreened_rates_dT(k_he4_ni56_to_zn60) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_ni56_to_p_cu59_derived); + rate_eval.screened_rates(k_he4_ni56_to_p_cu59_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ni56_to_p_cu59_derived); + rate_eval.dscreened_rates_dT(k_he4_ni56_to_p_cu59_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 29.0_rt, 59.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_cu59_to_zn60); + rate_eval.screened_rates(k_p_cu59_to_zn60) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_cu59_to_zn60); + rate_eval.dscreened_rates_dT(k_p_cu59_to_zn60) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_cu59_to_he4_ni56); + rate_eval.screened_rates(k_p_cu59_to_he4_ni56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_cu59_to_he4_ni56); + rate_eval.dscreened_rates_dT(k_p_cu59_to_he4_ni56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(6.0_rt, 12.0_rt, 6.0_rt, 12.0_rt); + + + static_assert(scn_fac.z1 == 6.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_c12_c12_to_p_na23); + rate_eval.screened_rates(k_c12_c12_to_p_na23) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_c12_to_p_na23); + rate_eval.dscreened_rates_dT(k_c12_c12_to_p_na23) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_c12_c12_to_he4_ne20); + rate_eval.screened_rates(k_c12_c12_to_he4_ne20) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_c12_to_he4_ne20); + rate_eval.dscreened_rates_dT(k_c12_c12_to_he4_ne20) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_c12_c12_to_mg24_modified); + rate_eval.screened_rates(k_c12_c12_to_mg24_modified) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_c12_to_mg24_modified); + rate_eval.dscreened_rates_dT(k_c12_c12_to_mg24_modified) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 7.0_rt, 13.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_n13_to_p_o16); + rate_eval.screened_rates(k_he4_n13_to_p_o16) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_n13_to_p_o16); + rate_eval.dscreened_rates_dT(k_he4_n13_to_p_o16) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(6.0_rt, 12.0_rt, 8.0_rt, 16.0_rt); + + + static_assert(scn_fac.z1 == 6.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_c12_o16_to_p_al27); + rate_eval.screened_rates(k_c12_o16_to_p_al27) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_o16_to_p_al27); + rate_eval.dscreened_rates_dT(k_c12_o16_to_p_al27) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_c12_o16_to_he4_mg24); + rate_eval.screened_rates(k_c12_o16_to_he4_mg24) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_o16_to_he4_mg24); + rate_eval.dscreened_rates_dT(k_c12_o16_to_he4_mg24) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_c12_o16_to_si28_modified); + rate_eval.screened_rates(k_c12_o16_to_si28_modified) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_c12_o16_to_si28_modified); + rate_eval.dscreened_rates_dT(k_c12_o16_to_si28_modified) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(8.0_rt, 16.0_rt, 8.0_rt, 16.0_rt); + + + static_assert(scn_fac.z1 == 8.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_o16_o16_to_p_p31); + rate_eval.screened_rates(k_o16_o16_to_p_p31) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_o16_o16_to_p_p31); + rate_eval.dscreened_rates_dT(k_o16_o16_to_p_p31) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_o16_o16_to_he4_si28); + rate_eval.screened_rates(k_o16_o16_to_he4_si28) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_o16_o16_to_he4_si28); + rate_eval.dscreened_rates_dT(k_o16_o16_to_he4_si28) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_o16_o16_to_s32_modified); + rate_eval.screened_rates(k_o16_o16_to_s32_modified) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_o16_o16_to_s32_modified); + rate_eval.dscreened_rates_dT(k_o16_o16_to_s32_modified) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 2.0_rt, 4.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + + { + constexpr auto scn_fac2 = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 4.0_rt, 8.0_rt); + + + static_assert(scn_fac2.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac2, scor2, dscor2_dt); + + } + + + ratraw = rate_eval.screened_rates(k_he4_he4_he4_to_c12); + rate_eval.screened_rates(k_he4_he4_he4_to_c12) *= scor * scor2; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_he4_he4_to_c12); + rate_eval.dscreened_rates_dT(k_he4_he4_he4_to_c12) = ratraw * (scor * dscor2_dt + dscor_dt * scor2) + dratraw_dT * scor * scor2; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 25.0_rt, 55.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_mn55_to_fe56); + rate_eval.screened_rates(k_p_mn55_to_fe56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_mn55_to_fe56); + rate_eval.dscreened_rates_dT(k_p_mn55_to_fe56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_mn55_to_n_fe55_derived); + rate_eval.screened_rates(k_p_mn55_to_n_fe55_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_mn55_to_n_fe55_derived); + rate_eval.dscreened_rates_dT(k_p_mn55_to_n_fe55_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 53.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_fe53_to_ni57); + rate_eval.screened_rates(k_he4_fe53_to_ni57) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe53_to_ni57); + rate_eval.dscreened_rates_dT(k_he4_fe53_to_ni57) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_fe53_to_p_co56); + rate_eval.screened_rates(k_he4_fe53_to_p_co56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe53_to_p_co56); + rate_eval.dscreened_rates_dT(k_he4_fe53_to_p_co56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_fe53_to_n_ni56_derived); + rate_eval.screened_rates(k_he4_fe53_to_n_ni56_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe53_to_n_ni56_derived); + rate_eval.dscreened_rates_dT(k_he4_fe53_to_n_ni56_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 54.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_fe54_to_co55); + rate_eval.screened_rates(k_p_fe54_to_co55) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe54_to_co55); + rate_eval.dscreened_rates_dT(k_p_fe54_to_co55) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_fe54_to_he4_mn51_derived); + rate_eval.screened_rates(k_p_fe54_to_he4_mn51_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe54_to_he4_mn51_derived); + rate_eval.dscreened_rates_dT(k_p_fe54_to_he4_mn51_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 54.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_fe54_to_ni58); + rate_eval.screened_rates(k_he4_fe54_to_ni58) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe54_to_ni58); + rate_eval.dscreened_rates_dT(k_he4_fe54_to_ni58) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_fe54_to_n_ni57_derived); + rate_eval.screened_rates(k_he4_fe54_to_n_ni57_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe54_to_n_ni57_derived); + rate_eval.dscreened_rates_dT(k_he4_fe54_to_n_ni57_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_fe54_to_p_co57_derived); + rate_eval.screened_rates(k_he4_fe54_to_p_co57_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe54_to_p_co57_derived); + rate_eval.dscreened_rates_dT(k_he4_fe54_to_p_co57_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 55.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_fe55_to_co56); + rate_eval.screened_rates(k_p_fe55_to_co56) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe55_to_co56); + rate_eval.dscreened_rates_dT(k_p_fe55_to_co56) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_fe55_to_n_co55_derived); + rate_eval.screened_rates(k_p_fe55_to_n_co55_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe55_to_n_co55_derived); + rate_eval.dscreened_rates_dT(k_p_fe55_to_n_co55_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 26.0_rt, 56.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_fe56_to_co57); + rate_eval.screened_rates(k_p_fe56_to_co57) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe56_to_co57); + rate_eval.dscreened_rates_dT(k_p_fe56_to_co57) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_fe56_to_n_co56_derived); + rate_eval.screened_rates(k_p_fe56_to_n_co56_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_fe56_to_n_co56_derived); + rate_eval.dscreened_rates_dT(k_p_fe56_to_n_co56_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 56.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_co56_to_ni57); + rate_eval.screened_rates(k_p_co56_to_ni57) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co56_to_ni57); + rate_eval.dscreened_rates_dT(k_p_co56_to_ni57) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_co56_to_n_ni56_derived); + rate_eval.screened_rates(k_p_co56_to_n_ni56_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co56_to_n_ni56_derived); + rate_eval.dscreened_rates_dT(k_p_co56_to_n_ni56_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_co56_to_he4_fe53_derived); + rate_eval.screened_rates(k_p_co56_to_he4_fe53_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co56_to_he4_fe53_derived); + rate_eval.dscreened_rates_dT(k_p_co56_to_he4_fe53_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 27.0_rt, 57.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_co57_to_ni58); + rate_eval.screened_rates(k_p_co57_to_ni58) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co57_to_ni58); + rate_eval.dscreened_rates_dT(k_p_co57_to_ni58) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_co57_to_he4_fe54); + rate_eval.screened_rates(k_p_co57_to_he4_fe54) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co57_to_he4_fe54); + rate_eval.dscreened_rates_dT(k_p_co57_to_he4_fe54) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_co57_to_n_ni57_derived); + rate_eval.screened_rates(k_p_co57_to_n_ni57_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_co57_to_n_ni57_derived); + rate_eval.dscreened_rates_dT(k_p_co57_to_n_ni57_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 28.0_rt, 58.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_ni58_to_cu59); + rate_eval.screened_rates(k_p_ni58_to_cu59) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_ni58_to_cu59); + rate_eval.dscreened_rates_dT(k_p_ni58_to_cu59) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_ni58_to_he4_co55_derived); + rate_eval.screened_rates(k_p_ni58_to_he4_co55_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_ni58_to_he4_co55_derived); + rate_eval.dscreened_rates_dT(k_p_ni58_to_he4_co55_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 8.0_rt, 16.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_o16_to_he4_n13_derived); + rate_eval.screened_rates(k_p_o16_to_he4_n13_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_o16_to_he4_n13_derived); + rate_eval.dscreened_rates_dT(k_p_o16_to_he4_n13_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 26.0_rt, 55.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_fe55_to_n_ni58_derived); + rate_eval.screened_rates(k_he4_fe55_to_n_ni58_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_fe55_to_n_ni58_derived); + rate_eval.dscreened_rates_dT(k_he4_fe55_to_n_ni58_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 27.0_rt, 56.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_co56_to_n_cu59_derived); + rate_eval.screened_rates(k_he4_co56_to_n_cu59_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_co56_to_n_cu59_derived); + rate_eval.dscreened_rates_dT(k_he4_co56_to_n_cu59_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 28.0_rt, 57.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ni57_to_n_zn60_derived); + rate_eval.screened_rates(k_he4_ni57_to_n_zn60_derived) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ni57_to_n_zn60_derived); + rate_eval.dscreened_rates_dT(k_he4_ni57_to_n_zn60_derived) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 16.0_rt, 32.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_s32_to_ar36_removed); + rate_eval.screened_rates(k_he4_s32_to_ar36_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_s32_to_ar36_removed); + rate_eval.dscreened_rates_dT(k_he4_s32_to_ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_s32_to_p_cl35_derived_removed); + rate_eval.screened_rates(k_he4_s32_to_p_cl35_derived_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_s32_to_p_cl35_derived_removed); + rate_eval.dscreened_rates_dT(k_he4_s32_to_p_cl35_derived_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 17.0_rt, 35.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_cl35_to_ar36_removed); + rate_eval.screened_rates(k_p_cl35_to_ar36_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_cl35_to_ar36_removed); + rate_eval.dscreened_rates_dT(k_p_cl35_to_ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_cl35_to_he4_s32_removed); + rate_eval.screened_rates(k_p_cl35_to_he4_s32_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_cl35_to_he4_s32_removed); + rate_eval.dscreened_rates_dT(k_p_cl35_to_he4_s32_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 18.0_rt, 36.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ar36_to_ca40_removed); + rate_eval.screened_rates(k_he4_ar36_to_ca40_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ar36_to_ca40_removed); + rate_eval.dscreened_rates_dT(k_he4_ar36_to_ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_ar36_to_p_k39_derived_removed); + rate_eval.screened_rates(k_he4_ar36_to_p_k39_derived_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ar36_to_p_k39_derived_removed); + rate_eval.dscreened_rates_dT(k_he4_ar36_to_p_k39_derived_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 19.0_rt, 39.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_k39_to_ca40_removed); + rate_eval.screened_rates(k_p_k39_to_ca40_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_k39_to_ca40_removed); + rate_eval.dscreened_rates_dT(k_p_k39_to_ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_k39_to_he4_ar36_removed); + rate_eval.screened_rates(k_p_k39_to_he4_ar36_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_k39_to_he4_ar36_removed); + rate_eval.dscreened_rates_dT(k_p_k39_to_he4_ar36_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 20.0_rt, 40.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ca40_to_ti44_removed); + rate_eval.screened_rates(k_he4_ca40_to_ti44_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ca40_to_ti44_removed); + rate_eval.dscreened_rates_dT(k_he4_ca40_to_ti44_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_ca40_to_p_sc43_derived_removed); + rate_eval.screened_rates(k_he4_ca40_to_p_sc43_derived_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ca40_to_p_sc43_derived_removed); + rate_eval.dscreened_rates_dT(k_he4_ca40_to_p_sc43_derived_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 21.0_rt, 43.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_sc43_to_ti44_removed); + rate_eval.screened_rates(k_p_sc43_to_ti44_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_sc43_to_ti44_removed); + rate_eval.dscreened_rates_dT(k_p_sc43_to_ti44_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_sc43_to_he4_ca40_removed); + rate_eval.screened_rates(k_p_sc43_to_he4_ca40_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_sc43_to_he4_ca40_removed); + rate_eval.dscreened_rates_dT(k_p_sc43_to_he4_ca40_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(2.0_rt, 4.0_rt, 22.0_rt, 44.0_rt); + + + static_assert(scn_fac.z1 == 2.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_he4_ti44_to_cr48_removed); + rate_eval.screened_rates(k_he4_ti44_to_cr48_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ti44_to_cr48_removed); + rate_eval.dscreened_rates_dT(k_he4_ti44_to_cr48_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_he4_ti44_to_p_v47_removed); + rate_eval.screened_rates(k_he4_ti44_to_p_v47_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_he4_ti44_to_p_v47_removed); + rate_eval.dscreened_rates_dT(k_he4_ti44_to_p_v47_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + { + constexpr auto scn_fac = scrn::calculate_screen_factor(1.0_rt, 1.0_rt, 23.0_rt, 47.0_rt); + + + static_assert(scn_fac.z1 == 1.0_rt); + + + actual_screen(pstate, scn_fac, scor, dscor_dt); + } + + + ratraw = rate_eval.screened_rates(k_p_v47_to_cr48_removed); + rate_eval.screened_rates(k_p_v47_to_cr48_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_v47_to_cr48_removed); + rate_eval.dscreened_rates_dT(k_p_v47_to_cr48_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + ratraw = rate_eval.screened_rates(k_p_v47_to_he4_ti44_derived_removed); + rate_eval.screened_rates(k_p_v47_to_he4_ti44_derived_removed) *= scor; + if constexpr (std::is_same::value) { + dratraw_dT = rate_eval.dscreened_rates_dT(k_p_v47_to_he4_ti44_derived_removed); + rate_eval.dscreened_rates_dT(k_p_v47_to_he4_ti44_derived_removed) = ratraw * dscor_dt + dratraw_dT * scor; + } + + + // Fill approximate rates + + fill_approx_rates(tfactors, rate_eval); + + // Calculate tabular rates + + [[maybe_unused]] Real rate, drate_dt, edot_nu, edot_gamma; + + tabular_evaluate(j_co55_fe55_meta, j_co55_fe55_rhoy, j_co55_fe55_temp, j_co55_fe55_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_co55_to_fe55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co55_to_fe55) = drate_dt; + } + rate_eval.add_energy_rate(k_co55_to_fe55) = edot_nu + edot_gamma; + + tabular_evaluate(j_co56_fe56_meta, j_co56_fe56_rhoy, j_co56_fe56_temp, j_co56_fe56_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_co56_to_fe56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co56_to_fe56) = drate_dt; + } + rate_eval.add_energy_rate(k_co56_to_fe56) = edot_nu + edot_gamma; + + tabular_evaluate(j_co56_ni56_meta, j_co56_ni56_rhoy, j_co56_ni56_temp, j_co56_ni56_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_co56_to_ni56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co56_to_ni56) = drate_dt; + } + rate_eval.add_energy_rate(k_co56_to_ni56) = edot_nu + edot_gamma; + + tabular_evaluate(j_co57_ni57_meta, j_co57_ni57_rhoy, j_co57_ni57_temp, j_co57_ni57_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_co57_to_ni57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co57_to_ni57) = drate_dt; + } + rate_eval.add_energy_rate(k_co57_to_ni57) = edot_nu + edot_gamma; + + tabular_evaluate(j_fe55_co55_meta, j_fe55_co55_rhoy, j_fe55_co55_temp, j_fe55_co55_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_fe55_to_co55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe55_to_co55) = drate_dt; + } + rate_eval.add_energy_rate(k_fe55_to_co55) = edot_nu + edot_gamma; + + tabular_evaluate(j_fe55_mn55_meta, j_fe55_mn55_rhoy, j_fe55_mn55_temp, j_fe55_mn55_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_fe55_to_mn55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe55_to_mn55) = drate_dt; + } + rate_eval.add_energy_rate(k_fe55_to_mn55) = edot_nu + edot_gamma; + + tabular_evaluate(j_fe56_co56_meta, j_fe56_co56_rhoy, j_fe56_co56_temp, j_fe56_co56_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_fe56_to_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe56_to_co56) = drate_dt; + } + rate_eval.add_energy_rate(k_fe56_to_co56) = edot_nu + edot_gamma; + + tabular_evaluate(j_mn55_fe55_meta, j_mn55_fe55_rhoy, j_mn55_fe55_temp, j_mn55_fe55_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_mn55_to_fe55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_mn55_to_fe55) = drate_dt; + } + rate_eval.add_energy_rate(k_mn55_to_fe55) = edot_nu + edot_gamma; + + tabular_evaluate(j_ni56_co56_meta, j_ni56_co56_rhoy, j_ni56_co56_temp, j_ni56_co56_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_ni56_to_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni56_to_co56) = drate_dt; + } + rate_eval.add_energy_rate(k_ni56_to_co56) = edot_nu + edot_gamma; + + tabular_evaluate(j_ni57_co57_meta, j_ni57_co57_rhoy, j_ni57_co57_temp, j_ni57_co57_data, + rhoy, state.T, rate, drate_dt, edot_nu, edot_gamma); + rate_eval.screened_rates(k_ni57_to_co57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni57_to_co57) = drate_dt; + } + rate_eval.add_energy_rate(k_ni57_to_co57) = edot_nu + edot_gamma; + + +} + +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rhs_nuc(const burn_t& state, + Array1D& ydot_nuc, + const Array1D& Y, + const Array1D& screened_rates) { + + using namespace Rates; + + ydot_nuc(N) = + -screened_rates(k_n_to_p_weak_wc12)*Y(N) + + (-screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*Y(N)*state.rho + screened_rates(k_fe53_to_n_fe52_derived)*Y(Fe53)) + + (-screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*Y(N)*state.rho + screened_rates(k_fe54_to_n_fe53_derived)*Y(Fe54)) + + (-screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*Y(N)*state.rho + screened_rates(k_fe55_to_n_fe54_derived)*Y(Fe55)) + + (-screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*Y(N)*state.rho + screened_rates(k_fe56_to_n_fe55_derived)*Y(Fe56)) + + (-screened_rates(k_n_co55_to_co56)*Y(Co55)*Y(N)*state.rho + screened_rates(k_co56_to_n_co55_derived)*Y(Co56)) + + (-screened_rates(k_n_co56_to_co57)*Y(Co56)*Y(N)*state.rho + screened_rates(k_co57_to_n_co56_derived)*Y(Co57)) + + (-screened_rates(k_n_ni56_to_ni57)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_ni57_to_n_ni56_derived)*Y(Ni57)) + + (-screened_rates(k_n_ni57_to_ni58)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_ni58_to_n_ni57_derived)*Y(Ni58)) + + (-screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*Y(N)*state.rho + screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*Y(H1)*state.rho) + + (-screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*Y(N)*state.rho + screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*Y(H1)*state.rho) + + (-screened_rates(k_n_co56_to_p_fe56)*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)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*Y(H1)*state.rho) + + (-screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*Y(He4)*state.rho) + + (-screened_rates(k_n_ni57_to_p_co57)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*Y(H1)*state.rho) + + (-screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*Y(He4)*state.rho) + + (-screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*Y(Ni58)*state.rho + screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*Y(He4)*state.rho) + + (-screened_rates(k_n_cu59_to_he4_co56)*Y(Cu59)*Y(N)*state.rho + screened_rates(k_he4_co56_to_n_cu59_derived)*Y(Co56)*Y(He4)*state.rho) + + (-screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*Y(Zn60)*state.rho + screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*Y(Ni57)*state.rho); + + ydot_nuc(H1) = + (-screened_rates(k_p_c12_to_n13)*Y(C12)*Y(H1)*state.rho + screened_rates(k_n13_to_p_c12_derived)*Y(N13)) + + (-screened_rates(k_p_ne21_to_na22)*Y(Ne21)*Y(H1)*state.rho + screened_rates(k_na22_to_p_ne21_derived)*Y(Na22)) + + (-screened_rates(k_p_na23_to_mg24)*Y(Na23)*Y(H1)*state.rho + screened_rates(k_mg24_to_p_na23_derived)*Y(Mg24)) + + (-screened_rates(k_p_al27_to_si28)*Y(Al27)*Y(H1)*state.rho + screened_rates(k_si28_to_p_al27_derived)*Y(Si28)) + + (-screened_rates(k_p_p31_to_s32)*Y(P31)*Y(H1)*state.rho + screened_rates(k_s32_to_p_p31_derived)*Y(S32)) + + (-screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*Y(H1)*state.rho + screened_rates(k_fe52_to_p_mn51_derived)*Y(Fe52)) + + (-screened_rates(k_p_co55_to_ni56)*Y(Co55)*Y(H1)*state.rho + screened_rates(k_ni56_to_p_co55_derived)*Y(Ni56)) + + (-screened_rates(k_p_cu59_to_zn60)*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)*std::pow(Y(C12), 2)*state.rho + + (screened_rates(k_he4_n13_to_p_o16)*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)*Y(C12)*Y(O16)*state.rho + + 0.5*screened_rates(k_o16_o16_to_p_p31)*std::pow(Y(O16), 2)*state.rho + + (screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*Y(He4)*state.rho + -screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*Y(H1)*state.rho) + + (-screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*Y(H1)*state.rho + screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*Y(Ne20)*state.rho) + + (-screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*Y(H1)*state.rho + screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*Y(Mg24)*state.rho) + + (-screened_rates(k_p_p31_to_he4_si28)*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)*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)*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)*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_to_p_weak_wc12)*Y(N) + + (-screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*Y(H1)*state.rho + screened_rates(k_fe56_to_p_mn55_derived)*Y(Fe56)) + + (-screened_rates(k_p_fe54_to_co55)*Y(Fe54)*Y(H1)*state.rho + screened_rates(k_co55_to_p_fe54_derived)*Y(Co55)) + + (-screened_rates(k_p_fe55_to_co56)*Y(Fe55)*Y(H1)*state.rho + screened_rates(k_co56_to_p_fe55_derived)*Y(Co56)) + + (-screened_rates(k_p_fe56_to_co57)*Y(Fe56)*Y(H1)*state.rho + screened_rates(k_co57_to_p_fe56_derived)*Y(Co57)) + + (-screened_rates(k_p_co56_to_ni57)*Y(Co56)*Y(H1)*state.rho + screened_rates(k_ni57_to_p_co56_derived)*Y(Ni57)) + + (-screened_rates(k_p_co57_to_ni58)*Y(Co57)*Y(H1)*state.rho + screened_rates(k_ni58_to_p_co57_derived)*Y(Ni58)) + + (-screened_rates(k_p_ni58_to_cu59)*Y(Ni58)*Y(H1)*state.rho + screened_rates(k_cu59_to_p_ni58_derived)*Y(Cu59)) + + (screened_rates(k_he4_mn51_to_p_fe54)*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_fe53_to_p_co56)*Y(Fe53)*Y(He4)*state.rho + -screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*Y(H1)*state.rho) + + (screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*Y(N)*state.rho + -screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*Y(H1)*state.rho) + + (screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*Y(N)*state.rho + -screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*Y(H1)*state.rho) + + (screened_rates(k_he4_co55_to_p_ni58)*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)*Y(Co56)*Y(N)*state.rho + -screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*Y(H1)*state.rho) + + (-screened_rates(k_p_co57_to_he4_fe54)*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_ni56_to_p_co56)*Y(N)*Y(Ni56)*state.rho + -screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*Y(H1)*state.rho) + + (screened_rates(k_n_ni57_to_p_co57)*Y(N)*Y(Ni57)*state.rho + -screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*Y(H1)*state.rho); + + ydot_nuc(He4) = + (-screened_rates(k_he4_c12_to_o16)*Y(C12)*Y(He4)*state.rho + screened_rates(k_o16_to_he4_c12_derived)*Y(O16)) + + (-screened_rates(k_he4_n14_to_f18)*Y(He4)*Y(N14)*state.rho + screened_rates(k_f18_to_he4_n14_derived)*Y(F18)) + + (-screened_rates(k_he4_o16_to_ne20)*Y(He4)*Y(O16)*state.rho + screened_rates(k_ne20_to_he4_o16_derived)*Y(Ne20)) + + (-screened_rates(k_he4_f18_to_na22)*Y(F18)*Y(He4)*state.rho + screened_rates(k_na22_to_he4_f18_derived)*Y(Na22)) + + (-screened_rates(k_he4_ne20_to_mg24)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_mg24_to_he4_ne20_derived)*Y(Mg24)) + + (-screened_rates(k_he4_mg24_to_si28)*Y(He4)*Y(Mg24)*state.rho + screened_rates(k_si28_to_he4_mg24_derived)*Y(Si28)) + + (-screened_rates(k_he4_si28_to_s32)*Y(He4)*Y(Si28)*state.rho + screened_rates(k_s32_to_he4_si28_derived)*Y(S32)) + + (-screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*Y(He4)*state.rho + screened_rates(k_fe52_to_he4_cr48_derived)*Y(Fe52)) + + (-screened_rates(k_he4_mn51_to_co55)*Y(He4)*Y(Mn51)*state.rho + screened_rates(k_co55_to_he4_mn51_derived)*Y(Co55)) + + (-screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*Y(He4)*state.rho + screened_rates(k_ni56_to_he4_fe52_derived)*Y(Ni56)) + + (-screened_rates(k_he4_co55_to_cu59)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_cu59_to_he4_co55_derived)*Y(Cu59)) + + (-screened_rates(k_he4_ni56_to_zn60)*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)*std::pow(Y(C12), 2)*state.rho + + (-screened_rates(k_he4_n13_to_p_o16)*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)*Y(C12)*Y(O16)*state.rho + + 0.5*screened_rates(k_o16_o16_to_he4_si28)*std::pow(Y(O16), 2)*state.rho + + (-screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*Y(He4)*state.rho + screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*Y(H1)*state.rho) + + (screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*Y(H1)*state.rho + -screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*Y(Ne20)*state.rho) + + (screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*Y(H1)*state.rho + -screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*Y(Mg24)*state.rho) + + (screened_rates(k_p_p31_to_he4_si28)*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)*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)*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)*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)*std::pow(Y(He4), 3)*std::pow(state.rho, 2) + 3.0*screened_rates(k_c12_to_he4_he4_he4_derived)*Y(C12)) + + (-screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*Y(He4)*state.rho + screened_rates(k_ni57_to_he4_fe53_derived)*Y(Ni57)) + + (-screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*Y(He4)*state.rho + screened_rates(k_ni58_to_he4_fe54_derived)*Y(Ni58)) + + (-screened_rates(k_he4_mn51_to_p_fe54)*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_fe53_to_p_co56)*Y(Fe53)*Y(He4)*state.rho + screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*Y(H1)*state.rho) + + (-screened_rates(k_he4_co55_to_p_ni58)*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)*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_ni56_to_he4_fe53)*Y(N)*Y(Ni56)*state.rho + -screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*Y(He4)*state.rho) + + (screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*Y(Ni57)*state.rho + -screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*Y(He4)*state.rho) + + (screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*Y(Ni58)*state.rho + -screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*Y(He4)*state.rho) + + (screened_rates(k_n_cu59_to_he4_co56)*Y(Cu59)*Y(N)*state.rho + -screened_rates(k_he4_co56_to_n_cu59_derived)*Y(Co56)*Y(He4)*state.rho) + + (screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*Y(Zn60)*state.rho + -screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*Y(Ni57)*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)) + + (-screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*Y(Ti44)*state.rho + screened_rates(k_cr48_to_ti44_he4_approx)*Y(Cr48)); + + ydot_nuc(C12) = + (-screened_rates(k_p_c12_to_n13)*Y(C12)*Y(H1)*state.rho + screened_rates(k_n13_to_p_c12_derived)*Y(N13)) + + (-screened_rates(k_he4_c12_to_o16)*Y(C12)*Y(He4)*state.rho + screened_rates(k_o16_to_he4_c12_derived)*Y(O16)) + + -screened_rates(k_c12_c12_to_p_na23)*std::pow(Y(C12), 2)*state.rho + + -screened_rates(k_c12_c12_to_he4_ne20)*std::pow(Y(C12), 2)*state.rho + + -screened_rates(k_c12_o16_to_p_al27)*Y(C12)*Y(O16)*state.rho + + -screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*Y(O16)*state.rho + + (0.16666666666666667*screened_rates(k_he4_he4_he4_to_c12)*std::pow(Y(He4), 3)*std::pow(state.rho, 2) + -screened_rates(k_c12_to_he4_he4_he4_derived)*Y(C12)) + + -screened_rates(k_c12_c12_to_mg24_modified)*std::pow(Y(C12), 2)*state.rho + + -screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*Y(O16)*state.rho; + + ydot_nuc(N13) = + (screened_rates(k_p_c12_to_n13)*Y(C12)*Y(H1)*state.rho + -screened_rates(k_n13_to_p_c12_derived)*Y(N13)) + + (-screened_rates(k_he4_n13_to_p_o16)*Y(He4)*Y(N13)*state.rho + screened_rates(k_p_o16_to_he4_n13_derived)*Y(O16)*Y(H1)*state.rho); + + ydot_nuc(N14) = + (-screened_rates(k_he4_n14_to_f18)*Y(He4)*Y(N14)*state.rho + screened_rates(k_f18_to_he4_n14_derived)*Y(F18)); + + ydot_nuc(O16) = + (screened_rates(k_he4_c12_to_o16)*Y(C12)*Y(He4)*state.rho + -screened_rates(k_o16_to_he4_c12_derived)*Y(O16)) + + (-screened_rates(k_he4_o16_to_ne20)*Y(He4)*Y(O16)*state.rho + screened_rates(k_ne20_to_he4_o16_derived)*Y(Ne20)) + + (screened_rates(k_he4_n13_to_p_o16)*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)*Y(C12)*Y(O16)*state.rho + + -screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*Y(O16)*state.rho + + -screened_rates(k_o16_o16_to_p_p31)*std::pow(Y(O16), 2)*state.rho + + -screened_rates(k_o16_o16_to_he4_si28)*std::pow(Y(O16), 2)*state.rho + + -screened_rates(k_o16_o16_to_s32_modified)*std::pow(Y(O16), 2)*state.rho + + -screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*Y(O16)*state.rho; + + ydot_nuc(F18) = + (screened_rates(k_he4_n14_to_f18)*Y(He4)*Y(N14)*state.rho + -screened_rates(k_f18_to_he4_n14_derived)*Y(F18)) + + (-screened_rates(k_he4_f18_to_na22)*Y(F18)*Y(He4)*state.rho + screened_rates(k_na22_to_he4_f18_derived)*Y(Na22)) + + (-screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*Y(He4)*state.rho + screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*Y(H1)*state.rho); + + ydot_nuc(Ne20) = + (screened_rates(k_he4_o16_to_ne20)*Y(He4)*Y(O16)*state.rho + -screened_rates(k_ne20_to_he4_o16_derived)*Y(Ne20)) + + (-screened_rates(k_he4_ne20_to_mg24)*Y(He4)*Y(Ne20)*state.rho + screened_rates(k_mg24_to_he4_ne20_derived)*Y(Mg24)) + + 0.5*screened_rates(k_c12_c12_to_he4_ne20)*std::pow(Y(C12), 2)*state.rho + + (screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*Y(H1)*state.rho + -screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*Y(Ne20)*state.rho); + + ydot_nuc(Ne21) = + (-screened_rates(k_p_ne21_to_na22)*Y(Ne21)*Y(H1)*state.rho + screened_rates(k_na22_to_p_ne21_derived)*Y(Na22)) + + (screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*Y(He4)*state.rho + -screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*Y(H1)*state.rho); + + ydot_nuc(Na22) = + (screened_rates(k_he4_f18_to_na22)*Y(F18)*Y(He4)*state.rho + -screened_rates(k_na22_to_he4_f18_derived)*Y(Na22)) + + (screened_rates(k_p_ne21_to_na22)*Y(Ne21)*Y(H1)*state.rho + -screened_rates(k_na22_to_p_ne21_derived)*Y(Na22)); + + ydot_nuc(Na23) = + (-screened_rates(k_p_na23_to_mg24)*Y(Na23)*Y(H1)*state.rho + screened_rates(k_mg24_to_p_na23_derived)*Y(Mg24)) + + 0.5*screened_rates(k_c12_c12_to_p_na23)*std::pow(Y(C12), 2)*state.rho + + (-screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*Y(H1)*state.rho + screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*Y(Ne20)*state.rho); + + ydot_nuc(Mg24) = + (screened_rates(k_he4_ne20_to_mg24)*Y(He4)*Y(Ne20)*state.rho + -screened_rates(k_mg24_to_he4_ne20_derived)*Y(Mg24)) + + (screened_rates(k_p_na23_to_mg24)*Y(Na23)*Y(H1)*state.rho + -screened_rates(k_mg24_to_p_na23_derived)*Y(Mg24)) + + (-screened_rates(k_he4_mg24_to_si28)*Y(He4)*Y(Mg24)*state.rho + screened_rates(k_si28_to_he4_mg24_derived)*Y(Si28)) + + screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*Y(O16)*state.rho + + (screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*Y(H1)*state.rho + -screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*Y(Mg24)*state.rho) + + 0.5*screened_rates(k_c12_c12_to_mg24_modified)*std::pow(Y(C12), 2)*state.rho; + + ydot_nuc(Al27) = + (-screened_rates(k_p_al27_to_si28)*Y(Al27)*Y(H1)*state.rho + screened_rates(k_si28_to_p_al27_derived)*Y(Si28)) + + screened_rates(k_c12_o16_to_p_al27)*Y(C12)*Y(O16)*state.rho + + (-screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*Y(H1)*state.rho + screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*Y(Mg24)*state.rho); + + ydot_nuc(Si28) = + (screened_rates(k_he4_mg24_to_si28)*Y(He4)*Y(Mg24)*state.rho + -screened_rates(k_si28_to_he4_mg24_derived)*Y(Si28)) + + (screened_rates(k_p_al27_to_si28)*Y(Al27)*Y(H1)*state.rho + -screened_rates(k_si28_to_p_al27_derived)*Y(Si28)) + + (-screened_rates(k_he4_si28_to_s32)*Y(He4)*Y(Si28)*state.rho + screened_rates(k_s32_to_he4_si28_derived)*Y(S32)) + + 0.5*screened_rates(k_o16_o16_to_he4_si28)*std::pow(Y(O16), 2)*state.rho + + (screened_rates(k_p_p31_to_he4_si28)*Y(P31)*Y(H1)*state.rho + -screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*Y(Si28)*state.rho) + + screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*Y(O16)*state.rho; + + ydot_nuc(P31) = + (-screened_rates(k_p_p31_to_s32)*Y(P31)*Y(H1)*state.rho + screened_rates(k_s32_to_p_p31_derived)*Y(S32)) + + 0.5*screened_rates(k_o16_o16_to_p_p31)*std::pow(Y(O16), 2)*state.rho + + (-screened_rates(k_p_p31_to_he4_si28)*Y(P31)*Y(H1)*state.rho + screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*Y(Si28)*state.rho); + + ydot_nuc(S32) = + (screened_rates(k_he4_si28_to_s32)*Y(He4)*Y(Si28)*state.rho + -screened_rates(k_s32_to_he4_si28_derived)*Y(S32)) + + (screened_rates(k_p_p31_to_s32)*Y(P31)*Y(H1)*state.rho + -screened_rates(k_s32_to_p_p31_derived)*Y(S32)) + + 0.5*screened_rates(k_o16_o16_to_s32_modified)*std::pow(Y(O16), 2)*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)); + + ydot_nuc(Ar36) = + (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)); + + ydot_nuc(Ca40) = + (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)); + + ydot_nuc(Ti44) = + (screened_rates(k_ca40_he4_to_ti44_approx)*Y(Ca40)*Y(He4)*state.rho + -screened_rates(k_ti44_to_ca40_he4_approx)*Y(Ti44)) + + (-screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*Y(Ti44)*state.rho + screened_rates(k_cr48_to_ti44_he4_approx)*Y(Cr48)); + + ydot_nuc(Cr48) = + (-screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*Y(He4)*state.rho + screened_rates(k_fe52_to_he4_cr48_derived)*Y(Fe52)) + + (-screened_rates(k_he4_cr48_to_p_mn51)*Y(Cr48)*Y(He4)*state.rho + screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(Mn51)*Y(H1)*state.rho) + + (screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*Y(Ti44)*state.rho + -screened_rates(k_cr48_to_ti44_he4_approx)*Y(Cr48)); + + ydot_nuc(Mn51) = + (-screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*Y(H1)*state.rho + screened_rates(k_fe52_to_p_mn51_derived)*Y(Fe52)) + + (-screened_rates(k_he4_mn51_to_co55)*Y(He4)*Y(Mn51)*state.rho + screened_rates(k_co55_to_he4_mn51_derived)*Y(Co55)) + + (screened_rates(k_he4_cr48_to_p_mn51)*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_mn51_to_p_fe54)*Y(He4)*Y(Mn51)*state.rho + screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(Fe54)*Y(H1)*state.rho); + + ydot_nuc(Mn55) = + (-screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*Y(H1)*state.rho + screened_rates(k_fe56_to_p_mn55_derived)*Y(Fe56)) + + (screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*Y(N)*state.rho + -screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*Y(H1)*state.rho) + + (screened_rates(k_fe55_to_mn55)*Y(Fe55) + -screened_rates(k_mn55_to_fe55)*Y(Mn55)); + + ydot_nuc(Fe52) = + (screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*Y(He4)*state.rho + -screened_rates(k_fe52_to_he4_cr48_derived)*Y(Fe52)) + + (screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*Y(H1)*state.rho + -screened_rates(k_fe52_to_p_mn51_derived)*Y(Fe52)) + + (-screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*Y(He4)*state.rho + screened_rates(k_ni56_to_he4_fe52_derived)*Y(Ni56)) + + (-screened_rates(k_he4_fe52_to_p_co55)*Y(Fe52)*Y(He4)*state.rho + screened_rates(k_p_co55_to_he4_fe52_derived)*Y(Co55)*Y(H1)*state.rho) + + (-screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*Y(N)*state.rho + screened_rates(k_fe53_to_n_fe52_derived)*Y(Fe53)); + + ydot_nuc(Fe53) = + (screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*Y(N)*state.rho + -screened_rates(k_fe53_to_n_fe52_derived)*Y(Fe53)) + + (-screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*Y(N)*state.rho + screened_rates(k_fe54_to_n_fe53_derived)*Y(Fe54)) + + (-screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*Y(He4)*state.rho + screened_rates(k_ni57_to_he4_fe53_derived)*Y(Ni57)) + + (-screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*Y(He4)*state.rho + screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*Y(H1)*state.rho) + + (screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*Y(Ni56)*state.rho + -screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*Y(He4)*state.rho); + + ydot_nuc(Fe54) = + (screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*Y(N)*state.rho + -screened_rates(k_fe54_to_n_fe53_derived)*Y(Fe54)) + + (-screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*Y(N)*state.rho + screened_rates(k_fe55_to_n_fe54_derived)*Y(Fe55)) + + (-screened_rates(k_p_fe54_to_co55)*Y(Fe54)*Y(H1)*state.rho + screened_rates(k_co55_to_p_fe54_derived)*Y(Co55)) + + (-screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*Y(He4)*state.rho + screened_rates(k_ni58_to_he4_fe54_derived)*Y(Ni58)) + + (screened_rates(k_he4_mn51_to_p_fe54)*Y(He4)*Y(Mn51)*state.rho + -screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(Fe54)*Y(H1)*state.rho) + + (screened_rates(k_p_co57_to_he4_fe54)*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_ni57_to_he4_fe54)*Y(N)*Y(Ni57)*state.rho + -screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*Y(He4)*state.rho); + + ydot_nuc(Fe55) = + (screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*Y(N)*state.rho + -screened_rates(k_fe55_to_n_fe54_derived)*Y(Fe55)) + + (-screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*Y(N)*state.rho + screened_rates(k_fe56_to_n_fe55_derived)*Y(Fe56)) + + (-screened_rates(k_p_fe55_to_co56)*Y(Fe55)*Y(H1)*state.rho + screened_rates(k_co56_to_p_fe55_derived)*Y(Co56)) + + (-screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*Y(N)*state.rho + screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*Y(H1)*state.rho) + + (screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*Y(N)*state.rho + -screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*Y(H1)*state.rho) + + (screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*Y(Ni58)*state.rho + -screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*Y(He4)*state.rho) + + (screened_rates(k_co55_to_fe55)*Y(Co55) + -screened_rates(k_fe55_to_co55)*Y(Fe55)) + + (-screened_rates(k_fe55_to_mn55)*Y(Fe55) + screened_rates(k_mn55_to_fe55)*Y(Mn55)); + + ydot_nuc(Fe56) = + (screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*Y(H1)*state.rho + -screened_rates(k_fe56_to_p_mn55_derived)*Y(Fe56)) + + (screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*Y(N)*state.rho + -screened_rates(k_fe56_to_n_fe55_derived)*Y(Fe56)) + + (-screened_rates(k_p_fe56_to_co57)*Y(Fe56)*Y(H1)*state.rho + screened_rates(k_co57_to_p_fe56_derived)*Y(Co57)) + + (screened_rates(k_n_co56_to_p_fe56)*Y(Co56)*Y(N)*state.rho + -screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*Y(H1)*state.rho) + + (screened_rates(k_co56_to_fe56)*Y(Co56) + -screened_rates(k_fe56_to_co56)*Y(Fe56)); + + ydot_nuc(Co55) = + (screened_rates(k_he4_mn51_to_co55)*Y(He4)*Y(Mn51)*state.rho + -screened_rates(k_co55_to_he4_mn51_derived)*Y(Co55)) + + (-screened_rates(k_p_co55_to_ni56)*Y(Co55)*Y(H1)*state.rho + screened_rates(k_ni56_to_p_co55_derived)*Y(Ni56)) + + (-screened_rates(k_he4_co55_to_cu59)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_cu59_to_he4_co55_derived)*Y(Cu59)) + + (screened_rates(k_he4_fe52_to_p_co55)*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)*Y(Fe54)*Y(H1)*state.rho + -screened_rates(k_co55_to_p_fe54_derived)*Y(Co55)) + + (-screened_rates(k_n_co55_to_co56)*Y(Co55)*Y(N)*state.rho + screened_rates(k_co56_to_n_co55_derived)*Y(Co56)) + + (-screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*Y(N)*state.rho + screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*Y(H1)*state.rho) + + (-screened_rates(k_he4_co55_to_p_ni58)*Y(Co55)*Y(He4)*state.rho + screened_rates(k_p_ni58_to_he4_co55_derived)*Y(Ni58)*Y(H1)*state.rho) + + (-screened_rates(k_co55_to_fe55)*Y(Co55) + screened_rates(k_fe55_to_co55)*Y(Fe55)); + + ydot_nuc(Co56) = + (screened_rates(k_p_fe55_to_co56)*Y(Fe55)*Y(H1)*state.rho + -screened_rates(k_co56_to_p_fe55_derived)*Y(Co56)) + + (screened_rates(k_n_co55_to_co56)*Y(Co55)*Y(N)*state.rho + -screened_rates(k_co56_to_n_co55_derived)*Y(Co56)) + + (-screened_rates(k_n_co56_to_co57)*Y(Co56)*Y(N)*state.rho + screened_rates(k_co57_to_n_co56_derived)*Y(Co57)) + + (-screened_rates(k_p_co56_to_ni57)*Y(Co56)*Y(H1)*state.rho + screened_rates(k_ni57_to_p_co56_derived)*Y(Ni57)) + + (screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*Y(He4)*state.rho + -screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*Y(H1)*state.rho) + + (-screened_rates(k_n_co56_to_p_fe56)*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)*Y(N)*Y(Ni56)*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)*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)*Y(Co56) + screened_rates(k_fe56_to_co56)*Y(Fe56)) + + (screened_rates(k_ni56_to_co56)*Y(Ni56) + -screened_rates(k_co56_to_ni56)*Y(Co56)); + + ydot_nuc(Co57) = + (screened_rates(k_p_fe56_to_co57)*Y(Fe56)*Y(H1)*state.rho + -screened_rates(k_co57_to_p_fe56_derived)*Y(Co57)) + + (screened_rates(k_n_co56_to_co57)*Y(Co56)*Y(N)*state.rho + -screened_rates(k_co57_to_n_co56_derived)*Y(Co57)) + + (-screened_rates(k_p_co57_to_ni58)*Y(Co57)*Y(H1)*state.rho + screened_rates(k_ni58_to_p_co57_derived)*Y(Ni58)) + + (-screened_rates(k_p_co57_to_he4_fe54)*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_ni57_to_p_co57)*Y(N)*Y(Ni57)*state.rho + -screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*Y(H1)*state.rho) + + (screened_rates(k_ni57_to_co57)*Y(Ni57) + -screened_rates(k_co57_to_ni57)*Y(Co57)); + + ydot_nuc(Ni56) = + (screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*Y(He4)*state.rho + -screened_rates(k_ni56_to_he4_fe52_derived)*Y(Ni56)) + + (screened_rates(k_p_co55_to_ni56)*Y(Co55)*Y(H1)*state.rho + -screened_rates(k_ni56_to_p_co55_derived)*Y(Ni56)) + + (-screened_rates(k_he4_ni56_to_zn60)*Y(He4)*Y(Ni56)*state.rho + screened_rates(k_zn60_to_he4_ni56_derived)*Y(Zn60)) + + (screened_rates(k_p_cu59_to_he4_ni56)*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_ni57)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_ni57_to_n_ni56_derived)*Y(Ni57)) + + (-screened_rates(k_n_ni56_to_p_co56)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*Y(H1)*state.rho) + + (-screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*Y(Ni56)*state.rho + screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*Y(He4)*state.rho) + + (-screened_rates(k_ni56_to_co56)*Y(Ni56) + screened_rates(k_co56_to_ni56)*Y(Co56)); + + ydot_nuc(Ni57) = + (screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*Y(He4)*state.rho + -screened_rates(k_ni57_to_he4_fe53_derived)*Y(Ni57)) + + (screened_rates(k_p_co56_to_ni57)*Y(Co56)*Y(H1)*state.rho + -screened_rates(k_ni57_to_p_co56_derived)*Y(Ni57)) + + (screened_rates(k_n_ni56_to_ni57)*Y(N)*Y(Ni56)*state.rho + -screened_rates(k_ni57_to_n_ni56_derived)*Y(Ni57)) + + (-screened_rates(k_n_ni57_to_ni58)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_ni58_to_n_ni57_derived)*Y(Ni58)) + + (-screened_rates(k_n_ni57_to_p_co57)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*Y(H1)*state.rho) + + (-screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*Y(Ni57)*state.rho + screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*Y(He4)*state.rho) + + (screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*Y(Zn60)*state.rho + -screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*Y(Ni57)*state.rho) + + (-screened_rates(k_ni57_to_co57)*Y(Ni57) + screened_rates(k_co57_to_ni57)*Y(Co57)); + + ydot_nuc(Ni58) = + (screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*Y(He4)*state.rho + -screened_rates(k_ni58_to_he4_fe54_derived)*Y(Ni58)) + + (screened_rates(k_p_co57_to_ni58)*Y(Co57)*Y(H1)*state.rho + -screened_rates(k_ni58_to_p_co57_derived)*Y(Ni58)) + + (screened_rates(k_n_ni57_to_ni58)*Y(N)*Y(Ni57)*state.rho + -screened_rates(k_ni58_to_n_ni57_derived)*Y(Ni58)) + + (-screened_rates(k_p_ni58_to_cu59)*Y(Ni58)*Y(H1)*state.rho + screened_rates(k_cu59_to_p_ni58_derived)*Y(Cu59)) + + (screened_rates(k_he4_co55_to_p_ni58)*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_ni58_to_he4_fe55)*Y(N)*Y(Ni58)*state.rho + screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*Y(He4)*state.rho); + + ydot_nuc(Cu59) = + (screened_rates(k_he4_co55_to_cu59)*Y(Co55)*Y(He4)*state.rho + -screened_rates(k_cu59_to_he4_co55_derived)*Y(Cu59)) + + (-screened_rates(k_p_cu59_to_zn60)*Y(Cu59)*Y(H1)*state.rho + screened_rates(k_zn60_to_p_cu59_derived)*Y(Zn60)) + + (-screened_rates(k_p_cu59_to_he4_ni56)*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)*Y(Ni58)*Y(H1)*state.rho + -screened_rates(k_cu59_to_p_ni58_derived)*Y(Cu59)) + + (-screened_rates(k_n_cu59_to_he4_co56)*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)*Y(He4)*Y(Ni56)*state.rho + -screened_rates(k_zn60_to_he4_ni56_derived)*Y(Zn60)) + + (screened_rates(k_p_cu59_to_zn60)*Y(Cu59)*Y(H1)*state.rho + -screened_rates(k_zn60_to_p_cu59_derived)*Y(Zn60)) + + (-screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*Y(Zn60)*state.rho + screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*Y(Ni57)*state.rho); + +} + + +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void actual_rhs (burn_t& state, Array1D& ydot) +{ + for (int i = 1; i <= neqs; ++i) { + ydot(i) = 0.0_rt; + } + + + // Set molar abundances + Array1D Y; + for (int i = 1; i <= NumSpec; ++i) { + Y(i) = state.xn[i-1] * aion_inv[i-1]; + } + + // build the rates + + rate_t rate_eval; + + constexpr int do_T_derivatives = 0; + evaluate_rates(state, rate_eval); + + rhs_nuc(state, ydot, Y, rate_eval.screened_rates); + + // ion binding energy contributions + + Real enuc; + ener_gener_rate(ydot, enuc); + + // include reaction neutrino losses (non-thermal) and gamma heating + enuc += C::Legacy::n_A * Y(Co55) * rate_eval.add_energy_rate(k_co55_to_fe55); + enuc += C::Legacy::n_A * Y(Co56) * rate_eval.add_energy_rate(k_co56_to_fe56); + enuc += C::Legacy::n_A * Y(Co56) * rate_eval.add_energy_rate(k_co56_to_ni56); + enuc += C::Legacy::n_A * Y(Co57) * rate_eval.add_energy_rate(k_co57_to_ni57); + enuc += C::Legacy::n_A * Y(Fe55) * rate_eval.add_energy_rate(k_fe55_to_co55); + enuc += C::Legacy::n_A * Y(Fe55) * rate_eval.add_energy_rate(k_fe55_to_mn55); + enuc += C::Legacy::n_A * Y(Fe56) * rate_eval.add_energy_rate(k_fe56_to_co56); + enuc += C::Legacy::n_A * Y(Mn55) * rate_eval.add_energy_rate(k_mn55_to_fe55); + enuc += C::Legacy::n_A * Y(Ni56) * rate_eval.add_energy_rate(k_ni56_to_co56); + enuc += C::Legacy::n_A * Y(Ni57) * rate_eval.add_energy_rate(k_ni57_to_co57); + + // Get the thermal neutrino losses + + Real sneut, dsneutdt, dsneutdd, dsnuda, dsnudz; + constexpr int do_derivatives{0}; + sneut5(state.T, state.rho, state.abar, state.zbar, sneut, dsneutdt, dsneutdd, dsnuda, dsnudz); + + // Append the energy equation (this is erg/g/s) + + ydot(net_ienuc) = enuc - sneut; + +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void jac_nuc(const burn_t& state, + MatrixType& jac, + const Array1D& Y, + const Array1D& screened_rates) +{ + + Real scratch; + + scratch = -screened_rates(k_n_co55_to_co56)*Y(Co55)*state.rho - screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*state.rho - screened_rates(k_n_co56_to_co57)*Y(Co56)*state.rho - screened_rates(k_n_co56_to_p_fe56)*Y(Co56)*state.rho - screened_rates(k_n_cu59_to_he4_co56)*Y(Cu59)*state.rho - screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*state.rho - screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*state.rho - screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*state.rho - screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*state.rho - screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*state.rho - screened_rates(k_n_ni56_to_he4_fe53)*Y(Ni56)*state.rho - screened_rates(k_n_ni56_to_ni57)*Y(Ni56)*state.rho - screened_rates(k_n_ni56_to_p_co56)*Y(Ni56)*state.rho - screened_rates(k_n_ni57_to_he4_fe54)*Y(Ni57)*state.rho - screened_rates(k_n_ni57_to_ni58)*Y(Ni57)*state.rho - screened_rates(k_n_ni57_to_p_co57)*Y(Ni57)*state.rho - screened_rates(k_n_ni58_to_he4_fe55)*Y(Ni58)*state.rho - screened_rates(k_n_to_p_weak_wc12) - screened_rates(k_n_zn60_to_he4_ni57)*Y(Zn60)*state.rho; + jac.set(N, N, scratch); + + scratch = screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*state.rho + screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*state.rho + screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*state.rho + screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*state.rho + screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*state.rho; + jac.set(N, H1, scratch); + + scratch = screened_rates(k_he4_co56_to_n_cu59_derived)*Y(Co56)*state.rho + screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*state.rho + screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*state.rho + screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*state.rho + screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(Ni57)*state.rho; + jac.set(N, He4, scratch); + + scratch = screened_rates(k_p_mn55_to_n_fe55_derived)*Y(H1)*state.rho; + jac.set(N, Mn55, scratch); + + scratch = -screened_rates(k_n_fe52_to_fe53)*Y(N)*state.rho; + jac.set(N, Fe52, scratch); + + scratch = screened_rates(k_fe53_to_n_fe52_derived) + screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(He4)*state.rho - screened_rates(k_n_fe53_to_fe54)*Y(N)*state.rho; + jac.set(N, Fe53, scratch); + + scratch = screened_rates(k_fe54_to_n_fe53_derived) + screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(He4)*state.rho - screened_rates(k_n_fe54_to_fe55)*Y(N)*state.rho; + jac.set(N, Fe54, scratch); + + scratch = screened_rates(k_fe55_to_n_fe54_derived) + screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(He4)*state.rho - screened_rates(k_n_fe55_to_fe56)*Y(N)*state.rho - screened_rates(k_n_fe55_to_p_mn55)*Y(N)*state.rho + screened_rates(k_p_fe55_to_n_co55_derived)*Y(H1)*state.rho; + jac.set(N, Fe55, scratch); + + scratch = screened_rates(k_fe56_to_n_fe55_derived) + screened_rates(k_p_fe56_to_n_co56_derived)*Y(H1)*state.rho; + jac.set(N, Fe56, scratch); + + scratch = -screened_rates(k_n_co55_to_co56)*Y(N)*state.rho - screened_rates(k_n_co55_to_p_fe55)*Y(N)*state.rho; + jac.set(N, Co55, scratch); + + 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)*Y(N)*state.rho - screened_rates(k_n_co56_to_p_fe56)*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) + screened_rates(k_p_co57_to_n_ni57_derived)*Y(H1)*state.rho; + jac.set(N, Co57, scratch); + + scratch = -screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*state.rho - screened_rates(k_n_ni56_to_ni57)*Y(N)*state.rho - screened_rates(k_n_ni56_to_p_co56)*Y(N)*state.rho; + jac.set(N, Ni56, scratch); + + scratch = screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*state.rho - screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*state.rho - screened_rates(k_n_ni57_to_ni58)*Y(N)*state.rho - screened_rates(k_n_ni57_to_p_co57)*Y(N)*state.rho + screened_rates(k_ni57_to_n_ni56_derived); + jac.set(N, Ni57, scratch); + + scratch = -screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*state.rho + screened_rates(k_ni58_to_n_ni57_derived); + jac.set(N, Ni58, scratch); + + scratch = -screened_rates(k_n_cu59_to_he4_co56)*Y(N)*state.rho; + jac.set(N, Cu59, scratch); + + scratch = -screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*state.rho; + jac.set(N, Zn60, scratch); + + scratch = screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*state.rho + screened_rates(k_n_co56_to_p_fe56)*Y(Co56)*state.rho + screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*state.rho + screened_rates(k_n_ni56_to_p_co56)*Y(Ni56)*state.rho + screened_rates(k_n_ni57_to_p_co57)*Y(Ni57)*state.rho + screened_rates(k_n_to_p_weak_wc12); + jac.set(H1, N, scratch); + + scratch = -screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*state.rho - screened_rates(k_p_al27_to_si28)*Y(Al27)*state.rho - screened_rates(k_p_c12_to_n13)*Y(C12)*state.rho - screened_rates(k_p_co55_to_he4_fe52_derived)*Y(Co55)*state.rho - screened_rates(k_p_co55_to_ni56)*Y(Co55)*state.rho - screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*state.rho - screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*state.rho - screened_rates(k_p_co56_to_ni57)*Y(Co56)*state.rho - screened_rates(k_p_co57_to_he4_fe54)*Y(Co57)*state.rho - screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*state.rho - screened_rates(k_p_co57_to_ni58)*Y(Co57)*state.rho - screened_rates(k_p_cu59_to_he4_ni56)*Y(Cu59)*state.rho - screened_rates(k_p_cu59_to_zn60)*Y(Cu59)*state.rho - screened_rates(k_p_fe54_to_co55)*Y(Fe54)*state.rho - screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(Fe54)*state.rho - screened_rates(k_p_fe55_to_co56)*Y(Fe55)*state.rho - screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*state.rho - screened_rates(k_p_fe56_to_co57)*Y(Fe56)*state.rho - screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*state.rho - screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*state.rho - screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(Mn51)*state.rho - screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*state.rho - screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*state.rho - screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*state.rho - screened_rates(k_p_na23_to_mg24)*Y(Na23)*state.rho - screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*state.rho - screened_rates(k_p_ne21_to_na22)*Y(Ne21)*state.rho - screened_rates(k_p_ni58_to_cu59)*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)*Y(P31)*state.rho - screened_rates(k_p_p31_to_s32)*Y(P31)*state.rho; + jac.set(H1, H1, scratch); + + scratch = screened_rates(k_he4_co55_to_p_ni58)*Y(Co55)*state.rho + screened_rates(k_he4_cr48_to_p_mn51)*Y(Cr48)*state.rho + screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*state.rho + screened_rates(k_he4_fe52_to_p_co55)*Y(Fe52)*state.rho + screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*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)*Y(Mn51)*state.rho + screened_rates(k_he4_n13_to_p_o16)*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)*Y(C12)*state.rho + screened_rates(k_c12_o16_to_p_al27)*Y(O16)*state.rho - screened_rates(k_p_c12_to_n13)*Y(H1)*state.rho; + jac.set(H1, C12, scratch); + + scratch = screened_rates(k_he4_n13_to_p_o16)*Y(He4)*state.rho + screened_rates(k_n13_to_p_c12_derived); + jac.set(H1, N13, scratch); + + scratch = screened_rates(k_c12_o16_to_p_al27)*Y(C12)*state.rho + 1.0*screened_rates(k_o16_o16_to_p_p31)*Y(O16)*state.rho - screened_rates(k_p_o16_to_he4_n13_derived)*Y(H1)*state.rho; + jac.set(H1, O16, scratch); + + scratch = screened_rates(k_he4_f18_to_p_ne21)*Y(He4)*state.rho; + jac.set(H1, F18, scratch); + + scratch = screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*state.rho; + jac.set(H1, Ne20, scratch); + + scratch = -screened_rates(k_p_ne21_to_he4_f18_derived)*Y(H1)*state.rho - screened_rates(k_p_ne21_to_na22)*Y(H1)*state.rho; + jac.set(H1, Ne21, scratch); + + scratch = screened_rates(k_na22_to_p_ne21_derived); + jac.set(H1, Na22, scratch); + + scratch = -screened_rates(k_p_na23_to_he4_ne20)*Y(H1)*state.rho - screened_rates(k_p_na23_to_mg24)*Y(H1)*state.rho; + jac.set(H1, Na23, scratch); + + scratch = screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*state.rho + screened_rates(k_mg24_to_p_na23_derived); + jac.set(H1, Mg24, scratch); + + scratch = -screened_rates(k_p_al27_to_he4_mg24)*Y(H1)*state.rho - screened_rates(k_p_al27_to_si28)*Y(H1)*state.rho; + jac.set(H1, Al27, scratch); + + scratch = screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*state.rho + screened_rates(k_si28_to_p_al27_derived); + jac.set(H1, Si28, scratch); + + scratch = -screened_rates(k_p_p31_to_he4_si28)*Y(H1)*state.rho - screened_rates(k_p_p31_to_s32)*Y(H1)*state.rho; + jac.set(H1, P31, scratch); + + scratch = screened_rates(k_s32_to_p_p31_derived); + jac.set(H1, S32, scratch); + + scratch = screened_rates(k_he4_cr48_to_p_mn51)*Y(He4)*state.rho; + jac.set(H1, Cr48, scratch); + + scratch = screened_rates(k_he4_mn51_to_p_fe54)*Y(He4)*state.rho - screened_rates(k_p_mn51_to_fe52)*Y(H1)*state.rho - screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(H1)*state.rho; + jac.set(H1, Mn51, scratch); + + scratch = -screened_rates(k_p_mn55_to_fe56)*Y(H1)*state.rho - screened_rates(k_p_mn55_to_n_fe55_derived)*Y(H1)*state.rho; + jac.set(H1, Mn55, scratch); + + scratch = screened_rates(k_fe52_to_p_mn51_derived) + screened_rates(k_he4_fe52_to_p_co55)*Y(He4)*state.rho; + jac.set(H1, Fe52, scratch); + + scratch = screened_rates(k_he4_fe53_to_p_co56)*Y(He4)*state.rho; + jac.set(H1, Fe53, scratch); + + scratch = screened_rates(k_he4_fe54_to_p_co57_derived)*Y(He4)*state.rho - screened_rates(k_p_fe54_to_co55)*Y(H1)*state.rho - screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(H1)*state.rho; + jac.set(H1, Fe54, scratch); + + scratch = screened_rates(k_n_fe55_to_p_mn55)*Y(N)*state.rho - screened_rates(k_p_fe55_to_co56)*Y(H1)*state.rho - screened_rates(k_p_fe55_to_n_co55_derived)*Y(H1)*state.rho; + jac.set(H1, Fe55, scratch); + + scratch = screened_rates(k_fe56_to_p_mn55_derived) - screened_rates(k_p_fe56_to_co57)*Y(H1)*state.rho - screened_rates(k_p_fe56_to_n_co56_derived)*Y(H1)*state.rho; + jac.set(H1, Fe56, scratch); + + scratch = screened_rates(k_co55_to_p_fe54_derived) + screened_rates(k_he4_co55_to_p_ni58)*Y(He4)*state.rho + screened_rates(k_n_co55_to_p_fe55)*Y(N)*state.rho - screened_rates(k_p_co55_to_he4_fe52_derived)*Y(H1)*state.rho - screened_rates(k_p_co55_to_ni56)*Y(H1)*state.rho; + jac.set(H1, Co55, scratch); + + scratch = screened_rates(k_co56_to_p_fe55_derived) + screened_rates(k_n_co56_to_p_fe56)*Y(N)*state.rho - screened_rates(k_p_co56_to_he4_fe53_derived)*Y(H1)*state.rho - screened_rates(k_p_co56_to_n_ni56_derived)*Y(H1)*state.rho - screened_rates(k_p_co56_to_ni57)*Y(H1)*state.rho; + jac.set(H1, Co56, scratch); + + scratch = screened_rates(k_co57_to_p_fe56_derived) - screened_rates(k_p_co57_to_he4_fe54)*Y(H1)*state.rho - screened_rates(k_p_co57_to_n_ni57_derived)*Y(H1)*state.rho - screened_rates(k_p_co57_to_ni58)*Y(H1)*state.rho; + jac.set(H1, Co57, scratch); + + scratch = screened_rates(k_he4_ni56_to_p_cu59_derived)*Y(He4)*state.rho + screened_rates(k_n_ni56_to_p_co56)*Y(N)*state.rho + screened_rates(k_ni56_to_p_co55_derived); + jac.set(H1, Ni56, scratch); + + scratch = screened_rates(k_n_ni57_to_p_co57)*Y(N)*state.rho + screened_rates(k_ni57_to_p_co56_derived); + jac.set(H1, Ni57, scratch); + + scratch = screened_rates(k_ni58_to_p_co57_derived) - screened_rates(k_p_ni58_to_cu59)*Y(H1)*state.rho - screened_rates(k_p_ni58_to_he4_co55_derived)*Y(H1)*state.rho; + jac.set(H1, Ni58, scratch); + + scratch = screened_rates(k_cu59_to_p_ni58_derived) - screened_rates(k_p_cu59_to_he4_ni56)*Y(H1)*state.rho - screened_rates(k_p_cu59_to_zn60)*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_n_cu59_to_he4_co56)*Y(Cu59)*state.rho + screened_rates(k_n_ni56_to_he4_fe53)*Y(Ni56)*state.rho + screened_rates(k_n_ni57_to_he4_fe54)*Y(Ni57)*state.rho + screened_rates(k_n_ni58_to_he4_fe55)*Y(Ni58)*state.rho + screened_rates(k_n_zn60_to_he4_ni57)*Y(Zn60)*state.rho; + jac.set(He4, N, scratch); + + scratch = screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*state.rho + screened_rates(k_p_co55_to_he4_fe52_derived)*Y(Co55)*state.rho + screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*state.rho + screened_rates(k_p_co57_to_he4_fe54)*Y(Co57)*state.rho + screened_rates(k_p_cu59_to_he4_ni56)*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)*Y(Na23)*state.rho + screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*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)*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)*Y(C12)*state.rho - screened_rates(k_he4_co55_to_cu59)*Y(Co55)*state.rho - screened_rates(k_he4_co55_to_p_ni58)*Y(Co55)*state.rho - screened_rates(k_he4_co56_to_n_cu59_derived)*Y(Co56)*state.rho - screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*state.rho - screened_rates(k_he4_cr48_to_p_mn51)*Y(Cr48)*state.rho - screened_rates(k_he4_f18_to_na22)*Y(F18)*state.rho - screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*state.rho - screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*state.rho - screened_rates(k_he4_fe52_to_p_co55)*Y(Fe52)*state.rho - screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*state.rho - screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*state.rho - screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*state.rho - screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*state.rho - screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*state.rho - screened_rates(k_he4_fe54_to_p_co57_derived)*Y(Fe54)*state.rho - screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*state.rho - 1.5*screened_rates(k_he4_he4_he4_to_c12)*std::pow(Y(He4), 2)*std::pow(state.rho, 2) - screened_rates(k_he4_mg24_to_p_al27_derived)*Y(Mg24)*state.rho - screened_rates(k_he4_mg24_to_si28)*Y(Mg24)*state.rho - screened_rates(k_he4_mn51_to_co55)*Y(Mn51)*state.rho - screened_rates(k_he4_mn51_to_p_fe54)*Y(Mn51)*state.rho - screened_rates(k_he4_n13_to_p_o16)*Y(N13)*state.rho - screened_rates(k_he4_n14_to_f18)*Y(N14)*state.rho - screened_rates(k_he4_ne20_to_mg24)*Y(Ne20)*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_ni56_to_zn60)*Y(Ni56)*state.rho - screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(Ni57)*state.rho - screened_rates(k_he4_o16_to_ne20)*Y(O16)*state.rho - screened_rates(k_he4_si28_to_p_p31_derived)*Y(Si28)*state.rho - screened_rates(k_he4_si28_to_s32)*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)*Y(C12)*state.rho + screened_rates(k_c12_o16_to_he4_mg24)*Y(O16)*state.rho + 3.0*screened_rates(k_c12_to_he4_he4_he4_derived) - screened_rates(k_he4_c12_to_o16)*Y(He4)*state.rho; + jac.set(He4, C12, scratch); + + scratch = -screened_rates(k_he4_n13_to_p_o16)*Y(He4)*state.rho; + jac.set(He4, N13, scratch); + + scratch = -screened_rates(k_he4_n14_to_f18)*Y(He4)*state.rho; + jac.set(He4, N14, scratch); + + scratch = screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*state.rho - screened_rates(k_he4_o16_to_ne20)*Y(He4)*state.rho + 1.0*screened_rates(k_o16_o16_to_he4_si28)*Y(O16)*state.rho + screened_rates(k_o16_to_he4_c12_derived) + screened_rates(k_p_o16_to_he4_n13_derived)*Y(H1)*state.rho; + jac.set(He4, O16, scratch); + + scratch = screened_rates(k_f18_to_he4_n14_derived) - screened_rates(k_he4_f18_to_na22)*Y(He4)*state.rho - screened_rates(k_he4_f18_to_p_ne21)*Y(He4)*state.rho; + jac.set(He4, F18, scratch); + + scratch = -screened_rates(k_he4_ne20_to_mg24)*Y(He4)*state.rho - screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*state.rho + screened_rates(k_ne20_to_he4_o16_derived); + jac.set(He4, Ne20, scratch); + + scratch = screened_rates(k_p_ne21_to_he4_f18_derived)*Y(H1)*state.rho; + jac.set(He4, Ne21, scratch); + + scratch = screened_rates(k_na22_to_he4_f18_derived); + jac.set(He4, Na22, scratch); + + scratch = screened_rates(k_p_na23_to_he4_ne20)*Y(H1)*state.rho; + jac.set(He4, Na23, scratch); + + scratch = -screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*state.rho - screened_rates(k_he4_mg24_to_si28)*Y(He4)*state.rho + screened_rates(k_mg24_to_he4_ne20_derived); + jac.set(He4, Mg24, scratch); + + scratch = screened_rates(k_p_al27_to_he4_mg24)*Y(H1)*state.rho; + jac.set(He4, Al27, scratch); + + scratch = -screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*state.rho - screened_rates(k_he4_si28_to_s32)*Y(He4)*state.rho + screened_rates(k_si28_to_he4_mg24_derived); + jac.set(He4, Si28, scratch); + + scratch = screened_rates(k_p_p31_to_he4_si28)*Y(H1)*state.rho; + jac.set(He4, P31, scratch); + + scratch = -screened_rates(k_s32_he4_to_ar36_approx)*Y(He4)*state.rho + screened_rates(k_s32_to_he4_si28_derived); + jac.set(He4, S32, scratch); + + scratch = -screened_rates(k_ar36_he4_to_ca40_approx)*Y(He4)*state.rho + screened_rates(k_ar36_to_s32_he4_approx); + jac.set(He4, Ar36, scratch); + + scratch = -screened_rates(k_ca40_he4_to_ti44_approx)*Y(He4)*state.rho + screened_rates(k_ca40_to_ar36_he4_approx); + jac.set(He4, Ca40, scratch); + + scratch = -screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*state.rho + screened_rates(k_ti44_to_ca40_he4_approx); + jac.set(He4, Ti44, scratch); + + scratch = screened_rates(k_cr48_to_ti44_he4_approx) - screened_rates(k_he4_cr48_to_fe52)*Y(He4)*state.rho - screened_rates(k_he4_cr48_to_p_mn51)*Y(He4)*state.rho; + jac.set(He4, Cr48, scratch); + + scratch = -screened_rates(k_he4_mn51_to_co55)*Y(He4)*state.rho - screened_rates(k_he4_mn51_to_p_fe54)*Y(He4)*state.rho + screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(H1)*state.rho; + jac.set(He4, Mn51, scratch); + + scratch = screened_rates(k_fe52_to_he4_cr48_derived) - screened_rates(k_he4_fe52_to_ni56)*Y(He4)*state.rho - screened_rates(k_he4_fe52_to_p_co55)*Y(He4)*state.rho; + jac.set(He4, Fe52, scratch); + + scratch = -screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(He4)*state.rho - screened_rates(k_he4_fe53_to_ni57)*Y(He4)*state.rho - screened_rates(k_he4_fe53_to_p_co56)*Y(He4)*state.rho; + jac.set(He4, Fe53, scratch); + + scratch = -screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(He4)*state.rho - screened_rates(k_he4_fe54_to_ni58)*Y(He4)*state.rho - screened_rates(k_he4_fe54_to_p_co57_derived)*Y(He4)*state.rho + screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(H1)*state.rho; + jac.set(He4, Fe54, scratch); + + scratch = -screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(He4)*state.rho; + jac.set(He4, Fe55, scratch); + + scratch = screened_rates(k_co55_to_he4_mn51_derived) - screened_rates(k_he4_co55_to_cu59)*Y(He4)*state.rho - screened_rates(k_he4_co55_to_p_ni58)*Y(He4)*state.rho + screened_rates(k_p_co55_to_he4_fe52_derived)*Y(H1)*state.rho; + jac.set(He4, Co55, scratch); + + scratch = -screened_rates(k_he4_co56_to_n_cu59_derived)*Y(He4)*state.rho + screened_rates(k_p_co56_to_he4_fe53_derived)*Y(H1)*state.rho; + jac.set(He4, Co56, scratch); + + scratch = screened_rates(k_p_co57_to_he4_fe54)*Y(H1)*state.rho; + jac.set(He4, Co57, scratch); + + scratch = -screened_rates(k_he4_ni56_to_p_cu59_derived)*Y(He4)*state.rho - screened_rates(k_he4_ni56_to_zn60)*Y(He4)*state.rho + screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*state.rho + screened_rates(k_ni56_to_he4_fe52_derived); + jac.set(He4, Ni56, scratch); + + scratch = -screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*state.rho + screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*state.rho + screened_rates(k_ni57_to_he4_fe53_derived); + jac.set(He4, Ni57, scratch); + + scratch = screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*state.rho + 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)*Y(N)*state.rho + screened_rates(k_p_cu59_to_he4_ni56)*Y(H1)*state.rho; + jac.set(He4, Cu59, scratch); + + scratch = screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*state.rho + screened_rates(k_zn60_to_he4_ni56_derived); + jac.set(He4, Zn60, scratch); + + scratch = -screened_rates(k_p_c12_to_n13)*Y(C12)*state.rho; + jac.set(C12, H1, scratch); + + scratch = -screened_rates(k_he4_c12_to_o16)*Y(C12)*state.rho + 0.5*screened_rates(k_he4_he4_he4_to_c12)*std::pow(Y(He4), 2)*std::pow(state.rho, 2); + jac.set(C12, He4, scratch); + + scratch = -2.0*screened_rates(k_c12_c12_to_he4_ne20)*Y(C12)*state.rho - 2.0*screened_rates(k_c12_c12_to_mg24_modified)*Y(C12)*state.rho - 2.0*screened_rates(k_c12_c12_to_p_na23)*Y(C12)*state.rho - screened_rates(k_c12_o16_to_he4_mg24)*Y(O16)*state.rho - screened_rates(k_c12_o16_to_p_al27)*Y(O16)*state.rho - screened_rates(k_c12_o16_to_si28_modified)*Y(O16)*state.rho - screened_rates(k_c12_to_he4_he4_he4_derived) - screened_rates(k_he4_c12_to_o16)*Y(He4)*state.rho - screened_rates(k_p_c12_to_n13)*Y(H1)*state.rho; + jac.set(C12, C12, scratch); + + scratch = screened_rates(k_n13_to_p_c12_derived); + jac.set(C12, N13, scratch); + + scratch = -screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*state.rho - screened_rates(k_c12_o16_to_p_al27)*Y(C12)*state.rho - screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*state.rho + screened_rates(k_o16_to_he4_c12_derived); + jac.set(C12, O16, scratch); + + scratch = screened_rates(k_p_c12_to_n13)*Y(C12)*state.rho + screened_rates(k_p_o16_to_he4_n13_derived)*Y(O16)*state.rho; + jac.set(N13, H1, scratch); + + scratch = -screened_rates(k_he4_n13_to_p_o16)*Y(N13)*state.rho; + jac.set(N13, He4, scratch); + + scratch = screened_rates(k_p_c12_to_n13)*Y(H1)*state.rho; + jac.set(N13, C12, scratch); + + scratch = -screened_rates(k_he4_n13_to_p_o16)*Y(He4)*state.rho - screened_rates(k_n13_to_p_c12_derived); + jac.set(N13, N13, scratch); + + scratch = screened_rates(k_p_o16_to_he4_n13_derived)*Y(H1)*state.rho; + jac.set(N13, O16, scratch); + + scratch = -screened_rates(k_he4_n14_to_f18)*Y(N14)*state.rho; + jac.set(N14, He4, scratch); + + scratch = -screened_rates(k_he4_n14_to_f18)*Y(He4)*state.rho; + jac.set(N14, N14, scratch); + + scratch = screened_rates(k_f18_to_he4_n14_derived); + jac.set(N14, F18, scratch); + + scratch = -screened_rates(k_p_o16_to_he4_n13_derived)*Y(O16)*state.rho; + jac.set(O16, H1, scratch); + + scratch = screened_rates(k_he4_c12_to_o16)*Y(C12)*state.rho + screened_rates(k_he4_n13_to_p_o16)*Y(N13)*state.rho - screened_rates(k_he4_o16_to_ne20)*Y(O16)*state.rho; + jac.set(O16, He4, scratch); + + scratch = -screened_rates(k_c12_o16_to_he4_mg24)*Y(O16)*state.rho - screened_rates(k_c12_o16_to_p_al27)*Y(O16)*state.rho - screened_rates(k_c12_o16_to_si28_modified)*Y(O16)*state.rho + screened_rates(k_he4_c12_to_o16)*Y(He4)*state.rho; + jac.set(O16, C12, scratch); + + scratch = screened_rates(k_he4_n13_to_p_o16)*Y(He4)*state.rho; + jac.set(O16, N13, scratch); + + scratch = -screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*state.rho - screened_rates(k_c12_o16_to_p_al27)*Y(C12)*state.rho - screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*state.rho - screened_rates(k_he4_o16_to_ne20)*Y(He4)*state.rho - 2.0*screened_rates(k_o16_o16_to_he4_si28)*Y(O16)*state.rho - 2.0*screened_rates(k_o16_o16_to_p_p31)*Y(O16)*state.rho - 2.0*screened_rates(k_o16_o16_to_s32_modified)*Y(O16)*state.rho - screened_rates(k_o16_to_he4_c12_derived) - screened_rates(k_p_o16_to_he4_n13_derived)*Y(H1)*state.rho; + jac.set(O16, O16, scratch); + + scratch = screened_rates(k_ne20_to_he4_o16_derived); + jac.set(O16, Ne20, scratch); + + scratch = screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*state.rho; + jac.set(F18, H1, scratch); + + scratch = -screened_rates(k_he4_f18_to_na22)*Y(F18)*state.rho - screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*state.rho + screened_rates(k_he4_n14_to_f18)*Y(N14)*state.rho; + jac.set(F18, He4, scratch); + + scratch = screened_rates(k_he4_n14_to_f18)*Y(He4)*state.rho; + jac.set(F18, N14, scratch); + + scratch = -screened_rates(k_f18_to_he4_n14_derived) - screened_rates(k_he4_f18_to_na22)*Y(He4)*state.rho - screened_rates(k_he4_f18_to_p_ne21)*Y(He4)*state.rho; + jac.set(F18, F18, scratch); + + scratch = screened_rates(k_p_ne21_to_he4_f18_derived)*Y(H1)*state.rho; + jac.set(F18, Ne21, scratch); + + scratch = screened_rates(k_na22_to_he4_f18_derived); + jac.set(F18, Na22, scratch); + + scratch = screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*state.rho; + jac.set(Ne20, H1, scratch); + + scratch = -screened_rates(k_he4_ne20_to_mg24)*Y(Ne20)*state.rho - screened_rates(k_he4_ne20_to_p_na23_derived)*Y(Ne20)*state.rho + screened_rates(k_he4_o16_to_ne20)*Y(O16)*state.rho; + jac.set(Ne20, He4, scratch); + + scratch = 1.0*screened_rates(k_c12_c12_to_he4_ne20)*Y(C12)*state.rho; + jac.set(Ne20, C12, scratch); + + scratch = screened_rates(k_he4_o16_to_ne20)*Y(He4)*state.rho; + jac.set(Ne20, O16, scratch); + + scratch = -screened_rates(k_he4_ne20_to_mg24)*Y(He4)*state.rho - screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*state.rho - screened_rates(k_ne20_to_he4_o16_derived); + jac.set(Ne20, Ne20, scratch); + + scratch = screened_rates(k_p_na23_to_he4_ne20)*Y(H1)*state.rho; + jac.set(Ne20, Na23, scratch); + + scratch = screened_rates(k_mg24_to_he4_ne20_derived); + jac.set(Ne20, Mg24, scratch); + + scratch = -screened_rates(k_p_ne21_to_he4_f18_derived)*Y(Ne21)*state.rho - screened_rates(k_p_ne21_to_na22)*Y(Ne21)*state.rho; + jac.set(Ne21, H1, scratch); + + scratch = screened_rates(k_he4_f18_to_p_ne21)*Y(F18)*state.rho; + jac.set(Ne21, He4, scratch); + + scratch = screened_rates(k_he4_f18_to_p_ne21)*Y(He4)*state.rho; + jac.set(Ne21, F18, scratch); + + scratch = -screened_rates(k_p_ne21_to_he4_f18_derived)*Y(H1)*state.rho - screened_rates(k_p_ne21_to_na22)*Y(H1)*state.rho; + jac.set(Ne21, Ne21, scratch); + + scratch = screened_rates(k_na22_to_p_ne21_derived); + jac.set(Ne21, Na22, scratch); + + scratch = screened_rates(k_p_ne21_to_na22)*Y(Ne21)*state.rho; + jac.set(Na22, H1, scratch); + + scratch = screened_rates(k_he4_f18_to_na22)*Y(F18)*state.rho; + jac.set(Na22, He4, scratch); + + scratch = screened_rates(k_he4_f18_to_na22)*Y(He4)*state.rho; + jac.set(Na22, F18, scratch); + + scratch = screened_rates(k_p_ne21_to_na22)*Y(H1)*state.rho; + jac.set(Na22, Ne21, scratch); + + scratch = -screened_rates(k_na22_to_he4_f18_derived) - screened_rates(k_na22_to_p_ne21_derived); + jac.set(Na22, Na22, scratch); + + scratch = -screened_rates(k_p_na23_to_he4_ne20)*Y(Na23)*state.rho - screened_rates(k_p_na23_to_mg24)*Y(Na23)*state.rho; + jac.set(Na23, H1, scratch); + + scratch = screened_rates(k_he4_ne20_to_p_na23_derived)*Y(Ne20)*state.rho; + jac.set(Na23, He4, scratch); + + scratch = 1.0*screened_rates(k_c12_c12_to_p_na23)*Y(C12)*state.rho; + jac.set(Na23, C12, scratch); + + scratch = screened_rates(k_he4_ne20_to_p_na23_derived)*Y(He4)*state.rho; + jac.set(Na23, Ne20, scratch); + + scratch = -screened_rates(k_p_na23_to_he4_ne20)*Y(H1)*state.rho - screened_rates(k_p_na23_to_mg24)*Y(H1)*state.rho; + jac.set(Na23, Na23, scratch); + + scratch = screened_rates(k_mg24_to_p_na23_derived); + jac.set(Na23, Mg24, scratch); + + scratch = screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*state.rho + screened_rates(k_p_na23_to_mg24)*Y(Na23)*state.rho; + jac.set(Mg24, H1, scratch); + + scratch = -screened_rates(k_he4_mg24_to_p_al27_derived)*Y(Mg24)*state.rho - screened_rates(k_he4_mg24_to_si28)*Y(Mg24)*state.rho + screened_rates(k_he4_ne20_to_mg24)*Y(Ne20)*state.rho; + jac.set(Mg24, He4, scratch); + + scratch = 1.0*screened_rates(k_c12_c12_to_mg24_modified)*Y(C12)*state.rho + screened_rates(k_c12_o16_to_he4_mg24)*Y(O16)*state.rho; + jac.set(Mg24, C12, scratch); + + scratch = screened_rates(k_c12_o16_to_he4_mg24)*Y(C12)*state.rho; + jac.set(Mg24, O16, scratch); + + scratch = screened_rates(k_he4_ne20_to_mg24)*Y(He4)*state.rho; + jac.set(Mg24, Ne20, scratch); + + scratch = screened_rates(k_p_na23_to_mg24)*Y(H1)*state.rho; + jac.set(Mg24, Na23, scratch); + + scratch = -screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*state.rho - screened_rates(k_he4_mg24_to_si28)*Y(He4)*state.rho - screened_rates(k_mg24_to_he4_ne20_derived) - screened_rates(k_mg24_to_p_na23_derived); + jac.set(Mg24, Mg24, scratch); + + scratch = screened_rates(k_p_al27_to_he4_mg24)*Y(H1)*state.rho; + jac.set(Mg24, Al27, scratch); + + scratch = screened_rates(k_si28_to_he4_mg24_derived); + jac.set(Mg24, Si28, scratch); + + scratch = -screened_rates(k_p_al27_to_he4_mg24)*Y(Al27)*state.rho - screened_rates(k_p_al27_to_si28)*Y(Al27)*state.rho; + jac.set(Al27, H1, scratch); + + scratch = screened_rates(k_he4_mg24_to_p_al27_derived)*Y(Mg24)*state.rho; + jac.set(Al27, He4, scratch); + + scratch = screened_rates(k_c12_o16_to_p_al27)*Y(O16)*state.rho; + jac.set(Al27, C12, scratch); + + scratch = screened_rates(k_c12_o16_to_p_al27)*Y(C12)*state.rho; + jac.set(Al27, O16, scratch); + + scratch = screened_rates(k_he4_mg24_to_p_al27_derived)*Y(He4)*state.rho; + jac.set(Al27, Mg24, scratch); + + scratch = -screened_rates(k_p_al27_to_he4_mg24)*Y(H1)*state.rho - screened_rates(k_p_al27_to_si28)*Y(H1)*state.rho; + jac.set(Al27, Al27, scratch); + + scratch = screened_rates(k_si28_to_p_al27_derived); + jac.set(Al27, Si28, scratch); + + scratch = screened_rates(k_p_al27_to_si28)*Y(Al27)*state.rho + screened_rates(k_p_p31_to_he4_si28)*Y(P31)*state.rho; + jac.set(Si28, H1, scratch); + + scratch = screened_rates(k_he4_mg24_to_si28)*Y(Mg24)*state.rho - screened_rates(k_he4_si28_to_p_p31_derived)*Y(Si28)*state.rho - screened_rates(k_he4_si28_to_s32)*Y(Si28)*state.rho; + jac.set(Si28, He4, scratch); + + scratch = screened_rates(k_c12_o16_to_si28_modified)*Y(O16)*state.rho; + jac.set(Si28, C12, scratch); + + scratch = screened_rates(k_c12_o16_to_si28_modified)*Y(C12)*state.rho + 1.0*screened_rates(k_o16_o16_to_he4_si28)*Y(O16)*state.rho; + jac.set(Si28, O16, scratch); + + scratch = screened_rates(k_he4_mg24_to_si28)*Y(He4)*state.rho; + jac.set(Si28, Mg24, scratch); + + scratch = screened_rates(k_p_al27_to_si28)*Y(H1)*state.rho; + jac.set(Si28, Al27, scratch); + + scratch = -screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*state.rho - screened_rates(k_he4_si28_to_s32)*Y(He4)*state.rho - screened_rates(k_si28_to_he4_mg24_derived) - screened_rates(k_si28_to_p_al27_derived); + jac.set(Si28, Si28, scratch); + + scratch = screened_rates(k_p_p31_to_he4_si28)*Y(H1)*state.rho; + jac.set(Si28, P31, scratch); + + scratch = screened_rates(k_s32_to_he4_si28_derived); + jac.set(Si28, S32, scratch); + + scratch = -screened_rates(k_p_p31_to_he4_si28)*Y(P31)*state.rho - screened_rates(k_p_p31_to_s32)*Y(P31)*state.rho; + jac.set(P31, H1, scratch); + + scratch = screened_rates(k_he4_si28_to_p_p31_derived)*Y(Si28)*state.rho; + jac.set(P31, He4, scratch); + + scratch = 1.0*screened_rates(k_o16_o16_to_p_p31)*Y(O16)*state.rho; + jac.set(P31, O16, scratch); + + scratch = screened_rates(k_he4_si28_to_p_p31_derived)*Y(He4)*state.rho; + jac.set(P31, Si28, scratch); + + scratch = -screened_rates(k_p_p31_to_he4_si28)*Y(H1)*state.rho - screened_rates(k_p_p31_to_s32)*Y(H1)*state.rho; + jac.set(P31, P31, scratch); + + scratch = screened_rates(k_s32_to_p_p31_derived); + jac.set(P31, S32, scratch); + + scratch = screened_rates(k_p_p31_to_s32)*Y(P31)*state.rho; + jac.set(S32, H1, scratch); + + scratch = screened_rates(k_he4_si28_to_s32)*Y(Si28)*state.rho - screened_rates(k_s32_he4_to_ar36_approx)*Y(S32)*state.rho; + jac.set(S32, He4, scratch); + + scratch = 1.0*screened_rates(k_o16_o16_to_s32_modified)*Y(O16)*state.rho; + jac.set(S32, O16, scratch); + + scratch = screened_rates(k_he4_si28_to_s32)*Y(He4)*state.rho; + jac.set(S32, Si28, scratch); + + scratch = screened_rates(k_p_p31_to_s32)*Y(H1)*state.rho; + jac.set(S32, P31, scratch); + + scratch = -screened_rates(k_s32_he4_to_ar36_approx)*Y(He4)*state.rho - screened_rates(k_s32_to_he4_si28_derived) - screened_rates(k_s32_to_p_p31_derived); + jac.set(S32, S32, scratch); + + scratch = screened_rates(k_ar36_to_s32_he4_approx); + jac.set(S32, Ar36, scratch); + + scratch = -screened_rates(k_ar36_he4_to_ca40_approx)*Y(Ar36)*state.rho + screened_rates(k_s32_he4_to_ar36_approx)*Y(S32)*state.rho; + jac.set(Ar36, He4, scratch); + + scratch = screened_rates(k_s32_he4_to_ar36_approx)*Y(He4)*state.rho; + jac.set(Ar36, S32, scratch); + + scratch = -screened_rates(k_ar36_he4_to_ca40_approx)*Y(He4)*state.rho - screened_rates(k_ar36_to_s32_he4_approx); + jac.set(Ar36, Ar36, scratch); + + scratch = screened_rates(k_ca40_to_ar36_he4_approx); + jac.set(Ar36, Ca40, 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; + jac.set(Ca40, He4, scratch); + + scratch = screened_rates(k_ar36_he4_to_ca40_approx)*Y(He4)*state.rho; + jac.set(Ca40, Ar36, scratch); + + scratch = -screened_rates(k_ca40_he4_to_ti44_approx)*Y(He4)*state.rho - screened_rates(k_ca40_to_ar36_he4_approx); + jac.set(Ca40, Ca40, scratch); + + scratch = screened_rates(k_ti44_to_ca40_he4_approx); + jac.set(Ca40, Ti44, scratch); + + scratch = screened_rates(k_ca40_he4_to_ti44_approx)*Y(Ca40)*state.rho - screened_rates(k_ti44_he4_to_cr48_approx)*Y(Ti44)*state.rho; + jac.set(Ti44, He4, scratch); + + scratch = screened_rates(k_ca40_he4_to_ti44_approx)*Y(He4)*state.rho; + jac.set(Ti44, Ca40, scratch); + + scratch = -screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*state.rho - screened_rates(k_ti44_to_ca40_he4_approx); + jac.set(Ti44, Ti44, scratch); + + scratch = screened_rates(k_cr48_to_ti44_he4_approx); + jac.set(Ti44, Cr48, scratch); + + scratch = screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(Mn51)*state.rho; + jac.set(Cr48, H1, scratch); + + scratch = -screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*state.rho - screened_rates(k_he4_cr48_to_p_mn51)*Y(Cr48)*state.rho + screened_rates(k_ti44_he4_to_cr48_approx)*Y(Ti44)*state.rho; + jac.set(Cr48, He4, scratch); + + scratch = screened_rates(k_ti44_he4_to_cr48_approx)*Y(He4)*state.rho; + jac.set(Cr48, Ti44, scratch); + + scratch = -screened_rates(k_cr48_to_ti44_he4_approx) - screened_rates(k_he4_cr48_to_fe52)*Y(He4)*state.rho - screened_rates(k_he4_cr48_to_p_mn51)*Y(He4)*state.rho; + jac.set(Cr48, Cr48, scratch); + + scratch = screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(H1)*state.rho; + jac.set(Cr48, Mn51, scratch); + + scratch = screened_rates(k_fe52_to_he4_cr48_derived); + jac.set(Cr48, Fe52, scratch); + + scratch = screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(Fe54)*state.rho - screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*state.rho - screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(Mn51)*state.rho; + jac.set(Mn51, H1, scratch); + + scratch = screened_rates(k_he4_cr48_to_p_mn51)*Y(Cr48)*state.rho - screened_rates(k_he4_mn51_to_co55)*Y(Mn51)*state.rho - screened_rates(k_he4_mn51_to_p_fe54)*Y(Mn51)*state.rho; + jac.set(Mn51, He4, scratch); + + scratch = screened_rates(k_he4_cr48_to_p_mn51)*Y(He4)*state.rho; + jac.set(Mn51, Cr48, scratch); + + scratch = -screened_rates(k_he4_mn51_to_co55)*Y(He4)*state.rho - screened_rates(k_he4_mn51_to_p_fe54)*Y(He4)*state.rho - screened_rates(k_p_mn51_to_fe52)*Y(H1)*state.rho - screened_rates(k_p_mn51_to_he4_cr48_derived)*Y(H1)*state.rho; + jac.set(Mn51, Mn51, scratch); + + scratch = screened_rates(k_fe52_to_p_mn51_derived); + jac.set(Mn51, Fe52, scratch); + + scratch = screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(H1)*state.rho; + jac.set(Mn51, Fe54, scratch); + + scratch = screened_rates(k_co55_to_he4_mn51_derived); + jac.set(Mn51, Co55, scratch); + + scratch = screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*state.rho; + jac.set(Mn55, N, scratch); + + scratch = -screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*state.rho - screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*state.rho; + jac.set(Mn55, H1, scratch); + + scratch = -screened_rates(k_mn55_to_fe55) - screened_rates(k_p_mn55_to_fe56)*Y(H1)*state.rho - screened_rates(k_p_mn55_to_n_fe55_derived)*Y(H1)*state.rho; + jac.set(Mn55, Mn55, scratch); + + scratch = screened_rates(k_fe55_to_mn55) + screened_rates(k_n_fe55_to_p_mn55)*Y(N)*state.rho; + jac.set(Mn55, Fe55, scratch); + + scratch = screened_rates(k_fe56_to_p_mn55_derived); + jac.set(Mn55, Fe56, scratch); + + scratch = -screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*state.rho; + jac.set(Fe52, N, scratch); + + scratch = screened_rates(k_p_co55_to_he4_fe52_derived)*Y(Co55)*state.rho + screened_rates(k_p_mn51_to_fe52)*Y(Mn51)*state.rho; + jac.set(Fe52, H1, scratch); + + scratch = screened_rates(k_he4_cr48_to_fe52)*Y(Cr48)*state.rho - screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*state.rho - screened_rates(k_he4_fe52_to_p_co55)*Y(Fe52)*state.rho; + jac.set(Fe52, He4, scratch); + + scratch = screened_rates(k_he4_cr48_to_fe52)*Y(He4)*state.rho; + jac.set(Fe52, Cr48, scratch); + + scratch = screened_rates(k_p_mn51_to_fe52)*Y(H1)*state.rho; + jac.set(Fe52, Mn51, scratch); + + scratch = -screened_rates(k_fe52_to_he4_cr48_derived) - screened_rates(k_fe52_to_p_mn51_derived) - screened_rates(k_he4_fe52_to_ni56)*Y(He4)*state.rho - screened_rates(k_he4_fe52_to_p_co55)*Y(He4)*state.rho - screened_rates(k_n_fe52_to_fe53)*Y(N)*state.rho; + jac.set(Fe52, Fe52, scratch); + + scratch = screened_rates(k_fe53_to_n_fe52_derived); + jac.set(Fe52, Fe53, scratch); + + scratch = screened_rates(k_p_co55_to_he4_fe52_derived)*Y(H1)*state.rho; + jac.set(Fe52, Co55, scratch); + + scratch = screened_rates(k_ni56_to_he4_fe52_derived); + jac.set(Fe52, Ni56, scratch); + + scratch = screened_rates(k_n_fe52_to_fe53)*Y(Fe52)*state.rho - screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*state.rho + screened_rates(k_n_ni56_to_he4_fe53)*Y(Ni56)*state.rho; + jac.set(Fe53, N, scratch); + + scratch = screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*state.rho; + jac.set(Fe53, H1, scratch); + + scratch = -screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*state.rho - screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*state.rho - screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*state.rho; + jac.set(Fe53, He4, scratch); + + scratch = screened_rates(k_n_fe52_to_fe53)*Y(N)*state.rho; + jac.set(Fe53, Fe52, scratch); + + scratch = -screened_rates(k_fe53_to_n_fe52_derived) - screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(He4)*state.rho - screened_rates(k_he4_fe53_to_ni57)*Y(He4)*state.rho - screened_rates(k_he4_fe53_to_p_co56)*Y(He4)*state.rho - screened_rates(k_n_fe53_to_fe54)*Y(N)*state.rho; + jac.set(Fe53, Fe53, scratch); + + scratch = screened_rates(k_fe54_to_n_fe53_derived); + jac.set(Fe53, Fe54, scratch); + + scratch = screened_rates(k_p_co56_to_he4_fe53_derived)*Y(H1)*state.rho; + jac.set(Fe53, Co56, scratch); + + scratch = screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*state.rho; + jac.set(Fe53, Ni56, scratch); + + scratch = screened_rates(k_ni57_to_he4_fe53_derived); + jac.set(Fe53, Ni57, scratch); + + scratch = screened_rates(k_n_fe53_to_fe54)*Y(Fe53)*state.rho - screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*state.rho + screened_rates(k_n_ni57_to_he4_fe54)*Y(Ni57)*state.rho; + jac.set(Fe54, N, scratch); + + scratch = screened_rates(k_p_co57_to_he4_fe54)*Y(Co57)*state.rho - screened_rates(k_p_fe54_to_co55)*Y(Fe54)*state.rho - screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(Fe54)*state.rho; + jac.set(Fe54, H1, scratch); + + scratch = -screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*state.rho - screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*state.rho - screened_rates(k_he4_fe54_to_p_co57_derived)*Y(Fe54)*state.rho + screened_rates(k_he4_mn51_to_p_fe54)*Y(Mn51)*state.rho; + jac.set(Fe54, He4, scratch); + + scratch = screened_rates(k_he4_mn51_to_p_fe54)*Y(He4)*state.rho; + jac.set(Fe54, Mn51, scratch); + + scratch = screened_rates(k_n_fe53_to_fe54)*Y(N)*state.rho; + jac.set(Fe54, Fe53, scratch); + + scratch = -screened_rates(k_fe54_to_n_fe53_derived) - screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(He4)*state.rho - screened_rates(k_he4_fe54_to_ni58)*Y(He4)*state.rho - screened_rates(k_he4_fe54_to_p_co57_derived)*Y(He4)*state.rho - screened_rates(k_n_fe54_to_fe55)*Y(N)*state.rho - screened_rates(k_p_fe54_to_co55)*Y(H1)*state.rho - screened_rates(k_p_fe54_to_he4_mn51_derived)*Y(H1)*state.rho; + jac.set(Fe54, Fe54, scratch); + + scratch = screened_rates(k_fe55_to_n_fe54_derived); + jac.set(Fe54, Fe55, scratch); + + scratch = screened_rates(k_co55_to_p_fe54_derived); + jac.set(Fe54, Co55, scratch); + + scratch = screened_rates(k_p_co57_to_he4_fe54)*Y(H1)*state.rho; + jac.set(Fe54, Co57, scratch); + + scratch = screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*state.rho; + jac.set(Fe54, Ni57, scratch); + + scratch = screened_rates(k_ni58_to_he4_fe54_derived); + jac.set(Fe54, Ni58, scratch); + + scratch = screened_rates(k_n_co55_to_p_fe55)*Y(Co55)*state.rho + screened_rates(k_n_fe54_to_fe55)*Y(Fe54)*state.rho - screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*state.rho - screened_rates(k_n_fe55_to_p_mn55)*Y(Fe55)*state.rho + screened_rates(k_n_ni58_to_he4_fe55)*Y(Ni58)*state.rho; + jac.set(Fe55, N, scratch); + + scratch = -screened_rates(k_p_fe55_to_co56)*Y(Fe55)*state.rho - screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*state.rho + screened_rates(k_p_mn55_to_n_fe55_derived)*Y(Mn55)*state.rho; + jac.set(Fe55, H1, scratch); + + scratch = -screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*state.rho; + jac.set(Fe55, He4, scratch); + + scratch = screened_rates(k_mn55_to_fe55) + screened_rates(k_p_mn55_to_n_fe55_derived)*Y(H1)*state.rho; + jac.set(Fe55, Mn55, scratch); + + scratch = screened_rates(k_n_fe54_to_fe55)*Y(N)*state.rho; + jac.set(Fe55, Fe54, scratch); + + scratch = -screened_rates(k_fe55_to_co55) - screened_rates(k_fe55_to_mn55) - screened_rates(k_fe55_to_n_fe54_derived) - screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(He4)*state.rho - screened_rates(k_n_fe55_to_fe56)*Y(N)*state.rho - screened_rates(k_n_fe55_to_p_mn55)*Y(N)*state.rho - screened_rates(k_p_fe55_to_co56)*Y(H1)*state.rho - screened_rates(k_p_fe55_to_n_co55_derived)*Y(H1)*state.rho; + jac.set(Fe55, Fe55, scratch); + + scratch = screened_rates(k_fe56_to_n_fe55_derived); + jac.set(Fe55, Fe56, scratch); + + scratch = screened_rates(k_co55_to_fe55) + screened_rates(k_n_co55_to_p_fe55)*Y(N)*state.rho; + jac.set(Fe55, Co55, scratch); + + scratch = screened_rates(k_co56_to_p_fe55_derived); + jac.set(Fe55, Co56, scratch); + + scratch = screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*state.rho; + jac.set(Fe55, Ni58, scratch); + + scratch = screened_rates(k_n_co56_to_p_fe56)*Y(Co56)*state.rho + screened_rates(k_n_fe55_to_fe56)*Y(Fe55)*state.rho; + jac.set(Fe56, N, scratch); + + scratch = -screened_rates(k_p_fe56_to_co57)*Y(Fe56)*state.rho - screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*state.rho + screened_rates(k_p_mn55_to_fe56)*Y(Mn55)*state.rho; + jac.set(Fe56, H1, scratch); + + scratch = screened_rates(k_p_mn55_to_fe56)*Y(H1)*state.rho; + jac.set(Fe56, Mn55, scratch); + + scratch = screened_rates(k_n_fe55_to_fe56)*Y(N)*state.rho; + jac.set(Fe56, Fe55, scratch); + + scratch = -screened_rates(k_fe56_to_co56) - screened_rates(k_fe56_to_n_fe55_derived) - screened_rates(k_fe56_to_p_mn55_derived) - screened_rates(k_p_fe56_to_co57)*Y(H1)*state.rho - screened_rates(k_p_fe56_to_n_co56_derived)*Y(H1)*state.rho; + jac.set(Fe56, Fe56, scratch); + + scratch = screened_rates(k_co56_to_fe56) + screened_rates(k_n_co56_to_p_fe56)*Y(N)*state.rho; + jac.set(Fe56, Co56, scratch); + + scratch = screened_rates(k_co57_to_p_fe56_derived); + jac.set(Fe56, Co57, scratch); + + scratch = -screened_rates(k_n_co55_to_co56)*Y(Co55)*state.rho - screened_rates(k_n_co55_to_p_fe55)*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)*Y(Co55)*state.rho + screened_rates(k_p_fe54_to_co55)*Y(Fe54)*state.rho + screened_rates(k_p_fe55_to_n_co55_derived)*Y(Fe55)*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_cu59)*Y(Co55)*state.rho - screened_rates(k_he4_co55_to_p_ni58)*Y(Co55)*state.rho + screened_rates(k_he4_fe52_to_p_co55)*Y(Fe52)*state.rho + screened_rates(k_he4_mn51_to_co55)*Y(Mn51)*state.rho; + jac.set(Co55, He4, scratch); + + scratch = screened_rates(k_he4_mn51_to_co55)*Y(He4)*state.rho; + jac.set(Co55, Mn51, scratch); + + scratch = screened_rates(k_he4_fe52_to_p_co55)*Y(He4)*state.rho; + jac.set(Co55, Fe52, scratch); + + scratch = screened_rates(k_p_fe54_to_co55)*Y(H1)*state.rho; + jac.set(Co55, Fe54, scratch); + + scratch = screened_rates(k_fe55_to_co55) + screened_rates(k_p_fe55_to_n_co55_derived)*Y(H1)*state.rho; + jac.set(Co55, Fe55, scratch); + + scratch = -screened_rates(k_co55_to_fe55) - screened_rates(k_co55_to_he4_mn51_derived) - screened_rates(k_co55_to_p_fe54_derived) - screened_rates(k_he4_co55_to_cu59)*Y(He4)*state.rho - screened_rates(k_he4_co55_to_p_ni58)*Y(He4)*state.rho - screened_rates(k_n_co55_to_co56)*Y(N)*state.rho - screened_rates(k_n_co55_to_p_fe55)*Y(N)*state.rho - screened_rates(k_p_co55_to_he4_fe52_derived)*Y(H1)*state.rho - screened_rates(k_p_co55_to_ni56)*Y(H1)*state.rho; + jac.set(Co55, Co55, scratch); + + scratch = screened_rates(k_co56_to_n_co55_derived); + jac.set(Co55, Co56, scratch); + + scratch = screened_rates(k_ni56_to_p_co55_derived); + jac.set(Co55, Ni56, scratch); + + scratch = screened_rates(k_p_ni58_to_he4_co55_derived)*Y(H1)*state.rho; + jac.set(Co55, Ni58, scratch); + + scratch = screened_rates(k_cu59_to_he4_co55_derived); + jac.set(Co55, Cu59, scratch); + + scratch = screened_rates(k_n_co55_to_co56)*Y(Co55)*state.rho - screened_rates(k_n_co56_to_co57)*Y(Co56)*state.rho - screened_rates(k_n_co56_to_p_fe56)*Y(Co56)*state.rho + screened_rates(k_n_cu59_to_he4_co56)*Y(Cu59)*state.rho + screened_rates(k_n_ni56_to_p_co56)*Y(Ni56)*state.rho; + jac.set(Co56, N, scratch); + + scratch = -screened_rates(k_p_co56_to_he4_fe53_derived)*Y(Co56)*state.rho - screened_rates(k_p_co56_to_n_ni56_derived)*Y(Co56)*state.rho - screened_rates(k_p_co56_to_ni57)*Y(Co56)*state.rho + screened_rates(k_p_fe55_to_co56)*Y(Fe55)*state.rho + screened_rates(k_p_fe56_to_n_co56_derived)*Y(Fe56)*state.rho; + jac.set(Co56, H1, scratch); + + scratch = -screened_rates(k_he4_co56_to_n_cu59_derived)*Y(Co56)*state.rho + screened_rates(k_he4_fe53_to_p_co56)*Y(Fe53)*state.rho; + jac.set(Co56, He4, scratch); + + scratch = screened_rates(k_he4_fe53_to_p_co56)*Y(He4)*state.rho; + jac.set(Co56, Fe53, scratch); + + scratch = screened_rates(k_p_fe55_to_co56)*Y(H1)*state.rho; + jac.set(Co56, Fe55, scratch); + + scratch = screened_rates(k_fe56_to_co56) + screened_rates(k_p_fe56_to_n_co56_derived)*Y(H1)*state.rho; + jac.set(Co56, Fe56, scratch); + + scratch = screened_rates(k_n_co55_to_co56)*Y(N)*state.rho; + jac.set(Co56, Co55, scratch); + + scratch = -screened_rates(k_co56_to_fe56) - screened_rates(k_co56_to_n_co55_derived) - screened_rates(k_co56_to_ni56) - screened_rates(k_co56_to_p_fe55_derived) - screened_rates(k_he4_co56_to_n_cu59_derived)*Y(He4)*state.rho - screened_rates(k_n_co56_to_co57)*Y(N)*state.rho - screened_rates(k_n_co56_to_p_fe56)*Y(N)*state.rho - screened_rates(k_p_co56_to_he4_fe53_derived)*Y(H1)*state.rho - screened_rates(k_p_co56_to_n_ni56_derived)*Y(H1)*state.rho - screened_rates(k_p_co56_to_ni57)*Y(H1)*state.rho; + jac.set(Co56, Co56, scratch); + + scratch = screened_rates(k_co57_to_n_co56_derived); + jac.set(Co56, Co57, scratch); + + scratch = screened_rates(k_n_ni56_to_p_co56)*Y(N)*state.rho + screened_rates(k_ni56_to_co56); + jac.set(Co56, Ni56, scratch); + + scratch = screened_rates(k_ni57_to_p_co56_derived); + jac.set(Co56, Ni57, scratch); + + scratch = screened_rates(k_n_cu59_to_he4_co56)*Y(N)*state.rho; + jac.set(Co56, Cu59, scratch); + + scratch = screened_rates(k_n_co56_to_co57)*Y(Co56)*state.rho + screened_rates(k_n_ni57_to_p_co57)*Y(Ni57)*state.rho; + jac.set(Co57, N, scratch); + + scratch = -screened_rates(k_p_co57_to_he4_fe54)*Y(Co57)*state.rho - screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*state.rho - screened_rates(k_p_co57_to_ni58)*Y(Co57)*state.rho + screened_rates(k_p_fe56_to_co57)*Y(Fe56)*state.rho; + jac.set(Co57, H1, scratch); + + scratch = screened_rates(k_he4_fe54_to_p_co57_derived)*Y(Fe54)*state.rho; + jac.set(Co57, He4, scratch); + + scratch = screened_rates(k_he4_fe54_to_p_co57_derived)*Y(He4)*state.rho; + jac.set(Co57, Fe54, scratch); + + scratch = screened_rates(k_p_fe56_to_co57)*Y(H1)*state.rho; + jac.set(Co57, Fe56, scratch); + + scratch = screened_rates(k_n_co56_to_co57)*Y(N)*state.rho; + jac.set(Co57, Co56, scratch); + + scratch = -screened_rates(k_co57_to_n_co56_derived) - screened_rates(k_co57_to_ni57) - screened_rates(k_co57_to_p_fe56_derived) - screened_rates(k_p_co57_to_he4_fe54)*Y(H1)*state.rho - screened_rates(k_p_co57_to_n_ni57_derived)*Y(H1)*state.rho - screened_rates(k_p_co57_to_ni58)*Y(H1)*state.rho; + jac.set(Co57, Co57, scratch); + + scratch = screened_rates(k_n_ni57_to_p_co57)*Y(N)*state.rho + screened_rates(k_ni57_to_co57); + jac.set(Co57, Ni57, scratch); + + scratch = screened_rates(k_ni58_to_p_co57_derived); + jac.set(Co57, Ni58, scratch); + + scratch = -screened_rates(k_n_ni56_to_he4_fe53)*Y(Ni56)*state.rho - screened_rates(k_n_ni56_to_ni57)*Y(Ni56)*state.rho - screened_rates(k_n_ni56_to_p_co56)*Y(Ni56)*state.rho; + jac.set(Ni56, N, scratch); + + scratch = screened_rates(k_p_co55_to_ni56)*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)*Y(Cu59)*state.rho; + jac.set(Ni56, H1, scratch); + + scratch = screened_rates(k_he4_fe52_to_ni56)*Y(Fe52)*state.rho + screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(Fe53)*state.rho - screened_rates(k_he4_ni56_to_p_cu59_derived)*Y(Ni56)*state.rho - screened_rates(k_he4_ni56_to_zn60)*Y(Ni56)*state.rho; + jac.set(Ni56, He4, scratch); + + scratch = screened_rates(k_he4_fe52_to_ni56)*Y(He4)*state.rho; + jac.set(Ni56, Fe52, scratch); + + scratch = screened_rates(k_he4_fe53_to_n_ni56_derived)*Y(He4)*state.rho; + jac.set(Ni56, Fe53, scratch); + + scratch = screened_rates(k_p_co55_to_ni56)*Y(H1)*state.rho; + jac.set(Ni56, Co55, scratch); + + scratch = screened_rates(k_co56_to_ni56) + screened_rates(k_p_co56_to_n_ni56_derived)*Y(H1)*state.rho; + jac.set(Ni56, Co56, scratch); + + scratch = -screened_rates(k_he4_ni56_to_p_cu59_derived)*Y(He4)*state.rho - screened_rates(k_he4_ni56_to_zn60)*Y(He4)*state.rho - screened_rates(k_n_ni56_to_he4_fe53)*Y(N)*state.rho - screened_rates(k_n_ni56_to_ni57)*Y(N)*state.rho - screened_rates(k_n_ni56_to_p_co56)*Y(N)*state.rho - screened_rates(k_ni56_to_co56) - screened_rates(k_ni56_to_he4_fe52_derived) - screened_rates(k_ni56_to_p_co55_derived); + jac.set(Ni56, Ni56, scratch); + + scratch = screened_rates(k_ni57_to_n_ni56_derived); + jac.set(Ni56, Ni57, scratch); + + scratch = screened_rates(k_p_cu59_to_he4_ni56)*Y(H1)*state.rho; + jac.set(Ni56, Cu59, scratch); + + scratch = screened_rates(k_zn60_to_he4_ni56_derived); + jac.set(Ni56, Zn60, scratch); + + scratch = screened_rates(k_n_ni56_to_ni57)*Y(Ni56)*state.rho - screened_rates(k_n_ni57_to_he4_fe54)*Y(Ni57)*state.rho - screened_rates(k_n_ni57_to_ni58)*Y(Ni57)*state.rho - screened_rates(k_n_ni57_to_p_co57)*Y(Ni57)*state.rho + screened_rates(k_n_zn60_to_he4_ni57)*Y(Zn60)*state.rho; + jac.set(Ni57, N, scratch); + + scratch = screened_rates(k_p_co56_to_ni57)*Y(Co56)*state.rho + screened_rates(k_p_co57_to_n_ni57_derived)*Y(Co57)*state.rho; + jac.set(Ni57, H1, scratch); + + scratch = screened_rates(k_he4_fe53_to_ni57)*Y(Fe53)*state.rho + screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(Fe54)*state.rho - screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(Ni57)*state.rho; + jac.set(Ni57, He4, scratch); + + scratch = screened_rates(k_he4_fe53_to_ni57)*Y(He4)*state.rho; + jac.set(Ni57, Fe53, scratch); + + scratch = screened_rates(k_he4_fe54_to_n_ni57_derived)*Y(He4)*state.rho; + jac.set(Ni57, Fe54, scratch); + + scratch = screened_rates(k_p_co56_to_ni57)*Y(H1)*state.rho; + jac.set(Ni57, Co56, scratch); + + scratch = screened_rates(k_co57_to_ni57) + screened_rates(k_p_co57_to_n_ni57_derived)*Y(H1)*state.rho; + jac.set(Ni57, Co57, scratch); + + scratch = screened_rates(k_n_ni56_to_ni57)*Y(N)*state.rho; + jac.set(Ni57, Ni56, scratch); + + scratch = -screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*state.rho - screened_rates(k_n_ni57_to_he4_fe54)*Y(N)*state.rho - screened_rates(k_n_ni57_to_ni58)*Y(N)*state.rho - screened_rates(k_n_ni57_to_p_co57)*Y(N)*state.rho - screened_rates(k_ni57_to_co57) - screened_rates(k_ni57_to_he4_fe53_derived) - screened_rates(k_ni57_to_n_ni56_derived) - screened_rates(k_ni57_to_p_co56_derived); + jac.set(Ni57, Ni57, scratch); + + scratch = screened_rates(k_ni58_to_n_ni57_derived); + jac.set(Ni57, Ni58, scratch); + + scratch = screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*state.rho; + jac.set(Ni57, Zn60, scratch); + + scratch = screened_rates(k_n_ni57_to_ni58)*Y(Ni57)*state.rho - screened_rates(k_n_ni58_to_he4_fe55)*Y(Ni58)*state.rho; + jac.set(Ni58, N, scratch); + + scratch = screened_rates(k_p_co57_to_ni58)*Y(Co57)*state.rho - screened_rates(k_p_ni58_to_cu59)*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)*Y(Co55)*state.rho + screened_rates(k_he4_fe54_to_ni58)*Y(Fe54)*state.rho + screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(Fe55)*state.rho; + jac.set(Ni58, He4, scratch); + + scratch = screened_rates(k_he4_fe54_to_ni58)*Y(He4)*state.rho; + jac.set(Ni58, Fe54, scratch); + + scratch = screened_rates(k_he4_fe55_to_n_ni58_derived)*Y(He4)*state.rho; + jac.set(Ni58, Fe55, scratch); + + scratch = screened_rates(k_he4_co55_to_p_ni58)*Y(He4)*state.rho; + jac.set(Ni58, Co55, scratch); + + scratch = screened_rates(k_p_co57_to_ni58)*Y(H1)*state.rho; + jac.set(Ni58, Co57, scratch); + + scratch = screened_rates(k_n_ni57_to_ni58)*Y(N)*state.rho; + jac.set(Ni58, Ni57, scratch); + + scratch = -screened_rates(k_n_ni58_to_he4_fe55)*Y(N)*state.rho - screened_rates(k_ni58_to_he4_fe54_derived) - screened_rates(k_ni58_to_n_ni57_derived) - screened_rates(k_ni58_to_p_co57_derived) - screened_rates(k_p_ni58_to_cu59)*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); + + scratch = -screened_rates(k_n_cu59_to_he4_co56)*Y(Cu59)*state.rho; + jac.set(Cu59, N, scratch); + + scratch = -screened_rates(k_p_cu59_to_he4_ni56)*Y(Cu59)*state.rho - screened_rates(k_p_cu59_to_zn60)*Y(Cu59)*state.rho + screened_rates(k_p_ni58_to_cu59)*Y(Ni58)*state.rho; + jac.set(Cu59, H1, scratch); + + scratch = screened_rates(k_he4_co55_to_cu59)*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); + + scratch = screened_rates(k_he4_co55_to_cu59)*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); + + 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)*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)*Y(N)*state.rho - screened_rates(k_p_cu59_to_he4_ni56)*Y(H1)*state.rho - screened_rates(k_p_cu59_to_zn60)*Y(H1)*state.rho; + jac.set(Cu59, Cu59, scratch); + + scratch = screened_rates(k_zn60_to_p_cu59_derived); + jac.set(Cu59, Zn60, scratch); + + scratch = -screened_rates(k_n_zn60_to_he4_ni57)*Y(Zn60)*state.rho; + jac.set(Zn60, N, scratch); + + scratch = screened_rates(k_p_cu59_to_zn60)*Y(Cu59)*state.rho; + jac.set(Zn60, H1, scratch); + + scratch = screened_rates(k_he4_ni56_to_zn60)*Y(Ni56)*state.rho + screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(Ni57)*state.rho; + jac.set(Zn60, He4, scratch); + + scratch = screened_rates(k_he4_ni56_to_zn60)*Y(He4)*state.rho; + jac.set(Zn60, Ni56, scratch); + + scratch = screened_rates(k_he4_ni57_to_n_zn60_derived)*Y(He4)*state.rho; + jac.set(Zn60, Ni57, scratch); + + scratch = screened_rates(k_p_cu59_to_zn60)*Y(H1)*state.rho; + jac.set(Zn60, Cu59, scratch); + + scratch = -screened_rates(k_n_zn60_to_he4_ni57)*Y(N)*state.rho - screened_rates(k_zn60_to_he4_ni56_derived) - screened_rates(k_zn60_to_p_cu59_derived); + jac.set(Zn60, Zn60, scratch); + + +} + + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void actual_jac(const burn_t& state, MatrixType& jac) +{ + + // Set molar abundances + Array1D Y; + for (int i = 1; i <= NumSpec; ++i) { + Y(i) = state.xn[i-1] * aion_inv[i-1]; + } + + + jac.zero(); + + rate_derivs_t rate_eval; + + constexpr int do_T_derivatives = 1; + evaluate_rates(state, rate_eval); + + // Species Jacobian elements with respect to other species + + jac_nuc(state, jac, Y, rate_eval.screened_rates); + + // Energy generation rate Jacobian elements with respect to species + + for (int j = 1; j <= NumSpec; ++j) { + auto jac_slice_2 = [&](int i) -> Real { return jac.get(i, j); }; + ener_gener_rate(jac_slice_2, jac(net_ienuc,j)); + } + + // Account for the thermal neutrino losses + + Real sneut, dsneutdt, dsneutdd, dsnuda, dsnudz; + constexpr int do_derivatives{1}; + sneut5(state.T, state.rho, state.abar, state.zbar, sneut, dsneutdt, dsneutdd, dsnuda, dsnudz); + + for (int j = 1; j <= NumSpec; ++j) { + Real b1 = (-state.abar * state.abar * dsnuda + (zion[j-1] - state.zbar) * state.abar * dsnudz); + jac.add(net_ienuc, j, -b1); + } + + + // Evaluate the Jacobian elements with respect to energy by + // calling the RHS using d(rate) / dT and then transform them + // to our energy integration variable. + + Array1D yderivs; + + rhs_nuc(state, yderivs, Y, rate_eval.dscreened_rates_dT); + + for (int k = 1; k <= NumSpec; k++) { + jac.set(k, net_ienuc, temperature_to_energy_jacobian(state, yderivs(k))); + } + + + // finally, d(de/dt)/de + + Real jac_e_T; + ener_gener_rate(yderivs, jac_e_T); + jac_e_T -= dsneutdt; + jac.set(net_ienuc, net_ienuc, temperature_to_energy_jacobian(state, jac_e_T)); + +} + + +AMREX_INLINE +void actual_rhs_init () { + + init_tabular(); + +} + + +#endif diff --git a/networks/He-C-Fe-group/inputs.burn_cell.VODE b/networks/He-C-Fe-group/inputs.burn_cell.VODE new file mode 100644 index 0000000000..320d26fb4d --- /dev/null +++ b/networks/He-C-Fe-group/inputs.burn_cell.VODE @@ -0,0 +1,62 @@ +unit_test.run_prefix = "react_pynucastro_" + +unit_test.small_temp = 1e5 +unit_test.small_dens = 1e5 + +integrator.burner_verbose = 0 + +# Set which jacobian to use +# 1 = analytic jacobian +# 2 = numerical jacobian +integrator.jacobian = 1 + +integrator.renormalize_abundances = 0 + +integrator.rtol_spec = 1.0e-6 +integrator.rtol_enuc = 1.0e-6 +integrator.atol_spec = 1.0e-6 +integrator.atol_enuc = 1.0e-6 + + +unit_test.tmax = 1.0 +unit_test.nsteps = 1000 + +unit_test.density = 1.0e7 +unit_test.temperature = 1.0e8 + +unit_test.X1 = 1.0 +unit_test.X2 = 0.0 +unit_test.X3 = 0.0 +unit_test.X4 = 0.0 +unit_test.X5 = 0.0 +unit_test.X6 = 0.0 +unit_test.X7 = 0.0 +unit_test.X8 = 0.0 +unit_test.X9 = 0.0 +unit_test.X10 = 0.0 +unit_test.X11 = 0.0 +unit_test.X12 = 0.0 +unit_test.X13 = 0.0 +unit_test.X14 = 0.0 +unit_test.X15 = 0.0 +unit_test.X16 = 0.0 +unit_test.X17 = 0.0 +unit_test.X18 = 0.0 +unit_test.X19 = 0.0 +unit_test.X20 = 0.0 +unit_test.X21 = 0.0 +unit_test.X22 = 0.0 +unit_test.X23 = 0.0 +unit_test.X24 = 0.0 +unit_test.X25 = 0.0 +unit_test.X26 = 0.0 +unit_test.X27 = 0.0 +unit_test.X28 = 0.0 +unit_test.X29 = 0.0 +unit_test.X30 = 0.0 +unit_test.X31 = 0.0 +unit_test.X32 = 0.0 +unit_test.X33 = 0.0 +unit_test.X34 = 0.0 +unit_test.X35 = 0.0 +unit_test.X36 = 0.0 diff --git a/networks/He-C-Fe-group/partition_functions.H b/networks/He-C-Fe-group/partition_functions.H new file mode 100644 index 0000000000..03c1db628a --- /dev/null +++ b/networks/He-C-Fe-group/partition_functions.H @@ -0,0 +1,1011 @@ +#ifndef PARTITION_FUNCTIONS_H +#define PARTITION_FUNCTIONS_H + +#include +#include + +#include +#include +#include + +using namespace amrex; +using namespace Species; + +namespace part_fun { + + constexpr int npts_1 = 72; + + // this is T9 + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real temp_array_1[npts_1] = { + 0.01, 0.15, 0.2, 0.3, 0.4, + 0.5, 0.6, 0.7, 0.8, 0.9, + 1.0, 1.5, 2.0, 2.5, 3.0, + 3.5, 4.0, 4.5, 5.0, 6.0, + 7.0, 8.0, 9.0, 10.0, 12.0, + 14.0, 16.0, 18.0, 20.0, 22.0, + 24.0, 26.0, 28.0, 30.0, 35.0, + 40.0, 45.0, 50.0, 55.0, 60.0, + 65.0, 70.0, 75.0, 80.0, 85.0, + 90.0, 95.0, 100.0, 105.0, 110.0, + 115.0, 120.0, 125.0, 130.0, 135.0, + 140.0, 145.0, 150.0, 155.0, 160.0, + 165.0, 170.0, 175.0, 180.0, 190.0, + 200.0, 210.0, 220.0, 230.0, 240.0, + 250.0, 275.0, + }; + + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real o16_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.012837224705172217, + 0.03742649794062367, 0.07188200730612536, 0.1205739312058499, 0.1846914308175988, 0.26245108973042947, + 0.3463529744506387, 0.437750562820388, 0.534026106056135, 0.6344772701607315, 0.8981764834976765, + 1.1760912590556813, 1.4668676203541096, 1.7641761323903307, 2.0644579892269186, 2.367355921026019, + 2.667452952889954, 2.9656719712201065, 3.2624510897304293, 3.555094448578319, 3.845098040014257, + 4.133538908370218, 4.419955748489758, 4.704150516839799, 4.986771734266245, 5.267171728403014, + 5.547774705387822, 5.8267225201689925, 6.103803720955957, 6.380211241711606, 6.6551384348113825, + 6.929929560084588, 7.204119982655925, 7.477121254719663, 7.748962861256161, 8.021189299069938, + 8.292256071356476, 8.562292864456476, 8.832508912706237, 9.100370545117563, 9.640481436970422, + 10.178976947293169, 10.714329759745233, 11.250420002308894, 11.785329835010767, 12.320146286111054, + 12.856124444242301, 14.195899652409233, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real f18_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.008600171761917567, 0.02530586526477026, 0.04921802267018165, + 0.08635983067474821, 0.12385164096708583, 0.16731733474817606, 0.20682587603184974, 0.28330122870354957, + 0.35024801833416286, 0.4065401804339551, 0.45331834004703764, 0.4941545940184428, 0.6646419755561255, + 0.756636108245848, 0.8419848045901139, 0.9232440186302765, 1.0043213737826426, 1.08278537031645, + 1.1643528557844371, 1.250420002308894, 1.3384564936046048, 1.429752280002408, 1.6748611407378116, + 1.9405164849325671, 2.220108088040055, 2.505149978319906, 2.79309160017658, 3.0827853703164503, + 3.369215857410143, 3.6570558528571038, 3.9434945159061026, 4.230448921378274, 4.514547752660286, + 4.800029359244134, 5.086359830674748, 5.371067862271737, 5.657055852857104, 5.94299959336604, + 6.230448921378274, 6.515873843711679, 6.803457115648414, 7.089905111439398, 7.378397900948138, + 7.6674529528899535, 7.956168430475364, 8.24551266781415, 8.534026106056135, 8.823474229170301, + 9.113943352306837, 9.403120521175818, 9.69460519893357, 9.984977126415494, 10.568201724066995, + 11.152288344383056, 11.73798732633343, 12.324282455297693, 12.913813852383717, 13.503790683057181, + 14.096910013008056, 15.584331224367531, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ne20_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 6.948656121358244e-06, 0.00016586881316040883, 0.0011034421778731533, 0.003892457497077877, + 0.00954097493969645, 0.01859524021829981, 0.03107544483336982, 0.04661767038571622, 0.0846241727916796, + 0.12822183093465686, 0.174311933665943, 0.22124805254602342, 0.2683385291343481, 0.36172783601759284, + 0.456366033129043, 0.5514499979728752, 0.6483600109809317, 0.7466341989375788, 0.8481891169913987, + 0.9532763366673044, 1.0644579892269186, 1.1789769472931695, 1.3031960574204888, 1.6434526764861874, + 2.0170333392987803, 2.4099331233312946, 2.8068580295188172, 3.2013971243204513, 3.5899496013257077, + 3.9731278535996988, 4.352182518111363, 4.725911632295048, 5.096910013008056, 5.465382851448418, + 5.830588668685144, 6.193124598354461, 6.556302500767288, 6.916980047320382, 7.276461804173244, + 7.6344772701607315, 7.991669007379948, 8.34830486304816, 8.703291378118662, 9.056904851336473, + 9.411619705963231, 9.763427993562937, 10.117271295655764, 10.46686762035411, 10.818225893613956, + 11.170261715394957, 11.519827993775719, 11.869231719730976, 12.217483944213907, 12.916453948549925, + 13.613841821876068, 14.3096301674259, 15.004321373782643, 15.702430536445526, 16.399673721481037, + 17.096910013008056, 18.838849090737256, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ne21_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 8.685880952436747e-07, 2.4754079983896385e-05, + 0.0001901793368385613, 0.0007372402163824667, 0.0019404293040471109, 0.0040039218205739505, 0.007021925578680666, + 0.010986057727319889, 0.04118891376750491, 0.0777722105539352, 0.11230632139519969, 0.14260436993417835, + 0.16888829052162926, 0.19197861038694294, 0.2126999294489824, 0.23172922294680384, 0.2666728249346414, + 0.2996105757244402, 0.3321030146619489, 0.3650139334448046, 0.3988146649899236, 0.46982201597816303, + 0.546542663478131, 0.6283889300503115, 0.7176705030022621, 0.8142475957319202, 0.9180303367848801, + 1.0293837776852097, 1.14921911265538, 1.276461804173244, 1.4082399653118496, 1.760422483423212, + 2.1271047983648077, 2.499687082618404, 2.870403905279027, 3.2380461031287955, 3.603144372620182, + 3.9656719712201065, 4.326335860928752, 4.683947130751513, 5.041392685158225, 5.396199347095736, + 5.752048447819439, 6.107209969647869, 6.4623979978989565, 6.817565369559781, 7.173186268412274, + 7.5276299008713385, 7.8819549713396, 8.23552844690755, 8.5910646070265, 8.944975908412047, + 9.298853076409706, 9.653212513775344, 10.008600171761918, 10.361727836017593, 10.716837723299525, + 11.071882007306126, 11.424881636631067, 11.780317312140152, 12.133538908370218, 12.84447717574568, + 13.55509444857832, 14.267171728403014, 14.979548374704095, 15.693726948923647, 16.40823996531185, + 17.123851640967086, 18.923244018630278, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real na22_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 4.342942647204277e-07, 2.605759074128604e-06, 1.3028639028478182e-05, 4.559852671908958e-05, 0.00011984873864003521, + 0.0002626687122755098, 0.0029928105843703536, 0.010836979076306525, 0.02428653620880802, 0.04242704733870039, + 0.06402310268617777, 0.08796765614200239, 0.11338308526345184, 0.13961150376071624, 0.19275584832811385, + 0.2451455832343637, 0.2958922043442712, 0.3448263511644293, 0.39212883410565064, 0.48287358360875376, + 0.5717088318086876, 0.6627578316815741, 0.756636108245848, 0.8561244442423004, 0.9633155113861113, + 1.0791812460476249, 1.2013971243204515, 1.3283796034387378, 1.4638929889859074, 1.8215135284047732, + 2.1931245983544616, 2.5705429398818973, 2.9474337218870508, 3.322219294733919, 3.6954816764901977, + 4.068185861746161, 4.4361626470407565, 4.804820678721162, 5.173186268412274, 5.540329474790874, + 5.907411360774586, 6.27415784926368, 6.642464520242122, 7.008600171761918, 7.378397900948138, + 7.746634198937579, 8.113943352306837, 8.482873583608754, 8.851258348719075, 9.220108088040055, + 9.588831725594208, 9.957607287060096, 10.32633586092875, 10.695481676490198, 11.064457989226918, + 11.4345689040342, 11.80413943233535, 12.173186268412273, 12.544068044350276, 13.285557309007773, + 14.02938377768521, 14.773054693364262, 15.518513939877888, 16.264817823009537, 17.012837224705173, + 17.76492298464989, 19.64933485871214, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real na23_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 1.7371744532199383e-06, + 2.3885539658322847e-05, 0.00013113713282427166, 0.0004423207528904243, 0.0010999766245234136, 0.002232173197636284, + 0.003929471989446119, 0.021128907257497758, 0.0479649055541949, 0.07726249885377771, 0.10525805048344757, + 0.13079227003361296, 0.15390201926318714, 0.17503899265296466, 0.19472325248715508, 0.23147162936712465, + 0.26668504599022796, 0.3016913566252569, 0.33713446730536967, 0.37335950050705796, 0.4487063199050799, + 0.5314789170422551, 0.6211762817750351, 0.7218106152125465, 0.8344207036815325, 0.9590413923210935, + 1.0934216851622351, 1.2405492482825997, 1.3926969532596658, 1.5514499979728753, 1.9628426812012425, + 2.383815365980431, 2.803457115648414, 3.220108088040055, 3.6344772701607315, 4.045322978786658, + 4.453318340047038, 4.857935264719429, 5.26245108973043, 5.664641975556125, 6.064457989226918, + 6.466867620354109, 6.867467487859051, 7.267171728403014, 7.666517980554881, 8.064457989226918, + 8.463892988985908, 8.861534410859038, 9.260071387985075, 9.656098202012831, 10.05307844348342, + 10.450249108319362, 10.846337112129806, 11.243038048686294, 11.638489256954637, 12.03342375548695, + 12.429752280002408, 12.826074802700827, 13.222716471147583, 13.6170003411209, 14.40823996531185, + 15.20139712432045, 15.993876914941211, 16.787460474518415, 17.582063362911708, 18.378397900948137, + 19.17609125905568, 21.173186268412273, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real mg24_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 4.342942647204277e-07, 5.471765757979972e-05, 0.0007714899373308071, 0.0037633124724497633, 0.010764115210255056, + 0.022625058328435317, 0.039160607597355665, 0.05951911533271758, 0.08262238957783377, 0.13324118689139802, + 0.185518640557017, 0.2370005304649223, 0.2870228837145503, 0.3357157930198095, 0.43136376415898736, + 0.5263392773898441, 0.6253124509616739, 0.7307822756663892, 0.8463371121298052, 0.9749719942980689, + 1.1172712956557642, 1.2741578492636798, 1.4424797690644486, 1.6232492903979006, 2.103803720955957, + 2.598790506763115, 3.089905111439398, 3.577491799837225, 4.05307844348342, 4.52244423350632, + 4.984527313343793, 5.440909082065217, 5.894869656745253, 6.344392273685111, 6.791690649020118, + 7.235528446907549, 7.6785183790401135, 8.12057393120585, 8.558708570533165, 8.99563519459755, + 9.431363764158988, 9.866287339084195, 10.301029995663981, 10.732393759822969, 11.164352855784436, + 11.594392550375426, 12.02530586526477, 12.453318340047037, 12.881384656770573, 13.3096301674259, + 13.736396502276643, 14.161368002234974, 14.588831725594208, 15.012837224705173, 15.86569605991607, + 16.715167357848458, 17.56466606425209, 18.413299764081252, 19.26245108973043, 20.113943352306837, + 20.96284268120124, 23.089905111439396, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real al27_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 8.685880952436747e-07, 3.4743419578801875e-06, + 1.0422942490878872e-05, 0.00032429686817590634, 0.0018833542475028369, 0.005477808032249925, 0.011239204769804155, + 0.01890428637893266, 0.028126564553716336, 0.03862016194970278, 0.05018673657450416, 0.07608019569340022, + 0.10530099179798431, 0.13774106877747655, 0.1734986149135784, 0.21278880583973628, 0.30319605742048883, + 0.4099331233312945, 0.5352941200427705, 0.6794278966121189, 0.8394780473741984, 1.0128372247051722, + 1.1958996524092338, 1.3873898263387294, 1.5843312243675307, 1.783903579272735, 2.287801729930226, + 2.7944880466591697, 3.296665190261531, 3.7944880466591697, 4.2878017299302265, 4.779596491257824, + 5.269512944217916, 5.7558748556724915, 6.2405492482825995, 6.725094521081469, 7.209515014542631, + 7.691081492122969, 8.173186268412275, 8.653212513775344, 9.133538908370218, 9.611723308007342, + 10.089905111439398, 10.568201724066995, 11.045322978786658, 11.521138083704036, 11.997386384397313, + 12.472756449317213, 12.947923619831727, 13.423245873936807, 13.89707700320942, 14.371067862271737, + 14.845098040014257, 15.320146286111054, 15.79309160017658, 16.267171728403014, 17.214843848047696, + 18.161368002234976, 19.110589710299248, 20.060697840353612, 21.012837224705173, 21.96284268120124, + 22.915927211697117, 25.305351369446623, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real si28_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.1714669808675565e-06, 7.12184552784347e-05, 0.0005624812393818785, 0.002223099674110693, + 0.0059171580771474625, 0.012282407118825528, 0.02157709561709228, 0.03370716078346824, 0.06502557053071237, + 0.1027522772573885, 0.14387160800291654, 0.1866035043986153, 0.2302807913268337, 0.3222192947339193, + 0.42324587393680785, 0.541579243946581, 0.6839471307515121, 0.8518696007297664, 1.041392685158225, + 1.250420002308894, 1.4727564493172123, 1.7024305364455252, 1.9375178920173466, 2.531478917042255, + 3.12057393120585, 3.7024305364455254, 4.271841606536499, 4.834420703681532, 5.389166084364533, + 5.937517892017347, 6.481442628502305, 7.021189299069938, 7.557507201905658, 8.089905111439398, + 8.622214022966295, 9.14921911265538, 9.675778341674086, 10.198657086954423, 10.721810615212547, + 11.2405492482826, 11.75966784468963, 12.276461804173245, 12.791690649020119, 13.305351369446624, + 13.818225893613956, 14.330413773349191, 14.840733234611807, 15.350248018334163, 15.85913829729453, + 16.367355921026018, 16.8750612633917, 17.38201704257487, 17.88874096068289, 18.90036712865647, + 19.911157608739977, 20.921166050637737, 21.9304395947667, 22.93951925261862, 23.948901760970212, + 24.958563883221967, 27.48572142648158, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real p31_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 4.342942647204277e-07, 4.820401221806151e-05, 0.0005624812393818785, 0.002468018295084159, 0.006670091319158333, + 0.013688955408210905, 0.023674199668938998, 0.03655105068012579, 0.05215275629691826, 0.09085986215557586, + 0.13887811232360858, 0.19608052467040618, 0.26289299085539924, 0.33982852740425823, 0.5237464668115644, + 0.7419390777291989, 0.9827233876685453, 1.235528446907549, 1.4899584794248346, 1.7442929831226763, + 1.9960736544852753, 2.24551266781415, 2.4913616938342726, 2.733999286538387, 3.330413773349191, + 3.9132839017604186, 4.48572142648158, 5.049218022670182, 5.608526033577194, 6.164352855784437, + 6.714329759745233, 7.264817823009537, 7.812913356642856, 8.359835482339887, 8.90687353472207, + 9.453318340047037, 9.997823080745725, 10.54282542695918, 11.086359830674748, 11.629409599102718, + 12.170261715394957, 12.712649701627212, 13.255272505103306, 13.79448804665917, 14.334453751150932, + 14.874481817699467, 15.414973347970818, 15.953276336667304, 16.492760389026838, 17.029383777685208, + 17.570542939881896, 18.10720996964787, 18.64738297011462, 19.187520720836464, 20.264817823009537, + 21.342422680822207, 22.42160392686983, 23.503790683057183, 24.5854607295085, 25.66931688056611, + 26.75511226639507, 29.477121254719663, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real s32_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 5.211502513843472e-06, 6.948155872801059e-05, 0.0003893875360542875, + 0.001336870159627728, 0.003378232401258555, 0.006963377556787149, 0.012456734172197398, 0.03011415790845077, + 0.057484285853877215, 0.0950053699501746, 0.14295136988131382, 0.20165707691270435, 0.3521825181113625, + 0.5502283530550941, 0.787460474518415, 1.0569048513364727, 1.3404441148401183, 1.631443769013172, + 1.92272545799326, 2.2121876044039577, 2.4955443375464483, 2.7737864449811935, 3.44870631990508, + 4.096910013008056, 4.726727209026572, 5.3404441148401185, 5.944975908412048, 6.541579243946581, + 7.133538908370218, 7.720985744153739, 8.305351369446624, 8.888740960682892, 9.469822015978163, + 10.049218022670182, 10.628388930050312, 11.20682587603185, 11.78175537465247, 12.356025857193123, + 12.9304395947667, 13.502427119984432, 14.075546961392531, 14.645422269349092, 15.214843848047698, + 15.783903579272735, 16.352182518111363, 16.920123326290724, 17.487138375477187, 18.053078443483418, + 18.621176281775035, 19.187520720836464, 19.753583058892907, 20.318063334962762, 21.450249108319362, + 22.580924975675618, 23.71264970162721, 24.84385542262316, 25.976808337338067, 27.110589710299248, + 28.24551266781415, 31.08635983067475, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real cl35_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.8239985202970884e-05, 0.00020710907627919203, 0.0009431313908907785, 0.002698987769012708, + 0.005906875936599731, 0.010907713111778477, 0.017957319425972694, 0.027253766962590423, 0.0532486689285615, + 0.09021853774459236, 0.13964204799692437, 0.20296975189964023, 0.28111453407611076, 0.48000694295715063, + 0.7234556720351858, 0.9934362304976116, 1.2741578492636798, 1.5587085705331658, 1.841984804590114, + 2.123851640967086, 2.401400540781544, 2.678518379040114, 2.951823035315912, 3.6263403673750423, + 4.2878017299302265, 4.942008053022313, 5.588831725594207, 6.230448921378274, 6.870988813760575, + 7.509202522331103, 8.146128035678238, 8.781036938621131, 9.414973347970818, 10.049218022670182, + 10.681241237375588, 11.313867220369154, 11.943988875073773, 12.574031267727719, 13.204119982655925, + 13.831229693867064, 14.457881896733992, 15.086359830674748, 15.710963118995275, 16.33645973384853, + 16.96189547366785, 17.586587304671756, 18.212187604403958, 18.835056101720117, 19.45939248775923, + 20.08278537031645, 20.705863712283918, 21.33041377334919, 21.95375969173323, 23.20139712432045, + 24.450249108319362, 25.699837725867244, 26.950364854376122, 28.20139712432045, 29.456366033129044, + 30.71264970162721, 33.862131379313034, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ar36_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 4.342942647204277e-07, 2.3451268844214655e-05, 0.00023141729162330258, 0.0010622869460975197, + 0.0031540913067783544, 0.007135153007315866, 0.013474284663478431, 0.02245187936733961, 0.048771089883939175, + 0.08643600351808534, 0.13560900039779808, 0.1965840257248699, 0.2696980636423851, 0.45331834004703764, + 0.6848453616444125, 0.9585638832219674, 1.2624510897304295, 1.5809249756756194, 1.9057958803678685, + 2.230448921378274, 2.550228353055094, 2.8662873390841948, 3.1760912590556813, 3.929418925714293, + 4.657055852857104, 5.365487984890899, 6.060697840353612, 6.746634198937579, 7.426511261364575, + 8.100370545117563, 8.773054693364262, 9.442479769064448, 10.11058971029925, 10.77451696572855, + 11.437750562820387, 12.100370545117563, 12.758911892397974, 13.41664050733828, 14.071882007306126, + 14.727541257028557, 15.38201704257487, 16.03342375548695, 16.684845361644413, 17.33445375115093, + 17.983626287124533, 18.63144376901317, 19.27875360095283, 19.92582757462474, 20.57170883180869, + 21.217483944213907, 21.863322860120455, 22.50785587169583, 23.152288344383056, 24.440909082065218, + 25.72916478969277, 27.01703333929878, 28.305351369446623, 29.595496221825574, 30.885926339801433, + 32.17897694729317, 35.41329976408125, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real k39_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 3.908632748276029e-06, 3.4307908925770636e-05, + 0.00016282990201490303, 0.0005394928156396339, 0.0014074368520356395, 0.0031075244141559894, 0.010846721573671135, + 0.028297088943748088, 0.06095682921468604, 0.11414775667614005, 0.1912997955319451, 0.4132997640812518, + 0.7015679850559274, 1.0170333392987803, 1.3384564936046048, 1.6599162000698502, 1.9772662124272926, + 2.292256071356476, 2.6020599913279625, 2.910090545594068, 3.214843848047698, 3.9684829485539352, + 4.710963118995275, 5.444044795918076, 6.173186268412274, 6.897627091290442, 7.619093330626742, + 8.338456493604605, 9.056904851336473, 9.771587480881255, 10.48572142648158, 11.198657086954423, + 11.907948521612273, 12.6170003411209, 13.324282455297693, 14.02938377768521, 14.733999286538387, + 15.437750562820389, 16.139879086401237, 16.839478047374197, 17.539076098792776, 18.238046103128795, + 18.936513742478894, 19.633468455579585, 20.33041377334919, 21.02530586526477, 21.723455672035186, + 22.418301291319747, 23.113943352306837, 23.809559714635267, 24.505149978319906, 25.89542254603941, + 27.285557309007775, 28.678518379040113, 30.071882007306126, 31.465382851448418, 32.860936620700095, + 34.25767857486918, 37.761927838420526, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ca40_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 3.4743419578801875e-06, + 2.6056887215373325e-05, 0.00012419046343446514, 0.0004254001802063995, 0.0011532564515138494, 0.005324252203746658, + 0.016451245325404363, 0.03938040551055626, 0.07909980819723089, 0.13972800117379408, 0.33041377334919086, + 0.6063813651106049, 0.9385197251764918, 1.2988530764097066, 1.6693168805661123, 2.037426497940624, + 2.403120521175818, 2.761927838420529, 3.113943352306837, 3.459392487759231, 4.301029995663981, + 5.117271295655764, 5.9148718175400505, 6.701567985055927, 7.478566495593843, 8.250420002308894, + 9.01703333929878, 9.781036938621131, 10.540329474790873, 11.296665190261532, 12.049218022670182, + 12.801403710017356, 13.549003262025789, 14.294466226161592, 15.037426497940624, 15.779596491257825, + 16.518513939877888, 17.255272505103306, 17.99211148778695, 18.72591163229505, 19.45939248775923, + 20.19033169817029, 20.920645001406786, 21.650307523131936, 22.378397900948137, 23.10720996964787, + 23.832508912706235, 24.558708570533167, 25.285557309007775, 26.008600171761916, 27.45939248775923, + 28.907948521612273, 30.356025857193124, 31.804820678721164, 33.25285303097989, 34.704150516839796, + 36.15533603746506, 39.78816837114117, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real sc43_pf_array[npts_1] = { + 0.0, 1.7371744532199383e-06, 3.2136602621167924e-05, 0.0006088881229004689, 0.0026394223512168323, + 0.006348788305828209, 0.011375876688411647, 0.017242084547645732, 0.02355944464942603, 0.03006796257543875, + 0.03661053325876141, 0.06810122175372875, 0.09804672309111766, 0.12848424511267922, 0.16058766813472455, + 0.1946644458530261, 0.23055748142930874, 0.26792627543589265, 0.3064134462100847, 0.3856843680943845, + 0.4672642331672854, 0.5514418243762168, 0.6393550853495756, 0.732465412501299, 0.9380190974762103, + 1.1760912590556813, 1.4456042032735976, 1.7371926427047373, 2.0453229787866576, 2.359835482339888, + 2.678518379040114, 3.0, 3.322219294733919, 3.6424645202421213, 4.439332693830263, + 5.230448921378274, 6.017033339298781, 6.8020892578817325, 7.585460729508501, 8.36735592102602, + 9.14921911265538, 9.929418925714293, 10.710117365111817, 11.489958479424836, 12.267171728403014, + 13.045322978786658, 13.822168079368018, 14.597695185925513, 15.371067862271737, 16.146128035678238, + 16.916453948549925, 17.687528961214635, 18.45788189673399, 19.227886704613674, 19.99694924849538, + 20.76492298464989, 21.532754378992497, 22.30102999566398, 23.068185861746162, 23.835690571492425, + 24.602059991327963, 25.369215857410143, 26.136720567156406, 26.903632516084237, 28.439332693830263, + 29.97497199429807, 31.511883360978874, 33.05307844348342, 34.59217675739587, 36.13672056715641, + 37.68214507637383, 41.55870857053316, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ti44_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 4.342942647204277e-07, 1.7371744532199383e-06, + 7.382943437485089e-06, 0.0004987179011085028, 0.004043078170724821, 0.01413521502778782, 0.032426549056877405, + 0.05856115101668825, 0.09131586357749837, 0.1294359425571275, 0.17190802974603506, 0.2667731684215763, + 0.37035022176288673, 0.47788465213962983, 0.5860935485551829, 0.693748838923791, 0.9116901587538612, + 1.1522883443830565, 1.4409090820652177, 1.7788744720027396, 2.1522883443830563, 2.5415792439465807, + 2.9334872878487053, 3.322219294733919, 3.7041505168397992, 4.079181246047625, 4.996073654485276, + 5.885361220031512, 6.757396028793024, 7.619093330626742, 8.472756449317213, 9.32221929473392, + 10.167317334748176, 11.008600171761918, 11.85003325768977, 12.687528961214634, 13.52244423350632, + 14.354108439147401, 15.1846914308176, 16.012837224705173, 16.836956737059552, 17.65991620006985, + 18.481442628502304, 19.298853076409706, 20.117271295655765, 20.9329808219232, 21.746634198937578, + 22.559906625036113, 23.371067862271737, 24.181843587944773, 24.991226075692495, 25.799340549453582, + 26.60745502321467, 27.414973347970818, 28.220108088040057, 29.02530586526477, 30.63748972951251, + 32.247973266361804, 33.8561244442423, 35.46538285144842, 37.07554696139253, 38.68484536164441, + 40.29666519026153, 44.33041377334919, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real v47_pf_array[npts_1] = { + 2.518834949526704e-05, 0.0007584840322833457, 0.004226764680268442, 0.024475815916759104, 0.05998274311239668, + 0.10280266491559079, 0.14672973694476377, 0.1885209834473098, 0.22688178294786615, 0.2615226538586488, + 0.29260868165003595, 0.4071409645052156, 0.48021742410342627, 0.5329079468954852, 0.5750746363992424, + 0.6115960803783954, 0.6450760714077263, 0.6770396273057074, 0.708482088001612, 0.7725618227871047, + 0.8417322779915452, 0.9194240819892174, 1.0083997539725875, 1.110602503281611, 1.3560258571931227, + 1.651278013998144, 1.9813655090785445, 2.330413773349191, 2.6884198220027105, 3.0492180226701815, + 3.41161970596323, 3.7708520116421442, 4.127104798364807, 4.484299839346786, 5.365487984890899, + 6.238046103128795, 7.103803720955957, 7.967547976218862, 8.830588668685145, 9.69460519893357, + 10.557507201905658, 11.421603926869832, 12.285557309007773, 13.146128035678238, 14.008600171761918, + 14.869231719730976, 15.728353782021228, 16.586587304671756, 17.442479769064448, 18.298853076409706, + 19.152288344383056, 20.00432137378264, 20.85793526471943, 21.70926996097583, 22.559906625036113, + 23.409933123331296, 24.260071387985075, 25.10720996964787, 25.956648579205204, 26.804820678721164, + 27.652246341003323, 28.50105926221775, 29.34830486304816, 30.195899652409235, 31.891537457672566, + 33.588831725594204, 35.28555730900777, 36.985875357308394, 38.68752896121463, 40.39093510710338, + 42.096910013008056, 46.372912002970104, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real cr48_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 8.685880952436747e-07, 8.251516766996927e-06, 3.951899976600419e-05, 0.00013330794422173613, + 0.00035120219371925, 0.006401856055765157, 0.02685304570895992, 0.06215311825135839, 0.10696594975266842, + 0.15598699109465686, 0.205815844445829, 0.25471214514215257, 0.30198352738731143, 0.39152612205819926, + 0.47640596203905256, 0.5602400543128645, 0.6474755901642433, 0.7433846322638775, 0.983175072037813, + 1.3096301674258988, 1.7067177823367587, 2.1398790864012365, 2.577491799837225, 3.012837224705172, + 3.437750562820388, 3.8549130223078554, 4.264817823009537, 4.666517980554881, 5.648360010980932, + 6.606381365110605, 7.550228353055094, 8.484299839346786, 9.414973347970818, 10.340444114840118, + 11.264817823009537, 12.1846914308176, 13.103803720955957, 14.021189299069938, 14.935003151453655, + 15.846337112129806, 16.75511226639507, 17.66181268553726, 18.565847818673518, 19.468347330412158, + 20.369215857410143, 21.267171728403014, 22.161368002234976, 23.056904851336473, 23.94939000664491, + 24.840733234611807, 25.73078227566639, 26.619093330626743, 27.50785587169583, 28.394451680826215, + 29.281033367247726, 30.164352855784436, 31.049218022670182, 31.934498451243567, 33.70156798505593, + 35.46834733041216, 37.23299611039215, 38.99913054128737, 40.764922984649886, 42.5327543789925, + 44.30102999566398, 48.727541257028555, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real mn51_pf_array[npts_1] = { + 0.0, 0.0, 4.342942647204277e-07, 6.0362737871404116e-05, 0.0005954436481690331, + 0.002352703452491265, 0.0058636025937444025, 0.011219737158250306, 0.018191443590229183, 0.026405776501228783, + 0.035473365577059296, 0.08393991903492294, 0.12694077261184436, 0.16267998396542166, 0.19356340377635362, + 0.22185561141496238, 0.2491212785730439, 0.27638918590325057, 0.30436276263857276, 0.36442247019537943, + 0.4326074417788097, 0.5117005179251304, 0.6041057952026397, 0.7115562776994953, 0.9717395908877782, + 1.287801729930226, 1.640481436970422, 2.0170333392987803, 2.403120521175818, 2.7944880466591697, + 3.1903316981702914, 3.5854607295085006, 3.9827233876685453, 4.380211241711606, 5.372912002970106, + 6.363611979892144, 7.354108439147401, 8.342422680822207, 9.328379603438737, 10.311753861055754, + 11.292256071356476, 12.269512944217917, 13.24551266781415, 14.214843848047698, 15.1846914308176, + 16.14921911265538, 17.110589710299248, 18.071882007306126, 19.029383777685208, 19.985426474083003, + 20.93851972517649, 21.88986172125819, 22.839478047374197, 23.787460474518415, 24.73399928653839, + 25.67942789661212, 26.6232492903979, 27.56702636615906, 28.5092025223311, 29.45178643552429, + 30.392696953259666, 31.33445375115093, 32.27415784926368, 33.2148438480477, 35.093421685162234, + 36.97451169273733, 38.8555191556678, 40.737192642704734, 42.620136054973756, 44.505149978319906, + 46.392696953259666, 51.12057393120585, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real mn55_pf_array[npts_1] = { + 4.342942647204277e-07, 3.387364853334388e-05, 0.00038895363056868775, 0.004419831370155497, 0.014756522503960728, + 0.030096733930175052, 0.04796879437078968, 0.06646457923244158, 0.08445866292767418, 0.10139372238408119, + 0.1170521039752435, 0.17736880968990507, 0.2173557426191723, 0.247461626286143, 0.27333907966395066, + 0.29784648633228855, 0.3224882671969808, 0.3481517618665124, 0.3754616886642864, 0.43708831382108987, + 0.5113111854322745, 0.6017866255084809, 0.7113195335442632, 0.8411244873729985, 1.1553360374650619, + 1.5289167002776547, 1.931457870689005, 2.3502480183341627, 2.7781512503836434, 3.2068258760318495, + 3.639486489268586, 4.071882007306125, 4.505149978319906, 4.937016107464814, 6.017033339298781, + 7.096910013008056, 8.176091259055681, 9.252853030979892, 10.324282455297693, 11.394451680826217, + 12.460897842756548, 13.523746466811565, 14.583198773968622, 15.638489256954637, 16.69108149212297, + 17.73878055848437, 18.783903579272735, 19.826074802700827, 20.864511081058392, 21.90091306773767, + 22.935003151453653, 23.966610986681935, 24.996073654485276, 26.02530586526477, 27.049218022670182, + 28.07554696139253, 29.096910013008056, 30.12057393120585, 31.139879086401237, 32.16136800223497, + 33.18184358794477, 34.20139712432045, 35.22010808804006, 36.238046103128795, 38.27415784926368, + 40.311753861055756, 42.34830486304816, 44.38560627359831, 46.426511261364574, 48.46686762035411, + 50.51054501020661, 55.632457292184725, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real fe52_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.7371744532199383e-06, 9.554373504133797e-06, 3.778197643341552e-05, + 0.00011333607006293108, 0.0030242952161453874, 0.015422212189991184, 0.040215337130588114, 0.07478865660777631, + 0.11488541698288196, 0.15714990338033966, 0.19960737134331175, 0.24132628928072955, 0.3217032118192907, + 0.3993396534463543, 0.4778337814344742, 0.5623989859221217, 0.6594581913549248, 0.9153998352122699, + 1.2695129442179163, 1.6910814921229684, 2.143014800254095, 2.6009728956867484, 3.0569048513364727, + 3.503790683057181, 3.946452265013073, 4.383815365980431, 4.818225893613955, 5.888740960682893, + 6.944482672150168, 7.989894563718773, 9.02938377768521, 10.060697840353612, 11.086359830674748, + 12.11058971029925, 13.127104798364808, 14.139879086401237, 15.14921911265538, 16.152288344383056, + 17.152288344383056, 18.14921911265538, 19.143014800254097, 20.133538908370216, 21.12057393120585, + 22.103803720955955, 23.08635983067475, 24.06445798922692, 25.041392685158225, 26.01703333929878, + 26.989449817666692, 27.960946195733833, 28.930949031167522, 29.899273187317604, 30.8668778143375, + 31.833784374656478, 32.79934054945358, 33.76417613239033, 34.72835378202123, 36.655138434811384, + 38.58092497567562, 40.505149978319906, 42.42975228000241, 44.3541084391474, 46.28103336724773, + 48.20682587603185, 53.02938377768521, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real fe53_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.3028814913777444e-06, 6.080080186165502e-06, 2.0411360986187104e-05, + 5.384917717601842e-05, 0.00099773035779373, 0.004491618246634796, 0.011583129716232713, 0.02260939259680282, + 0.037536053829818145, 0.056184239286028684, 0.07836255359576534, 0.10393433162264984, 0.16508072986206487, + 0.2398955676994077, 0.3292351155694239, 0.43390673907557786, 0.5541592859186848, 0.8375884382355113, + 1.1702617153949575, 1.5314789170422551, 1.9148718175400503, 2.3096301674258988, 2.710963118995276, + 3.1172712956557644, 3.5276299008713385, 3.940516484932567, 4.3560258571931225, 5.396199347095736, + 6.440909082065217, 7.48572142648158, 8.52762990087134, 9.564666064252089, 10.597695185925513, + 11.626340367375043, 12.650307523131936, 13.669316880566113, 14.683947130751513, 15.69460519893357, + 16.700703717145018, 17.7041505168398, 18.70329137811866, 19.699837725867244, 20.693726948923647, + 21.684845361644413, 22.67394199863409, 23.65991620006985, 24.64542226934909, 25.62838893005031, + 26.60959440922522, 27.589949601325706, 28.569373909615045, 29.547774705387823, 30.525044807036846, + 31.50105926221775, 32.47712125471966, 33.45331834004704, 34.428134794028786, 36.37839790094814, + 38.32837960343874, 40.27875360095283, 42.230448921378276, 44.1846914308176, 46.13987908640124, + 48.096910013008056, 52.99956548822598, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real fe54_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 4.038750882690593e-05, 0.0006153933644858295, 0.0031795285189803882, 0.009608097244673557, + 0.021489478918632662, 0.039963481298721557, 0.06578505049986659, 0.09933285917375559, 0.18904568529064877, + 0.30450216050560097, 0.4386136969546961, 0.5858349639065905, 0.7435112541834851, 1.089905111439398, + 1.4727564493172123, 1.8864907251724818, 2.320146286111054, 2.760422483423212, 3.204119982655925, + 3.6503075231319366, 4.093421685162235, 4.539076098792776, 4.982271233039568, 6.089905111439398, + 7.190331698170292, 8.287801729930226, 9.378397900948137, 10.462397997898956, 11.539076098792776, + 12.61066016308988, 13.675778341674086, 14.734799829588846, 15.789580712164426, 16.838219221907625, + 17.88252453795488, 18.922206277439017, 19.957607287060096, 20.989449817666692, 22.01703333929878, + 23.041392685158225, 24.06445798922692, 25.08278537031645, 26.100370545117563, 27.113943352306837, + 28.127104798364808, 29.136720567156406, 30.146128035678238, 31.155336037465062, 32.16136800223497, + 33.164352855784436, 34.17026171539496, 35.17318626841227, 36.17609125905568, 38.17897694729317, + 40.18184358794477, 42.18184358794477, 44.18184358794477, 46.1846914308176, 48.1846914308176, + 50.18752072083646, 55.204119982655925, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real fe55_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 1.3028814913777444e-06, + 1.5634319932414176e-05, 7.599488497457784e-05, 0.0002370600756061832, 0.0005564089438241259, 0.0010813488014597976, + 0.0018431377713960377, 0.009434322601068017, 0.022947317188587973, 0.04207202183227031, 0.06669370834774807, + 0.09644559083435453, 0.13073538555922604, 0.1689268514992448, 0.210470482925873, 0.30216484315823844, + 0.40437472924396634, 0.5173772341350337, 0.6421575367181118, 0.7795497407641858, 1.089905111439398, + 1.4471580313422192, 1.8312296938670634, 2.2355284469075487, 2.649334858712142, 3.0718820073061255, + 3.496929648073215, 3.926856708949692, 4.359835482339888, 4.79309160017658, 5.8819549713396, + 6.973589623427257, 8.064457989226918, 9.14921911265538, 10.232996110392154, 11.307496037913213, + 12.378397900948137, 13.444044795918076, 14.503790683057181, 15.558708570533165, 16.608526033577196, + 17.65417654187796, 18.69635638873333, 19.73399928653839, 20.768638101247614, 21.800029359244135, + 22.82865989653532, 23.854913022307855, 24.878521795501207, 25.899820502427097, 26.91960102378411, + 27.937517892017347, 28.954242509439325, 29.96941591235398, 30.983626287124533, 31.99694924849538, + 33.00860017176192, 34.02118929906994, 35.03342375548695, 36.04532297878666, 38.064457989226916, + 40.086359830674745, 42.10720996964787, 44.127104798364805, 46.15228834438306, 48.17609125905568, + 50.20139712432045, 55.28103336724773, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real fe56_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 1.7371744532199383e-06, 9.988658214691801e-06, 3.951899976600419e-05, + 0.00011724368292883856, 0.0030902761496993327, 0.0156878675130911, 0.04089651650139037, 0.07635858866725904, + 0.11828391003740016, 0.16392102383975418, 0.21196213905930564, 0.2621108778253895, 0.36964919324674056, + 0.4887648498436591, 0.6206486780522652, 0.76578080127876, 0.924731337394998, 1.2855573090077739, + 1.6972293427597176, 2.143014800254095, 2.606381365110605, 3.0718820073061255, 3.5403294747908736, + 4.004321373782642, 4.468347330412158, 4.928395852256714, 5.38738982633873, 6.5276299008713385, + 7.660865478003869, 8.788168371141168, 9.909556029241175, 11.02530586526477, 12.136720567156408, + 13.2405492482826, 14.340444114840118, 15.432969290874405, 16.52244423350632, 17.606381365110604, + 18.686636269262294, 19.76192783842053, 20.833147111912787, 21.90036712865647, 22.96473092105363, + 24.02530586526477, 25.08278537031645, 26.139879086401237, 27.193124598354462, 28.243038048686294, + 29.292256071356476, 30.338456493604603, 31.383815365980432, 32.428134794028786, 33.46982201597816, + 34.51188336097887, 35.552668216112195, 36.59217675739587, 37.631443769013174, 39.70842090013471, + 41.78390357927273, 43.85913829729453, 45.93449845124357, 48.00860017176192, 50.086359830674745, + 52.164352855784436, 57.37106786227174, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real co55_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 8.685880952436747e-07, 1.4331481434642371e-05, 9.336327741651445e-05, + 0.00038114325769492564, 0.001151090732337307, 0.0028275866787247843, 0.0059861278100218065, 0.019727612600003865, + 0.049238961363648255, 0.10167663281566902, 0.18228879723157643, 0.29243817096179087, 0.5865873046717549, + 0.9449759084120479, 1.3324384599156054, 1.7363965022766423, 2.1492191126553797, 2.56702636615906, + 2.991226075692495, 3.419955748489758, 3.851869600729766, 4.2878017299302265, 5.382017042574868, + 6.482873583608754, 7.5820633629117085, 8.677606952720494, 9.767155866082181, 10.85003325768977, + 11.927370363039023, 12.998695158311655, 14.064457989226918, 15.127104798364808, 16.181843587944773, + 17.232996110392154, 18.281033367247726, 19.32428245529769, 20.3654879848909, 21.401400540781545, + 22.436162647040756, 23.468347330412158, 24.4983105537896, 25.525044807036846, 26.550228353055093, + 27.57403126772772, 28.59659709562646, 29.6170003411209, 30.636487896353366, 31.65609820201283, + 32.673941998634085, 33.69108149212297, 34.70757017609794, 35.72427586960079, 37.75587485567249, + 39.786751422145564, 41.818225893613956, 43.850033257689766, 45.88309335857569, 47.91750550955255, + 49.954242509439325, 55.05690485133647, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real co56_pf_array[npts_1] = { + 0.0, 1.7371744532199383e-06, 3.4307908925770636e-05, 0.0007363730997827178, 0.003397192878964486, + 0.008467734331585224, 0.01550645173957485, 0.0238164702394971, 0.03279759856010612, 0.04203693696495622, + 0.05128645751287552, 0.09519865223967466, 0.13622861655702886, 0.176714169466867, 0.21729965897649603, + 0.2578772011708393, 0.2983265845453606, 0.3387098245578885, 0.3792523836931725, 0.46216521358362883, + 0.5500314690476197, 0.6456769741905006, 0.7513340033440492, 0.8684365267163909, 1.1367205671564067, + 1.4517864355242902, 1.7986506454452689, 2.1702617153949575, 2.5599066250361124, 2.9614210940664485, + 3.3729120029701067, 3.7902851640332416, 4.214843848047698, 4.6414741105041, 5.723455672035186, + 6.814913181275074, 7.9084850188786495, 9.0, 10.089905111439398, 11.173186268412275, + 12.250420002308894, 13.32633586092875, 14.394451680826217, 15.459392487759231, 16.521138083704038, + 17.577491799837226, 18.630427875025024, 19.680335513414562, 20.727541257028555, 21.77232170672292, + 22.81358098856819, 23.853089529851864, 24.890979596989688, 25.926856708949693, 26.960946195733833, + 27.99387691494121, 29.02530586526477, 30.056904851336473, 31.08635983067475, 32.11727129565576, + 33.14612803567824, 34.17318626841227, 35.20139712432045, 36.230448921378276, 38.28555730900777, + 40.3424226808222, 42.39967372148104, 44.45939248775923, 46.52113808370404, 48.5854607295085, + 50.651278013998144, 55.831229693867066, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real co57_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 4.342942647204277e-07, 4.994099386680048e-05, 0.0005963110461953748, 0.0027783956198411766, 0.008035647971175024, + 0.017613403025029208, 0.03234391616743567, 0.05264970241280307, 0.07864673504318612, 0.14731854080928636, + 0.23700682147881122, 0.34629017327562855, 0.47392017252998775, 0.6185154181425263, 0.9503648543761231, + 1.3263358609287514, 1.7299742856995557, 2.1492191126553797, 2.57978359661681, 3.0170333392987803, + 3.456366033129043, 3.900913067737669, 4.348304863048161, 4.795880017344075, 5.922206277439017, + 7.05307844348342, 8.178976947293169, 9.30319605742049, 10.423245873936807, 11.537819095073274, + 12.64640372622307, 13.751279103983343, 14.850646235183067, 15.94546858513182, 17.037426497940622, + 18.12057393120585, 19.204119982655925, 20.28330122870355, 21.357934847000454, 22.431363764158988, + 23.50105926221775, 24.568201724066995, 25.632457292184725, 26.69635638873333, 27.757396028793025, + 28.81690383937566, 29.87563993700417, 30.93247376467715, 31.989004615698537, 33.04532297878666, + 34.10037054511756, 35.15228834438306, 36.20682587603185, 37.26007138798507, 39.3654879848909, + 41.47275644931721, 43.578639209968074, 45.686636269262294, 47.79657433321043, 49.90794852161227, + 52.02118929906994, 57.31806333496276, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ni56_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 4.342942647204277e-07, 7.817230319428646e-06, 6.42708273977769e-05, + 0.0002904458650804842, 0.0009123622824012837, 0.0022498876258026487, 0.0046944487518873, 0.014735532704563181, + 0.03529042138996706, 0.07190703372466718, 0.13162956968664008, 0.22190042758492473, 0.5092025223311029, + 0.9132839017604184, 1.374748346010104, 1.8555191556678001, 2.3404441148401185, 2.8221680793680175, + 3.3031960574204886, 3.783903579272735, 4.26245108973043, 4.7419390777291985, 5.9344984512435675, + 7.117271295655764, 8.292256071356476, 9.456366033129044, 10.608526033577194, 11.750508394851346, + 12.88309335857569, 14.008600171761918, 15.123851640967086, 16.232996110392154, 17.33645973384853, + 18.432969290874407, 19.525044807036846, 20.612783856719737, 21.695481676490196, 22.773786444981194, + 23.8481891169914, 24.919078092376076, 25.987219229908003, 27.053078443483418, 28.113943352306837, + 29.17609125905568, 30.232996110392154, 31.287801729930226, 32.3424226808222, 33.39619934709574, + 34.44715803134222, 35.49692964807321, 36.54530711646582, 37.594392550375424, 39.68752896121463, + 41.77959649125783, 43.86981820797933, 45.959518376973, 48.04921802267018, 50.13987908640124, + 52.230448921378276, 57.462397997898954, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ni57_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 4.342942647204277e-07, 1.7371744532199383e-06, 9.554373504133797e-06, 3.257086475060328e-05, + 8.771862606148251e-05, 0.0017410663385697559, 0.007809206274475302, 0.01921477477459369, 0.03493231633712192, + 0.05345799700199783, 0.07364137994668778, 0.0948950837519807, 0.11713833477999397, 0.16608656859343765, + 0.22565890312281184, 0.3025878355093501, 0.4025382106894563, 0.5279492540555757, 0.8463371121298052, + 1.2253092817258628, 1.631443769013172, 2.05307844348342, 2.484299839346786, 2.9237619608287004, + 3.369215857410143, 3.8188854145940097, 4.27415784926368, 4.731588765186738, 5.884795363948981, + 7.041392685158225, 8.195899652409233, 9.344392273685111, 10.482873583608754, 11.613841821876068, + 12.736396502276643, 13.851258348719075, 14.959041392321094, 16.060697840353612, 17.15836249209525, + 18.247973266361807, 19.332438459915604, 20.414973347970818, 21.492760389026838, 22.565847818673518, + 23.636487896353366, 24.7041505168398, 25.768638101247614, 26.831229693867062, 27.89209460269048, + 28.950851458888547, 30.008600171761916, 31.06445798922692, 32.11727129565576, 33.17026171539496, + 34.222716471147585, 35.27415784926368, 36.32633586092875, 37.376576957056514, 39.478566495593846, + 41.578639209968074, 43.67851837904011, 45.77959649125783, 47.88252453795488, 49.98721922990801, + 52.093421685162234, 57.372912002970104, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real ni58_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.822822391636452e-05, 0.0004722555358597003, 0.0025858928325085315, 0.008151594991554035, + 0.018820703394680185, 0.03585661791649524, 0.060127596252288286, 0.09212527438468374, 0.17939292292561174, + 0.29475734836761314, 0.43276876399762537, 0.5886922364625494, 0.7597527315231631, 1.1398790864012365, + 1.5670263661590604, 2.0211892990699383, 2.4913616938342726, 2.968015713993642, 3.4471580313422194, + 3.9253120914996495, 4.4048337166199385, 4.884795363948981, 5.363611979892144, 6.561101383649056, + 7.754348335711019, 8.94101424370557, 10.12057393120585, 11.290034611362518, 12.45178643552429, + 13.60530504614111, 14.752048447819439, 15.89209460269048, 17.02530586526477, 18.155336037465062, + 19.276461804173245, 20.394451680826215, 21.50650503240487, 22.6159500516564, 23.72098574415374, + 24.822168079368016, 25.920123326290724, 27.01703333929878, 28.10720996964787, 29.198657086954423, + 30.285557309007775, 31.371067862271737, 32.456366033129044, 33.539076098792776, 34.620136054973756, + 35.70070371714502, 36.78031731214015, 37.85853719756964, 38.936513742478894, 41.0899051114394, + 43.243038048686294, 45.39619934709574, 47.549003262025785, 49.70156798505593, 51.8561244442423, + 54.01283722470517, 59.41161970596323, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real cu59_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 2.605759074128604e-06, 1.650287675964334e-05, 6.340236609775624e-05, 0.00017585365720844043, 0.000390689249910088, + 0.0007428764320814314, 0.005397605476010478, 0.015802627271542913, 0.03197570643412326, 0.05338618387681151, + 0.07956831941607957, 0.11034623515591226, 0.1458282690543422, 0.18630242506533595, 0.2835775511211497, + 0.4040800579842662, 0.5475464254977157, 0.71148885462942, 0.8921585172262729, 1.2855573090077739, + 1.7075701760979363, 2.143014800254095, 2.5888317255942073, 3.037426497940624, 3.4913616938342726, + 3.9479236198317262, 4.4048337166199385, 4.865103974641128, 5.324282455297693, 6.480006942957151, + 7.6344772701607315, 8.788168371141168, 9.939019776448667, 11.086359830674748, 12.227886704613674, + 13.36735592102602, 14.501059262217751, 15.630427875025024, 16.75587485567249, 17.877946951629188, + 18.99563519459755, 20.110589710299248, 21.22271647114758, 22.33041377334919, 23.436162647040756, + 24.540329474790873, 25.6414741105041, 26.741151598851786, 27.838849090737256, 28.934498451243567, + 30.029383777685208, 31.123851640967086, 32.2148438480477, 33.30749603791321, 34.39967372148104, + 35.489958479424836, 36.58092497567562, 37.67117284271508, 38.76042248342321, 40.940516484932566, + 43.12057393120585, 45.303196057420486, 47.48572142648158, 49.67117284271508, 51.85913829729453, + 54.04921802267018, 59.54032947479087, + }; + + // this is log10(partition function) + + MICROPHYSICS_UNUSED HIP_CONSTEXPR static AMREX_GPU_MANAGED amrex::Real zn60_pf_array[npts_1] = { + 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 8.685880952436747e-07, 5.211502513843472e-06, + 1.8674261228107377e-05, 0.0009166960915506938, 0.006364623716448546, 0.020197147995473213, 0.043233346133400956, + 0.07391108301493142, 0.10997790066148228, 0.14954178751803532, 0.19143452549394308, 0.2810122204570727, + 0.3812506749896455, 0.4993433592273684, 0.6430235987933117, 0.8169781794613935, 1.2479732663618066, + 1.7512791039833422, 2.2764618041732443, 2.8055008581584002, 3.3283796034387376, 3.845098040014257, + 4.354108439147401, 4.859138297294531, 5.357934847000454, 5.854913022307856, 7.08278537031645, + 8.301029995663981, 9.509202522331103, 10.710117365111817, 11.90471554527868, 13.093421685162236, + 14.278753600952829, 15.457881896733992, 16.63144376901317, 17.800717078282386, 18.965671971220107, + 20.127104798364808, 21.28330122870355, 22.436162647040756, 23.5854607295085, 24.73158876518674, + 25.8750612633917, 27.01703333929878, 28.152288344383056, 29.29003461136252, 30.423245873936807, + 31.55509444857832, 32.68574173860226, 33.814913181275074, 34.94250410616808, 36.06818586174616, + 37.19589965240923, 38.320146286111054, 39.444044795918074, 40.568201724066995, 42.814913181275074, + 45.06069784035361, 47.30749603791321, 49.552668216112195, 51.80071707828238, 54.04921802267018, + 56.30102999566398, 61.93851972517649, + }; + + + + // interpolation routine + + template + AMREX_GPU_HOST_DEVICE AMREX_INLINE + void interpolate_pf(const Real t9, const Real (&temp_array)[npts], const Real (&pf_array)[npts], + Real& pf, Real& dpf_dT) { + + if (t9 >= temp_array[0] && t9 < temp_array[npts-1]) { + + // find the largest temperature element <= t9 using a binary search + + int left = 0; + int right = npts; + + while (left < right) { + int mid = (left + right) / 2; + if (temp_array[mid] > t9) { + right = mid; + } else { + left = mid + 1; + } + } + + const int idx = right - 1; + + // now we have temp_array[idx] <= t9 < temp_array[idx+1] + + // construct the slope -- this is (log10(pf_{i+1}) - log10(pf_i)) / (T_{i+1} - T_i) + + Real slope = (pf_array[idx+1] - pf_array[idx]) / (temp_array[idx+1] - temp_array[idx]); + + // find the PF + + Real log10_pf = pf_array[idx] + slope * (t9 - temp_array[idx]); + pf = std::pow(10.0_rt, log10_pf); + + // find the derivative (with respect to T, not T9) + + Real dpf_dT9 = pf * M_LN10 * slope; + dpf_dT = dpf_dT9 / 1.e9_rt; + + } else { + + // T < the smallest T or >= the largest T in the partition function table + pf = 1.0; + dpf_dT = 0.0; + + } + + } + +} + +// main interface + +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void get_partition_function(const int inuc, [[maybe_unused]] const tf_t& tfactors, + Real& pf, Real& dpf_dT) { + + // inuc is the 1-based index for the species + + switch (inuc) { + + case O16: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::o16_pf_array, pf, dpf_dT); + break; + + case F18: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::f18_pf_array, pf, dpf_dT); + break; + + case Ne20: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ne20_pf_array, pf, dpf_dT); + break; + + case Ne21: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ne21_pf_array, pf, dpf_dT); + break; + + case Na22: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::na22_pf_array, pf, dpf_dT); + break; + + case Na23: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::na23_pf_array, pf, dpf_dT); + break; + + case Mg24: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::mg24_pf_array, pf, dpf_dT); + break; + + case Al27: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::al27_pf_array, pf, dpf_dT); + break; + + case Si28: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::si28_pf_array, pf, dpf_dT); + break; + + case P31: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::p31_pf_array, pf, dpf_dT); + break; + + case S32: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::s32_pf_array, pf, dpf_dT); + break; + + case Cl35: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::cl35_pf_array, pf, dpf_dT); + break; + + case Ar36: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ar36_pf_array, pf, dpf_dT); + break; + + case K39: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::k39_pf_array, pf, dpf_dT); + break; + + case Ca40: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ca40_pf_array, pf, dpf_dT); + break; + + case Sc43: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::sc43_pf_array, pf, dpf_dT); + break; + + case Ti44: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ti44_pf_array, pf, dpf_dT); + break; + + case V47: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::v47_pf_array, pf, dpf_dT); + break; + + case Cr48: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::cr48_pf_array, pf, dpf_dT); + break; + + case Mn51: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::mn51_pf_array, pf, dpf_dT); + break; + + case Mn55: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::mn55_pf_array, pf, dpf_dT); + break; + + case Fe52: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::fe52_pf_array, pf, dpf_dT); + break; + + case Fe53: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::fe53_pf_array, pf, dpf_dT); + break; + + case Fe54: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::fe54_pf_array, pf, dpf_dT); + break; + + case Fe55: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::fe55_pf_array, pf, dpf_dT); + break; + + case Fe56: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::fe56_pf_array, pf, dpf_dT); + break; + + case Co55: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::co55_pf_array, pf, dpf_dT); + break; + + case Co56: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::co56_pf_array, pf, dpf_dT); + break; + + case Co57: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::co57_pf_array, pf, dpf_dT); + break; + + case Ni56: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ni56_pf_array, pf, dpf_dT); + break; + + case Ni57: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ni57_pf_array, pf, dpf_dT); + break; + + case Ni58: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::ni58_pf_array, pf, dpf_dT); + break; + + case Cu59: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::cu59_pf_array, pf, dpf_dT); + break; + + case Zn60: + part_fun::interpolate_pf(tfactors.T9, part_fun::temp_array_1, part_fun::zn60_pf_array, pf, dpf_dT); + break; + + + default: + + pf = 1.0_rt; + dpf_dT = 0.0_rt; + + } + +} + +// spins + +AMREX_GPU_HOST_DEVICE AMREX_INLINE +constexpr Real get_spin_state(const int inuc) { + + Real spin = -1.0; + + switch (inuc) { + + case He4: + case C12: + case O16: + case Ne20: + case Mg24: + case Si28: + case S32: + case Ar36: + case Ca40: + case Ti44: + case Cr48: + case Fe52: + case Fe54: + case Fe56: + case Ni56: + case Ni58: + case Zn60: + spin = 1; + break; + + case N: + case H1: + case N13: + case P31: + spin = 2; + break; + + case N14: + case F18: + spin = 3; + break; + + case Ne21: + case Na23: + case Fe55: + case Ni57: + case Cu59: + case Cl35: + case K39: + case V47: + spin = 4; + break; + + case Al27: + case Mn51: + case Mn55: + spin = 6; + break; + + case Na22: + spin = 7; + break; + + case Fe53: + case Co55: + case Co57: + case Sc43: + spin = 8; + break; + + case Co56: + spin = 9; + break; + + + } + + return spin; + +} + + +#endif diff --git a/networks/He-C-Fe-group/pynucastro.net b/networks/He-C-Fe-group/pynucastro.net new file mode 100644 index 0000000000..70dad9af7b --- /dev/null +++ b/networks/He-C-Fe-group/pynucastro.net @@ -0,0 +1,40 @@ +neutron n 1.0 0.0 +hydrogen-1 h1 1.0 1.0 +helium-4 he4 4.0 2.0 +carbon-12 c12 12.0 6.0 +nitrogen-13 n13 13.0 7.0 +nitrogen-14 n14 14.0 7.0 +oxygen-16 o16 16.0 8.0 +fluorine-18 f18 18.0 9.0 +neon-20 ne20 20.0 10.0 +neon-21 ne21 21.0 10.0 +sodium-22 na22 22.0 11.0 +sodium-23 na23 23.0 11.0 +magnesium-24 mg24 24.0 12.0 +aluminum-27 al27 27.0 13.0 +silicon-28 si28 28.0 14.0 +phosphorus-31 p31 31.0 15.0 +sulfur-32 s32 32.0 16.0 +argon-36 ar36 36.0 18.0 +calcium-40 ca40 40.0 20.0 +titanium-44 ti44 44.0 22.0 +chromium-48 cr48 48.0 24.0 +manganese-51 mn51 51.0 25.0 +manganese-55 mn55 55.0 25.0 +iron-52 fe52 52.0 26.0 +iron-53 fe53 53.0 26.0 +iron-54 fe54 54.0 26.0 +iron-55 fe55 55.0 26.0 +iron-56 fe56 56.0 26.0 +cobalt-55 co55 55.0 27.0 +cobalt-56 co56 56.0 27.0 +cobalt-57 co57 57.0 27.0 +nickel-56 ni56 56.0 28.0 +nickel-57 ni57 57.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 +__extra_vanadium-47 v47 47.0 23.0 diff --git a/networks/He-C-Fe-group/reaclib_rates.H b/networks/He-C-Fe-group/reaclib_rates.H new file mode 100644 index 0000000000..b8a5a86910 --- /dev/null +++ b/networks/He-C-Fe-group/reaclib_rates.H @@ -0,0 +1,9303 @@ +#ifndef REACLIB_RATES_H +#define REACLIB_RATES_H + +#include +#include + +#include +#include +#include + +using namespace Rates; +using namespace Species; + +struct rate_t { + Array1D screened_rates; + Array1D add_energy_rate; +}; + +struct rate_derivs_t { + Array1D screened_rates; + Array1D dscreened_rates_dT; + Array1D add_energy_rate; +}; + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_c12_to_n13(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 + p --> n13 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ls09n + ln_set_rate = 17.1482 + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 + + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -13.692 * tfactors.T943i + (1.0/3.0) * -0.230881 * tfactors.T923i + + 4.44362 + (5.0/3.0) * -3.15898 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // ls09r + ln_set_rate = 17.5428 + -3.77849 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 + + 0.148883 * tfactors.T9 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.77849 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.10735 * tfactors.T943i + (1.0/3.0) * -2.24111 * tfactors.T923i + + 0.148883 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_c12_to_o16(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 + he4 --> o16 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // nac2 + ln_set_rate = 254.634 + -1.84097 * tfactors.T9i + 103.411 * tfactors.T913i + -420.567 * tfactors.T913 + + 64.0874 * tfactors.T9 + -12.4624 * tfactors.T953 + 137.303 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.84097 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 103.411 * tfactors.T943i + (1.0/3.0) * -420.567 * tfactors.T923i + + 64.0874 + (5.0/3.0) * -12.4624 * tfactors.T923 + 137.303 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nac2 + ln_set_rate = 69.6526 + -1.39254 * tfactors.T9i + 58.9128 * tfactors.T913i + -148.273 * tfactors.T913 + + 9.08324 * tfactors.T9 + -0.541041 * tfactors.T953 + 70.3554 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.39254 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 58.9128 * tfactors.T943i + (1.0/3.0) * -148.273 * tfactors.T923i + + 9.08324 + (5.0/3.0) * -0.541041 * tfactors.T923 + 70.3554 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_n14_to_f18(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // n14 + he4 --> f18 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10n + ln_set_rate = 21.5339 + -36.2504 * tfactors.T913i + + -5.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -36.2504 * tfactors.T943i + + (5.0/3.0) * -5.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 13.8995 + -10.9656 * tfactors.T9i + -5.6227 * tfactors.T913i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.9656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 0.196838 + -5.16034 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.16034 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_o16_to_ne20(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + he4 --> ne20 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // co10r + ln_set_rate = 9.50848 + -12.7643 * tfactors.T9i + -3.65925 * tfactors.T913 + + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.7643 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i + + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // co10r + ln_set_rate = 3.88571 + -10.3585 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.3585 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // co10n + ln_set_rate = 23.903 + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 + + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i + + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_f18_to_na22(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // f18 + he4 --> na22 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // rpsmr + ln_set_rate = 35.3786 + -1.82957 * tfactors.T9i + 18.8956 * tfactors.T913i + -65.6134 * tfactors.T913 + + 1.71114 * tfactors.T9 + -0.0260999 * tfactors.T953 + 37.8396 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.82957 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 18.8956 * tfactors.T943i + (1.0/3.0) * -65.6134 * tfactors.T923i + + 1.71114 + (5.0/3.0) * -0.0260999 * tfactors.T923 + 37.8396 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ne20_to_mg24(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ne20 + he4 --> mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -38.7055 + -2.50605 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.50605 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 24.5058 + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 + + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i + + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -8.79827 + -12.7809 * tfactors.T9i + 16.9229 * tfactors.T913 + + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.7809 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i + + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 1.98307 + -9.22026 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 9.22026 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_ne21_to_na22(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ne21 + p --> na22 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -47.6554 + -0.19618 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.19618 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 19.0696 + -19.2096 * tfactors.T913i + + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -19.2096 * tfactors.T943i + + (5.0/3.0) * -1.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10r + ln_set_rate = -39.4862 + -4.21385 * tfactors.T9i + 21.1176 * tfactors.T913i + 34.0411 * tfactors.T913 + + -4.45593 * tfactors.T9 + 0.328613 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.21385 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.1176 * tfactors.T943i + (1.0/3.0) * 34.0411 * tfactors.T923i + + -4.45593 + (5.0/3.0) * 0.328613 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10r + ln_set_rate = 1.75704 + -1.39957 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.39957 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_na23_to_mg24(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // na23 + p --> mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10n + ln_set_rate = 18.9075 + -20.6428 * tfactors.T913i + 1.52954 * tfactors.T913 + + 2.7487 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -20.6428 * tfactors.T943i + (1.0/3.0) * 1.52954 * tfactors.T923i + + 2.7487 + (5.0/3.0) * -1.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 9.0594 + -3.28029 * tfactors.T9i + -0.360588 * tfactors.T913 + + 1.4187 * tfactors.T9 + -0.184061 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.28029 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.360588 * tfactors.T923i + + 1.4187 + (5.0/3.0) * -0.184061 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -5.02585 + -1.61219 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.61219 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_mg24_to_si28(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mg24 + he4 --> si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // st08r + ln_set_rate = -50.5494 + -12.8332 * tfactors.T9i + 21.3721 * tfactors.T913i + 37.7649 * tfactors.T913 + + -4.10635 * tfactors.T9 + 0.249618 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.8332 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.3721 * tfactors.T943i + (1.0/3.0) * 37.7649 * tfactors.T923i + + -4.10635 + (5.0/3.0) * 0.249618 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // st08r + ln_set_rate = 8.03977 + -15.629 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 15.629 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_al27_to_si28(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // al27 + p --> si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -13.6664 + -1.90396 * tfactors.T9i + 23.8634 * tfactors.T913 + + -3.70135 * tfactors.T9 + 0.28964 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.90396 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 23.8634 * tfactors.T923i + + -3.70135 + (5.0/3.0) * 0.28964 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 86.0234 + -0.387313 * tfactors.T9i + -26.8327 * tfactors.T913i + -116.137 * tfactors.T913 + + 0.00950567 * tfactors.T9 + 0.00999755 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.387313 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.8327 * tfactors.T943i + (1.0/3.0) * -116.137 * tfactors.T923i + + 0.00950567 + (5.0/3.0) * 0.00999755 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10n + ln_set_rate = 21.1065 + -23.2205 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -23.2205 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_si28_to_s32(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // si28 + he4 --> s32 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 47.9212 + -59.4896 * tfactors.T913i + 4.47205 * tfactors.T913 + + -4.78989 * tfactors.T9 + 0.557201 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -59.4896 * tfactors.T943i + (1.0/3.0) * 4.47205 * tfactors.T923i + + -4.78989 + (5.0/3.0) * 0.557201 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_p31_to_s32(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // p31 + p --> s32 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = 0.821556 + -3.77704 * tfactors.T9i + 8.09341 * tfactors.T913 + + -0.615971 * tfactors.T9 + 0.031159 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.77704 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 8.09341 * tfactors.T923i + + -0.615971 + (5.0/3.0) * 0.031159 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -2.66839 + -2.25958 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.25958 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 19.2596 + -25.3278 * tfactors.T913i + 6.4931 * tfactors.T913 + + -9.27513 * tfactors.T9 + -0.610439 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -25.3278 * tfactors.T943i + (1.0/3.0) * 6.4931 * tfactors.T923i + + -9.27513 + (5.0/3.0) * -0.610439 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_cr48_to_fe52(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cr48 + he4 --> fe52 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 65.1754 + -86.7459 * tfactors.T913i + -9.79373 * tfactors.T913 + + -0.772169 * tfactors.T9 + 0.155883 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * -9.79373 * tfactors.T923i + + -0.772169 + (5.0/3.0) * 0.155883 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_mn51_to_fe52(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn51 + p --> fe52 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.2596 + -36.1825 * tfactors.T913i + 0.873042 * tfactors.T913 + + -2.89731 * tfactors.T9 + 0.364394 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -36.1825 * tfactors.T943i + (1.0/3.0) * 0.873042 * tfactors.T923i + + -2.89731 + (5.0/3.0) * 0.364394 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_mn51_to_co55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn51 + he4 --> co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 65.9219 + -89.274 * tfactors.T913i + -10.4373 * tfactors.T913 + + 1.00492 * tfactors.T9 + -0.125548 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -10.4373 * tfactors.T923i + + 1.00492 + (5.0/3.0) * -0.125548 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe52_to_ni56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe52 + he4 --> ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 66.6417 + -91.6819 * tfactors.T913i + -9.51885 * tfactors.T913 + + -0.533014 * tfactors.T9 + 0.0892607 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -9.51885 * tfactors.T923i + + -0.533014 + (5.0/3.0) * 0.0892607 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co55_to_ni56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + p --> ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 37.3736 + -38.1053 * tfactors.T913i + -0.210947 * tfactors.T913 + + -2.68377 * tfactors.T9 + 0.355814 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -38.1053 * tfactors.T943i + (1.0/3.0) * -0.210947 * tfactors.T923i + + -2.68377 + (5.0/3.0) * 0.355814 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_co55_to_cu59(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + he4 --> cu59 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + 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; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ni56_to_zn60(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 + he4 --> zn60 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + 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; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_cu59_to_zn60(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cu59 + p --> zn60 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + 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; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_c12_to_p_na23(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 + c12 --> p + na23 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 60.9649 + -84.165 * tfactors.T913i + -1.4191 * tfactors.T913 + + -0.114619 * tfactors.T9 + -0.070307 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.4191 * tfactors.T923i + + -0.114619 + (5.0/3.0) * -0.070307 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_c12_to_he4_ne20(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 + c12 --> he4 + ne20 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 61.2863 + -84.165 * tfactors.T913i + -1.56627 * tfactors.T913 + + -0.0736084 * tfactors.T9 + -0.072797 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -84.165 * tfactors.T943i + (1.0/3.0) * -1.56627 * tfactors.T923i + + -0.0736084 + (5.0/3.0) * -0.072797 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_n13_to_p_o16(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // n13 + he4 --> p + o16 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88n + ln_set_rate = 40.4644 + -35.829 * tfactors.T913i + -0.530275 * tfactors.T913 + + -0.982462 * tfactors.T9 + 0.0808059 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -35.829 * tfactors.T943i + (1.0/3.0) * -0.530275 * tfactors.T923i + + -0.982462 + (5.0/3.0) * 0.0808059 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_o16_to_p_al27(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + c12 --> p + al27 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 68.5253 + 0.205134 * tfactors.T9i + -119.242 * tfactors.T913i + 13.3667 * tfactors.T913 + + 0.295425 * tfactors.T9 + -0.267288 * tfactors.T953 + -9.91729 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = -0.205134 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.242 * tfactors.T943i + (1.0/3.0) * 13.3667 * tfactors.T923i + + 0.295425 + (5.0/3.0) * -0.267288 * tfactors.T923 + -9.91729 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_o16_to_he4_mg24(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + c12 --> he4 + mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 48.5341 + 0.37204 * tfactors.T9i + -133.413 * tfactors.T913i + 50.1572 * tfactors.T913 + + -3.15987 * tfactors.T9 + 0.0178251 * tfactors.T953 + -23.7027 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = -0.37204 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -133.413 * tfactors.T943i + (1.0/3.0) * 50.1572 * tfactors.T923i + + -3.15987 + (5.0/3.0) * 0.0178251 * tfactors.T923 + -23.7027 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_o16_o16_to_p_p31(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + o16 --> p + p31 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 85.2628 + 0.223453 * tfactors.T9i + -145.844 * tfactors.T913i + 8.72612 * tfactors.T913 + + -0.554035 * tfactors.T9 + -0.137562 * tfactors.T953 + -6.88807 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = -0.223453 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -145.844 * tfactors.T943i + (1.0/3.0) * 8.72612 * tfactors.T923i + + -0.554035 + (5.0/3.0) * -0.137562 * tfactors.T923 + -6.88807 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_o16_o16_to_he4_si28(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + o16 --> he4 + si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 97.2435 + -0.268514 * tfactors.T9i + -119.324 * tfactors.T913i + -32.2497 * tfactors.T913 + + 1.46214 * tfactors.T9 + -0.200893 * tfactors.T953 + 13.2148 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.268514 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -119.324 * tfactors.T943i + (1.0/3.0) * -32.2497 * tfactors.T923i + + 1.46214 + (5.0/3.0) * -0.200893 * tfactors.T923 + 13.2148 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_f18_to_p_ne21(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // f18 + he4 --> p + ne21 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // rpsmr + ln_set_rate = 49.7863 + -1.84559 * tfactors.T9i + 21.4461 * tfactors.T913i + -73.252 * tfactors.T913 + + 2.42329 * tfactors.T9 + -0.077278 * tfactors.T953 + 40.7604 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.84559 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.4461 * tfactors.T943i + (1.0/3.0) * -73.252 * tfactors.T923i + + 2.42329 + (5.0/3.0) * -0.077278 * tfactors.T923 + 40.7604 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_na23_to_he4_ne20(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // na23 + p --> he4 + ne20 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -6.58736 + -2.31577 * tfactors.T9i + 19.7297 * tfactors.T913 + + -2.20987 * tfactors.T9 + 0.153374 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.31577 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 19.7297 * tfactors.T923i + + -2.20987 + (5.0/3.0) * 0.153374 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = 0.0178295 + -1.86103 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.86103 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 18.9756 + -20.0024 * tfactors.T913i + 11.5988 * tfactors.T913 + + -1.37398 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -20.0024 * tfactors.T943i + (1.0/3.0) * 11.5988 * tfactors.T923i + + -1.37398 + (5.0/3.0) * -1.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_al27_to_he4_mg24(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // al27 + p --> he4 + mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -7.02789 + -4.2425 * tfactors.T9i + 18.0416 * tfactors.T913 + + -1.54137 * tfactors.T9 + 0.0847506 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.2425 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0416 * tfactors.T923i + + -1.54137 + (5.0/3.0) * 0.0847506 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -26.8683 + -0.963012 * tfactors.T9i + 5.18642 * tfactors.T913i + -34.7936 * tfactors.T913 + + 168.225 * tfactors.T9 + -115.825 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.963012 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 5.18642 * tfactors.T943i + (1.0/3.0) * -34.7936 * tfactors.T923i + + 168.225 + (5.0/3.0) * -115.825 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10n + ln_set_rate = 29.4576 + -26.4162 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -26.4162 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_p31_to_he4_si28(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // p31 + p --> he4 + si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -10.893 + -3.42575 * tfactors.T9i + 21.521 * tfactors.T913 + + -1.90355 * tfactors.T9 + 0.092724 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.42575 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 21.521 * tfactors.T923i + + -1.90355 + (5.0/3.0) * 0.092724 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -12.919 + -1.87716 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.87716 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 60.8829 + -31.932 * tfactors.T913i + -77.0334 * tfactors.T913 + + -43.6847 * tfactors.T9 + -4.28955 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -31.932 * tfactors.T943i + (1.0/3.0) * -77.0334 * tfactors.T923i + + -43.6847 + (5.0/3.0) * -4.28955 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_cr48_to_p_mn51(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cr48 + he4 --> p + mn51 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 59.2276 + -86.7459 * tfactors.T913i + 1.05653 * tfactors.T913 + + -1.15757 * tfactors.T9 + 0.0877546 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * 1.05653 * tfactors.T923i + + -1.15757 + (5.0/3.0) * 0.0877546 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe52_to_p_co55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe52 + he4 --> p + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 62.2207 + -91.6819 * tfactors.T913i + -0.329235 * tfactors.T913 + + -0.780924 * tfactors.T9 + 0.0425179 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -0.329235 * tfactors.T923i + + -0.780924 + (5.0/3.0) * 0.0425179 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_cu59_to_he4_ni56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cu59 + p --> he4 + ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + 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; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_he4_he4_to_c12(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // he4 + he4 + he4 --> c12 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // fy05r + ln_set_rate = -24.3505 + -4.12656 * tfactors.T9i + -13.49 * tfactors.T913i + 21.4259 * tfactors.T913 + + -1.34769 * tfactors.T9 + 0.0879816 * tfactors.T953 + -13.1653 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 4.12656 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.49 * tfactors.T943i + (1.0/3.0) * 21.4259 * tfactors.T923i + + -1.34769 + (5.0/3.0) * 0.0879816 * tfactors.T923 + -13.1653 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // fy05r + ln_set_rate = -11.7884 + -1.02446 * tfactors.T9i + -23.57 * tfactors.T913i + 20.4886 * tfactors.T913 + + -12.9882 * tfactors.T9 + -20.0 * tfactors.T953 + -2.16667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.02446 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -23.57 * tfactors.T943i + (1.0/3.0) * 20.4886 * tfactors.T923i + + -12.9882 + (5.0/3.0) * -20.0 * tfactors.T923 + -2.16667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // fy05n + ln_set_rate = -0.971052 + -37.06 * tfactors.T913i + 29.3493 * tfactors.T913 + + -115.507 * tfactors.T9 + -10.0 * tfactors.T953 + -1.33333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -37.06 * tfactors.T943i + (1.0/3.0) * 29.3493 * tfactors.T923i + + -115.507 + (5.0/3.0) * -10.0 * tfactors.T923 + -1.33333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_c12_to_mg24_modified(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 + c12 --> mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = -12.8056 + -30.1498 * tfactors.T9i + 11.4826 * tfactors.T913 + + 1.82849 * tfactors.T9 + -0.34844 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 30.1498 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 11.4826 * tfactors.T923i + + 1.82849 + (5.0/3.0) * -0.34844 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_o16_o16_to_s32_modified(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + o16 --> s32 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = 77.5491 + -0.373641 * tfactors.T9i + -120.83 * tfactors.T913i + -7.72334 * tfactors.T913 + + -2.27939 * tfactors.T9 + 0.167655 * tfactors.T953 + 7.62001 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.373641 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -120.83 * tfactors.T943i + (1.0/3.0) * -7.72334 * tfactors.T923i + + -2.27939 + (5.0/3.0) * 0.167655 * tfactors.T923 + 7.62001 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_o16_to_si28_modified(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + c12 --> si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88r + ln_set_rate = -132.213 + -1.46479 * tfactors.T9i + -293.089 * tfactors.T913i + 414.404 * tfactors.T913 + + -28.0562 * tfactors.T9 + 1.61807 * tfactors.T953 + -178.28 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.46479 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -293.089 * tfactors.T943i + (1.0/3.0) * 414.404 * tfactors.T923i + + -28.0562 + (5.0/3.0) * 1.61807 * tfactors.T923 + -178.28 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_to_p_weak_wc12(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // n --> p + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // wc12w + ln_set_rate = -6.78161; + amrex::ignore_unused(tfactors); + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_mn55_to_fe56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn55 + p --> fe56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.1888 + -36.1995 * tfactors.T913i + 1.15346 * tfactors.T913 + + -1.94437 * tfactors.T9 + 0.218429 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -36.1995 * tfactors.T943i + (1.0/3.0) * 1.15346 * tfactors.T923i + + -1.94437 + (5.0/3.0) * 0.218429 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_fe52_to_fe53(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe52 + n --> fe53 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 15.8885 + -0.344319 * tfactors.T913 + + 0.178277 * tfactors.T9 + -0.0334326 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -0.344319 * tfactors.T923i + + 0.178277 + (5.0/3.0) * -0.0334326 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_fe53_to_fe54(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe53 + n --> fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 16.4534 + -1.10421 * tfactors.T913 + + 0.379905 * tfactors.T9 + -0.0581878 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.10421 * tfactors.T923i + + 0.379905 + (5.0/3.0) * -0.0581878 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe53_to_ni57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe53 + he4 --> ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 69.0636 + -91.7231 * tfactors.T913i + -10.1816 * tfactors.T913 + + -0.0406303 * tfactors.T9 + 0.0345056 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -91.7231 * tfactors.T943i + (1.0/3.0) * -10.1816 * tfactors.T923i + + -0.0406303 + (5.0/3.0) * 0.0345056 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_fe54_to_fe55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + n --> fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ks03 + ln_set_rate = -0.80864 + 0.0591716 * tfactors.T9i + -8.66617 * tfactors.T913i + 26.4472 * tfactors.T913 + + -1.9222 * tfactors.T9 + 0.0986404 * tfactors.T953 + -9.78317 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = -0.0591716 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -8.66617 * tfactors.T943i + (1.0/3.0) * 26.4472 * tfactors.T923i + + -1.9222 + (5.0/3.0) * 0.0986404 * tfactors.T923 + -9.78317 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe54_to_co55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + p --> co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.2304 + -37.1544 * tfactors.T913i + 0.950364 * tfactors.T913 + + -1.77529 * tfactors.T9 + 0.198562 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -37.1544 * tfactors.T943i + (1.0/3.0) * 0.950364 * tfactors.T923i + + -1.77529 + (5.0/3.0) * 0.198562 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe54_to_ni58(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + he4 --> ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 60.2478 + -91.7628 * tfactors.T913i + 4.23027 * tfactors.T913 + + -3.31305 * tfactors.T9 + 0.271293 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -91.7628 * tfactors.T943i + (1.0/3.0) * 4.23027 * tfactors.T923i + + -3.31305 + (5.0/3.0) * 0.271293 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_fe55_to_fe56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 + n --> fe56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ks03 + ln_set_rate = 21.7202 + -0.0955677 * tfactors.T9i + 8.06062 * tfactors.T913i + -14.4809 * tfactors.T913 + + 0.94252 * tfactors.T9 + -0.0776007 * tfactors.T953 + 6.47093 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.0955677 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.06062 * tfactors.T943i + (1.0/3.0) * -14.4809 * tfactors.T923i + + 0.94252 + (5.0/3.0) * -0.0776007 * tfactors.T923 + 6.47093 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe55_to_co56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 + p --> co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 35.7333 + -37.1585 * tfactors.T913i + 1.66198 * tfactors.T913 + + -1.60842 * tfactors.T9 + 0.148916 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -37.1585 * tfactors.T943i + (1.0/3.0) * 1.66198 * tfactors.T923i + + -1.60842 + (5.0/3.0) * 0.148916 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe56_to_co57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe56 + p --> co57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.0665 + -37.1625 * tfactors.T913i + 1.06776 * tfactors.T913 + + -1.31689 * tfactors.T9 + 0.122089 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -37.1625 * tfactors.T943i + (1.0/3.0) * 1.06776 * tfactors.T923i + + -1.31689 + (5.0/3.0) * 0.122089 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_co55_to_co56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + n --> co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 17.065 + -1.86357 * tfactors.T913 + + 0.616591 * tfactors.T9 + -0.0839313 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.86357 * tfactors.T923i + + 0.616591 + (5.0/3.0) * -0.0839313 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_co56_to_co57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + n --> co57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 17.3552 + -1.37855 * tfactors.T913 + + 0.299896 * tfactors.T9 + -0.04382 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.37855 * tfactors.T923i + + 0.299896 + (5.0/3.0) * -0.04382 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co56_to_ni57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + p --> ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 35.5937 + -38.1094 * tfactors.T913i + 2.57091 * tfactors.T913 + + -2.07795 * tfactors.T9 + 0.20757 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -38.1094 * tfactors.T943i + (1.0/3.0) * 2.57091 * tfactors.T923i + + -2.07795 + (5.0/3.0) * 0.20757 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co57_to_ni58(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co57 + p --> ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.0159 + -38.1133 * tfactors.T913i + 1.77414 * tfactors.T913 + + -1.48268 * tfactors.T9 + 0.121073 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 1.77414 * tfactors.T923i + + -1.48268 + (5.0/3.0) * 0.121073 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni56_to_ni57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 + n --> ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 16.0765 + -1.19665 * tfactors.T913 + + 0.507179 * tfactors.T9 + -0.074604 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.19665 * tfactors.T923i + + 0.507179 + (5.0/3.0) * -0.074604 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni57_to_ni58(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 + n --> ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 17.2731 + -1.90814 * tfactors.T913 + + 0.493188 * tfactors.T9 + -0.0684633 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.90814 * tfactors.T923i + + 0.493188 + (5.0/3.0) * -0.0684633 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_ni58_to_cu59(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 + p --> cu59 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + 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; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_mn51_to_p_fe54(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn51 + he4 --> p + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 62.2777 + -89.274 * tfactors.T913i + -0.862452 * tfactors.T913 + + -0.635672 * tfactors.T9 + 0.0196464 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -0.862452 * tfactors.T923i + + -0.635672 + (5.0/3.0) * 0.0196464 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe53_to_p_co56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe53 + he4 --> p + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 54.8614 + -91.7231 * tfactors.T913i + 10.052 * tfactors.T913 + + -3.86332 * tfactors.T9 + 0.391105 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -91.7231 * tfactors.T943i + (1.0/3.0) * 10.052 * tfactors.T923i + + -3.86332 + (5.0/3.0) * 0.391105 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_fe55_to_p_mn55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 + n --> p + mn55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 4.70639 + 7.03052 * tfactors.T913 + + 0.260509 * tfactors.T9 + -0.0813397 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 7.03052 * tfactors.T923i + + 0.260509 + (5.0/3.0) * -0.0813397 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_co55_to_p_fe55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + n --> p + fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 20.7398 + -1.62382 * tfactors.T913 + + 0.58115 * tfactors.T9 + -0.0537057 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.62382 * tfactors.T923i + + 0.58115 + (5.0/3.0) * -0.0537057 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_co55_to_p_ni58(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + he4 --> p + ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 60.2281 + -94.1404 * tfactors.T913i + 3.39179 * tfactors.T913 + + -1.71062 * tfactors.T9 + 0.133003 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * 3.39179 * tfactors.T923i + + -1.71062 + (5.0/3.0) * 0.133003 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_co56_to_p_fe56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + n --> p + fe56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 20.4539 + -1.13331 * tfactors.T913 + + 0.347185 * tfactors.T9 + -0.0328879 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.13331 * tfactors.T923i + + 0.347185 + (5.0/3.0) * -0.0328879 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co57_to_he4_fe54(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co57 + p --> he4 + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -2.1962 + -38.1133 * tfactors.T913i + 29.3541 * tfactors.T913 + + -4.75966 * tfactors.T9 + 0.40418 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 29.3541 * tfactors.T923i + + -4.75966 + (5.0/3.0) * 0.40418 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni56_to_p_co56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 + n --> p + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 15.5693 + 1.76846 * tfactors.T913 + + 0.197992 * tfactors.T9 + -0.017494 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 1.76846 * tfactors.T923i + + 0.197992 + (5.0/3.0) * -0.017494 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni56_to_he4_fe53(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 + n --> he4 + fe53 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -7.84393 + 6.43259 * tfactors.T913 + + 2.29591 * tfactors.T9 + -0.254724 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 6.43259 * tfactors.T923i + + 2.29591 + (5.0/3.0) * -0.254724 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni57_to_p_co57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 + n --> p + co57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 19.9939 + -1.13177 * tfactors.T913 + + 0.56875 * tfactors.T9 + -0.0579913 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * -1.13177 * tfactors.T923i + + 0.56875 + (5.0/3.0) * -0.0579913 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni57_to_he4_fe54(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 + n --> he4 + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 14.5327 + 0.48562 * tfactors.T913 + + -0.0249302 * tfactors.T9 + 0.0509605 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 0.48562 * tfactors.T923i + + -0.0249302 + (5.0/3.0) * 0.0509605 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_ni58_to_he4_fe55(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 + n --> he4 + fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -2.03901 + 3.44996 * tfactors.T913 + + 2.98226 * tfactors.T9 + -0.387699 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 3.44996 * tfactors.T923i + + 2.98226 + (5.0/3.0) * -0.387699 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_cu59_to_he4_co56(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cu59 + n --> he4 + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 11.0108 + -1.00882 * tfactors.T913 + + 1.88993 * tfactors.T9 + -0.202319 * tfactors.T953; + + 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n_zn60_to_he4_ni57(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // zn60 + n --> he4 + ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 12.4241 + 5.43552 * tfactors.T913 + + -1.25169 * tfactors.T9 + 0.148383 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + (1.0/3.0) * 5.43552 * tfactors.T923i + + -1.25169 + (5.0/3.0) * 0.148383 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_s32_to_ar36_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // s32 + he4 --> ar36 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 48.901 + -65.3709 * tfactors.T913i + 5.68294 * tfactors.T913 + + -5.00388 * tfactors.T9 + 0.571407 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -65.3709 * tfactors.T943i + (1.0/3.0) * 5.68294 * tfactors.T923i + + -5.00388 + (5.0/3.0) * 0.571407 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_cl35_to_ar36_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cl35 + p --> ar36 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = -9.03294 + -2.00996 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.00996 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10r + ln_set_rate = -42.5249 + -0.564651 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.564651 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10n + ln_set_rate = 35.6868 + -27.8971 * tfactors.T913i + -16.2304 * tfactors.T913 + + 35.255 * tfactors.T9 + -25.8411 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -27.8971 * tfactors.T943i + (1.0/3.0) * -16.2304 * tfactors.T923i + + 35.255 + (5.0/3.0) * -25.8411 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -7.84699 + -3.65092 * tfactors.T9i + 18.0179 * tfactors.T913 + + -2.86304 * tfactors.T9 + 0.250854 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.65092 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0179 * tfactors.T923i + + -2.86304 + (5.0/3.0) * 0.250854 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_cl35_to_he4_s32_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cl35 + p --> he4 + s32 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10r + ln_set_rate = 2.29121 + -6.00976 * tfactors.T9i + 5.33756 * tfactors.T913 + + 1.64418 * tfactors.T9 + -0.246167 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.00976 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.33756 * tfactors.T923i + + 1.64418 + (5.0/3.0) * -0.246167 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10r + ln_set_rate = -1.01202 + -3.93495 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 3.93495 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10r + ln_set_rate = -57.5294 + -0.532931 * tfactors.T9i + 25.5338 * tfactors.T913 + + 6.45824 * tfactors.T9 + -0.950294 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.532931 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 25.5338 * tfactors.T923i + + 6.45824 + (5.0/3.0) * -0.950294 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10n + ln_set_rate = 32.12 + -30.9147 * tfactors.T913i + -1.2345 * tfactors.T913 + + 22.5118 * tfactors.T9 + -33.0589 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -30.9147 * tfactors.T943i + (1.0/3.0) * -1.2345 * tfactors.T923i + + 22.5118 + (5.0/3.0) * -33.0589 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ar36_to_ca40_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ar36 + he4 --> ca40 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 52.3486 + -71.0046 * tfactors.T913i + 4.0656 * tfactors.T913 + + -5.26509 * tfactors.T9 + 0.683546 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -71.0046 * tfactors.T943i + (1.0/3.0) * 4.0656 * tfactors.T923i + + -5.26509 + (5.0/3.0) * 0.683546 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_k39_to_ca40_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // k39 + p --> ca40 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // lo18r + ln_set_rate = 2761.38 + -5.22234 * tfactors.T9i + 802.18 * tfactors.T913i + -4010.27 * tfactors.T913 + + 1136.19 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.22234 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 802.18 * tfactors.T943i + (1.0/3.0) * -4010.27 * tfactors.T923i + + 1136.19 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // lo18r + ln_set_rate = 588.099 + -12.5647 * tfactors.T9i + 641.844 * tfactors.T913i + -1248.49 * tfactors.T913 + + 564.926 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 12.5647 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 641.844 * tfactors.T943i + (1.0/3.0) * -1248.49 * tfactors.T923i + + 564.926 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // lo18r + ln_set_rate = 102.252 + -1.66508 * tfactors.T9i + 41.1723 * tfactors.T913i + -149.299 * tfactors.T913 + + 10.5229 * tfactors.T9 + -0.68208 * tfactors.T953 + 59.2367 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 1.66508 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 41.1723 * tfactors.T943i + (1.0/3.0) * -149.299 * tfactors.T923i + + 10.5229 + (5.0/3.0) * -0.68208 * tfactors.T923 + 59.2367 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_k39_to_he4_ar36_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // k39 + p --> he4 + ar36 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 20.5166 + -30.0732 * tfactors.T913i + 7.03263 * tfactors.T913 + + -1.10085 * tfactors.T9 + 0.133768 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -30.0732 * tfactors.T943i + (1.0/3.0) * 7.03263 * tfactors.T923i + + -1.10085 + (5.0/3.0) * 0.133768 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ca40_to_ti44_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ca40 + he4 --> ti44 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // chw0 + ln_set_rate = 53.75 + -76.4273 * tfactors.T913i + 3.87451 * tfactors.T913 + + -3.61477 * tfactors.T9 + 0.367451 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -76.4273 * tfactors.T943i + (1.0/3.0) * 3.87451 * tfactors.T923i + + -3.61477 + (5.0/3.0) * 0.367451 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_sc43_to_ti44_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // sc43 + p --> ti44 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 36.8432 + -32.1734 * tfactors.T913i + -1.77078 * tfactors.T913 + + -2.21706 * tfactors.T9 + 0.298499 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * -1.77078 * tfactors.T923i + + -2.21706 + (5.0/3.0) * 0.298499 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_sc43_to_he4_ca40_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // sc43 + p --> he4 + ca40 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 34.8559 + -32.1734 * tfactors.T913i + 0.0296879 * tfactors.T913 + + -0.95232 * tfactors.T9 + 0.129022 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * 0.0296879 * tfactors.T923i + + -0.95232 + (5.0/3.0) * 0.129022 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ti44_to_cr48_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ti44 + he4 --> cr48 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 64.7958 + -81.667 * tfactors.T913i + -10.6333 * tfactors.T913 + + -0.672613 * tfactors.T9 + 0.161209 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = + -(1.0/3.0) * -81.667 * tfactors.T943i + (1.0/3.0) * -10.6333 * tfactors.T923i + + -0.672613 + (5.0/3.0) * 0.161209 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ti44_to_p_v47_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ti44 + he4 --> p + v47 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // chw0r + ln_set_rate = -76.5154 + -10.7931 * tfactors.T9i + 70.2835 * tfactors.T913 + + -7.99061 * tfactors.T9 + 0.486213 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 10.7931 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 70.2835 * tfactors.T923i + + -7.99061 + (5.0/3.0) * 0.486213 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_v47_to_cr48_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // v47 + p --> cr48 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // nfisn + ln_set_rate = 42.6798 + -6.0593 * tfactors.T9i + -34.0548 * tfactors.T913i + -3.41973 * tfactors.T913 + + 1.16501 * tfactors.T9 + -0.105543 * tfactors.T953 + -7.70886 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.0593 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -34.0548 * tfactors.T943i + (1.0/3.0) * -3.41973 * tfactors.T923i + + 1.16501 + (5.0/3.0) * -0.105543 * tfactors.T923 + -7.70886 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 511.463 + -5.29491 * tfactors.T9i + 317.171 * tfactors.T913i + -911.679 * tfactors.T913 + + 94.4245 * tfactors.T9 + -10.1973 * tfactors.T953 + 330.727 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 5.29491 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 317.171 * tfactors.T943i + (1.0/3.0) * -911.679 * tfactors.T923i + + 94.4245 + (5.0/3.0) * -10.1973 * tfactors.T923 + 330.727 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 23.8315 + 0.246665 * tfactors.T9i + -45.9868 * tfactors.T913i + 13.6822 * tfactors.T913 + + -0.376902 * tfactors.T9 + -0.0194875 * tfactors.T953 + -8.42325 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = -0.246665 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -45.9868 * tfactors.T943i + (1.0/3.0) * 13.6822 * tfactors.T923i + + -0.376902 + (5.0/3.0) * -0.0194875 * tfactors.T923 + -8.42325 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 40.5626 + -0.514414 * tfactors.T9i + -110.655 * tfactors.T913i + 83.0232 * tfactors.T913 + + -19.7762 * tfactors.T9 + 3.03961 * tfactors.T953 + -49.4742 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 0.514414 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -110.655 * tfactors.T943i + (1.0/3.0) * 83.0232 * tfactors.T923i + + -19.7762 + (5.0/3.0) * 3.03961 * tfactors.T923 + -49.4742 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_n13_to_p_c12_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // n13 --> p + c12 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ls09c + ln_set_rate = 40.04074558314484 + -22.547578710551672 * tfactors.T9i + -13.692 * tfactors.T913i + -0.230881 * tfactors.T913 + + 4.44362 * tfactors.T9 + -3.15898 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.547578710551672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.692 * tfactors.T943i + (1.0/3.0) * -0.230881 * tfactors.T923i + + 4.44362 + (5.0/3.0) * -3.15898 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // ls09c + ln_set_rate = 40.43534558314484 + -26.326068710551674 * tfactors.T9i + -5.10735 * tfactors.T913i + -2.24111 * tfactors.T913 + + 0.148883 * tfactors.T9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 26.326068710551674 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.10735 * tfactors.T943i + (1.0/3.0) * -2.24111 * tfactors.T923i + + 0.148883; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real c12_pf, dc12_pf_dT; + // setting c12 partition function to 1.0 by default, independent of T + c12_pf = 1.0_rt; + dc12_pf_dT = 0.0_rt; + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real n13_pf, dn13_pf_dT; + // setting n13 partition function to 1.0 by default, independent of T + n13_pf = 1.0_rt; + dn13_pf_dT = 0.0_rt; + + Real z_r = p_pf * c12_pf; + Real z_p = n13_pf; + + Real dz_r_dT = c12_pf * dp_pf_dT + p_pf * dc12_pf_dT; + Real dz_p_dT = dn13_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_o16_to_he4_c12_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 --> he4 + c12 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // nac2 + ln_set_rate = 279.2945280776573 + -84.95160042649215 * tfactors.T9i + 103.411 * tfactors.T913i + -420.567 * tfactors.T913 + + 64.0874 * tfactors.T9 + -12.4624 * tfactors.T953 + 138.803 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 84.95160042649215 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 103.411 * tfactors.T943i + (1.0/3.0) * -420.567 * tfactors.T923i + + 64.0874 + (5.0/3.0) * -12.4624 * tfactors.T923 + 138.803 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nac2 + ln_set_rate = 94.31312807765731 + -84.50317042649215 * tfactors.T9i + 58.9128 * tfactors.T913i + -148.273 * tfactors.T913 + + 9.08324 * tfactors.T9 + -0.541041 * tfactors.T953 + 71.8554 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 84.50317042649215 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 58.9128 * tfactors.T943i + (1.0/3.0) * -148.273 * tfactors.T923i + + 9.08324 + (5.0/3.0) * -0.541041 * tfactors.T923 + 71.8554 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real c12_pf, dc12_pf_dT; + // setting c12 partition function to 1.0 by default, independent of T + c12_pf = 1.0_rt; + dc12_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real o16_pf, do16_pf_dT; + // interpolating o16 partition function + get_partition_function(O16, tfactors, o16_pf, do16_pf_dT); + + Real z_r = he4_pf * c12_pf; + Real z_p = o16_pf; + + Real dz_r_dT = c12_pf * dhe4_pf_dT + he4_pf * dc12_pf_dT; + Real dz_p_dT = do16_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_f18_to_he4_n14_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // f18 --> he4 + n14 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 46.248979543913606 + -51.22930570025806 * tfactors.T9i + -36.2504 * tfactors.T913i + + -5.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 51.22930570025806 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.2504 * tfactors.T943i + + (5.0/3.0) * -5.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 38.61457954391361 + -62.19490570025806 * tfactors.T9i + -5.6227 * tfactors.T913i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 62.19490570025806 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -5.6227 * tfactors.T943i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 24.91191754391361 + -56.38964570025806 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 56.38964570025806 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real f18_pf, df18_pf_dT; + // interpolating f18 partition function + get_partition_function(F18, tfactors, f18_pf, df18_pf_dT); + + Real n14_pf, dn14_pf_dT; + // setting n14 partition function to 1.0 by default, independent of T + n14_pf = 1.0_rt; + dn14_pf_dT = 0.0_rt; + + Real z_r = he4_pf * n14_pf; + Real z_p = f18_pf; + + Real dz_r_dT = n14_pf * dhe4_pf_dT + he4_pf * dn14_pf_dT; + Real dz_p_dT = df18_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ne20_to_he4_o16_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ne20 --> he4 + o16 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // co10c + ln_set_rate = 34.26581585936365 + -67.65193003813836 * tfactors.T9i + -3.65925 * tfactors.T913 + + 0.714224 * tfactors.T9 + -0.00107508 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 67.65193003813836 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -3.65925 * tfactors.T923i + + 0.714224 + (5.0/3.0) * -0.00107508 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // co10c + ln_set_rate = 28.64304585936365 + -65.24613003813835 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 65.24613003813835 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // co10c + ln_set_rate = 48.66033585936365 + -54.887630038138354 * tfactors.T9i + -39.7262 * tfactors.T913i + -0.210799 * tfactors.T913 + + 0.442879 * tfactors.T9 + -0.0797753 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 54.887630038138354 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -39.7262 * tfactors.T943i + (1.0/3.0) * -0.210799 * tfactors.T923i + + 0.442879 + (5.0/3.0) * -0.0797753 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real o16_pf, do16_pf_dT; + // interpolating o16 partition function + get_partition_function(O16, tfactors, o16_pf, do16_pf_dT); + + Real ne20_pf, dne20_pf_dT; + // interpolating ne20 partition function + get_partition_function(Ne20, tfactors, ne20_pf, dne20_pf_dT); + + Real z_r = he4_pf * o16_pf; + Real z_p = ne20_pf; + + Real dz_r_dT = o16_pf * dhe4_pf_dT + he4_pf * do16_pf_dT; + Real dz_p_dT = dne20_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_na22_to_p_ne21_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // na22 --> p + ne21 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = -24.579038986172677 + -78.40599033331655 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 78.40599033331655 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 42.145961013827325 + -78.20981033331655 * tfactors.T9i + -19.2096 * tfactors.T913i + + -1.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 78.20981033331655 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -19.2096 * tfactors.T943i + + (5.0/3.0) * -1.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = -16.409838986172673 + -82.42366033331655 * tfactors.T9i + 21.1176 * tfactors.T913i + 34.0411 * tfactors.T913 + + -4.45593 * tfactors.T9 + 0.328613 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 82.42366033331655 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.1176 * tfactors.T943i + (1.0/3.0) * 34.0411 * tfactors.T923i + + -4.45593 + (5.0/3.0) * 0.328613 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 24.833401013827324 + -79.60938033331655 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 79.60938033331655 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real ne21_pf, dne21_pf_dT; + // interpolating ne21 partition function + get_partition_function(Ne21, tfactors, ne21_pf, dne21_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real na22_pf, dna22_pf_dT; + // interpolating na22 partition function + get_partition_function(Na22, tfactors, na22_pf, dna22_pf_dT); + + Real z_r = p_pf * ne21_pf; + Real z_p = na22_pf; + + Real dz_r_dT = ne21_pf * dp_pf_dT + p_pf * dne21_pf_dT; + Real dz_p_dT = dna22_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_na22_to_he4_f18_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // na22 --> he4 + f18 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // rpsmr + ln_set_rate = 59.32234728275454 + -100.23588367240258 * tfactors.T9i + 18.8956 * tfactors.T913i + -65.6134 * tfactors.T913 + + 1.71114 * tfactors.T9 + -0.0260999 * tfactors.T953 + 39.3396 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 100.23588367240258 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 18.8956 * tfactors.T943i + (1.0/3.0) * -65.6134 * tfactors.T923i + + 1.71114 + (5.0/3.0) * -0.0260999 * tfactors.T923 + 39.3396 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real f18_pf, df18_pf_dT; + // interpolating f18 partition function + get_partition_function(F18, tfactors, f18_pf, df18_pf_dT); + + Real na22_pf, dna22_pf_dT; + // interpolating na22 partition function + get_partition_function(Na22, tfactors, na22_pf, dna22_pf_dT); + + Real z_r = he4_pf * f18_pf; + Real z_p = na22_pf; + + Real dz_r_dT = f18_pf * dhe4_pf_dT + he4_pf * df18_pf_dT; + Real dz_p_dT = dna22_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_mg24_to_p_na23_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mg24 --> p + na23 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 43.93571176470678 + -135.6881490421346 * tfactors.T9i + -20.6428 * tfactors.T913i + 1.52954 * tfactors.T913 + + 2.7487 * tfactors.T9 + -1.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 135.6881490421346 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -20.6428 * tfactors.T943i + (1.0/3.0) * 1.52954 * tfactors.T923i + + 2.7487 + (5.0/3.0) * -1.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 34.08761176470678 + -138.9684390421346 * tfactors.T9i + -0.360588 * tfactors.T913 + + 1.4187 * tfactors.T9 + -0.184061 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 138.9684390421346 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.360588 * tfactors.T923i + + 1.4187 + (5.0/3.0) * -0.184061 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 20.002361764706784 + -137.3003390421346 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 137.3003390421346 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real na23_pf, dna23_pf_dT; + // interpolating na23 partition function + get_partition_function(Na23, tfactors, na23_pf, dna23_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real mg24_pf, dmg24_pf_dT; + // interpolating mg24 partition function + get_partition_function(Mg24, tfactors, mg24_pf, dmg24_pf_dT); + + Real z_r = p_pf * na23_pf; + Real z_p = mg24_pf; + + Real dz_r_dT = na23_pf * dp_pf_dT + p_pf * dna23_pf_dT; + Real dz_p_dT = dmg24_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_mg24_to_he4_ne20_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mg24 --> he4 + ne20 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = -13.886931148855957 + -110.62012330714883 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 110.62012330714883 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 49.324368851144044 + -108.11407330714883 * tfactors.T9i + -46.2525 * tfactors.T913i + 5.58901 * tfactors.T913 + + 7.61843 * tfactors.T9 + -3.683 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 108.11407330714883 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -46.2525 * tfactors.T943i + (1.0/3.0) * 5.58901 * tfactors.T923i + + 7.61843 + (5.0/3.0) * -3.683 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 16.02029885114404 + -120.89497330714883 * tfactors.T9i + 16.9229 * tfactors.T913 + + -2.57325 * tfactors.T9 + 0.208997 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 120.89497330714883 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 16.9229 * tfactors.T923i + + -2.57325 + (5.0/3.0) * 0.208997 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 26.801638851144045 + -117.33433330714882 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 117.33433330714882 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real mg24_pf, dmg24_pf_dT; + // interpolating mg24 partition function + get_partition_function(Mg24, tfactors, mg24_pf, dmg24_pf_dT); + + Real ne20_pf, dne20_pf_dT; + // interpolating ne20 partition function + get_partition_function(Ne20, tfactors, ne20_pf, dne20_pf_dT); + + Real z_r = he4_pf * ne20_pf; + Real z_p = mg24_pf; + + Real dz_r_dT = ne20_pf * dhe4_pf_dT + he4_pf * dne20_pf_dT; + Real dz_p_dT = dmg24_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_si28_to_p_al27_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // si28 --> p + al27 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 11.776564828186824 + -136.3434628922348 * tfactors.T9i + 23.8634 * tfactors.T913 + + -3.70135 * tfactors.T9 + 0.28964 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 136.3434628922348 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 23.8634 * tfactors.T923i + + -3.70135 + (5.0/3.0) * 0.28964 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 111.46636482818681 + -134.8268158922348 * tfactors.T9i + -26.8327 * tfactors.T913i + -116.137 * tfactors.T913 + + 0.00950567 * tfactors.T9 + 0.00999755 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 134.8268158922348 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.8327 * tfactors.T943i + (1.0/3.0) * -116.137 * tfactors.T923i + + 0.00950567 + (5.0/3.0) * 0.00999755 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 46.54946482818683 + -134.4395028922348 * tfactors.T9i + -23.2205 * tfactors.T913i + + -2.0 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 134.4395028922348 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -23.2205 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real al27_pf, dal27_pf_dT; + // interpolating al27 partition function + get_partition_function(Al27, tfactors, al27_pf, dal27_pf_dT); + + Real si28_pf, dsi28_pf_dT; + // interpolating si28 partition function + get_partition_function(Si28, tfactors, si28_pf, dsi28_pf_dT); + + Real z_r = p_pf * al27_pf; + Real z_p = si28_pf; + + Real dz_r_dT = al27_pf * dp_pf_dT + p_pf * dal27_pf_dT; + Real dz_p_dT = dsi28_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_si28_to_he4_mg24_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // si28 --> he4 + mg24 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // st08r + ln_set_rate = -25.688574833405916 + -128.69270892750794 * tfactors.T9i + 21.3721 * tfactors.T913i + 37.7649 * tfactors.T913 + + -4.10635 * tfactors.T9 + 0.249618 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 128.69270892750794 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.3721 * tfactors.T943i + (1.0/3.0) * 37.7649 * tfactors.T923i + + -4.10635 + (5.0/3.0) * 0.249618 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // st08r + ln_set_rate = 32.90059516659409 + -131.48850892750792 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 131.48850892750792 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real mg24_pf, dmg24_pf_dT; + // interpolating mg24 partition function + get_partition_function(Mg24, tfactors, mg24_pf, dmg24_pf_dT); + + Real si28_pf, dsi28_pf_dT; + // interpolating si28 partition function + get_partition_function(Si28, tfactors, si28_pf, dsi28_pf_dT); + + Real z_r = he4_pf * mg24_pf; + Real z_p = si28_pf; + + Real dz_r_dT = mg24_pf * dhe4_pf_dT + he4_pf * dmg24_pf_dT; + Real dz_p_dT = dsi28_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_s32_to_p_p31_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // s32 --> p + p31 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 25.172836958303158 + -106.63693563716609 * tfactors.T9i + 8.09341 * tfactors.T913 + + -0.615971 * tfactors.T9 + 0.031159 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 106.63693563716609 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 8.09341 * tfactors.T923i + + -0.615971 + (5.0/3.0) * 0.031159 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 21.682890958303158 + -105.11947563716609 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 105.11947563716609 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 43.610880958303156 + -102.85989563716609 * tfactors.T9i + -25.3278 * tfactors.T913i + 6.4931 * tfactors.T913 + + -9.27513 * tfactors.T9 + -0.610439 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 102.85989563716609 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -25.3278 * tfactors.T943i + (1.0/3.0) * 6.4931 * tfactors.T923i + + -9.27513 + (5.0/3.0) * -0.610439 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real s32_pf, ds32_pf_dT; + // interpolating s32 partition function + get_partition_function(S32, tfactors, s32_pf, ds32_pf_dT); + + Real p31_pf, dp31_pf_dT; + // interpolating p31 partition function + get_partition_function(P31, tfactors, p31_pf, dp31_pf_dT); + + Real z_r = p_pf * p31_pf; + Real z_p = s32_pf; + + Real dz_r_dT = p31_pf * dp_pf_dT + p_pf * dp31_pf_dT; + Real dz_p_dT = ds32_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_s32_to_he4_si28_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // s32 --> he4 + si28 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 72.81295409739818 + -80.62610309662641 * tfactors.T9i + -59.4896 * tfactors.T913i + 4.47205 * tfactors.T913 + + -4.78989 * tfactors.T9 + 0.557201 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 80.62610309662641 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -59.4896 * tfactors.T943i + (1.0/3.0) * 4.47205 * tfactors.T923i + + -4.78989 + (5.0/3.0) * 0.557201 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real s32_pf, ds32_pf_dT; + // interpolating s32 partition function + get_partition_function(S32, tfactors, s32_pf, ds32_pf_dT); + + Real si28_pf, dsi28_pf_dT; + // interpolating si28 partition function + get_partition_function(Si28, tfactors, si28_pf, dsi28_pf_dT); + + Real z_r = he4_pf * si28_pf; + Real z_p = s32_pf; + + Real dz_r_dT = si28_pf * dhe4_pf_dT + he4_pf * dsi28_pf_dT; + Real dz_p_dT = ds32_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe52_to_p_mn51_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe52 --> p + mn51 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 61.72798916565748 + -85.6326403498911 * tfactors.T9i + -36.1825 * tfactors.T913i + 0.873042 * tfactors.T913 + + -2.89731 * tfactors.T9 + 0.364394 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 85.6326403498911 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.1825 * tfactors.T943i + (1.0/3.0) * 0.873042 * tfactors.T923i + + -2.89731 + (5.0/3.0) * 0.364394 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real mn51_pf, dmn51_pf_dT; + // interpolating mn51 partition function + get_partition_function(Mn51, tfactors, mn51_pf, dmn51_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real fe52_pf, dfe52_pf_dT; + // interpolating fe52 partition function + get_partition_function(Fe52, tfactors, fe52_pf, dfe52_pf_dT); + + Real z_r = p_pf * mn51_pf; + Real z_p = fe52_pf; + + Real dz_r_dT = mn51_pf * dp_pf_dT + p_pf * dmn51_pf_dT; + Real dz_p_dT = dfe52_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe52_to_he4_cr48_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe52 --> he4 + cr48 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 90.14738712482466 + -92.10912191363732 * tfactors.T9i + -86.7459 * tfactors.T913i + -9.79373 * tfactors.T913 + + -0.772169 * tfactors.T9 + 0.155883 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 92.10912191363732 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * -9.79373 * tfactors.T923i + + -0.772169 + (5.0/3.0) * 0.155883 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cr48_pf, dcr48_pf_dT; + // interpolating cr48 partition function + get_partition_function(Cr48, tfactors, cr48_pf, dcr48_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe52_pf, dfe52_pf_dT; + // interpolating fe52 partition function + get_partition_function(Fe52, tfactors, fe52_pf, dfe52_pf_dT); + + Real z_r = he4_pf * cr48_pf; + Real z_p = fe52_pf; + + Real dz_r_dT = cr48_pf * dhe4_pf_dT + he4_pf * dcr48_pf_dT; + Real dz_p_dT = dfe52_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co55_to_he4_mn51_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 --> he4 + mn51 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 90.61300778512097 + -95.28620688500884 * tfactors.T9i + -89.274 * tfactors.T913i + -10.4373 * tfactors.T913 + + 1.00492 * tfactors.T9 + -0.125548 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 95.28620688500884 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -10.4373 * tfactors.T923i + + 1.00492 + (5.0/3.0) * -0.125548 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real mn51_pf, dmn51_pf_dT; + // interpolating mn51 partition function + get_partition_function(Mn51, tfactors, mn51_pf, dmn51_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real z_r = he4_pf * mn51_pf; + Real z_p = co55_pf; + + Real dz_r_dT = mn51_pf * dhe4_pf_dT + he4_pf * dmn51_pf_dT; + Real dz_p_dT = dco55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni56_to_p_co55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 --> p + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 63.131770608640906 + -83.14741674893808 * tfactors.T9i + -38.1053 * tfactors.T913i + -0.210947 * tfactors.T913 + + -2.68377 * tfactors.T9 + 0.355814 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 83.14741674893808 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1053 * tfactors.T943i + (1.0/3.0) * -0.210947 * tfactors.T923i + + -2.68377 + (5.0/3.0) * 0.355814 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real z_r = p_pf * co55_pf; + Real z_p = ni56_pf; + + Real dz_r_dT = co55_pf * dp_pf_dT + p_pf * dco55_pf_dT; + Real dz_p_dT = dni56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni56_to_he4_fe52_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 --> he4 + fe52 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 91.62258922810439 + -92.801099329237 * tfactors.T9i + -91.6819 * tfactors.T913i + -9.51885 * tfactors.T913 + + -0.533014 * tfactors.T9 + 0.0892607 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 92.801099329237 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -9.51885 * tfactors.T923i + + -0.533014 + (5.0/3.0) * 0.0892607 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe52_pf, dfe52_pf_dT; + // interpolating fe52 partition function + get_partition_function(Fe52, tfactors, fe52_pf, dfe52_pf_dT); + + Real z_r = he4_pf * fe52_pf; + Real z_p = ni56_pf; + + Real dz_r_dT = fe52_pf * dhe4_pf_dT + he4_pf * dfe52_pf_dT; + Real dz_p_dT = dni56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_cu59_to_he4_co55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cu59 --> he4 + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 90.97199197888506 + -55.17460977128912 * tfactors.T9i + -94.1404 * tfactors.T913i + -2.62786 * tfactors.T913 + + -2.12066 * tfactors.T9 + 0.237999 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 55.17460977128912 * 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cu59_pf, dcu59_pf_dT; + // interpolating cu59 partition function + get_partition_function(Cu59, tfactors, cu59_pf, dcu59_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real z_r = he4_pf * co55_pf; + Real z_p = cu59_pf; + + Real dz_r_dT = co55_pf * dhe4_pf_dT + he4_pf * dco55_pf_dT; + Real dz_p_dT = dcu59_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_zn60_to_p_cu59_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // zn60 --> p + cu59 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 62.2928405088604 + -59.40944656945774 * tfactors.T9i + -39.9808 * tfactors.T913i + 1.17311 * tfactors.T913 + + -2.90486 * tfactors.T9 + 0.339644 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 59.40944656945774 * 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cu59_pf, dcu59_pf_dT; + // interpolating cu59 partition function + get_partition_function(Cu59, tfactors, cu59_pf, dcu59_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real zn60_pf, dzn60_pf_dT; + // interpolating zn60 partition function + get_partition_function(Zn60, tfactors, zn60_pf, dzn60_pf_dT); + + Real z_r = p_pf * cu59_pf; + Real z_p = zn60_pf; + + Real dz_r_dT = cu59_pf * dp_pf_dT + p_pf * dcu59_pf_dT; + Real dz_p_dT = dzn60_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_zn60_to_he4_ni56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // zn60 --> he4 + ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 86.06186187910455 + -31.43675563699001 * tfactors.T9i + -96.4898 * tfactors.T913i + 6.47209 * tfactors.T913 + + -5.2029 * tfactors.T9 + 0.533391 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 31.43675563699001 * 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real zn60_pf, dzn60_pf_dT; + // interpolating zn60 partition function + get_partition_function(Zn60, tfactors, zn60_pf, dzn60_pf_dT); + + Real z_r = he4_pf * ni56_pf; + Real z_p = zn60_pf; + + Real dz_r_dT = ni56_pf * dhe4_pf_dT + he4_pf * dni56_pf_dT; + Real dz_p_dT = dzn60_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_c12_to_he4_he4_he4_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // c12 --> he4 + he4 + he4 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // fy05c + ln_set_rate = 22.39392447043974 + -88.54942933569913 * tfactors.T9i + -13.49 * tfactors.T913i + 21.4259 * tfactors.T913 + + -1.34769 * tfactors.T9 + 0.0879816 * tfactors.T953 + -10.1653 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 88.54942933569913 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -13.49 * tfactors.T943i + (1.0/3.0) * 21.4259 * tfactors.T923i + + -1.34769 + (5.0/3.0) * 0.0879816 * tfactors.T923 + -10.1653 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // fy05c + ln_set_rate = 34.95602447043974 + -85.44732933569914 * tfactors.T9i + -23.57 * tfactors.T913i + 20.4886 * tfactors.T913 + + -12.9882 * tfactors.T9 + -20.0 * tfactors.T953 + 0.8333300000000001 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 85.44732933569914 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -23.57 * tfactors.T943i + (1.0/3.0) * 20.4886 * tfactors.T923i + + -12.9882 + (5.0/3.0) * -20.0 * tfactors.T923 + 0.8333300000000001 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // fy05c + ln_set_rate = 45.77337247043974 + -84.42286933569913 * tfactors.T9i + -37.06 * tfactors.T913i + 29.3493 * tfactors.T913 + + -115.507 * tfactors.T9 + -10.0 * tfactors.T953 + 1.66667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 84.42286933569913 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.06 * tfactors.T943i + (1.0/3.0) * 29.3493 * tfactors.T923i + + -115.507 + (5.0/3.0) * -10.0 * tfactors.T923 + 1.66667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real c12_pf, dc12_pf_dT; + // setting c12 partition function to 1.0 by default, independent of T + c12_pf = 1.0_rt; + dc12_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real z_r = he4_pf * he4_pf * he4_pf; + Real z_p = c12_pf; + + Real dz_r_dT = dhe4_pf_dT + dhe4_pf_dT + dhe4_pf_dT; + Real dz_p_dT = dc12_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_o16_to_he4_n13_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // o16 + p --> he4 + n13 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // cf88n + ln_set_rate = 42.232382494512464 + -60.55237555926846 * tfactors.T9i + -35.829 * tfactors.T913i + -0.530275 * tfactors.T913 + + -0.982462 * tfactors.T9 + 0.0808059 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 60.55237555926846 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -35.829 * tfactors.T943i + (1.0/3.0) * -0.530275 * tfactors.T923i + + -0.982462 + (5.0/3.0) * 0.0808059 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real o16_pf, do16_pf_dT; + // interpolating o16 partition function + get_partition_function(O16, tfactors, o16_pf, do16_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real n13_pf, dn13_pf_dT; + // setting n13 partition function to 1.0 by default, independent of T + n13_pf = 1.0_rt; + dn13_pf_dT = 0.0_rt; + + Real z_r = he4_pf * n13_pf; + Real z_p = p_pf * o16_pf; + + Real dz_r_dT = n13_pf * dhe4_pf_dT + he4_pf * dn13_pf_dT; + Real dz_p_dT = o16_pf * dp_pf_dT + p_pf * do16_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ne20_to_p_na23_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ne20 + he4 --> p + na23 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = -6.377717086437262 + -29.88961364462334 * tfactors.T9i + 19.7297 * tfactors.T913 + + -2.20987 * tfactors.T9 + 0.153374 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 29.88961364462334 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 19.7297 * tfactors.T923i + + -2.20987 + (5.0/3.0) * 0.153374 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 0.227472413562738 + -29.434873644623337 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 29.434873644623337 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 19.18524291356274 + -27.573843644623338 * tfactors.T9i + -20.0024 * tfactors.T913i + 11.5988 * tfactors.T913 + + -1.37398 * tfactors.T9 + -1.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 27.573843644623338 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -20.0024 * tfactors.T943i + (1.0/3.0) * 11.5988 * tfactors.T923i + + -1.37398 + (5.0/3.0) * -1.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real na23_pf, dna23_pf_dT; + // interpolating na23 partition function + get_partition_function(Na23, tfactors, na23_pf, dna23_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ne20_pf, dne20_pf_dT; + // interpolating ne20 partition function + get_partition_function(Ne20, tfactors, ne20_pf, dne20_pf_dT); + + Real z_r = p_pf * na23_pf; + Real z_p = he4_pf * ne20_pf; + + Real dz_r_dT = na23_pf * dp_pf_dT + p_pf * dna23_pf_dT; + Real dz_p_dT = ne20_pf * dhe4_pf_dT + he4_pf * dne20_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_ne21_to_he4_f18_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ne21 + p --> he4 + f18 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // rpsmr + ln_set_rate = 50.65368626892722 + -22.049056049959066 * tfactors.T9i + 21.4461 * tfactors.T913i + -73.252 * tfactors.T913 + + 2.42329 * tfactors.T9 + -0.077278 * tfactors.T953 + 40.7604 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.049056049959066 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 21.4461 * tfactors.T943i + (1.0/3.0) * -73.252 * tfactors.T923i + + 2.42329 + (5.0/3.0) * -0.077278 * tfactors.T923 + 40.7604 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ne21_pf, dne21_pf_dT; + // interpolating ne21 partition function + get_partition_function(Ne21, tfactors, ne21_pf, dne21_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real f18_pf, df18_pf_dT; + // interpolating f18 partition function + get_partition_function(F18, tfactors, f18_pf, df18_pf_dT); + + Real z_r = he4_pf * f18_pf; + Real z_p = p_pf * ne21_pf; + + Real dz_r_dT = f18_pf * dhe4_pf_dT + he4_pf * df18_pf_dT; + Real dz_p_dT = ne21_pf * dp_pf_dT + p_pf * dne21_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_mg24_to_p_al27_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mg24 + he4 --> p + al27 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = -6.445750338407262 + -22.82086933218981 * tfactors.T9i + 18.0416 * tfactors.T913 + + -1.54137 * tfactors.T9 + 0.0847506 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.82086933218981 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0416 * tfactors.T923i + + -1.54137 + (5.0/3.0) * 0.0847506 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = -26.286160338407264 + -19.54138133218981 * tfactors.T9i + 5.18642 * tfactors.T913i + -34.7936 * tfactors.T913 + + 168.225 * tfactors.T9 + -115.825 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 19.54138133218981 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 5.18642 * tfactors.T943i + (1.0/3.0) * -34.7936 * tfactors.T923i + + 168.225 + (5.0/3.0) * -115.825 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 30.039739661592737 + -18.578369332189812 * tfactors.T9i + -26.4162 * tfactors.T913i + + -2.0 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 18.578369332189812 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -26.4162 * tfactors.T943i + + (5.0/3.0) * -2.0 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real al27_pf, dal27_pf_dT; + // interpolating al27 partition function + get_partition_function(Al27, tfactors, al27_pf, dal27_pf_dT); + + Real mg24_pf, dmg24_pf_dT; + // interpolating mg24 partition function + get_partition_function(Mg24, tfactors, mg24_pf, dmg24_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real z_r = p_pf * al27_pf; + Real z_p = he4_pf * mg24_pf; + + Real dz_r_dT = al27_pf * dp_pf_dT + p_pf * dal27_pf_dT; + Real dz_p_dT = mg24_pf * dhe4_pf_dT + he4_pf * dmg24_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_si28_to_p_p31_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // si28 + he4 --> p + p31 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = -11.433473139095032 + -25.65965858572089 * tfactors.T9i + 21.521 * tfactors.T913 + + -1.90355 * tfactors.T9 + 0.092724 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 25.65965858572089 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 21.521 * tfactors.T923i + + -1.90355 + (5.0/3.0) * 0.092724 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = -13.459473139095032 + -24.11106858572089 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 24.11106858572089 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 60.342426860904965 + -22.23390858572089 * tfactors.T9i + -31.932 * tfactors.T913i + -77.0334 * tfactors.T913 + + -43.6847 * tfactors.T9 + -4.28955 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.23390858572089 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -31.932 * tfactors.T943i + (1.0/3.0) * -77.0334 * tfactors.T923i + + -43.6847 + (5.0/3.0) * -4.28955 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real p31_pf, dp31_pf_dT; + // interpolating p31 partition function + get_partition_function(P31, tfactors, p31_pf, dp31_pf_dT); + + Real si28_pf, dsi28_pf_dT; + // interpolating si28 partition function + get_partition_function(Si28, tfactors, si28_pf, dsi28_pf_dT); + + Real z_r = p_pf * p31_pf; + Real z_p = he4_pf * si28_pf; + + Real dz_r_dT = p31_pf * dp_pf_dT + p_pf * dp31_pf_dT; + Real dz_p_dT = si28_pf * dhe4_pf_dT + he4_pf * dsi28_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_mn51_to_he4_cr48_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn51 + p --> he4 + cr48 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 58.73119795916719 + -6.476551190854941 * tfactors.T9i + -86.7459 * tfactors.T913i + 1.05653 * tfactors.T913 + + -1.15757 * tfactors.T9 + 0.0877546 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.476551190854941 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -86.7459 * tfactors.T943i + (1.0/3.0) * 1.05653 * tfactors.T923i + + -1.15757 + (5.0/3.0) * 0.0877546 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real cr48_pf, dcr48_pf_dT; + // interpolating cr48 partition function + get_partition_function(Cr48, tfactors, cr48_pf, dcr48_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real mn51_pf, dmn51_pf_dT; + // interpolating mn51 partition function + get_partition_function(Mn51, tfactors, mn51_pf, dmn51_pf_dT); + + Real z_r = he4_pf * cr48_pf; + Real z_p = p_pf * mn51_pf; + + Real dz_r_dT = cr48_pf * dhe4_pf_dT + he4_pf * dcr48_pf_dT; + Real dz_p_dT = mn51_pf * dp_pf_dT + p_pf * dmn51_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co55_to_he4_fe52_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 + p --> he4 + fe52 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 61.443418619463486 + -9.65364776674457 * tfactors.T9i + -91.6819 * tfactors.T913i + -0.329235 * tfactors.T913 + + -0.780924 * tfactors.T9 + 0.0425179 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 9.65364776674457 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.6819 * tfactors.T943i + (1.0/3.0) * -0.329235 * tfactors.T923i + + -0.780924 + (5.0/3.0) * 0.0425179 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real fe52_pf, dfe52_pf_dT; + // interpolating fe52 partition function + get_partition_function(Fe52, tfactors, fe52_pf, dfe52_pf_dT); + + Real z_r = he4_pf * fe52_pf; + Real z_p = p_pf * co55_pf; + + Real dz_r_dT = fe52_pf * dhe4_pf_dT + he4_pf * dfe52_pf_dT; + Real dz_p_dT = co55_pf * dp_pf_dT + p_pf * dco55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ni56_to_p_cu59_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni56 + he4 --> p + cu59 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 20.847078629755856 + -27.97280697764895 * tfactors.T9i + -39.9808 * tfactors.T913i + 13.6773 * tfactors.T913 + + -3.76429 * tfactors.T9 + 0.438096 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 27.97280697764895 * 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cu59_pf, dcu59_pf_dT; + // interpolating cu59 partition function + get_partition_function(Cu59, tfactors, cu59_pf, dcu59_pf_dT); + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real z_r = p_pf * cu59_pf; + Real z_p = he4_pf * ni56_pf; + + Real dz_r_dT = cu59_pf * dp_pf_dT + p_pf * dcu59_pf_dT; + Real dz_p_dT = ni56_pf * dhe4_pf_dT + he4_pf * dni56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe53_to_n_fe52_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe53 --> n + fe52 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 37.48624299107921 + -123.99427613085159 * tfactors.T9i + -0.344319 * tfactors.T913 + + 0.178277 * tfactors.T9 + -0.0334326 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 123.99427613085159 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -0.344319 * tfactors.T923i + + 0.178277 + (5.0/3.0) * -0.0334326 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real fe52_pf, dfe52_pf_dT; + // interpolating fe52 partition function + get_partition_function(Fe52, tfactors, fe52_pf, dfe52_pf_dT); + + Real fe53_pf, dfe53_pf_dT; + // interpolating fe53 partition function + get_partition_function(Fe53, tfactors, fe53_pf, dfe53_pf_dT); + + Real z_r = n_pf * fe52_pf; + Real z_p = fe53_pf; + + Real dz_r_dT = fe52_pf * dn_pf_dT + n_pf * dfe52_pf_dT; + Real dz_p_dT = dfe53_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe54_to_n_fe53_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 --> n + fe53 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 42.210560167376684 + -155.25104569177333 * tfactors.T9i + -1.10421 * tfactors.T913 + + 0.379905 * tfactors.T9 + -0.0581878 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 155.25104569177333 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.10421 * tfactors.T923i + + 0.379905 + (5.0/3.0) * -0.0581878 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real fe53_pf, dfe53_pf_dT; + // interpolating fe53 partition function + get_partition_function(Fe53, tfactors, fe53_pf, dfe53_pf_dT); + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = n_pf * fe53_pf; + Real z_p = fe54_pf; + + Real dz_r_dT = fe53_pf * dn_pf_dT + n_pf * dfe53_pf_dT; + Real dz_p_dT = dfe54_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe55_to_n_fe54_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 --> n + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ks03 + ln_set_rate = 21.483298756092896 + -107.84311925142697 * tfactors.T9i + -8.66617 * tfactors.T913i + 26.4472 * tfactors.T913 + + -1.9222 * tfactors.T9 + 0.0986404 * tfactors.T953 + -8.28317 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 107.84311925142697 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -8.66617 * tfactors.T943i + (1.0/3.0) * 26.4472 * tfactors.T923i + + -1.9222 + (5.0/3.0) * 0.0986404 * tfactors.T923 + -8.28317 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = n_pf * fe54_pf; + Real z_p = fe55_pf; + + Real dz_r_dT = fe54_pf * dn_pf_dT + n_pf * dfe54_pf_dT; + Real dz_p_dT = dfe55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe56_to_n_fe55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe56 --> n + fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ks03 + ln_set_rate = 46.785223428080954 + -130.0232339465001 * tfactors.T9i + 8.06062 * tfactors.T913i + -14.4809 * tfactors.T913 + + 0.94252 * tfactors.T9 + -0.0776007 * tfactors.T953 + 7.97093 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 130.0232339465001 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 8.06062 * tfactors.T943i + (1.0/3.0) * -14.4809 * tfactors.T923i + + 0.94252 + (5.0/3.0) * -0.0776007 * tfactors.T923 + 7.97093 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real fe56_pf, dfe56_pf_dT; + // interpolating fe56 partition function + get_partition_function(Fe56, tfactors, fe56_pf, dfe56_pf_dT); + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real z_r = n_pf * fe55_pf; + Real z_p = fe56_pf; + + Real dz_r_dT = fe55_pf * dn_pf_dT + n_pf * dfe55_pf_dT; + Real dz_p_dT = dfe56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_fe56_to_p_mn55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe56 --> p + mn55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 61.659288536189116 + -118.17693119642051 * tfactors.T9i + -36.1995 * tfactors.T913i + 1.15346 * tfactors.T913 + + -1.94437 * tfactors.T9 + 0.218429 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 118.17693119642051 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -36.1995 * tfactors.T943i + (1.0/3.0) * 1.15346 * tfactors.T923i + + -1.94437 + (5.0/3.0) * 0.218429 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real fe56_pf, dfe56_pf_dT; + // interpolating fe56 partition function + get_partition_function(Fe56, tfactors, fe56_pf, dfe56_pf_dT); + + Real mn55_pf, dmn55_pf_dT; + // interpolating mn55 partition function + get_partition_function(Mn55, tfactors, mn55_pf, dmn55_pf_dT); + + Real z_r = p_pf * mn55_pf; + Real z_p = fe56_pf; + + Real dz_r_dT = mn55_pf * dp_pf_dT + p_pf * dmn55_pf_dT; + Real dz_p_dT = dfe56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co55_to_p_fe54_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co55 --> p + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 57.82919157553295 + -58.76609208478817 * tfactors.T9i + -37.1544 * tfactors.T913i + 0.950364 * tfactors.T913 + + -1.77529 * tfactors.T9 + 0.198562 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 58.76609208478817 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.1544 * tfactors.T943i + (1.0/3.0) * 0.950364 * tfactors.T923i + + -1.77529 + (5.0/3.0) * 0.198562 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = p_pf * fe54_pf; + Real z_p = co55_pf; + + Real dz_r_dT = fe54_pf * dp_pf_dT + p_pf * dfe54_pf_dT; + Real dz_p_dT = dco55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co56_to_n_co55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 --> n + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 40.62594603130468 + -117.00951667337291 * tfactors.T9i + -1.86357 * tfactors.T913 + + 0.616591 * tfactors.T9 + -0.0839313 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 117.00951667337291 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.86357 * tfactors.T923i + + 0.616591 + (5.0/3.0) * -0.0839313 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = n_pf * co55_pf; + Real z_p = co56_pf; + + Real dz_r_dT = co55_pf * dn_pf_dT + n_pf * dco55_pf_dT; + Real dz_p_dT = dco56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co56_to_p_fe55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 --> p + fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 58.601098850744734 + -67.87436231336505 * tfactors.T9i + -37.1585 * tfactors.T913i + 1.66198 * tfactors.T913 + + -1.60842 * tfactors.T9 + 0.148916 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 67.87436231336505 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.1585 * tfactors.T943i + (1.0/3.0) * 1.66198 * tfactors.T923i + + -1.60842 + (5.0/3.0) * 0.148916 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = p_pf * fe55_pf; + Real z_p = co56_pf; + + Real dz_r_dT = fe55_pf * dp_pf_dT + p_pf * dfe55_pf_dT; + Real dz_p_dT = dco56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co57_to_n_co56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co57 --> n + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 41.15219049522237 + -132.01531905660212 * tfactors.T9i + -1.37855 * tfactors.T913 + + 0.299896 * tfactors.T9 + -0.04382 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 132.01531905660212 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.37855 * tfactors.T923i + + 0.299896 + (5.0/3.0) * -0.04382 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real co57_pf, dco57_pf_dT; + // interpolating co57 partition function + get_partition_function(Co57, tfactors, co57_pf, dco57_pf_dT); + + Real z_r = n_pf * co56_pf; + Real z_p = co57_pf; + + Real dz_r_dT = co56_pf * dn_pf_dT + n_pf * dco56_pf_dT; + Real dz_p_dT = dco57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_co57_to_p_fe56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co57 --> p + fe56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 57.66626591788614 + -69.94994642462048 * tfactors.T9i + -37.1625 * tfactors.T913i + 1.06776 * tfactors.T913 + + -1.31689 * tfactors.T9 + 0.122089 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 69.94994642462048 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -37.1625 * tfactors.T943i + (1.0/3.0) * 1.06776 * tfactors.T923i + + -1.31689 + (5.0/3.0) * 0.122089 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real fe56_pf, dfe56_pf_dT; + // interpolating fe56 partition function + get_partition_function(Fe56, tfactors, fe56_pf, dfe56_pf_dT); + + Real co57_pf, dco57_pf_dT; + // interpolating co57 partition function + get_partition_function(Co57, tfactors, co57_pf, dco57_pf_dT); + + Real z_r = p_pf * fe56_pf; + Real z_p = co57_pf; + + Real dz_r_dT = fe56_pf * dp_pf_dT + p_pf * dfe56_pf_dT; + Real dz_p_dT = dco57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni57_to_n_ni56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 --> n + ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 38.36941309844609 + -118.94166894064354 * tfactors.T9i + -1.19665 * tfactors.T913 + + 0.507179 * tfactors.T9 + -0.074604 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 118.94166894064354 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.19665 * tfactors.T923i + + 0.507179 + (5.0/3.0) * -0.074604 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real z_r = n_pf * ni56_pf; + Real z_p = ni57_pf; + + Real dz_r_dT = ni56_pf * dn_pf_dT + n_pf * dni56_pf_dT; + Real dz_p_dT = dni57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni57_to_p_co56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 --> p + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 60.08383767578231 + -85.07956901620872 * tfactors.T9i + -38.1094 * tfactors.T913i + 2.57091 * tfactors.T913 + + -2.07795 * tfactors.T9 + 0.20757 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 85.07956901620872 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1094 * tfactors.T943i + (1.0/3.0) * 2.57091 * tfactors.T923i + + -2.07795 + (5.0/3.0) * 0.20757 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = p_pf * co56_pf; + Real z_p = ni57_pf; + + Real dz_r_dT = co56_pf * dp_pf_dT + p_pf * dco56_pf_dT; + Real dz_p_dT = dni57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni57_to_he4_fe53_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 --> he4 + fe53 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 94.73965933547126 + -87.74826004866655 * tfactors.T9i + -91.7231 * tfactors.T913i + -10.1816 * tfactors.T913 + + -0.0406303 * tfactors.T9 + 0.0345056 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 87.74826004866655 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.7231 * tfactors.T943i + (1.0/3.0) * -10.1816 * tfactors.T923i + + -0.0406303 + (5.0/3.0) * 0.0345056 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe53_pf, dfe53_pf_dT; + // interpolating fe53 partition function + get_partition_function(Fe53, tfactors, fe53_pf, dfe53_pf_dT); + + Real z_r = he4_pf * fe53_pf; + Real z_p = ni57_pf; + + Real dz_r_dT = fe53_pf * dhe4_pf_dT + he4_pf * dfe53_pf_dT; + Real dz_p_dT = dni57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni58_to_n_ni57_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 --> n + ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 42.339063572267165 + -141.77239789336582 * tfactors.T9i + -1.90814 * tfactors.T913 + + 0.493188 * tfactors.T9 + -0.0684633 * tfactors.T953 + 1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 141.77239789336582 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.90814 * tfactors.T923i + + 0.493188 + (5.0/3.0) * -0.0684633 * tfactors.T923 + 1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real z_r = n_pf * ni57_pf; + Real z_p = ni58_pf; + + Real dz_r_dT = ni57_pf * dn_pf_dT + n_pf * dni57_pf_dT; + Real dz_p_dT = dni58_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni58_to_p_co57_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 --> p + co57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 61.775010752827114 + -94.83746016924091 * tfactors.T9i + -38.1133 * tfactors.T913i + 1.77414 * tfactors.T913 + + -1.48268 * tfactors.T9 + 0.121073 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 94.83746016924091 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 1.77414 * tfactors.T923i + + -1.48268 + (5.0/3.0) * 0.121073 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real co57_pf, dco57_pf_dT; + // interpolating co57 partition function + get_partition_function(Co57, tfactors, co57_pf, dco57_pf_dT); + + Real z_r = p_pf * co57_pf; + Real z_p = ni58_pf; + + Real dz_r_dT = co57_pf * dp_pf_dT + p_pf * dco57_pf_dT; + Real dz_p_dT = dni58_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ni58_to_he4_fe54_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 --> he4 + fe54 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 85.23266274036175 + -74.27065665689001 * tfactors.T9i + -91.7628 * tfactors.T913i + 4.23027 * tfactors.T913 + + -3.31305 * tfactors.T9 + 0.271293 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 74.27065665689001 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.7628 * tfactors.T943i + (1.0/3.0) * 4.23027 * tfactors.T923i + + -3.31305 + (5.0/3.0) * 0.271293 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = he4_pf * fe54_pf; + Real z_p = ni58_pf; + + Real dz_r_dT = fe54_pf * dhe4_pf_dT + he4_pf * dfe54_pf_dT; + Real dz_p_dT = dni58_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_cu59_to_p_ni58_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cu59 --> p + ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // si13n + ln_set_rate = 58.96002081405625 + -39.670045199187285 * tfactors.T9i + -39.0526 * tfactors.T913i + 1.0436 * tfactors.T913 + + -2.10834 * tfactors.T9 + 0.239559 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 39.670045199187285 * 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; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cu59_pf, dcu59_pf_dT; + // interpolating cu59 partition function + get_partition_function(Cu59, tfactors, cu59_pf, dcu59_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real z_r = p_pf * ni58_pf; + Real z_p = cu59_pf; + + Real dz_r_dT = ni58_pf * dp_pf_dT + p_pf * dni58_pf_dT; + Real dz_p_dT = dcu59_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_mn55_to_n_fe55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // mn55 + p --> n + fe55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 4.300924891891836 + -11.761875387476456 * tfactors.T9i + 7.03052 * tfactors.T913 + + 0.260509 * tfactors.T9 + -0.0813397 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 11.761875387476456 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 7.03052 * tfactors.T923i + + 0.260509 + (5.0/3.0) * -0.0813397 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real mn55_pf, dmn55_pf_dT; + // interpolating mn55 partition function + get_partition_function(Mn55, tfactors, mn55_pf, dmn55_pf_dT); + + Real z_r = n_pf * fe55_pf; + Real z_p = p_pf * mn55_pf; + + Real dz_r_dT = fe55_pf * dn_pf_dT + n_pf * dfe55_pf_dT; + Real dz_p_dT = mn55_pf * dp_pf_dT + p_pf * dmn55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe53_to_n_ni56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe53 + he4 --> n + ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -11.227076237025186 + -31.193524937158223 * tfactors.T9i + 6.43259 * tfactors.T913 + + 2.29591 * tfactors.T9 + -0.254724 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 31.193524937158223 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 6.43259 * tfactors.T923i + + 2.29591 + (5.0/3.0) * -0.254724 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe53_pf, dfe53_pf_dT; + // interpolating fe53 partition function + get_partition_function(Fe53, tfactors, fe53_pf, dfe53_pf_dT); + + Real z_r = n_pf * ni56_pf; + Real z_p = he4_pf * fe53_pf; + + Real dz_r_dT = ni56_pf * dn_pf_dT + n_pf * dni56_pf_dT; + Real dz_p_dT = fe53_pf * dhe4_pf_dT + he4_pf * dfe53_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe54_to_he4_mn51_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + p --> he4 + mn51 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 65.37001620958803 + -36.52011480022066 * tfactors.T9i + -89.274 * tfactors.T913i + -0.862452 * tfactors.T913 + + -0.635672 * tfactors.T9 + 0.0196464 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 36.52011480022066 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -89.274 * tfactors.T943i + (1.0/3.0) * -0.862452 * tfactors.T923i + + -0.635672 + (5.0/3.0) * 0.0196464 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real mn51_pf, dmn51_pf_dT; + // interpolating mn51 partition function + get_partition_function(Mn51, tfactors, mn51_pf, dmn51_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = he4_pf * mn51_pf; + Real z_p = p_pf * fe54_pf; + + Real dz_r_dT = mn51_pf * dhe4_pf_dT + he4_pf * dmn51_pf_dT; + Real dz_p_dT = fe54_pf * dp_pf_dT + p_pf * dfe54_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe54_to_n_ni57_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + he4 --> n + ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 14.613800831905415 + -67.50220541720067 * tfactors.T9i + 0.48562 * tfactors.T913 + + -0.0249302 * tfactors.T9 + 0.0509605 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 67.50220541720067 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 0.48562 * tfactors.T923i + + -0.0249302 + (5.0/3.0) * 0.0509605 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = n_pf * ni57_pf; + Real z_p = he4_pf * fe54_pf; + + Real dz_r_dT = ni57_pf * dn_pf_dT + n_pf * dni57_pf_dT; + Real dz_p_dT = fe54_pf * dhe4_pf_dT + he4_pf * dfe54_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe54_to_p_co57_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe54 + he4 --> p + co57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -1.4219519875346407 + -20.56680351235092 * tfactors.T9i + -38.1133 * tfactors.T913i + 29.3541 * tfactors.T913 + + -4.75966 * tfactors.T9 + 0.40418 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 20.56680351235092 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -38.1133 * tfactors.T943i + (1.0/3.0) * 29.3541 * tfactors.T923i + + -4.75966 + (5.0/3.0) * 0.40418 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co57_pf, dco57_pf_dT; + // interpolating co57 partition function + get_partition_function(Co57, tfactors, co57_pf, dco57_pf_dT); + + Real fe54_pf, dfe54_pf_dT; + // interpolating fe54 partition function + get_partition_function(Fe54, tfactors, fe54_pf, dfe54_pf_dT); + + Real z_r = p_pf * co57_pf; + Real z_p = he4_pf * fe54_pf; + + Real dz_r_dT = co57_pf * dp_pf_dT + p_pf * dco57_pf_dT; + Real dz_p_dT = fe54_pf * dhe4_pf_dT + he4_pf * dfe54_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe55_to_n_co55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 + p --> n + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 21.432947180559943 + -49.13538645037029 * tfactors.T9i + -1.62382 * tfactors.T913 + + 0.58115 * tfactors.T9 + -0.0537057 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 49.13538645037029 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.62382 * tfactors.T923i + + 0.58115 + (5.0/3.0) * -0.0537057 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real z_r = n_pf * co55_pf; + Real z_p = p_pf * fe55_pf; + + Real dz_r_dT = co55_pf * dn_pf_dT + n_pf * dco55_pf_dT; + Real dz_p_dT = fe55_pf * dp_pf_dT + p_pf * dfe55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_fe55_to_n_ni58_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe55 + he4 --> n + ni58 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = -4.731933984268859 + -33.63082187826845 * tfactors.T9i + 3.44996 * tfactors.T913 + + 2.98226 * tfactors.T9 + -0.387699 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 33.63082187826845 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 3.44996 * tfactors.T923i + + 2.98226 + (5.0/3.0) * -0.387699 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real fe55_pf, dfe55_pf_dT; + // interpolating fe55 partition function + get_partition_function(Fe55, tfactors, fe55_pf, dfe55_pf_dT); + + Real z_r = n_pf * ni58_pf; + Real z_p = he4_pf * fe55_pf; + + Real dz_r_dT = ni58_pf * dn_pf_dT + n_pf * dni58_pf_dT; + Real dz_p_dT = fe55_pf * dhe4_pf_dT + he4_pf * dfe55_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_fe56_to_n_co56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // fe56 + p --> n + co56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 22.65112457733622 + -62.065024496438 * tfactors.T9i + -1.13331 * tfactors.T913 + + 0.347185 * tfactors.T9 + -0.0328879 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 62.065024496438 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.13331 * tfactors.T923i + + 0.347185 + (5.0/3.0) * -0.0328879 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real fe56_pf, dfe56_pf_dT; + // interpolating fe56 partition function + get_partition_function(Fe56, tfactors, fe56_pf, dfe56_pf_dT); + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = n_pf * co56_pf; + Real z_p = p_pf * fe56_pf; + + Real dz_r_dT = co56_pf * dn_pf_dT + n_pf * dco56_pf_dT; + Real dz_p_dT = fe56_pf * dp_pf_dT + p_pf * dfe56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co56_to_n_ni56_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + p --> n + ni56 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 13.37207542266378 + -33.86221596961605 * tfactors.T9i + 1.76846 * tfactors.T913 + + 0.197992 * tfactors.T9 + -0.017494 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 33.86221596961605 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 1.76846 * tfactors.T923i + + 0.197992 + (5.0/3.0) * -0.017494 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni56_pf, dni56_pf_dT; + // interpolating ni56 partition function + get_partition_function(Ni56, tfactors, ni56_pf, dni56_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = n_pf * ni56_pf; + Real z_p = p_pf * co56_pf; + + Real dz_r_dT = ni56_pf * dn_pf_dT + n_pf * dni56_pf_dT; + Real dz_p_dT = co56_pf * dp_pf_dT + p_pf * dco56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co56_to_he4_fe53_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + p --> he4 + fe53 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 56.04732165968897 + -2.6687374505303194 * tfactors.T9i + -91.7231 * tfactors.T913i + 10.052 * tfactors.T913 + + -3.86332 * tfactors.T9 + 0.391105 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 2.6687374505303194 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -91.7231 * tfactors.T943i + (1.0/3.0) * 10.052 * tfactors.T923i + + -3.86332 + (5.0/3.0) * 0.391105 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real fe53_pf, dfe53_pf_dT; + // interpolating fe53 partition function + get_partition_function(Fe53, tfactors, fe53_pf, dfe53_pf_dT); + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = he4_pf * fe53_pf; + Real z_p = p_pf * co56_pf; + + Real dz_r_dT = fe53_pf * dhe4_pf_dT + he4_pf * dfe53_pf_dT; + Real dz_p_dT = co56_pf * dp_pf_dT + p_pf * dco56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_co56_to_n_cu59_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co56 + he4 --> n + cu59 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 8.891854052419635 + -61.835022947265 * tfactors.T9i + -1.00882 * tfactors.T913 + + 1.88993 * tfactors.T9 + -0.202319 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 61.835022947265 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.00882 * tfactors.T923i + + 1.88993 + (5.0/3.0) * -0.202319 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real cu59_pf, dcu59_pf_dT; + // interpolating cu59 partition function + get_partition_function(Cu59, tfactors, cu59_pf, dcu59_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co56_pf, dco56_pf_dT; + // interpolating co56 partition function + get_partition_function(Co56, tfactors, co56_pf, dco56_pf_dT); + + Real z_r = n_pf * cu59_pf; + Real z_p = he4_pf * co56_pf; + + Real dz_r_dT = cu59_pf * dn_pf_dT + n_pf * dcu59_pf_dT; + Real dz_p_dT = co56_pf * dhe4_pf_dT + he4_pf * dco56_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_co57_to_n_ni57_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // co57 + p --> n + ni57 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 19.300752819440056 + -46.935401904849755 * tfactors.T9i + -1.13177 * tfactors.T913 + + 0.56875 * tfactors.T9 + -0.0579913 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 46.935401904849755 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * -1.13177 * tfactors.T923i + + 0.56875 + (5.0/3.0) * -0.0579913 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real co57_pf, dco57_pf_dT; + // interpolating co57 partition function + get_partition_function(Co57, tfactors, co57_pf, dco57_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real z_r = n_pf * ni57_pf; + Real z_p = p_pf * co57_pf; + + Real dz_r_dT = ni57_pf * dn_pf_dT + n_pf * dni57_pf_dT; + Real dz_p_dT = co57_pf * dp_pf_dT + p_pf * dco57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ni57_to_n_zn60_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni57 + he4 --> n + zn60 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 9.728451219341542 + -87.50502934883477 * tfactors.T9i + 5.43552 * tfactors.T913 + + -1.25169 * tfactors.T9 + 0.148383 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 87.50502934883477 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.43552 * tfactors.T923i + + -1.25169 + (5.0/3.0) * 0.148383 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real n_pf, dn_pf_dT; + // setting n partition function to 1.0 by default, independent of T + n_pf = 1.0_rt; + dn_pf_dT = 0.0_rt; + + Real ni57_pf, dni57_pf_dT; + // interpolating ni57 partition function + get_partition_function(Ni57, tfactors, ni57_pf, dni57_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real zn60_pf, dzn60_pf_dT; + // interpolating zn60 partition function + get_partition_function(Zn60, tfactors, zn60_pf, dzn60_pf_dT); + + Real z_r = n_pf * zn60_pf; + Real z_p = he4_pf * ni57_pf; + + Real dz_r_dT = zn60_pf * dn_pf_dT + n_pf * dzn60_pf_dT; + Real dz_p_dT = ni57_pf * dhe4_pf_dT + he4_pf * dni57_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_ni58_to_he4_co55_derived(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ni58 + p --> he4 + co55 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 63.614171164828804 + -15.504564572101842 * tfactors.T9i + -94.1404 * tfactors.T913i + 3.39179 * tfactors.T913 + + -1.71062 * tfactors.T9 + 0.133003 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 15.504564572101842 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -94.1404 * tfactors.T943i + (1.0/3.0) * 3.39179 * tfactors.T923i + + -1.71062 + (5.0/3.0) * 0.133003 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real co55_pf, dco55_pf_dT; + // interpolating co55 partition function + get_partition_function(Co55, tfactors, co55_pf, dco55_pf_dT); + + Real ni58_pf, dni58_pf_dT; + // interpolating ni58 partition function + get_partition_function(Ni58, tfactors, ni58_pf, dni58_pf_dT); + + Real z_r = he4_pf * co55_pf; + Real z_p = p_pf * ni58_pf; + + Real dz_r_dT = co55_pf * dhe4_pf_dT + he4_pf * dco55_pf_dT; + Real dz_p_dT = ni58_pf * dp_pf_dT + p_pf * dni58_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_s32_to_p_cl35_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // s32 + he4 --> p + cl35 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 2.425628238034531 + -27.66622776398283 * tfactors.T9i + 5.33756 * tfactors.T913 + + 1.64418 * tfactors.T9 + -0.246167 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 27.66622776398283 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 5.33756 * tfactors.T923i + + 1.64418 + (5.0/3.0) * -0.246167 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = -0.877601761965469 + -25.59141776398283 * tfactors.T9i + + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 25.59141776398283 * tfactors.T9i * tfactors.T9i + + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = -57.39498176196547 + -22.18939876398283 * tfactors.T9i + 25.5338 * tfactors.T913 + + 6.45824 * tfactors.T9 + -0.950294 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 22.18939876398283 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 25.5338 * tfactors.T923i + + 6.45824 + (5.0/3.0) * -0.950294 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 32.25441823803453 + -21.65646776398283 * tfactors.T9i + -30.9147 * tfactors.T913i + -1.2345 * tfactors.T913 + + 22.5118 * tfactors.T9 + -33.0589 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 21.65646776398283 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -30.9147 * tfactors.T943i + (1.0/3.0) * -1.2345 * tfactors.T923i + + 22.5118 + (5.0/3.0) * -33.0589 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real cl35_pf, dcl35_pf_dT; + // interpolating cl35 partition function + get_partition_function(Cl35, tfactors, cl35_pf, dcl35_pf_dT); + + Real s32_pf, ds32_pf_dT; + // interpolating s32 partition function + get_partition_function(S32, tfactors, s32_pf, ds32_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real z_r = p_pf * cl35_pf; + Real z_p = he4_pf * s32_pf; + + Real dz_r_dT = cl35_pf * dp_pf_dT + p_pf * dcl35_pf_dT; + Real dz_p_dT = s32_pf * dhe4_pf_dT + he4_pf * ds32_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ar36_to_he4_s32_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ar36 --> he4 + s32 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 73.81637663285039 + -77.06281976216322 * tfactors.T9i + -65.3709 * tfactors.T913i + 5.68294 * tfactors.T913 + + -5.00388 * tfactors.T9 + 0.571407 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 77.06281976216322 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -65.3709 * tfactors.T943i + (1.0/3.0) * 5.68294 * tfactors.T923i + + -5.00388 + (5.0/3.0) * 0.571407 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real s32_pf, ds32_pf_dT; + // interpolating s32 partition function + get_partition_function(S32, tfactors, s32_pf, ds32_pf_dT); + + Real ar36_pf, dar36_pf_dT; + // interpolating ar36 partition function + get_partition_function(Ar36, tfactors, ar36_pf, dar36_pf_dT); + + Real z_r = he4_pf * s32_pf; + Real z_p = ar36_pf; + + Real dz_r_dT = s32_pf * dhe4_pf_dT + he4_pf * ds32_pf_dT; + Real dz_p_dT = dar36_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ar36_to_p_cl35_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ar36 --> p + cl35 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // il10c + ln_set_rate = 16.01685487088493 + -100.72924752614605 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 100.72924752614605 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = -17.47510512911507 + -99.28393852614604 * tfactors.T9i; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 99.28393852614604 * tfactors.T9i * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // il10c + ln_set_rate = 60.73659487088493 + -98.71928752614605 * tfactors.T9i + -27.8971 * tfactors.T913i + -16.2304 * tfactors.T913 + + 35.255 * tfactors.T9 + -25.8411 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 98.71928752614605 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -27.8971 * tfactors.T943i + (1.0/3.0) * -16.2304 * tfactors.T923i + + 35.255 + (5.0/3.0) * -25.8411 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // il10c + ln_set_rate = 17.202804870884933 + -102.37020752614605 * tfactors.T9i + 18.0179 * tfactors.T913 + + -2.86304 * tfactors.T9 + 0.250854 * tfactors.T953; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 102.37020752614605 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 18.0179 * tfactors.T923i + + -2.86304 + (5.0/3.0) * 0.250854 * tfactors.T923; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real cl35_pf, dcl35_pf_dT; + // interpolating cl35 partition function + get_partition_function(Cl35, tfactors, cl35_pf, dcl35_pf_dT); + + Real ar36_pf, dar36_pf_dT; + // interpolating ar36 partition function + get_partition_function(Ar36, tfactors, ar36_pf, dar36_pf_dT); + + Real z_r = p_pf * cl35_pf; + Real z_p = ar36_pf; + + Real dz_r_dT = cl35_pf * dp_pf_dT + p_pf * dcl35_pf_dT; + Real dz_p_dT = dar36_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ar36_to_p_k39_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ar36 + he4 --> p + k39 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 20.636664061510302 + -14.953349961318928 * tfactors.T9i + -30.0732 * tfactors.T913i + 7.03263 * tfactors.T913 + + -1.10085 * tfactors.T9 + 0.133768 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 14.953349961318928 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -30.0732 * tfactors.T943i + (1.0/3.0) * 7.03263 * tfactors.T923i + + -1.10085 + (5.0/3.0) * 0.133768 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real k39_pf, dk39_pf_dT; + // interpolating k39 partition function + get_partition_function(K39, tfactors, k39_pf, dk39_pf_dT); + + Real ar36_pf, dar36_pf_dT; + // interpolating ar36 partition function + get_partition_function(Ar36, tfactors, ar36_pf, dar36_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real z_r = p_pf * k39_pf; + Real z_p = he4_pf * ar36_pf; + + Real dz_r_dT = k39_pf * dp_pf_dT + p_pf * dk39_pf_dT; + Real dz_p_dT = ar36_pf * dhe4_pf_dT + he4_pf * dar36_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ca40_to_he4_ar36_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ca40 --> he4 + ar36 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 77.28261041284823 + -81.69174599574632 * tfactors.T9i + -71.0046 * tfactors.T913i + 4.0656 * tfactors.T913 + + -5.26509 * tfactors.T9 + 0.683546 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 81.69174599574632 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -71.0046 * tfactors.T943i + (1.0/3.0) * 4.0656 * tfactors.T923i + + -5.26509 + (5.0/3.0) * 0.683546 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ca40_pf, dca40_pf_dT; + // interpolating ca40 partition function + get_partition_function(Ca40, tfactors, ca40_pf, dca40_pf_dT); + + Real ar36_pf, dar36_pf_dT; + // interpolating ar36 partition function + get_partition_function(Ar36, tfactors, ar36_pf, dar36_pf_dT); + + Real z_r = he4_pf * ar36_pf; + Real z_p = ca40_pf; + + Real dz_r_dT = ar36_pf * dhe4_pf_dT + he4_pf * dar36_pf_dT; + Real dz_p_dT = dca40_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ca40_to_p_k39_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ca40 --> p + k39 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // lo18r + ln_set_rate = 2786.4340744743586 + -101.86662364079672 * tfactors.T9i + 802.18 * tfactors.T913i + -4010.27 * tfactors.T913 + + 1137.69 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 101.86662364079672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 802.18 * tfactors.T943i + (1.0/3.0) * -4010.27 * tfactors.T923i + + 1137.69 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // lo18r + ln_set_rate = 613.1530744743586 + -109.20898364079672 * tfactors.T9i + 641.844 * tfactors.T913i + -1248.49 * tfactors.T913 + + 566.426 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 109.20898364079672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 641.844 * tfactors.T943i + (1.0/3.0) * -1248.49 * tfactors.T923i + + 566.426 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.e-100] + ln_set_rate = std::max(ln_set_rate, -230.0); + set_rate = std::exp(ln_set_rate); + rate += set_rate; + if constexpr (do_T_derivatives) { + drate_dT += set_rate * dln_set_rate_dT9 / 1.0e9; + } + + // lo18r + ln_set_rate = 127.30607447435852 + -98.30936364079672 * tfactors.T9i + 41.1723 * tfactors.T913i + -149.299 * tfactors.T913 + + 10.5229 * tfactors.T9 + -0.68208 * tfactors.T953 + 60.7367 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 98.30936364079672 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 41.1723 * tfactors.T943i + (1.0/3.0) * -149.299 * tfactors.T923i + + 10.5229 + (5.0/3.0) * -0.68208 * tfactors.T923 + 60.7367 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ca40_pf, dca40_pf_dT; + // interpolating ca40 partition function + get_partition_function(Ca40, tfactors, ca40_pf, dca40_pf_dT); + + Real k39_pf, dk39_pf_dT; + // interpolating k39 partition function + get_partition_function(K39, tfactors, k39_pf, dk39_pf_dT); + + Real z_r = p_pf * k39_pf; + Real z_p = ca40_pf; + + Real dz_r_dT = k39_pf * dp_pf_dT + p_pf * dk39_pf_dT; + Real dz_p_dT = dca40_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_he4_ca40_to_p_sc43_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ca40 + he4 --> p + sc43 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 35.65752817292938 + -40.87575463203665 * tfactors.T9i + -32.1734 * tfactors.T913i + 0.0296879 * tfactors.T913 + + -0.95232 * tfactors.T9 + 0.129022 * tfactors.T953 + -0.666667 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 40.87575463203665 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * 0.0296879 * tfactors.T923i + + -0.95232 + (5.0/3.0) * 0.129022 * tfactors.T923 + -0.666667 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ca40_pf, dca40_pf_dT; + // interpolating ca40 partition function + get_partition_function(Ca40, tfactors, ca40_pf, dca40_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real sc43_pf, dsc43_pf_dT; + // interpolating sc43 partition function + get_partition_function(Sc43, tfactors, sc43_pf, dsc43_pf_dT); + + Real z_r = p_pf * sc43_pf; + Real z_p = he4_pf * ca40_pf; + + Real dz_r_dT = sc43_pf * dp_pf_dT + p_pf * dsc43_pf_dT; + Real dz_p_dT = ca40_pf * dhe4_pf_dT + he4_pf * dca40_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ti44_to_he4_ca40_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ti44 --> he4 + ca40 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // chw0 + ln_set_rate = 78.69908591662849 + -59.4975248620018 * tfactors.T9i + -76.4273 * tfactors.T913i + 3.87451 * tfactors.T913 + + -3.61477 * tfactors.T9 + 0.367451 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 59.4975248620018 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -76.4273 * tfactors.T943i + (1.0/3.0) * 3.87451 * tfactors.T923i + + -3.61477 + (5.0/3.0) * 0.367451 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ca40_pf, dca40_pf_dT; + // interpolating ca40 partition function + get_partition_function(Ca40, tfactors, ca40_pf, dca40_pf_dT); + + Real ti44_pf, dti44_pf_dT; + // interpolating ti44 partition function + get_partition_function(Ti44, tfactors, ti44_pf, dti44_pf_dT); + + Real z_r = he4_pf * ca40_pf; + Real z_p = ti44_pf; + + Real dz_r_dT = ca40_pf * dhe4_pf_dT + he4_pf * dca40_pf_dT; + Real dz_p_dT = dti44_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ti44_to_p_sc43_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // ti44 --> p + sc43 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 62.59391408955788 + -100.37327949403844 * tfactors.T9i + -32.1734 * tfactors.T913i + -1.77078 * tfactors.T913 + + -2.21706 * tfactors.T9 + 0.298499 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 100.37327949403844 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -32.1734 * tfactors.T943i + (1.0/3.0) * -1.77078 * tfactors.T923i + + -2.21706 + (5.0/3.0) * 0.298499 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real ti44_pf, dti44_pf_dT; + // interpolating ti44 partition function + get_partition_function(Ti44, tfactors, ti44_pf, dti44_pf_dT); + + Real sc43_pf, dsc43_pf_dT; + // interpolating sc43 partition function + get_partition_function(Sc43, tfactors, sc43_pf, dsc43_pf_dT); + + Real z_r = p_pf * sc43_pf; + Real z_p = ti44_pf; + + Real dz_r_dT = sc43_pf * dp_pf_dT + p_pf * dsc43_pf_dT; + Real dz_p_dT = dti44_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_cr48_to_he4_ti44_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cr48 --> he4 + ti44 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // ths8r + ln_set_rate = 89.75733412085052 + -89.3041938384302 * tfactors.T9i + -81.667 * tfactors.T913i + -10.6333 * tfactors.T913 + + -0.672613 * tfactors.T9 + 0.161209 * tfactors.T953 + 0.833333 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 89.3041938384302 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -81.667 * tfactors.T943i + (1.0/3.0) * -10.6333 * tfactors.T923i + + -0.672613 + (5.0/3.0) * 0.161209 * tfactors.T923 + 0.833333 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cr48_pf, dcr48_pf_dT; + // interpolating cr48 partition function + get_partition_function(Cr48, tfactors, cr48_pf, dcr48_pf_dT); + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real ti44_pf, dti44_pf_dT; + // interpolating ti44 partition function + get_partition_function(Ti44, tfactors, ti44_pf, dti44_pf_dT); + + Real z_r = he4_pf * ti44_pf; + Real z_p = cr48_pf; + + Real dz_r_dT = ti44_pf * dhe4_pf_dT + he4_pf * dti44_pf_dT; + Real dz_p_dT = dcr48_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_cr48_to_p_v47_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // cr48 --> p + v47 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // nfisn + ln_set_rate = 67.74027107253823 + -100.12633621113824 * tfactors.T9i + -34.0548 * tfactors.T913i + -3.41973 * tfactors.T913 + + 1.16501 * tfactors.T9 + -0.105543 * tfactors.T953 + -6.20886 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 100.12633621113824 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -34.0548 * tfactors.T943i + (1.0/3.0) * -3.41973 * tfactors.T923i + + 1.16501 + (5.0/3.0) * -0.105543 * tfactors.T923 + -6.20886 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 536.5234710725382 + -99.36194621113825 * tfactors.T9i + 317.171 * tfactors.T913i + -911.679 * tfactors.T913 + + 94.4245 * tfactors.T9 + -10.1973 * tfactors.T953 + 332.227 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 99.36194621113825 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * 317.171 * tfactors.T943i + (1.0/3.0) * -911.679 * tfactors.T923i + + 94.4245 + (5.0/3.0) * -10.1973 * tfactors.T923 + 332.227 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 48.891971072538226 + -93.82037121113825 * tfactors.T9i + -45.9868 * tfactors.T913i + 13.6822 * tfactors.T913 + + -0.376902 * tfactors.T9 + -0.0194875 * tfactors.T953 + -6.9232499999999995 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 93.82037121113825 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -45.9868 * tfactors.T943i + (1.0/3.0) * 13.6822 * tfactors.T923i + + -0.376902 + (5.0/3.0) * -0.0194875 * tfactors.T923 + -6.9232499999999995 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + // nfisn + ln_set_rate = 65.62307107253824 + -94.58145021113825 * tfactors.T9i + -110.655 * tfactors.T913i + 83.0232 * tfactors.T913 + + -19.7762 * tfactors.T9 + 3.03961 * tfactors.T953 + -47.9742 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 94.58145021113825 * tfactors.T9i * tfactors.T9i + -(1.0/3.0) * -110.655 * tfactors.T943i + (1.0/3.0) * 83.0232 * tfactors.T923i + + -19.7762 + (5.0/3.0) * 3.03961 * tfactors.T923 + -47.9742 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real cr48_pf, dcr48_pf_dT; + // interpolating cr48 partition function + get_partition_function(Cr48, tfactors, cr48_pf, dcr48_pf_dT); + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real v47_pf, dv47_pf_dT; + // interpolating v47 partition function + get_partition_function(V47, tfactors, v47_pf, dv47_pf_dT); + + Real z_r = p_pf * v47_pf; + Real z_p = cr48_pf; + + Real dz_r_dT = v47_pf * dp_pf_dT + p_pf * dv47_pf_dT; + Real dz_p_dT = dcr48_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_p_v47_to_he4_ti44_derived_removed(const tf_t& tfactors, Real& rate, Real& drate_dT) { + + // v47 + p --> he4 + ti44 + + rate = 0.0; + drate_dT = 0.0; + + Real ln_set_rate{0.0}; + Real dln_set_rate_dT9{0.0}; + Real set_rate{0.0}; + + // chw0r + ln_set_rate = -76.61433695168769 + -6.029445311023438 * tfactors.T9i + 70.2835 * tfactors.T913 + + -7.99061 * tfactors.T9 + 0.486213 * tfactors.T953 + -1.5 * tfactors.lnT9; + + if constexpr (do_T_derivatives) { + dln_set_rate_dT9 = 6.029445311023438 * tfactors.T9i * tfactors.T9i + (1.0/3.0) * 70.2835 * tfactors.T923i + + -7.99061 + (5.0/3.0) * 0.486213 * tfactors.T923 + -1.5 * tfactors.T9i; + } + + // avoid underflows by zeroing rates in [0.0, 1.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.0e9; + } + + + Real p_pf, dp_pf_dT; + // setting p partition function to 1.0 by default, independent of T + p_pf = 1.0_rt; + dp_pf_dT = 0.0_rt; + + Real he4_pf, dhe4_pf_dT; + // setting he4 partition function to 1.0 by default, independent of T + he4_pf = 1.0_rt; + dhe4_pf_dT = 0.0_rt; + + Real v47_pf, dv47_pf_dT; + // interpolating v47 partition function + get_partition_function(V47, tfactors, v47_pf, dv47_pf_dT); + + Real ti44_pf, dti44_pf_dT; + // interpolating ti44 partition function + get_partition_function(Ti44, tfactors, ti44_pf, dti44_pf_dT); + + Real z_r = he4_pf * ti44_pf; + Real z_p = p_pf * v47_pf; + + Real dz_r_dT = ti44_pf * dhe4_pf_dT + he4_pf * dti44_pf_dT; + Real dz_p_dT = v47_pf * dp_pf_dT + p_pf * dv47_pf_dT; + + Real dzterm_dT = (z_p * dz_r_dT - z_r * dz_p_dT) / (z_p * z_p); + + drate_dT = dzterm_dT * rate + drate_dT * (z_r / z_p); + rate *= z_r/z_p; + +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_s32_he4_to_ar36_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ag = rate_eval.screened_rates(k_he4_s32_to_ar36_removed); + Real r_ap = rate_eval.screened_rates(k_he4_s32_to_p_cl35_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_cl35_to_ar36_removed); + Real r_pa = rate_eval.screened_rates(k_p_cl35_to_he4_s32_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ag + r_ap * r_pg * dd; + if constexpr (std::is_same::value) { + Real drdT_ag = rate_eval.dscreened_rates_dT(k_he4_s32_to_ar36_removed); + Real drdT_ap = rate_eval.dscreened_rates_dT(k_he4_s32_to_p_cl35_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_cl35_to_ar36_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_cl35_to_he4_s32_removed); + drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ar36_to_s32_he4_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ga = rate_eval.screened_rates(k_ar36_to_he4_s32_derived_removed); + Real r_pa = rate_eval.screened_rates(k_p_cl35_to_he4_s32_removed); + Real r_gp = rate_eval.screened_rates(k_ar36_to_p_cl35_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_cl35_to_ar36_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ga + r_gp * r_pa * dd; + if constexpr (std::is_same::value) { + Real drdT_ga = rate_eval.dscreened_rates_dT(k_ar36_to_he4_s32_derived_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_cl35_to_he4_s32_removed); + Real drdT_gp = rate_eval.dscreened_rates_dT(k_ar36_to_p_cl35_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_cl35_to_ar36_removed); + drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ar36_he4_to_ca40_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ag = rate_eval.screened_rates(k_he4_ar36_to_ca40_removed); + Real r_ap = rate_eval.screened_rates(k_he4_ar36_to_p_k39_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_k39_to_ca40_removed); + Real r_pa = rate_eval.screened_rates(k_p_k39_to_he4_ar36_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ag + r_ap * r_pg * dd; + if constexpr (std::is_same::value) { + Real drdT_ag = rate_eval.dscreened_rates_dT(k_he4_ar36_to_ca40_removed); + Real drdT_ap = rate_eval.dscreened_rates_dT(k_he4_ar36_to_p_k39_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_k39_to_ca40_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_k39_to_he4_ar36_removed); + drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ca40_to_ar36_he4_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ga = rate_eval.screened_rates(k_ca40_to_he4_ar36_derived_removed); + Real r_pa = rate_eval.screened_rates(k_p_k39_to_he4_ar36_removed); + Real r_gp = rate_eval.screened_rates(k_ca40_to_p_k39_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_k39_to_ca40_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ga + r_gp * r_pa * dd; + if constexpr (std::is_same::value) { + Real drdT_ga = rate_eval.dscreened_rates_dT(k_ca40_to_he4_ar36_derived_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_k39_to_he4_ar36_removed); + Real drdT_gp = rate_eval.dscreened_rates_dT(k_ca40_to_p_k39_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_k39_to_ca40_removed); + drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ca40_he4_to_ti44_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ag = rate_eval.screened_rates(k_he4_ca40_to_ti44_removed); + Real r_ap = rate_eval.screened_rates(k_he4_ca40_to_p_sc43_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_sc43_to_ti44_removed); + Real r_pa = rate_eval.screened_rates(k_p_sc43_to_he4_ca40_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ag + r_ap * r_pg * dd; + if constexpr (std::is_same::value) { + Real drdT_ag = rate_eval.dscreened_rates_dT(k_he4_ca40_to_ti44_removed); + Real drdT_ap = rate_eval.dscreened_rates_dT(k_he4_ca40_to_p_sc43_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_sc43_to_ti44_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_sc43_to_he4_ca40_removed); + drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ti44_to_ca40_he4_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ga = rate_eval.screened_rates(k_ti44_to_he4_ca40_derived_removed); + Real r_pa = rate_eval.screened_rates(k_p_sc43_to_he4_ca40_removed); + Real r_gp = rate_eval.screened_rates(k_ti44_to_p_sc43_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_sc43_to_ti44_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ga + r_gp * r_pa * dd; + if constexpr (std::is_same::value) { + Real drdT_ga = rate_eval.dscreened_rates_dT(k_ti44_to_he4_ca40_derived_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_sc43_to_he4_ca40_removed); + Real drdT_gp = rate_eval.dscreened_rates_dT(k_ti44_to_p_sc43_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_sc43_to_ti44_removed); + drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_ti44_he4_to_cr48_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ag = rate_eval.screened_rates(k_he4_ti44_to_cr48_removed); + Real r_ap = rate_eval.screened_rates(k_he4_ti44_to_p_v47_removed); + Real r_pg = rate_eval.screened_rates(k_p_v47_to_cr48_removed); + Real r_pa = rate_eval.screened_rates(k_p_v47_to_he4_ti44_derived_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ag + r_ap * r_pg * dd; + if constexpr (std::is_same::value) { + Real drdT_ag = rate_eval.dscreened_rates_dT(k_he4_ti44_to_cr48_removed); + Real drdT_ap = rate_eval.dscreened_rates_dT(k_he4_ti44_to_p_v47_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_v47_to_cr48_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_v47_to_he4_ti44_derived_removed); + drate_dT = drdT_ag + drdT_ap * r_pg * dd + r_ap * drdT_pg * dd - r_ap * r_pg * dd * dd * (drdT_pg + drdT_pa); + } +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void rate_cr48_to_ti44_he4_approx(const T& rate_eval, Real& rate, Real& drate_dT) { + + Real r_ga = rate_eval.screened_rates(k_cr48_to_he4_ti44_derived_removed); + Real r_pa = rate_eval.screened_rates(k_p_v47_to_he4_ti44_derived_removed); + Real r_gp = rate_eval.screened_rates(k_cr48_to_p_v47_derived_removed); + Real r_pg = rate_eval.screened_rates(k_p_v47_to_cr48_removed); + Real dd = 1.0_rt / (r_pg + r_pa); + rate = r_ga + r_gp * r_pa * dd; + if constexpr (std::is_same::value) { + Real drdT_ga = rate_eval.dscreened_rates_dT(k_cr48_to_he4_ti44_derived_removed); + Real drdT_pa = rate_eval.dscreened_rates_dT(k_p_v47_to_he4_ti44_derived_removed); + Real drdT_gp = rate_eval.dscreened_rates_dT(k_cr48_to_p_v47_derived_removed); + Real drdT_pg = rate_eval.dscreened_rates_dT(k_p_v47_to_cr48_removed); + drate_dT = drdT_ga + drdT_gp * r_pa * dd + r_gp * drdT_pa * dd - r_gp * r_pa * dd * dd * (drdT_pg + drdT_pa); + } +} + + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void +fill_reaclib_rates(const tf_t& tfactors, T& rate_eval) +{ + + Real rate; + Real drate_dT; + + rate_p_c12_to_n13(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_c12_to_n13) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_c12_to_n13) = drate_dT; + + } + rate_he4_c12_to_o16(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_c12_to_o16) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_c12_to_o16) = drate_dT; + + } + rate_he4_n14_to_f18(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_n14_to_f18) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_n14_to_f18) = drate_dT; + + } + rate_he4_o16_to_ne20(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_o16_to_ne20) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_o16_to_ne20) = drate_dT; + + } + rate_he4_f18_to_na22(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_f18_to_na22) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_f18_to_na22) = drate_dT; + + } + rate_he4_ne20_to_mg24(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ne20_to_mg24) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ne20_to_mg24) = drate_dT; + + } + rate_p_ne21_to_na22(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_ne21_to_na22) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_ne21_to_na22) = drate_dT; + + } + rate_p_na23_to_mg24(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_na23_to_mg24) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_na23_to_mg24) = drate_dT; + + } + rate_he4_mg24_to_si28(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_mg24_to_si28) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_mg24_to_si28) = drate_dT; + + } + rate_p_al27_to_si28(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_al27_to_si28) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_al27_to_si28) = drate_dT; + + } + rate_he4_si28_to_s32(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_si28_to_s32) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_si28_to_s32) = drate_dT; + + } + rate_p_p31_to_s32(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_p31_to_s32) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_p31_to_s32) = drate_dT; + + } + rate_he4_cr48_to_fe52(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_cr48_to_fe52) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_cr48_to_fe52) = drate_dT; + + } + rate_p_mn51_to_fe52(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_mn51_to_fe52) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_mn51_to_fe52) = drate_dT; + + } + rate_he4_mn51_to_co55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_mn51_to_co55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_mn51_to_co55) = drate_dT; + + } + rate_he4_fe52_to_ni56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe52_to_ni56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe52_to_ni56) = drate_dT; + + } + rate_p_co55_to_ni56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co55_to_ni56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co55_to_ni56) = drate_dT; + + } + rate_he4_co55_to_cu59(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_co55_to_cu59) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_co55_to_cu59) = drate_dT; + + } + rate_he4_ni56_to_zn60(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ni56_to_zn60) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ni56_to_zn60) = drate_dT; + + } + rate_p_cu59_to_zn60(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_cu59_to_zn60) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_cu59_to_zn60) = drate_dT; + + } + rate_c12_c12_to_p_na23(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_c12_to_p_na23) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_c12_to_p_na23) = drate_dT; + + } + rate_c12_c12_to_he4_ne20(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_c12_to_he4_ne20) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_c12_to_he4_ne20) = drate_dT; + + } + rate_he4_n13_to_p_o16(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_n13_to_p_o16) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_n13_to_p_o16) = drate_dT; + + } + rate_c12_o16_to_p_al27(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_o16_to_p_al27) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_o16_to_p_al27) = drate_dT; + + } + rate_c12_o16_to_he4_mg24(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_o16_to_he4_mg24) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_o16_to_he4_mg24) = drate_dT; + + } + rate_o16_o16_to_p_p31(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_o16_o16_to_p_p31) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_o16_o16_to_p_p31) = drate_dT; + + } + rate_o16_o16_to_he4_si28(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_o16_o16_to_he4_si28) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_o16_o16_to_he4_si28) = drate_dT; + + } + rate_he4_f18_to_p_ne21(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_f18_to_p_ne21) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_f18_to_p_ne21) = drate_dT; + + } + rate_p_na23_to_he4_ne20(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_na23_to_he4_ne20) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_na23_to_he4_ne20) = drate_dT; + + } + rate_p_al27_to_he4_mg24(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_al27_to_he4_mg24) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_al27_to_he4_mg24) = drate_dT; + + } + rate_p_p31_to_he4_si28(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_p31_to_he4_si28) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_p31_to_he4_si28) = drate_dT; + + } + rate_he4_cr48_to_p_mn51(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_cr48_to_p_mn51) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_cr48_to_p_mn51) = drate_dT; + + } + rate_he4_fe52_to_p_co55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe52_to_p_co55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe52_to_p_co55) = drate_dT; + + } + rate_p_cu59_to_he4_ni56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_cu59_to_he4_ni56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_cu59_to_he4_ni56) = drate_dT; + + } + rate_he4_he4_he4_to_c12(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_he4_he4_to_c12) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_he4_he4_to_c12) = drate_dT; + + } + rate_c12_c12_to_mg24_modified(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_c12_to_mg24_modified) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_c12_to_mg24_modified) = drate_dT; + + } + rate_o16_o16_to_s32_modified(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_o16_o16_to_s32_modified) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_o16_o16_to_s32_modified) = drate_dT; + + } + rate_c12_o16_to_si28_modified(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_o16_to_si28_modified) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_o16_to_si28_modified) = drate_dT; + + } + rate_n_to_p_weak_wc12(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_to_p_weak_wc12) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_to_p_weak_wc12) = drate_dT; + + } + rate_p_mn55_to_fe56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_mn55_to_fe56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_mn55_to_fe56) = drate_dT; + + } + rate_n_fe52_to_fe53(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_fe52_to_fe53) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_fe52_to_fe53) = drate_dT; + + } + rate_n_fe53_to_fe54(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_fe53_to_fe54) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_fe53_to_fe54) = drate_dT; + + } + rate_he4_fe53_to_ni57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe53_to_ni57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe53_to_ni57) = drate_dT; + + } + rate_n_fe54_to_fe55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_fe54_to_fe55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_fe54_to_fe55) = drate_dT; + + } + rate_p_fe54_to_co55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe54_to_co55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe54_to_co55) = drate_dT; + + } + rate_he4_fe54_to_ni58(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe54_to_ni58) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe54_to_ni58) = drate_dT; + + } + rate_n_fe55_to_fe56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_fe55_to_fe56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_fe55_to_fe56) = drate_dT; + + } + rate_p_fe55_to_co56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe55_to_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe55_to_co56) = drate_dT; + + } + rate_p_fe56_to_co57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe56_to_co57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe56_to_co57) = drate_dT; + + } + rate_n_co55_to_co56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_co55_to_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_co55_to_co56) = drate_dT; + + } + rate_n_co56_to_co57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_co56_to_co57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_co56_to_co57) = drate_dT; + + } + rate_p_co56_to_ni57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co56_to_ni57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co56_to_ni57) = drate_dT; + + } + rate_p_co57_to_ni58(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co57_to_ni58) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co57_to_ni58) = drate_dT; + + } + rate_n_ni56_to_ni57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni56_to_ni57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni56_to_ni57) = drate_dT; + + } + rate_n_ni57_to_ni58(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni57_to_ni58) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni57_to_ni58) = drate_dT; + + } + rate_p_ni58_to_cu59(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_ni58_to_cu59) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_ni58_to_cu59) = drate_dT; + + } + rate_he4_mn51_to_p_fe54(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_mn51_to_p_fe54) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_mn51_to_p_fe54) = drate_dT; + + } + rate_he4_fe53_to_p_co56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe53_to_p_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe53_to_p_co56) = drate_dT; + + } + rate_n_fe55_to_p_mn55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_fe55_to_p_mn55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_fe55_to_p_mn55) = drate_dT; + + } + rate_n_co55_to_p_fe55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_co55_to_p_fe55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_co55_to_p_fe55) = drate_dT; + + } + rate_he4_co55_to_p_ni58(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_co55_to_p_ni58) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_co55_to_p_ni58) = drate_dT; + + } + rate_n_co56_to_p_fe56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_co56_to_p_fe56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_co56_to_p_fe56) = drate_dT; + + } + rate_p_co57_to_he4_fe54(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co57_to_he4_fe54) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co57_to_he4_fe54) = drate_dT; + + } + rate_n_ni56_to_p_co56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni56_to_p_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni56_to_p_co56) = drate_dT; + + } + rate_n_ni56_to_he4_fe53(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni56_to_he4_fe53) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni56_to_he4_fe53) = drate_dT; + + } + rate_n_ni57_to_p_co57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni57_to_p_co57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni57_to_p_co57) = drate_dT; + + } + rate_n_ni57_to_he4_fe54(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni57_to_he4_fe54) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni57_to_he4_fe54) = drate_dT; + + } + rate_n_ni58_to_he4_fe55(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_ni58_to_he4_fe55) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_ni58_to_he4_fe55) = drate_dT; + + } + rate_n_cu59_to_he4_co56(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_cu59_to_he4_co56) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_cu59_to_he4_co56) = drate_dT; + + } + rate_n_zn60_to_he4_ni57(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n_zn60_to_he4_ni57) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n_zn60_to_he4_ni57) = drate_dT; + + } + rate_he4_s32_to_ar36_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_s32_to_ar36_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_s32_to_ar36_removed) = drate_dT; + + } + rate_p_cl35_to_ar36_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_cl35_to_ar36_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_cl35_to_ar36_removed) = drate_dT; + + } + rate_p_cl35_to_he4_s32_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_cl35_to_he4_s32_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_cl35_to_he4_s32_removed) = drate_dT; + + } + rate_he4_ar36_to_ca40_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ar36_to_ca40_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ar36_to_ca40_removed) = drate_dT; + + } + rate_p_k39_to_ca40_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_k39_to_ca40_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_k39_to_ca40_removed) = drate_dT; + + } + rate_p_k39_to_he4_ar36_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_k39_to_he4_ar36_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_k39_to_he4_ar36_removed) = drate_dT; + + } + rate_he4_ca40_to_ti44_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ca40_to_ti44_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ca40_to_ti44_removed) = drate_dT; + + } + rate_p_sc43_to_ti44_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_sc43_to_ti44_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_sc43_to_ti44_removed) = drate_dT; + + } + rate_p_sc43_to_he4_ca40_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_sc43_to_he4_ca40_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_sc43_to_he4_ca40_removed) = drate_dT; + + } + rate_he4_ti44_to_cr48_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ti44_to_cr48_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ti44_to_cr48_removed) = drate_dT; + + } + rate_he4_ti44_to_p_v47_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ti44_to_p_v47_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ti44_to_p_v47_removed) = drate_dT; + + } + rate_p_v47_to_cr48_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_v47_to_cr48_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_v47_to_cr48_removed) = drate_dT; + + } + rate_n13_to_p_c12_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_n13_to_p_c12_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_n13_to_p_c12_derived) = drate_dT; + + } + rate_o16_to_he4_c12_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_o16_to_he4_c12_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_o16_to_he4_c12_derived) = drate_dT; + + } + rate_f18_to_he4_n14_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_f18_to_he4_n14_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_f18_to_he4_n14_derived) = drate_dT; + + } + rate_ne20_to_he4_o16_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ne20_to_he4_o16_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ne20_to_he4_o16_derived) = drate_dT; + + } + rate_na22_to_p_ne21_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_na22_to_p_ne21_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_na22_to_p_ne21_derived) = drate_dT; + + } + rate_na22_to_he4_f18_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_na22_to_he4_f18_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_na22_to_he4_f18_derived) = drate_dT; + + } + rate_mg24_to_p_na23_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_mg24_to_p_na23_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_mg24_to_p_na23_derived) = drate_dT; + + } + rate_mg24_to_he4_ne20_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_mg24_to_he4_ne20_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_mg24_to_he4_ne20_derived) = drate_dT; + + } + rate_si28_to_p_al27_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_si28_to_p_al27_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_si28_to_p_al27_derived) = drate_dT; + + } + rate_si28_to_he4_mg24_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_si28_to_he4_mg24_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_si28_to_he4_mg24_derived) = drate_dT; + + } + rate_s32_to_p_p31_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_s32_to_p_p31_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_s32_to_p_p31_derived) = drate_dT; + + } + rate_s32_to_he4_si28_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_s32_to_he4_si28_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_s32_to_he4_si28_derived) = drate_dT; + + } + rate_fe52_to_p_mn51_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe52_to_p_mn51_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe52_to_p_mn51_derived) = drate_dT; + + } + rate_fe52_to_he4_cr48_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe52_to_he4_cr48_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe52_to_he4_cr48_derived) = drate_dT; + + } + rate_co55_to_he4_mn51_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co55_to_he4_mn51_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co55_to_he4_mn51_derived) = drate_dT; + + } + rate_ni56_to_p_co55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni56_to_p_co55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni56_to_p_co55_derived) = drate_dT; + + } + rate_ni56_to_he4_fe52_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni56_to_he4_fe52_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni56_to_he4_fe52_derived) = drate_dT; + + } + rate_cu59_to_he4_co55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_cu59_to_he4_co55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_cu59_to_he4_co55_derived) = drate_dT; + + } + rate_zn60_to_p_cu59_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_zn60_to_p_cu59_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_zn60_to_p_cu59_derived) = drate_dT; + + } + rate_zn60_to_he4_ni56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_zn60_to_he4_ni56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_zn60_to_he4_ni56_derived) = drate_dT; + + } + rate_c12_to_he4_he4_he4_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_c12_to_he4_he4_he4_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_c12_to_he4_he4_he4_derived) = drate_dT; + + } + rate_p_o16_to_he4_n13_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_o16_to_he4_n13_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_o16_to_he4_n13_derived) = drate_dT; + + } + rate_he4_ne20_to_p_na23_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ne20_to_p_na23_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ne20_to_p_na23_derived) = drate_dT; + + } + rate_p_ne21_to_he4_f18_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_ne21_to_he4_f18_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_ne21_to_he4_f18_derived) = drate_dT; + + } + rate_he4_mg24_to_p_al27_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_mg24_to_p_al27_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_mg24_to_p_al27_derived) = drate_dT; + + } + rate_he4_si28_to_p_p31_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_si28_to_p_p31_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_si28_to_p_p31_derived) = drate_dT; + + } + rate_p_mn51_to_he4_cr48_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_mn51_to_he4_cr48_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_mn51_to_he4_cr48_derived) = drate_dT; + + } + rate_p_co55_to_he4_fe52_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co55_to_he4_fe52_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co55_to_he4_fe52_derived) = drate_dT; + + } + rate_he4_ni56_to_p_cu59_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ni56_to_p_cu59_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ni56_to_p_cu59_derived) = drate_dT; + + } + rate_fe53_to_n_fe52_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe53_to_n_fe52_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe53_to_n_fe52_derived) = drate_dT; + + } + rate_fe54_to_n_fe53_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe54_to_n_fe53_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe54_to_n_fe53_derived) = drate_dT; + + } + rate_fe55_to_n_fe54_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe55_to_n_fe54_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe55_to_n_fe54_derived) = drate_dT; + + } + rate_fe56_to_n_fe55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe56_to_n_fe55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe56_to_n_fe55_derived) = drate_dT; + + } + rate_fe56_to_p_mn55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_fe56_to_p_mn55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_fe56_to_p_mn55_derived) = drate_dT; + + } + rate_co55_to_p_fe54_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co55_to_p_fe54_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co55_to_p_fe54_derived) = drate_dT; + + } + rate_co56_to_n_co55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co56_to_n_co55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co56_to_n_co55_derived) = drate_dT; + + } + rate_co56_to_p_fe55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co56_to_p_fe55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co56_to_p_fe55_derived) = drate_dT; + + } + rate_co57_to_n_co56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co57_to_n_co56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co57_to_n_co56_derived) = drate_dT; + + } + rate_co57_to_p_fe56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_co57_to_p_fe56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_co57_to_p_fe56_derived) = drate_dT; + + } + rate_ni57_to_n_ni56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni57_to_n_ni56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni57_to_n_ni56_derived) = drate_dT; + + } + rate_ni57_to_p_co56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni57_to_p_co56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni57_to_p_co56_derived) = drate_dT; + + } + rate_ni57_to_he4_fe53_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni57_to_he4_fe53_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni57_to_he4_fe53_derived) = drate_dT; + + } + rate_ni58_to_n_ni57_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni58_to_n_ni57_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni58_to_n_ni57_derived) = drate_dT; + + } + rate_ni58_to_p_co57_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni58_to_p_co57_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni58_to_p_co57_derived) = drate_dT; + + } + rate_ni58_to_he4_fe54_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ni58_to_he4_fe54_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ni58_to_he4_fe54_derived) = drate_dT; + + } + rate_cu59_to_p_ni58_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_cu59_to_p_ni58_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_cu59_to_p_ni58_derived) = drate_dT; + + } + rate_p_mn55_to_n_fe55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_mn55_to_n_fe55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_mn55_to_n_fe55_derived) = drate_dT; + + } + rate_he4_fe53_to_n_ni56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe53_to_n_ni56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe53_to_n_ni56_derived) = drate_dT; + + } + rate_p_fe54_to_he4_mn51_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe54_to_he4_mn51_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe54_to_he4_mn51_derived) = drate_dT; + + } + rate_he4_fe54_to_n_ni57_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe54_to_n_ni57_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe54_to_n_ni57_derived) = drate_dT; + + } + rate_he4_fe54_to_p_co57_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe54_to_p_co57_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe54_to_p_co57_derived) = drate_dT; + + } + rate_p_fe55_to_n_co55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe55_to_n_co55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe55_to_n_co55_derived) = drate_dT; + + } + rate_he4_fe55_to_n_ni58_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_fe55_to_n_ni58_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_fe55_to_n_ni58_derived) = drate_dT; + + } + rate_p_fe56_to_n_co56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_fe56_to_n_co56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_fe56_to_n_co56_derived) = drate_dT; + + } + rate_p_co56_to_n_ni56_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co56_to_n_ni56_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co56_to_n_ni56_derived) = drate_dT; + + } + rate_p_co56_to_he4_fe53_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co56_to_he4_fe53_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co56_to_he4_fe53_derived) = drate_dT; + + } + rate_he4_co56_to_n_cu59_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_co56_to_n_cu59_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_co56_to_n_cu59_derived) = drate_dT; + + } + rate_p_co57_to_n_ni57_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_co57_to_n_ni57_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_co57_to_n_ni57_derived) = drate_dT; + + } + rate_he4_ni57_to_n_zn60_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ni57_to_n_zn60_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ni57_to_n_zn60_derived) = drate_dT; + + } + rate_p_ni58_to_he4_co55_derived(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_ni58_to_he4_co55_derived) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_ni58_to_he4_co55_derived) = drate_dT; + + } + rate_he4_s32_to_p_cl35_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_s32_to_p_cl35_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_s32_to_p_cl35_derived_removed) = drate_dT; + + } + rate_ar36_to_he4_s32_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ar36_to_he4_s32_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ar36_to_he4_s32_derived_removed) = drate_dT; + + } + rate_ar36_to_p_cl35_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ar36_to_p_cl35_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ar36_to_p_cl35_derived_removed) = drate_dT; + + } + rate_he4_ar36_to_p_k39_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ar36_to_p_k39_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ar36_to_p_k39_derived_removed) = drate_dT; + + } + rate_ca40_to_he4_ar36_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ca40_to_he4_ar36_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ca40_to_he4_ar36_derived_removed) = drate_dT; + + } + rate_ca40_to_p_k39_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ca40_to_p_k39_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ca40_to_p_k39_derived_removed) = drate_dT; + + } + rate_he4_ca40_to_p_sc43_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_he4_ca40_to_p_sc43_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_he4_ca40_to_p_sc43_derived_removed) = drate_dT; + + } + rate_ti44_to_he4_ca40_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ti44_to_he4_ca40_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ti44_to_he4_ca40_derived_removed) = drate_dT; + + } + rate_ti44_to_p_sc43_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_ti44_to_p_sc43_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ti44_to_p_sc43_derived_removed) = drate_dT; + + } + rate_cr48_to_he4_ti44_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_cr48_to_he4_ti44_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_cr48_to_he4_ti44_derived_removed) = drate_dT; + + } + rate_cr48_to_p_v47_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_cr48_to_p_v47_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_cr48_to_p_v47_derived_removed) = drate_dT; + + } + rate_p_v47_to_he4_ti44_derived_removed(tfactors, rate, drate_dT); + rate_eval.screened_rates(k_p_v47_to_he4_ti44_derived_removed) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_p_v47_to_he4_ti44_derived_removed) = drate_dT; + + } + +} + +template +AMREX_GPU_HOST_DEVICE AMREX_INLINE +void +fill_approx_rates([[maybe_unused]] const tf_t& tfactors, [[maybe_unused]] T& rate_eval) +{ + + [[maybe_unused]] Real rate{}; + [[maybe_unused]] Real drate_dT{}; + + rate_s32_he4_to_ar36_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_s32_he4_to_ar36_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_s32_he4_to_ar36_approx) = drate_dT; + + } + rate_ar36_to_s32_he4_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ar36_to_s32_he4_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ar36_to_s32_he4_approx) = drate_dT; + + } + rate_ar36_he4_to_ca40_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ar36_he4_to_ca40_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ar36_he4_to_ca40_approx) = drate_dT; + + } + rate_ca40_to_ar36_he4_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ca40_to_ar36_he4_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ca40_to_ar36_he4_approx) = drate_dT; + + } + rate_ca40_he4_to_ti44_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ca40_he4_to_ti44_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ca40_he4_to_ti44_approx) = drate_dT; + + } + rate_ti44_to_ca40_he4_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ti44_to_ca40_he4_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ti44_to_ca40_he4_approx) = drate_dT; + + } + rate_ti44_he4_to_cr48_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_ti44_he4_to_cr48_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_ti44_he4_to_cr48_approx) = drate_dT; + + } + rate_cr48_to_ti44_he4_approx(rate_eval, rate, drate_dT); + rate_eval.screened_rates(k_cr48_to_ti44_he4_approx) = rate; + if constexpr (std::is_same::value) { + rate_eval.dscreened_rates_dT(k_cr48_to_ti44_he4_approx) = drate_dT; + + } + +} + +#endif diff --git a/networks/He-C-Fe-group/table_rates.H b/networks/He-C-Fe-group/table_rates.H new file mode 100644 index 0000000000..a9c6f74c68 --- /dev/null +++ b/networks/He-C-Fe-group/table_rates.H @@ -0,0 +1,440 @@ +#ifndef TABLE_RATES_H +#define TABLE_RATES_H + +#include +#include +#include +#include + +#include + +using namespace amrex; + +void init_tabular(); + +// Table is expected to be in terms of dens*ye and temp (logarithmic, cgs units) +// Table energy units are expected in terms of ergs + +// all tables are expected to have columns: +// Log(rhoY) Log(T) mu dQ Vs Log(e-cap-rate) Log(nu-energy-loss) Log(gamma-energy) +// Log(g/cm^3) Log(K) erg erg erg Log(1/s) Log(erg/s) Log(erg/s) +// + +const int num_tables = 10; + +enum TableVars +{ + jtab_mu = 1, + jtab_dq = 2, + jtab_vs = 3, + jtab_rate = 4, + jtab_nuloss = 5, + jtab_gamma = 6, + num_vars = jtab_gamma +}; + + +struct table_t +{ + int ntemp; + int nrhoy; + int nvars; + int nheader; +}; + +// we add a 7th index, k_index_dlogr_dlogt used for computing the derivative +// of Log(rate) with respect of Log(temperature) by using the table +// values. It isn't an index into the table but into the 'entries' +// array. Is important to mention that although we compute dlogr/dlogT is +// the computed quantity in 'entries', we pursue ultimately +// dr/dt as the final desired quantity to be computed for this index. + +const int k_index_dlogr_dlogt = 7; +const int add_vars = 1; // 1 Additional Var in entries + + +namespace rate_tables +{ + extern AMREX_GPU_MANAGED table_t j_co55_fe55_meta; + extern AMREX_GPU_MANAGED Array3D j_co55_fe55_data; + extern AMREX_GPU_MANAGED Array1D j_co55_fe55_rhoy; + extern AMREX_GPU_MANAGED Array1D j_co55_fe55_temp; + + extern AMREX_GPU_MANAGED table_t j_co56_fe56_meta; + extern AMREX_GPU_MANAGED Array3D j_co56_fe56_data; + extern AMREX_GPU_MANAGED Array1D j_co56_fe56_rhoy; + extern AMREX_GPU_MANAGED Array1D j_co56_fe56_temp; + + extern AMREX_GPU_MANAGED table_t j_co56_ni56_meta; + extern AMREX_GPU_MANAGED Array3D j_co56_ni56_data; + extern AMREX_GPU_MANAGED Array1D j_co56_ni56_rhoy; + extern AMREX_GPU_MANAGED Array1D j_co56_ni56_temp; + + extern AMREX_GPU_MANAGED table_t j_co57_ni57_meta; + extern AMREX_GPU_MANAGED Array3D j_co57_ni57_data; + extern AMREX_GPU_MANAGED Array1D j_co57_ni57_rhoy; + extern AMREX_GPU_MANAGED Array1D j_co57_ni57_temp; + + extern AMREX_GPU_MANAGED table_t j_fe55_co55_meta; + extern AMREX_GPU_MANAGED Array3D j_fe55_co55_data; + extern AMREX_GPU_MANAGED Array1D j_fe55_co55_rhoy; + extern AMREX_GPU_MANAGED Array1D j_fe55_co55_temp; + + extern AMREX_GPU_MANAGED table_t j_fe55_mn55_meta; + extern AMREX_GPU_MANAGED Array3D j_fe55_mn55_data; + extern AMREX_GPU_MANAGED Array1D j_fe55_mn55_rhoy; + extern AMREX_GPU_MANAGED Array1D j_fe55_mn55_temp; + + extern AMREX_GPU_MANAGED table_t j_fe56_co56_meta; + extern AMREX_GPU_MANAGED Array3D j_fe56_co56_data; + extern AMREX_GPU_MANAGED Array1D j_fe56_co56_rhoy; + extern AMREX_GPU_MANAGED Array1D j_fe56_co56_temp; + + extern AMREX_GPU_MANAGED table_t j_mn55_fe55_meta; + extern AMREX_GPU_MANAGED Array3D j_mn55_fe55_data; + extern AMREX_GPU_MANAGED Array1D j_mn55_fe55_rhoy; + extern AMREX_GPU_MANAGED Array1D j_mn55_fe55_temp; + + extern AMREX_GPU_MANAGED table_t j_ni56_co56_meta; + extern AMREX_GPU_MANAGED Array3D j_ni56_co56_data; + extern AMREX_GPU_MANAGED Array1D j_ni56_co56_rhoy; + extern AMREX_GPU_MANAGED Array1D j_ni56_co56_temp; + + extern AMREX_GPU_MANAGED table_t j_ni57_co57_meta; + extern AMREX_GPU_MANAGED Array3D j_ni57_co57_data; + extern AMREX_GPU_MANAGED Array1D j_ni57_co57_rhoy; + extern AMREX_GPU_MANAGED Array1D j_ni57_co57_temp; + +} + +template +void init_tab_info(const table_t& tf, const std::string& file, R& log_rhoy_table, T& log_temp_table, D& data) +{ + // This function initializes the selected tabular-rate tables. From the tables we are interested + // on the rate, neutrino-energy-loss and the gamma-energy entries. + + std::ifstream table; + table.open(file); + + std::string line; + + // read and skip over the header + + for (int i = 0; i < tf.nheader; ++i) { + std::getline(table, line); + } + + // now the data -- there are 2 extra columns, for log_temp and log_rhoy + + for (int j = 1; j <= tf.nrhoy; ++j) { + for (int i = 1; i <= tf.ntemp; ++i) { + std::getline(table, line); + std::istringstream sdata(line); + + sdata >> log_rhoy_table(j) >> log_temp_table(i); + + for (int n = 1; n <= tf.nvars; ++n) { + sdata >> data(i, j, n); + } + } + } + table.close(); +} + + +template +AMREX_INLINE AMREX_GPU_HOST_DEVICE +int vector_index_lu(const int vlen, const V& vector, const Real fvar) +{ + + // Returns the greatest index of vector for which vector(index) < fvar. + // Return 1 if fvar < vector(1) + // Return size(vector)-1 if fvar > vector(size(vector)) + // The interval [index, index+1] brackets fvar for fvar within the range of vector. + + int index; + + if (fvar < vector(1)) { + index = 1; + } else if (fvar > vector(vlen)) { + index = vlen - 1; + } else { + int nup = vlen; + int ndn = 1; + for (int i = 1; i <= vlen; ++i) { + int j = ndn + (nup - ndn)/2; + if (fvar < vector(j)) { + nup = j; + } else { + ndn = j; + } + if ((nup - ndn) == 1) { + break; + } + } + index = ndn; + } + return index; +} + + +AMREX_INLINE AMREX_GPU_HOST_DEVICE +Real +evaluate_linear_1d(const Real fhi, const Real flo, const Real xhi, const Real xlo, const Real x) +{ + // This function is a 1-D linear interpolator, that keeps x constant to xlo or xhi, based + // on the side, if x is outside [xlo, xhi] respectively. + + Real xx = Clamp(x, xlo, xhi); + Real f = flo + (fhi - flo) * (xx - xlo) / (xhi - xlo); + + return f; +} + +AMREX_INLINE AMREX_GPU_HOST_DEVICE +Real +evaluate_linear_2d(const Real fip1jp1, const Real fip1j, const Real fijp1, const Real fij, + const Real xhi, const Real xlo, const Real yhi, const Real ylo, + const Real x, const Real y) +{ + // This is the 2-D linear interpolator, as an extension of evaluate_linear_1d. + + Real f; + Real dx = xhi - xlo; + Real dy = yhi - ylo; + + Real E = fij; + Real C = (fijp1 - fij) / dy; + Real B = (fip1j - fij) / dx; + Real A = (fip1jp1 - B * dx - C * dy - E) / (dx * dy); + + Real xx = Clamp(x, xlo, xhi); + Real yy = Clamp(y, ylo, yhi); + + f = A * (xx - xlo) * (yy - ylo) + + B * (xx - xlo) + + C * (yy - ylo) + + E; + + return f; +} + + +template +AMREX_INLINE AMREX_GPU_HOST_DEVICE +Real +evaluate_vars(const table_t& table_meta, const R& log_rhoy_table, const T& log_temp_table, const D& data, + const Real log_rhoy, const Real log_temp, const int component) +{ + // This function evaluates the 2-D interpolator, for several pairs of rho_ye and temperature. + + int jtemp_lo = vector_index_lu(table_meta.ntemp, log_temp_table, log_temp); + int jtemp_hi = jtemp_lo + 1; + + int irhoy_lo = vector_index_lu(table_meta.nrhoy, log_rhoy_table, log_rhoy); + int irhoy_hi = irhoy_lo + 1; + + Real rhoy_lo = log_rhoy_table(irhoy_lo); + Real rhoy_hi = log_rhoy_table(irhoy_hi); + + Real t_lo = log_temp_table(jtemp_lo); + Real t_hi = log_temp_table(jtemp_hi); + + Real fij = data(jtemp_lo, irhoy_lo, component); + Real fip1j = data(jtemp_lo, irhoy_hi, component); + Real fijp1 = data(jtemp_hi, irhoy_lo, component); + Real fip1jp1 = data(jtemp_hi, irhoy_hi, component); + + Real r = evaluate_linear_2d(fip1jp1, fip1j, fijp1, fij, + rhoy_hi, rhoy_lo, t_hi, t_lo, log_rhoy, log_temp); + + return r; +} + + +template +AMREX_INLINE AMREX_GPU_HOST_DEVICE +Real +evaluate_dr_dtemp(const table_t& table_meta, const R& log_rhoy_table, const T& log_temp_table, const D& data, + const Real log_rhoy, const Real log_temp) +{ + // The main objective of this function is compute dlogr_dlogt. + + int irhoy_lo = vector_index_lu(table_meta.nrhoy, log_rhoy_table, log_rhoy); + int irhoy_hi = irhoy_lo + 1; + + int jtemp_lo = vector_index_lu(table_meta.ntemp, log_temp_table, log_temp); + int jtemp_hi = jtemp_lo + 1; + + Real dlogr_dlogt; + + //Now we compute the forward finite difference on the boundary + + if ((jtemp_lo - 1 < 1) || (jtemp_hi + 1 > table_meta.ntemp)) { + + // In this case we are in the boundaries of the table. + // At the boundary, we compute the forward-j finite difference + // to compute dlogr_dlogt_i and dlogr_dlogt_ip1, using the + // following stencil: + // + // + // fijp1-----------fip1jp1 + // | | + // | | + // | | + // | | + // | | + // | | + // | | + // fij-------------fip1j + // + // with the following result: + // + // dlogr_dlogt_i --------dlogr_dlogt_ip1 + // + // Finally, we perform a 1d-linear interpolation between dlogr_dlogt_ip1 + // and dlogr_dlogt_i to compute dlogr_dlogt + + Real log_rhoy_lo = log_temp_table(irhoy_lo); + Real log_rhoy_hi = log_temp_table(irhoy_hi); + + Real log_temp_lo = log_temp_table(jtemp_lo); + Real log_temp_hi = log_temp_table(jtemp_hi); + + Real fij = data(jtemp_lo, irhoy_lo, jtab_rate); + Real fip1j = data(jtemp_lo, irhoy_hi, jtab_rate); + Real fijp1 = data(jtemp_hi, irhoy_lo, jtab_rate); + Real fip1jp1 = data(jtemp_hi, irhoy_hi, jtab_rate); + + Real dlogr_dlogt_i = (fijp1 - fij) / (log_temp_hi - log_temp_lo); + Real dlogr_dlogt_ip1 = (fip1jp1 - fip1j) / (log_temp_hi - log_temp_lo); + + if ((log_temp < log_temp_lo) || (log_temp > log_temp_hi)) { + dlogr_dlogt = 0.0_rt; + } else { + dlogr_dlogt = evaluate_linear_1d(dlogr_dlogt_ip1, dlogr_dlogt_i, log_rhoy_hi, log_rhoy_lo, log_rhoy); + } + + } else { + + // In this case, we use a bigger stencil to reconstruct the + // temperature derivatives in the j and j+1 temperature positions, + // using the cetral-j finite differences: + // + // fijp2 ------------fip1jp2 + // | | + // | | + // | | + // | | + // | | + // | | + // | | + // fijp1------------fip1jp1 + // | | + // | | + // | | + // | | + // | | + // | | + // | | + // fij------------- fip1j + // | | + // | | + // | | + // | | + // | | + // | | + // | | + // fijm1------------fip1jm1 + // + // with the following result: + // + // + // dr_dt_ijp1 --------dr_dt_ip1jp1 + // | | + // | | + // | | + // | | + // | | + // | | + // | | + // dr_dt_ij-----------dr_dt_ip1j + // + // Finally, we perform a 2d-linear interpolation to + // compute dlogr_dlogt. + + Real log_temp_jm1 = log_temp_table(jtemp_lo-1); + Real log_temp_j = log_temp_table(jtemp_lo); + Real log_temp_jp1 = log_temp_table(jtemp_hi); + Real log_temp_jp2 = log_temp_table(jtemp_hi+1); + + Real log_rhoy_lo = log_rhoy_table(irhoy_lo); + Real log_rhoy_hi = log_rhoy_table(irhoy_hi); + + Real fijm1 = data(jtemp_lo-1, irhoy_lo, jtab_rate); + Real fij = data(jtemp_lo, irhoy_lo, jtab_rate); + Real fijp1 = data(jtemp_hi, irhoy_lo, jtab_rate); + Real fijp2 = data(jtemp_hi+1, irhoy_lo, jtab_rate); + + Real fip1jm1 = data(jtemp_lo-1, irhoy_hi, jtab_rate); + Real fip1j = data(jtemp_lo, irhoy_hi, jtab_rate); + Real fip1jp1 = data(jtemp_hi, irhoy_hi, jtab_rate); + Real fip1jp2 = data(jtemp_hi+1, irhoy_hi, jtab_rate); + + Real dlogr_dlogt_ij = (fijp1 - fijm1)/(log_temp_jp1 - log_temp_jm1); + Real dlogr_dlogt_ijp1 = (fijp2 - fij)/(log_temp_jp2 - log_temp_j); + Real dlogr_dlogt_ip1j = (fip1jp1 - fip1jm1)/(log_temp_jp1 - log_temp_jm1); + Real dlogr_dlogt_ip1jp1 = (fip1jp2 - fip1j)/(log_temp_jp2 - log_temp_j); + + dlogr_dlogt = evaluate_linear_2d(dlogr_dlogt_ip1jp1, dlogr_dlogt_ip1j, dlogr_dlogt_ijp1, dlogr_dlogt_ij, + log_rhoy_hi, log_rhoy_lo, log_temp_jp1, log_temp_j, + log_rhoy, log_temp); + + } + return dlogr_dlogt; +} + + +template +AMREX_INLINE AMREX_GPU_HOST_DEVICE +void +get_entries(const table_t& table_meta, const R& log_rhoy_table, const T& log_temp_table, const D& data, + const Real log_rhoy, const Real log_temp, Array1D& entries) +{ + for (int ivar = 1; ivar <= num_vars; ivar++) { + entries(ivar) = evaluate_vars(table_meta, log_rhoy_table, log_temp_table, data, + log_rhoy, log_temp, ivar); + } + + entries(k_index_dlogr_dlogt) = evaluate_dr_dtemp(table_meta, log_rhoy_table, log_temp_table, data, + log_rhoy, log_temp); +} + +template +AMREX_INLINE AMREX_GPU_HOST_DEVICE +void +tabular_evaluate(const table_t& table_meta, + const R& log_rhoy_table, const T& log_temp_table, const D& data, + const Real rhoy, const Real temp, + Real& rate, Real& drate_dt, Real& edot_nu, Real& edot_gamma) +{ + Array1D entries; + + // Get the table entries at this rhoy, temp + + Real log_rhoy = std::log10(rhoy); + Real log_temp = std::log10(temp); + + get_entries(table_meta, log_rhoy_table, log_temp_table, data, + log_rhoy, log_temp, entries); + + // Fill outputs: rate, d(rate)/d(temperature), and + // (negative) neutrino loss contribution to energy generation + + rate = std::pow(10.0_rt, entries(jtab_rate)); + drate_dt = rate * entries(k_index_dlogr_dlogt) / temp; + edot_nu = -std::pow(10.0_rt, entries(jtab_nuloss)); + edot_gamma = std::pow(10.0_rt, entries(jtab_gamma)); +} + +#endif diff --git a/networks/He-C-Fe-group/table_rates_data.cpp b/networks/He-C-Fe-group/table_rates_data.cpp new file mode 100644 index 0000000000..5ac5e8a541 --- /dev/null +++ b/networks/He-C-Fe-group/table_rates_data.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include + +using namespace amrex; + +namespace rate_tables +{ + + AMREX_GPU_MANAGED table_t j_co55_fe55_meta; + AMREX_GPU_MANAGED Array3D j_co55_fe55_data; + AMREX_GPU_MANAGED Array1D j_co55_fe55_rhoy; + AMREX_GPU_MANAGED Array1D j_co55_fe55_temp; + + AMREX_GPU_MANAGED table_t j_co56_fe56_meta; + AMREX_GPU_MANAGED Array3D j_co56_fe56_data; + AMREX_GPU_MANAGED Array1D j_co56_fe56_rhoy; + AMREX_GPU_MANAGED Array1D j_co56_fe56_temp; + + AMREX_GPU_MANAGED table_t j_co56_ni56_meta; + AMREX_GPU_MANAGED Array3D j_co56_ni56_data; + AMREX_GPU_MANAGED Array1D j_co56_ni56_rhoy; + AMREX_GPU_MANAGED Array1D j_co56_ni56_temp; + + AMREX_GPU_MANAGED table_t j_co57_ni57_meta; + AMREX_GPU_MANAGED Array3D j_co57_ni57_data; + AMREX_GPU_MANAGED Array1D j_co57_ni57_rhoy; + AMREX_GPU_MANAGED Array1D j_co57_ni57_temp; + + AMREX_GPU_MANAGED table_t j_fe55_co55_meta; + AMREX_GPU_MANAGED Array3D j_fe55_co55_data; + AMREX_GPU_MANAGED Array1D j_fe55_co55_rhoy; + AMREX_GPU_MANAGED Array1D j_fe55_co55_temp; + + AMREX_GPU_MANAGED table_t j_fe55_mn55_meta; + AMREX_GPU_MANAGED Array3D j_fe55_mn55_data; + AMREX_GPU_MANAGED Array1D j_fe55_mn55_rhoy; + AMREX_GPU_MANAGED Array1D j_fe55_mn55_temp; + + AMREX_GPU_MANAGED table_t j_fe56_co56_meta; + AMREX_GPU_MANAGED Array3D j_fe56_co56_data; + AMREX_GPU_MANAGED Array1D j_fe56_co56_rhoy; + AMREX_GPU_MANAGED Array1D j_fe56_co56_temp; + + AMREX_GPU_MANAGED table_t j_mn55_fe55_meta; + AMREX_GPU_MANAGED Array3D j_mn55_fe55_data; + AMREX_GPU_MANAGED Array1D j_mn55_fe55_rhoy; + AMREX_GPU_MANAGED Array1D j_mn55_fe55_temp; + + AMREX_GPU_MANAGED table_t j_ni56_co56_meta; + AMREX_GPU_MANAGED Array3D j_ni56_co56_data; + AMREX_GPU_MANAGED Array1D j_ni56_co56_rhoy; + AMREX_GPU_MANAGED Array1D j_ni56_co56_temp; + + AMREX_GPU_MANAGED table_t j_ni57_co57_meta; + AMREX_GPU_MANAGED Array3D j_ni57_co57_data; + AMREX_GPU_MANAGED Array1D j_ni57_co57_rhoy; + AMREX_GPU_MANAGED Array1D j_ni57_co57_temp; + + +} + + +void init_tabular() +{ + + amrex::Print() << "reading in network electron-capture / beta-decay tables..." << std::endl; + + using namespace rate_tables; + + j_co55_fe55_meta.ntemp = 13; + j_co55_fe55_meta.nrhoy = 11; + j_co55_fe55_meta.nvars = 6; + j_co55_fe55_meta.nheader = 5; + + init_tab_info(j_co55_fe55_meta, "55co-55fe_electroncapture.dat", j_co55_fe55_rhoy, j_co55_fe55_temp, j_co55_fe55_data); + + + j_co56_fe56_meta.ntemp = 13; + j_co56_fe56_meta.nrhoy = 11; + j_co56_fe56_meta.nvars = 6; + j_co56_fe56_meta.nheader = 5; + + init_tab_info(j_co56_fe56_meta, "56co-56fe_electroncapture.dat", j_co56_fe56_rhoy, j_co56_fe56_temp, j_co56_fe56_data); + + + j_co56_ni56_meta.ntemp = 13; + j_co56_ni56_meta.nrhoy = 11; + j_co56_ni56_meta.nvars = 6; + j_co56_ni56_meta.nheader = 5; + + init_tab_info(j_co56_ni56_meta, "56co-56ni_betadecay.dat", j_co56_ni56_rhoy, j_co56_ni56_temp, j_co56_ni56_data); + + + j_co57_ni57_meta.ntemp = 13; + j_co57_ni57_meta.nrhoy = 11; + j_co57_ni57_meta.nvars = 6; + j_co57_ni57_meta.nheader = 5; + + init_tab_info(j_co57_ni57_meta, "57co-57ni_betadecay.dat", j_co57_ni57_rhoy, j_co57_ni57_temp, j_co57_ni57_data); + + + j_fe55_co55_meta.ntemp = 13; + j_fe55_co55_meta.nrhoy = 11; + j_fe55_co55_meta.nvars = 6; + j_fe55_co55_meta.nheader = 5; + + init_tab_info(j_fe55_co55_meta, "55fe-55co_betadecay.dat", j_fe55_co55_rhoy, j_fe55_co55_temp, j_fe55_co55_data); + + + j_fe55_mn55_meta.ntemp = 13; + j_fe55_mn55_meta.nrhoy = 11; + j_fe55_mn55_meta.nvars = 6; + j_fe55_mn55_meta.nheader = 5; + + init_tab_info(j_fe55_mn55_meta, "55fe-55mn_electroncapture.dat", j_fe55_mn55_rhoy, j_fe55_mn55_temp, j_fe55_mn55_data); + + + j_fe56_co56_meta.ntemp = 13; + j_fe56_co56_meta.nrhoy = 11; + j_fe56_co56_meta.nvars = 6; + j_fe56_co56_meta.nheader = 5; + + init_tab_info(j_fe56_co56_meta, "56fe-56co_betadecay.dat", j_fe56_co56_rhoy, j_fe56_co56_temp, j_fe56_co56_data); + + + j_mn55_fe55_meta.ntemp = 13; + j_mn55_fe55_meta.nrhoy = 11; + j_mn55_fe55_meta.nvars = 6; + j_mn55_fe55_meta.nheader = 5; + + init_tab_info(j_mn55_fe55_meta, "55mn-55fe_betadecay.dat", j_mn55_fe55_rhoy, j_mn55_fe55_temp, j_mn55_fe55_data); + + + j_ni56_co56_meta.ntemp = 13; + j_ni56_co56_meta.nrhoy = 11; + j_ni56_co56_meta.nvars = 6; + j_ni56_co56_meta.nheader = 5; + + init_tab_info(j_ni56_co56_meta, "56ni-56co_electroncapture.dat", j_ni56_co56_rhoy, j_ni56_co56_temp, j_ni56_co56_data); + + + j_ni57_co57_meta.ntemp = 13; + j_ni57_co57_meta.nrhoy = 11; + j_ni57_co57_meta.nvars = 6; + j_ni57_co57_meta.nheader = 5; + + init_tab_info(j_ni57_co57_meta, "57ni-57co_electroncapture.dat", j_ni57_co57_rhoy, j_ni57_co57_temp, j_ni57_co57_data); + + + +} diff --git a/networks/He-C-Fe-group/tfactors.H b/networks/He-C-Fe-group/tfactors.H new file mode 100644 index 0000000000..43a6316db7 --- /dev/null +++ b/networks/He-C-Fe-group/tfactors.H @@ -0,0 +1,34 @@ +#ifndef TFACTORS_H +#define TFACTORS_H + +struct tf_t { + Real T9; + Real T9i; + Real T943i; + Real T923i; + Real T913i; + Real T913; + Real T923; + Real T953; + Real lnT9; +}; + +AMREX_GPU_HOST_DEVICE AMREX_INLINE +tf_t evaluate_tfactors(const Real T) +{ + + tf_t tf; + tf.T9 = T / 1.e9_rt; + tf.T9i = 1.0_rt / tf.T9; + tf.T913 = std::cbrt(tf.T9); + tf.T913i = 1.0_rt / tf.T913; + tf.T923i = tf.T913i * tf.T913i; + tf.T943i = tf.T9i * tf.T913i; + tf.T923 = tf.T913 * tf.T913; + tf.T953 = tf.T9 * tf.T923; + tf.lnT9 = std::log(tf.T9); + + return tf; +} + +#endif \ No newline at end of file From 4e4764d3e67b24bbca667d2ca6a9d999d3fd5b21 Mon Sep 17 00:00:00 2001 From: Ben Wibking Date: Fri, 13 Oct 2023 11:53:11 -0400 Subject: [PATCH 2/2] workaround macOS CI bug (#1353) Fixes https://github.com/AMReX-Astro/Microphysics/issues/1352. --- .github/workflows/macos_build_cell_primordial_chem.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/macos_build_cell_primordial_chem.yml b/.github/workflows/macos_build_cell_primordial_chem.yml index 8d6e64769e..43eee22bbc 100644 --- a/.github/workflows/macos_build_cell_primordial_chem.yml +++ b/.github/workflows/macos_build_cell_primordial_chem.yml @@ -11,7 +11,8 @@ jobs: - name: Install dependencies run: | - brew install cmake openmpi python3 + brew install cmake openmpi python3 || true + brew link --overwrite python@3.11 - name: Compile and run run: |