# Cantera Outline

### From charlesreid1

## Contents

# Outline

Introduction: Cantera in Short

Part I: Cantera Core

Part II: Cantera for Python

Part III: Cantera for Reaction Engineering

# Overview of Cantera

- Capabilities
- High level division of Cantera's capabilities
- Zero-D, One-D, phase objects, numerics

- Division of capabilities should roughly follow how Cantera source code is divided
- Apps - utilities for converting between Chemkin and Cantera file formats, parsing input files, comparing output files, etc.
- Base - more utilities for array storage, printing and logging, XML file parsing, Cantera errors/exceptions,
- Clib - code for C API
- Converters
- Equil
- Fortran - code for Fortran API
- Kinetics - classes for getting/setting/calculating reaction network quantities (net production rate source terms, reaction rate parameters, etc.)
- Matlab - code for Matlab API
- Numerics - classes for solving ordinary differential equations, evaluating Jacobians, Newton methods, constructing and solving matrices, etc.
- OneD - classes relating to one-dimensional simulations (domains, stacks, one-dimensional flame simulations, etc.)
- Python - code for Python API
- Spectra
- Thermo
- TPX
- Transport
- ZeroD - classes relating to zero-dimensional Reactors (Reactor, Wall, etc.)

# Thermodynamics

- Somewhere in our algorithm, looping over domain (or for the single reactor control volume), and we're saying, "update thermo and transport parameters" - focus on how this is being done, what classes its using, what capabilities are available

- Phase objects
- Cantera/Gases - information about gas phase objects in Cantera
- Cantera/Surfaces - information about surface phase objects in Cantera

- Single phase gas calculations
- Temperature/power calculations
- Basic Python numerics + simple Cantera gas stuff
- Isenthalpic valve drops
- Plain reactors: piston-cylinder problems
- Cantera/Phase Equilibrium Solvers for determining gas equilibrium state (e.g., you set U, you get T)

- Introductory CHEE type calculations
- Solving simple matrix systems, using Cantera's MW/density/properties functionality

# Kinetics

- Discussion of kinetics

- Cantera/Reaction Rate Source Terms
~~Reaction rate source terms, separate from reactors~~

- Cantera/Reaction Rate Source Terms

- Cantera/Kinetic Mechanisms
~~Kinetic mechanisms~~- Theory of chemical reactions
- Definitions of quantities involved in chemical reactions
- Theoretical information needed (by Cantera) to define reaction mechanisms
- Cantera/CTI Files Specification of reaction kinetics in CTI files (useful info here: http://www.et.byu.edu/~tom/classes/641/Cantera/InputFile/definingphases.pdf)
- Cantera/CTI Files/Phases Specification of phases
- Cantera/CTI Files/Species Specification of species
- Cantera/CTI Files/Reactions Specification of reactions

- Specification of reaction kinetics in XML files

- Cantera/Kinetic Mechanisms

- Cantera kinetics examples
- Cantera/Simple Reaction
~~A very simple reaction~~ - Cantera/Simple Reaction Network A very simple reaction network
- Cantera/Complex Reaction Network A more complex reaction network

- Cantera/Simple Reaction
- Single phase kinetics
- Source code abstraction
- Examples of obtaining reaction rates
- Graphene - how to really USE this information

- Multiphase surface kinetics
- Cantera/Surface Coverage
~~Surface coverage, site density, formulation of approach~~ - Source code abstraction - Walls vs. SurfPhase vs. (etc.)

- Cantera/Surface Coverage

- Cantera kinetics examples

# Transport

- BSL

- Mass transfer
- Cantera/Diffusion
~~Mixture vs. multicomponent diffusion~~ - Cantera/Diffusion Coefficients - Diffusion coefficient models
- Mass transfer coefficients

- Cantera/Diffusion

- Heat transfer
- Heat diffusivity
- Heat transfer coefficients

- Momentum transfer

- General discussion: non-dimensional analysis, how it relates to Cantera
- Prandtl matlab examples - comparing transport properties (Prandtl number) for mixture-averaged and multicomponent models

# Reactor Design

## Overview of Cantera Reactors

Theory:

- Description of generic Cantera reactors, canonical CHE reactor types

Practice: introduction to reactors

- Cantera/Reactors - general information about reactors, how to create them, how to turn energy equation on/off, really brief "how it works"
- Cantera/Batch Reactors
- Cantera/Stirred Tank Reactors
- Cantera/Plug Flow Reactors - how to create them - good opportunity to demonstrate object-oriented programming, by creating a class that is a PFR.

## Cantera Reactors In-Depth

Theory:

- Cantera/Reactor Equations
~~General Cantera reactor equations~~ - Cantera/Integral and Differential Reactors
~~Integral vs. differential reactors~~ - Cantera/Isothermal and Nonisothermal Reactors
~~Isothermal vs. non-isothermal reactors~~

- Heterogeneous vs. homogeneous
- Transport effects in reactors
- Fogler, Froment/Bischoff, Belfiore

## Hacking Cantera Reactors

Focus on use of Python to extend the Reactor object itself, so that you don't have to redefine everything.

Simple "EnhancedReactor" that uses an inlet dictionary.

Simple "SurfaceReactor" that stores surface information.

(Illustrate test-driven development: write intuitive code to simulate the reactors, and design the class around that.)

# Cantera Numerics

- Cantera/Structure
~~Structure of Cantera: "numerics" layer and "constitutive equations" layer~~

- Ordinary differential equations
- Cantera formulation, reactor equations
- ODE as primary problem type being solved in Cantera
- Cantera numerics, ODE solver sophistication
- Have ALREADY shown, with a simple Fipy time integrator, that Sundials has a lot of sophistication... that sophistication is NECESSARY for kinetics/reaction equations

- Surface coverage equations
- Surface species treated as control volume properties
- Packaged up into the Reactor's solution vector
- The Green's Function hack that makes a boundary condition into part of the domain

- Partial differential equations
- Cantera solutions to one-dimensional systems
- Assumptions being made for each problem type (axisymmetric, stagnation, etc.)

- Assorted numerical topics
- Newton's method
- Linear algebra
- Jacobians - Sandia report with definitions of Jacobians

- Initial value problems
- Boundary value problems
- Advanced boundary conditions

- Strategies for coupling Cantera with CFD
- Cantera/Fipy PFR
~~external numerical library for solving spatial boundary value problem~~ - Interfacing with Chemkin-like programs (Fluent)
- Constructing your own numerical ODE/PDE solver
- Scipy: simple kinetic equation integration using Scipy
- Fipy: simple diffusion problem, coupling with Cantera
- Fipy: more complex reactor equation(s) and coupling with Cantera

- Cantera/Fipy PFR

# Using Cantera with Python

- Strategies for object-oriented Python, particularly as applied to physics problems
- Strategies for combining Python-related libraries/modules/utilities with Cantera
- matplotlib
- numpy
- itertools
- pandas

- Numerics (outside of Cantera)
- Optimization

- Creating bottled gases - ways of conveniently wrapping gas objects, without loading XML file every single time, to allow for quick creation of a gas

- Cantera/Composition Helper Functions - defining helper functions to wrap Cantera

- Object oriented reactor extension example - aidt? adiabatic flame temp?

# Optimization

- Not going into too much depth
- Optimizing kinetic parameters to fit data
- Optimizing other variables to maximize reactor performance

# Mechanics

- Cantera/Debugging Cantera
~~Debugging Cantera~~ - Cantera/Debugging Cantera from Python
~~Debugging Cantera from Python~~

- Cantera/Extending_C_API
~~Hacking, extending C API~~

# Cantera for Engineers

Throughout the coverage of the core capabilities of Cantera, we've covered a lot of theoretical aspects of what Cantera does and how it works

Now would like to supplement with some illustrative engineering calculations that use these lower-level constitutive models for practical engineering design

Revisit structure of everything else, but show how you can use each feature to do practical engineering calculations

Start with gases only:

- heat capacities, integration, evaluation of physical properties
- creating gas mixtures
- equilibrating gases
- reaction rates, rate constants, molecular weights, what reacts into what, stoichiometric coefficients
- all that bookkeeping stuff

Move on to non-reacting reactors:

- piston-cylinder problems
- heaters
- coolers
- etc.

Modeling piston-cylinder problems

Modeling heat duties

Equilibrium thermodynamics

- the Delta-G problem from CHE phase equilibria, surface minimization, etc.

Reacting reactors

- engineering calculations related to reacting reactors
- wrapping the simple reactor calculations for actual engineering design calculations

Cantera/Adiabatic Flame Temperature Dilution - investigating the effect of dilution on adiabatic flame temperature with nitrogen and carbon dioxide

Separations/mass transfer unit ops

- Distillation columns - series of reactors operating at steady state

# Flags

CanteraCantera
Outline of Cantera topics: Understanding Cantera's Structure: Cantera Structure Cantera from Matlab: Using_Cantera#Matlab Cantera from Python: Using_Cantera#Python Cantera from C++: Using_Cantera#C++ Cantera + Fipy (PDE Solver): Fipy and Cantera/Diffusion 1D Cantera Gas Objects: Cantera/Gases Cantera 1D Domains, Stacks: Cantera_One-D_Domains Cantera Gas Mixing: Cantera_Gas_Mixing
Diffusion: Cantera/Diffusion Sensitivity Analysis: Cantera/Sensitivity Analysis Analysis of the Jacobian Matrix in Cantera: Jacobian_in_Cantera Chemical Equilibrium: Chemical_Equilibrium Kinetic Mechanisms: Cantera/Kinetic_Mechanisms Reactor Equations: Cantera/Reactor_Equations Differential vs. Integral Reactors: Cantera/Integral_and_Differential_Reactors Effect of Dilution on Adiabatic Flame Temperature: Cantera/Adiabatic_Flame_Temperature_Dilution
Cantera for Catalysis: Cantera_for_Catalysis Steps for Modeling 0D Multiphase Reactor: Cantera_Multiphase_Zero-D Reaction Rate Source Terms: Cantera/Reaction_Rate_Source_Terms Surface coverage: Cantera/Surface_Coverage Surface reactions: Cantera/Surface_Reactions
Chemkin file format: Chemkin CTI files: Cantera/CTI_Files
Pantera (monkey patches and convenience functions for Cantera): Pantera Extending Cantera's C API: Cantera/Extending_C_API Extending Cantera with Python Classes: Cantera/Adding Python Class Debugging Cantera: Cantera/Debugging_Cantera Debugging Cantera from Python: Cantera/Debugging_Cantera_from_Python Gas Mixing Functions: Cantera_Gas_Mixing Residence Time Reactor (new Cantera class): Cantera/ResidenceTimeReactor
Cantera Resources: Cantera Resources Cantera Lecture Notes: Cantera_Lecture
Category:Cantera Category:C++ · Template:CanteraFlag · e |

Installing Cantera
Mac OS X 10.5 (Leopard): Installing_Cantera#Leopard Mac OS X 10.6 (Snow Leopard): Installing_Cantera#Snow_Leopard Mac OS X 10.7 (Lion): Installing_Cantera#Lion Mac OS X 10.8 (Mountain Lion): Installing_Cantera#Mountain_Lion Ubuntu 12.04 (Precise Pangolin): Installing_Cantera#Ubuntu Windows XP: Installing_Cantera#Windows_XP Windows 7: Installing_Cantera#Windows_7
In old versions of Cantera, a preconfig file was used to specify library locations and options. Mac OS X 10.5 (Leopard) preconfig: Cantera_Preconfig/Leopard_Preconfig Mac OS X 10.6 (Snow Leopard) preconfig: Cantera_Preconfig/Snow_Leopard_Preconfig Mac OS X 10.8 (Mountain Lion) preconfig: Cantera_Config/MountainLion_SconsConfig Ubuntu 12.04 (Precise Pangolin) preconfig: Cantera_Config/Ubuntu1204_SconsConfig Flags· Template:InstallingCanteraFlag · e |