diff --git a/validation/ManuscriptFigures/BBQCompare/bbq_compare.py b/validation/ManuscriptFigures/BBQCompare/bbq_compare.py index b440b387..3fe93c79 100644 --- a/validation/ManuscriptFigures/BBQCompare/bbq_compare.py +++ b/validation/ManuscriptFigures/BBQCompare/bbq_compare.py @@ -6,6 +6,7 @@ from gridfire.policy import MainSequencePolicy from gridfire.engine import GraphEngine, MultiscalePartitioningEngineView, AdaptiveEngineView from gridfire.engine import NetworkBuildDepth +from fourdst.composition.utils import buildCompositionFromMassFractions from scipy.signal import find_peaks @@ -77,11 +78,9 @@ def rescale_composition(comp_ref : Composition, ZZs : float, Y_primordial : floa return newComp def init_composition(ZZs : float = 0) -> Composition: - Y_solar = [7.0262E-01, 1.7479E-06, 6.8955E-02, 2.5000E-04, 7.8554E-05, 6.0144E-04, 8.1031E-05, 2.1513E-05] - S = ["H-1", "He-3", "He-4", "C-12", "N-14", "O-16", "Ne-20", "Mg-24"] - return rescale_composition(Composition(S, Y_solar), ZZs) - - + X_GS98 = [0.73395, 0.00005, 0.2490, 0.00281, 0.00101, 0.00883, 0.00149, 0.00064, 0.00066, 0.00035, 0.00008, 0.00006, 0.00107] + S_GS98 = ["H-1", "He-3", "He-4", "C-12", "N-14", "O-16", "Ne-20", "Mg-24", "Si-28", "S-32", "Ar-36", "Ca-40", "Fe-56"] + return buildCompositionFromMassFractions(S_GS98, X_GS98) def init_netIn(temp: float, rho: float, time: float, comp: Composition) -> NetIn: n : NetIn = NetIn() n.temperature = temp @@ -154,185 +153,37 @@ def quantify_engine_error(df_base, df_approx, r_base: NetOut, r_approx: NetOut, def main(save_show): C = init_composition() - netIn = init_netIn(1.5e7, 1.6e2, years_to_seconds(10e9), C) - + netIn = init_netIn(10**7.1760912591, 10**2.2041199827, 1e17, C) stepLogger = StepLogger() engine_graph = GraphEngine(C, 4) + blob = engine_graph.constructStateBlob() + print(f"Gridfire Using: {len(engine_graph.getNetworkReactions(blob))} Reactions and {len(engine_graph.getNetworkSpecies(blob))} Species") - solver_ctx_graph = PointSolverContext(engine_graph.constructStateBlob()) - solver_ctx_graph.stdout_logging = True + solver_ctx_graph = PointSolverContext(blob) + solver_ctx_graph.stdout_logging = False solver_ctx_graph.callback = lambda ctx: stepLogger.log_step(ctx) solver_single = PointSolver(engine_graph) r_graph = solver_single.evaluate(solver_ctx_graph, netIn, False, False) df_graph : pd.DataFrame = stepLogger.df + df_graph.to_csv("bbq_graph.csv", index=False) stepLogger.reset() QSE_engine = MultiscalePartitioningEngineView(engine_graph) solver_ctx_graph_qse = PointSolverContext(QSE_engine.constructStateBlob(engine_graph.constructStateBlob())) - solver_ctx_graph_qse.stdout_logging = True + solver_ctx_graph_qse.stdout_logging = False solver_ctx_graph_qse.callback = lambda ctx: stepLogger.log_step(ctx) solver_QSE = PointSolver(QSE_engine) r_qse = solver_QSE.evaluate(solver_ctx_graph_qse, netIn, False, False) - df_qse = stepLogger.df + df_qse : pd.DataFrame = stepLogger.df + df_qse.to_csv("bbq_qse.csv", index=False) stepLogger.reset() - # policy = MainSequencePolicy(C) - # construct = policy.construct() - # solver_AE_QSE = PointSolver(construct.engine) - # solver_ctx_graph_qse_ae = PointSolverContext(construct.scratch_blob) - # solver_ctx_graph_qse_ae.callback = lambda ctx: stepLogger.log_step(ctx) - # solver_ctx_graph_qse_ae.stdout_logging = False - # - # r_ae_qse = solver_AE_QSE.evaluate(solver_ctx_graph_qse_ae, netIn, False, False) - # - # df_ae_qse = stepLogger.df - # stepLogger.reset() - - # fig, axs = plt.subplots(2, 1, figsize=(10, 7)) - S = ["H-1", "He-4", "C-12", "N-14", "O-16", "Mg-24"] - t = np.logspace(7, 17.5, 5000) - # for spID, sp in enumerate(S): - # gf = interp1d(df_graph.t, df_graph[sp]) - # qf = interp1d(df_qse.t, df_qse[sp]) - # - # ax = axs[0] - # ax.loglog(t, gf(t), 'o-', color=f"C{spID}") - # ax.loglog(t, qf(t), 'o', color=f"C{spID}", linestyle='dashed') - # - # ax.text(1, df_graph[sp].iloc[0]*1.1, sp, fontsize=12, color=f"C{spID}") - # - # ax = axs[1] - # ax.semilogx(t, (qf(t)-gf(t))/gf(t), color=f"C{spID}") - # - # axs[1].set_xlabel("Time [s]", fontsize=15) - # axs[0].set_ylabel("Molar Abundance [mol/g]", fontsize=15) - # axs[1].set_ylabel("Relative Error", fontsize=15) - # - # fig, ax = plt.subplots(1, 1, figsize=(10, 7)) - # ge = interp1d(df_graph.t, df_graph.eps) - # qe = interp1d(df_qse.t, df_qse.eps) - # ax.loglog(t, np.abs((qe(t) - ge(t)) / ge(t))) - - temporal_err_qse, final_err_qse = quantify_engine_error( - df_base=df_graph, - df_approx=df_qse, - r_base=r_graph, - r_approx=r_qse, - species_list=S - ) - - qse_rel_eps_error = (df_graph.eps.iloc[-1] - df_qse.eps.iloc[-1])/df_qse.eps.iloc[-1] - - - fig, ax = plt.subplots(1, 1, figsize=(10, 7)) - # ax.semilogx(df_graph.t, df_graph["H-2"], 'o-', color='red') - # ax.semilogx(df_qse.t, df_qse["H-2"], 'o', color='blue', linestyle='dashed') - - graph_h1 = interp1d(df_graph.t, df_graph["H-1"]) - qse_h1 = interp1d(df_qse.t, df_qse["H-1"]) - graph_h2 = interp1d(df_graph.t, df_graph["H-2"]) - qse_h2 = interp1d(df_qse.t, df_qse["H-2"]) - - graph_DH = graph_h2(t)/graph_h1(t) - qse_DH = qse_h2(t)/qse_h1(t) - - dex_diff = np.abs(np.log10(graph_h2(t)) - np.log10(qse_h2(t))) - dex_dh_diff = np.abs(np.log10(graph_DH) - np.log10(qse_DH)) - # ax.semilogx(t, dex_diff, color='green') - ax.loglog(t, dex_dh_diff, color='black') - # ax.semilogx(t, qse_h2(t)/qse_h1(t), color='green') - ax.set_xlabel("Time [s]", fontsize=17) - ax.set_ylabel(r"$\left|\log_{10}\left(\frac{D}{H})\right)_{graph} - \log_{10}\left(\frac{D}{H}\right)_{qse}\right|$", fontsize=17) - - if save_show == ShowSave.SAVE: - plt.savefig("DHErr.pdf") - plt.close() - else: - plt.show() - - sums_qse = {} - sums_graph = {} - symbols = {} - - for sp, y in r_qse.composition: - z = sp.z() - symbols[z] = sp.el() - - y_graph = r_graph.composition.getMolarAbundance(sp) - - sums_qse[int(z)] = sums_qse.get(z, 0.0) + y - sums_graph[int(z)] = sums_graph.get(z, 0.0) + y_graph - - print(sums_qse[3]) - print(sums_graph[3]) - - z_list = sorted(sums_qse.keys()) - dex_list = [] - - symbols = [val for key, val in symbols.items()] - - for z in z_list: - total_qse = sums_qse[z] - total_graph = sums_graph[z] - - if total_graph > 1e-13 and total_qse > 1e-13: - offset = np.log10(total_qse / total_graph) - else: - if z >= 14: - offset = np.nan # Disable these for visualization, they all have abundances so small (on the order of -100 it doesnt matter) - else: - offset = 0.0 - - dex_list.append(offset) - fig, ax = plt.subplots(1, 1, figsize=(10, 7)) - data = sorted(zip(z_list, symbols, dex_list), key=lambda x: x[0]) - sorted_z, sorted_symbols, sorted_dex = zip(*data) - print(sorted_symbols) - print(sorted_dex) - # 2. Create the plot - fig, ax = plt.subplots(1, 1, figsize=(12, 6)) - print(sorted_symbols) - bars = ax.bar(sorted_symbols, sorted_dex, color='grey', edgecolor='grey', alpha=0.8) - - # 3. Add styling and labels - ax.axhline(0, color='black', linewidth=0.8) # Adds a clear baseline at 0 dex - ax.set_xlabel('Element', fontsize=25) - ax.set_ylabel('Offset [dex]', fontsize=25) - - if save_show == ShowSave.SAVE: - plt.savefig("DexElementalOffset.pdf") - plt.close() - - - e_graph = interp1d(df_graph.t, df_graph.eps) - e_qse = interp1d(df_qse.t, df_qse.eps) - - dex_eps_diff = np.log10(e_graph(t)) - np.log10(e_qse(t)) - fig, ax = plt.subplots(1, 1, figsize=(10, 7)) - ax.semilogx(t, dex_eps_diff, color='black') - ax.set_xlabel("Time [s]", fontsize=25) - ax.set_xlabel("Offset [dex]", fontsize=25) - - if save_show == ShowSave.SAVE: - plt.savefig("DexEpsOffset.pdf") - plt.close() - - - if save_show == ShowSave.SHOW: - plt.show() - - print("=== QSE ===") - print(temporal_err_qse) - print(final_err_qse) - print(f"Relative ε error: {qse_rel_eps_error}") - - print(f"Neutrino Loss Difference [dex]: {np.log10(r_graph.specific_neutrino_energy_loss) - np.log10(r_qse.specific_neutrino_energy_loss)}") if __name__ == "__main__": import argparse diff --git a/validation/ManuscriptFigures/ErrorBudget/DHErr.pdf b/validation/ManuscriptFigures/ErrorBudget/DHErr.pdf new file mode 100644 index 00000000..e870b8fc Binary files /dev/null and b/validation/ManuscriptFigures/ErrorBudget/DHErr.pdf differ diff --git a/validation/ManuscriptFigures/ErrorBudget/DexElementalOffset.pdf b/validation/ManuscriptFigures/ErrorBudget/DexElementalOffset.pdf new file mode 100644 index 00000000..5bad0235 Binary files /dev/null and b/validation/ManuscriptFigures/ErrorBudget/DexElementalOffset.pdf differ diff --git a/validation/ManuscriptFigures/ErrorBudget/DexEpsOffset.pdf b/validation/ManuscriptFigures/ErrorBudget/DexEpsOffset.pdf new file mode 100644 index 00000000..9d2510b1 Binary files /dev/null and b/validation/ManuscriptFigures/ErrorBudget/DexEpsOffset.pdf differ diff --git a/validation/ManuscriptFigures/ErrorBudget/error_budget.py b/validation/ManuscriptFigures/ErrorBudget/error_budget.py index 85add2a5..b440b387 100644 --- a/validation/ManuscriptFigures/ErrorBudget/error_budget.py +++ b/validation/ManuscriptFigures/ErrorBudget/error_budget.py @@ -168,7 +168,7 @@ def main(save_show): solver_single = PointSolver(engine_graph) r_graph = solver_single.evaluate(solver_ctx_graph, netIn, False, False) - df_graph = stepLogger.df + df_graph : pd.DataFrame = stepLogger.df stepLogger.reset() QSE_engine = MultiscalePartitioningEngineView(engine_graph) diff --git a/validation/ManuscriptFigures/SmoothnessThroughPartitioning/smoothness_plot.pdf b/validation/ManuscriptFigures/SmoothnessThroughPartitioning/smoothness_plot.pdf new file mode 100644 index 00000000..7bfc07d4 Binary files /dev/null and b/validation/ManuscriptFigures/SmoothnessThroughPartitioning/smoothness_plot.pdf differ diff --git a/validation/ManuscriptFigures/utils/logger.py b/validation/ManuscriptFigures/utils/logger.py index dd264208..30d771b7 100644 --- a/validation/ManuscriptFigures/utils/logger.py +++ b/validation/ManuscriptFigures/utils/logger.py @@ -8,8 +8,13 @@ import sys from gridfire.solver import PointSolverTimestepContext from gridfire._gridfire.engine.scratchpads import StateBlob + +from fourdst.composition import Composition import gridfire +import numpy as np +import pandas as pd + class LogEntries(Enum): Step = "Step" t = "t" @@ -17,6 +22,7 @@ class LogEntries(Enum): eps = "eps" Composition = "Composition" ReactionContributions = "ReactionContributions" + MassFractions = "MassFractions" class StepLogger: @@ -24,17 +30,40 @@ class StepLogger: self.num_steps : int = 0 self.steps : List[Dict[LogEntries, Any]] = [] + # def log_step(self, ctx: PointSolverTimestepContext): + # comp_data: Dict[str, SupportsFloat] = {} + # for species in ctx.engine.getNetworkSpecies(ctx.state_ctx): + # sid = ctx.engine.getSpeciesIndex(ctx.state_ctx, species) + # comp_data[species.name()] = ctx.state[sid] + # entry : Dict[LogEntries, Any] = { + # LogEntries.Step: ctx.num_steps, + # LogEntries.t: ctx.t, + # LogEntries.dt: ctx.dt, + # LogEntries.eps: ctx.state[-1], + # LogEntries.Composition: comp_data, + # } + # self.steps.append(entry) + # self.num_steps += 1 + def log_step(self, ctx: PointSolverTimestepContext): - comp_data: Dict[str, SupportsFloat] = {} - for species in ctx.engine.getNetworkSpecies(ctx.state_ctx): - sid = ctx.engine.getSpeciesIndex(ctx.state_ctx, species) - comp_data[species.name()] = ctx.state[sid] + full_comp = ctx.composition + + comp_data: Dict[str, float] = {} + mass_frac: Dict[str, float] = {} + for species in full_comp.getRegisteredSpecies(): + comp_data[species.name()] = full_comp.getMolarAbundance(species) + mass_frac[species.name()] = full_comp.getMassFraction(species) + + rhs_calc = ctx.engine.getMostRecentRHSCalculation(ctx.state_ctx) + instantaneous_eps = rhs_calc.energy if rhs_calc else 0.0 + entry : Dict[LogEntries, Any] = { LogEntries.Step: ctx.num_steps, LogEntries.t: ctx.t, LogEntries.dt: ctx.dt, - LogEntries.eps: ctx.state[-1], + LogEntries.eps: instantaneous_eps, LogEntries.Composition: comp_data, + LogEntries.MassFractions: mass_frac, } self.steps.append(entry) self.num_steps += 1 @@ -47,6 +76,7 @@ class StepLogger: LogEntries.dt.value: step[LogEntries.dt], LogEntries.eps.value: step[LogEntries.eps], LogEntries.Composition.value: step[LogEntries.Composition], + LogEntries.MassFractions.value: step[LogEntries.MassFractions], } for step in self.steps ] @@ -67,6 +97,32 @@ class StepLogger: with open(filename, 'w') as f: json.dump(out_data, f, indent=4) + @property + def t(self) -> np.ndarray: + return np.array([step[LogEntries.t] for step in self.steps]) + + @property + def df(self) -> pd.DataFrame: + if not self.steps: + return pd.DataFrame() + + flat_data = [] + for step in self.steps: + row = { + "Step": step[LogEntries.Step], + "t": step[LogEntries.t], + "dt": step[LogEntries.dt], + "eps": step[LogEntries.eps], + } + X_dict = {f"X_{sp}": x for sp, x in step[LogEntries.MassFractions].items()} + row.update(step[LogEntries.Composition]) + row.update(X_dict) + flat_data.append(row) + + df = pd.DataFrame(flat_data) + + df = df.ffill().fillna(0.0) + return df def summary(self) -> Dict[str, Any]: if not self.steps: @@ -78,3 +134,8 @@ class StepLogger: "FinalComposition": final_step[LogEntries.Composition], } return summary_data + + def reset(self): + self.num_steps = 0 + self.steps : List[Dict[LogEntries, Any]] = [] + diff --git a/validation/ManuscriptFigures/utils/pub.mplstyle b/validation/ManuscriptFigures/utils/pub.mplstyle index e69de29b..e3b5b882 100644 --- a/validation/ManuscriptFigures/utils/pub.mplstyle +++ b/validation/ManuscriptFigures/utils/pub.mplstyle @@ -0,0 +1,40 @@ +savefig.facecolor: auto +savefig.edgecolor: auto +savefig.format: pdf +savefig.bbox: tight + +xtick.minor.visible : True +ytick.minor.visible : True + +xtick.direction : in +ytick.direction : in + +xtick.top : True +ytick.right : True + +xtick.major.size : 8 +xtick.minor.size : 4 + +ytick.major.size : 8 +ytick.minor.size : 4 + +xtick.labelsize : 18 +ytick.labelsize : 19 + +font.size : 20 + +font.family : serif +text.usetex : True +lines.color: C0 +patch.edgecolor: black +text.color: black +axes.facecolor: white +axes.edgecolor: black +axes.labelcolor: black +axes.prop_cycle: cycler('color', ['1f77b4', 'ff7f0e', '2ca02c', 'd62728', '9467bd', '8c564b', 'e377c2', '7f7f7f', 'bcbd22', '17becf']) +xtick.color: black +ytick.color: black +grid.color: b0b0b0 +figure.facecolor: white +figure.edgecolor: white +savefig.dpi: figure diff --git a/validation/vv/CoolStar_QSE_rate_names_pynuc.txt b/validation/vv/CoolStar_QSE_rate_names_pynuc.txt new file mode 100644 index 00000000..179db015 --- /dev/null +++ b/validation/vv/CoolStar_QSE_rate_names_pynuc.txt @@ -0,0 +1,349 @@ +n(2p,g p)d +he4(2n,)he6 +be9(p,p a n)he4 +be7(he3,2p a)he4 +be7(t,p a n)he4 +b8(n,p a)he4 +be9(p,a d)he4 +li7(d,a n)he4 +he3(he3,2p)he4 +al25(n,g)al26 +ne20(n,g)ne21 +o18(n,g)o19 +mg22(,)na22 +mg24(p,a)na21 +p32(p,n)s32 +t(he3,p n)he4 +n15(a,g)f19 +ar35(a,g)ca39 +mg22(n,a)ne19 +p31(p,g)s32 +al25(a,g)p29 +c12(c12,a)ne20 +f16(a,g)na20 +cl35(n,p)s35 +o14(n,g)o15 +p29(p,g)s30 +o14(p,)f15 +d(n,g)t +ar35(n,a)s32 +ar35(n,p)cl35 +o16(p,g)f17 +f17(a,g)na21 +cl35(n,a)p32 +cl34(a,p)ar37 +c11(n,2a)he4 +cl34(n,a)p31 +cl34(n,p)s34 +ar35(a,p)k38 +n15(p,g)o16 +be7(d,p a)he4 +li6(p,g)be7 +s34(a,p)cl37 +cl35(p,a)s32 +s31(a,p)cl34 +f18(p,a)o15 +al25(p,g)si26 +p32(p,a)si29 +p32(n,p)si32 +p31(a,p)s34 +p30(a,p)s33 +o14(,)n14 +he3(,)t +ar35(n,g)ar36 +be7(a,g)c11 +al28(p,a)mg25 +al27(a,p)si30 +al27(a,n)p30 +al26(n,a)na23 +al26(n,p)mg26 +al25(n,p)mg25 +al25(a,p)si28 +al27(p,a)mg24 +p29(n,a)al26 +mg26(a,n)si29 +mg25(a,n)si28 +mg23(n,c12)c12 +mg23(n,a)ne20 +mg22(a,p)al25 +s31(n,p)p31 +na24(a,p)mg27 +na24(p,a)ne21 +na23(a,p)mg26 +na23(p,a)ne20 +na23(p,n)mg23 +na22(a,p)mg25 +na21(n,a)f18 +cl35(a,p)ar38 +cl32(n,a)p29 +ne21(a,n)mg24 +ne20(c12,a)si28 +ne20(c12,p)p31 +ne20(p,a)f17 +al26(a,p)si29 +ne19(a,p)na22 +ne18(a,p)na21 +ne18(n,a)o15 +ne18(n,p)f18 +be7(n,a)he4 +si26(n,p)al26 +f19(a,p)ne22 +f19(p,n)ne19 +f18(a,p)ne21 +o15(p,)f16 +f18(n,a)n15 +f15(n,a)n12 +cl32(a,p)ar35 +o18(p,a)n15 +o17(a,n)ne20 +o17(p,a)n14 +o16(o16,a)si28 +o16(o16,p)p31 +cl32(,)s32 +o16(o16,n)s31 +al28(a,n)p31 +o16(c12,a)mg24 +o16(c12,p)al27 +al26(p,g)si27 +o14(n,a)c11 +n15(p,a)c12 +n15(p,n)o15 +n14(n,p)c14 +n13(a,p)o16 +c13(a,n)o16 +c13(d,n)n14 +c13(p,n)n13 +c11(n,p)b11 +b8(a,p)c11 +li7(d,p)li8 +li6(n,t)he4 +li6(p,he3)he4 +t(he3,d)he4 +he3(d,p)he4 +he3(n,p)t +t(d,n)he4 +d(d,p)t +ne18(a,g)mg22 +f16(n,p)o16 +p32(p,g)s33 +na21(n,p)ne21 +o17(n,g)o18 +ne19(n,a)o16 +mg22(a,g)si26 +o14(a,p)f17 +f16(a,p)ne19 +ne20(c12,n)s31 +be9(t,n)b11 +he3(p,)he4 +ne21(p,g)na22 +c12(c12,p)na23 +li7(t,n)be9 +li7(a,g)b11 +f16(n,a)n13 +p30(p,g)s31 +al28(n,g)al29 +s34(p,g)cl35 +o15(n,a)c12 +f18(n,p)o18 +li7(n,g)li8 +mg26(n,g)mg27 +ar35(p,g)k36 +ne20(a,g)mg24 +cl35(a,g)k39 +cl35(p,g)ar36 +cl32(a,g)k36 +cl32(p,g)ar33 +cl32(n,g)cl33 +s34(n,g)s35 +s32(a,g)ar36 +s32(p,g)cl33 +s32(n,g)s33 +s31(p,g)cl32 +t(,)he3 +p32(a,g)cl36 +p32(n,g)p33 +cl32(n,p)s32 +si30(p,g)p31 +si28(p,g)p29 +si26(p,g)p27 +si26(n,g)si27 +cl34(a,g)k38 +o17(p,g)f18 +p32(,)s32 +ne19(,)f19 +n14(a,n)f17 +al28(p,g)si29 +al27(a,g)p31 +al25(,)mg25 +al26(a,g)p30 +al26(n,g)al27 +li6(d,n)be7 +mg26(p,g)al27 +mg24(p,g)al25 +mg24(n,g)mg25 +mg23(a,g)si27 +mg23(p,g)al24 +mg23(n,g)mg24 +cl34(n,g)cl35 +mg22(p,g)al23 +mg22(n,g)mg23 +c14(n,g)c15 +he4(2a,)c12 +he3(n,g)he4 +al28(a,p)si31 +f15(n,g)f16 +na24(n,g)na25 +f15(a,p)ne18 +na23(a,g)al27 +na23(p,g)mg24 +na22(p,g)mg23 +na22(n,g)na23 +na21(p,g)mg22 +na21(n,g)na22 +si29(p,g)p30 +ne20(p,g)na21 +ne19(p,g)na20 +ne19(n,g)ne20 +ne18(p,)na19 +ne18(n,g)ne19 +f19(p,a)o16 +f18(a,g)na22 +f18(n,g)f19 +f17(n,g)f18 +f16(n,g)f17 +o17(a,g)ne21 +o16(n,g)o17 +o15(n,g)o16 +n15(n,g)n16 +n14(p,g)o15 +n13(n,g)n14 +c14(p,g)n15 +c13(p,g)n14 +c12(p,g)n13 +c11(p,g)n12 +n(p,g)d +be7(p,g)b8 +mg26(a,g)si30 +na24(a,g)al28 +he4(he3,g)be7 +t(p,g)he4 +he4(d,g)li6 +c12(a,g)o16 +ar35(,)cl35 +f18(p,g)ne19 +s31(n,a)si28 +p29(n,g)p30 +si28(a,g)s32 +o14(a,g)ne18 +c14(,)n14 +si26(a,g)s30 +al28(p,n)si28 +mg25(n,g)mg26 +c11(n,g)c12 +p(p,)d +ne18(,)f18 +si29(a,g)s33 +n14(p,n)o14 +o18(a,n)ne21 +be9(a,n)c12 +cl34(p,g)ar35 +mg22(n,p)na22 +s34(a,g)ar38 +p31(p,a)si28 +c13(n,g)c14 +n13(,)c13 +be7(n,p)li7 +si26(n,a)mg23 +mg25(a,g)si29 +n14(a,g)f18 +p30(n,p)si30 +f19(p,g)ne20 +f19(n,g)f20 +na22(n,p)ne22 +p30(n,g)p31 +p31(a,g)cl35 +na21(,)ne21 +d(d,g)he4 +n13(p,g)o14 +c12(n,g)c13 +al27(n,g)al28 +cl32(,a)si28 +mg23(,)na23 +he4(t,g)li7 +he4(a n,)be9 +ne21(n,g)ne22 +na22(,)ne22 +na24(p,g)mg25 +na21(a,g)al25 +c14(a,g)o18 +o18(a,g)ne22 +cl34(,)s34 +al28(a,g)p32 +si26(,)al26 +he4(p n,)li6 +s31(a,g)ar35 +f15(a,g)na19 +p29(a,g)cl33 +c11(a,p)n14 +be9(p,g)b10 +li6(a,g)b10 +li7(p,a)he4 +o15(a,g)ne19 +d(d,n)he3 +be9(p,a)li6 +cl32(,p)p31 +li6(n,g)li7 +f17(p,g)ne18 +na23(n,g)na24 +o17(n,a)c14 +li7(t,a 2n)he4 +b8(p,g)c9 +na22(a,g)al26 +o15(,)n15 +n14(n,g)n15 +f17(n,p)o17 +si30(n,g)si31 +si30(a,g)s34 +p31(n,g)p32 +na24(a,n)al27 +d(p,g)he3 +s31(,)p31 +ne19(a,g)mg23 +al26(,)mg26 +si28(n,g)si29 +t(t,2n)he4 +he6(,)li6 +li7(he3,p a n)he4 +f18(,)o18 +p29(a,p)s32 +c14(d,n)n15 +p29(n,p)si29 +be7(,)li7 +mg23(a,p)al26 +f19(a,g)na23 +al27(p,g)si28 +na22(n,a)f19 +b8(,a)he4 +mg24(a,g)si28 +c11(,)b11 +mg25(p,g)al26 +s31(n,g)s32 +si26(a,p)p29 +s34(a,n)ar37 +al28(,)si28 +li6(d,p)li7 +si29(n,g)si30 +cl35(n,g)cl36 +f15(n,p)o15 +na24(p,n)mg24 +o18(p,g)f19 +na24(,)mg24 +o16(a,g)ne20 +be9(n,g)be10 +ne21(a,g)mg25 +p30(a,g)cl34 +s32(n,a)si29 +al25(n,a)na22 +f17(,)o17 +p30(,)si30 +p29(,)si29 diff --git a/validation/vv/GridFireValidationSuite.py b/validation/vv/GridFireValidationSuite.py index eff9081c..f56ab902 100644 --- a/validation/vv/GridFireValidationSuite.py +++ b/validation/vv/GridFireValidationSuite.py @@ -1,5 +1,6 @@ from gridfire.policy import MainSequencePolicy, NetworkPolicy from gridfire.engine import DynamicEngine, GraphEngine, EngineTypes +from gridfire.solver import PointSolverContext from gridfire.type import NetIn from typing import Dict @@ -31,9 +32,10 @@ class SolarLikeStar_QSE_Suite(TestSuite): def __call__(self, pynucastro_compare: bool = False, pync_engine: str = "AdaptiveEngineView"): policy : MainSequencePolicy = MainSequencePolicy(self.composition) - engine : DynamicEngine = policy.construct() + construct= policy.construct() + context = PointSolverContext(construct.scratch_blob) netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) - self.evolve(engine, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) + self.evolve(construct.engine, context, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) class MetalEnhancedSolarLikeStar_QSE_Suite(TestSuite): def __init__(self): @@ -53,6 +55,7 @@ class MetalEnhancedSolarLikeStar_QSE_Suite(TestSuite): engine : GraphEngine = policy.construct() netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) self.evolve(engine, netIn) + class MetalDepletedSolarLikeStar_QSE_Suite(TestSuite): def __init__(self): initialComposition : Composition = init_composition(ZZs=-1) @@ -90,12 +93,96 @@ class SolarLikeStar_No_QSE_Suite(TestSuite): netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) self.evolve(engine, netIn) +class HotStar_QSE_Suite(TestSuite): + def __init__(self): + initialComposition : Composition = init_composition() + super().__init__( + name="HotStar_QSE", + description="GridFire simulation of a hot star over 1Gyr with QSE enabled.", + temp=2.5e7, + density=15, + tMax=1e15, + composition=initialComposition, + notes="Thermodynamically Static, MultiscalePartitioning Engine View, B(ish) star conditions" + ) + + def __call__(self, pynucastro_compare: bool = False, pync_engine: str = "AdaptiveEngineView"): + policy : MainSequencePolicy = MainSequencePolicy(self.composition) + construct= policy.construct() + context = PointSolverContext(construct.scratch_blob) + netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) + self.evolve(construct.engine, context, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) + +class CoolStar_QSE_Suite(TestSuite): + def __init__(self): + initialComposition : Composition = init_composition() + super().__init__( + name="CoolStar_QSE", + description="GridFire simulation of a hot star over 1Gyr with QSE enabled.", + temp=6e6, + density=750, + tMax=1e15, + composition=initialComposition, + notes="Thermodynamically Static, MultiscalePartitioning Engine View, M(ish) star conditions" + ) + + def __call__(self, pynucastro_compare: bool = False, pync_engine: str = "AdaptiveEngineView"): + policy : MainSequencePolicy = MainSequencePolicy(self.composition) + construct= policy.construct() + context = PointSolverContext(construct.scratch_blob) + netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) + self.evolve(construct.engine, context, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) + +class VeryCoolStar_QSE_Suite(TestSuite): + def __init__(self): + initialComposition : Composition = init_composition() + super().__init__( + name="VeryCoolStar_QSE", + description="GridFire simulation of a hot star over 1Gyr with QSE enabled.", + temp=4e6, + density=1000, + tMax=1e15, + composition=initialComposition, + notes="Thermodynamically Static, MultiscalePartitioning Engine View, M(ish) star conditions" + ) + + def __call__(self, pynucastro_compare: bool = False, pync_engine: str = "AdaptiveEngineView"): + policy : MainSequencePolicy = MainSequencePolicy(self.composition) + construct= policy.construct() + context = PointSolverContext(construct.scratch_blob) + netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) + self.evolve(construct.engine, context, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) + +class VeryHotStar_QSE_Suite(TestSuite): + def __init__(self): + initialComposition : Composition = init_composition() + super().__init__( + name="VeryHotStar_QSE", + description="GridFire simulation of a hot star over 1Gyr with QSE enabled.", + temp=4e7, + density=1, + tMax=1e15, + composition=initialComposition, + notes="Thermodynamically Static, MultiscalePartitioning Engine View, M(ish) star conditions" + ) + + def __call__(self, pynucastro_compare: bool = False, pync_engine: str = "AdaptiveEngineView"): + policy : MainSequencePolicy = MainSequencePolicy(self.composition) + construct= policy.construct() + context = PointSolverContext(construct.scratch_blob) + netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition) + self.evolve(construct.engine, context, netIn, pynucastro_compare = pynucastro_compare, engine_type=EngineNameToType[pync_engine.lower()]) + class ValidationSuites(Enum): SolarLikeStar_QSE = SolarLikeStar_QSE_Suite SolarLikeStar_No_QSE = SolarLikeStar_No_QSE_Suite MetalDepletedSolarLikeStar_QSE = MetalDepletedSolarLikeStar_QSE_Suite MetalEnhancedSolarLikeStar_QSE = MetalEnhancedSolarLikeStar_QSE_Suite + HotStar_QSE = HotStar_QSE_Suite + CoolStar_QSE = CoolStar_QSE_Suite + VeryCoolStar_QSE = VeryCoolStar_QSE_Suite + VeryHotStar_QSE = VeryHotStar_QSE_Suite if __name__ == "__main__": import argparse diff --git a/validation/vv/HotStar_QSE_rate_names_pynuc.txt b/validation/vv/HotStar_QSE_rate_names_pynuc.txt new file mode 100644 index 00000000..179db015 --- /dev/null +++ b/validation/vv/HotStar_QSE_rate_names_pynuc.txt @@ -0,0 +1,349 @@ +n(2p,g p)d +he4(2n,)he6 +be9(p,p a n)he4 +be7(he3,2p a)he4 +be7(t,p a n)he4 +b8(n,p a)he4 +be9(p,a d)he4 +li7(d,a n)he4 +he3(he3,2p)he4 +al25(n,g)al26 +ne20(n,g)ne21 +o18(n,g)o19 +mg22(,)na22 +mg24(p,a)na21 +p32(p,n)s32 +t(he3,p n)he4 +n15(a,g)f19 +ar35(a,g)ca39 +mg22(n,a)ne19 +p31(p,g)s32 +al25(a,g)p29 +c12(c12,a)ne20 +f16(a,g)na20 +cl35(n,p)s35 +o14(n,g)o15 +p29(p,g)s30 +o14(p,)f15 +d(n,g)t +ar35(n,a)s32 +ar35(n,p)cl35 +o16(p,g)f17 +f17(a,g)na21 +cl35(n,a)p32 +cl34(a,p)ar37 +c11(n,2a)he4 +cl34(n,a)p31 +cl34(n,p)s34 +ar35(a,p)k38 +n15(p,g)o16 +be7(d,p a)he4 +li6(p,g)be7 +s34(a,p)cl37 +cl35(p,a)s32 +s31(a,p)cl34 +f18(p,a)o15 +al25(p,g)si26 +p32(p,a)si29 +p32(n,p)si32 +p31(a,p)s34 +p30(a,p)s33 +o14(,)n14 +he3(,)t +ar35(n,g)ar36 +be7(a,g)c11 +al28(p,a)mg25 +al27(a,p)si30 +al27(a,n)p30 +al26(n,a)na23 +al26(n,p)mg26 +al25(n,p)mg25 +al25(a,p)si28 +al27(p,a)mg24 +p29(n,a)al26 +mg26(a,n)si29 +mg25(a,n)si28 +mg23(n,c12)c12 +mg23(n,a)ne20 +mg22(a,p)al25 +s31(n,p)p31 +na24(a,p)mg27 +na24(p,a)ne21 +na23(a,p)mg26 +na23(p,a)ne20 +na23(p,n)mg23 +na22(a,p)mg25 +na21(n,a)f18 +cl35(a,p)ar38 +cl32(n,a)p29 +ne21(a,n)mg24 +ne20(c12,a)si28 +ne20(c12,p)p31 +ne20(p,a)f17 +al26(a,p)si29 +ne19(a,p)na22 +ne18(a,p)na21 +ne18(n,a)o15 +ne18(n,p)f18 +be7(n,a)he4 +si26(n,p)al26 +f19(a,p)ne22 +f19(p,n)ne19 +f18(a,p)ne21 +o15(p,)f16 +f18(n,a)n15 +f15(n,a)n12 +cl32(a,p)ar35 +o18(p,a)n15 +o17(a,n)ne20 +o17(p,a)n14 +o16(o16,a)si28 +o16(o16,p)p31 +cl32(,)s32 +o16(o16,n)s31 +al28(a,n)p31 +o16(c12,a)mg24 +o16(c12,p)al27 +al26(p,g)si27 +o14(n,a)c11 +n15(p,a)c12 +n15(p,n)o15 +n14(n,p)c14 +n13(a,p)o16 +c13(a,n)o16 +c13(d,n)n14 +c13(p,n)n13 +c11(n,p)b11 +b8(a,p)c11 +li7(d,p)li8 +li6(n,t)he4 +li6(p,he3)he4 +t(he3,d)he4 +he3(d,p)he4 +he3(n,p)t +t(d,n)he4 +d(d,p)t +ne18(a,g)mg22 +f16(n,p)o16 +p32(p,g)s33 +na21(n,p)ne21 +o17(n,g)o18 +ne19(n,a)o16 +mg22(a,g)si26 +o14(a,p)f17 +f16(a,p)ne19 +ne20(c12,n)s31 +be9(t,n)b11 +he3(p,)he4 +ne21(p,g)na22 +c12(c12,p)na23 +li7(t,n)be9 +li7(a,g)b11 +f16(n,a)n13 +p30(p,g)s31 +al28(n,g)al29 +s34(p,g)cl35 +o15(n,a)c12 +f18(n,p)o18 +li7(n,g)li8 +mg26(n,g)mg27 +ar35(p,g)k36 +ne20(a,g)mg24 +cl35(a,g)k39 +cl35(p,g)ar36 +cl32(a,g)k36 +cl32(p,g)ar33 +cl32(n,g)cl33 +s34(n,g)s35 +s32(a,g)ar36 +s32(p,g)cl33 +s32(n,g)s33 +s31(p,g)cl32 +t(,)he3 +p32(a,g)cl36 +p32(n,g)p33 +cl32(n,p)s32 +si30(p,g)p31 +si28(p,g)p29 +si26(p,g)p27 +si26(n,g)si27 +cl34(a,g)k38 +o17(p,g)f18 +p32(,)s32 +ne19(,)f19 +n14(a,n)f17 +al28(p,g)si29 +al27(a,g)p31 +al25(,)mg25 +al26(a,g)p30 +al26(n,g)al27 +li6(d,n)be7 +mg26(p,g)al27 +mg24(p,g)al25 +mg24(n,g)mg25 +mg23(a,g)si27 +mg23(p,g)al24 +mg23(n,g)mg24 +cl34(n,g)cl35 +mg22(p,g)al23 +mg22(n,g)mg23 +c14(n,g)c15 +he4(2a,)c12 +he3(n,g)he4 +al28(a,p)si31 +f15(n,g)f16 +na24(n,g)na25 +f15(a,p)ne18 +na23(a,g)al27 +na23(p,g)mg24 +na22(p,g)mg23 +na22(n,g)na23 +na21(p,g)mg22 +na21(n,g)na22 +si29(p,g)p30 +ne20(p,g)na21 +ne19(p,g)na20 +ne19(n,g)ne20 +ne18(p,)na19 +ne18(n,g)ne19 +f19(p,a)o16 +f18(a,g)na22 +f18(n,g)f19 +f17(n,g)f18 +f16(n,g)f17 +o17(a,g)ne21 +o16(n,g)o17 +o15(n,g)o16 +n15(n,g)n16 +n14(p,g)o15 +n13(n,g)n14 +c14(p,g)n15 +c13(p,g)n14 +c12(p,g)n13 +c11(p,g)n12 +n(p,g)d +be7(p,g)b8 +mg26(a,g)si30 +na24(a,g)al28 +he4(he3,g)be7 +t(p,g)he4 +he4(d,g)li6 +c12(a,g)o16 +ar35(,)cl35 +f18(p,g)ne19 +s31(n,a)si28 +p29(n,g)p30 +si28(a,g)s32 +o14(a,g)ne18 +c14(,)n14 +si26(a,g)s30 +al28(p,n)si28 +mg25(n,g)mg26 +c11(n,g)c12 +p(p,)d +ne18(,)f18 +si29(a,g)s33 +n14(p,n)o14 +o18(a,n)ne21 +be9(a,n)c12 +cl34(p,g)ar35 +mg22(n,p)na22 +s34(a,g)ar38 +p31(p,a)si28 +c13(n,g)c14 +n13(,)c13 +be7(n,p)li7 +si26(n,a)mg23 +mg25(a,g)si29 +n14(a,g)f18 +p30(n,p)si30 +f19(p,g)ne20 +f19(n,g)f20 +na22(n,p)ne22 +p30(n,g)p31 +p31(a,g)cl35 +na21(,)ne21 +d(d,g)he4 +n13(p,g)o14 +c12(n,g)c13 +al27(n,g)al28 +cl32(,a)si28 +mg23(,)na23 +he4(t,g)li7 +he4(a n,)be9 +ne21(n,g)ne22 +na22(,)ne22 +na24(p,g)mg25 +na21(a,g)al25 +c14(a,g)o18 +o18(a,g)ne22 +cl34(,)s34 +al28(a,g)p32 +si26(,)al26 +he4(p n,)li6 +s31(a,g)ar35 +f15(a,g)na19 +p29(a,g)cl33 +c11(a,p)n14 +be9(p,g)b10 +li6(a,g)b10 +li7(p,a)he4 +o15(a,g)ne19 +d(d,n)he3 +be9(p,a)li6 +cl32(,p)p31 +li6(n,g)li7 +f17(p,g)ne18 +na23(n,g)na24 +o17(n,a)c14 +li7(t,a 2n)he4 +b8(p,g)c9 +na22(a,g)al26 +o15(,)n15 +n14(n,g)n15 +f17(n,p)o17 +si30(n,g)si31 +si30(a,g)s34 +p31(n,g)p32 +na24(a,n)al27 +d(p,g)he3 +s31(,)p31 +ne19(a,g)mg23 +al26(,)mg26 +si28(n,g)si29 +t(t,2n)he4 +he6(,)li6 +li7(he3,p a n)he4 +f18(,)o18 +p29(a,p)s32 +c14(d,n)n15 +p29(n,p)si29 +be7(,)li7 +mg23(a,p)al26 +f19(a,g)na23 +al27(p,g)si28 +na22(n,a)f19 +b8(,a)he4 +mg24(a,g)si28 +c11(,)b11 +mg25(p,g)al26 +s31(n,g)s32 +si26(a,p)p29 +s34(a,n)ar37 +al28(,)si28 +li6(d,p)li7 +si29(n,g)si30 +cl35(n,g)cl36 +f15(n,p)o15 +na24(p,n)mg24 +o18(p,g)f19 +na24(,)mg24 +o16(a,g)ne20 +be9(n,g)be10 +ne21(a,g)mg25 +p30(a,g)cl34 +s32(n,a)si29 +al25(n,a)na22 +f17(,)o17 +p30(,)si30 +p29(,)si29 diff --git a/validation/vv/SolarLikeStar_QSE_rate_names_pynuc.txt b/validation/vv/SolarLikeStar_QSE_rate_names_pynuc.txt new file mode 100644 index 00000000..179db015 --- /dev/null +++ b/validation/vv/SolarLikeStar_QSE_rate_names_pynuc.txt @@ -0,0 +1,349 @@ +n(2p,g p)d +he4(2n,)he6 +be9(p,p a n)he4 +be7(he3,2p a)he4 +be7(t,p a n)he4 +b8(n,p a)he4 +be9(p,a d)he4 +li7(d,a n)he4 +he3(he3,2p)he4 +al25(n,g)al26 +ne20(n,g)ne21 +o18(n,g)o19 +mg22(,)na22 +mg24(p,a)na21 +p32(p,n)s32 +t(he3,p n)he4 +n15(a,g)f19 +ar35(a,g)ca39 +mg22(n,a)ne19 +p31(p,g)s32 +al25(a,g)p29 +c12(c12,a)ne20 +f16(a,g)na20 +cl35(n,p)s35 +o14(n,g)o15 +p29(p,g)s30 +o14(p,)f15 +d(n,g)t +ar35(n,a)s32 +ar35(n,p)cl35 +o16(p,g)f17 +f17(a,g)na21 +cl35(n,a)p32 +cl34(a,p)ar37 +c11(n,2a)he4 +cl34(n,a)p31 +cl34(n,p)s34 +ar35(a,p)k38 +n15(p,g)o16 +be7(d,p a)he4 +li6(p,g)be7 +s34(a,p)cl37 +cl35(p,a)s32 +s31(a,p)cl34 +f18(p,a)o15 +al25(p,g)si26 +p32(p,a)si29 +p32(n,p)si32 +p31(a,p)s34 +p30(a,p)s33 +o14(,)n14 +he3(,)t +ar35(n,g)ar36 +be7(a,g)c11 +al28(p,a)mg25 +al27(a,p)si30 +al27(a,n)p30 +al26(n,a)na23 +al26(n,p)mg26 +al25(n,p)mg25 +al25(a,p)si28 +al27(p,a)mg24 +p29(n,a)al26 +mg26(a,n)si29 +mg25(a,n)si28 +mg23(n,c12)c12 +mg23(n,a)ne20 +mg22(a,p)al25 +s31(n,p)p31 +na24(a,p)mg27 +na24(p,a)ne21 +na23(a,p)mg26 +na23(p,a)ne20 +na23(p,n)mg23 +na22(a,p)mg25 +na21(n,a)f18 +cl35(a,p)ar38 +cl32(n,a)p29 +ne21(a,n)mg24 +ne20(c12,a)si28 +ne20(c12,p)p31 +ne20(p,a)f17 +al26(a,p)si29 +ne19(a,p)na22 +ne18(a,p)na21 +ne18(n,a)o15 +ne18(n,p)f18 +be7(n,a)he4 +si26(n,p)al26 +f19(a,p)ne22 +f19(p,n)ne19 +f18(a,p)ne21 +o15(p,)f16 +f18(n,a)n15 +f15(n,a)n12 +cl32(a,p)ar35 +o18(p,a)n15 +o17(a,n)ne20 +o17(p,a)n14 +o16(o16,a)si28 +o16(o16,p)p31 +cl32(,)s32 +o16(o16,n)s31 +al28(a,n)p31 +o16(c12,a)mg24 +o16(c12,p)al27 +al26(p,g)si27 +o14(n,a)c11 +n15(p,a)c12 +n15(p,n)o15 +n14(n,p)c14 +n13(a,p)o16 +c13(a,n)o16 +c13(d,n)n14 +c13(p,n)n13 +c11(n,p)b11 +b8(a,p)c11 +li7(d,p)li8 +li6(n,t)he4 +li6(p,he3)he4 +t(he3,d)he4 +he3(d,p)he4 +he3(n,p)t +t(d,n)he4 +d(d,p)t +ne18(a,g)mg22 +f16(n,p)o16 +p32(p,g)s33 +na21(n,p)ne21 +o17(n,g)o18 +ne19(n,a)o16 +mg22(a,g)si26 +o14(a,p)f17 +f16(a,p)ne19 +ne20(c12,n)s31 +be9(t,n)b11 +he3(p,)he4 +ne21(p,g)na22 +c12(c12,p)na23 +li7(t,n)be9 +li7(a,g)b11 +f16(n,a)n13 +p30(p,g)s31 +al28(n,g)al29 +s34(p,g)cl35 +o15(n,a)c12 +f18(n,p)o18 +li7(n,g)li8 +mg26(n,g)mg27 +ar35(p,g)k36 +ne20(a,g)mg24 +cl35(a,g)k39 +cl35(p,g)ar36 +cl32(a,g)k36 +cl32(p,g)ar33 +cl32(n,g)cl33 +s34(n,g)s35 +s32(a,g)ar36 +s32(p,g)cl33 +s32(n,g)s33 +s31(p,g)cl32 +t(,)he3 +p32(a,g)cl36 +p32(n,g)p33 +cl32(n,p)s32 +si30(p,g)p31 +si28(p,g)p29 +si26(p,g)p27 +si26(n,g)si27 +cl34(a,g)k38 +o17(p,g)f18 +p32(,)s32 +ne19(,)f19 +n14(a,n)f17 +al28(p,g)si29 +al27(a,g)p31 +al25(,)mg25 +al26(a,g)p30 +al26(n,g)al27 +li6(d,n)be7 +mg26(p,g)al27 +mg24(p,g)al25 +mg24(n,g)mg25 +mg23(a,g)si27 +mg23(p,g)al24 +mg23(n,g)mg24 +cl34(n,g)cl35 +mg22(p,g)al23 +mg22(n,g)mg23 +c14(n,g)c15 +he4(2a,)c12 +he3(n,g)he4 +al28(a,p)si31 +f15(n,g)f16 +na24(n,g)na25 +f15(a,p)ne18 +na23(a,g)al27 +na23(p,g)mg24 +na22(p,g)mg23 +na22(n,g)na23 +na21(p,g)mg22 +na21(n,g)na22 +si29(p,g)p30 +ne20(p,g)na21 +ne19(p,g)na20 +ne19(n,g)ne20 +ne18(p,)na19 +ne18(n,g)ne19 +f19(p,a)o16 +f18(a,g)na22 +f18(n,g)f19 +f17(n,g)f18 +f16(n,g)f17 +o17(a,g)ne21 +o16(n,g)o17 +o15(n,g)o16 +n15(n,g)n16 +n14(p,g)o15 +n13(n,g)n14 +c14(p,g)n15 +c13(p,g)n14 +c12(p,g)n13 +c11(p,g)n12 +n(p,g)d +be7(p,g)b8 +mg26(a,g)si30 +na24(a,g)al28 +he4(he3,g)be7 +t(p,g)he4 +he4(d,g)li6 +c12(a,g)o16 +ar35(,)cl35 +f18(p,g)ne19 +s31(n,a)si28 +p29(n,g)p30 +si28(a,g)s32 +o14(a,g)ne18 +c14(,)n14 +si26(a,g)s30 +al28(p,n)si28 +mg25(n,g)mg26 +c11(n,g)c12 +p(p,)d +ne18(,)f18 +si29(a,g)s33 +n14(p,n)o14 +o18(a,n)ne21 +be9(a,n)c12 +cl34(p,g)ar35 +mg22(n,p)na22 +s34(a,g)ar38 +p31(p,a)si28 +c13(n,g)c14 +n13(,)c13 +be7(n,p)li7 +si26(n,a)mg23 +mg25(a,g)si29 +n14(a,g)f18 +p30(n,p)si30 +f19(p,g)ne20 +f19(n,g)f20 +na22(n,p)ne22 +p30(n,g)p31 +p31(a,g)cl35 +na21(,)ne21 +d(d,g)he4 +n13(p,g)o14 +c12(n,g)c13 +al27(n,g)al28 +cl32(,a)si28 +mg23(,)na23 +he4(t,g)li7 +he4(a n,)be9 +ne21(n,g)ne22 +na22(,)ne22 +na24(p,g)mg25 +na21(a,g)al25 +c14(a,g)o18 +o18(a,g)ne22 +cl34(,)s34 +al28(a,g)p32 +si26(,)al26 +he4(p n,)li6 +s31(a,g)ar35 +f15(a,g)na19 +p29(a,g)cl33 +c11(a,p)n14 +be9(p,g)b10 +li6(a,g)b10 +li7(p,a)he4 +o15(a,g)ne19 +d(d,n)he3 +be9(p,a)li6 +cl32(,p)p31 +li6(n,g)li7 +f17(p,g)ne18 +na23(n,g)na24 +o17(n,a)c14 +li7(t,a 2n)he4 +b8(p,g)c9 +na22(a,g)al26 +o15(,)n15 +n14(n,g)n15 +f17(n,p)o17 +si30(n,g)si31 +si30(a,g)s34 +p31(n,g)p32 +na24(a,n)al27 +d(p,g)he3 +s31(,)p31 +ne19(a,g)mg23 +al26(,)mg26 +si28(n,g)si29 +t(t,2n)he4 +he6(,)li6 +li7(he3,p a n)he4 +f18(,)o18 +p29(a,p)s32 +c14(d,n)n15 +p29(n,p)si29 +be7(,)li7 +mg23(a,p)al26 +f19(a,g)na23 +al27(p,g)si28 +na22(n,a)f19 +b8(,a)he4 +mg24(a,g)si28 +c11(,)b11 +mg25(p,g)al26 +s31(n,g)s32 +si26(a,p)p29 +s34(a,n)ar37 +al28(,)si28 +li6(d,p)li7 +si29(n,g)si30 +cl35(n,g)cl36 +f15(n,p)o15 +na24(p,n)mg24 +o18(p,g)f19 +na24(,)mg24 +o16(a,g)ne20 +be9(n,g)be10 +ne21(a,g)mg25 +p30(a,g)cl34 +s32(n,a)si29 +al25(n,a)na22 +f17(,)o17 +p30(,)si30 +p29(,)si29 diff --git a/validation/vv/VeryCoolStar_QSE_rate_names_pynuc.txt b/validation/vv/VeryCoolStar_QSE_rate_names_pynuc.txt new file mode 100644 index 00000000..179db015 --- /dev/null +++ b/validation/vv/VeryCoolStar_QSE_rate_names_pynuc.txt @@ -0,0 +1,349 @@ +n(2p,g p)d +he4(2n,)he6 +be9(p,p a n)he4 +be7(he3,2p a)he4 +be7(t,p a n)he4 +b8(n,p a)he4 +be9(p,a d)he4 +li7(d,a n)he4 +he3(he3,2p)he4 +al25(n,g)al26 +ne20(n,g)ne21 +o18(n,g)o19 +mg22(,)na22 +mg24(p,a)na21 +p32(p,n)s32 +t(he3,p n)he4 +n15(a,g)f19 +ar35(a,g)ca39 +mg22(n,a)ne19 +p31(p,g)s32 +al25(a,g)p29 +c12(c12,a)ne20 +f16(a,g)na20 +cl35(n,p)s35 +o14(n,g)o15 +p29(p,g)s30 +o14(p,)f15 +d(n,g)t +ar35(n,a)s32 +ar35(n,p)cl35 +o16(p,g)f17 +f17(a,g)na21 +cl35(n,a)p32 +cl34(a,p)ar37 +c11(n,2a)he4 +cl34(n,a)p31 +cl34(n,p)s34 +ar35(a,p)k38 +n15(p,g)o16 +be7(d,p a)he4 +li6(p,g)be7 +s34(a,p)cl37 +cl35(p,a)s32 +s31(a,p)cl34 +f18(p,a)o15 +al25(p,g)si26 +p32(p,a)si29 +p32(n,p)si32 +p31(a,p)s34 +p30(a,p)s33 +o14(,)n14 +he3(,)t +ar35(n,g)ar36 +be7(a,g)c11 +al28(p,a)mg25 +al27(a,p)si30 +al27(a,n)p30 +al26(n,a)na23 +al26(n,p)mg26 +al25(n,p)mg25 +al25(a,p)si28 +al27(p,a)mg24 +p29(n,a)al26 +mg26(a,n)si29 +mg25(a,n)si28 +mg23(n,c12)c12 +mg23(n,a)ne20 +mg22(a,p)al25 +s31(n,p)p31 +na24(a,p)mg27 +na24(p,a)ne21 +na23(a,p)mg26 +na23(p,a)ne20 +na23(p,n)mg23 +na22(a,p)mg25 +na21(n,a)f18 +cl35(a,p)ar38 +cl32(n,a)p29 +ne21(a,n)mg24 +ne20(c12,a)si28 +ne20(c12,p)p31 +ne20(p,a)f17 +al26(a,p)si29 +ne19(a,p)na22 +ne18(a,p)na21 +ne18(n,a)o15 +ne18(n,p)f18 +be7(n,a)he4 +si26(n,p)al26 +f19(a,p)ne22 +f19(p,n)ne19 +f18(a,p)ne21 +o15(p,)f16 +f18(n,a)n15 +f15(n,a)n12 +cl32(a,p)ar35 +o18(p,a)n15 +o17(a,n)ne20 +o17(p,a)n14 +o16(o16,a)si28 +o16(o16,p)p31 +cl32(,)s32 +o16(o16,n)s31 +al28(a,n)p31 +o16(c12,a)mg24 +o16(c12,p)al27 +al26(p,g)si27 +o14(n,a)c11 +n15(p,a)c12 +n15(p,n)o15 +n14(n,p)c14 +n13(a,p)o16 +c13(a,n)o16 +c13(d,n)n14 +c13(p,n)n13 +c11(n,p)b11 +b8(a,p)c11 +li7(d,p)li8 +li6(n,t)he4 +li6(p,he3)he4 +t(he3,d)he4 +he3(d,p)he4 +he3(n,p)t +t(d,n)he4 +d(d,p)t +ne18(a,g)mg22 +f16(n,p)o16 +p32(p,g)s33 +na21(n,p)ne21 +o17(n,g)o18 +ne19(n,a)o16 +mg22(a,g)si26 +o14(a,p)f17 +f16(a,p)ne19 +ne20(c12,n)s31 +be9(t,n)b11 +he3(p,)he4 +ne21(p,g)na22 +c12(c12,p)na23 +li7(t,n)be9 +li7(a,g)b11 +f16(n,a)n13 +p30(p,g)s31 +al28(n,g)al29 +s34(p,g)cl35 +o15(n,a)c12 +f18(n,p)o18 +li7(n,g)li8 +mg26(n,g)mg27 +ar35(p,g)k36 +ne20(a,g)mg24 +cl35(a,g)k39 +cl35(p,g)ar36 +cl32(a,g)k36 +cl32(p,g)ar33 +cl32(n,g)cl33 +s34(n,g)s35 +s32(a,g)ar36 +s32(p,g)cl33 +s32(n,g)s33 +s31(p,g)cl32 +t(,)he3 +p32(a,g)cl36 +p32(n,g)p33 +cl32(n,p)s32 +si30(p,g)p31 +si28(p,g)p29 +si26(p,g)p27 +si26(n,g)si27 +cl34(a,g)k38 +o17(p,g)f18 +p32(,)s32 +ne19(,)f19 +n14(a,n)f17 +al28(p,g)si29 +al27(a,g)p31 +al25(,)mg25 +al26(a,g)p30 +al26(n,g)al27 +li6(d,n)be7 +mg26(p,g)al27 +mg24(p,g)al25 +mg24(n,g)mg25 +mg23(a,g)si27 +mg23(p,g)al24 +mg23(n,g)mg24 +cl34(n,g)cl35 +mg22(p,g)al23 +mg22(n,g)mg23 +c14(n,g)c15 +he4(2a,)c12 +he3(n,g)he4 +al28(a,p)si31 +f15(n,g)f16 +na24(n,g)na25 +f15(a,p)ne18 +na23(a,g)al27 +na23(p,g)mg24 +na22(p,g)mg23 +na22(n,g)na23 +na21(p,g)mg22 +na21(n,g)na22 +si29(p,g)p30 +ne20(p,g)na21 +ne19(p,g)na20 +ne19(n,g)ne20 +ne18(p,)na19 +ne18(n,g)ne19 +f19(p,a)o16 +f18(a,g)na22 +f18(n,g)f19 +f17(n,g)f18 +f16(n,g)f17 +o17(a,g)ne21 +o16(n,g)o17 +o15(n,g)o16 +n15(n,g)n16 +n14(p,g)o15 +n13(n,g)n14 +c14(p,g)n15 +c13(p,g)n14 +c12(p,g)n13 +c11(p,g)n12 +n(p,g)d +be7(p,g)b8 +mg26(a,g)si30 +na24(a,g)al28 +he4(he3,g)be7 +t(p,g)he4 +he4(d,g)li6 +c12(a,g)o16 +ar35(,)cl35 +f18(p,g)ne19 +s31(n,a)si28 +p29(n,g)p30 +si28(a,g)s32 +o14(a,g)ne18 +c14(,)n14 +si26(a,g)s30 +al28(p,n)si28 +mg25(n,g)mg26 +c11(n,g)c12 +p(p,)d +ne18(,)f18 +si29(a,g)s33 +n14(p,n)o14 +o18(a,n)ne21 +be9(a,n)c12 +cl34(p,g)ar35 +mg22(n,p)na22 +s34(a,g)ar38 +p31(p,a)si28 +c13(n,g)c14 +n13(,)c13 +be7(n,p)li7 +si26(n,a)mg23 +mg25(a,g)si29 +n14(a,g)f18 +p30(n,p)si30 +f19(p,g)ne20 +f19(n,g)f20 +na22(n,p)ne22 +p30(n,g)p31 +p31(a,g)cl35 +na21(,)ne21 +d(d,g)he4 +n13(p,g)o14 +c12(n,g)c13 +al27(n,g)al28 +cl32(,a)si28 +mg23(,)na23 +he4(t,g)li7 +he4(a n,)be9 +ne21(n,g)ne22 +na22(,)ne22 +na24(p,g)mg25 +na21(a,g)al25 +c14(a,g)o18 +o18(a,g)ne22 +cl34(,)s34 +al28(a,g)p32 +si26(,)al26 +he4(p n,)li6 +s31(a,g)ar35 +f15(a,g)na19 +p29(a,g)cl33 +c11(a,p)n14 +be9(p,g)b10 +li6(a,g)b10 +li7(p,a)he4 +o15(a,g)ne19 +d(d,n)he3 +be9(p,a)li6 +cl32(,p)p31 +li6(n,g)li7 +f17(p,g)ne18 +na23(n,g)na24 +o17(n,a)c14 +li7(t,a 2n)he4 +b8(p,g)c9 +na22(a,g)al26 +o15(,)n15 +n14(n,g)n15 +f17(n,p)o17 +si30(n,g)si31 +si30(a,g)s34 +p31(n,g)p32 +na24(a,n)al27 +d(p,g)he3 +s31(,)p31 +ne19(a,g)mg23 +al26(,)mg26 +si28(n,g)si29 +t(t,2n)he4 +he6(,)li6 +li7(he3,p a n)he4 +f18(,)o18 +p29(a,p)s32 +c14(d,n)n15 +p29(n,p)si29 +be7(,)li7 +mg23(a,p)al26 +f19(a,g)na23 +al27(p,g)si28 +na22(n,a)f19 +b8(,a)he4 +mg24(a,g)si28 +c11(,)b11 +mg25(p,g)al26 +s31(n,g)s32 +si26(a,p)p29 +s34(a,n)ar37 +al28(,)si28 +li6(d,p)li7 +si29(n,g)si30 +cl35(n,g)cl36 +f15(n,p)o15 +na24(p,n)mg24 +o18(p,g)f19 +na24(,)mg24 +o16(a,g)ne20 +be9(n,g)be10 +ne21(a,g)mg25 +p30(a,g)cl34 +s32(n,a)si29 +al25(n,a)na22 +f17(,)o17 +p30(,)si30 +p29(,)si29 diff --git a/validation/vv/VeryHotStar_QSE_rate_names_pynuc.txt b/validation/vv/VeryHotStar_QSE_rate_names_pynuc.txt new file mode 100644 index 00000000..179db015 --- /dev/null +++ b/validation/vv/VeryHotStar_QSE_rate_names_pynuc.txt @@ -0,0 +1,349 @@ +n(2p,g p)d +he4(2n,)he6 +be9(p,p a n)he4 +be7(he3,2p a)he4 +be7(t,p a n)he4 +b8(n,p a)he4 +be9(p,a d)he4 +li7(d,a n)he4 +he3(he3,2p)he4 +al25(n,g)al26 +ne20(n,g)ne21 +o18(n,g)o19 +mg22(,)na22 +mg24(p,a)na21 +p32(p,n)s32 +t(he3,p n)he4 +n15(a,g)f19 +ar35(a,g)ca39 +mg22(n,a)ne19 +p31(p,g)s32 +al25(a,g)p29 +c12(c12,a)ne20 +f16(a,g)na20 +cl35(n,p)s35 +o14(n,g)o15 +p29(p,g)s30 +o14(p,)f15 +d(n,g)t +ar35(n,a)s32 +ar35(n,p)cl35 +o16(p,g)f17 +f17(a,g)na21 +cl35(n,a)p32 +cl34(a,p)ar37 +c11(n,2a)he4 +cl34(n,a)p31 +cl34(n,p)s34 +ar35(a,p)k38 +n15(p,g)o16 +be7(d,p a)he4 +li6(p,g)be7 +s34(a,p)cl37 +cl35(p,a)s32 +s31(a,p)cl34 +f18(p,a)o15 +al25(p,g)si26 +p32(p,a)si29 +p32(n,p)si32 +p31(a,p)s34 +p30(a,p)s33 +o14(,)n14 +he3(,)t +ar35(n,g)ar36 +be7(a,g)c11 +al28(p,a)mg25 +al27(a,p)si30 +al27(a,n)p30 +al26(n,a)na23 +al26(n,p)mg26 +al25(n,p)mg25 +al25(a,p)si28 +al27(p,a)mg24 +p29(n,a)al26 +mg26(a,n)si29 +mg25(a,n)si28 +mg23(n,c12)c12 +mg23(n,a)ne20 +mg22(a,p)al25 +s31(n,p)p31 +na24(a,p)mg27 +na24(p,a)ne21 +na23(a,p)mg26 +na23(p,a)ne20 +na23(p,n)mg23 +na22(a,p)mg25 +na21(n,a)f18 +cl35(a,p)ar38 +cl32(n,a)p29 +ne21(a,n)mg24 +ne20(c12,a)si28 +ne20(c12,p)p31 +ne20(p,a)f17 +al26(a,p)si29 +ne19(a,p)na22 +ne18(a,p)na21 +ne18(n,a)o15 +ne18(n,p)f18 +be7(n,a)he4 +si26(n,p)al26 +f19(a,p)ne22 +f19(p,n)ne19 +f18(a,p)ne21 +o15(p,)f16 +f18(n,a)n15 +f15(n,a)n12 +cl32(a,p)ar35 +o18(p,a)n15 +o17(a,n)ne20 +o17(p,a)n14 +o16(o16,a)si28 +o16(o16,p)p31 +cl32(,)s32 +o16(o16,n)s31 +al28(a,n)p31 +o16(c12,a)mg24 +o16(c12,p)al27 +al26(p,g)si27 +o14(n,a)c11 +n15(p,a)c12 +n15(p,n)o15 +n14(n,p)c14 +n13(a,p)o16 +c13(a,n)o16 +c13(d,n)n14 +c13(p,n)n13 +c11(n,p)b11 +b8(a,p)c11 +li7(d,p)li8 +li6(n,t)he4 +li6(p,he3)he4 +t(he3,d)he4 +he3(d,p)he4 +he3(n,p)t +t(d,n)he4 +d(d,p)t +ne18(a,g)mg22 +f16(n,p)o16 +p32(p,g)s33 +na21(n,p)ne21 +o17(n,g)o18 +ne19(n,a)o16 +mg22(a,g)si26 +o14(a,p)f17 +f16(a,p)ne19 +ne20(c12,n)s31 +be9(t,n)b11 +he3(p,)he4 +ne21(p,g)na22 +c12(c12,p)na23 +li7(t,n)be9 +li7(a,g)b11 +f16(n,a)n13 +p30(p,g)s31 +al28(n,g)al29 +s34(p,g)cl35 +o15(n,a)c12 +f18(n,p)o18 +li7(n,g)li8 +mg26(n,g)mg27 +ar35(p,g)k36 +ne20(a,g)mg24 +cl35(a,g)k39 +cl35(p,g)ar36 +cl32(a,g)k36 +cl32(p,g)ar33 +cl32(n,g)cl33 +s34(n,g)s35 +s32(a,g)ar36 +s32(p,g)cl33 +s32(n,g)s33 +s31(p,g)cl32 +t(,)he3 +p32(a,g)cl36 +p32(n,g)p33 +cl32(n,p)s32 +si30(p,g)p31 +si28(p,g)p29 +si26(p,g)p27 +si26(n,g)si27 +cl34(a,g)k38 +o17(p,g)f18 +p32(,)s32 +ne19(,)f19 +n14(a,n)f17 +al28(p,g)si29 +al27(a,g)p31 +al25(,)mg25 +al26(a,g)p30 +al26(n,g)al27 +li6(d,n)be7 +mg26(p,g)al27 +mg24(p,g)al25 +mg24(n,g)mg25 +mg23(a,g)si27 +mg23(p,g)al24 +mg23(n,g)mg24 +cl34(n,g)cl35 +mg22(p,g)al23 +mg22(n,g)mg23 +c14(n,g)c15 +he4(2a,)c12 +he3(n,g)he4 +al28(a,p)si31 +f15(n,g)f16 +na24(n,g)na25 +f15(a,p)ne18 +na23(a,g)al27 +na23(p,g)mg24 +na22(p,g)mg23 +na22(n,g)na23 +na21(p,g)mg22 +na21(n,g)na22 +si29(p,g)p30 +ne20(p,g)na21 +ne19(p,g)na20 +ne19(n,g)ne20 +ne18(p,)na19 +ne18(n,g)ne19 +f19(p,a)o16 +f18(a,g)na22 +f18(n,g)f19 +f17(n,g)f18 +f16(n,g)f17 +o17(a,g)ne21 +o16(n,g)o17 +o15(n,g)o16 +n15(n,g)n16 +n14(p,g)o15 +n13(n,g)n14 +c14(p,g)n15 +c13(p,g)n14 +c12(p,g)n13 +c11(p,g)n12 +n(p,g)d +be7(p,g)b8 +mg26(a,g)si30 +na24(a,g)al28 +he4(he3,g)be7 +t(p,g)he4 +he4(d,g)li6 +c12(a,g)o16 +ar35(,)cl35 +f18(p,g)ne19 +s31(n,a)si28 +p29(n,g)p30 +si28(a,g)s32 +o14(a,g)ne18 +c14(,)n14 +si26(a,g)s30 +al28(p,n)si28 +mg25(n,g)mg26 +c11(n,g)c12 +p(p,)d +ne18(,)f18 +si29(a,g)s33 +n14(p,n)o14 +o18(a,n)ne21 +be9(a,n)c12 +cl34(p,g)ar35 +mg22(n,p)na22 +s34(a,g)ar38 +p31(p,a)si28 +c13(n,g)c14 +n13(,)c13 +be7(n,p)li7 +si26(n,a)mg23 +mg25(a,g)si29 +n14(a,g)f18 +p30(n,p)si30 +f19(p,g)ne20 +f19(n,g)f20 +na22(n,p)ne22 +p30(n,g)p31 +p31(a,g)cl35 +na21(,)ne21 +d(d,g)he4 +n13(p,g)o14 +c12(n,g)c13 +al27(n,g)al28 +cl32(,a)si28 +mg23(,)na23 +he4(t,g)li7 +he4(a n,)be9 +ne21(n,g)ne22 +na22(,)ne22 +na24(p,g)mg25 +na21(a,g)al25 +c14(a,g)o18 +o18(a,g)ne22 +cl34(,)s34 +al28(a,g)p32 +si26(,)al26 +he4(p n,)li6 +s31(a,g)ar35 +f15(a,g)na19 +p29(a,g)cl33 +c11(a,p)n14 +be9(p,g)b10 +li6(a,g)b10 +li7(p,a)he4 +o15(a,g)ne19 +d(d,n)he3 +be9(p,a)li6 +cl32(,p)p31 +li6(n,g)li7 +f17(p,g)ne18 +na23(n,g)na24 +o17(n,a)c14 +li7(t,a 2n)he4 +b8(p,g)c9 +na22(a,g)al26 +o15(,)n15 +n14(n,g)n15 +f17(n,p)o17 +si30(n,g)si31 +si30(a,g)s34 +p31(n,g)p32 +na24(a,n)al27 +d(p,g)he3 +s31(,)p31 +ne19(a,g)mg23 +al26(,)mg26 +si28(n,g)si29 +t(t,2n)he4 +he6(,)li6 +li7(he3,p a n)he4 +f18(,)o18 +p29(a,p)s32 +c14(d,n)n15 +p29(n,p)si29 +be7(,)li7 +mg23(a,p)al26 +f19(a,g)na23 +al27(p,g)si28 +na22(n,a)f19 +b8(,a)he4 +mg24(a,g)si28 +c11(,)b11 +mg25(p,g)al26 +s31(n,g)s32 +si26(a,p)p29 +s34(a,n)ar37 +al28(,)si28 +li6(d,p)li7 +si29(n,g)si30 +cl35(n,g)cl36 +f15(n,p)o15 +na24(p,n)mg24 +o18(p,g)f19 +na24(,)mg24 +o16(a,g)ne20 +be9(n,g)be10 +ne21(a,g)mg25 +p30(a,g)cl34 +s32(n,a)si29 +al25(n,a)na22 +f17(,)o17 +p30(,)si30 +p29(,)si29 diff --git a/validation/vv/logger.py b/validation/vv/logger.py index cf7e8cc2..dd264208 100644 --- a/validation/vv/logger.py +++ b/validation/vv/logger.py @@ -6,7 +6,8 @@ from datetime import datetime import os import sys -from gridfire.solver import CVODETimestepContext +from gridfire.solver import PointSolverTimestepContext +from gridfire._gridfire.engine.scratchpads import StateBlob import gridfire class LogEntries(Enum): @@ -23,15 +24,16 @@ class StepLogger: self.num_steps : int = 0 self.steps : List[Dict[LogEntries, Any]] = [] - def log_step(self, ctx : CVODETimestepContext): + def log_step(self, ctx: PointSolverTimestepContext): comp_data: Dict[str, SupportsFloat] = {} - for species in ctx.engine.getNetworkSpecies(): - sid = ctx.engine.getSpeciesIndex(species) + for species in ctx.engine.getNetworkSpecies(ctx.state_ctx): + sid = ctx.engine.getSpeciesIndex(ctx.state_ctx, species) comp_data[species.name()] = ctx.state[sid] entry : Dict[LogEntries, Any] = { LogEntries.Step: ctx.num_steps, LogEntries.t: ctx.t, LogEntries.dt: ctx.dt, + LogEntries.eps: ctx.state[-1], LogEntries.Composition: comp_data, } self.steps.append(entry) @@ -43,6 +45,7 @@ class StepLogger: LogEntries.Step.value: step[LogEntries.Step], LogEntries.t.value: step[LogEntries.t], LogEntries.dt.value: step[LogEntries.dt], + LogEntries.eps.value: step[LogEntries.eps], LogEntries.Composition.value: step[LogEntries.Composition], } for step in self.steps @@ -74,4 +77,4 @@ class StepLogger: "FinalTime": final_step[LogEntries.t], "FinalComposition": final_step[LogEntries.Composition], } - return summary_data \ No newline at end of file + return summary_data diff --git a/validation/vv/testsuite.py b/validation/vv/testsuite.py index d698ca9c..e711cbc7 100644 --- a/validation/vv/testsuite.py +++ b/validation/vv/testsuite.py @@ -112,11 +112,11 @@ class TestSuite(ABC): self.composition : Composition = composition self.notes : str = notes - def evolve_pynucastro(self, engine: DynamicEngine): + def evolve_pynucastro(self, engine: DynamicEngine, ctx: PointSolverContext): print("Evolution complete. Now building equivalent pynucastro network...") # Build equivalent pynucastro network for comparison reaclib_library : pyna.ReacLibLibrary = pyna.ReacLibLibrary() - rate_names = [r.id().replace("e+","").replace("e-","").replace(", ", ",") for r in engine.getNetworkReactions()] + rate_names = [r.id().replace("e+","").replace("e-","").replace(", ", ",") for r in engine.getNetworkReactions(ctx.engine_ctx)] with open(f"{self.name}_rate_names_pynuc.txt", "w") as f: for r_name in rate_names: @@ -225,7 +225,7 @@ class TestSuite(ABC): solver : PointSolver = PointSolver(engine) stepLogger : StepLogger = StepLogger() - solver_ctx.callback(lambda ctx: stepLogger.log_step(ctx)) + solver_ctx.callback = lambda ctx: stepLogger.log_step(ctx) startTime = time.time() try: @@ -265,16 +265,16 @@ class TestSuite(ABC): if engine_type is not None: if engine_type == EngineTypes.ADAPTIVE_ENGINE_VIEW: print("Pynucastro comparison using AdaptiveEngineView...") - self.evolve_pynucastro(engine) + self.evolve_pynucastro(engine, solver_ctx) elif engine_type == EngineTypes.MULTISCALE_PARTITIONING_ENGINE_VIEW: print("Pynucastro comparison using MultiscalePartitioningEngineView...") graphEngine : GraphEngine = GraphEngine(self.composition, depth=3) multiScaleEngine : MultiscalePartitioningEngineView = MultiscalePartitioningEngineView(graphEngine) - self.evolve_pynucastro(multiScaleEngine) + self.evolve_pynucastro(multiScaleEngine, solver_ctx) elif engine_type == EngineTypes.GRAPH_ENGINE: print("Pynucastro comparison using GraphEngine...") graphEngine : GraphEngine = GraphEngine(self.composition, depth=3) - self.evolve_pynucastro(graphEngine) + self.evolve_pynucastro(graphEngine, solver_ctx) else: print(f"Pynucastro comparison not implemented for engine type: {engine_type}")