Sign in to follow this  
WhiteRoser

Water flow

Recommended Posts

Hiya, I'm hoping someone can answer a question I have. Imagine a cave with a 3x3 grid filled with water. Below it, a solid piece of rock, below that, a vertical chasm of 9 units high. Knock out the seperating rock, water goes down and fills up the chasm. No probs there. But what if the chasm is 5 units? Where do the other 4 units of water go? If I had 3 chasms, one 5 units high, and 2 at 2 units high, you could say all 3 chasms would get full with water, if they were on the same level could you not? Is there any type of mathematical formula or perhaps some pseudo-code that I can implement this please? I've got some idea in my head on how to do it, but I don't know if I'm looking at it too closely. Appreciate any feedback, thanks.

Share this post


Link to post
Share on other sites
You should really be thinking about this in terms of volume instead of area, but yes, they all should be filled if they are all on the same level as you suggest.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
Quote:
Original post by WhiteRoser
But what if the chasm is 5 units? Where do the other 4 units of water go?

The other 4 units remain in the 3x3 grid.

Quote:
Original post by WhiteRoser
If I had 3 chasms, one 5 units high, and 2 at 2 units high, you could say all 3 chasms would get full with water, if they were on the same level could you not?

Yes.

Quote:
Original post by WhiteRoser
Is there any type of mathematical formula or perhaps some pseudo-code that I can implement this please?

You mean other than simple addition and subtraction?

Share this post


Link to post
Share on other sites
Quote:
Original post by WhiteRoser
Is there any type of mathematical formula or perhaps some pseudo-code that I can implement this please?


water_volume_left = water_volume_total - chasms_volume_total

if (water_volume_left == 0)
{
// all chasms completely filled with water
// no water left in the grid
}
else if (water_volume_left < 0)
{
// chasms partially filled with water
// water level in chasms relative to the grid = water_volume_left / (3 * 3), a negative number
}
else if (water_volume_left > 0)
{
// chasms completely filled with water and some water left in the grid
// water level in the grid = water_volume_left / (3 * 3)
}

And I hope I haven't done your homework here..

Share this post


Link to post
Share on other sites
Thanks for the answers.

Rest assured, there's no homework involved, at 34 I haven't done homework for about 18 years! LOL.

I appreciate it's down to simple addition/subtraction, but what I was trying to get at was also the fact that if a 3x3 grid of water (9 units) leaked into a horizonal chamber of 9 units, that horizontal chamber would fill.

But imagine a slope, with a 2 unit chasm. Sure the 9 units of water would fill the 2 unit chasm, and thus 7 units would continue to flow, again as you said, simple mathematics. The thing that has me stumped is 'handling' the water and showing it as a steady trickle (or fast flow) as opposed to simply there one minute and gone the next.

The "look at it in volume, not area" comment has helped a lot, so thanks for that one.

Share this post


Link to post
Share on other sites
Quote:
Original post by WhiteRoser
Rest assured, there's no homework involved, at 34 I haven't done homework for about 18 years! LOL.

[lol]
Quote:
Original post by WhiteRoser
But imagine a slope...

I amagine it would look something like this?

/
/
/
/
|
.~~| <-- water level
/| |
/ | |
/ | |
/ .--.

As long as the water flowing at a relatively slow pace, gravity would force it to fall into the chasm.
Once the chasm is completely filled, the water would start to flow over the water in the chasm. In reality, new water would be pushed into the chasm and water already in the chasm would be forced out, but for a simple simulation that doesn't really matter.

If there is more than one chasm (imagine one higher up the slope in the drawing), the topmost chasm would get completely filled first, than the second one would. Note that in 2D the slope causes the chasm to fill one by one, instead of simultaneously like in the very first example. In 3D (a water 'plane' instead of a water 'line') it's a little more complicated, chasms on the same 'level' would fill up simultaneously, but if the chasms have different volumes, the point in time where they start flooding would be different, having an effect on the moment when chasms below them start filling up.

When the water flow is really strong, it would 'beat' gravity, and water may fly over the chasms completely. Than you would have many more parameters to take into account, so I won't into that scenario right now.

In pseudo code it would imagine it to look something like this:

There is a drop of water falling down...
If it encounters a chasm, see if the volume of the water in it equals the volume chasm. If not, fall into the chasm. If it is, continue

flowing down until it finds another chasm and perform the same check again.
O if you don not want to deal with individual drops:

volume_per_time_unit = 1 // amount of water passing by every time unit
number_of_chasms = 3
chasms_volume[3] = {2, 4, 4} // three chasms from top to bottom

while (end_of_simulation) // end_of_simulation couls be anything, maybe when you run out of water
{
time_unit++; // advance in time

for (i = 0; i < number_of_chasms)
{
if (chasms_volume[i].water_volume < chasms_volume[i].chasm_volume)
{
chasms_volume[i].water_volume += volume_per_time_unit;
break; // don't check the rest of the chasms
}
}
}

Not that it's pseudo code, don't expect it to be an example of good coding.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this