diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs index df4248701d..f01b28602b 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs @@ -220,9 +220,40 @@ namespace libTerrain } } - private void nsSimulate(int N, int rounds, double dt, double diff, double visc, double force, double source) + private void nsSimulate(int N, int rounds, double dt, double diff, double visc) { + int size = (N * 2) * (N * 2); + double[] u = new double[size]; // Force, X axis + double[] v = new double[size]; // Force, Y axis + double[] u_prev = new double[size]; + double[] v_prev = new double[size]; + double[] dens = (double[])map.Clone(); + double[] dens_prev = (double[])map.Clone(); + + for (int i = 0; i < rounds; i++) + { + u_prev = u; + v_prev = v; + dens_prev = dens; + + nsVelStep(N, ref u, ref v, ref u_prev, ref v_prev, visc, dt); + nsDensStep(N, ref dens, ref dens_prev, ref u, ref v, diff, dt); + } + + nsBufferToDoubles(ref dens, N, ref this.map); + } + + /// + /// Performs computational fluid dynamics on a channel + /// + /// The number of steps to perform (Recommended: 20) + /// Delta Time - The time between steps + /// Fluid diffusion rate + /// Fluid viscosity + public void navierStokes(int rounds, double dt, double diff, double visc) + { + nsSimulate(this.h, rounds, dt, diff, visc); } } } \ No newline at end of file