What EngineerLM can calculate
22 typed engineering tools, one dispatcher, and one stored record per run. The model chooses the tool and fills in the arguments; the numbers come from the tool, never from the model. Every list and every figure on this page is read from the running system, not written here by hand.
The tools
This is the live registry: the same 22 tools the chat agent calls, the REST catalog lists and MCP publishes, with the version each one is at right now.
Thermal-fluids (6)
| Tool | Version | What it does |
|---|---|---|
| air_table_properties | 1.0.0 | Ideal-gas air tables with variable specific heats (Cengel A-17 / Moran A-22 convention: h = 0 at 0 K, s0 at 1 atm), for air-standard cycle analysis, gas turbines, and any problem that says 'use air tables' or 'variable specific heats'. |
| fluid_properties | 1.0.0 | Exact thermodynamic properties of a real fluid at a state fixed by exactly two independent properties (for a saturated mixture: pressure or temperature plus quality). |
| heat_exchanger | 1.0.0 | Heat exchanger analysis by the effectiveness-NTU method. |
| humid_air_properties | 1.0.0 | Moist-air (psychrometric) properties from dry-bulb temperature plus exactly one of relative_humidity (fraction 0-1), wet_bulb, dew_point, or humidity_ratio (kg water per kg dry air), at an optional total pressure (default standard atmosphere). |
| pipe_pressure_drop | 1.0.0 | Pressure drop in a straight pipe run: Darcy-Weisbach friction (Colebrook friction factor, laminar handled automatically), minor losses from a total fittings K value, and elevation change. |
| pump_operating_point | 1.0.0 | Pump operating point: intersects a supplied pump curve with the system curve head = static_head + resistance_coefficient * flow^2. |
Electrical power (9)
| Tool | Version | What it does |
|---|---|---|
| fault_equivalent | 1.0.0 | Elementary balanced three-phase BOLTED fault equivalent from explicit series reactances on one common MVA base: x_source + x_transformer + x_line = total_x_pu, then fault_current_pu = 1/total_x_pu, base_current_a = base_mva*1e6/(sqrt(3)*voltage_kv*1000), fault_current_a = fault_current_pu*base_current_a and fault_mva = base_mva/total_x_pu. |
| feeder_voltage_drop | 1.1.0 | Balanced three-phase feeder voltage drop from a lumped series RL model: voltage_drop_line_line = sqrt(3)*I*L*(R'*cos(theta) + X'*sin(theta)), sending_voltage = receiving_voltage + drop and percent_drop = drop/sending_voltage*100 (referred to the sending-end voltage). |
| motor_power | 1.0.0 | Three-phase motor shaft/electrical power mapping at one stated operating point, with rated and starting quantities kept separate (plan S3.5). |
| multiphase_feeder_power_flow | 1.0.0 | Multiphase (unbalanced) distribution feeder MODEL CONTRACT: it validates a complete feeder and profile model and then REFUSES to solve it, because no distribution power-flow engine is adopted in this deployment. |
| per_unit_base_change | 1.0.0 | Per-unit impedance base change: Z_pu_new = Z_pu * (new_base_mva/old_base_mva) * (old_base_kv/new_base_kv)^2, for the same physical impedance moved from one declared base pair to another. |
| power_factor_relations | 1.0.0 | Power-factor relationships: give EXACTLY TWO of real_power_kw, reactive_power_kvar, apparent_power_kva and power_factor and the tool solves the power triangle, returning all four plus angle_deg (signed: positive = current lagging) and pf_sense. |
| three_phase_power | 1.0.0 | Balanced three-phase power from a line-to-line RMS voltage and a line RMS current: apparent power S = sqrt(3)*V_LL*I_L (three-phase total, VA), and with power_factor also real power P = S*pf (W), reactive power Q = S*sqrt(1-pf^2) (var) and power_factor_angle_deg. |
| transformer_impedance | 1.0.0 | Transformer equivalent-circuit and performance numbers from nameplate data. |
| unbalanced_phase_currents | 1.0.0 | Unbalanced phase currents and neutral-conductor current on a three-phase FOUR-WIRE WYE service, from a declared load on each phase at a declared line-to-line terminal voltage. |
Cross-domain workflows (1)
| Tool | Version | What it does |
|---|---|---|
| pump_motor_feeder | 1.1.0 | Cross-domain pump/motor/feeder workflow: takes ONE steady-state duty point from the piping to the electrical supply in one call, by dispatching pipe_pressure_drop, pump_operating_point, motor_power, feeder_voltage_drop and (when declared) transformer_impedance through the same registry any other caller uses, with the arithmetic links dispatched to calculate. |
Arithmetic (1)
| Tool | Version | What it does |
|---|---|---|
| calculate | 1.0.0 | Exact multi-step arithmetic. |
networks (2)
| Tool | Version | What it does |
|---|---|---|
| network_power_flow | 1.0.0 | Balanced steady-state AC power flow (Newton-Raphson, via pandapower) on a substation or transmission network the caller declares in full. |
| network_short_circuit | 1.0.0 | Initial symmetrical THREE-PHASE short-circuit current at ONE declared bus of a declared network, computed by pandapower's IEC 60909-style short-circuit routine. |
thermal-cycles (3)
| Tool | Version | What it does |
|---|---|---|
| brayton_cycle | 1.1.0 | Simple CLOSED Brayton gas cycle solved as a real network through the TESPy solver. |
| heat_pump_cycle | 1.0.1 | Simple vapour-compression heat pump or chiller solved as a real network through the TESPy solver on CoolProp reference equations of state. |
| rankine_cycle | 1.1.0 | Simple Rankine steam cycle solved as a real network through the TESPy solver on CoolProp IAPWS-95 water properties. |
One call across two domains
pump_motor_feeder carries a single steady-state duty point
from the liquid piping to the electrical supply in one call. It
implements no new arithmetic: each step below is dispatched to a tool
from the table above, through the same dispatcher chat, REST and MCP
use, so every number in the answer carries the tool id, tool version and
execution id that produced it. The whole chain is
one execution, not 8.
| Step | What it establishes |
|---|---|
| pipe_system | friction and fittings head of the pipe run at the reference flow, from Darcy-Weisbach with the caller's actual inner diameter, roughness and total fittings K |
| system_curve | the system curve the pump must work against: static head from the elevation rise plus the boundary pressure difference in head, and the quadratic resistance coefficient k = head_loss / flow^2 |
| pump_duty | the duty point where the supplied pump curve crosses that system curve, by bounded interpolation of the supplied points only |
| shaft_power | hydraulic power rho*g*Q*H at the duty point and the shaft power it demands through the stated pump efficiency |
| motor_demand | the motor's real, reactive and apparent electrical demand and line current at that shaft load, on the stated efficiency and power factor AT the load |
| feeder_loading | voltage drop of the one feeder carrying that motor current, from the caller's per-km series impedance and length |
| transformer_load_fraction | the transformer's load fraction: the motor's apparent power over the transformer's kVA rating |
| transformer_loading | the transformer's percent R and X on its rated kVA base, plus loss and efficiency bookkeeping at that load fraction when the losses are declared |
The worked example, with its numbers
A transfer pump moving water through a straight steel run into a
pressurised vessel. The inputs and results below are reference case
wf-pmf-si-001, published in this
repository and graded against hand
arithmetic at 1e-09 relative tolerance on every
row. It is textbook-style data with no customer, site or
project information in it, which is why it can be shown here at all.
Some of the inputs
| Input | Value | Unit |
|---|---|---|
| Reference flow | 160.0 | m3/h |
| Pipe inner diameter | 154.1 | mm |
| Pipe length | 320.0 | m |
| Elevation rise | 18.0 | m |
| Supply voltage (line-to-line) | 400.0 | V |
| Transformer rating | 45.0 | kVA |
What one call returns
| Quantity | Value | Stored | Unit |
|---|---|---|---|
| Pump duty flow | 159.956 | 159.95638849150328 | m3/h |
| Pump duty head | 44.6105 | 44.610466762039216 | m |
| Pump shaft power | 24.8759 | 24.875939677088613 | kW (mechanical, at the coupling) |
| Motor real input power | 26.7483 | 26.748322233428617 | kW (real input, three-phase total) |
| Motor apparent power | 30.7452 | 30.74519796945818 | kVA (three-phase total) |
| Motor line current | 44.3769 | 44.376870809887535 | A (line RMS) |
| Feeder voltage drop | 5.52116 | 5.521160787819607 | V (line-to-line) |
| Feeder drop | 1.3615 | 1.3614975793355548 | percent of the sending-end voltage |
| Transformer loading | 0.683227 | 0.6832266215435151 | fraction of rated kVA |
| Transformer efficiency | 0.982368 | 0.9823677267646782 | fraction |
The Value column is a rounded presentation. The Stored column is the full-precision number the tool returns and the record keeps; nothing downstream ever calculates from the rounded one. Open this example as a stored record.
How you reach it
Chat
Ask in plain language. The agent picks the tool, validates the arguments against its schema before anything runs, and shows you the call it made. Results attach to a study you can revise and compare.
REST API
A versioned engineering API at
/api/engineering/v1/: the tool and
method catalog, studies and revisions, synchronous or durable
execution with polling and cancellation, and artifact download.
Bearer elm- keys with scopes, created at
/keys/.
MCP
The same registry over the Model Context Protocol, so an assistant calls the tools directly. Setup, endpoint and the honest client-compatibility list.
Records
Every run is persisted: the confirmed inputs, the normalized inputs, the tool and version, assumptions, diagnostics and the pinned method. Reports and exports render from that stored result - no model is asked to recreate a number.
What it is not
- Not a replacement for engineering judgment or for a licensed engineer's review. Results are inputs to your work, not sign-off.
- Not a general Python sandbox. The arithmetic tool is an AST-whitelisted evaluator: numbers, variables and math functions only.
- Not a claim of coverage beyond the table above. If a tool is not listed, it does not exist here yet, and the agent will say so rather than improvise a number.
Signing in with Google creates your account. Access to chat, the API and MCP is switched on once an administrator approves it, so you may wait a little before your first calculation. No card is asked for at any point.