Skill Tracer
Skills › Scientific Agent Skills › cantera

cantera

skill · 139 lines · MIT · skills/cantera/SKILL.md

The facts

Its description

Runs Cantera homogeneous chemical reactors and evaluates ignition delay with mechanism provenance, conservation checks, and numerical refinement. Use for combustion kinetics, closed adiabatic ideal-gas constant-volume or constant-pressure ignition, temperature histories, or mechanism-specific ignition-delay comparisons.

The description the agent reads to decide when to use it.

From its settingsline 3

Runs scripts

python skills/cantera/scripts/ignition_delay.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 55

Files it mentions

references/interpretation.md, assets/hydrogen-ignition.json

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 24 line 37

Licence

MIT, from the skill file

The terms its author shares it under, which let it be shown here.

From its settingsline 4 licence text

Other settings

compatibility: Requires Python 3.12-3.14, Cantera 3.2.0, and NumPy. Installation needs network access; simulations run locally without credentials. Custom mechanisms must be available as Cantera YAML files. metadata: version: "1.1" skill-author: K-Dense Inc. tested-package-version: "3.2.0" last-reviewed: "2026-09-30"

More settings at the top of the file, shown as written.

From its settingsline 5 line 6
Other files in this skill (3) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: cantera
3description: Runs Cantera homogeneous chemical reactors and evaluates ignition delay with mechanism provenance, conservation checks, and numerical refinement. Use for combustion kinetics, closed adiabatic ideal-gas constant-volume or constant-pressure ignition, temperature histories, or mechanism-specific ignition-delay comparisons.
4license: MIT
5compatibility: Requires Python 3.12-3.14, Cantera 3.2.0, and NumPy. Installation needs network access; simulations run locally without credentials. Custom mechanisms must be available as Cantera YAML files.
6metadata:
7 version: "1.1"
8 skill-author: K-Dense Inc.
9 tested-package-version: "3.2.0"
10 last-reviewed: "2026-09-30"
11---
13# Cantera: homogeneous ignition calculations

Cantera: homogeneous ignition calculations

Raw lines 1 to 14
15## When to use
17Use for a closed, adiabatic, homogeneous ideal-gas reactor with a known kinetic mechanism,
18initial temperature, pressure, and mole composition. The bundled helper runs both constant
19volume and constant pressure cases and reports a precisely defined temperature-based delay.
20It is not a flame solver or a general reactor-network builder.
22A calculation completing successfully establishes numerical execution, not mechanism
23validity for the fuel, pressure, temperature, diluent, or measured ignition observable.
24Read [references/interpretation.md](references/interpretation.md) when choosing a mechanism,
25comparing experiments, or interpreting unresolved/two-stage ignition.

When to use

Use for a closed, adiabatic, homogeneous ideal-gas reactor with a known kinetic mechanism, initial temperature, pressure, and mole composition. The bundled helper runs both constant volume and constant pressure cases and reports a precisely defined temperature-based delay. It is not a flame solver or a general reactor-network builder.

A calculation completing successfully establishes numerical execution, not mechanism validity for the fuel, pressure, temperature, diluent, or measured ignition observable. Read references/interpretation.md when choosing a mechanism, comparing experiments, or interpreting unresolved/two-stage ignition.

Raw lines 15 to 26
27## Workflow
291. Identify the mechanism and its validated condition range. Preserve its source, version,
30 citation, and any modifications. Check that its phase is `ideal-gas` and that every
31 reactant, diluent, and tracked species exists. For custom YAML with imports, retain the
32 original dependency files as well as the generated phase snapshot. Custom Python rate
33 extensions additionally need their original code and environment for replay.
342. Choose constant volume or constant pressure from the physical experiment. Supply K,
35 Pa, seconds, and mole amounts explicitly. `mole_amounts` is normalized to mole fractions;
36 it is not a mass-fraction mapping. The report includes the normalized initial composition.
373. Copy [assets/hydrogen-ignition.json](assets/hydrogen-ignition.json) and change its conditions.
38 The supplied H2/O2/Ar case uses Cantera's bundled `h2o2.yaml` for an executable numerical
39 example; it is not a recommendation for every hydrogen experiment.
404. Set a time horizon long enough to observe the temperature rise and the decline of the
41 heating-rate peak. Choose output spacing fine enough to locate that peak. Set a minimum
42 temperature rise to distinguish ignition from negligible heating or numerical noise.
435. Run the helper and inspect all four histories and the report. Refine again if the delay
44 changes materially, if the maximum approaches a time boundary, or if conservation fails.
45 Compare the temperature and tracked-species histories with the actual ignition definition.
466. Report the condition set, mechanism hash, reactor constraint, delay definition, output
47 spacing, numerical changes, and scientific limits together with the delay.

Workflow

  1. Identify the mechanism and its validated condition range. Preserve its source, version, citation, and any modifications. Check that its phase is ideal-gas and that every reactant, diluent, and tracked species exists. For custom YAML with imports, retain the original dependency files as well as the generated phase snapshot. Custom Python rate extensions additionally need their original code and environment for replay.
  2. Choose constant volume or constant pressure from the physical experiment. Supply K, Pa, seconds, and mole amounts explicitly. mole_amounts is normalized to mole fractions; it is not a mass-fraction mapping. The report includes the normalized initial composition.
  3. Copy assets/hydrogen-ignition.json and change its conditions. The supplied H2/O2/Ar case uses Cantera's bundled h2o2.yaml for an executable numerical example; it is not a recommendation for every hydrogen experiment.
  4. Set a time horizon long enough to observe the temperature rise and the decline of the heating-rate peak. Choose output spacing fine enough to locate that peak. Set a minimum temperature rise to distinguish ignition from negligible heating or numerical noise.
  5. Run the helper and inspect all four histories and the report. Refine again if the delay changes materially, if the maximum approaches a time boundary, or if conservation fails. Compare the temperature and tracked-species histories with the actual ignition definition.
  6. Report the condition set, mechanism hash, reactor constraint, delay definition, output spacing, numerical changes, and scientific limits together with the delay.
Raw lines 27 to 48
49## Execute the tested example
51From the collection root:
53```bash
54uv run --no-project --python 3.12 --with cantera==3.2.0 --with numpy==2.5.3 \
55 python skills/cantera/scripts/ignition_delay.py \
56 skills/cantera/assets/hydrogen-ignition.json hydrogen-result
57```
59Tested on Python 3.12, Cantera 3.2.0, and NumPy 2.5.3. No external solver executable or
60credentials are needed. Local relative mechanism paths resolve against the configuration
61file directory before Cantera's built-in data search. Use a new output directory each run.
63The 1000 K, 101325 Pa, H2:O2:Ar = 2:1:7 constant-volume example gives about **0.313 ms**
64using the stated `max(dT/dt)` definition. At 3 ms its temperature is approximately
652920.67 K and agrees with a separate `UV` equilibrium calculation. These are package
66regression values, not experimental validation data.

Execute the tested example

From the collection root:

uv run --no-project --python 3.12 --with cantera==3.2.0 --with numpy==2.5.3 \
  python skills/cantera/scripts/ignition_delay.py \
  skills/cantera/assets/hydrogen-ignition.json hydrogen-result

Tested on Python 3.12, Cantera 3.2.0, and NumPy 2.5.3. No external solver executable or credentials are needed. Local relative mechanism paths resolve against the configuration file directory before Cantera's built-in data search. Use a new output directory each run.

The 1000 K, 101325 Pa, H2:O2:Ar = 2:1:7 constant-volume example gives about 0.313 ms using the stated max(dT/dt) definition. At 3 ms its temperature is approximately 2920.67 K and agrees with a separate UV equilibrium calculation. These are package regression values, not experimental validation data.

Raw lines 49 to 67
Runs code python skills/cantera/scripts/ignition_delay.py :55
68## Exact delay and refinement contract
70Delay is the time of the global maximum of `numpy.gradient(T, time, edge_order=2)` on
71a uniform output grid. It is reported only if the maximum temperature rise reaches
72`minimum_temperature_rise_k` and the maximum is at least two sample indices from each
73boundary. Otherwise `delay_s` is null and a status explains why. No delay beyond the
74simulation horizon is extrapolated.
76The helper explicitly uses Cantera 3.2's `clone=True` and reads evolving properties from
77`reactor.phase`. The original `Solution` retains the initial state; do not read it as
78the reactor's final state. `ReactorNet.advance(t)` requests an absolute time, and no
79advance limits are configured, so the output grid remains uniform.
81It runs four independent fresh reactors:
83| Run | Change from configured conditions |
84| --- | --- |
85| baseline | Original settings |
86| finer_output | Half output spacing, same horizon and solver controls |
87| tighter_solver | Both solver tolerances divided by ten; maximum internal time step halved |
88| longer_horizon | Twice the horizon with the original output spacing |
90`numerically_resolved` requires all runs to yield delays, relative delay changes within
91`delay_relative_tolerance`, and all conservation checks to pass. Agreement on a discrete
92grid is not a statistical error bar: also report the output spacing. The baseline samples
93must be between 11 and 50000, leaving room for refinement. Runtime grows with mechanism
94size, stiffness, and the chosen horizon; integration failures retain Cantera's error text.

Exact delay and refinement contract

Delay is the time of the global maximum of numpy.gradient(T, time, edge_order=2) on a uniform output grid. It is reported only if the maximum temperature rise reaches minimum_temperature_rise_k and the maximum is at least two sample indices from each boundary. Otherwise delay_s is null and a status explains why. No delay beyond the simulation horizon is extrapolated.

The helper explicitly uses Cantera 3.2's clone=True and reads evolving properties from reactor.phase. The original Solution retains the initial state; do not read it as the reactor's final state. ReactorNet.advance(t) requests an absolute time, and no advance limits are configured, so the output grid remains uniform.

It runs four independent fresh reactors:

RunChange from configured conditions
baselineOriginal settings
finer_outputHalf output spacing, same horizon and solver controls
tighter_solverBoth solver tolerances divided by ten; maximum internal time step halved
longer_horizonTwice the horizon with the original output spacing

numerically_resolved requires all runs to yield delays, relative delay changes within delay_relative_tolerance, and all conservation checks to pass. Agreement on a discrete grid is not a statistical error bar: also report the output spacing. The baseline samples must be between 11 and 50000, leaving room for refinement. Runtime grows with mechanism size, stiffness, and the chosen horizon; integration failures retain Cantera's error text.

Raw lines 68 to 95
96## Outputs and checks
98- `report.json`: all input settings, package versions, configuration and mechanism hashes,
99 normalized starting composition, four delay estimates, numerical changes, conservation,
100 and mechanism thermodynamic temperature bounds.
101- `baseline.csv`, `finer_output.csv`, `tighter_solver.csv`, `longer_horizon.csv`: time,
102 temperature, pressure, volume, mass, total internal energy, total enthalpy, and requested
103 species mole fractions.
104- `mechanism.yaml`: a Cantera-written snapshot of the loaded phase, species, and reactions.
105 The helper requests `write_yaml(precision=17)` and saves the exact UTF-8 bytes it hashes,
106 without platform newline conversion. The report also hashes the located original
107 mechanism file. Imported source dependencies are not separately hashed; the snapshot
108 captures the loaded model. Its generated header includes a date, so the snapshot hash
109 identifies the saved artifact and need not match between otherwise identical reruns.
111Closed reactors conserve mass and elemental mass fractions. The constant-volume case
112checks total internal energy; the constant-pressure case checks total enthalpy. Energy
113error is divided by `max(abs(initial_energy_J), 1 J)`. Diagnostic tolerances are mass
114relative drift <1e-8, elemental absolute drift <1e-8, energy scaled drift <1e-6, species
115mass-fraction sum error <1e-8, and species mass fractions >-1e-10. These checks expose
116numerical issues and do not measure kinetic-model uncertainty.
118Check `within_thermo_temperature_range` separately: it checks saved output states, not
119every internal integration state. Numerical resolution does not mean species thermodynamic
120fits stayed within their temperature bounds. The helper cannot assess pressure-dependent
121kinetic validity from these bounds.

Outputs and checks

  • report.json: all input settings, package versions, configuration and mechanism hashes, normalized starting composition, four delay estimates, numerical changes, conservation, and mechanism thermodynamic temperature bounds.
  • baseline.csv, finer_output.csv, tighter_solver.csv, longer_horizon.csv: time, temperature, pressure, volume, mass, total internal energy, total enthalpy, and requested species mole fractions.
  • mechanism.yaml: a Cantera-written snapshot of the loaded phase, species, and reactions. The helper requests write_yaml(precision=17) and saves the exact UTF-8 bytes it hashes, without platform newline conversion. The report also hashes the located original mechanism file. Imported source dependencies are not separately hashed; the snapshot captures the loaded model. Its generated header includes a date, so the snapshot hash identifies the saved artifact and need not match between otherwise identical reruns.

Closed reactors conserve mass and elemental mass fractions. The constant-volume case checks total internal energy; the constant-pressure case checks total enthalpy. Energy error is divided by max(abs(initial_energy_J), 1 J). Diagnostic tolerances are mass relative drift <1e-8, elemental absolute drift <1e-8, energy scaled drift <1e-6, species mass-fraction sum error <1e-8, and species mass fractions >-1e-10. These checks expose numerical issues and do not measure kinetic-model uncertainty.

Check within_thermo_temperature_range separately: it checks saved output states, not every internal integration state. Numerical resolution does not mean species thermodynamic fits stayed within their temperature bounds. The helper cannot assess pressure-dependent kinetic validity from these bounds.

Raw lines 96 to 122
123## Scope and upstream references
125The suite covers both reactor constraints, conservation, final-state agreement with
126independent Cantera equilibrium, nonigniting conditions, unresolved boundary maxima,
127refinement, snapshot replay, and invalid composition/conditions. It does not validate
128shock-tube heat loss, real-gas effects, surfaces, flow devices, flames, or multistage
129experimental ignition definitions. Build those models only with the necessary physics
130and their own checks; do not relabel this helper's result as one of them.
132- [Reactor model equations](https://cantera.org/stable/reference/reactors/index.html)
133- [Python reactor API](https://cantera.org/stable/python/zerodim.html)
134- [Thermodynamic properties and equilibrium](https://cantera.org/stable/python/thermo.html)
135- [Phase serialization API](https://cantera.org/stable/python/importing.html#cantera.Solution.write_yaml)
136- [Custom extension registration](https://cantera.org/stable/python/utilities.html#cantera.extension)
137- [Cantera 3.2 release notes](https://cantera.org/stable/reference/releasenotes/v3.2.html)
138- [Upstream ignition example](https://cantera.org/stable/examples/python/reactors/non_ideal_shock_tube.html)
139 uses a species mass-fraction peak; its delay definition differs from this helper's dT/dt peak.

Scope and upstream references

The suite covers both reactor constraints, conservation, final-state agreement with independent Cantera equilibrium, nonigniting conditions, unresolved boundary maxima, refinement, snapshot replay, and invalid composition/conditions. It does not validate shock-tube heat loss, real-gas effects, surfaces, flow devices, flames, or multistage experimental ignition definitions. Build those models only with the necessary physics and their own checks; do not relabel this helper's result as one of them.

Raw lines 123 to 139

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.