RMG-Py v4.0.0 stable#2981
Conversation
These are not being maintained. Skip the tests that used them.
These should be created (replaced) by running the mainTest.py tests. We'll save a copy of them in git too.
Now copies both cantera1 and cantera2 files across. Not a great workflow, but can clean it up later.
Previously every output writer (Chemkin, RMS YAML, Cantera YAML, HTML)
shared global flags: verboseComments and saveEdgeSpecies from options().
There was no way to control how often each writer ran, and no way to give
one writer different verbose/edge settings than another.
WriterConfig is the data class that will hold this per-writer state:
- save_interval: positive N = every N iterations; -1 = end-of-run only;
0 = disabled
- verbose_comments: per-writer override (None = fall back to global)
- save_edge: per-writer override (None = fall back to global)
- should_write(): encapsulates the scheduling logic, including a
_last_write guard that prevents double-writing when the end-of-run
final save fires at the same iteration_num as the last loop save.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New helpers in rmgpy/rmg/input.py:
_parse_writer_config(value) -- converts True/False/dict to WriterConfig
_writer_config_to_input(cfg) -- serializes WriterConfig back for restart
input files
The options() function gains four new keyword arguments:
generateChemkin=True (default on, global verboseComments/saveEdge
apply if not overridden per-writer)
generateRMSYAML=True (default on)
generateCanteraYAML1=False (default off -- writer is new/beta)
generateCanteraYAML2=False (default off -- writer is new/beta)
The existing generateOutputHTML already existed as a boolean; it now also
accepts the dict form.
Each argument accepts:
False -> disabled
True -> enabled, save every iteration
{'saveInterval': N, -> full per-writer configuration
'verboseComments': True/False,
'saveEdge': True/False}
The RMG class gains five new attributes (initialised in clear()):
chemkin_writer_config, rms_writer_config, cantera1_writer_config,
cantera2_writer_config, html_writer_config
and:
is_final_save -- flag set True during the end-of-run save_everything()
call so writers can distinguish final from mid-run saves
The save_input() serializer is updated to write the new options back into
the restart input file (Cantera configs omitted when disabled so old-style
files stay clean).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
register_listeners() now reads the five *_writer_config attributes from the
RMG object and only attaches a writer if its config is enabled. Defaults
(applied when the input file did not call options() at all) preserve the
historical always-on behaviour for Chemkin and RMS, and the historical
always-off default for CanteraWriter1, CanteraWriter2, and HTML.
Each writer's __init__ now accepts config=None and each update() method
starts with:
if not config.should_write(rmg.reaction_model.iteration_num,
rmg.is_final_save):
return
verbose = config.verbose_comments if ... else rmg.verbose_comments
save_edge = config.save_edge if ... else rmg.save_edge_species
This means the global verboseComments / saveEdgeSpecies flags continue to
work as fallbacks for any writer that does not specify its own override.
A final save_everything() call is added in execute() immediately after
make_seed_mech() and before run_model_analysis(), with is_final_save=True.
This guarantees:
- Writers configured with saveInterval=-1 write exactly once (here).
- Writers configured with saveInterval>0 also write here unless they
already wrote on this iteration (prevented by _last_write guard).
save_chemkin_files() and save_cantera_files() each gain a config= kwarg so
the per-writer verbose/edge values can be threaded in from the writer class
without touching the rmg object.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
examples/rmg/commented/input.py
Updated options() block to document all four new generateX keys with
commented-out dict-form examples showing saveInterval, verboseComments,
and saveEdge. Updated docstrings for verboseComments and saveEdgeSpecies
to clarify their role as global fallbacks.
documentation/source/users/rmg/input.rst
Updated the options() code block to include the four new keys.
Added a new 'Per-writer Output Configuration' subsection under the
options heading that explains:
- True/False/dict syntax and the available dict keys
- saveInterval semantics (-1 = end only, N = every N iterations)
- That verboseComments/saveEdgeSpecies remain as global fallbacks
- Per-writer defaults and output folder for each writer
test/rmgpy/rmg/inputTest.py
New TestWriterConfig class (16 tests) covering:
_parse_writer_config: False, True, True+custom-default, full dict,
partial dict, invalid type
WriterConfig.should_write: every-iteration, every-N, end-only,
disabled, final-always-writes,
no-double-write-on-final
_writer_config_to_input: disabled (False), default-on (True),
dict with overrides, None input
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ute. There's a mock RMG object that was missing the attribute, which caused an error in the unit tests.
…figs Chemkin-to-Cantera translation (generate_cantera_files_from_chemkin) is now skipped when the Chemkin writer is disabled, since the .inp source files will not exist. Each compare_yaml_files_and_report call is independently guarded by whether the corresponding Cantera writer config (cantera1 or cantera2) is enabled. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add some examples of the output configuration features to input files. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously, `--walltime` defaulted to `'00:00:00:00'` and was always passed as a kwarg to `RMG.execute()`, silently overriding any `wallTime` set in `input.py`. This meant users who set `wallTime` in their input file and ran without `-t` would have their setting clobbered, giving an effective wall time of zero (no limit). Changes: - Change `--walltime` default to `None`; only add `walltime` and `max_iterations` to the kwargs dict when they are explicitly provided on the command line. Input-file values are now respected by default. - Move walltime/max_iterations override logic earlier in `execute()` (before database loading), so bad values produce an error immediately rather than after a potentially long setup phase. - Extract walltime parsing into a `_parse_walltime_to_seconds()` static method for clarity and testability; improve the error message to include the invalid value. - Log an explicit "Overriding walltime/max_iterations from input file (...) with command-line value (...)" message whenever the CLI does override the input file, making precedence visible in the run log. - Replace bare `return` statements inside nested loops (walltime/maxiter termination paths) with an `end_early` flag + `break`, so that `make_seed_mech()`, `check_model()`, and `finish()` are still called on early termination. Suppress the "MODEL GENERATION COMPLETED" banner when ending early to avoid misleading output. - Update docs (`running.rst`) and example input files to document CLI override behaviour and clarify that `wallTime` can be set in `input.py` while `--maxiter` is CLI-only. - Update test for the new `None` default.
Enhance options for output writing
…sing annotated files Coverage-dependence post-processing was still targeting the old 'cantera/' folder; it now correctly targets 'cantera_from_ck/'. Also added os.path.exists() guards around all annotated-file translation calls so that runs configured without verboseComments (which never write chem_annotated.inp) no longer fail when those files are absent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Now that they're off-by-default, we need to turn them on for testing.
A recent change meant that when a model reaches the wall clock or iteration count limit and is terminated, it now does the "end of job" steps like checking colliders, running ck2yaml, etc. This means that some things, like saving the Seed, and writing a row to the statistics.xls, got done one more time. This fixes a couple of things which that broke.
See #2800 for details. Enable in your options block with: generateCanteraYAML1=True, generateCanteraYAML2=True, Or customize with settings like: generateChemkin={'saveInterval': 1, 'saveEdge': False}, generateRMSYAML={'saveInterval': 5}, generateCanteraYAML1={'saveInterval': 5, 'saveEdge':True}, generateCanteraYAML2={'saveInterval': 5, 'saveEdge':False, 'verboseComments':True}, See provided examples and documentation for more.
RTP is only used for variable volume reactors. Requiring P messes up the surface reactor (constant volume) because it does not keep track of P. Moving this behind the variable volume check allows us to do sensitivity for surface reactors without implementing something to keep track of P.
the jacobian function was populating an array with 1/V or 1/A for each gas or surface species each time it called the jacobian. Now it caches the values. 1/V and 1/A do not change because it's a constant volume reactor, but the total number of core species could change as RMG grows the model, and this enables the use of cached values that get updated only as required
Implement sensitivity for SurfaceReactor
Earlier attempts tried to fit the autogenerated trees into this uncertainty framework by retrieving information from the tree nodes about the number of training reactions and leave-one-out variance. This caused major problems when trying to compute covariance matrices because you had to choose between using the BM node variance or the uncertainty framework's Delta lnk = 0.5 assumption. The new plan is to compute an empirical covariance matrix of the BM nodes and integrate this into a new, more generalized framework. But this separate handling of the trees has to be undone first to validate that the two frameworks produce identical results.
This will make it easier to parse the uncertainty source type later on
…fied. Suggested by copilot: Previously, populate_resonance_algorithms() adds generate_formate_resonance_structures only in the features['is_multidentate'] branch, but it is not included in the default (features=None) method list. This means call sites that iterate populate_resonance_algorithms() without passing features (e.g., the isomorphic-resonance enumeration later in this module) will never generate the new formate resonance structures. Consider adding the new generator to the features is None list as well to keep behavior consistent.
…rmate_resonance_structures Just so all the adsorbate things start with similar names.
Should NOT remove vdW if there's also a covalent bond to the surface.
For checking multi-dentate vdW things. I'm about to refactor, and want to first document what the current code does, then change how we do it in the next commit.
Lifts is_multidentate() into the outer guard (short-circuits on the second surface atom,
so it's cheaper than get_num_atoms('X') > 1 which counts all atoms).
Replaces the surface_sites list + all(... == 'Xv') check with
`not has_covalent_surface_bond()`.
Drops the now-unused surface_sites = [] initializer.
Also add tests for it, and use it in reaction family is_molecule_forbidden method.
The has_vdw_surface_bond now ALSO returns True for has LACK OF a bond (but an X and one other thing). I guess if you were to give it an adjacency list with just X atoms, this would return True, which may seem weird. (But so would the old test which was just for the presence of an Xv atom type)
Since Python 3.8 we can do this "walrus" operator :=
drop this commit before merging to main. merge at same time as ReactionMechanismGenerator/RMG-database#729
The dispatch else-branch in kinetics_check_sample_can_react raised a terse
ValueError ("Family had N reactants?: ...") that named neither the family nor
the underlying cause, making CI failures hard to diagnose. This branch is
reached whenever the number of reactant roots that produced at least one usable
sample molecule does not match the family
template, and it raised before the
logging loop ran, discarding any per-sample errors already queued.
Add an explicit check comparing the number of reactant roots that
yielded samples against the family template's reactant count. On a mismatch,
append a descriptive, per-root message logged together with
the queued per-sample errors (and then raises the standard
"Error Occurred. See log for details."), naming the family and the specific
reactant root(s) with no usable sample.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This reverts commit 5e967e6.
Co-authored-by: Richard West <r.west@northeastern.edu>
Update headers to 2026
RMG-Py v4.0.0 🎉
Regression Testing Results
Detailed regression test results.Regression test aromatics:Reference: Execution time (DD:HH:MM:SS): 00:00:00:55 aromatics Passed Core Comparison ✅Original model has 15 species. aromatics Failed Edge Comparison ❌Original model has 106 species. Non-identical thermo! ❌
thermo: Thermo group additivity estimation: group(Cs-(Cds-Cds)CsCsH) + group(Cs-(Cds-Cds)CsCsH) + group(Cs-(Cds-Cds)(Cds-Cds)CsH) + group(Cs-(Cds-Cds)CsHH) + group(Cds-CdsCsCs) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + polycyclic(s2_4_5_diene_1_5) + polycyclic(s3_4_5_ene_3) + polycyclic(s2_5_5_diene_1_5) - ring(Cyclobutene) - ring(Cyclopentene) - ring(Cyclopentene) + radical(cyclopentene-allyl) Non-identical thermo! ❌
thermo: Thermo group additivity estimation: group(Cs-(Cds-Cds)CsCsH) + group(Cs-(Cds-Cds)(Cds-Cds)CsH) + group(Cs-(Cds-Cds)(Cds-Cds)CsH) + group(Cs-CsCsHH) + group(Cds-CdsCsCs) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + Estimated bicyclic component: polycyclic(s2_3_5_ane) - ring(Cyclopentane) - ring(Cyclopropane) + ring(Cyclopentene) + ring(Cyclopropane) + polycyclic(s2_3_6_diene_0_3) + Estimated bicyclic component: polycyclic(s3_5_6_ane) - ring(Cyclohexane) - ring(Cyclopentane) + ring(1,4-Cyclohexadiene) + ring(Cyclopentene) - ring(Cyclopropane) - ring(Cyclopentene) - ring(1,4-Cyclohexadiene) + radical(cyclopentene-4) Non-identical thermo! ❌
thermo: Thermo group additivity estimation: group(Cs-CsCsCsH) + group(Cs-(Cds-Cds)CsCsH) + group(Cs-(Cds-Cds)CsCsH) + group(Cs-(Cds-Cds)CsHH) + group(Cds- Cds(Cds-Cds)Cs) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + group(Cds-Cds(Cds-Cds)H) + polycyclic(s2_3_5_ene_1) + polycyclic(s2_3_6_ene_1) + Estimated bicyclic component: polycyclic(s3_5_6_ane) - ring(Cyclohexane) - ring(Cyclopentane) + ring(Cyclohexene) + ring(Cyclopentene) - ring(Cyclopropane) - ring(Cyclopentene) - ring(Cyclohexene) + radical(cyclopentene-allyl) Non-identical thermo! ❌
thermo: Thermo group additivity estimation: group(Cs-(Cds-Cds)(Cds-Cds)(Cds-Cds)H) + group(Cds-Cds(Cds-Cds)(Cds-Cds)) + group(Cds-CdsCsH) + group(Cds-CdsCsH) + group(Cds-Cds(Cds-Cds)H) + group(Cds-Cds(Cds-Cds)H) + group(Cds-CdsCsH) + group(Cdd-CdsCds) + Estimated bicyclic component: polycyclic(s4_6_6_ane) - ring(Cyclohexane) - ring(Cyclohexane) + ring(124cyclohexatriene) + ring(124cyclohexatriene) Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Non-identical kinetics! ❌
kinetics: Errors occurred during edge comparison
ERROR conda.cli.main_run:execute(148): `conda run python scripts/checkModels.py aromatics-edge stable_regression_results/aromatics/chemkin/chem_edge_annotated.inp stable_regression_results/aromatics/chemkin/species_edge_dictionary.txt test/regression/aromatics/chemkin/chem_edge_annotated.inp test/regression/aromatics/chemkin/species_edge_dictionary.txt` failed. (See above for error)
|
| Hf(300K) | S(300K) | Cp(300K) | Cp(400K) | Cp(500K) | Cp(600K) | Cp(800K) | Cp(1000K) | Cp(1500K) |
|---|---|---|---|---|---|---|---|---|
| 116.46 | 53.90 | 11.62 | 12.71 | 13.49 | 13.96 | 14.14 | 13.85 | 13.58 |
| 141.64 | 58.66 | 12.26 | 12.27 | 12.09 | 11.96 | 12.26 | 12.72 | 12.15 |
thermo: Thermo group additivity estimation: group(O2s-CdN3d) + group(N3d-OCd) + group(Cd-HN3dO) + ring(Cyclopropene) + radical(CdJ-NdO)
thermo: Thermo group additivity estimation: group(O2s-CdN3d) + group(N3d-OCd) + group(Cd-HN3dO) + ring(oxirene) + radical(CdJ-NdO)
Non-identical kinetics! ❌
original:
rxn: NCO(66) <=> O1[C]=N1(126) origin: Intra_R_Add_Endocyclic
tested:
rxn: NCO(66) <=> O1[C]=N1(126) origin: Intra_R_Add_Endocyclic
| k(1bar) | 300K | 400K | 500K | 600K | 800K | 1000K | 1500K | 2000K |
|---|---|---|---|---|---|---|---|---|
| k(T): | -49.54 | -33.65 | -24.16 | -17.85 | -10.01 | -5.35 | 0.80 | 3.82 |
| k(T): | -66.25 | -46.19 | -34.19 | -26.21 | -16.28 | -10.36 | -2.54 | 1.31 |
kinetics: Arrhenius(A=(6.95187e+18,'s^-1'), n=-1.628, Ea=(88.327,'kcal/mol'), T0=(1,'K'), comment="""Estimated from node Backbone0_N-2R!H-inRing_N-1R!H-inRing_Sp-2R!H-1R!H in family Intra_R_Add_Endocyclic.""")
kinetics: Arrhenius(A=(6.95187e+18,'s^-1'), n=-1.628, Ea=(111.271,'kcal/mol'), T0=(1,'K'), comment="""Estimated from node Backbone0_N-2R!H-inRing_N-1R!H-inRing_Sp-2R!H-1R!H in family Intra_R_Add_Endocyclic.""")
Identical kinetics comments:
kinetics: Estimated from node Backbone0_N-2R!H-inRing_N-1R!H-inRing_Sp-2R!H-1R!H in family Intra_R_Add_Endocyclic.
Errors occurred during edge comparison ⚠️
ERROR conda.cli.main_run:execute(148): `conda run python scripts/checkModels.py nitrogen-edge stable_regression_results/nitrogen/chemkin/chem_edge_annotated.inp stable_regression_results/nitrogen/chemkin/species_edge_dictionary.txt test/regression/nitrogen/chemkin/chem_edge_annotated.inp test/regression/nitrogen/chemkin/species_edge_dictionary.txt` failed. (See above for error)
nitrogen Passed Observable Testing ✅
Regression test oxidation:
Reference: Execution time (DD:HH:MM:SS): 00:00:01:32
Current: Execution time (DD:HH:MM:SS): 00:00:01:30
Reference: Memory used: 799.41 MB
Current: Memory used: 796.53 MB
oxidation Passed Core Comparison ✅
Original model has 59 species.
Test model has 59 species. ✅
Original model has 694 reactions.
Test model has 694 reactions. ✅
oxidation Passed Edge Comparison ✅
Original model has 230 species.
Test model has 230 species. ✅
Original model has 1524 reactions.
Test model has 1524 reactions. ✅
oxidation Passed Observable Testing ✅
Errors occurred during observable testing ⚠️
WARNING: Initial mole fractions do not sum to one; normalizing.
Regression test sulfur:
Reference: Execution time (DD:HH:MM:SS): 00:00:00:39
Current: Execution time (DD:HH:MM:SS): 00:00:00:36
Reference: Memory used: 911.37 MB
Current: Memory used: 911.16 MB
sulfur Passed Core Comparison ✅
Original model has 27 species.
Test model has 27 species. ✅
Original model has 74 reactions.
Test model has 74 reactions. ✅
sulfur Failed Edge Comparison ❌
Original model has 89 species.
Test model has 89 species. ✅
Original model has 227 reactions.
Test model has 227 reactions. ✅
The original model has 1 reactions that the tested model does not have. ❌
rxn: O(4) + SO2(15) (+N2) <=> SO3(16) (+N2) origin: primarySulfurLibrary
The tested model has 1 reactions that the original model does not have. ❌
rxn: O(4) + SO2(15) (+N2) <=> SO3(16) (+N2) origin: primarySulfurLibrary
Errors occurred during edge comparison ⚠️
ERROR conda.cli.main_run:execute(148): `conda run python scripts/checkModels.py sulfur-edge stable_regression_results/sulfur/chemkin/chem_edge_annotated.inp stable_regression_results/sulfur/chemkin/species_edge_dictionary.txt test/regression/sulfur/chemkin/chem_edge_annotated.inp test/regression/sulfur/chemkin/species_edge_dictionary.txt` failed. (See above for error)
sulfur Passed Observable Testing ✅
Regression test superminimal:
Reference: Execution time (DD:HH:MM:SS): 00:00:00:23
Current: Execution time (DD:HH:MM:SS): 00:00:00:22
Reference: Memory used: 969.47 MB
Current: Memory used: 974.32 MB
superminimal Passed Core Comparison ✅
Original model has 13 species.
Test model has 13 species. ✅
Original model has 21 reactions.
Test model has 21 reactions. ✅
superminimal Passed Edge Comparison ✅
Original model has 18 species.
Test model has 18 species. ✅
Original model has 28 reactions.
Test model has 28 reactions. ✅
Regression test RMS_constantVIdealGasReactor_superminimal:
Reference: Execution time (DD:HH:MM:SS): 00:00:02:19
Current: Execution time (DD:HH:MM:SS): 00:00:02:19
Reference: Memory used: 2414.67 MB
Current: Memory used: 2405.13 MB
RMS_constantVIdealGasReactor_superminimal Passed Core Comparison ✅
Original model has 13 species.
Test model has 13 species. ✅
Original model has 19 reactions.
Test model has 19 reactions. ✅
RMS_constantVIdealGasReactor_superminimal Passed Edge Comparison ✅
Original model has 13 species.
Test model has 13 species. ✅
Original model has 19 reactions.
Test model has 19 reactions. ✅
RMS_constantVIdealGasReactor_superminimal Passed Observable Testing ✅
Regression test RMS_CSTR_liquid_oxidation:
Reference: Execution time (DD:HH:MM:SS): 00:00:10:52
Current: Execution time (DD:HH:MM:SS): 00:00:15:24
Reference: Memory used: 2780.97 MB
Current: Memory used: 2772.64 MB
RMS_CSTR_liquid_oxidation Failed Core Comparison ❌
Original model has 35 species.
Test model has 35 species. ✅
Original model has 126 reactions.
Test model has 141 reactions. ❌
The original model has 2 species that the tested model does not have. ❌
spc: CC[CH]CCOO(64)
spc: C=CCC(C)OO(89)
The tested model has 2 species that the original model does not have. ❌
spc: CC=O(87)
spc: [CH2]CCC(C)O(93)
The original model has 5 reactions that the tested model does not have. ❌
rxn: oxygen(1) + C[CH]CC(C)OO(34) <=> [O]O(13) + C=CCC(C)OO(89) origin: Disproportionation
rxn: CC[CH]CCOO(64) <=> CCCCCO[O](61) origin: intra_H_migration
rxn: [O]O(13) + CC[CH]CCOO(64) <=> oxygen(1) + CCCCCOO(78) origin: H_Abstraction
rxn: [CH2]CCCC(12) + CC[CH]CCOO(64) <=> C=CCCC(18) + CCCCCOO(78) origin: Disproportionation
rxn: C[CH]CCC(11) + CC[CH]CCOO(64) <=> C=CCCC(18) + CCCCCOO(78) origin: Disproportionation
The tested model has 20 reactions that the original model does not have. ❌
rxn: CCC(CC)O[O](22) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: CCCC(C)O[O](20) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: C[CH]CC(C)OO(37) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: OO(23) + CCCCCO[O](61) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: [O]O(13) + [CH2]CCCC(12) <=> OO(23) + C=CCCC(17) origin: Disproportionation
rxn: CC=O(87) + [CH2]CC(5) <=> CCCC(C)[O](44) origin: R_Addition_MultipleBond
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + CCC(CC)O[O](22) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + CCCC(C)O[O](20) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + C[CH]CC(C)OO(37) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + CCCCCO[O](61) origin: H_Abstraction
rxn: OO(23) + OO(23) <=> [OH](25) + [O]O(13) + H2O(42) origin: Bimolec_Hydroperoxide_Decomposition
rxn: CCCC(C)[O](44) <=> [CH2]CCC(C)O(93) origin: intra_H_migration
rxn: [CH2]CC(CC)OO(32) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + [CH2]CC(CC)OO(32) origin: H_Abstraction
rxn: OO(23) + C[CH]CCCOO(75) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: C[CH]CCCOO(75) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + C[CH]CCCOO(75) origin: H_Abstraction
rxn: OO(23) + [CH2]CCCCOO(76) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: [CH2]CCCCOO(76) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + [CH2]CCCCOO(76) origin: H_Abstraction
Errors occurred during core comparison ⚠️
ERROR conda.cli.main_run:execute(148): `conda run python scripts/checkModels.py RMS_CSTR_liquid_oxidation-core stable_regression_results/RMS_CSTR_liquid_oxidation/chemkin/chem_annotated.inp stable_regression_results/RMS_CSTR_liquid_oxidation/chemkin/species_dictionary.txt test/regression/RMS_CSTR_liquid_oxidation/chemkin/chem_annotated.inp test/regression/RMS_CSTR_liquid_oxidation/chemkin/species_dictionary.txt` failed. (See above for error)
RMS_CSTR_liquid_oxidation Failed Edge Comparison ❌
Original model has 90 species.
Test model has 99 species. ❌
Original model has 314 reactions.
Test model has 384 reactions. ❌
The tested model has 9 species that the original model does not have. ❌
spc: CCCCO
spc: CCC(C)O
spc: CC=O(87)
spc: CCCC=O(88)
spc: CCCCO(89)
spc: CC[CH]C(C)O(90)
spc: [CH2]C(O)CCC(91)
spc: C[CH]CC(C)O(92)
spc: [CH2]CCC(C)O(93)
The original model has 1 reactions that the tested model does not have. ❌
rxn: H(8) + [OH](25) <=> H2O(42) origin: R_Recombination
The tested model has 71 reactions that the original model does not have. ❌
rxn: CCC(CC)O[O](22) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: CCCC(C)O[O](20) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: C[CH]CC(C)OO(37) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: OO(23) + CCCCCO[O](61) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: [O]O(13) + [CH2]CCCC(12) <=> OO(23) + C=CCCC(17) origin: Disproportionation
rxn: CC=O(87) + [CH2]CC(5) <=> CCCC(C)[O](44) origin: R_Addition_MultipleBond
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + CCC(CC)O[O](22) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + CCCC(C)O[O](20) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + C[CH]CC(C)OO(37) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + CCCCCO[O](61) origin: H_Abstraction
rxn: OO(23) + OO(23) <=> [OH](25) + [O]O(13) + H2O(42) origin: Bimolec_Hydroperoxide_Decomposition
rxn: CCCC(C)[O](44) <=> [CH2]CCC(C)O(93) origin: intra_H_migration
rxn: [CH2]CC(CC)OO(32) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + [CH2]CC(CC)OO(32) origin: H_Abstraction
rxn: OO(23) + C[CH]CCCOO(75) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: C[CH]CCCOO(75) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + C[CH]CCCOO(75) origin: H_Abstraction
rxn: OO(23) + [CH2]CCCCOO(76) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: [CH2]CCCCOO(76) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + [CH2]CCCCOO(76) origin: H_Abstraction
rxn: CC[C](CC)OO(53) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: C[CH]C(CC)OO(31) + CCCCCOO(78) <=> CCCCCO[O](61) + CCC(CC)OO(27) origin: H_Abstraction
rxn: CCC[C](C)OO(58) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: CC[CH]C(C)OO(35) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: [CH2]C(CCC)OO(36) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: [CH2]CCC(C)OO(38) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)OO(24) origin: H_Abstraction
rxn: CH2(S)(3) + CCCC[O](85) <=> CCCC(C)[O](44) origin: 1,2_Insertion_carbene
rxn: CH2(S)(3) + CCC(C)[O](86) <=> CCCC(C)[O](44) origin: 1,2_Insertion_carbene
rxn: CH2(S)(3) + CCC(C)[O](86) <=> CCCC(C)[O](44) origin: 1,2_Insertion_carbene
rxn: H(8) + CCCC(C)=O(34) <=> CCCC(C)[O](44) origin: R_Addition_MultipleBond
rxn: [CH3](10) + CCCC=O(88) <=> CCCC(C)[O](44) origin: R_Addition_MultipleBond
rxn: CCCC(C)[O](44) <=> CCC[C](C)O(89) origin: intra_H_migration
rxn: CC[CH]C(C)O(90) <=> CCCC(C)[O](44) origin: intra_H_migration
rxn: CCCC(C)[O](44) <=> [CH2]C(O)CCC(91) origin: intra_H_migration
rxn: CCCC(C)[O](44) <=> C[CH]CC(C)O(92) origin: intra_H_migration
rxn: oxygen(1) + CCCC(C)[O](44) <=> [O]O(13) + CCCC(C)=O(34) origin: Disproportionation
rxn: oxygen(1) + CCCC(C)[O](44) <=> CCCC(C)OO[O](49) origin: R_Recombination
rxn: CCCC(C)[O](44) + pentane(2) <=> CC[CH]CC(7) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + pentane(2) <=> C[CH]CCC(11) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + pentane(2) <=> [CH2]CCCC(12) + CCCC(C)O(47) origin: H_Abstraction
rxn: OO(23) + CC[CH]CCOO(74) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: OO(23) + CCC[CH]COO(73) <=> [O]O(13) + CCCCCOO(78) origin: H_Abstraction
rxn: [O]O(13) + CCCCCOO(78) <=> OO(23) + CCCC[CH]OO(84) origin: H_Abstraction
rxn: CC[CH]CCOO(74) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: CCC[CH]COO(73) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: CCCC[CH]OO(84) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCCCOO(78) origin: H_Abstraction
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + CC[C](CC)OO(53) origin: H_Abstraction
rxn: [OH](25) + CCC(CC)OO(27) <=> H2O(42) + C[CH]C(CC)OO(31) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCC(CC)OO(27) <=> CCC(CC)O[O](22) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCC(CC)OO(27) <=> CC[C](CC)OO(53) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCC(CC)OO(27) <=> C[CH]C(CC)OO(31) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCC(CC)OO(27) <=> [CH2]CC(CC)OO(32) + CCCC(C)O(47) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + CCC[C](C)OO(58) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + CC[CH]C(C)OO(35) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + [CH2]C(CCC)OO(36) origin: H_Abstraction
rxn: [OH](25) + CCCC(C)OO(24) <=> H2O(42) + [CH2]CCC(C)OO(38) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> CCCC(C)O[O](20) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> CCC[C](C)OO(58) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> CC[CH]C(C)OO(35) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> C[CH]CC(C)OO(37) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> [CH2]C(CCC)OO(36) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCC(C)OO(24) <=> [CH2]CCC(C)OO(38) + CCCC(C)O(47) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + CC[CH]CCOO(74) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + CCC[CH]COO(73) origin: H_Abstraction
rxn: [OH](25) + CCCCCOO(78) <=> H2O(42) + CCCC[CH]OO(84) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> CCCCCO[O](61) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> CC[CH]CCOO(74) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> CCC[CH]COO(73) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> C[CH]CCCOO(75) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> CCCC[CH]OO(84) + CCCC(C)O(47) origin: H_Abstraction
rxn: CCCC(C)[O](44) + CCCCCOO(78) <=> [CH2]CCCCOO(76) + CCCC(C)O(47) origin: H_Abstraction
Errors occurred during edge comparison ⚠️
ERROR conda.cli.main_run:execute(148): `conda run python scripts/checkModels.py RMS_CSTR_liquid_oxidation-edge stable_regression_results/RMS_CSTR_liquid_oxidation/chemkin/chem_edge_annotated.inp stable_regression_results/RMS_CSTR_liquid_oxidation/chemkin/species_edge_dictionary.txt test/regression/RMS_CSTR_liquid_oxidation/chemkin/chem_edge_annotated.inp test/regression/RMS_CSTR_liquid_oxidation/chemkin/species_edge_dictionary.txt` failed. (See above for error)
RMS_CSTR_liquid_oxidation Passed Observable Testing ✅
Regression test fragment:
Reference: Execution time (DD:HH:MM:SS): 00:00:00:31
Current: Execution time (DD:HH:MM:SS): 00:00:00:31
Reference: Memory used: 757.72 MB
Current: Memory used: 758.67 MB
fragment Passed Core Comparison ✅
Original model has 10 species.
Test model has 10 species. ✅
Original model has 2 reactions.
Test model has 2 reactions. ✅
fragment Passed Edge Comparison ✅
Original model has 33 species.
Test model has 33 species. ✅
Original model has 47 reactions.
Test model has 47 reactions. ✅
fragment Passed Observable Testing ✅
Errors occurred during observable testing ⚠️
WARNING: Initial mole fractions do not sum to one; normalizing.
Regression test RMS_constantVIdealGasReactor_fragment:
Reference: Execution time (DD:HH:MM:SS): 00:00:02:46
Current: Execution time (DD:HH:MM:SS): 00:00:02:47
Reference: Memory used: 2514.24 MB
Current: Memory used: 2453.89 MB
RMS_constantVIdealGasReactor_fragment Passed Core Comparison ✅
Original model has 10 species.
Test model has 10 species. ✅
Original model has 2 reactions.
Test model has 2 reactions. ✅
RMS_constantVIdealGasReactor_fragment Passed Edge Comparison ✅
Original model has 27 species.
Test model has 27 species. ✅
Original model has 24 reactions.
Test model has 24 reactions. ✅
RMS_constantVIdealGasReactor_fragment Passed Observable Testing ✅
Errors occurred during observable testing ⚠️
WARNING: Initial mole fractions do not sum to one; normalizing.
Regression test minimal_surface:
Reference: Execution time (DD:HH:MM:SS): 00:00:00:31
Current: Execution time (DD:HH:MM:SS): 00:00:00:30
Reference: Memory used: 916.23 MB
Current: Memory used: 918.65 MB
minimal_surface Passed Core Comparison ✅
Original model has 11 species.
Test model has 11 species. ✅
Original model has 3 reactions.
Test model has 3 reactions. ✅
minimal_surface Passed Edge Comparison ✅
Original model has 38 species.
Test model has 38 species. ✅
Original model has 38 reactions.
Test model has 38 reactions. ✅
minimal_surface Passed Observable Testing ✅
beep boop this comment was written by a bot 🤖
Following the merger of #2967, this PR merges
mainintostable. This is for archival reasons (users can retrieve historical versions fromstable) and also to trigger our automated builds on GitHub.