thermofluids-ai999x: offline, verified thermofluids solver with step-by-step answers

Desktop app & command line · Compute in your browser · Install (Python) · Guides · Evaluation · AI999X on Hugging Face · Website · Support: Buy Me a Coffee

License: Apache-2.0 · Author: Ibnul Jaif Farabi (creator and engineer) · Organization: AI999X · Version 1.5.0

Field: Engineering · Tasks: Question Answering

thermofluids-ai999x is an offline, deterministic thermofluids solver written in Rust: a desktop app, a command-line program, a browser module and a Python package. It answers thermofluids questions with verified results from 126 certified capabilities, gives 1010 documented answers identically on Windows and Linux, and refuses rather than guesses when an answer cannot be verified.

thermofluids-ai999x reads a question in plain English (or a typed call), picks a certified thermofluids capability, computes the answer exactly, checks it, and returns the result with its steps, units, LaTeX and assumptions, or a refusal that says what is missing. It runs fully offline on any CPU, needs no GPU, no API key and no internet, and is built to give zero wrong answers: when it is not sure, it refuses instead of guessing.

Buy me a coffee License Python Offline Rust

Run it your way. thermofluids-ai999x comes as the AI999X desktop app and as the command-line program thermofluids for Windows and Linux, runs in your browser as WebAssembly, and installs as a Python package. The desktop app, the command line and the browser run the same compiled Rust program on your own device: offline, no Python needed.

Get it

Way to run it For Get it
AI999X Thermofluids desktop app 1.5.0 Windows, Linux. This model in its own app: search, ask in words, forms, live figures, explanations, offline Windows (x86-64) · Linux (x86-64)
AI999X desktop app 1.5.0 Windows, Linux. Every AI999X model in one app: search, ask in words, forms, live figures, explanations, offline Windows (x86-64) · Linux (x86-64)
Command line (thermofluids) Windows, Linux. One program per model, offline, no Python Windows (x86-64) · Linux (x86-64)
In your browser any device. Nothing to install Compute on the model page
Python Python 3.10+ pip install thermofluids-ai999x

Checksums: SHA256SUMS · every version: https://downloads.ai999x.com/desktop/latest/ · install guide: desktop & command line

Quick start

Desktop app

Download AI999X Thermofluids for your system (above), unpack it and start it; type a question in words or pick a capability, fill in the form and press Compute. Figures and an explanation of the answer appear beside it. The AI999X desktop app has the same, with Thermofluids among all AI999X models.

Linux, from a terminal:

curl -LO https://downloads.ai999x.com/desktop/1.5.0/ai999x-thermofluids-1.5.0-linux-x86_64.tar.gz
curl -LO https://downloads.ai999x.com/desktop/1.5.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar xzf ai999x-thermofluids-1.5.0-linux-x86_64.tar.gz
./ai999x-thermofluids-1.5.0-linux-x86_64/ai999x-thermofluids

Command line

Linux:

curl -LO https://downloads.ai999x.com/desktop/1.5.0/ai999x-cli-1.5.0-linux-x86_64.tar.gz
curl -LO https://downloads.ai999x.com/desktop/1.5.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
mkdir -p ~/.local/share && tar xzf ai999x-cli-1.5.0-linux-x86_64.tar.gz -C ~/.local/share
echo 'export PATH="$HOME/.local/share/ai999x-cli-1.5.0-linux-x86_64:$PATH"' >> ~/.bashrc && source ~/.bashrc
thermofluids --version

Windows (PowerShell):

$F = "ai999x-cli-1.5.0-windows-x86_64.zip"
Invoke-WebRequest "https://downloads.ai999x.com/desktop/1.5.0/$F" -OutFile $F
Invoke-WebRequest "https://downloads.ai999x.com/desktop/1.5.0/SHA256SUMS" -OutFile SHA256SUMS
(Get-FileHash $F -Algorithm SHA256).Hash.ToLower() -eq ((Select-String -SimpleMatch $F SHA256SUMS).Line -split ' ')[0]
Expand-Archive $F -DestinationPath "$env:LOCALAPPDATA\AI999X" -Force
$D = "$env:LOCALAPPDATA\AI999X\ai999x-cli-1.5.0-windows-x86_64"; $env:Path += ";$D"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$D", "User")
thermofluids --version

Every command below was run as shown; the text under it is what the program printed.

Ask in words: Write the question as you would say it: the program reads the quantities and their units, picks the capability and answers.

$ thermofluids ask "Water with density 998 kg/m^3 and dynamic viscosity 0.001 Pa*s flows at an average velocity of 1.5 m/s in a pipe of diameter 0.05 m. What is the Reynolds number?"
Read as: Reynolds number from density, velocity, diameter and viscosity
Reynolds number (Re) = 74850
  by: Reynolds number from density, velocity, diameter and viscosity  (Re = rho*v*D/mu)
  D = 0.05 m   [0.05 m]
  mu = 0.001 Pa*s   [0.001 Pa*s]
  rho = 998 kg/m^3   [998 kg/m^3]
  v = 1.5 m/s   [1.5 m/s]
  assumes: Newtonian fluid; the diameter as the characteristic length; the situation is: fluid flow

What a capability needs: The equation or method, every input and output with its SI unit. Read this before solve: it tells you the input names.

$ thermofluids info dew_point_temperature
Dew-point temperature from dry-bulb temperature and relative humidity
  p_v = RH p_ws(T), then p_ws(T_dew) = p_v solved by bisection to the last digit
  in   T        dry-bulb temperature [K]
  in   RH       relative humidity (fraction, or % written) []
  out  T_dew    dew-point temperature [K]
  out  p_v      partial pressure of the water vapour [Pa]

Solve: Inputs as name=value, each with any unit of the right kind. The answer lists every output, the method used, each input converted to SI, and the conditions the answer assumes.

$ thermofluids solve dew_point_temperature "T=25 °C" RH=0.6
T_dew = 289.8511319 K
p_v = 1901.529882 Pa
  by: Dew-point temperature from dry-bulb temperature and relative humidity  (p_v = RH p_ws(T), then p_ws(T_dew) = p_v solved by bisection to the last digit)
  T = 298.15 K
  RH = 0.6
  assumes: 0 < RH <= 1; -100 °C <= T <= 200 °C

Many questions at once: One JSON request per line in, one JSON answer per line out, in order: for scripts, notebooks and agents (the program starts once). In PowerShell: Get-Content cases.jsonl | thermofluids batch

cases.jsonl:

{"key": "dew_point_temperature", "inputs": {"T": "25 °C", "RH": 0.6}}
{"key": "lmtd", "inputs": {"Th_in": "150 °C", "Th_out": "90 °C", "Tc_in": "30 °C", "Tc_out": "70 °C", "arrangement": "counterflow"}}
$ thermofluids batch < cases.jsonl
{"outcome":"SOLVED","message":"","value":289.85113185453645,"unit":"K","solved_for":"T_dew","si":[["T",298.15],["RH",0.6]],"values":[["T_dew",289.85113185453645,"K"],["p_v",1901.5298820861763,"Pa"]],"target":"T_dew","phrase":"dew-point temperature","assumptions":["0 < RH <= 1","-100 °C <= T <= 200 °C"],"name":"Dew-point temperature from dry-bulb temperature and relative humidity","equation":"p_v = RH p_ws(T), then p_ws(T_dew) = p_v solved by bisection to the last digit"}
{"outcome":"SOLVED","message":"","value":69.52118993564416,"unit":"K","solved_for":"lmtd","si":[["Th_in",423.15],["Th_out",363.15],["Tc_in",303.15],["Tc_out",343.15]],"values":[["lmtd",69.52118993564416,"K"],["dT1",80.0,"K"],["dT2",60.0,"K"]],"target":"lmtd","phrase":"log-mean temperature difference","assumptions":["both terminal temperature differences positive","the hot stream cools and the cold stream warms"],"name":"Log-mean temperature difference of a heat exchanger","equation":"(dT1 - dT2) / ln(dT1 / dT2) from the terminal differences of the chosen arrangement"}

In your browser

Open Thermofluids on ai999x.com, choose a capability and press Compute: the model runs on your own device as WebAssembly; nothing is sent anywhere. Change any input (any unit of the right kind) and the answer, its explanation and the figures follow.

In your own page: thermofluids_ai999x.wasm and the loader ax-wasm.js (https://www.ai999x.com/compute/rust/ax-wasm.js).

Python

pip install thermofluids-ai999x

Worked examples in every form

The same worked example from the command line, from Python and in the browser. Each command-line output is what the program printed.

Lift coefficient of a thin symmetric airfoil

Command line:

$ thermofluids solve thin_airfoil_lift_coefficient "alpha=0.0872664626 rad"
section lift coefficient (CL) = 0.5483113556
  by: Lift coefficient of a thin symmetric airfoil  (CL = 2*pi*alpha)
  alpha = 0.0872664626 rad   [0.0872665 rad]
  assumes: thin symmetric airfoil; small angle of attack; inviscid incompressible flow; the situation is: thin airfoil

Python:

import thermofluids_ai999x as m

a = m.solve("thin_airfoil_lift_coefficient", alpha="0.0872664626 rad")
print(a.values or (a.value, a.unit))

Browser: open this capability on the model page and press Compute in your browser.

What this means: This calculation determines the section lift coefficient for a thin symmetric airfoil. It uses the linear relationship between the lift coefficient and the angle of attack, assuming inviscid incompressible flow. The result indicates that at an angle of attack of 0.0872665 rad, the airfoil generates a lift coefficient of 0.548311. This simple model is useful for initial aerodynamic estimates where the wing is thin and the angle of attack is small.

Average skin-friction coefficient of a laminar flat plate

Command line:

$ thermofluids solve blasius_average_skin_friction "ReL=250000 1"
average skin-friction coefficient over the plate (cfm) = 0.00265645869
  by: Average skin-friction coefficient of a laminar flat plate  (cfm = 1.3282293448607851/sqrt(ReL))
  ReL = 250000   [250000 1]
  assumes: laminar boundary layer over the whole plate; zero pressure gradient; the situation is: flat plate, laminar

Python:

import thermofluids_ai999x as m

a = m.solve("blasius_average_skin_friction", ReL="250000 1")
print(a.values or (a.value, a.unit))

Browser: open this capability on the model page and press Compute in your browser.

What this means: This calculation determines the average skin-friction coefficient over the entire surface of a flat plate, yielding a value of 0.00265646. It uses the Reynolds number based on the total plate length, which is 250000, to estimate the overall drag contribution under laminar flow conditions. This single dimensionless coefficient represents the total resistance experienced by the plate when the boundary layer remains smooth and attached throughout its length.

Displacement thickness of a laminar flat-plate boundary layer

Command line:

$ thermofluids solve blasius_displacement_thickness "x=0.5 m" "Rex=200000 1"
displacement thickness (ds) = 0.001923899089 m
  by: Displacement thickness of a laminar flat-plate boundary layer  (ds = 1.7207876575205*x/sqrt(Rex))
  x = 0.5 m   [0.5 m]
  Rex = 200000   [200000 1]
  assumes: steady laminar flow over a flat plate; zero pressure gradient; the situation is: flat plate, laminar

Python:

import thermofluids_ai999x as m

a = m.solve("blasius_displacement_thickness", x="0.5 m", Rex="200000 1")
print(a.values or (a.value, a.unit))

Browser: open this capability on the model page and press Compute in your browser.

What this means: This calculation determines the displacement thickness, denoted as ds, which represents the distance by which the external streamline is shifted outward due to the slowing of fluid near the surface. The result, 0.0019239 m, is derived from the local Reynolds number, Rex, and the distance from the leading edge, x. This value quantifies how much the boundary layer effectively reduces the flow area in a steady laminar flow over a flat plate with zero pressure gradient.

Local skin-friction coefficient of a laminar flat plate

Command line:

$ thermofluids solve blasius_local_skin_friction "Rex=100000 1"
local skin-friction coefficient (cf) = 0.002100114992
  by: Local skin-friction coefficient of a laminar flat plate  (cf = 0.6641146724303926/sqrt(Rex))
  Rex = 100000   [100000 1]
  assumes: steady laminar flow over a flat plate; zero pressure gradient; the situation is: flat plate, laminar

Python:

import thermofluids_ai999x as m

a = m.solve("blasius_local_skin_friction", Rex="100000 1")
print(a.values or (a.value, a.unit))

Browser: open this capability on the model page and press Compute in your browser.

What this means: This calculation determines the local skin-friction coefficient at a specific point on a laminar flat plate based on the local Reynolds number. The result, 0.00210011, represents the dimensionless shear stress exerted by the fluid on the surface at that location. This value is derived from the Blasius solution for steady, incompressible flow with zero pressure gradient. A lower coefficient indicates reduced frictional resistance at that particular distance along the plate.

Documentation

Highlights

  • Verified, not generated. Every answer is computed by a certified thermofluids capability and checked (substituted back, dimension-checked or compared with an independent computation) before it is returned.
  • Zero wrong answers by design. Seven explicit outcomes (SOLVED, NEEDS_INPUT, AMBIGUOUS, INVALID_INPUT, OUT_OF_SCOPE, UNRECOGNIZED_FORMAT, INTERNAL_ERROR), never a silent guess. Every one of its 1010 documented answers is reproduced exactly on every tested platform.
  • Plain-English questions and a guaranteed typed interface. ask() reads documented question forms; solve(capability_id, **inputs) always solves a supported task with valid inputs.
  • Explains itself. Steps, formulas in LaTeX, units, assumptions and the model used, ready for notebooks, tutoring apps and homework checkers.
  • Native and in the browser. Every capability also computes natively in Rust: the desktop app and the thermofluids command line for Windows and Linux, and WebAssembly on the model page, no Python, no network.
  • Small and portable. Pure Python (sympy, mpmath); identical answers on Windows and Linux (Python 3.10, 3.11, 3.12, 3.13, 3.14).
  • Coverage: fluid statics and dynamics, pipe flow, boundary layers, aerodynamics and compressible flow, heat conduction, convection and radiation, fins, heat exchangers, thermodynamic cycles, psychrometrics and combustion.

Model overview

Property Value
Package thermofluids-ai999x 1.5.0 (import thermofluids_ai999x)
Type Deterministic neuro-symbolic thermofluids engine (rule-based reading + certified symbolic capabilities)
Capabilities 27 certified derivations, 13 certified procedures, 86 certified relations
Knowledge pack version 0.1.1
Golden answers 1010 documented answers, identical on every tested platform
Platforms tested Windows (Python 3.13), Linux x86-64 (Python 3.10, 3.11, 3.12, 3.13, 3.14)
Runtime CPU only, offline; no GPU, no network, no API key
License Apache-2.0
Creator / engineer Ibnul Jaif Farabi
Organization AI999X

Python quick start

pip install thermofluids-ai999x
# or straight from this repository:
pip install https://huggingface.co/AI999X/thermofluids-ai999x/resolve/main/dist/thermofluids_ai999x-1.5.0-py3-none-any.whl
import thermofluids_ai999x as thermofluids

thermofluids.ask("Water with density 998 kg/m^3 and dynamic viscosity 0.001 Pa*s flows at an average velocity of 1.5 m/s in a pipe of diameter 0.05 m. What is the Reynolds number?").show()
# -> SOLVED — 74850 1  (reynolds_number)
thermofluids.ask("Oil of density 900 kg/m^3 and viscosity 0.1 Pa*s flows in laminar flow at a mean velocity of 0.5 m/s in a pipe of diameter 0.02 m. What is the friction factor?").show()
# -> SOLVED — 0.711111 1  (reynolds_number, laminar_friction_factor)
thermofluids.ask("An air-standard Otto cycle has a compression ratio of 8. What is its thermal efficiency?").show()
# -> SOLVED — 0.564725 1  (otto_efficiency_air)
thermofluids.ask("Dew point temperature: T = 25 \u00b0C, RH = 60%").show()
# -> SOLVED — T_dew = 289.851, p_v = 1901.53  (dew_point_temperature)
thermofluids.solve("lmtd", Th_in="150 \u00b0C", Th_out="90 \u00b0C", Tc_in="30 \u00b0C", Tc_out="70 \u00b0C", arrangement="counterflow").show()
# -> SOLVED — lmtd = 69.5212, dT1 = 80, dT2 = 60  (lmtd)
thermofluids.ask("Who created you?").message
# -> thermofluids-ai999x was created and engineered by Ibnul Jaif Farabi at AI999X.

The Python package also installs a Python command, thermofluids-ai999x "<question>"; for the native program use thermofluids (above). The outputs above were produced by running this exact code on thermofluids-ai999x 1.5.0.

Draw the answer

thermofluids.plot(answer) draws the answer's formula around its own result: the engine's numbers, as SVG (Jupyter shows it directly; .figure() gives a matplotlib figure with the [plot] extra, .plotly() a Plotly figure).

a = thermofluids.ask("Water with density 998 kg/m^3 and dynamic viscosity 0.001 Pa*s flows at an average velocity of 1.5 m/s in a pipe of diameter 0.05 m. What is the Reynolds number?")
thermofluids.plot(a)
# -> Reynolds number from density, velocity, diameter and viscosity: Re against rho, 101 points, marked at 7.485e+04 1

How every answer is verified

  1. Reading: the question is turned into typed quantities (value, unit, kind, role) and one asked quantity; every stated number must be used or the question is refused.
  2. Planning: only certified capabilities may answer; a capability applies only under the conditions the wording states (for example a pendulum, a liquid at rest, boiling).
  3. Computing: exact symbolic or high-precision numeric evaluation.
  4. Checking: dimensions, substitution back into the defining equation, and agreement between independent readings; any disagreement becomes a refusal, never a number.

Capabilities are certified before they ship: each must reproduce hand-worked reference cases, reject a deliberately wrong variant (a control), and leave every benchmark answer unchanged.

Python worked examples, with their steps

Each question was put to thermofluids-ai999x; the answer is the one it returned, with the steps it took.

Reynolds number from density, velocity, diameter and viscosity · Pipe flow

Water with density 998 kg/m^3 and dynamic viscosity 0.001 Pa*s flows at an average velocity of 1.5 m/s in a pipe of diameter 0.05 m. What is the Reynolds number?

→ Re = 74850 1

Steps
  • Reynolds number from density, velocity, diameter and viscosity: rho = 998 kg/m^3, v = 1.5 m/s, D = 0.05 m, mu = 0.001 Pa*s → Re = 74850 1

Reynolds number from density, velocity, diameter and viscosity · Pipe flow

Oil of density 900 kg/m^3 and viscosity 0.1 Pa*s flows in laminar flow at a mean velocity of 0.5 m/s in a pipe of diameter 0.02 m. What is the friction factor?

→ f = 0.7111111111 1

Steps
  • Reynolds number from density, velocity, diameter and viscosity: rho = 900 kg/m^3, v = 0.5 m/s, D = 0.02 m, mu = 0.1 Pa*s → Re = 90 1
  • Darcy friction factor in laminar pipe flow: Re = 90 1 → f = 0.7111111111 1

Thermal efficiency of the air-standard Otto cycle · Thermodynamic cycles

An air-standard Otto cycle has a compression ratio of 8. What is its thermal efficiency?

→ eta = 0.5647247184 1

Steps
  • Thermal efficiency of the air-standard Otto cycle: r = 8 1 → eta = 0.5647247184 1

Dew-point temperature from dry-bulb temperature and relative humidity · Psychrometrics

Dew point temperature: T = 25 °C, RH = 60%

→ T_dew = 289.8511319 K, p_v = 1901.529882 Pa

Steps
  • Dew-point temperature from dry-bulb temperature and relative humidity: T = 25 °C, RH = 0.6 → T_dew = 289.8511319 K, p_v = 1901.529882 Pa

Log-mean temperature difference of a heat exchanger · Heat exchangers

m.solve("lmtd", Th_in="150 °C", Th_out="90 °C", Tc_in="30 °C", Tc_out="70 °C", arrangement="counterflow")

→ lmtd = 69.52118994 K, dT1 = 80 K, dT2 = 60 K

Steps
  • Log-mean temperature difference of a heat exchanger: Th_in = 150 °C, Th_out = 90 °C, Tc_in = 30 °C, Tc_out = 70 °C, arrangement = counterflow → lmtd = 69.52118994 K, dT1 = 80 K, dT2 = 60 K

Lift coefficient of a thin symmetric airfoil · Aerodynamics

Using thin airfoil theory, what is the lift coefficient of a symmetric airfoil at an angle of attack of 5 deg?

→ CL = 0.5483113556 1

Steps
  • Lift coefficient of a thin symmetric airfoil: alpha = 0.0872664626 rad → CL = 0.5483113556 1

Figures

Every point was computed by thermofluids-ai999x.

Friction factor chart (Colebrook, turbulent flow)

Friction factor chart (Colebrook, turbulent flow), computed by thermofluids-ai999x

Darcy friction factor of turbulent pipe flow against Reynolds number (logarithmic axis) for five relative roughnesses from smooth to ε/D = 0.05, each from the Colebrook equation solved by the package at up to 89 Reynolds numbers between 4000 and 10⁸. Marked: Re = 100000, ε/D = 0.0002, f = 0.0190054.

Psychrometric chart: humidity ratio against temperature

Psychrometric chart: humidity ratio against temperature, computed by thermofluids-ai999x

Psychrometric chart at 101325 Pa: humidity ratio against dry-bulb temperature at 20, 40, 60, 80 and 100 % relative humidity, computed by the package every 1 °C. Air at 30 °C and 40 % has a wet-bulb temperature of 20.0643 °C; marked: T = 30 °C, W = 10.6028 g/kg.

Heat-exchanger effectiveness against NTU

Heat-exchanger effectiveness against NTU, computed by thermofluids-ai999x

Heat-exchanger effectiveness against the number of transfer units for counterflow and parallel flow with heat-capacity rates 2000 and 4000 W/K (ratio 0.5), computed by the package at 60 values of UA. Marked: counterflow, UA = 3000 W/K, NTU = 1.5, ε = 0.690785, Q = 165788 W.

Otto cycle on a pressure–volume diagram

Otto cycle on a pressure–volume diagram, computed by thermofluids-ai999x

An air-standard Otto cycle drawn on pressure–volume axes: compression ratio 8, intake 1 bar and 300 K in 0.5 L, peak temperature 1800 K (stated). Each point is a solve of the package's isentropic and ideal-gas relations (amount of air 0.0200454 mol): T2 = 689.219 K, T4 = 783.496 K; the enclosed area is the net work. The package's Otto efficiency for r = 8 is 0.564725; marked: state 3, P = 48 bar.

Wet-bulb temperature table

Wet-bulb temperature table, computed by thermofluids-ai999x

Wet-bulb temperature at 101325 Pa for dry-bulb temperatures 10, 15, 20, 25, 30, 35, 40 °C (rows) and relative humidities 20, 40, 60, 80 and 100 % (columns), each cell computed by the package (°C, one decimal). At 100 % the wet bulb equals the dry bulb; at 40 °C and 20 % it is 22 °C.

Capabilities

27 certified derivations, 13 certified procedures, 86 certified relations. A few of them:

  • Derivations: derive bernoulli horizontal; derive blasius local skin friction; derive blasius momentum thickness; derive brayton efficiency air; derive buoyant force; derive continuity speed; derive darcy weisbach head loss; derive darcy weisbach pressure drop; derive diesel efficiency air; derive dynamic pressure; derive effectiveness phase change; derive humidity ratio vapour pressure; derive hydraulic power; derive hydrostatic force plane; derive minor loss head; derive nusselt heat transfer coefficient; derive otto efficiency air; derive overall heat rate; derive overall u plane wall; derive plane wall conduction; derive pump shaft power; derive radiation net exchange; derive radiation parallel plates; derive reynolds number …
  • Procedures: Churchill-Bernstein correlation for a cylinder in cross flow; Churchill-Chu correlation for natural convection on a vertical plate; Darcy friction factor from the Colebrook equation; Dew-point temperature from dry-bulb temperature and relative humidity; Efficiency of a pin fin with an insulated tip; Equivalence ratio of a fuel-air mixture; Gnielinski correlation for turbulent pipe flow; Heat exchanger rating by the effectiveness-NTU method; Humidity ratio from temperature, relative humidity and pressure; Log-mean temperature difference of a heat exchanger; Saturation pressure of water vapour; Stoichiometric air-fuel ratio of a gaseous fuel; Thermodynamic wet-bulb temperature
  • Relations: Absolute pressure at a depth in a liquid; Actual outlet temperature of an adiabatic air compressor; Adiabatic flame temperature with constant product specific heat; Average Nusselt number for laminar flow over a flat plate; Average skin-friction coefficient of a laminar flat plate; Bernoulli's equation along a horizontal streamline; Biot number; Blasius friction factor for turbulent flow in a smooth pipe; Buoyant force (Archimedes' principle); Carnot efficiency of a reversible heat engine; Coefficient of performance of a Carnot heat pump; Coefficient of performance of a Carnot refrigerator; Continuity: speed after a change of pipe diameter; Critical radius of insulation on a cylinder; Darcy friction factor in laminar pipe flow; Darcy-Weisbach head loss in a pipe; Darcy-Weisbach pressure drop in a pipe; Displacement thickness of a laminar flat-plate boundary layer; Dittus-Boelter correlation, fluid being cooled; Dittus-Boelter correlation, fluid being heated; Drag force from the drag coefficient; Dynamic pressure of a moving fluid; Effectiveness of a heat exchanger with one stream changing phase; Effectiveness of a parallel-flow heat exchanger …

thermofluids_ai999x.templates() lists every question form ask() reads; the capability guide (PDF, every example executed) is included in this repository.

All 99 formulas

Show every formula, by topic

Aerodynamics

Lift coefficient of a thin symmetric airfoil

CL=2πα C_{L} = 2 \pi \alpha

Boundary layers

Average skin-friction coefficient of a laminar flat plate

cfm=1.3282293448607851ReL \text{cfm} = \frac{1.3282293448607851}{\sqrt{\text{ReL}}}

Displacement thickness of a laminar flat-plate boundary layer

ds=1.7207876575205xRex d_{s} = \frac{1.7207876575205 x}{\sqrt{\text{Rex}}}

Local skin-friction coefficient of a laminar flat plate

cf=0.6641146724303926Rex c_{f} = \frac{0.6641146724303926}{\sqrt{\text{Rex}}}

Momentum thickness of a laminar flat-plate boundary layer

th=0.6641146724303926xRex t_{h} = \frac{0.6641146724303926 x}{\sqrt{\text{Rex}}}

Combustion

Adiabatic flame temperature with constant product specific heat

Tad=T0+LHV(1+AFR)cp \text{Tad} = T_{0} + \frac{\text{LHV}}{\left(1 + \text{AFR}\right) c_{p}}

Combustion / mixture strength

Equivalence ratio of a fuel-air mixture

ϕ=AFRsAFR \phi = \frac{AFR_s}{AFR}

Combustion / stoichiometry

Stoichiometric air-fuel ratio of a gaseous fuel

AFRs=(x+y/4)(MO2+3.76MN2)xMC+yMH AFR_s = \frac{(x + y/4)(M_{O_2} + 3.76 M_{N_2})}{x M_C + y M_H}

Compressible flow

Isentropic stagnation pressure of air from the Mach number

P0=P(1+M25)72 P_{0} = P \left(1 + \frac{M^{2}}{5}\right)^{\frac{7}{2}}

Mach number

M=va M = \frac{v}{a}

Mach number behind a normal shock in air

M2=M12+57M12−1 M_{2} = \sqrt{\frac{M_{1}^{2} + 5}{7 M_{1}^{2} - 1}}

Speed of sound in an ideal gas

a=γRT a = \sqrt{\gamma R T}

Stagnation temperature from the Mach number

T0=T(1+(γ−1)M22) T_{0} = T \left(1 + \frac{\left(\gamma - 1\right) M^{2}}{2}\right)

Static pressure behind a normal shock in air

P2=P1(7M12−1)6 P_{2} = \frac{P_{1} \left(7 M_{1}^{2} - 1\right)}{6}

Conduction

Critical radius of insulation on a cylinder

r=kh r = \frac{k}{h}

Fourier's law: heat conduction through a plane wall

q=kA(T1−T2)L q = \frac{k A \left(T_{1} - T_{2}\right)}{L}

Heat transfer rate from the overall heat transfer coefficient

q=UA(Ti−To) q = U A \left(T_{i} - T_{o}\right)

Maximum temperature of a plane wall with uniform heat generation

Tmax=Ts+qL22k T_{\text{max}} = T_{s} + \frac{q L^{2}}{2 k}

Overall heat transfer coefficient of a plane wall with convection on both sides

U=11h1+Lk+1h2 U = \frac{1}{\frac{1}{h_{1}} + \frac{L}{k} + \frac{1}{h_{2}}}

Radial heat conduction through a cylindrical wall

q=2πkL(T1−T2)ln⁡(r2r1) q = \frac{2 \pi k L \left(T_{1} - T_{2}\right)}{\ln\left(\frac{r_{2}}{r_{1}}\right)}

Radial heat conduction through a spherical shell

q=4πk(T1−T2)1r1−1r2 q = \frac{4 \pi k \left(T_{1} - T_{2}\right)}{\frac{1}{r_{1}} - \frac{1}{r_{2}}}

Thermal diffusivity

α=kρcp \alpha = \frac{k}{\rho c_{p}}

Convection

Average Nusselt number for laminar flow over a flat plate

Nu=0.664ReL12Pr13 \mathrm{Nu} = 0.664 \text{ReL}^{\frac{1}{2}} \mathrm{Pr}^{\frac{1}{3}}

Dittus-Boelter correlation, fluid being cooled

Nu=0.023Re45Pr310 \mathrm{Nu} = 0.023 \mathrm{Re}^{\frac{4}{5}} \mathrm{Pr}^{\frac{3}{10}}

Dittus-Boelter correlation, fluid being heated

Nu=0.023Re45Pr25 \mathrm{Nu} = 0.023 \mathrm{Re}^{\frac{4}{5}} \mathrm{Pr}^{\frac{2}{5}}

Heat transfer coefficient from the Nusselt number

h=NukLc h = \frac{\mathrm{Nu} k}{L_{c}}

Local Nusselt number for laminar flow over a flat plate

Nux=0.332Rex12Pr13 \text{Nux} = 0.332 \text{Rex}^{\frac{1}{2}} \mathrm{Pr}^{\frac{1}{3}}

Newton's law of cooling (convection heat transfer)

q=hA(Ts−Tinf) q = h A \left(T_{s} - \text{Tinf}\right)

Prandtl number

Pr=cpμk \mathrm{Pr} = \frac{c_{p} \mu}{k}

Convection / external flow

Churchill-Bernstein correlation for a cylinder in cross flow

Nu=0.3+0.62 Re1/2Pr1/3[1+(0.4/Pr)2/3]1/4[1+(Re282000)5/8]4/5 Nu = 0.3 + \frac{0.62\,Re^{1/2}Pr^{1/3}}{[1 + (0.4/Pr)^{2/3}]^{1/4}}\left[1 + \left(\frac{Re}{282000}\right)^{5/8}\right]^{4/5}

Convection / internal flow

Gnielinski correlation for turbulent pipe flow

Nu=(f/8)(Re−1000)Pr1+12.7f/8 (Pr2/3−1) Nu = \frac{(f/8)(Re - 1000)Pr}{1 + 12.7\sqrt{f/8}\,(Pr^{2/3} - 1)}

Convection / natural convection

Churchill-Chu correlation for natural convection on a vertical plate

Nu=(0.825+0.387 Ra1/6[1+(0.492/Pr)9/16]8/27)2 Nu = \left(0.825 + \frac{0.387\,Ra^{1/6}}{[1 + (0.492/Pr)^{9/16}]^{8/27}}\right)^2

External flow

Drag force from the drag coefficient

F=Cdρv2A2 F = \frac{C_{d} \rho v^{2} A}{2}

Lift force from the lift coefficient

F=CLρv2A2 F = \frac{C_{L} \rho v^{2} A}{2}

Stokes drag on a small sphere

F=3πμDv F = 3 \pi \mu D v

Terminal settling velocity of a small sphere (Stokes)

v=gD2(ρp−ρ)18μ v = \frac{g D^{2} \left(\rho_{p} - \rho\right)}{18 \mu}

Fins

Heat transfer rate of a very long fin

q=hPkAc(Tb−Tinf) q = \sqrt{h P k A_{c}} \left(T_{b} - \text{Tinf}\right)

Fins / extended surfaces

Efficiency of a pin fin with an insulated tip

ηf=tanh⁡(mL)mL,m=4hkD \eta_f = \frac{\tanh(mL)}{mL},\quad m = \sqrt{\frac{4h}{kD}}

Fluid dynamics

Bernoulli's equation along a horizontal streamline

P2=P1+ρ(v12−v22)2 P_{2} = P_{1} + \frac{\rho \left(v_{1}^{2} - v_{2}^{2}\right)}{2}

Continuity: speed after a change of pipe diameter

v2=v1(D1D2)2 v_{2} = v_{1} \left(\frac{D_{1}}{D_{2}}\right)^{2}

Dynamic pressure of a moving fluid

q=ρv22 q = \frac{\rho v^{2}}{2}

Speed of efflux from a hole (Torricelli's law)

v=2gh v = \sqrt{2 g h}

Fluid statics

Absolute pressure at a depth in a liquid

P=P0+ρgh P = P_{0} + \rho g h

Buoyant force (Archimedes' principle)

F=ρgV F = \rho g V

Gauge pressure at a depth in a liquid

P=ρgh P = \rho g h

Hydrostatic force on a submerged plane surface

F=ρghcA F = \rho g h_{c} A

Gas processes

Actual outlet temperature of an adiabatic air compressor

T2=T1(1+(P2P1)27−1η) T_{2} = T_{1} \left(1 + \frac{\left(\frac{P_{2}}{P_{1}}\right)^{\frac{2}{7}} - 1}{\eta}\right)

Entropy change of an incompressible substance

dS=mcln⁡(T2T1) d_{S} = m c \ln\left(\frac{T_{2}}{T_{1}}\right)

Ideal gas law

PV=nRT P V = n R T

Specific entropy change of an ideal gas

ds=cpln⁡(T2T1)−Rln⁡(P2P1) d_{s} = c_{p} \ln\left(\frac{T_{2}}{T_{1}}\right) - R \ln\left(\frac{P_{2}}{P_{1}}\right)

Temperature after an isentropic pressure change of air

T2=T1(P2P1)27 T_{2} = T_{1} \left(\frac{P_{2}}{P_{1}}\right)^{\frac{2}{7}}

Temperature after an isentropic volume change of air

T2=T1(V1V2)25 T_{2} = T_{1} \left(\frac{V_{1}}{V_{2}}\right)^{\frac{2}{5}}

Work done by an ideal gas in a reversible isothermal process

W=nRTln⁡(V2V1) W = n R T \ln\left(\frac{V_{2}}{V_{1}}\right)

Heat exchangers / LMTD method

Log-mean temperature difference of a heat exchanger

ΔTlm=ΔT1−ΔT2ln⁡(ΔT1/ΔT2) \Delta T_{lm} = \frac{\Delta T_1 - \Delta T_2}{\ln(\Delta T_1/\Delta T_2)}

Heat exchangers / effectiveness-NTU

Heat exchanger rating by the effectiveness-NTU method

Q=ε(NTU,Cr) Cmin(Th,i−Tc,i) Q = \varepsilon(NTU, C_r)\,C_{min}(T_{h,i} - T_{c,i})

Heat exchangers

Effectiveness of a heat exchanger with one stream changing phase

ε=1−e−N \varepsilon = 1 - e^{-N}

Effectiveness of a parallel-flow heat exchanger

ε=1−e−N(1+Cr)1+Cr \varepsilon = \frac{1 - e^{-N \left(1 + C_{r}\right)}}{1 + C_{r}}

Heat added to a flowing stream (steady-flow energy balance)

Q=mdotcp(Tout−Tin) Q = \text{mdot} c_{p} \left(T_{\text{out}} - T_{\text{in}}\right)

Heat transfer rate from the effectiveness

Q=εCmin(Thi−Tci) Q = \varepsilon C_{\text{min}} \left(\text{Thi} - \text{Tci}\right)

Number of transfer units of a heat exchanger

N=UACmin N = \frac{U A}{C_{\text{min}}}

Natural convection

Grashof number

Gr=gβ(Ts−Tinf)L3ν2 \mathrm{Gr} = \frac{g \beta \left(T_{s} - \text{Tinf}\right) L^{3}}{\nu^{2}}

Rayleigh number

Ra=GrPr \mathrm{Ra} = \mathrm{Gr} \mathrm{Pr}

Open channel

Froude number of an open-channel flow

Fr=vgh \mathrm{Fr} = \frac{v}{\sqrt{g h}}

Pipe flow / friction factor

Darcy friction factor from the Colebrook equation

1f=−2log⁡10(ε/D3.7+2.51Ref) \frac{1}{\sqrt{f}} = -2\log_{10}\left(\frac{\varepsilon/D}{3.7} + \frac{2.51}{Re\sqrt{f}}\right)

Pipe flow

Blasius friction factor for turbulent flow in a smooth pipe

f=0.3164Re−14 f = 0.3164 \mathrm{Re}^{\frac{-1}{4}}

Darcy friction factor in laminar pipe flow

f=64Re f = \frac{64}{\mathrm{Re}}

Darcy-Weisbach head loss in a pipe

hL=fLv22gD h_{L} = \frac{f L v^{2}}{2 g D}

Darcy-Weisbach pressure drop in a pipe

dP=fLρv22D d_{P} = \frac{f L \rho v^{2}}{2 D}

Haaland explicit friction factor for turbulent pipe flow

f=1(1.8ln⁡((ε3.7D)111100+6.9Re)ln⁡(10))2 f = \frac{1}{\left(\frac{1.8 \ln\left(\left(\frac{\varepsilon}{3.7 D}\right)^{\frac{111}{100}} + \frac{6.9}{\mathrm{Re}}\right)}{\ln\left(10\right)}\right)^{2}}

Hagen-Poiseuille flow rate in laminar pipe flow

Q=πD4dP128μL Q = \frac{\pi D^{4} d_{P}}{128 \mu L}

Kinematic viscosity from dynamic viscosity and density

ν=μρ \nu = \frac{\mu}{\rho}

Minor head loss in a fitting

hL=Kv22g h_{L} = \frac{K v^{2}}{2 g}

Reynolds number from density, velocity, diameter and viscosity

Re=ρvDμ \mathrm{Re} = \frac{\rho v D}{\mu}

Reynolds number from velocity, diameter and kinematic viscosity

Re=vDν \mathrm{Re} = \frac{v D}{\nu}

Swamee-Jain explicit friction factor for turbulent pipe flow

f=0.25(ln⁡(ε3.7D+(6.97Re)910)ln⁡(10))2 f = \frac{0.25}{\left(\frac{\ln\left(\frac{\varepsilon}{3.7 D} + \left(\frac{6.97}{\mathrm{Re}}\right)^{\frac{9}{10}}\right)}{\ln\left(10\right)}\right)^{2}}

Psychrometrics

Humidity ratio from the partial pressure of water vapour

W=0.621945pvP−pv W = \frac{0.621945 p_{v}}{P - p_{v}}

Specific enthalpy of moist air

h=cpa(T−T0)+W(hg+cpv(T−T0)) h = \text{cpa} \left(T - T_{0}\right) + W \left(h_{g} + \text{cpv} \left(T - T_{0}\right)\right)

Specific volume of moist air per kilogram of dry air

v=RaT(1+1.607858W)P v = \frac{\mathrm{Ra} T \left(1 + 1.607858 W\right)}{P}

Psychrometrics / dew point

Dew-point temperature from dry-bulb temperature and relative humidity

pws(Tdp)=ϕ pws(T) p_{ws}(T_{dp}) = \phi\,p_{ws}(T)

Psychrometrics / humidity ratio

Humidity ratio from temperature, relative humidity and pressure

W=0.621945 ϕpwsP−ϕpws W = 0.621945\,\frac{\phi p_{ws}}{P - \phi p_{ws}}

Psychrometrics / saturation

Saturation pressure of water vapour

ln⁡pws=C8/T+C9+C10T+C11T2+C12T3+C13ln⁡T \ln p_{ws} = C_8/T + C_9 + C_{10}T + C_{11}T^2 + C_{12}T^3 + C_{13}\ln T

Psychrometrics / wet bulb

Thermodynamic wet-bulb temperature

W=(2501−2.326 t∗)Ws∗−1.006(t−t∗)2501+1.86 t−4.186 t∗ W = \frac{(2501 - 2.326\,t^*)W_s^* - 1.006(t - t^*)}{2501 + 1.86\,t - 4.186\,t^*}

Pumps

Hydraulic power delivered to a fluid

P=ρgQH P = \rho g Q H

Shaft power required by a pump

P=ρgQHη P = \frac{\rho g Q H}{\eta}

Radiation

Emissive power of a blackbody (Stefan-Boltzmann law)

E=σT4 E = \sigma T^{4}

Linearised radiation heat transfer coefficient

hr=εσ(Ts+Tsur)(Ts2+Tsur2) h_{r} = \varepsilon \sigma \left(T_{s} + \text{Tsur}\right) \left(T_{s}^{2} + \text{Tsur}^{2}\right)

Net radiation between two large parallel grey plates

qf=σ(T14−T24)1e1+1e2−1 q_{f} = \frac{\sigma \left(T_{1}^{4} - T_{2}^{4}\right)}{\frac{1}{e_{1}} + \frac{1}{e_{2}} - 1}

Net radiation exchange of a small grey surface with large surroundings

q=εσA(Ts4−Tsur4) q = \varepsilon \sigma A \left(T_{s}^{4} - \text{Tsur}^{4}\right)

Wien's displacement law

λ=bT \lambda = \frac{b}{T}

Thermodynamic cycles

Carnot efficiency of a reversible heat engine

η=1−TcTh \eta = 1 - \frac{T_{c}}{T_{h}}

Coefficient of performance of a Carnot heat pump

cop=ThTh−Tc \text{cop} = \frac{T_{h}}{T_{h} - T_{c}}

Coefficient of performance of a Carnot refrigerator

cop=TcTh−Tc \text{cop} = \frac{T_{c}}{T_{h} - T_{c}}

Thermal efficiency of the air-standard Brayton cycle

η=1−rp−27 \eta = 1 - r_{p}^{\frac{-2}{7}}

Thermal efficiency of the air-standard Diesel cycle

η=1−r−25(rc75−1)7(rc−1)5 \eta = 1 - \frac{r^{\frac{-2}{5}} \left(r_{c}^{\frac{7}{5}} - 1\right)}{\frac{7 \left(r_{c} - 1\right)}{5}}

Thermal efficiency of the air-standard Otto cycle

η=1−r−25 \eta = 1 - r^{\frac{-2}{5}}

Transient conduction

Biot number

Bi=hLck \mathrm{Bi} = \frac{h L_{c}}{k}

Fourier number

Fo=αtLc2 F_{o} = \frac{\alpha t}{L_{c}^{2}}

Temperature of a lumped body cooling or heating in a fluid

T=Tinf+(Ti−Tinf)e−hAtρVc T = \text{Tinf} + \left(T_{i} - \text{Tinf}\right) e^{\frac{-h A t}{\rho V c}}

Thermal time constant of a lumped body

τ=ρVchA \tau = \frac{\rho V c}{h A}

Out of scope

  • Open-ended explanation, essay writing or tutoring dialogue: it is a solver, not a chatbot.
  • Questions outside its certified thermofluids capabilities, and any question whose stated numbers it cannot all use: it refuses with the reason instead.
  • High-stakes engineering, medical or legal decisions without independent review.

Limitations

  • It answers what its certified capabilities cover (fluid statics and dynamics, pipe flow, boundary layers, aerodynamics and compressible flow, heat conduction, convection and radiation, fins, heat exchangers, thermodynamic cycles, psychrometrics and combustion); anything else is refused with a reason.
  • ask() reads documented question forms and common phrasings; unusual wording may be refused; use solve() for guaranteed results.
  • Results are as correct as the certified relations and their stated conditions; a certified relation is a checked model, not a claim about every physical situation.

Citation

@software{thermofluids_ai999x_1_5_0,
  title  = {thermofluids-ai999x: an offline, verified thermofluids solver},
  author = {Farabi, Ibnul Jaif}, organization = {AI999X},
  year   = {2026}, version = {1.5.0},
  url    = {https://huggingface.co/AI999X/thermofluids-ai999x}
}

Contact

Questions, bug reports and requests: open a discussion on https://huggingface.co/AI999X/thermofluids-ai999x/discussions or visit https://ai999x.com.

Support the project

thermofluids-ai999x is free and open source. If it helps you, you can support further development on Buy Me a Coffee.

Created and engineered by Ibnul Jaif Farabi · AI999X · ai999x.com

Downloads last month
167
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collections including AI999X/thermofluids-ai999x

Evaluation results

  • identical on every platform on Golden answers (1010 documented questions, Windows + Linux Python 3.10-3.14)
    self-reported
    1.000