diff options
author | Adam Frisby | 2007-07-22 02:48:53 +0000 |
---|---|---|
committer | Adam Frisby | 2007-07-22 02:48:53 +0000 |
commit | 98b47016473640a20abbc21177e70d83378b36b1 (patch) | |
tree | fdda0bad481c7be7b27e213fe07d06e081e4ee16 | |
parent | * Added Navier Stokes computational fluid dynamics algorithms to libTerrain.C... (diff) | |
download | opensim-SC-98b47016473640a20abbc21177e70d83378b36b1.zip opensim-SC-98b47016473640a20abbc21177e70d83378b36b1.tar.gz opensim-SC-98b47016473640a20abbc21177e70d83378b36b1.tar.bz2 opensim-SC-98b47016473640a20abbc21177e70d83378b36b1.tar.xz |
* Aerobic erosion now uses Navier Stokes algorithms for wind calculations.
3 files changed, 27 insertions, 10 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs index 5ef2963..2e40531 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs | |||
@@ -409,7 +409,7 @@ namespace OpenSim.Region.Terrain | |||
409 | { | 409 | { |
410 | case "aerobic": | 410 | case "aerobic": |
411 | // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest | 411 | // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest |
412 | heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToInt32(args[6]), Convert.ToBoolean(args[7])); | 412 | heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToInt32(args[6]), Convert.ToBoolean(args[7]), true); |
413 | break; | 413 | break; |
414 | case "thermal": | 414 | case "thermal": |
415 | heightmap.thermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), Convert.ToDouble(args[4])); | 415 | heightmap.thermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), Convert.ToDouble(args[4])); |
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/AerobicErosion.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/AerobicErosion.cs index 870b9b2..97c2762 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/AerobicErosion.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/AerobicErosion.cs | |||
@@ -74,7 +74,7 @@ namespace libTerrain | |||
74 | /// <param name="carry">The percentage of rock which can be picked up to pickup 0..1</param> | 74 | /// <param name="carry">The percentage of rock which can be picked up to pickup 0..1</param> |
75 | /// <param name="rounds">The number of erosion rounds (recommended: 25+)</param> | 75 | /// <param name="rounds">The number of erosion rounds (recommended: 25+)</param> |
76 | /// <param name="lowest">Drop sediment at the lowest point?</param> | 76 | /// <param name="lowest">Drop sediment at the lowest point?</param> |
77 | public void AerobicErosion(double windspeed, double pickup_talus_minimum, double drop_talus_minimum, double carry, int rounds, bool lowest) | 77 | public void AerobicErosion(double windspeed, double pickup_talus_minimum, double drop_talus_minimum, double carry, int rounds, bool lowest, bool usingFluidDynamics) |
78 | { | 78 | { |
79 | Channel wind = new Channel(w, h) ; | 79 | Channel wind = new Channel(w, h) ; |
80 | Channel sediment = new Channel(w, h); | 80 | Channel sediment = new Channel(w, h); |
@@ -83,7 +83,15 @@ namespace libTerrain | |||
83 | wind = this.copy(); | 83 | wind = this.copy(); |
84 | wind.normalise(); // Cheap wind calculations | 84 | wind.normalise(); // Cheap wind calculations |
85 | wind *= windspeed; | 85 | wind *= windspeed; |
86 | wind.pertubation(30); // Can do better later | 86 | |
87 | if (usingFluidDynamics) | ||
88 | { | ||
89 | wind.navierStokes(20, 0.1, 0.0, 0.0); | ||
90 | } | ||
91 | else | ||
92 | { | ||
93 | wind.pertubation(30); // Can do better later | ||
94 | } | ||
87 | 95 | ||
88 | for (i = 0; i < rounds; i++) | 96 | for (i = 0; i < rounds; i++) |
89 | { | 97 | { |
@@ -115,10 +123,19 @@ namespace libTerrain | |||
115 | } | 123 | } |
116 | } | 124 | } |
117 | } | 125 | } |
118 | sediment.pertubation(10); // Sediment is blown around a bit | 126 | |
119 | sediment.seed++; | 127 | if (usingFluidDynamics) |
120 | wind.pertubation(15); // So is the wind | 128 | { |
121 | wind.seed++; | 129 | sediment.navierStokes(7, 0.1, 0.0, 0.1); |
130 | wind.navierStokes(10, 0.1, 0.0, 0.0); | ||
131 | } | ||
132 | else | ||
133 | { | ||
134 | wind.pertubation(15); // Can do better later | ||
135 | wind.seed++; | ||
136 | sediment.pertubation(10); // Sediment is blown around a bit | ||
137 | sediment.seed++; | ||
138 | } | ||
122 | 139 | ||
123 | // Convert some sand to rock | 140 | // Convert some sand to rock |
124 | for (x = 1; x < w - 1; x++) | 141 | for (x = 1; x < w - 1; x++) |
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs index f01b2860..43987d4 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs | |||
@@ -248,9 +248,9 @@ namespace libTerrain | |||
248 | /// Performs computational fluid dynamics on a channel | 248 | /// Performs computational fluid dynamics on a channel |
249 | /// </summary> | 249 | /// </summary> |
250 | /// <param name="rounds">The number of steps to perform (Recommended: 20)</param> | 250 | /// <param name="rounds">The number of steps to perform (Recommended: 20)</param> |
251 | /// <param name="dt">Delta Time - The time between steps</param> | 251 | /// <param name="dt">Delta Time - The time between steps (Recommended: 0.1)</param> |
252 | /// <param name="diff">Fluid diffusion rate</param> | 252 | /// <param name="diff">Fluid diffusion rate (Recommended: 0.0)</param> |
253 | /// <param name="visc">Fluid viscosity</param> | 253 | /// <param name="visc">Fluid viscosity (Recommended: 0.0)</param> |
254 | public void navierStokes(int rounds, double dt, double diff, double visc) | 254 | public void navierStokes(int rounds, double dt, double diff, double visc) |
255 | { | 255 | { |
256 | nsSimulate(this.h, rounds, dt, diff, visc); | 256 | nsSimulate(this.h, rounds, dt, diff, visc); |