# Buckingham Pi Theorem#

Buckingham π theorem states that an equation involving *n* number of
physical variables which are expressible in terms of *k* independent fundamental
physical quantities can be expressed in terms of *p = n - k* dimensionless
parameters.

To start with a very simple case, consider that you want to find a dimensionless quantity involving the magnitudes V, T and L with dimensions [length]/[time], [time] and [length] respectively.

```
>>> from pint import pi_theorem
>>> pi_theorem({'V': '[length]/[time]', 'T': '[time]', 'L': '[length]'})
[{'V': 1.0, 'T': 1.0, 'L': -1.0}]
```

The result indicates that a dimensionless quantity can be obtained by multiplying V by T and the inverse of L.

Which can be pretty printed using the Pint formatter:

```
>>> from pint import formatter
>>> result = pi_theorem({'V': '[length]/[time]', 'T': '[time]', 'L': '[length]'})
>>> numerator = [item for item in result[0].items() if item[1]>0]
>>> denominator = [item for item in result[0].items() if item[1]<0]
>>> print(formatter(numerator, denominator))
V * T / L
```

You can also apply the Buckingham π theorem associated to a Registry. In this case, you can use derived dimensions such as speed:

```
>>> from pint import UnitRegistry
>>> ureg = UnitRegistry()
>>> ureg.pi_theorem({'V': '[speed]', 'T': '[time]', 'L': '[length]'})
[{'V': 1.0, 'T': 1.0, 'L': -1.0}]
```

or unit names:

```
>>> ureg.pi_theorem({'V': 'meter/second', 'T': 'second', 'L': 'meter'})
[{'V': 1.0, 'T': 1.0, 'L': -1.0}]
```

or quantities:

```
>>> Q_ = ureg.Quantity
>>> ureg.pi_theorem({'V': Q_(1, 'meter/second'),
... 'T': Q_(1, 'second'),
... 'L': Q_(1, 'meter')})
[{'V': 1.0, 'T': 1.0, 'L': -1.0}]
```

## Application to the pendulum#

There are 3 fundamental physical units in this equation: time, mass, and length, and 4 dimensional variables, T (oscillation period), M (mass), L (the length of the string), and g (earth gravity). Thus we need only 4 − 3 = 1 dimensionless parameter.

```
>>> ureg.pi_theorem({'T': '[time]',
... 'M': '[mass]',
... 'L': '[length]',
... 'g': '[acceleration]'})
[{'T': 2.0, 'L': -1.0, 'g': 1.0}]
```

which means that the dimensionless quantity is:

and therefore:

(In case you wonder, the constant is equal to 2 π, but this is outside the scope of this help)

## Pressure loss in a pipe#

What is the pressure loss p in a pipe with length L and diameter D for a fluid with density d, and viscosity m travelling with speed v? As pressure, mass, volume, viscosity and speed are defined as derived dimensions in the registry, we only need to explicitly write the density dimensions.

```
>>> ureg.pi_theorem({'p': '[pressure]',
... 'L': '[length]',
... 'D': '[length]',
... 'd': '[mass]/[volume]',
... 'm': '[viscosity]',
... 'v': '[speed]'
... })
[{'p': 1.0, 'm': -2.0, 'd': 1.0, 'L': 2.0}, {'v': 1.0, 'm': -1.0, 'd': 1.0, 'L': 1.0}, {'L': -1.0, 'D': 1.0}]
```

The second dimensionless quantity is the Reynolds Number