{ "cells": [ { "cell_type": "markdown", "id": "fe598318", "metadata": {}, "source": [ "# Example: hydrogen shock tube\n", "\n", "This notebook evaluates a hydrogen–oxygen kinetic model against shock-tube\n", "ignition-delay measurements for a dilute H₂/O₂/Ar mixture, then compares the\n", "*simulated* ignition delays with the *experimental* values.\n", "\n", "The experimental data, dataset list, and species-key file live in the\n", "`examples/h2o2-shocktube` directory of the repository\n", "([browse on GitHub](https://github.com/pr-omethe-us/PyTeCK/tree/master/examples/h2o2-shocktube)).\n", "The kinetic model, `h2o2.yaml`, ships with Cantera, so no local model file is\n", "needed." ] }, { "cell_type": "markdown", "id": "2dca6aa3", "metadata": {}, "source": [ "## Run the evaluation\n", "\n", "The [evaluate_model](eval_model.rst) function reads the dataset, simulates\n", "every datapoint, detects each ignition delay, and returns a dictionary\n", "summarizing how well the model reproduces the measurements." ] }, { "cell_type": "code", "execution_count": 1, "id": "73829c37", "metadata": { "execution": { "iopub.execute_input": "2026-07-15T23:57:13.187865Z", "iopub.status.busy": "2026-07-15T23:57:13.187695Z", "iopub.status.idle": "2026-07-15T23:57:14.653656Z", "shell.execute_reply": "2026-07-15T23:57:14.653121Z" } }, "outputs": [], "source": [ "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from pyteck.eval_model import evaluate_model\n", "from pyteck.utils import units\n", "\n", "example_dir = Path(\"../examples/h2o2-shocktube\").resolve()" ] }, { "cell_type": "code", "execution_count": 2, "id": "8137eab9", "metadata": { "execution": { "iopub.execute_input": "2026-07-15T23:57:14.655284Z", "iopub.status.busy": "2026-07-15T23:57:14.655076Z", "iopub.status.idle": "2026-07-15T23:57:17.172894Z", "shell.execute_reply": "2026-07-15T23:57:17.172520Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Standard deviation of 0.02 too low, using 0.10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Done with case H2O2Ar-shocktube-example_1\n", "Done with case H2O2Ar-shocktube-example_0\n", "Done with case H2O2Ar-shocktube-example_4\n", "Done with case H2O2Ar-shocktube-example_2\n", "Done with case H2O2Ar-shocktube-example_3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "average error function: 58.741\n", "average deviation function: 7.633\n" ] } ], "source": [ "output = evaluate_model(\n", " model_name=\"h2o2.yaml\",\n", " spec_keys_file=str(example_dir / \"spec_keys.yaml\"),\n", " dataset_file=str(example_dir / \"dataset_file.txt\"),\n", " data_path=str(example_dir / \"data\"),\n", " model_path=\"\",\n", " results_path=\"results\",\n", ")\n", "\n", "print(f\"average error function: {output['average error function']:.3f}\")\n", "print(f\"average deviation function: {output['average deviation function']:.3f}\")" ] }, { "cell_type": "markdown", "id": "42fe2544", "metadata": {}, "source": [ "## Compare experimental and simulated ignition delays\n", "\n", "Pull the temperature and the experimental and simulated ignition delay out of\n", "the results for each datapoint. The values are stored as strings with units,\n", "so we parse them with PyTeCK's `units` registry." ] }, { "cell_type": "code", "execution_count": null, "id": "c376c2d7", "metadata": { "execution": { "iopub.execute_input": "2026-07-15T23:57:17.174733Z", "iopub.status.busy": "2026-07-15T23:57:17.174632Z", "iopub.status.idle": "2026-07-15T23:57:17.178741Z", "shell.execute_reply": "2026-07-15T23:57:17.178277Z" } }, "outputs": [], "source": [ "datapoints = output[\"datasets\"][0][\"datapoints\"]\n", "\n", "temperature = np.array([units.Quantity(dp[\"temperature\"]).to(\"K\").magnitude for dp in datapoints])\n", "ignition_delay_experiment = np.array(\n", " [units.Quantity(dp[\"experimental ignition delay\"]).to(\"us\").magnitude for dp in datapoints]\n", ")\n", "ignition_delay_simulation = np.array(\n", " [units.Quantity(dp[\"simulated ignition delay\"]).to(\"us\").magnitude for dp in datapoints]\n", ")\n", "\n", "# sort by temperature so the simulated points join up smoothly\n", "# (this is not really necessary for a pure scatterplot)\n", "order = np.argsort(temperature)\n", "temperature = temperature[order]\n", "ignition_delay_experiment = ignition_delay_experiment[order]\n", "ignition_delay_simulation = ignition_delay_simulation[order]" ] }, { "cell_type": "markdown", "id": "72c8ddbd", "metadata": {}, "source": [ "Plot the ignition delay (log scale) against 1000/T, the usual Arrhenius-style\n", "presentation for ignition-delay data." ] }, { "cell_type": "code", "execution_count": null, "id": "388a39c6", "metadata": { "execution": { "iopub.execute_input": "2026-07-15T23:57:17.179802Z", "iopub.status.busy": "2026-07-15T23:57:17.179737Z", "iopub.status.idle": "2026-07-15T23:57:17.764285Z", "shell.execute_reply": "2026-07-15T23:57:17.763808Z" } }, "outputs": [ { "data": { "image/png": "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UuAkIiIiYpMCJxERERGbFDiJiIiI2KTASURERMQmBU4iIiIiNilwEhEREbFJgZOIiIiITQqcRERERGxS4CQiIiJikwInEREREZsUOImIiIjYpMBJRERExCYFTiIiIiI2KXASERERsUmBk4iIiIhNCpxEREREbFLgJCIiImKTAicRERERmxQ4iYiIiNikwElERETEJgVOIiIiIjYpcBIRERGxSYGTiIiIiE0KnERERERsUuAkIiIiYpMCJxERERGbFDiJiIiI2KTASURERMQmBU4iIiIiNilwEhEREbFJgZOIiIiITQqcRERERGxS4CQiIiJikwInEREREZsUOImIiIjYpMBJRERExCYFTiIiIiI2KXASERERsUmBk4iIiIhNCpxEREREbFLgJCIiImKTAicRERERmxQ4iYiIiNikwElERETEJgVOIiIiIjYpcBIRERGxSYGTiIiIiE0KnERERERsUuAkIiIiEmmBU2xsLC5duhTqzRAREZEMLOwDp61bt6J58+YoU6YMChYsiAkTJoR6k0RERCSDCvvAafHixXjllVcQExODefPm4f7774fD4Qj1ZomIiEgGlBnpwJIlS7B582a0b98exYsXT/D8mTNn8Ntvv+HEiRO4+uqrTeuS5bbbbnP9XrRoUfNcVFRUmm27iIiIRI6QtjixhahOnToYPHgwbr/9dhM8eduyZQuqVKmCRx55BJ988gmqVauGsWPHJpjv8OHDGDhwICZOnJhGWy8iIiKRJqQtTnFxcSbQKVy4MEqVKuVznjvvvBPVq1fHnDlzEB0djU8//RSDBg0yrVMVK1Y082zfvh39+vXDO++8g3r16qXxqxAREZFIEdIWp44dO5oWJ3/27t2LBQsWYOjQoSZooj59+iB//vyYPn26ebxy5UrccMMNeO6550xX3Z49exLNcTp37hyOHz/u8SMiIiISNjlO/mzYsMH8X6NGDde0TJkyoWrVqli/fr15PHv2bJw8eRIDBgxwzbNx40bkzZvX5zKZSP78888HfdtFREQk44lO77WZiC1M7lh2wHqOLU1sZXL/8Rc00eOPP27+1vrZvXt3kF+FiIiIZBTpusUpR44c5v9Tp06hQIECrukcXVeoUKEULTNbtmzmR0RERCRDtThVqFDB/L9jxw6P6Tt37nQ9JyIiIpJW0nXgxNIDDJC+/PJL17SlS5di27Zt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(6, 4))\n", "\n", "ax.semilogy(1000.0 / temperature, ignition_delay_experiment, \"o\", label=\"experiment\")\n", "ax.semilogy(1000.0 / temperature, ignition_delay_simulation, \"s--\", label=\"simulation (h2o2.yaml)\")\n", "\n", "ax.set_xlabel(\"1000 / T (1/K)\")\n", "ax.set_ylabel(\"ignition delay (µs)\")\n", "ax.set_title(\"H$_2$/O$_2$/Ar shock tube ignition delay\")\n", "ax.legend()\n", "fig.tight_layout()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.4" } }, "nbformat": 4, "nbformat_minor": 5 }