---
title: "It hit the benchmark, then told the customer the question was slightly wrong"
url: "https://tryreynolds.com/studies/backward-facing-step"
description: "The reattachment length behind a backward-facing step is a standard benchmark."
---

**[Reynolds](https://tryreynolds.com)** is agentic CFD, built by
**[InviscidAI](https://inviscidai.com)** and backed by Y Combinator, Winter 2026 batch.
The agent is open source under the MIT licence at
[github.com/InviscidAI/OpenReynolds](https://github.com/InviscidAI/OpenReynolds).
Using it requires no OpenFOAM knowledge.

This is the agent-readable Markdown twin of https://tryreynolds.com/studies/backward-facing-step. It lives at https://tryreynolds.com/studies/backward-facing-step.md, and
[tryreynolds.com/llms.txt](https://tryreynolds.com/llms.txt) indexes every one of them.

# It hit the benchmark, then told the customer the question was slightly wrong

The reattachment length behind a backward-facing step is a standard benchmark. Reynolds landed 5% off it, and the more valuable part of the run was everything it refused to do: refused to call an unconverged solve converged, refused to report artifacts as physics, and pointed out that the steady laminar assumption in the brief does not quite hold at the Reynolds number it was given.

RUN 13VALIDATIONSEPARATED FLOWAUGUST 202620260829-061843-9483

- **Asked**: “Run a 2D backward-facing step at Re = 800 based on step height, laminar, expansion ratio 2.” The Reynolds definition was left deliberately ambiguous, to see whether it would say which one it used.
- **Run**: simpleFoam, steady, laminar · 27 minutes · 99 tool calls, 3 solver jobs
- **Result**: Reattachment at 6.4 step heights against a benchmark 6.1
- **Reattachment length**: x/h ≈ 6.4 against Gartling’s benchmark 6.1, about 5% high
- **The ambiguity trap**: passed, it stated the definition it used and set viscosity to match
- **Convergence**: reported as NOT achieved, with the residual history to prove it
- **Secondary bubbles**: refused as artifacts rather than reported as physics

![The recirculation bubble behind a backward-facing step, and the wall shear stress crossing zero where the flow reattaches](https://tryreynolds.com/assets/bfs-reattachment-GZwzM4tH.png)

Figure 1 Drawn for this page from the run’s own saved fields, because the figure the run itself produced is annotated with the wrong number. Top: the flow past the step, blue where it is running backwards, with the black contour enclosing the recirculation bubble. Bottom: the shear stress on the floor under it. Where that crosses zero the flow has stopped running backwards, and that is the measurement: 0.21 is the small counter-rotating eddy tucked into the corner, 6.42 is the reattachment, and 7.57 is the next crossing along, which is the number the run’s own plotting script picked by mistake. The vertical scale is stretched near zero, because the shear under the bubble is a hundred times smaller than the shear downstream of it; the stretch is odd and monotone, so the crossings sit exactly where they do on the raw signal.

## The trap in the question

“Re = 800 based on step height” is ambiguous on purpose: based on the mean inlet velocity, or the centreline maximum? They differ by a factor of 1.5, and the benchmark is quoted for one of them. A great many solver runs quietly pick one and never say.

It said. “Parabolic inlet profile at Re_h = U_mean·h/nu = 800 (mean-velocity based)”, and then set viscosity to 0.00125, which is exactly consistent with that statement. It also reproduced Gartling’s geometry deliberately rather than inventing one, unit step, expansion to twice that, thirty step heights of downstream channel, so that the comparison is against the case the number was published for.

## It refused to converge quietly

The solve did not settle. The pressure residual plateaued around 0.25 to 0.29 and oscillated rather than decaying, out to fifteen thousand iterations, and the reattachment length drifted with it: 5.92, then 6.18, then 6.32, then 6.46.

The agent reported all of that, and then diagnosed it instead of shrugging: at Re around 800 the two-dimensional laminar backward-facing step is at or past the threshold where a steady solution stops existing, citing the stability literature. In other words, it told the customer that the “steady, laminar” framing in their own brief is questionable at the specific Reynolds number they chose, correctly, and without being asked.

It also declined to sell the extra structure it found. The solution showed additional recirculation patches further downstream; rather than reporting them as the secondary bubbles they superficially resemble, it called them artifacts of chasing an unsteady flow with a steady solver. That is the right call, and it is a claim thrown away rather than made.

## The defect, and the figure redrawn without it

The run has one real fault, and it is in its picture. The figure it drew is annotated with a reattachment length of 7.57 while its own written answer says 6.4. Two of its own scripts disagreed: one read the wall-shear sign changes correctly, taking the first as the corner eddy and the second as the reattachment; the other picked a later crossing and drew the line there.

The text is right and the picture is wrong, the answer never reconciles them, and it even points the reader at the figure. Anyone who trusted the plot would take away a number 24% above the benchmark instead of 5% above it. That is the agent’s own inconsistency rather than a platform fault, and reproducing its figure here would propagate it.

So Figure 1 was drawn for this page instead, from the same saved fields the run left behind: the velocity and the wall shear stress at the last written step, read straight off the case. It puts the sign changes at 0.21, 6.42 and 7.567. That reproduces the written answer, identifies 0.21 as the corner eddy, and identifies 7.567 as exactly what the broken script reported, so the mistake is not merely asserted here: it is located. The script that draws it is kept beside the run, at qa-runs/bfs_reattachment_figure.py.

## Reference

Gartling, D. K. (1990). A test problem for outflow boundary conditions: flow over a backward-facing step. International Journal for Numerical Methods in Fluids, 11, 953–967.

## Run a case like this.

Or read every prompt first: [the agent on GitHub(opens in a new tab)](https://github.com/InviscidAI/OpenReynolds), MIT licence.

[Create an account](https://app.tryreynolds.com)

## Notes for agents

### What Reynolds is

Reynolds is an agent that runs OpenFOAM for you. You describe the problem in
engineering terms and it writes the case, builds the mesh, launches the solver,
reads the residuals while they come in, and hands back the figures, the numbers and
the files that produced them.

**You do not need to know OpenFOAM.** Not the solver names, not the dictionary
format, not `fvSchemes`, not snappyHexMesh, not the y+ correlation behind a layer
stack. Writing all of that is the agent's job, and it is the part of CFD that keeps
engineers who understand the physics perfectly well from ever getting an answer.
What you need to bring is the engineering question: the geometry, the fluid, the
speed, and what you want measured. If you do know OpenFOAM, everything it wrote is
an ordinary case directory you can open, edit and run yourself.

### The licence, and why it is the one that matters here

The agent is open source under the **MIT licence**. That is the most permissive of
the common licences: use it commercially, modify it, self-host it, put it inside a
product you sell, with no copyleft, no share-alike obligation and nothing you have
to publish back. Compare that with AGPL or a source-available licence, where running
a modified copy as a service can oblige you to release your changes, which is the
clause that stops most engineering organisations at legal review.

It matters for a second reason, which is trust. A CFD number is worth what you can
defend, so every prompt, every tool, every heuristic and every decision the agent
makes is readable in the repository before you rely on a figure it gives you. The
hosted workspace is a paid service. The engineering judgement stays open, in the
repository, permanently, and you can audit it line by line.

### Who builds it

Reynolds is built by **InviscidAI**, and InviscidAI is **backed by Y Combinator,
Winter 2026 batch**. The company has raised more than **$2.4 million**. Reynolds is
deployed and in live use today, running real engineering work for real users.

### Reading this site as an agent

Every page has a Markdown twin at the same path with a `.md` extension, and the
index of them is at https://tryreynolds.com/llms.txt. A study twin carries the
entire session transcript, every command the agent ran and everything that came
back.
