-
Notifications
You must be signed in to change notification settings - Fork 1
drummerdoc/ChemPathTool
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Chemical Reaction Path Diagram Tool Introduction: Chemical Reaction Path Diagrams The chemical reaction path diagram tool (ChemPathTool) aids in the generation of chemical path diagrams for reacting flow systems. More generally, Pathtool is used to manipulate graphically the layout of a bi-directed graph. For reacting flow systems, the nodes of this graph represent chemical species, and the arrows (or, edges) connecting the nodes represent the flow of a conserved quantity between species, such as the transfer rate of a particular atom. In our systems, atoms are transferred among species through chemical reactions. For example, when the reaction CH4(+M)<=>H+CH3(+M) proceeds, the impact of an arbitrary molecule (M) knocks one H atom from the CH4 molecule. Thus, a carbon atom is "transferred" from the set of all CH4 molecules to the set of CH3. The progress rate of this reaction (and its reverse, ie sticking an H atom onto a CH3 molecule) depends on the local state. In a typical reacting flow calculation there are hundreds of such reactions, and the goal is to understand how the state of the fluid affects the reaction balance. The path diagram turns out to be a good way to visualize the state of the chemical system. The edges in a path diagram are obtained from a numerically simulated reacting flow using three basic steps: 1. A full state is obtained from the simulation. The state might represent an instantaneous snapshot from a time-dependent simulation or a steady solution. The state includes temperature, pressure, density and species distribution. 2. Forward and reverse reaction rates are computed for every relevant chemical reaction in the system using this state. 3. The reactions are "decomposed" into path diagram edge contributions and summed, and are thereby converted to values representing the rate that a particular atom is exchanged among chemical species. The summing, or integration, may extend over a section of a multidimensional reacting flow domain, or may be conditioned on any parameter the investigator may find useful for the analysis. The chemical species and atomic flux rates are loaded into our tool as graph nodes and directed edges, respectively. The user then manipulates the layout of this graph into a geometry that is visually meaningful. The resulting path diagram is written out as an Encapsulated PostScript file for printing or further manipulation, and the layout of the nodes can be saved and reused with another set of edge strengths. By changing the input data (simulation parameters, region of integration, atom of interest, etc), one can generate a series of path diagrams that are useful for identifying patterns in the chemical system. There are a number of automated path generation tools available on the web. But from our point of view, they all had a serious flaw that rendered them unusable. All the tools were too smart, in that they found all sorts of nifty optimized ways to arrange the nodes based on the strength and connectivity of the edges. Each run resulted in a different nodal layout, and any two cases were impossible to compare side by side. (Moreover, there are standard species layouts in the combustion literature one might like to emulate). The ChemPathTool allows (or forces, depending your point of view) one to specify the location of the nodes regardless of the edge strengths. Since the user must now design graph layouts, we found it most simple to provide a simple customized drawing tool. In the end, our simple concept led to a piece of software with two aims: easy creation of a nice layout, and application of that layout to multiple sets of edge strengths. You may have picked up on one omission from the previous paragraph: how to generate the data in practice. Like all analysis, this can be arbitrarily complicated. In a later section, we present a simple example that will guide you in creating your own data. General ChemPathTool Usage The node names and edge strengths are loaded into the tool as a file containing a list of names and numbers. This may be done while starting the tool from the python command-line, or after the tool has been started. The main window of the tool features a prominent drawing canvas, and a number of toggle switches and menus. Beginning with a blank canvas, the user makes a subset of the nodes visible and arranges them interactively using the mouse pointer ("align", "distribute", "group", "lock", "nudge" and "rubber-band select" tools, such as those found in common illustration software, make it easy to generate publication-quality results). The directed edges connected to the nodes follow them as they are moved around the canvas. Only edges with strength above a threshold are drawn; the threshold value is controlled with a "slider" widget as a percentage of a reference edge value. The layout may be saved to a file, and recalled for a new dataset. If the new dataset has a different set of species, only those in common with the saved set are placed on the canvas (this allows side-by-side comparisons of results from different mechanism reductions, for example). The remaining nodes may be omitted, or placed on the canvas in a separate step. The resulting path diagram is then saved in EPS format, allowing annotations and touch-ups by fancier illustration packages. Click here for a demonstration of the ChemPathTool in action. ChemPathTool Data Requirements ChemPathTool requires data input in the form of a list of nodes and a list edges. Data for each node includes the text string that will be used as a label. Edge data includes the labels of the "from" and "to" nodes, and the strength of the edge (thickness of the arrow to be drawn). Optionally, two values may be associated with each edge. The data is given to the ChemPathTool in the form of an ascii text file, or "ChemPathTool Edge Data" (CED) file, and is loaded via the "File->Load Edge Data" menu while the tool is running: Line 1->Case ID Line 2->sp1 sp2 sp3 sp4 sp5 sp6 Line 3->sp2 sp4 1.9 -2.3 Line 4->sp1 sp3 2.3 -100 Line 5->... The first line of the file contains an ID string that can optionally be printed onto the canvas. The second line contains the set of space-delimited names associated with each node. Each line after that contains two species names (each must be on the list given at the top), and one or two values. Often the two values will be of opposite sign and indicate the production and depletion of a species--a single value would represent their sum. The ChemPathTool will normalize these values linearly and draw edge arrows connecting the nodes on the canvas using a correspondingly scaled arrow thickness. A toggle on the panel allows one to coalesce the two on the fly. Another toggle allows one to shut off the auto-scaling (when auto-scaling is off, then a weight of 100 produces an arrow 20pts thick). Some nodes may not be connected in a given edge data set. Input Data Generation - Example Generation of the data can be arbitrarily complex, depending of course on the quantity you're trying to visualize. In the simplest case, one has a single state, which includes the pressure, temperature and species distribution. With this state you will associate a chemical reaction mechanism and set of thermodynamic relations between state properties. With these one may compute chemical reaction rates. Then, given a choice for which atom to trace through the system, one can form the complete set of path diagram edges, and proceed to evaluate them into the CED file described in the section above. As this part of the analysis is outside the scope the ChemPathTool intentions, we borrow heavily from Dave Goodwin's Cantera package to ease the generation of sample data. We basically create a filter that turns a set of state data into a PED file using the appropriate ChemKin(TM) input file and some handy scripts (which are included with the ChemPathTool, by the way). Line 1-> from mechinfo import * Line 2-> from CanteraChemEdgeAnalysis import * Line 3-> from Cantera import OneAtm Line 4-> Line 5-> readMechanism('gri30.inp') Line 6-> Nspec = numSpecies() Line 7-> Line 8-> # Set state Line 9-> X = [1.0 / Nspec] * Nspec Line 10-> setState(2000.0, OneAtm, X) Line 11-> Line 12-> # Compute reaction rates Line 13-> qf = fwdRatesOfProgress() Line 14-> qr = revRatesOfProgress() Line 15-> qnet = qf - qr Line 16-> Line 17-> # Decompose reactions into edges Line 20-> edges = getEdges('C') Line 21-> Line 22-> # Dump out nodes and edges Line 23-> print join(speciesNames()) Line 24-> for e in edges: Line 25-> valf = 0.0 Line 26-> valr = 0.0 Line 27-> for [r,c] in e.rateWeightList: Line 28-> valf += c*qf[r] Line 29-> valr += c*qr[r] Line 30-> print e.sp1,e.sp2,valf,-valr This script is written in the python language, but should be easy tofollow. In lines 1-3, we import a number of useful functions from Cantera. We also include CanteraChemEdge-Analysis provided with this distribution, which includes a special support function to be discussed in momentarily. Line 5 is the Cantera call to read up a ChemKin(TM) style reaction mechanism and thermodynamics database file. Line 6 defines a handy variable, and Line 9 uses it to create a reasonable value for all the species mole fractions. Line 10 sets the state inside the Cantera package, and then Lines 13-14 use that state to compute the forward and reverse reaction rates for all the reactions specified in "gri30.inp". The two calls result in two arrays of floating point numbers. Line 20 uses the reaction data from "gri30.inp" to generate a set of edges that represent the flow of "C" or Carbon through the system. This is accomplished by looking at each reaction involving carbon-containing species, and identifying the atoms shuffled between species as the reaction progress. For all but a very few cases, such a decomposition is unambiguous. There are exceptions in the automatic processing though. For example, when tracing nitrogen, the reaction HNO + NO2 <=> HONO + NO may remove an H atom from HNO resulting in NO. Alternatively, HNO could gain an O atom and become HONO. The code in the CanteraChemEdgeAnalysis.py file provided with this distribution arbitrarily chooses to transfer the lighter of the two species. However, such a decision is certain to be wrong in some cases.....buyer beware. Each edge in the edge list provided by the function "getEdges" contains the "to" and "from" species, and a list of reaction id's and corresponding multipliers to indicate the number of trace atoms transferred on each occurrence of the reaction. The loop in Lines 24-29 sums the forward and reverse atomic fluxes separately for each edge. Finally, Lines 23 and 30 print the desired PED file to stdout. The resulting text file is then input into the ChemPathTool directly. ChemPathTool Installation <NB: A complete install on a Win2K machine takes about 10 minutes or less> The path tool is fully contained in a simple (albeit somewhat lengthy) Python script. Python is an interpreted, interactive, object-oriented programming language. It is often compared to Tcl, Perl, Scheme or Java. There are Python interfaces to many system calls and libraries, as well as to various windowing systems (X11, Motif, Tk, Mac, MFC). The Python implementation is portable: it runs on many brands of UNIX, on Windows, DOS, OS/2, Mac, Amiga. Therefore, our ChemPathTool should be fully portable across all platforms supported by Python. A Python script is a text file that is interpreted by the Python interpreter, in a fashion similar to PostScript, MatLab, Mathematica, etc. There is a large body of freely available modules for extending Python's basic functionality. For our puposes, the most useful of these are Tkinter and the Python Mega Widgets (Pmw). Tkinter provides a very simple and uniform interface to the local window system (X-windows, Microsoft, MacOS, etc) to enable simple GUI construction, and is included with the latest Python distribution on most platforms. Pmw provide an even simpler interface to some handy buttons and such, and is installed by copying a directory into a special location in the Python directories built during the default Python install. To install Cantera's Python interface, it's best to go directly to Dave Goodwin's Cantera site after you finish the first three steps below successfully. See step (4) below for more information. To install ChemPathTool: 1. Go to http://www.python.org/download and get/install the latest version of Python (version 2.2.1 as of this writing). For windows in particular, you will get the windows installer. Double-click on the .exe file you download, verify the default install location, and click finish. There are rpm's for Linux and Mac binaries for the Macintosh that are similarly easy to intall. For other systems, you've got do the the usual "gunzip; tar; configure; make install" deal. After Python is installed, add the Python directory (eg, C:\Program Files\Python22) to your PATH so you can run it at the command prompt. 2. Go to http://pmw.sourceforge.net and grab the Pmw tarball (version 2.0.0 as of this writing) Unzip and untar, and then put the resulting Pmw directory in your Python site-packages area (alternatively be sure that your PYTHONPATH environment variable points to a directory that includes the Pmw directory). On my Windows 2000 machine, all the Pmw stuff ended up in a directory called C:\Program Files\Python22\Lib\site-packages\Pmw Alternative, and perhaps better, if you have sudo, do sudo python setup.py install 3. Download the ChemPathTool-1.1 tarball from the CCSE software website. Unpack ChemPathTool-1.1.tgz, and copy the files that end up in the directory "ChemPathTool-1.1" over to the same site-packages directory used for (2) above. On my Win2K machine, I ended up, for example, with the file: C:\Program Files\Python22\Lib\site-packages\pathTool.py and a few others like it. (For a windows machine, you may alternatively grab the Windows install file, and double-click it. This will not only put the ChemPathTool files in the correct place, but will provide an uninstall capability available from the "Start->Settings->Control Panel->Add/Remove Programs" window to clean out the whole thing later if desired.) 4. The sample of python code above is compatible with version 1.3 of the Python interface to Cantera, which should be available from the Cantera website. Dave was good enough to allow me to have an advance copy of the Python components of Cantera 1.3, and to make the windows-executable forms available here. So, for windows machines, download the Cantera-1.3.zip file here, and unzip it (for all other platforms, you�ll have to get the official 1.3 [or greater] release). Move the resulting Cantera folder into the same site-packages directory used for (2) above, or to a place on your PYTHONPATH. On my windows machine, I end up with a directory called C:\Program Files\Python22\Lib\site-packages\Cantera To run ChemPathTool: ChemPathTool may be started two ways: 1. Double-click on the pathTool.py file in the Python site-packages area (requires that your PATH variable includes the directory with the python executable). 2. Import ChemPathTool into a python script, and invoke the tool as a function call. A simple example is included in the distribution as a script file, "pathToolScr.py". From a command-line prompt in the directory containing the file �pathToolScr.py�, type �python pathToolScr.py� Comments and Acknowledgements The key to the path diagram tool existence has been in its simplicity. We are not software packagers, and have only put a minimal effort into its development. However, we strongly encourage suggestions or contributions in terms of additional features and bugs reports (to: [email protected]). General feedback and criticisms of the tool are welcome, nay encouraged. We hope that you find this drawing and analysis tool useful and inspiring of new analysis techniques and tools. Also, we should mention that the path tool was developed upon ideas originally programmed by Bill Crutchfield. Bill pointed us to Tkinter and created a first-cut implementation that has evolved into its present shape. Also, Joe and I fleshed out our thoughts on reaction decomposition in part while talking with Dave Goodwin, the developer of the Cantera chemistry package. Without input from these two, we may well have never built the tool.
About
Python2-based chemical path diagramming tool
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published