Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    Tools · Fluids & Thermodynamics

    NASA / Cantera Species Builder

    Fit NASA-7 thermodynamic polynomials to heat-capacity data or group-contribution estimates, and get Cantera species definitions.

    Updated October 1, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    The NASA / Cantera Species Builder fits NASA-7 polynomials (the standard form for heat capacity, enthalpy, and entropy against temperature in combustion and kinetics codes) and writes them as Cantera species definitions. Use it to add species that a mechanism is missing, or to give a fitted or generated mechanism real thermodynamics. It runs on CPU.

    How it works

    For each species it fits the seven NASA coefficients by least squares over one temperature range (t_min_k to t_max_k, within 200 to 6,000 K), anchored to the formation enthalpy and Gibbs energy you give. The fit's residuals are reported so you can judge its quality.

    Inputs

    One of two sources:

    • cp_table: your heat-capacity data, one row per species and temperature: name, t_k, cp_j_mol_k, plus formation enthalpy (hf_j_mol) and Gibbs energy (gf_j_mol), and the elemental composition (element columns such as C, H, O, or a SMILES the composition can be derived from).
    • joback_properties: the properties.csv from Group-Contribution Properties, so you can go from SMILES to Cantera species without measured data.

    Up to 1,000 species and 50,000 heat-capacity rows.

    Outputs

    • mechanism/primary.yaml: Cantera species with their NASA-7 thermodynamics, ready to use in Cantera.
    • fit_residuals.csv: the fitted against the input heat capacities, per species.

    Not covered

    Two-range NASA-7 and NASA-9 polynomials aren't available yet. For real-fluid reference states, use CoolProp.

    Group-Contribution Properties for estimates from SMILES, Kinetic Parameter Fitter for rate constants, and Cantera to simulate.

    Run it from the API

    Submit with Submit a job and the job_type below. Price it first with Estimate job reservation cost: submitting reserves that amount from your wallet, and the charge settles at the actual runtime.

    NASA / Cantera Species Builder nasa-thermo-fit

    Job type
    nasa-thermo-fit
    Hardware
    cpu (default)
    Typical runtime
    2 min on CPU

    Payload

    Payload fields
    FieldTypeDescription
    sourcerequiredstring

    One of: "cp_table", "joback_properties"

    cp_tabletableValue
    propertiestableValue
    t_min_knumber

    Limits: ≥ 200, ≤ 6000

    t_max_knumber

    Limits: ≥ 200, ≤ 6000

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "source": "cp_table",
        "t_min_k": 200,
        "t_max_k": 1500,
        "cp_table": [
            {
                "name": "C2H5OH",
                "t_k": 200,
                "cp_j_mol_k": 58.54,
                "hf_j_mol": -235000,
                "gf_j_mol": -168000,
                "smiles": "CCO",
                "C": 2,
                "H": 6,
                "O": 1,
            },
            {
                "name": "C2H5OH",
                "t_k": 298.15,
                "cp_j_mol_k": 75.81,
                "hf_j_mol": -235000,
                "gf_j_mol": -168000,
                "smiles": "CCO",
                "C": 2,
                "H": 6,
                "O": 1,
            },
            {
                "name": "C2H5OH",
                "t_k": 400,
                "cp_j_mol_k": 91.5,
                "hf_j_mol": -235000,
                "gf_j_mol": -168000,
                "smiles": "CCO",
                "C": 2,
                "H": 6,
                "O": 1,
            },
            {
                "name": "C2H5OH",
                "t_k": 500,
                "cp_j_mol_k": 105.6,
                "hf_j_mol": -235000,
                "gf_j_mol": -168000,
                "smiles": "CCO",
                "C": 2,
                "H": 6,
                "O": 1,
            },
            {
                "name": "C2H5OH",
                "t_k": 600,
                "cp_j_mol_k": 118.06,
                "hf_j_mol": -235000,
                "gf_j_mol": -168000,
                "smiles": "CCO",
                "C": 2,
                "H": 6,
                "O": 1,
            },
            "… 4 more",
        ],
    }
    
    estimate = client.jobs.estimate(job_type="nasa-thermo-fit", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-nasa-thermo-fit-run",
        job_type="nasa-thermo-fit",
        payload=payload,
        resource="cpu",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.

    Workflow inputs

    • Table (list) · optionalCSV
    • Table (list) · optionalCSV

    Workflow outputs

    • ArchiveZIP
    • Kinetic mechanismYAML
    • TableCSV