Skip to main content
Docs

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

    Tools · Fluids & Thermodynamics

    Cantera

    Chemical equilibrium, reactor and ignition simulations, laminar flames, transport properties, and reaction path analysis with Cantera.

    Updated October 1, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    Cantera solves chemical kinetics, thermodynamics, and transport problems for gas mixtures. One job type covers five kinds of problem, chosen with mode:

    modeWhat it computes
    equilibriumThe equilibrium state and composition under a constraint (TP, HP, SP, SV, UV, TV), optionally from an equivalence ratio with fuel and oxidizer
    reactorA constant-volume or constant-pressure reactor over time: species and temperature histories and ignition delay, with optional wall heat loss
    flameA freely propagating, one-dimensional premixed flame: species and temperature profiles and flame speed, with a choice of transport model, Soret diffusion, and grid refinement
    transportViscosity, thermal conductivity, and diffusion coefficients over a temperature range, with optional binary diffusion coefficients
    path_analysisElement fluxes and rates of production, with a reaction path diagram

    It runs on CPU.

    Inputs

    • The mechanism: one of the built-in mechanisms with mechanism_id (gri30 for natural gas combustion, h2o2 for hydrogen), or your own as an uploaded file or an artifact in Cantera YAML (CHEMKIN, CTI, and XML mechanisms also chain in from other tools).
    • The problem: a structured problem_spec whose fields depend on the mode (the allowed fields are checked), or a full Cantera YAML problem in cantera_yaml, or a problem object.

    Outputs

    Each mode fills its own table: reactor_history, flame_profile, transport_table, species, or rate_of_production (CSV), alongside the full output zip, which for path_analysis includes the path diagram.

    Chaining

    Mechanisms from RMG Mechanism Generator, Mechanism Reduction, and NASA / Cantera Species Builder can feed straight into a Cantera step in a workflow.

    Not covered

    Well-stirred and plug-flow reactors, other flame configurations, surface chemistry, electrochemistry, and sensitivity analysis aren't available yet. For real-fluid properties (steam, refrigerants) use CoolProp; for vapor–liquid equilibrium use VLE / Flash.

    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.

    Cantera cantera

    Job type
    cantera
    Hardware
    cpu (default)
    Typical runtime
    2 h on CPU

    Payload

    Provide exactly one of: mechanism, mechanism_id.

    Provide exactly one of: cantera_yaml, problem, problem_spec.

    Payload fields
    FieldTypeDescription
    moderequiredstring

    One of: "equilibrium", "reactor", "flame", "transport", "path_analysis"

    mechanismfile_object
    mechanism.namestring

    Limits: min length 1

    mechanism.filenamestring

    Limits: min length 1

    mechanism.content_b64string

    Limits: min length 1

    mechanism.contentany
    mechanism.bytesany
    mechanism_idstring

    One of: "gri30", "h2o2"

    cantera_yamlstring

    Limits: min length 1

    problemfile_object
    problem.namestring

    Limits: min length 1

    problem.filenamestring

    Limits: min length 1

    problem.content_b64string

    Limits: min length 1

    problem.contentany
    problem.bytesany
    problem_specobject
    problem_spec.temperaturenumber
    problem_spec.pressurenumber
    problem_spec.compositionstring

    Limits: min length 1

    problem_spec.time_endnumber

    Limits: > 0

    problem_spec.fuel_compositionstring

    Limits: min length 1

    problem_spec.oxidizer_compositionstring

    Limits: min length 1

    problem_spec.equilibrate_atstring

    One of: "TP", "HP", "SP", "SV", "UV", "TV"

    problem_spec.reactor_typestring

    One of: "IdealGasReactor", "IdealGasConstPressureReactor", "IdealGasMoleReactor", "IdealGasConstPressureMoleReactor"

    problem_spec.max_stepsinteger

    Limits: > 0

    problem_spec.widthnumber

    Limits: > 0

    problem_spec.equivalence_rationumber

    Limits: > 0

    problem_spec.species_of_interest[]string[]
    problem_spec.elements[]string[]

    One of: "C", "H", "O", "N", "S", "Ar"

    problem_spec.wall_areanumber

    Limits: > 0

    problem_spec.wall_unumber

    Limits: > 0

    problem_spec.env_temperaturenumber

    Limits: ≥ 0

    problem_spec.transport_modelstring

    One of: "mixture-averaged", "multicomponent"

    problem_spec.soret_enabledboolean
    problem_spec.energy_enabledboolean
    problem_spec.refine_rationumber

    Limits: > 0

    problem_spec.refine_slopenumber

    Limits: > 0

    problem_spec.refine_curvenumber

    Limits: > 0

    problem_spec.temperature_maxnumber
    problem_spec.n_temperature_pointsinteger

    Limits: ≥ 2, ≤ 200

    problem_spec.include_binary_diffboolean
    additional_filesmap<string, file_object>
    cantera_argsobject
    cantera_args.loglevelinteger

    Limits: ≥ 0

    cantera_args.max_stepsinteger

    Limits: ≥ 1

    cantera_args.output_intervalinteger

    Limits: ≥ 1

    cantera_args.chemkin_thermostring

    Limits: min length 1

    cantera_args.chemkin_transportstring

    Limits: min length 1

    cantera_args.chemkin_permissiveboolean

    File fields take {"name": "x.pdb", "content_b64": "…"} or a stored artifact, {"$artifact": {"id": "art-…", "port": "…"}}. Files are up to 25 MiB each.

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "mode": "equilibrium",
        "mechanism": {"name": "h2o2.yaml", "content_b64": "<file contents, base64>"},
        "problem_spec": {
            "temperature": 1500,
            "pressure": 101325,
            "composition": "H2:2, O2:1",
        },
    }
    
    estimate = client.jobs.estimate(job_type="cantera", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-cantera-run",
        job_type="cantera",
        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

    • Kinetic mechanism · optionalYAML, CTI, XML, CHEMKIN

    Workflow outputs

    • ArchiveZIP
    • TableCSV
    • TableCSV
    • TableCSV
    • TableCSV
    • TableCSV