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 number of equation templates (formulas) and which variables are present/provided.
High-Level Flow
User inputs equations, assumptions, and target variables
Symbols are extracted and indexed variables are created
Equation templates are activated if solvable
A symbolic system is assembled
The system is solved using sympy
Assumptions are relaxed if necessary
The result may include functions, not just scalars.
Generic Architecture
The calculator is split into three independent parts:
Equation engine (generic, reusable)
Equation templates (domain-specific physics)
Web UI (built with ngapp)
This makes it easy to:
Add new equations
Create calculators for other domains
Extend physics without changing the solver
Deployment and documentation is automatic using github actions.
Equation Templates
All physics equations are defined as templates.
Example:
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
List of strings in lhs = rhs format
Symbols use {{i}} and {{j}} as index placeholders
Multi-index equations are expanded automatically
relevant_vars
List of (symbol, description) tuples
Used for documentation and UI clarity
Descriptions should be precise to avoid input errors
vars_to_check
List of ([list of symbols to check], n (=number of symbols required)) tuples
Prevents unsolvable equations from being added
An equation is activated only if at least n symbols already exist
Keeps the system solvable and the solver fast
Assumption Handling
If the system is over-constrained:
Equations involving assumption symbols are selectively removed (iteratively)
Variables listed in Looking for are preserved where possible
This process continues until a solution is found or all options are exhausted
Output
Solutions are:
Symbolic
Displayed in LaTeX
Highlighted according to Looking for
This allows further analysis such as differentiation or evaluation at specific values.