Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

coverage-dependent surface phase thermodynamics #1135

Merged
merged 40 commits into from
Mar 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
cb86bc0
Initial implementation of CoverageDependentSurfPhase
jongyoonbae Feb 16, 2021
b0ead2b
removed unnecessary parts from example yaml
jongyoonbae Feb 11, 2022
3efede5
revised covdepthermo main code block
jongyoonbae Apr 17, 2022
2ab1232
rectified thermo.pyx
jongyoonbae Apr 19, 2022
98854e6
enabled spell checker and fixed typos
jongyoonbae Jun 6, 2022
c7945f3
All lines modified to below 88 char
jongyoonbae Jun 30, 2022
a77e7b6
combined PiecewiseDependency into Interpolative Dependency
jongyoonbae Jun 30, 2022
a7a2fd5
Improve CoverageDependentSurfPhase documentation
jongyoonbae Jul 8, 2022
6ea746d
Nest dependency objects inside CoverageDependentSurfPhase class
jongyoonbae Jul 11, 2022
71d0f5f
CoverageDependentSurfPhase updates
jongyoonbae Jul 12, 2022
558519e
Remove redundant variables in PolynomialDependency
jongyoonbae Sep 9, 2022
8fa5b76
Remove redundant variables in initThermo
jongyoonbae Sep 12, 2022
e3c4c14
Fix reference class as SurfPhase in test
jongyoonbae Sep 12, 2022
044afab
Add descriptions in test
jongyoonbae Sep 13, 2022
dab38f3
Combine default constuctor away
jongyoonbae Sep 13, 2022
9e04328
Improve documentation
jongyoonbae Sep 16, 2022
eeb6a9a
Implement getParameters and getSpeciesParameters
jongyoonbae Sep 21, 2022
54da9ef
Add documentation in phases.rst and species.rst
jongyoonbae Sep 21, 2022
8ec7df9
Add thermo consistency test for CoverageDependentSurfPhase
jongyoonbae Sep 22, 2022
5eadd94
Add ThermoYamlRoundtrip test and python example
jongyoonbae Sep 27, 2022
315ca7d
Add CoverageDependentSurfPhase::type() method
jongyoonbae Oct 4, 2022
350f285
Generalize InterfacePhase type checking routine
jongyoonbae Oct 4, 2022
ad4a04d
Fix typos in code and docstring
jongyoonbae Feb 23, 2023
f225322
Fix notations and symbols in docstring
jongyoonbae Feb 23, 2023
ddac769
Remove redundancy in CoverageDependentSurfPhase
jongyoonbae Feb 23, 2023
26c5e6a
Improve coding style for CoverageDependentSurfPhase
jongyoonbae Feb 23, 2023
b24eea2
Fix interpolative map check routine and getSpeciesParameters method
jongyoonbae Feb 26, 2023
d88d099
Encapsulate parameter import routines into constructors
jongyoonbae Mar 10, 2023
d2422e2
Remove duplicate tests for CoverageDependentSurfPhase
jongyoonbae Mar 10, 2023
ad06d8c
Replace dynamic_cast with newInterface
jongyoonbae Mar 11, 2023
943ca0f
Compare all species reference thermo properties
jongyoonbae Mar 11, 2023
1a53d55
Replace keywords and cantera version
jongyoonbae Mar 11, 2023
115ff16
Add header on data/covdepsurf.yaml
jongyoonbae Mar 13, 2023
6d5f852
Add header on test/data/yaml
jongyoonbae Mar 13, 2023
10df20c
Remove unit entry from species.rst
jongyoonbae Mar 16, 2023
f4c2494
Update coefficient notations in the documentation
jongyoonbae Mar 16, 2023
6ec3dc2
Bundle up repeated entries in species.rst
jongyoonbae Mar 17, 2023
b4e7141
Restructure entries in species.rst
jongyoonbae Mar 17, 2023
03b342b
Improve documentation in CoverageDependentSurfPhase.h
jongyoonbae Mar 17, 2023
5c602e4
Add more description in phase.rst
jongyoonbae Mar 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ tracker.
Rounak Agarwal (@agarwalrounak)
David Akinpelu (@DavidAkinpelu), Louisiana State University
Emil Atz (@EmilAtz)
Jongyoon Bae (@jongyoonbae), Brown University
Philip Berndt
Wolfgang Bessler (@wbessler), Offenburg University of Applied Science
Paul Blum (@paulblum)
Expand Down
184 changes: 184 additions & 0 deletions data/covdepsurf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
description: |-
Coverage-dependent thermodynamic data for CO and O surface species
on Pt. NASA polynomial coefficients are extracted from K. Blondal,
J. Jelic, E. Mazeau, F. Studt, R.H. West, and C.F. Goldsmith,
"Computer-Generated Kinetics for Coupled Heterogeneous/Homogeneous
Systems: A Case Study in Catalytic Combustion of Methane on
Platinum.", Ind. Eng. Chem. Res. vol. 58, 17682–17691 (2019).
Coverage-dependencies data for CO-CO interaction are parametrized
from DFT-calculated values. The calculations were done with
PBE-D3 xc functional on a 3 x 3 Pt periodic slab. The CO-O
interaction parameters is a made-up value for the cross-interaction
demonstration purpose.

cantera-version: 3.0.0
date: Tue, 11 Oct 2022 14:23:01 -0500

phases:
- name: covdep_lin
jongyoonbae marked this conversation as resolved.
Show resolved Hide resolved
thermo: coverage-dependent-surface
species: [Pt(s), CO(s)_lin]
state:
T: 300 K
P: 1 atm
coverages: {Pt(s): 1.0}
site-density: 2.72e-09 mol/cm^2
reference-state-coverage: 0.11

- name: covdep_pwlin
thermo: coverage-dependent-surface
species: [Pt(s), CO(s)_pwlin]
state:
T: 300 K
P: 1 atm
coverages: {Pt(s): 1.0}
site-density: 2.72e-09 mol/cm^2
reference-state-coverage: 0.11

- name: covdep_poly
thermo: coverage-dependent-surface
species: [Pt(s), CO(s)_poly]
state:
T: 300 K
P: 1 atm
coverages: {Pt(s): 1.0}
site-density: 2.72e-09 mol/cm^2
reference-state-coverage: 0.11

- name: covdep_int
thermo: coverage-dependent-surface
species: [Pt(s), CO(s)_int]
state:
T: 300 K
P: 1 atm
coverages: {Pt(s): 1.0}
site-density: 2.72e-09 mol/cm^2
reference-state-coverage: 0.11

- name: covdep_cross
thermo: coverage-dependent-surface
species: [Pt(s), CO(s)_cross, O(s)]
state:
T: 300 K
P: 1 atm
coverages: {Pt(s): 1.0}
site-density: 2.72e-09 mol/cm^2
reference-state-coverage: 0.11

species:
- name: Pt(s)
composition: {Pt: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 1554.81, 5000.0]
data:
- [7.10129478e-03, -4.25609798e-05, 8.98507278e-08, -7.80169595e-11,
2.32458299e-14, -0.876096726, -0.0311207473]
- [0.16030291, -2.52239722e-04, 1.14183461e-07, -1.21476333e-11, 3.85825979e-16,
-70.8116648, -0.909545048]

- name: CO(s)_lin
composition: {Pt: 1, C: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 891.33, 5000.0]
data:
- [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11,
-3.45176032e+04, 4.3544767]
- [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14,
-3.43319289e+04, -4.85318015]
coverage-dependencies:
CO(s)_lin: {model: linear,
units: {energy: eV, quantity: molec},
enthalpy: 0.845, entropy: -0.051e-3,
heat-capacity-a: 0.020e-3, heat-capacity-b: -0.152e-3}

- name: CO(s)_pwlin
composition: {Pt: 1, C: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 891.33, 5000.0]
data:
- [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11,
-3.45176032e+04, 4.3544767]
- [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14,
-3.43319289e+04, -4.85318015]
coverage-dependencies:
CO(s)_pwlin: {model: piecewise-linear,
units: {energy: eV, quantity: molec},
enthalpy-low: 0.433, enthalpy-high: 1.512,
enthalpy-change: 0.44,
entropy-low: 0.415e-3, entropy-high: -0.31e-3,
entropy-change: 0.22,
heat-capacity-a: 0.020e-3, heat-capacity-b: -0.152e-3}

- name: CO(s)_poly
composition: {Pt: 1, C: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 891.33, 5000.0]
data:
- [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11,
-3.45176032e+04, 4.3544767]
- [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14,
-3.43319289e+04, -4.85318015]
coverage-dependencies:
CO(s)_poly: {model: polynomial,
units: {energy: eV, quantity: molec},
enthalpy-coefficients: [0.129, 0.633, 0.325, 0.],
entropy-coefficients: [0.640e-3, -1.547e-3, 0.798e-3, 0.],
heat-capacity-a: 0.020e-3, heat-capacity-b: -0.152e-3}

- name: CO(s)_int
composition: {Pt: 1, C: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 891.33, 5000.0]
data:
- [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11,
-3.45176032e+04, 4.3544767]
- [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14,
-3.43319289e+04, -4.85318015]
coverage-dependencies:
CO(s)_int: {model: interpolative,
units: {energy: eV, quantity: molec},
enthalpy-coverages: [0.0, 0.11, 0.22, 0.33, 0.44, 0.56,
0.67, 0.78, 0.89, 1.0],
enthalpies: [0., 0., 0.104, 0.182, 0.173, 0.266,
0.413, 0.718, 0.880, 1.05],
entropy-coverages: [0.0, 0.11, 0.22, 0.33, 0.44, 0.56,
0.67, 0.78, 0.89, 1.0],
entropies: [0., 0., 0.115e-3, 0.071e-3, 0.059e-3, -0.004e-3,
-0.023e-3, -0.071e-3, -0.074e-3, -0.115e-3],
heat-capacity-a: 0.020e-3, heat-capacity-b: -0.152e-3}

- name: CO(s)_cross
composition: {Pt: 1, C: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 891.33, 5000.0]
data:
- [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11,
-3.45176032e+04, 4.3544767]
- [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14,
-3.43319289e+04, -4.85318015]
coverage-dependencies:
CO(s)_cross: {model: linear,
units: {energy: eV, quantity: molec},
enthalpy: 0.845, entropy: -0.051e-3,
heat-capacity-a: 0.020e-3, heat-capacity-b: -0.152e-3}
O(s): {model: linear,
units: {energy: eV, quantity: molec},
enthalpy: 0.412}

- name: O(s)
composition: {Pt: 1, O: 1}
thermo:
model: NASA7
temperature-ranges: [100.0, 888.26, 5000.0]
data:
- [-0.759013067, 0.0189868498, -3.82473745e-05, 3.43558395e-08, -1.13974372e-11,
-1.72389494e+04, 1.76017396]
- [1.89893619, 2.03295425e-03, -1.19976574e-06, 2.32680659e-10, -1.53508282e-14,
-1.75144954e+04, -9.6410408]

36 changes: 36 additions & 0 deletions doc/sphinx/yaml/phases.rst
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ and optionally reactions that can take place in that phase. The fields of a
- :ref:`ideal-condensed <sec-yaml-ideal-condensed>`
- :ref:`ideal-solution-VPSS <sec-yaml-ideal-solution-VPSS>`
- :ref:`ideal-surface <sec-yaml-ideal-surface>`
- :ref:`coverage-dependent-surface <sec-yaml-coverage-dependent-surface>`
- :ref:`ions-from-neutral-molecule <sec-yaml-ions-from-neutral-molecule>`
- :ref:`lattice <sec-yaml-lattice>`
- :ref:`liquid-water-IAPWS95 <sec-yaml-liquid-water-IAPWS95>`
Expand Down Expand Up @@ -656,6 +657,41 @@ Example::
site-density: 2.7063e-09


.. _sec-yaml-coverage-dependent-surface:

``coverage-dependent-surface``
------------------------------

A coverage-dependent surface phase. That is, a surface phase where the enthalpy,
entropy, and heat capacity of each species may depend on its coverage and the
coverage of other species in the phase.
Full details are
`described here <https://cantera.org/documentation/dev/doxygen/html/db/d25/classCantera_1_1CoverageDependentSurfPhase.html#details>`__.
jongyoonbae marked this conversation as resolved.
Show resolved Hide resolved
Majority of coverage dependency parameters are provided in the species entry as
`described here <https://cantera.org/documentation/dev/sphinx/html/yaml/species.html#coverage-dependent-surface>`__.

Additional fields:

``site-density``
The molar density of surface sites.

``reference-state-coverage``
The reference state coverage denoting the low-coverage limit (ideal-surface)
thermodynamic properties.

Example::

- name: covdep
thermo: coverage-dependent-surface
species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt]
state:
T: 500.0
P: 1.01325e+05
coverages: {Pt: 0.5, OC_Pt: 0.5, CO2_Pt: 0.0, C_Pt: 0.0, O_Pt: 0.0}
site-density: 2.72e-09
reference-state-coverage: 0.22


.. _sec-yaml-ions-from-neutral-molecule:

``ions-from-neutral-molecule``
Expand Down
93 changes: 93 additions & 0 deletions doc/sphinx/yaml/species.rst
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,99 @@ Additional fields:
coefficients for binary interactions between the two species.


.. _sec-yaml-coverage-dependent-surface-species:

Coverage-dependent Surface
--------------------------

A model where species thermodynamic properties are calculated as a function
coverage as
`described here <https://cantera.org/documentation/dev/doxygen/html/db/d25/classCantera_1_1CoverageDependentSurfPhase.html#details>`__.

Additional fields:

``coverage-dependencies``
Mapping where keys are the name of species whose coverage affects
thermodynamic properties of the node-owner species. The map values are
the dependency entries including ``model``, model-specific parameters,
``heat-capacity-a``, and ``heat-capacity-b`` that correspond
to an individual dependency between the node-owner species and keyed species.

``model``
Dependency model for coverage-dependent enthalpy or entropy. It should be
one of the four: ``linear``, ``polynomial``, ``piecewise-linear``
or ``interpolative``. The ``model`` and model-specific parameters are grouped
as follow.

``linear``: ``enthalpy``, ``entropy``

``polynomial``: ``enthalpy-coefficients``, ``entropy-coefficients``

``piecewise-linear``: ``enthalpy-low``, ``enthalpy-high``, ``enthalpy-change``,
``entropy-low``, ``entropy-high``, ``entropy-change``

``interpolative``: ``enthalpy-coverages``, ``enthalpies``, ``entropy-coverages``,
``entropies``

``enthalpy`` or ``entropy``
Slope of the coverage-dependent enthalpy or entropy used in the ``linear``
model.

``enthalpy-coefficients`` or ``entropy-coefficients``
Array of polynomial coefficients in order of 1st, 2nd, 3rd, and 4th-order
used in coverage-dependent enthalpy or entropy calculation with the ``polynomial``
model.

``enthalpy-low`` or ``entropy-low``
Slope of the coverage-dependent enthalpy or entropy for the lower coverage
region used in the ``piecewise-linear`` model.

``enthalpy-high`` or ``entropy-high``
Slope of the coverage-dependent enthalpy or entropy for the higher coverage
region used in the ``piecewise-linear`` model.

``enthalpy-change`` or ``entropy-change``
Coverage that separates the lower and higher coverage regions of the
coverage-dependent enthalpy or entropy used in the ``piecewise-linear`` model.

``enthalpy-coverages`` or ``entropy-coverages``
Array of discrete coverage values used in coverage-dependent enthalpy
or entropy used in the ``interpolative`` model.

``enthalpies`` or ``entropies``
Array of discrete enthalpy or entropy values corresponding to the coverages
in ``enthalpy-coverages`` or ``entropy-coverages``, respectively, used in the
``interpolative`` model.

``heat-capacity-a`` or ``heat-capacity-b``
Coefficient :math:`c^{(a)}` or :math:`c^{(b)}` used in the coverage-dependent
``heat capacity`` model.

Example::

coverage-dependencies:
OC_Pt: {model: linear,
units: {energy: eV, quantity: molec},
enthalpy: 0.48, entropy: -0.031}
C_Pt: {model: polynomial,
units: {energy: J, quantity: mol},
enthalpy-coefficients: [0.0, -3.86e4, 0.0, 4.2e5],
entropy-coefficients: [0.8e3, 0.0, -1.26e4, 0.0]}
CO2_Pt: {model: piecewise-linear,
units: {energy: kJ, quantity: mol},
enthalpy-low: 0.5e2, enthalpy-high: 1.0e2,
enthalpy-change: 0.4,
entropy-low: 0.1e2, entropy-high: -0.2e2,
entropy-change: 0.4,
heat-capacity-a: 0.02e-1, heat-capacity-b: -0.156e-1}
O_Pt: {model: interpolative,
units: {energy: kcal, quantity: mol},
enthalpy-coverages: [0.0, 0.2, 0.4, 0.7, 0.9, 1.0],
enthalpies: [0.0, 0.5, 1.0, 2.7, 3.5, 4.0],
entropy-coverages: [0.0, 0.5, 1.0],
entropies: [0.0, -0.7, -2.0]}


.. _sec-yaml-species-transport:

Species transport models
Expand Down
Loading