# The Moody Diagram
The Moody diagram relates the Darcy friction factor, $f$, to Reynolds number
and relative surface roughness. Pyskyfire uses this friction factor when it
calculates pressure loss in a cooling channel.
```{raw} html
```
## Quantities in the diagram
The Reynolds number based on hydraulic diameter is
$$
Re_{D_h} = \frac{\rho u D_h}{\mu},
$$
where $\rho$ is the fluid density, $u$ is the mean channel velocity, $D_h$ is
the hydraulic diameter, and $\mu$ is the dynamic viscosity. Each curve in the
diagram represents a different relative roughness, $\epsilon/D_h$, where
$\epsilon$ is the absolute surface roughness.
For fully developed flow through a channel of length $L$, the friction factor
appears in the Darcy--Weisbach pressure-loss equation:
$$
\Delta p = f\frac{L}{D_h}\frac{\rho u^2}{2}.
$$
## Friction-factor model
Pyskyfire treats flow below $Re_{D_h}=2300$ as laminar and uses
$$
f_{lam} = \frac{64}{Re_{D_h}}.
$$
For turbulent flow with a specified roughness, it solves the Colebrook--White
equation iteratively:
$$
\frac{1}{\sqrt{f_{turb}}}
+ 2\log_{10}\left(
\frac{\epsilon}{3.71D_h}
+ \frac{2.51}{Re_{D_h}\sqrt{f_{turb}}}
\right) = 0.
$$
When no roughness is specified, the smooth-wall turbulent expression is
$$
f_{turb} = \left(0.79\ln Re_{D_h} - 1.64\right)^{-2}.
$$
Between $Re_{D_h}=2300$ and $Re_{D_h}=3500$, Pyskyfire uses a linear blend
rather than an abrupt switch. Defining
$$
\alpha = \frac{Re_{D_h}-2300}{3500-2300},
$$
the blended friction factor is
$$
f = (1-\alpha)f_{lam} + \alpha f_{turb}.
$$
Above $Re_{D_h}=3500$, the turbulent result is used directly.
## How the chart is generated
`tools/generate_engineering_charts.py` creates the diagram with
`pyskyfire.viz.PlotMoodyDiagram`. The plot evaluates the same
`pyskyfire.regen.f_darcy` function used by the cooling solver at 400
logarithmically spaced Reynolds numbers from $7\times10^2$ to $10^8$. It sets
$D_h=1$ so the absolute roughness value passed to the calculation is also the
relative roughness $\epsilon/D_h$. Each roughness curve is therefore a direct
visualisation of the implemented friction-factor model.