Engine volumetric efficiency calculator from airflow and RPM
This engine volumetric efficiency calculator compares measured airflow with the ideal airflow implied by engine displacement and speed.
Run — free
Enter airflow in cubic feet per minute, displacement in liters, and the RPM from the same operating point. The result shows how fully a four-stroke engine is filling its swept volume under those conditions. It is useful for reviewing airflow logs, checking whether measurements are plausible, comparing combinations, and identifying where intake, cylinder-head, camshaft, or exhaust changes may offer tuning potential.
What volumetric efficiency reveals
Volumetric efficiency describes the relationship between the air an engine actually draws and the amount it would draw if every intake event filled the swept cylinder volume at the reference conditions represented by the airflow measurement. A result near 100 percent means measured flow is close to that simple geometric benchmark. A naturally aspirated engine may be below, near, or briefly above that level because pressure waves, valve timing, port velocity, restriction, temperature, and measurement conditions all influence filling. Forced induction can produce values well above 100 percent because the compressor raises intake density and mass flow, even though this calculator receives a volume-flow reading. Treat the result as a diagnostic ratio, not as a universal grade. Its greatest value comes from comparing consistent measurements at different RPM points or before and after a hardware or calibration change. If the airflow source, correction method, or test environment changes, the apparent efficiency can change even when the engine itself has not. Record those conditions alongside every result so comparisons remain meaningful and repeatable.
How the calculation works
The calculator first converts displacement from liters to cubic inches. For a four-stroke engine, each cylinder completes one intake stroke every two crankshaft revolutions. Combining that cycle relationship with the conversion from cubic inches to cubic feet gives the familiar theoretical-airflow equation: cubic-inch displacement multiplied by RPM, divided by 3456. Measured airflow in CFM is divided by this theoretical value and multiplied by 100 to produce volumetric efficiency as a percentage. All three measured inputs must describe the same operating point. Do not pair peak airflow from one log row with RPM from another, and do not use a displacement figure for only one cylinder. The displacement must be total engine displacement. The method assumes a four-stroke reciprocating engine and does not silently adjust for two-stroke operation. It also does not convert mass airflow readings such as grams per second into CFM, because that conversion requires air density, which depends on temperature, pressure, humidity, and the measurement convention. Convert such data with appropriate environmental information before using this calculator.
Using the result for tuning decisions
Plotting calculated volumetric efficiency across an RPM sweep can show where an engine combination breathes most effectively and where efficiency begins to fall. A smooth curve that rises and then tapers may reflect the expected interaction of ports, valves, cam timing, manifold dimensions, and exhaust tuning. An abrupt dip can justify checking for a restrictive filter, throttle limitation, unstable sensor data, valve-control transition, boost-control event, or another change at that operating point. Compare like with like: use the same airflow sensor or correction process, similar atmospheric conditions, the same fuel and calibration strategy, and stable wide-open-throttle samples when assessing maximum breathing. High volumetric efficiency does not automatically mean safe operation or maximum power. Ignition timing, air-fuel ratio, charge temperature, knock margin, fuel delivery, exhaust pressure, and mechanical limits remain separate concerns. Likewise, a low number does not identify a specific failed component on its own. Use the estimate to prioritize investigation and evaluate trends, then confirm conclusions with logs, pressure measurements, dynamometer data, and experienced mechanical inspection before changing parts or calibration.
What you can do with it
Review a dynamometer pull
Calculate efficiency at several logged RPM points to see where airflow rises efficiently and where the engine begins to lose breathing capacity.
Compare hardware changes
Compare consistent before-and-after airflow measurements for an intake, cylinder-head, camshaft, or exhaust change without relying on peak airflow alone.
Check sensor plausibility
Use displacement and RPM to identify airflow readings that imply an unexpected efficiency and may warrant checking units, scaling, or sensor data.
FAQ
What does the API request cost?
Each API request costs $0.002. The calculator can also run directly in the browser.
Can volumetric efficiency exceed 100 percent?
Yes. Intake and exhaust pressure-wave tuning can briefly raise cylinder filling above the geometric benchmark, and forced induction commonly produces much higher apparent values.
Does this calculator support two-stroke engines?
No. It explicitly uses the four-stroke relationship of one intake event per cylinder every two crankshaft revolutions.
Can I enter mass airflow in grams per second?
Not directly. Convert mass flow to CFM using air density appropriate to the measurement temperature, pressure, humidity, and correction convention.
Why might the result differ between two test days?
Air density, sensor correction, temperature, pressure, humidity, test setup, and engine operating conditions can all change the measured airflow or its interpretation.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/travel/volumetric-efficiency \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"airflow_cfm":480,"displacement_liters":5,"rpm":6000}'const res = await fetch("https://api.kit.forhosting.com/travel/volumetric-efficiency", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"airflow_cfm": 480,
"displacement_liters": 5,
"rpm": 6000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/volumetric-efficiency",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"airflow_cfm": 480,
"displacement_liters": 5,
"rpm": 6000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/volumetric-efficiency", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"airflow_cfm":480,"displacement_liters":5,"rpm":6000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"airflow_cfm":480,"displacement_liters":5,"rpm":6000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/volumetric-efficiency", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"airflow_cfm": 480,
"displacement_liters": 5,
"rpm": 6000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.volumetric_efficiency",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |