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.
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.
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 and correctly finds \(v_1 = 86.6666\).
Re0 = Re1
nu0 = nu1
rho0 = rho1
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. 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:
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.
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.
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²]
$$
\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}
$$
$$
\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}
$$