I want to calculate a flux on my fpga using the Euler equations with the finite volume method. Unfortunately the values of the state variables differ a lot. For example the pressure has a value of 100000 and the density 1.16. This makes it complicated to calculate on the FPGA. Now I'm wondering if there is a normalized form for the Euler equations with finite volumes, so that the values of the state variables are in the same range. I've tried to set them all to one, but my simulation crashed. I think that's not possible because of the non-linearity of the equations.
1 Answer
There is a normalized form, though it's properly called the dimensionless Euler equations.
The way to do it is define:
- scale time $t_0$
- scale density $\rho_0$
- scale length $L_0$
and then derive the scales from these: $$ v_0 = \frac{L_0}{t_0},\quad p_0=\rho_0v_0^2 $$ NB: it is possible to use other combinations, but I find that these are often the easiest to employ. Your Euler equations then become, formally, $$ \frac{\partial\rho'}{\partial t'}+\nabla\cdot\rho'\mathbf v'=0 \\ \frac{\partial\rho'\mathbf v'}{\partial t'}+\nabla\cdot\left(\rho'\mathbf v'\mathbf v'+p'\mathbb I\right)=0 \\ \frac{\partial e'}{\partial t'}+\nabla\cdot\left(\left[e'+p'\right]\mathbf v'\right)=0 $$ where $$ t'=\frac{t}{t_0},\quad\rho'=\frac{\rho}{\rho_0},\quad\mathbf v'=\frac{\mathbf v}{v_0},\quad p'=\frac{p}{p_0},\quad e'=\frac{e}{p_0} $$ are your dimensionless quantities.
Note that these variables have not changed your equations, so the only thing that you need to do is define the scales & then divide your variables by the scales in your initial conditions file.