test(vv): Added more scripts to verify GridFire behavior

This commit is contained in:
2026-04-13 07:18:08 -04:00
parent 84ff182717
commit c311e4afbd
16 changed files with 1968 additions and 181 deletions

View File

@@ -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

Binary file not shown.

View File

@@ -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)

View File

@@ -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]] = []

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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}")