From charlesreid1

No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:


CTI files use a custom markup language to specify information about the kinetics.
CTI files use a custom markup language to specify information about the kinetics.
(You may also be interested in reading the [[Chemkin]] page.)


A CTI file must specify information about three things:
A CTI file must specify information about three things:
Line 7: Line 11:
* Species - [[Cantera/CTI Files/Species]]
* Species - [[Cantera/CTI Files/Species]]
* Reactions - [[Cantera/CTI Files/Reactions]]
* Reactions - [[Cantera/CTI Files/Reactions]]


=Units Specification=
=Units Specification=
Line 32: Line 38:
==Conversion of Chemkin Files to CTI==
==Conversion of Chemkin Files to CTI==


CTI files can be generated from the ck2cti app, contained in <code>cantera/src/apps/ck2cti.cpp</code>, which is a command-line utility to turn Chemkin-II reaction mechanism files, as well as transport and thermodynamic database files, into a CTI file.
CTI files can be generated from the ck2cti2 app, contained in <code>cantera/src/apps/ck2cti.cpp</code>, which is a command-line utility to turn Chemkin-II reaction mechanism files, as well as transport and thermodynamic database files, into a CTI file.
 
Here is the description of the utility:
 
<pre>
ck2cti.py: Convert Chemkin-format mechanisms to Cantera input files (.cti)
 
If the output file name is not given, an output file with the same name as the
input file, with the extension changed to '.cti'.
 
Usage:
    ck2cti --input=<filename>
          [--thermo=<filename>]
          [--transport=<filename>]
          [--id=<phase-id>]
          [--output=<filename>]
          [-d | --debug]
 
Example:
    ck2cti --input=chem.inp --thermo=therm.dat --transport=tran.dat
</pre>


This utility can be called like this:
So to use this, I could run the command:


<pre>
<pre>
ck2cti -i input -t thermo -tr transport -id idtag
ck2cti2 --input=input.file --thermo=thermo.file --transport=transport.file --id=phaseid --output=myfile.cti
</pre>
</pre>


where "input" is a Chemkin II reaction mechanism file (the meat of the CTI file), "thermo" is a file in which to look for thermodynamic data if there is no THERMO section of the Chemkin input file, "transport" is a file in which to look for transport data (no transport data is put into the final CTI file if this is left off), and "idtag" is a string name to give to the phase created in the new CTI file.
where input is a Chemkin II reaction mechanism file (the meat of the CTI file), thermo is a file in which to look for thermodynamic data if there is no THERMO section of the Chemkin input file, transport is a file in which to look for transport data (no transport data is put into the final CTI file if this is left off), and phaseid is a string name to give to the phase created in the new CTI file.


==Conversion of CTI to XML==
==Conversion of CTI to XML==
Line 74: Line 100:
</source>
</source>


The code that deals with CTI files is actually in two lines of Python code:
This C++ code is actually calling the Python code that will do the conversion, using routines defined in <code>cantera/interfaces/python/ctml_writer.py</code>.
 
The two lines of Python code that it calls consist of one import statement, and one call to convert the file:


<pre>
<source lang="python">
import ctml_writer
import ctml_writer
ctml_writer.convert( [file] )
ctml_writer.convert( [file] )
</pre>
</source>


The call to <code>ctml_writer</code> references the Python routines located in <code>cantera/interfaces/python/ctml_writer.py</code>, which interprets the CTI file and turns it into an XML file.
The call to <code>ctml_writer</code> references the Python routines located in <code>cantera/interfaces/python/ctml_writer.py</code>, which interprets the CTI file and turns it into an XML file.


Looking through the <code>ctml_writer.py</code> code, you can see that it starts at the <code>convert()</code> method, then moves to the <code>write()</code> method, where it builds each piece of information specified in the CTI into an XML data structure, which is then written to a file.
Looking through the <code>ctml_writer.py</code> code, you can see that it starts at the <code>convert()</code> method. The convert method then moves to the <code>write()</code> method, where it builds each piece of information specified in the CTI into an XML data structure. Finally, that data structure is written to an XML file.




=Flags=


[[Category:Cantera]]
{{CanteraFlag}}

Latest revision as of 08:43, 17 April 2017

CTI = CanTera Input file

CTI files use a custom markup language to specify information about the kinetics.

(You may also be interested in reading the Chemkin page.)


A CTI file must specify information about three things:


Units Specification

The units are the first thing defined in the file:

units(length = "cm", time = "s", quantity = "mol", act_energy = "J/mol")

Phases

Information about specifying phases in Cantera input file here: Cantera/CTI Files/Phases

Species

Information about specifying species in Cantera input files here: Cantera/CTI Files/Species

Reactions

Information about specifying reactions in Cantera input files here: Cantera/CTI Files/Reactions

CTI-Related Code

Conversion of Chemkin Files to CTI

CTI files can be generated from the ck2cti2 app, contained in cantera/src/apps/ck2cti.cpp, which is a command-line utility to turn Chemkin-II reaction mechanism files, as well as transport and thermodynamic database files, into a CTI file.

Here is the description of the utility:

ck2cti.py: Convert Chemkin-format mechanisms to Cantera input files (.cti)

If the output file name is not given, an output file with the same name as the
input file, with the extension changed to '.cti'.

Usage:
    ck2cti --input=<filename>
           [--thermo=<filename>]
           [--transport=<filename>]
           [--id=<phase-id>]
           [--output=<filename>]
           [-d | --debug]

Example:
    ck2cti --input=chem.inp --thermo=therm.dat --transport=tran.dat

So to use this, I could run the command:

ck2cti2 --input=input.file --thermo=thermo.file --transport=transport.file --id=phaseid --output=myfile.cti

where input is a Chemkin II reaction mechanism file (the meat of the CTI file), thermo is a file in which to look for thermodynamic data if there is no THERMO section of the Chemkin input file, transport is a file in which to look for transport data (no transport data is put into the final CTI file if this is left off), and phaseid is a string name to give to the phase created in the new CTI file.

Conversion of CTI to XML

Once you have a CTI file (generated by hand, from a modified example, or from a Chemkin input file), the CTI file is then turned into an XML file, which is ultimately the format used by Cantera. This conversion is performed by the ct2ctml app, which is in cantera/src/base/ct2ctml.cpp. This code, in turn, creates a direct call from C++ to Python.

In ct2ctml.cpp, the following code block illustrates the call to Python to convert a CTI file to an XML file:

    try {
        exec_stream_t python;
        python.set_wait_timeout(exec_stream_t::s_all, 1800000); // 30 minutes
        python.start(pypath(), "-i");
        stringstream output_stream;
        python.in() <<
            "if True:\n" << // Use this so that the rest is a single block
            "    import sys\n" <<
            "    sys.stderr = sys.stdout\n" <<
            "    import ctml_writer\n" <<
            "    ctml_writer.convert(r'" << file << "')\n" <<
            "    sys.exit(0)\n\n"
            "sys.exit(7)\n";
        python.close_in();
        std::string line;
        while (python.out().good()) {
            std::getline(python.out(), line);
            output_stream << line << std::endl;;
        }
        python.close();
        python_exit_code = python.exit_code();
        python_output = stripws(output_stream.str());
    } catch (std::exception& err) {

This C++ code is actually calling the Python code that will do the conversion, using routines defined in cantera/interfaces/python/ctml_writer.py.

The two lines of Python code that it calls consist of one import statement, and one call to convert the file:

import ctml_writer
ctml_writer.convert( [file] )

The call to ctml_writer references the Python routines located in cantera/interfaces/python/ctml_writer.py, which interprets the CTI file and turns it into an XML file.

Looking through the ctml_writer.py code, you can see that it starts at the convert() method. The convert method then moves to the write() method, where it builds each piece of information specified in the CTI into an XML data structure. Finally, that data structure is written to an XML file.


Flags