# [A Symbolic Physics Solver for FSAE](https://blog.hirnschall.net/everything-aero/)

author: [Sebastian Hirnschall](https://blog.hirnschall.net/about/)

meta description: Open-source symbolic physics calculator for aero and vehicle dynamics (FSAE). Enter knowns and assumptions, let the solver do the rest!

meta title: Symbolic FSAE Aero, Vehicle Dynamics and Physics Solver

date published: 13.05.2026 (DD.MM.YYYY format)
date last modified: 13.05.2026 (DD.MM.YYYY format)

---

About
-----

Everything Aero is a symbolic aerodynamics and vehicle-dynamics calculator designed for Formula Student / Formula SAE Rules Quiz preparation and concept checking. It is open source and can easily be expanded to other fields/domains.

If you want to contribute missing equations, please add an [issue or PR on GitHub](https://github.com/shirnschall/equation_manager)!

Instead of hard-coded calculators, this tool uses a large library of physics-based equations (aero forces, load transfer, tyre models, drag, moments, etc.) and automatically assembles and solves the relevant system based on the inputs you provide.

How to use it:

* Each symbol needs to be appended with a numeric index (e.g. rho0, v0, A0, C\_L0). All available symbols and formulas are listed below the calculator.
* Enter known values or constraints as equations (e.g. v0 = 30, C\_L0 = -3.2)
* Optionally add assumptions that might lead to an inconsistent system (e.g. "assume no lateral weight transfer" can be added as "W\_lat0=0")
* Specify which variables you want to solve for. This is used when dropping equations for over-constrained systems and when formatting the output.
* There are many possible aerodynamic F\_z available. To do vehicle dynamics, tell the solver which normal force to use for the generic F\_z e.g. "F\_z0=F\_z\_df0" to use only the downforce. For e.g. Reynolds number scaling calculations, add "Re0=Re1".

The solver determines which equations apply, builds a consistent system, and returns the solution along with the equations actually used.

The calculator itself runs a full python environment in the browser. It therefore needs a few seconds to start and install packages with pip (in the browser environment only!). Furthermore sympy is loaded after the first **solve** button press. So the first press will take a few seconds.

All known symbols and equations are listed below.

If the tool fails to load, reload the page and check the console (press F12 key).

Calculator
----------

Loading Python

...




Usage
-----

The calculator offers three input fields: Equations, Assumptions, and Looking for. Each field accepts one input per line. After entering your inputs, click **Solve** to run the symbolic solver. An example input is shown in fig. 1 below.

![Example input fields](https://blog.hirnschall.net/everything-aero/resources/img/example_input.png)


Figure 1: Example input fields

### Conceptual Overview

Everything Aero does not follow a fixed calculation order. Instead, it collects all known symbols and equations, automatically activates all solvable equation templates, solves the resulting system symbolically, and relaxes assumptions if the system is over-constrained. You only need to provide enough information — not a specific workflow.

### Indexed Variables

All symbols must be indexed. Each index represents a separate operating point. Typical use cases include \(v\_0\), \(v\_1\) for two different speeds, \(\rho\_0\), \(\rho\_1\) for different atmospheric conditions, or \(F\_{z0}\), \(F\_{z1}\) for before and after a setup change. If your problem involves only one condition, use index `0` everywhere.

Note: if any symbol is missing an index, the solver will not run.

```
v0
rho0
F_z_total1
```

### Input Fields

#### Equations

The Equations field is used for known numerical values, known relationships from the problem statement, and custom equations not already built into the solver. All equations entered here are treated as hard constraints — if the system is inconsistent, no solution will be found.

```
v0 = 30
rho0 = 1.225
Re0 = Re1
```

#### Assumptions

Assumptions are soft constraints that may override physics. This field is optional. If assumptions conflict with physical equations, the solver will try to preserve equations related to variables in the Looking for field and relax assumption equations if necessary. This mirrors how assumptions are treated in real engineering problems.

```
W_lat0 = 0
```

#### Looking for

This field is optional but strongly recommended. It serves two purposes: it highlights variables in the LaTeX solution output, and it tells the solver which equations to prioritize when resolving conflicts.

```
F_z_total_cornering_fl
F_z_total_cornering_fr
```

### Solve

Once inputs are entered, click **Solve**. Scalar-only problems solve instantly; symbolic functions may take a few seconds. If no solution is found, check indexing first.

### Custom Equations

Custom equations can be added directly in the Equations field, and new symbols are allowed. The example below solves [FS-Quiz Question 366](https://fs-quiz.eu/question/366) and correctly finds \(v\_1 = 86.6666\).

```
Re0 = Re1
nu0 = nu1
rho0 = rho1
```

![Custom equation input for FS-Quiz Question 366](https://blog.hirnschall.net/everything-aero/resources/img/custom_eq_input.png)


Figure 2: Custom equation input for FS-Quiz Question 366

### Troubleshooting

If nothing happens after pressing Solve, the most likely cause is that not every symbol has an index correctly appended to it. Add the correct index and solve again.

How It Works
------------

Everything Aero is built around a generic symbolic equation manager. Instead of hard-coding calculation steps, the solver dynamically assembles and solves a system of equations based on a large library of equation templates and which variables are present or provided.

### High-Level Flow

When you submit inputs, the solver extracts all symbols and creates indexed variables, then activates any equation templates that are solvable given the known symbols. A symbolic system is assembled and solved using SymPy. If the system is over-constrained, assumptions are relaxed iteratively until a solution is found. The result may include functions, not just scalar values.

### Architecture

The calculator is split into three independent parts: the equation engine (generic and reusable), equation templates (domain-specific physics), and the web UI built with [ngapp](https://cerbsim.github.io/ngapp). This separation makes it straightforward to add new equations, create calculators for other domains, or extend the physics without touching the solver. Deployment and documentation are handled automatically via GitHub Actions.

### Equation Templates

All physics equations are defined as templates and registered with the equation manager. A Reynolds number template looks like this:

```
aero_eq_manager.add_equation_template(
    equations_to_add=["Re{{i}}=L{{i}} * rho{{i}} * v{{i}} / eta{{i}}"],
    relevant_vars=[
        ("Re",  "Reynolds number [-]"),
        ("L",   "Characteristic length [m]"),
        ("rho", "Air density [kg/m³]"),
        ("v",   "Velocity [m/s]"),
        ("eta", "Dynamic viscosity [Pa·s]")
    ],
    vars_to_check=[(["Re", "L"], 1)],
    name="Reynolds Number"
)
```

`equations_to_add` is a list of strings in `lhs = rhs` format. Symbols use `{{i}}` and `{{j}}` as index placeholders, and multi-index equations are expanded automatically.

`relevant_vars` is a list of `(symbol, description)` tuples used for documentation and UI clarity. Descriptions should be precise to avoid input errors.

`vars_to_check` is a list of `([symbols], n)` tuples that gate template activation: a template is only added to the system if at least `n` of the listed symbols already exist. This prevents unsolvable equations from being included and keeps the solver fast.

### Assumption Handling

If the system is over-constrained, equations involving assumption symbols are selectively removed in an iterative process. Variables listed in Looking for are preserved where possible, and relaxation continues until a solution is found or all options are exhausted.

### Output

Solutions are symbolic and displayed in LaTeX, with variables from the Looking for field highlighted. This allows further analysis such as differentiation or evaluation at specific parameter values.

FS Rules Quiz Quick Start
-------------------------

This page shows how to use Everything Aero to solve typical FS Rules Quiz problems quickly and reliably. If the problem can be solved with equations, this tool can usually handle it with minimal setup.

### Mental Model

Everything Aero is not a step-by-step calculator. You do not choose formulas manually, decide calculation order, or worry about solving intermediate variables. You only write down what the problem gives you, add any explicit assumptions, and tell the solver what you want to find. The solver figures out the rest.

### Every Symbol Must Have an Index

Every variable must have an index appended. If the problem describes only one condition, use index `0` throughout. The following is correct:

```
v0 = 30
rho0 = 1.225
```

Writing `v = 30` or `rho = 1.225` without an index will prevent the solver from running.

### Typical FS-Quiz Workflow

#### Step 1: Write down given values

Copy everything the problem gives you numerically into the **Equations** field.

```
v0 = 30
rho0 = 1.225
C_L0 = -3.0
A0 = 1.2
m0 = 280
```

#### Step 2: Add stated assumptions

If the problem states things like "assume no lateral load transfer", "neglect drag", or "ignore aerodynamic moments", input them in **Assumptions**. Assumptions are treated as soft constraints and can be relaxed if needed.

```
W_lat0 = 0
```

#### Step 3: Ask the question

Put exactly what the question asks for into **Looking for**. This tells the solver what to highlight in the output and what to prioritize if equations conflict. This field is optional but strongly recommended.

```
Re0
F_z_total_cornering_fl
v1
```

### Example 1: Reynolds Number

A car drives at 30 m/s with a characteristic length of 0.3 m, air density 1.225 kg/m³, and dynamic viscosity 1.8×10⁻⁵ Pa·s. We want the Reynolds number.

Equations:

```
v0 = 30
L0 = 0.3
rho0 = 1.225
eta0 = 1.8e-5
```

Looking for:

```
Re0
```

The solver returns \(Re\_0 = 612500.0\).

### Example 2: Wind Tunnel Scaling

A 50% scale model must match the Reynolds number of the full car. Air properties are identical and full-scale speed is 30 m/s. We want the required tunnel speed.

Equations:

```
Re0 = Re1
L0 = 1.0
L1 = 0.5
v0 = 30
rho0 = rho1
eta0 = eta1
```

Looking for:

```
v1
```

The solver returns \(v\_1 = 60.0\).

### Final Advice

When in doubt: put everything the problem gives you in **Equations**, put stated assumptions in **Assumptions**, and put the question in **Looking for**. Let the solver do the rest.

Known Symbols
-------------

|  |  |
| --- | --- |
| **A** | Cross-sectional area [m²] |
| **A\_ref** | Aerodynamic reference area [m²] |
| **C\_L** | Lift coefficient [-] |
| **C\_d** | Drag coefficient [-] |
| **C\_rr** | Rolling resistance coefficient [-] |
| **C\_y** | Side force coefficient [-] |
| **Delta\_F\_z** | Change in tyre normal load [N] |
| **Delta\_Fz\_drag\_f** | Front axle normal load change from drag moment [N] |
| **Delta\_Fz\_drag\_fl** | Front-left normal load change from drag moment [N] |
| **Delta\_Fz\_drag\_fr** | Front-right normal load change from drag moment [N] |
| **Delta\_Fz\_drag\_r** | Rear axle normal load change from drag moment [N] |
| **Delta\_Fz\_drag\_rl** | Rear-left normal load change from drag moment [N] |
| **Delta\_Fz\_drag\_rr** | Rear-right normal load change from drag moment [N] |
| **Delta\_Fz\_lat** | Total lateral normal load transfer [N] |
| **Delta\_Fz\_lat\_f** | Front axle lateral load transfer [N] |
| **Delta\_Fz\_lat\_fl** | Front-left load change from lateral effects [N] |
| **Delta\_Fz\_lat\_fr** | Front-right load change from lateral effects [N] |
| **Delta\_Fz\_lat\_r** | Rear axle lateral load transfer [N] |
| **Delta\_Fz\_lat\_rl** | Rear-left load change from lateral effects [N] |
| **Delta\_Fz\_lat\_rr** | Rear-right load change from lateral effects [N] |
| **Delta\_Fz\_long** | Total longitudinal load transfer [N] |
| **Delta\_Fz\_long\_f** | Front axle normal load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_fl** | Front-left load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_fr** | Front-right load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_geom** | Geometric load transfer component [N] |
| **Delta\_Fz\_long\_r** | Rear axle normal load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_rl** | Rear-left load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_rr** | Rear-right load change from longitudinal effects [N] |
| **Delta\_Fz\_long\_total** | Net longitudinal load transfer [N] |
| **Delta\_delta\_z\_tire** | Change in tyre deflection [m] |
| **F\_bump** | Bump stop force [N] (active only if delta\_z\_bump > 0) |
| **F\_centripetal** | Required centripetal force [N] |
| **F\_d** | Aerodynamic drag force [N] |
| **F\_f\_max** | Maximum available friction force magnitude [N] |
| **F\_rr** | Rolling resistance force [N] |
| **F\_slope** | Longitudinal force due to road slope [N] |
| **F\_spring** | Suspension spring force [N] |
| **F\_tan** | Resultant tangential force magnitude [N] |
| **F\_thrust\_req** | Required thrust force [N] |
| **F\_x\_drive** | Total driven longitudinal force at wheels [N] |
| **F\_x\_inertia** | Longitudinal inertial force (vehicle frame) [N] |
| **F\_x\_max** | Maximum longitudinal tyre force [N] |
| **F\_x\_tire** | Longitudinal tractive force [N] |
| **F\_x\_tire\_max** | Maximum available longitudinal tyre force [N] |
| **F\_y\_aero** | Aerodynamic side force [N] |
| **F\_y\_available** | Available lateral force [N] |
| **F\_y\_inertia** | Lateral inertial force (vehicle frame) [N] |
| **F\_y\_max** | Maximum lateral force [N] |
| **F\_z** | Generic normal force on tyre [N] |
| **F\_z\_arb\_left** | ARB vertical force at left wheel [N] |
| **F\_z\_arb\_right** | ARB vertical force at right wheel [N] |
| **F\_z\_df** | Aerodynamic downforce [N] |
| **F\_z\_df\_f** | Front axle aerodynamic downforce [N] |
| **F\_z\_df\_fl** | Front-left aerodynamic downforce [N] |
| **F\_z\_df\_fr** | Front-right aerodynamic downforce [N] |
| **F\_z\_df\_r** | Rear axle aerodynamic downforce [N] |
| **F\_z\_df\_rl** | Rear-left aerodynamic downforce [N] |
| **F\_z\_df\_rr** | Rear-right aerodynamic downforce [N] |
| **F\_z\_f** | Front axle normal force [N] |
| **F\_z\_fl** | Front-left wheel normal force [N] |
| **F\_z\_fr** | Front-right wheel normal force [N] |
| **F\_z\_r** | Rear axle normal force [N] |
| **F\_z\_rl** | Rear-left wheel normal force [N] |
| **F\_z\_rr** | Rear-right wheel normal force [N] |
| **F\_z\_static** | Static normal force [N] |
| **F\_z\_static\_df\_drag\_fl** | Front-left normal force: static + downforce + drag moment [N] |
| **F\_z\_static\_df\_drag\_fr** | Front-right normal force: static + downforce + drag moment [N] |
| **F\_z\_static\_df\_drag\_rl** | Rear-left normal force: static + downforce + drag moment [N] |
| **F\_z\_static\_df\_drag\_rr** | Rear-right normal force: static + downforce + drag moment [N] |
| **F\_z\_static\_df\_f** | Front axle normal force: static + downforce [N] |
| **F\_z\_static\_df\_fl** | Front-left normal force: static + downforce [N] |
| **F\_z\_static\_df\_fr** | Front-right normal force: static + downforce [N] |
| **F\_z\_static\_df\_r** | Rear axle normal force: static + downforce [N] |
| **F\_z\_static\_df\_rl** | Rear-left normal force: static + downforce [N] |
| **F\_z\_static\_df\_rr** | Rear-right normal force: static + downforce [N] |
| **F\_z\_static\_f** | Static front axle normal force [N] |
| **F\_z\_static\_fl** | Static front-left normal force [N] |
| **F\_z\_static\_fr** | Static front-right normal force [N] |
| **F\_z\_static\_r** | Static rear axle normal force [N] |
| **F\_z\_static\_rl** | Static rear-left normal force [N] |
| **F\_z\_static\_rr** | Static rear-right normal force [N] |
| **F\_z\_susp** | Vertical force transmitted by suspension at wheel [N] |
| **F\_z\_susp\_total** | Total suspension vertical force at wheel [N] |
| **I\_z** | Yaw moment of inertia [kg·m²] |
| **L** | Characteristic length [m] |
| **L\_ISA** | ISA temperature lapse rate [K/m] |
| **MR** | Suspension motion ratio [-] |
| **M\_pitch\_aero** | Total aerodynamic pitching moment about CG [N·m] |
| **M\_pitch\_df** | Pitching moment caused by downforce distribution [N·m] |
| **M\_pitch\_drag** | Pitching moment caused by drag force [N·m] |
| **M\_yaw\_aero** | Aerodynamic yawing moment about CG [N·m] |
| **M\_z** | Sum of yaw moments about CG [N·m] |
| **P\_required** | Required propulsion power [W] |
| **P\_trac** | Tractive power at the wheels [W] |
| **P\_x** | Longitudinal power at wheels [W] |
| **R** | Specific gas constant for air [J/(kg·K)] |
| **R\_turn** | Turn radius to CG [m] |
| **Re** | Reynolds number [-] |
| **T** | Ambient temperature [K] |
| **T\_0** | Sea level temperature [K] |
| **T\_arb** | Anti-roll bar torque equivalent [N·m] |
| **W** | Vehicle weight (gravitational force) [N] |
| **a\_CG** | CG distance to front axle [m] |
| **a\_brake\_aero** | Maximum braking deceleration with aerodynamic downforce [m/s²] |
| **a\_lat** | Lateral acceleration [m/s²] |
| **a\_lat\_max** | Maximum lateral acceleration (friction-limited) [m/s²] |
| **a\_long** | Longitudinal acceleration (positive forward) [m/s²] |
| **a\_long\_max** | Maximum longitudinal acceleration (friction-limited) [m/s²] |
| **a\_x\_max** | Maximum traction-limited longitudinal acceleration [m/s²] |
| **b\_CG** | CG distance to rear axle [m] |
| **balance\_df** | Aerodynamic balance (front fraction) [-] |
| **balance\_lat** | Lateral load transfer balance (front fraction) [-] |
| **beta\_sideslip** | Vehicle sideslip angle at CG [rad] |
| **delta\_avg** | Average front steering angle [rad] |
| **delta\_inner** | Inner wheel steering angle [rad] |
| **delta\_outer** | Outer wheel steering angle [rad] |
| **delta\_z\_bump** | Bump stop compression [m] |
| **delta\_z\_clearance** | Bump stop clearance [m] |
| **delta\_z\_heave** | Chassis heave displacement [m] |
| **delta\_z\_spring** | Spring compression [m] |
| **delta\_z\_susp** | Suspension deflection [m] |
| **delta\_z\_tire** | Tyre vertical deflection [m] |
| **delta\_z\_wheel** | Wheel vertical displacement [m] |
| **delta\_z\_wheel\_f** | Front axle wheel vertical displacement [m] |
| **delta\_z\_wheel\_left** | Left wheel vertical displacement [m] |
| **delta\_z\_wheel\_r** | Rear axle wheel vertical displacement [m] |
| **delta\_z\_wheel\_right** | Right wheel vertical displacement [m] |
| **eta** | Dynamic viscosity [Pa·s] |
| **eta\_aero** | Aerodynamic efficiency (lift-to-drag ratio) [-] |
| **f\_load** | Dimensionless load influence factor [-] |
| **friction\_util** | Friction utilisation ratio (≤1 = within grip) [-] |
| **g** | Gravitational acceleration [m/s²] |
| **h** | Geometric height of point [m] |
| **k\_arb** | Anti-roll bar stiffness [N/m] |
| **k\_bump** | Bump stop stiffness [N/m] |
| **k\_roll\_f** | Front axle roll stiffness [N·m/rad] |
| **k\_roll\_r** | Rear axle roll stiffness [N·m/rad] |
| **k\_spring** | Suspension spring stiffness [N/m] |
| **k\_tire** | Tyre vertical stiffness [N/m] |
| **k\_vert** | Effective vertical stiffness at wheel [N/m] |
| **k\_wheel** | Effective wheel rate [N/m] |
| **l\_wb** | Wheelbase [m] |
| **m** | Vehicle mass [kg] |
| **mu** | Tyre-road friction coefficient [-] |
| **mu\_0** | Reference friction coefficient [-] |
| **mu\_load\_dep** | Load-dependent friction coefficient [-] |
| **mu\_long** | Longitudinal friction coefficient [-] |
| **nu** | Kinematic viscosity [m²/s] |
| **p** | Static pressure at point [Pa] |
| **p\_0** | Sea level standard atmospheric pressure [Pa] |
| **phi\_roll\_f** | Front roll stiffness distribution [-] |
| **r\_dot** | Yaw acceleration [rad/s²] |
| **rho** | Density at altitude h [kg/m³] |
| **rho\_0** | Sea level standard density [kg/m³] |
| **s\_coast** | Coast-down distance [m] |
| **t\_coast** | Time to coast from v to v\_final [s] |
| **t\_track** | Track width [m] |
| **theta\_anti** | Anti-dive / anti-squat angle [rad] |
| **theta\_bank** | Bank angle [rad] |
| **theta\_pitch** | Pitch angle (small-angle) [rad] |
| **theta\_slope** | Road slope angle (positive uphill) [rad] |
| **v** | Flow velocity [m/s] |
| **v\_final** | Final speed [m/s] |
| **v\_max\_corner** | Maximum cornering speed (friction-limited) [m/s] |
| **v\_x** | Longitudinal velocity component [m/s] |
| **v\_y** | Lateral velocity [m/s] |
| **x\_CG** | Center of gravity position [m] |
| **x\_COP** | Center of pressure position from front axle [m] |
| **x\_rel\_aero** | Longitudinal lever arm from CG to aerodynamic center [m] |
| **z\_CG** | Center of gravity height [m] |
| **z\_COP** | Aerodynamic center height [m] |
| **z\_chassis** | Chassis reference vertical position [m] |
| **z\_rel\_aero** | Vertical lever arm from CG to COP [m] |
| **z\_wheel** | Wheel center vertical position [m] |

Known Equations
---------------

Bernoulli Equation (two points)

$$
\begin{aligned}
g\_{i} h\_{i} \rho\_{i} + p\_{i} + \frac{\rho\_{i} v\_{i}^{2}}{2} &= g\_{j} h\_{j} \rho\_{j} + p\_{j} + \frac{\rho\_{j} v\_{j}^{2}}{2}
\end{aligned}
$$

Continuity Equation for Incompressible Flow

$$
\begin{aligned}
\frac{v\_{i}}{v\_{j}} &= \frac{A\_{j}}{A\_{i}}
\end{aligned}
$$

Reynolds Number

$$
\begin{aligned}
Re\_{i} &= \frac{L\_{i} \rho\_{i} v\_{i}}{\eta\_{i}}
\end{aligned}
$$

Kinematic Viscosity Definition

$$
\begin{aligned}
\nu\_{i} &= \frac{\eta\_{i}}{\rho\_{i}}
\end{aligned}
$$

Aerodynamic Drag Force

$$
\begin{aligned}
F\_{d i} &= \frac{A\_{ref i} C\_{d i} \rho\_{i} v\_{i}^{2}}{2}
\end{aligned}
$$

Aerodynamic Lateral Force

$$
\begin{aligned}
F\_{y aero i} &= \frac{A\_{ref i} C\_{y i} \rho\_{i} v\_{i}^{2}}{2}
\end{aligned}
$$

Aerodynamic Yawing Moment

$$
\begin{aligned}
M\_{yaw aero i} &= F\_{y aero i} x\_{rel aero i}
\end{aligned}
$$

Vehicle Speed from Velocity Components

$$
\begin{aligned}
v\_{i} &= \sqrt{v\_{x i}^{2} + v\_{y i}^{2}}
\end{aligned}
$$

Vehicle Slip Angle at CG

$$
\begin{aligned}
\beta\_{sideslip i} &= \operatorname{atan}{\left(\frac{v\_{y i}}{v\_{x i}} \right)}
\end{aligned}
$$

Longitudinal Force Equilibrium

$$
\begin{aligned}
- F\_{d i} - F\_{rr i} + F\_{x drive i} - F\_{x inertia i} &= 0
\end{aligned}
$$

Rolling Resistance Force

$$
\begin{aligned}
F\_{rr i} &= C\_{rr i} F\_{z i}
\end{aligned}
$$

Longitudinal Power from Force

$$
\begin{aligned}
P\_{x i} &= F\_{x drive i} v\_{i}
\end{aligned}
$$

Yaw Moment Equation of Motion

$$
\begin{aligned}
M\_{z i} &= I\_{z i} r\_{dot i}
\end{aligned}
$$

Maximum Longitudinal Tyre Force

$$
\begin{aligned}
F\_{x max i} &= F\_{z i} \mu\_{long i}
\end{aligned}
$$

Axle Normal Force from Wheel Loads

$$
\begin{aligned}
F\_{z f i} &= F\_{z fl i} + F\_{z fr i} \\
F\_{z r i} &= F\_{z rl i} + F\_{z rr i}
\end{aligned}
$$

Ideal Gas Law

$$
\begin{aligned}
p\_{i} &= R\_{i} T\_{i} \rho\_{i}
\end{aligned}
$$

ISA Temperature Lapse Rate (Assumption)

$$
\begin{aligned}
T\_{i} &= - L\_{ISA i} h\_{i} + T\_{0 i}
\end{aligned}
$$

Coast-Down Time (Drag Only)

$$
\begin{aligned}
t\_{coast i} &= \frac{2.0 m\_{i} \log{\left(\frac{v\_{i}}{v\_{final i}} \right)}}{A\_{ref i} C\_{d i} \rho\_{i} v\_{i}}
\end{aligned}
$$

Coast-Down Distance (Drag Only)

$$
\begin{aligned}
s\_{coast i} &= \frac{2.0 m\_{i} \left(- v\_{final i} + v\_{i}\right)}{A\_{ref i} C\_{d i} \rho\_{i}}
\end{aligned}
$$

Required Thrust vs Speed

$$
\begin{aligned}
F\_{thrust req i} &= F\_{d i} + F\_{x inertia i}
\end{aligned}
$$

Required Power vs Speed

$$
\begin{aligned}
P\_{required i} &= F\_{thrust req i} v\_{i}
\end{aligned}
$$

Continuity Equation (Mass Conservation)

$$
\begin{aligned}
A\_{i} \rho\_{i} v\_{i} &= A\_{j} \rho\_{j} v\_{j}
\end{aligned}
$$

CG Distance Definitions (Front / Rear)

$$
\begin{aligned}
a\_{CG i} &= x\_{CG i} \\
b\_{CG i} &= l\_{wb i} - x\_{CG i}
\end{aligned}
$$

Tyre Vertical Stiffness Definition

$$
\begin{aligned}
k\_{tire i} &= \frac{F\_{z i}}{\delta\_{z tire i}}
\end{aligned}
$$

Tyre Deflection Change from Load Change

$$
\begin{aligned}
\Delta\_{\delta z tire i} &= \frac{\Delta\_{F z i}}{k\_{tire i}}
\end{aligned}
$$

Wheel Vertical Position from Tyre Deflection

$$
\begin{aligned}
z\_{wheel i} &= - \delta\_{z tire i} + z\_{chassis i}
\end{aligned}
$$

Suspension Motion Ratio (Displacement)

$$
\begin{aligned}
\delta\_{z spring i} &= MR\_{i} \delta\_{z wheel i}
\end{aligned}
$$

Suspension Spring Force

$$
\begin{aligned}
F\_{spring i} &= \delta\_{z spring i} k\_{spring i}
\end{aligned}
$$

Suspension Force at Wheel

$$
\begin{aligned}
F\_{z susp i} &= \frac{F\_{spring i}}{MR\_{i}}
\end{aligned}
$$

Wheel Vertical Displacement Decomposition

$$
\begin{aligned}
\delta\_{z wheel i} &= \delta\_{z susp i} + \delta\_{z tire i}
\end{aligned}
$$

Suspension Deflection from Wheel Load

$$
\begin{aligned}
\delta\_{z susp i} &= \frac{F\_{z i} MR\_{i}}{k\_{spring i}}
\end{aligned}
$$

Effective Wheel Rate

$$
\begin{aligned}
k\_{wheel i} &= \frac{k\_{spring i}}{MR\_{i}^{2}}
\end{aligned}
$$

Anti-Roll Bar Torque from Wheel Displacement

$$
\begin{aligned}
T\_{arb i} &= k\_{arb i} \left(\delta\_{z wheel left i} - \delta\_{z wheel right i}\right)
\end{aligned}
$$

Anti-Roll Bar Vertical Wheel Forces

$$
\begin{aligned}
F\_{z arb left i} &= \frac{T\_{arb i}}{t\_{track i}} \\
F\_{z arb right i} &= - \frac{T\_{arb i}}{t\_{track i}}
\end{aligned}
$$

Wheel Displacement from Heave and Pitch

$$
\begin{aligned}
\delta\_{z wheel f i} &= a\_{CG i} \theta\_{pitch i} + \delta\_{z heave i} \\
\delta\_{z wheel r i} &= - b\_{CG i} \theta\_{pitch i} + \delta\_{z heave i}
\end{aligned}
$$

Bump Stop Engagement Deflection

$$
\begin{aligned}
\delta\_{z bump i} &= - \delta\_{z clearance i} + \delta\_{z susp i}
\end{aligned}
$$

Bump Stop Force (Linear, Engaged Only)

$$
\begin{aligned}
F\_{bump i} &= \delta\_{z bump i} k\_{bump i}
\end{aligned}
$$

Total Suspension Force Including Bump Stop

$$
\begin{aligned}
F\_{z susp total i} &= F\_{bump i} + F\_{z susp i}
\end{aligned}
$$

Geometric Longitudinal Load Transfer (Anti-Dive / Anti-Squat)

$$
\begin{aligned}
\Delta\_{Fz long geom i} &= F\_{x tire i} \tan{\left(\theta\_{anti i} \right)}
\end{aligned}
$$

Net Longitudinal Load Transfer Including Geometry

$$
\begin{aligned}
\Delta\_{Fz long total i} &= - \Delta\_{Fz long geom i} + \Delta\_{Fz long i}
\end{aligned}
$$

Effective Vertical Stiffness (Tyre + Suspension)

$$
\begin{aligned}
\frac{1}{k\_{vert i}} &= \frac{1}{k\_{wheel i}} + \frac{1}{k\_{tire i}}
\end{aligned}
$$

Roll Stiffness Distribution (Front Fraction)

$$
\begin{aligned}
\phi\_{roll f i} &= \frac{k\_{roll f i}}{k\_{roll f i} + k\_{roll r i}}
\end{aligned}
$$

Ackermann Inner Wheel Steering Angle

$$
\begin{aligned}
\delta\_{inner i} &= \operatorname{atan}{\left(\frac{l\_{wb i}}{R\_{turn i} - \frac{t\_{track i}}{2}} \right)}
\end{aligned}
$$

Ackermann Outer Wheel Steering Angle

$$
\begin{aligned}
\delta\_{outer i} &= \operatorname{atan}{\left(\frac{l\_{wb i}}{R\_{turn i} + \frac{t\_{track i}}{2}} \right)}
\end{aligned}
$$

Average Steering Angle (Bicycle Equivalent)

$$
\begin{aligned}
\delta\_{avg i} &= \frac{\delta\_{inner i}}{2} + \frac{\delta\_{outer i}}{2}
\end{aligned}
$$

Turn Radius from Steering Angle

$$
\begin{aligned}
R\_{turn i} &= \frac{l\_{wb i}}{\tan{\left(\delta\_{avg i} \right)}}
\end{aligned}
$$

Available Lateral Force on Banked Surface (for flat roads, theta\_bank=0)

$$
\begin{aligned}
F\_{y available i} &= F\_{z i} \left(\mu\_{i} \cos{\left(\theta\_{bank i} \right)} + \sin{\left(\theta\_{bank i} \right)}\right)
\end{aligned}
$$

Banked Turn Lateral Force Limit

$$
\begin{aligned}
F\_{centripetal i} &= F\_{y available i}
\end{aligned}
$$

Aerodynamic Downforce Axle Split

$$
\begin{aligned}
F\_{z df f i} &= F\_{z df i} balance\_{df i} \\
F\_{z df r i} &= F\_{z df i} \left(1 - balance\_{df i}\right)
\end{aligned}
$$

Aerodynamic Efficiency (L/D)

$$
\begin{aligned}
\eta\_{aero i} &= \frac{C\_{L i}}{C\_{d i}}
\end{aligned}
$$

Barometric Formula

$$
\begin{aligned}
p\_{i} &= p\_{0 i} e^{- \frac{g\_{i} h\_{i} \rho\_{0 i}}{p\_{0 i}}}
\end{aligned}
$$

Density Variation with Altitude

$$
\begin{aligned}
\rho\_{i} &= \rho\_{0 i} e^{- \frac{g\_{i} h\_{i} \rho\_{0 i}}{p\_{0 i}}}
\end{aligned}
$$

Aerodynamic Lever Arms relative to CG

$$
\begin{aligned}
x\_{rel aero i} &= - x\_{CG i} + x\_{COP i} \\
z\_{rel aero i} &= - z\_{CG i} + z\_{COP i}
\end{aligned}
$$

Aerodynamic Pitching Moment about CG

$$
\begin{aligned}
M\_{pitch aero i} &= F\_{d i} z\_{rel aero i} - F\_{z df i} x\_{rel aero i}
\end{aligned}
$$

Aerodynamic Balance from COP Location

$$
\begin{aligned}
balance\_{df i} &= \frac{l\_{wb i} - x\_{COP i}}{l\_{wb i}}
\end{aligned}
$$

Pitching Moment from Downforce Distribution

$$
\begin{aligned}
M\_{pitch df i} &= F\_{z df i} \left(x\_{CG i} - x\_{COP i}\right)
\end{aligned}
$$

Pitching Moment from Drag Force

$$
\begin{aligned}
M\_{pitch drag i} &= F\_{d i} \left(z\_{CG i} - z\_{COP i}\right)
\end{aligned}
$$

Longitudinal Inertial Force

$$
\begin{aligned}
F\_{x inertia i} &= a\_{long i} m\_{i}
\end{aligned}
$$

Total Longitudinal Load Transfer (mass based)

$$
\begin{aligned}
\Delta\_{Fz long i} &= \frac{F\_{x inertia i} z\_{CG i}}{l\_{wb i}}
\end{aligned}
$$

Longitudinal Load Transfer Axle Split

$$
\begin{aligned}
\Delta\_{Fz long f i} &= - \Delta\_{Fz long i} \\
\Delta\_{Fz long r i} &= \Delta\_{Fz long i}
\end{aligned}
$$

Longitudinal Load Transfer Per Wheel

$$
\begin{aligned}
\Delta\_{Fz long fl i} &= \frac{\Delta\_{Fz long f i}}{2} \\
\Delta\_{Fz long fr i} &= \frac{\Delta\_{Fz long f i}}{2} \\
\Delta\_{Fz long rl i} &= \frac{\Delta\_{Fz long r i}}{2} \\
\Delta\_{Fz long rr i} &= \frac{\Delta\_{Fz long r i}}{2}
\end{aligned}
$$

Lateral Inertial Force

$$
\begin{aligned}
F\_{y inertia i} &= a\_{lat i} m\_{i}
\end{aligned}
$$

Lateral Acceleration in a Turn

$$
\begin{aligned}
a\_{lat i} &= \frac{v\_{i}^{2}}{R\_{turn i}}
\end{aligned}
$$

Total Lateral Load Transfer

$$
\begin{aligned}
\Delta\_{Fz lat i} &= \frac{F\_{y inertia i} z\_{CG i}}{t\_{track i}}
\end{aligned}
$$

Lateral Load Transfer Axle Distribution

$$
\begin{aligned}
\Delta\_{Fz lat f i} &= \Delta\_{Fz lat i} balance\_{lat i} \\
\Delta\_{Fz lat r i} &= \Delta\_{Fz lat i} \left(1 - balance\_{lat i}\right)
\end{aligned}
$$

Lateral Load Transfer Per Wheel (clockwise positive turn)

$$
\begin{aligned}
\Delta\_{Fz lat fl i} &= \frac{\Delta\_{Fz lat f i}}{2} \\
\Delta\_{Fz lat fr i} &= - \frac{\Delta\_{Fz lat f i}}{2} \\
\Delta\_{Fz lat rl i} &= \frac{\Delta\_{Fz lat r i}}{2} \\
\Delta\_{Fz lat rr i} &= - \frac{\Delta\_{Fz lat r i}}{2}
\end{aligned}
$$

Vehicle Weight Definition

$$
\begin{aligned}
W\_{i} &= g\_{i} m\_{i}
\end{aligned}
$$

Static Normal Force (Total)

$$
\begin{aligned}
F\_{z static i} &= W\_{i}
\end{aligned}
$$

Static Normal Force Per Wheel

$$
\begin{aligned}
F\_{z static fl i} &= \frac{F\_{z static f i}}{2} \\
F\_{z static fr i} &= \frac{F\_{z static f i}}{2} \\
F\_{z static rl i} &= \frac{F\_{z static r i}}{2} \\
F\_{z static rr i} &= \frac{F\_{z static r i}}{2}
\end{aligned}
$$

Drag-Induced Normal Load Shift Per Wheel

$$
\begin{aligned}
\Delta\_{Fz drag fl i} &= \frac{\Delta\_{Fz drag f i}}{2} \\
\Delta\_{Fz drag fr i} &= \frac{\Delta\_{Fz drag f i}}{2} \\
\Delta\_{Fz drag rl i} &= \frac{\Delta\_{Fz drag r i}}{2} \\
\Delta\_{Fz drag rr i} &= \frac{\Delta\_{Fz drag r i}}{2}
\end{aligned}
$$

Normal Force: Static + Downforce (Axle)

$$
\begin{aligned}
F\_{z static df f i} &= F\_{z df f i} + F\_{z static f i} \\
F\_{z static df r i} &= F\_{z df r i} + F\_{z static r i}
\end{aligned}
$$

Normal Force: Static + Downforce (Per Wheel)

$$
\begin{aligned}
F\_{z static df fl i} &= F\_{z df fl i} + F\_{z static fl i} \\
F\_{z static df fr i} &= F\_{z df fr i} + F\_{z static fr i} \\
F\_{z static df rl i} &= F\_{z df rl i} + F\_{z static rl i} \\
F\_{z static df rr i} &= F\_{z df rr i} + F\_{z static rr i}
\end{aligned}
$$

Normal Force: Static + Downforce + Drag Moment (Per Wheel)

$$
\begin{aligned}
F\_{z static df drag fl i} &= \Delta\_{Fz drag fl i} + F\_{z static df fl i} \\
F\_{z static df drag fr i} &= \Delta\_{Fz drag fr i} + F\_{z static df fr i} \\
F\_{z static df drag rl i} &= \Delta\_{Fz drag rl i} + F\_{z static df rl i} \\
F\_{z static df drag rr i} &= \Delta\_{Fz drag rr i} + F\_{z static df rr i}
\end{aligned}
$$

Static Normal Force Axle Split

$$
\begin{aligned}
F\_{z static f i} &= \frac{W\_{i} \left(l\_{wb i} - x\_{CG i}\right)}{l\_{wb i}} \\
F\_{z static r i} &= \frac{W\_{i} x\_{CG i}}{l\_{wb i}}
\end{aligned}
$$

Aerodynamic Downforce (Total)

$$
\begin{aligned}
F\_{z df i} &= \frac{A\_{ref i} C\_{L i} \rho\_{i} v\_{i}^{2}}{2}
\end{aligned}
$$

Aerodynamic Downforce Per Wheel

$$
\begin{aligned}
F\_{z df fl i} &= \frac{F\_{z df f i}}{2} \\
F\_{z df fr i} &= \frac{F\_{z df f i}}{2} \\
F\_{z df rl i} &= \frac{F\_{z df r i}}{2} \\
F\_{z df rr i} &= \frac{F\_{z df r i}}{2}
\end{aligned}
$$

Drag-Induced Normal Load Shift (Axle)

$$
\begin{aligned}
\Delta\_{Fz drag f i} &= \frac{M\_{pitch drag i}}{l\_{wb i}} \\
\Delta\_{Fz drag r i} &= - \frac{M\_{pitch drag i}}{l\_{wb i}}
\end{aligned}
$$

Drag-Induced Normal Load Shift (Per Wheel)

$$
\begin{aligned}
\Delta\_{Fz drag fl i} &= \frac{\Delta\_{Fz drag f i}}{2} \\
\Delta\_{Fz drag fr i} &= \frac{\Delta\_{Fz drag f i}}{2} \\
\Delta\_{Fz drag rl i} &= \frac{\Delta\_{Fz drag r i}}{2} \\
\Delta\_{Fz drag rr i} &= \frac{\Delta\_{Fz drag r i}}{2}
\end{aligned}
$$

Maximum Friction Force

$$
\begin{aligned}
F\_{f max i} &= F\_{z i} \mu\_{i}
\end{aligned}
$$

Load-Dependent Friction Coefficient (Generic Model)

$$
\begin{aligned}
\mu\_{load dep i} &= f\_{load i} \mu\_{0 i}
\end{aligned}
$$

Maximum Longitudinal Acceleration (Friction-Limited)

$$
\begin{aligned}
a\_{long max i} &= \frac{F\_{z i} \mu\_{i}}{m\_{i}}
\end{aligned}
$$

Maximum Lateral Acceleration (Friction-Limited)

$$
\begin{aligned}
a\_{lat max i} &= \frac{F\_{z i} \mu\_{i}}{m\_{i}}
\end{aligned}
$$

Maximum Cornering Speed (Friction-Limited)

$$
\begin{aligned}
v\_{max corner i} &= \sqrt{\frac{F\_{z i} R\_{turn i} \mu\_{i}}{m\_{i}}}
\end{aligned}
$$

Resultant Tangential Force

$$
\begin{aligned}
F\_{tan i} &= \sqrt{F\_{x tire i}^{2} + F\_{y inertia i}^{2}}
\end{aligned}
$$

Friction Circle Utilisation

$$
\begin{aligned}
friction\_{util i} &= \frac{F\_{tan i}}{F\_{z i} \mu\_{i}}
\end{aligned}
$$

Friction Ellipse Model

$$
\begin{aligned}
\frac{F\_{x tire i}^{2}}{F\_{x tire max i}^{2}} + \frac{F\_{y inertia i}^{2}}{F\_{y max i}^{2}} &= 1
\end{aligned}
$$

Tractive Power Definition

$$
\begin{aligned}
P\_{trac i} &= F\_{x tire i} v\_{i}
\end{aligned}
$$

Braking Deceleration with Aerodynamic Downforce

$$
\begin{aligned}
a\_{brake aero i} &= \frac{\mu\_{i} \left(F\_{z df i} + F\_{z static i}\right)}{m\_{i}}
\end{aligned}
$$

Centripetal Force Requirement

$$
\begin{aligned}
F\_{centripetal i} &= \frac{m\_{i} v\_{i}^{2}}{R\_{turn i}}
\end{aligned}
$$

Road Slope Longitudinal Force

$$
\begin{aligned}
F\_{slope i} &= g\_{i} m\_{i} \sin{\left(\theta\_{slope i} \right)}
\end{aligned}
$$

Maximum Longitudinal Acceleration (Traction-Limited)

$$
\begin{aligned}
a\_{x max i} &= \frac{F\_{x tire max i}}{m\_{i}}
\end{aligned}
$$