Files

263 lines
68 KiB
Plaintext
Raw Permalink Normal View History

{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-04-14T14:53:20.072496Z",
"start_time": "2026-04-14T14:53:19.712799Z"
}
},
"source": [
"%config InlineBackend.figure_format = 'retina'\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from plot import discover_runs, load_run_data, get_pynuc_eps\n",
"\n",
"from scipy.interpolate import interp1d\n",
"\n",
"plt.style.use(\"../ManuscriptFigures/utils/pub.mplstyle\")"
],
"outputs": [],
"execution_count": 2
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T14:53:22.408612Z",
"start_time": "2026-04-14T14:53:22.393261Z"
}
},
"cell_type": "code",
"source": "base_dir = \"GF_Validation_Output\"",
"id": "6b80320acc86fb9e",
"outputs": [],
"execution_count": 3
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T14:53:23.299257Z",
"start_time": "2026-04-14T14:53:23.282646Z"
}
},
"cell_type": "code",
"source": [
"def collect_species(steps, sp):\n",
" abundances = []\n",
" for step in steps:\n",
" abundances.append(step[\"Composition\"][sp])\n",
" return np.array(abundances)\n",
"\n",
"def collect_time(steps):\n",
" times = []\n",
" for step in steps:\n",
" times.append(step[\"t\"])\n",
" return np.array(times)"
],
"id": "8d4660c043840d00",
"outputs": [],
"execution_count": 4
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T16:13:37.752792Z",
"start_time": "2026-04-14T16:13:37.735551Z"
}
},
"cell_type": "code",
"source": "runs = discover_runs(base_dir)",
"id": "ff332b29e27a5d75",
"outputs": [],
"execution_count": 38
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T16:14:42.864567Z",
"start_time": "2026-04-14T16:14:42.851953Z"
}
},
"cell_type": "code",
"source": [
"def plot_run_abundance(run_id, species=(\"H-1\", \"He-3\", \"He-4\", \"C-12\", \"N-14\", \"O-16\")):\n",
" fig, axs = plt.subplots(2, 1, figsize=(10, 10), sharex=True, gridspec_kw={'hspace': 0})\n",
" data = load_run_data(base_dir, run_id)\n",
"\n",
" for spID, sp in enumerate(species):\n",
" gf_t, gf_y = collect_time(data[0][\"Steps\"]), collect_species(data[0][\"Steps\"], sp)\n",
" py_t, py_y = collect_time(data[1][\"Steps\"]), collect_species(data[1][\"Steps\"], sp)\n",
"\n",
" axs[0].loglog(gf_t, gf_y, color=f\"C{spID}\", label=f\"GF {sp}\")\n",
" axs[0].loglog(py_t, py_y, color=f\"C{spID}\", linestyle=\"dashed\")\n",
"\n",
" el = sp.split('-')[0]\n",
" A = sp.split('-')[1]\n",
" axs[0].text(gf_t[0], gf_y[0]*0.45, rf\"$^{{{A}}}${el}\", color=f\"C{spID}\", fontsize=12)\n",
"\n",
" f_pync = interp1d(py_t, py_y, fill_value=\"extrapolate\", bounds_error=False)\n",
" f_gf = interp1d(gf_t, gf_y, fill_value=\"extrapolate\", bounds_error=False)\n",
"\n",
" t_common = np.logspace(np.log10(max(min(gf_t), min(py_t))), np.log10(min(max(gf_t), max(py_t))), 100)\n",
" py_interp = f_pync(t_common)\n",
" gf_interp = f_gf(t_common)\n",
"\n",
" log_diff = np.abs(np.log10(py_interp) - np.log10(gf_interp))\n",
"\n",
" axs[1].loglog(t_common, log_diff, color=f\"C{spID}\")\n",
" # axs[1].set_xlim(t_common[0], 3.1e17)\n",
"\n",
" axs[0].set_ylabel(\"Abundance [mol/g]\")\n",
" axs[1].set_xlabel(\"Time [s]\")\n",
" axs[1].set_ylabel(r\"$\\left|\\Delta\\log_{10}\\right|$ [dex]\")\n",
"\n",
" return fig, axs\n"
],
"id": "32114ccdfbdc0c30",
"outputs": [],
"execution_count": 40
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T16:22:25.941637Z",
"start_time": "2026-04-14T16:22:23.679453Z"
}
},
"cell_type": "code",
"source": [
"for run in runs:\n",
" if \"No_QSE\" in run:\n",
" fig, axs = plot_run_abundance(run);\n",
" axs[0].set_ylim(1e-8)\n",
" plt.savefig(f\"{run}_abundance.pdf\", bbox_inches='tight')\n",
" plt.close()"
],
"id": "bd04488fead04880",
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/v3/xfq17d692dg_gzdwv4yzmrkw0000gp/T/ipykernel_42214/2916075565.py:23: RuntimeWarning: divide by zero encountered in log10\n",
" log_diff = np.abs(np.log10(py_interp) - np.log10(gf_interp))\n",
"/var/folders/v3/xfq17d692dg_gzdwv4yzmrkw0000gp/T/ipykernel_42214/2916075565.py:23: RuntimeWarning: invalid value encountered in log10\n",
" log_diff = np.abs(np.log10(py_interp) - np.log10(gf_interp))\n"
]
}
],
"execution_count": 44
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T15:30:39.211161Z",
"start_time": "2026-04-14T15:30:38.434430Z"
}
},
"cell_type": "code",
"source": [
"num_species = []\n",
"py_time = []\n",
"gf_time = []\n",
"for run in runs:\n",
" if \"Depth\" in run:\n",
" data = load_run_data(base_dir, run)\n",
" num_species.append(data[0][\"Metadata\"][\"NumSpecies\"])\n",
" gf_time.append(data[0][\"Metadata\"][\"ElapsedTime\"])\n",
" py_time.append(data[1][\"Metadata\"][\"RunTime1\"])\n",
"\n",
"fig, ax = plt.subplots(figsize=(10, 7))\n",
"ax.semilogy(num_species, gf_time, 'o', label='GridFire', color='C2')\n",
"ax.semilogy(num_species, py_time, 'D', label='pynucastro', color='black')\n",
"\n",
"ax.legend(fontsize=17, frameon=False)\n",
"ax.set_xlabel(\"Number of Species\", fontsize=25)\n",
"ax.set_ylabel(\"Wall Time [s]\", fontsize=25)\n",
"\n",
"plt.savefig(\"GF_PyNuc_WallTime.pdf\", bbox_inches='tight')\n",
"\n"
],
"id": "e64c82995a57c114",
"outputs": [
{
"data": {
"text/plain": [
"<Figure size 1000x700 with 1 Axes>"
],
"image/png": "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
},
"metadata": {
"image/png": {
"width": 896,
"height": 622
}
},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 26
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-14T15:30:42.930128Z",
"start_time": "2026-04-14T15:30:42.888964Z"
}
},
"cell_type": "code",
"source": [
"for ns, t in zip(num_species, py_time):\n",
" print(f\"pynucastro: {ns} species, {t:.2e} seconds\")"
],
"id": "b0b9ceebfa5538b3",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pynucastro: 357 species, 8.47e-03 seconds\n",
"pynucastro: 457 species, 1.07e-02 seconds\n",
"pynucastro: 568 species, 1.17e-02 seconds\n",
"pynucastro: 61 species, 8.80e-03 seconds\n",
"pynucastro: 580 species, 1.05e-02 seconds\n",
"pynucastro: 98 species, 8.55e-03 seconds\n",
"pynucastro: 136 species, 8.49e-03 seconds\n",
"pynucastro: 177 species, 7.85e-03 seconds\n",
"pynucastro: 219 species, 1.21e-02 seconds\n",
"pynucastro: 261 species, 1.21e-02 seconds\n"
]
}
],
"execution_count": 27
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}