Normal Shock Calculator
Normal Shock Calculator
Downstream Mach number and every jump across a normal shock — p₂/p₁, T₂/T₁, ρ₂/ρ₁, p₀₂/p₀₁ and the entropy rise — all closed form in M₁ and γ, with no iteration. It refuses subsonic upstream flow instead of returning numbers that look plausible, and it says what the shock does to a finite-volume scheme, which is why your grid convergence study came back with an observed order of one.
Normal shock jumps and the stagnation pressure lost
Air at M₁ = 2.0, upstream static pressure 101 325 Pa absolute, upstream static temperature 288.15 K, γ = 1.4, shock captured over 3 cells, grid refinement ratio 2
The Rankine–Hugoniot relations for a normal shock, all explicit in M₁
- M₁
- upstream Mach number in the shock’s own frame, and the only thing any ratio here depends on besides γ. It must be at least 1: for M₁ below 1 every relation still returns a finite number and the entropy change comes out negative, which is how you know the expansion shock does not exist
- M₂
- downstream Mach number, always subsonic. It falls towards a limit of √((γ−1)/2γ) = 0.37796 for γ = 1.4, so no normal shock however strong leaves the flow slower than about M 0.378
- ρ₂/ρ₁
- density ratio, with a hard limit of (γ+1)/(γ−1) = 6 for γ = 1.4. A perfect gas cannot be compressed more than six times by a single normal shock no matter how fast the flow — the rest of the energy goes into temperature, which is precisely why hypersonic flow is a real-gas problem
- T₂/T₁
- obtained from the pressure and density ratios through the ideal gas law rather than from a separate formula. That the two independent forms agree is the arithmetic check this page is built on
- p₀₂/p₀₁
- stagnation pressure ratio, the measure of the shock’s irreversibility. Stagnation TEMPERATURE is unchanged across the shock because the process is adiabatic; stagnation pressure falls because it is irreversible, and the two facts together are what make this ratio the useful one
- Δs
- entropy rise, exactly −R ln(p₀₂/p₀₁). The same number computed as cp ln(T₂/T₁) − R ln(p₂/p₁) must agree, and both are printed so you can see that they do. It is the entropy rise, not the pressure loss, that makes a shock irreversible: there is no downstream device that can give the stagnation pressure back
- Rayleigh Pitot
- p₀₂/p₁, what a Pitot tube reads in supersonic flow — a bow shock stands ahead of the probe, so the tube senses the stagnation pressure BEHIND the shock against the static pressure ahead of it. This is why a supersonic Pitot reading cannot be reduced with the isentropic relations alone
Worked example
Air at M₁ = 2.0, upstream static pressure 101 325 Pa absolute, upstream static temperature 288.15 K, γ = 1.4, shock captured over 3 cells, grid refinement ratio 2
Downstream Mach number: M₂² = (1 + 0.2 × 4)/(1.4 × 4 − 0.2) = 1.8/5.4 = 1/3, so M₂ = 0.577350. Exactly 1/√3, which is one of the checks worth knowing — γ = 1.4 and M₁ = 2 give a clean value.
Static ratios. p₂/p₁ = (2 × 1.4 × 4 − 0.4)/2.4 = 10.8/2.4 = 4.5 exactly. ρ₂/ρ₁ = (2.4 × 4)/(0.4 × 4 + 2) = 9.6/3.6 = 2.66667. T₂/T₁ = 4.5/2.66667 = 1.6875 exactly. All three are NACA 1135 table values and all three come out exact rather than nearly exact, which is the first sign the algebra is right.
The stagnation pressure ratio, which is what you are usually here for: p₀₂/p₀₁ = 0.720874, so 27.913% of the stagnation pressure is destroyed by one shock. No downstream diffuser recovers any of it.
THE CHECK THAT MATTERS. Compute the entropy rise two independent ways. From the stagnation pressure ratio, Δs/R = −ln(0.720874) = 0.327291. From the static ratios, Δs/R = (γ/(γ−1))ln(T₂/T₁) − ln(p₂/p₁) = 3.5 × 0.5232481 − 1.5040774 = 1.8313685 − 1.5040774 = 0.3272911. The two agree to sixteen digits in the engine, as they must, and both are printed on the page so you can watch them agree rather than take it on trust. In air that is Δs = 93.950 J/(kg·K).
Absolute values. a₁ = √(1.4 × 287.055 × 288.15) = 340.295 m/s, so V₁ = 680.590 m/s. T₂ = 288.15 × 1.6875 = 486.253 K, a₂ = 442.056 m/s, V₂ = 0.57735 × 442.056 = 255.221 m/s. Note V₂/V₁ = 0.375 = 1/2.66667 exactly — the velocity ratio is the inverse density ratio, from continuity across a one-dimensional discontinuity.
p₂ = 455 962 Pa, p₀₁ = 792 812 Pa, p₀₂ = 571 518 Pa, and the Pitot pressure a probe behind the shock would read against the upstream static is p₀₂/p₁ = 5.64044 — the Rayleigh Pitot value, which is why you cannot reduce a supersonic Pitot reading with the isentropic relations alone. The stagnation temperature is 518.670 K on BOTH sides: the shock is adiabatic, so T₀ is conserved even though p₀ is not.
REFUSE THE SUBSONIC CASE, and here is why it matters. Put M₁ = 0.5 into the same formulas and they cheerfully return M₂ = 2.646, p₂/p₁ = 0.125, ρ₂/ρ₁ = 0.286 and T₂/T₁ = 0.4375 — every one of them finite and none obviously silly. What gives it away is the entropy: Δs/R = −0.814, an entropy DECREASE, which the second law forbids. At M₁ = 0.95 the giveaway is tiny, Δs/R = −0.00018, and you would never spot it by eye. That is exactly why this page refuses M₁ below 1 rather than printing the numbers with a caveat.
NOW WHAT THIS DOES TO YOUR MESH. The physical shock is a few mean free paths thick — about 65 nm in air at sea level, so a few tenths of a micron — while your cell is perhaps a millimetre. The shock is four orders of magnitude thinner than the mesh, so no scheme resolves it; every scheme spreads it. Conservation forces at least one interior cell to hold an intermediate average; a limited second-order scheme typically gives two to four cells and a first-order upwind scheme five to ten. Over 3 cells this shock is a pressure rise of 118 212 Pa per cell, a Mach drop of 0.475 per cell and a temperature rise of 66.03 K per cell.
AND HERE IS WHY YOUR GCI CAME BACK WITH p ≈ 1. Godunov's theorem says a scheme that captures a discontinuity without oscillating must be first-order accurate there, so a formally second-order scheme reverts to first order through a shock — Roy (AIAA Journal, 2003) shows the observed order reverting to one on sufficiently refined meshes, and independent work on WENO schemes for shocked turbulence finds the same collapse. The consequence is arithmetic: at a refinement ratio of 2, second order would cut the error by 4× and first order cuts it by 2×, while the mesh costs 8× the cells in three dimensions either way. To get the second-order reduction at first order you would need to refine by 4 instead of 2, which is 8× more cells again. So a GCI study on a shocked flow that reports an observed order near 1 for a second-order scheme has not found a bug. It has found Godunov's theorem. Report the order you observed, use it in the GCI, and do not force the formal order — and expect the observed order to be non-monotone as the mesh refines, because first- and second-order error terms coexist in different parts of the domain.
Normal shock relations for air, γ = 1.4
| M₁ | M₂ | p₂/p₁ | ρ₂/ρ₁ | T₂/T₁ | p₀₂/p₀₁ | Stagnation pressure lost | Δs/R | p₀₂/p₁ (Pitot) |
|---|---|---|---|---|---|---|---|---|
| 1.00 | 1.00000 | 1.0000 | 1.0000 | 1.0000 | 1.000000 | 0.000% | 0.000000 | 1.89293 |
| 1.05 | 0.95313 | 1.1196 | 1.0840 | 1.0328 | 0.999853 | 0.015% | 0.000147 | 2.00825 |
| 1.10 | 0.91177 | 1.2450 | 1.1691 | 1.0649 | 0.998928 | 0.107% | 0.001073 | 2.13285 |
| 1.20 | 0.84217 | 1.5133 | 1.3416 | 1.1280 | 0.992798 | 0.720% | 0.007228 | 2.40750 |
| 1.50 | 0.70109 | 2.4583 | 1.8621 | 1.3202 | 0.929787 | 7.021% | 0.072800 | 3.41327 |
| 1.80 | 0.61650 | 3.6133 | 2.3592 | 1.5316 | 0.812684 | 18.732% | 0.207413 | 4.66952 |
| 2.00 | 0.57735 | 4.5000 | 2.6667 | 1.6875 | 0.720874 | 27.913% | 0.327291 | 5.64044 |
| 2.50 | 0.51299 | 7.1250 | 3.3333 | 2.1375 | 0.499015 | 50.099% | 0.695120 | 8.52614 |
| 3.00 | 0.47519 | 10.3333 | 3.8571 | 2.6790 | 0.328344 | 67.166% | 1.113694 | 12.06096 |
| 4.00 | 0.43496 | 18.5000 | 4.5714 | 4.0469 | 0.138756 | 86.124% | 1.975037 | 21.06808 |
| 5.00 | 0.41523 | 29.0000 | 5.0000 | 5.8000 | 0.061716 | 93.828% | 2.785207 | 32.65347 |
| 10.00 | 0.38758 | 116.5000 | 5.7143 | 20.3875 | 0.003045 | 99.696% | 5.794336 | 129.21697 |
| limit | 0.37796 | grows as M₁² | 6.0000 | grows as M₁² | goes to 0 | 100% | grows without bound | grows as M₁² |
Where the strength of a normal shock starts to matter
| M₁ for air | Stagnation pressure lost | What it means |
|---|---|---|
| 1.000 to 1.226 | under 1% | Nearly isentropic. In the weak-shock limit the entropy rise grows as (M₁² − 1)³, so this range is narrow |
| 1.226 to 1.431 | 1 to 5% | Transonic aerofoils, compressor and turbine passages. Shock loss is a design quantity here |
| 1.431 to 1.828 | 5 to 20% | Strong. The reason supersonic inlets use several oblique shocks and a weak terminal normal shock |
| 1.828 to 2.498 | 20 to 50% | Most of the useful total pressure is gone, and the static temperature roughly doubles |
| above 2.498 | over 50% | More than half destroyed, and the perfect-gas model is failing at the same time |
What a shock does to a finite-volume scheme
| Scheme | Cells across the shock | Order of accuracy at the shock | What to expect from a convergence study |
|---|---|---|---|
| First-order upwind | about 5 to 10 | 1 | An observed order near 1 everywhere, so the study is honest but the errors are large. The shock is carried by numerical viscosity |
| Second-order upwind or MUSCL with a limiter | about 2 to 4 | 1 at the shock, 2 away from it | A mixed order between 1 and 2 that depends on what you monitor, and often non-monotone as the mesh refines because both error terms are present |
| Second-order with the limiter switched off | oscillates | undefined; the solution rings | Overshoots either side of the shock, negative pressures or temperatures, and a divergence that looks like a mesh fault |
| High-order WENO or DG with shock capturing | about 2 to 4 | 1 at the shock, high away from it | Still collapses to low order in any quantity influenced by the shock. Higher order buys accuracy in the smooth regions, not through the discontinuity |
| Conservation, in every case | at least 1 interior cell | not applicable | The INTEGRATED jump is right whatever the smearing — Rankine–Hugoniot is satisfied by any conservative scheme. It is the pointwise values and the shock position that the smearing costs you |
Why the subsonic answer is forbidden, and why your shocked GCI study reports an order of one
A normal shock is completely determined by the upstream Mach number and γ, and every relation is closed form. That is unusual and worth appreciating: no iteration, no correlation, no empirical constant anywhere. The Rankine–Hugoniot conditions are mass, momentum and energy conservation across a discontinuity plus the perfect-gas equation of state, and that system has exactly one non-trivial solution. Everything on this page falls out of it algebraically. The absolute pressures and temperatures are there only to turn the ratios into numbers you can put in a report.
The subsonic case is refused, and the reason is more interesting than “it is nonsense”. Put M₁ = 0.5 into the relations and they return M₂ = 2.646, p₂/p₁ = 0.125, ρ₂/ρ₁ = 0.286 and T₂/T₁ = 0.4375. Nothing there is infinite, nothing is negative, nothing looks obviously wrong — it reads like a perfectly sensible expansion. The only thing that gives it away is the entropy: Δs/R = −0.814, an entropy DECREASE across an adiabatic discontinuity, which the second law forbids. The expansion shock is a mathematically valid solution of the conservation laws and a physically impossible one, and it is ruled out by entropy alone. Worse, the violation shrinks smoothly to zero as M₁ approaches 1: at M₁ = 0.95 it is Δs/R = −0.00018, which no reader would ever notice. A page that printed those numbers with a footnote would mislead people, so this one declines. The same argument, incidentally, is why a numerical scheme needs an entropy fix: Roe’s scheme without one will happily converge to an expansion shock at a sonic point, and the symptom is a stationary non-physical jump that does not go away with mesh refinement.
Stagnation temperature is conserved and stagnation pressure is not, and that asymmetry is the whole story of shock loss. T₀/T = 1 + (γ−1)M²/2 comes from the energy equation alone, with no reversibility assumption, so T₀ is the same on both sides of an adiabatic shock. p₀/p = (T₀/T)^(γ/(γ−1)) needs p/ρ^γ constant, which a shock destroys. So the stagnation pressure ratio is a direct measure of the entropy generated: Δs = −R ln(p₀₂/p₀₁), exactly. That is the number to quote, because stagnation pressure is availability — the work you could still get out of the flow — and a shock destroys it irreversibly. No downstream diffuser, however well designed, returns any of it. This is also the reason supersonic inlets are built as a cascade of oblique shocks terminating in a weak normal shock rather than as one strong normal shock: several small entropy rises add to much less than one large one. At M 2, a single normal shock costs 27.9% of the stagnation pressure, and at M 3 it costs 67.2%.
Two hard limits are worth carrying in your head. M₂ falls towards √((γ−1)/2γ), which is 0.37796 for air, so no normal shock however violent leaves the flow slower than about M 0.378. And the density ratio is bounded by (γ+1)/(γ−1) = 6: a perfect gas cannot be compressed more than sixfold by one normal shock at any Mach number. Both limits are approached quickly — at M₁ = 5 the density ratio is already 5.0 and M₂ is 0.415. What happens to the extra kinetic energy at higher Mach numbers is that it goes into temperature, which grows without bound as M₁² while the compression saturates. That is precisely why hypersonic flow is a real-gas problem: at M₁ = 5 from a 288 K free stream the downstream static temperature is 1671 K, past where vibrational modes are active, and beyond that comes dissociation. The constant-γ relations then over-predict the temperature rise, because a real gas absorbs energy into internal modes, and under-predict the density rise for the same reason. This page warns you when T₂ passes 1000 K.
Now the part that sends people to a forum: the shock in a finite-volume code. The physical shock thickness is a few mean free paths — in air at sea level the mean free path is about 65 nm, so the shock is a few tenths of a micron — while a typical CFD cell is a millimetre. The shock is four orders of magnitude thinner than the mesh. No scheme resolves it and no amount of refinement you can afford will; every scheme spreads the discontinuity over cells instead. Conservation alone forces at least one interior cell to hold an intermediate average, because a cell straddling the jump stores the average of both states. In practice a limited second-order upwind or MUSCL scheme gives roughly two to four cells and a first-order upwind scheme five to ten, because its numerical viscosity is unlimited — count it on your own solution by plotting static pressure along a line normal to the shock rather than trusting those ranges. An oblique shock crossing a Cartesian mesh diagonally is spread over about √2 times as many cells as one aligned with the grid, which is why shock-aligned or adaptively refined meshes earn their cost.
And this is why a grid convergence study on a shocked flow reports an observed order of about one for a second-order scheme. Godunov’s theorem says a monotone scheme — one that captures a discontinuity without oscillating — cannot be better than first-order accurate at that discontinuity. So a formally second-order scheme reverts to first order through the shock, and Roy’s AIAA Journal work on mixed-order schemes shows exactly that: the spatial order reverts to first on sufficiently refined meshes when a shock is present, and first- and second-order error terms coexist so the observed order is non-monotone as the family refines. Independent work on high-order WENO schemes for compressible turbulence with shocklets finds the same collapse. This is not a bug in your mesh or your setup. The practical guidance is short: report the observed order you measured rather than forcing the formal order, use the observed order in the GCI, expect a quantity that integrates over the shock region to converge at first order and one sampled well away from it to do better, and treat non-monotone convergence as information rather than as a failure. The arithmetic of the penalty is worth seeing: at a refinement ratio of 2, second order buys a factor of 4 in error and first order buys 2, while the mesh costs 8 times the cells in three dimensions either way. Buying the second-order reduction at first order means refining by 4, which is 8 times more cells again — 64 times the original mesh. That exchange rate, not the scheme, is why shock-dominated verification is expensive, and why an estimate of the cell count before committing to a mesh family is worth the ten minutes.
One more practical consequence: matching this page does not prove your shock is resolved. A conservative scheme satisfies the Rankine–Hugoniot conditions across the smeared region whatever its width, so the pressure, density and temperature ratios between the two plateaux will match the values here even on a mesh that spreads the shock over ten cells. What the smearing costs is the pointwise values inside and near the transition, the location of the shock, and any quantity that depends on a gradient — heat flux at a shock-wave / boundary-layer interaction being the painful example. So check the jump against this page as a sanity test on your setup, and check the resolution with a mesh study.
Frequently asked questions
Why will the page not accept M₁ below 1?
Because the relations return plausible-looking numbers that describe a physically impossible process. At M₁ = 0.5 you get M₂ = 2.646, p₂/p₁ = 0.125 and T₂/T₁ = 0.4375 — nothing infinite, nothing obviously absurd. The entropy change, though, is negative: Δs/R = −0.814, which the second law forbids. That is the expansion shock, a valid solution of the conservation laws and not a possible flow. And the violation shrinks smoothly to nothing as M₁ approaches 1 — at M₁ = 0.95 it is Δs/R = −0.00018 — so no reader would catch it by eye. Refusing is the only honest behaviour.
Why does my computed total pressure loss not match this page?
Three usual reasons, in order of likelihood. First, a coarse mesh adds NUMERICAL total pressure loss on top of the physical shock loss, so your computed loss is too high and falls as you refine — if it does, the excess was the scheme. Second, the shock in your solution may not be normal: if it is oblique at angle β, the relations apply to the normal component M₁ sin β, and even a modest sweep changes the loss a great deal. Third, check where you are sampling: total pressure varies strongly through the smeared region, so a probe point inside it reads neither upstream nor downstream. Sample on the plateaux.
How many cells should a shock occupy?
At least one interior cell, because conservation forces a cell straddling the jump to hold an intermediate average — that is a floor no scheme beats. In practice a limited second-order upwind or MUSCL scheme gives roughly two to four cells and a first-order upwind scheme five to ten, and those are practitioner ranges rather than a measured result, so count it on your own solution: plot static pressure along a line normal to the shock and count the cells between the two plateaux. If you get more than about six with a second-order scheme, check that the limiter is active and that the mesh is not badly skewed to the shock — a diagonal shock on a Cartesian mesh is spread over about √2 times as many cells.
My GCI study on a shocked case gives an observed order of 1 for a second-order scheme. Is something wrong?
No — that is the expected answer and it has a name. Godunov’s theorem says a scheme that captures a discontinuity without oscillating must be first-order accurate there, so your formally second-order scheme is first order through the shock. Roy’s AIAA Journal work on mixed-order schemes shows the observed order reverting to one on sufficiently refined meshes when a shock is present, and shows why the approach to it is non-monotone: first- and second-order error terms coexist in different parts of the domain. Report the order you observed, use it in the GCI, and do not substitute the formal order — doing so understates the uncertainty by exactly the factor the shock has cost you.
Does stagnation temperature drop across the shock?
No. The shock is adiabatic, so T₀ is identical on both sides — 518.670 K in the worked example. What falls is stagnation PRESSURE, because the process is irreversible, and the ratio p₀₂/p₀₁ is exactly exp(−Δs/R). That asymmetry is the most useful fact about shocks: it tells you that shock loss is availability loss and cannot be recovered downstream, and it gives you a diagnostic — if your simulation shows stagnation temperature changing across a shock, either you have heat transfer somewhere you did not intend or the solver is not conserving total enthalpy, and both are worth finding.
What is the maximum compression a normal shock can give?
Exactly (γ+1)/(γ−1), which is 6 for air, and it is approached faster than you would think — at M₁ = 5 the density ratio is already 5.0 and at M₁ = 10 it is 5.71. The downstream Mach number has a matching limit of √((γ−1)/2γ) = 0.37796. The pressure and temperature ratios have no limit: they grow as M₁². So a hypersonic normal shock converts almost all the extra kinetic energy into heat rather than into compression, and that is why hypersonics is a real-gas discipline — at those temperatures the constant-γ assumption behind the limit of 6 has already failed, and an equilibrium gas compresses further than 6.
Can I use these relations for an oblique shock?
Yes, with one substitution and one caution. For an oblique shock at wave angle β the relations apply to the shock-normal Mach number M₁ sin β, which gives every static ratio and the stagnation pressure ratio directly. The caution is that the downstream Mach number this page returns is the NORMAL component behind the shock: the tangential component is unchanged, so the true downstream Mach number is M₂,normal/sin(β − θ) with θ the flow deflection. And β itself comes from the θ–β–M relation, which is implicit and needs iteration — which is why it is not on this page.
Why is the Pitot pressure behind the shock so much larger than p₁?
Because a Pitot tube in supersonic flow has a bow shock standing in front of it, so it senses the stagnation pressure BEHIND that shock. The ratio p₀₂/p₁ is the Rayleigh Pitot value, 5.64044 at M₁ = 2 for air. It is the number to use when reducing a supersonic Pitot reading, and it is why you cannot invert an isentropic p₀/p relation to get a supersonic Mach number from a Pitot-static measurement: the probe is not measuring an isentropic stagnation pressure. The isentropic route, for subsonic flow, is on the isentropic flow and stagnation calculator.
Related calculators
References
- Ames Research Staff, Equations, Tables, and Charts for Compressible Flow, NACA Report 1135 (1953). A US Government work, and the primary source for the Rankine–Hugoniot relations used here. Every value in the tables on this page was computed from the closed forms and then checked against NACA 1135’s tabulated values: at M1 = 2 and γ = 1.4, M2 = 0.57735, p2/p1 = 4.5, ρ2/ρ1 = 2.66667, T2/T1 = 1.6875, p02/p01 = 0.72087 and p02/p1 = 5.64044, all reproduced exactly.
- Three independent identities are used as the verification of the implementation rather than the brief being checked against itself, and all three hold to machine precision across M1 = 1 to 106: T2/T1 from the pressure and density ratios equals the direct closed form; p02/p01 computed as (p2/p1)−1/(γ−1)(ρ2/ρ1)γ/(γ−1) equals the explicit Mach-number form; and −ln(p02/p01) equals (γ/(γ−1))ln(T2/T1) − ln(p2/p1). Both entropy forms are printed on the page so a reader can watch them agree.
- C. J. Roy, Grid Convergence Error Analysis for Mixed-Order Numerical Schemes, AIAA Journal (2003). Source for the statement that the observed spatial order of accuracy reverts to first order on sufficiently refined meshes when shocks are present, that this follows from Godunov’s theorem — capturing a discontinuity without oscillation requires the spatial accuracy to reduce to first order — and that the coexistence of first- and second-order error terms makes the observed order non-monotone under refinement. Cited, not reproduced.
- Independent corroboration of the order collapse from work comparing finite-volume schemes for compressible turbulence containing shocklets, which reports that with a shock present all the methods tested, up to fifth-order WENO, collapse to low order — and that physical shock profiles are so thin that they cannot be represented by the points of any practical mesh. Cited for the qualitative result.
- S. K. Godunov (1959), for the theorem that a linear monotone scheme cannot exceed first-order accuracy, which is the reason the collapse above is a property of shock capturing rather than a defect in any particular code.
- The cell counts across a captured shock — at least one interior cell from conservation, about two to four for a limited second-order scheme and five to ten for first-order upwind — are stated as practitioner ranges rather than as a measured result, and the page says so. The one-cell floor is the only part that is derivable: a cell straddling a discontinuity necessarily stores the average of both states. The physical shock thickness of a few mean free paths follows from the kinetic mean free path of about 65 nm for air at 101 325 Pa and 288 K.
- Specific gas constants are derived from molar masses and the SI-exact molar gas constant Ru = 8.31446261815324 J/(mol·K) rather than quoted, giving 287.055 J/(kg·K) for dry air. γ values are the room-temperature calorically-perfect ones; the page warns when the downstream static temperature exceeds 1000 K, because that is where a constant γ stops being defensible for air.
Setup guidance, not validation. Correlations have ranges of validity and cell-count estimates are order-of-magnitude. A converged simulation is not a correct one. Full disclaimer at calcengines.com/disclaimer/
