PROJECT: FLUID FLOW
FluidFlow/FluidFlow.pdf
PROJECT: FLUID FLOW
The use of standard Java input and output mechanisms
The use of complex arithmetic expressions
The use of modular design (methods)
The use of one-dimensional arrays
As always, be sure to properly document your code. Consult the Java Coding Guidelines document
for proper coding standards. Use good design principles and design the solution before attempting
to write code.
Emptying a Water Tank
Water catchment systems are a critical source of water in many parts of the world. These systems
collect rainwater and distribute it to a house, lodging, or neighborhood using a series of gravity-
propelled plumbing. Such systems can also act as a reservoir by which local populations can “fill
up” containers and transport the water to other locations.
Assume we have a full water catchment tank, shaped like a
cylinder. How long would it take to empty that cylinder, if
we “unscrewed” an output nozzle on the bottom?
Determining the rate at which the cylinder would empty out
would require knowledge of the height of the tank, the radius
of the tank, and the radius of the output nozzle. Once we had
this knowledge, we could apply a few simple math equations
to get an approximate answer. This information would be
helpful to measure the amount of water that would be used
for various household uses (e.g. showers).
Exercise #1: Create a Java class called WaterTank.java. This program will simulate the
draining of a cylindrical water catchment tank. Your program will need to show how the rate at
which water would exit the tank, assuming an output nozzle two inches (2”) in diameter. Your
inputs are as follows:
Variable Meaning Valid Range
height_of_tank The height of the cylindrical tank, in inches [72-240]
radius_of_tank The radius of the cylindrical tank, in inches [2-36]
height
radius
Note that the values above will be input from the user only once. Both inputs are double values.
Once the input is finished, your program will display an output table with three columns: time (in
seconds), volume lost, and fluid height (i.e. the height of the water in the cylindrical tank).
Assuming a constant flow, the volume of water in the tank will decrease to zero over time (i.e. the
tank will be empty). For example, a 36-inch high cylinder with a radius of 6 inches will produce
the following table:
Enter the height of the cylindrical tank, in inches: 36
Enter the radius of the cylindrical tank, in inches: 6
Initial Volume: 4071.50 cubic inches.
Time Volume Lost Fluid Height
==== =========== ============
0 0.00 36.00
1 604.69 30.65
2 1115.97 20.79
3 1378.45 8.60
4 1182.06 -1.85
Note that the last value – and only the last value – for fluid height may be less than zero. You
should assume the tank is initially full with water. Your table should compute one value for each
second, starting at zero and ending when the tank runs dry (i.e. volume of fluid in the tank is ≤ 0).
The following constants and formulas will be helpful in your calculations (r = radius, h = height):
PI (π):
3.14159265
Initial Volume of a Cylinder (i.e. the water tank):
𝑉 = 𝜋𝑟2ℎ
Velocity of Outward Flow Through the Nozzle:
𝑣𝑒𝑙𝑜𝑐𝑖𝑡𝑦 = 8.02 ∗ √(𝒄𝒖𝒓𝒓𝒆𝒏𝒕 ℎ𝑒𝑖𝑔ℎ𝑡 𝑜𝑓 𝑡ℎ𝑒 𝑓𝑙𝑢𝑖𝑑 𝑖𝑛 𝑡ℎ𝑒 𝑡𝑎𝑛𝑘)
Volume Lost From a Cylinder At Time t:
𝑉𝑜𝑙𝑢𝑚𝑒 𝐿𝑜𝑠𝑡 = 𝑣𝑒𝑙𝑜𝑐𝑖𝑡𝑦 ∗ (4𝜋) ∗ 𝑡
Height of Fluid in the Cylindrical Tank at Time t:
ℎ = ( 𝑪𝒖𝒓𝒓𝒆𝒏𝒕 𝑉𝑜𝑙𝑢𝑚𝑒 𝑎𝑡 𝑡𝑖𝑚𝑒 𝑡
𝜋𝑟2 )
Note that you will first need to calculate the volume of the cylinder when it is full, and output it to
the screen. For each time step, you will need to calculate the volume lost. Remember that the
volume lost requires you to first calculate the velocity of flow. Once calculated, the volume lost is
subtracted from that initial “full” volume. Afterwards, the new height of the fluid can be calculated
from this new volume. When the volume in the tank reaches zero (or less), your program should
stop its calculations. Your program may use the value of PI (π) shown here for testing
purposes, or use the Math.PI constant.
Your numerical output should be precise to two decimal places on the right of the decimal for all
real-number data. Your ability to modularize your solution is essential (i.e. break the program into
methods). You must use arrays in your solution – at least two arrays are recommended to store the
volume lost and fluid height values. Be sure to properly document your code and use good design
principles.
Sample Tests
Enter the height of the cylindrical tank, in inches: 240
Enter the radius of the cylindrical tank, in inches: 12
Initial Volume: 108573.44 cubic inches.
Time Volume Lost Fluid Height
==== =========== ============
0 0.00 240.00
1 1561.31 236.55
2 3100.09 229.70
3 4582.29 219.57
4 5973.48 206.36
5 7238.85 190.36
6 8343.05 171.92
7 9250.06 151.47
8 9922.94 129.54
9 10323.44 106.72
10 10411.24 83.70
11 10142.60 61.28
12 9467.56 40.36
13 8323.01 21.96
14 6611.62 7.34
15 4096.50 -1.71
Enter the height of the cylindrical tank, in inches: 84
Enter the radius of the cylindrical tank, in inches: 2.5
Initial Volume: 1649.34 cubic inches.
Time Volume Lost Fluid Height
==== =========== ============
0 0.00 84.00
1 923.68 36.96
2 1225.36 -25.45
Enter the height of the cylindrical tank, in inches: 72
Enter the radius of the cylindrical tank, in inches: 8
Initial Volume: 14476.46 cubic inches.
Time Volume Lost Fluid Height
==== =========== ============
0 0.00 72.00
1 855.17 67.75
2 1659.05 59.50
3 2332.10 47.90
4 2789.95 34.02
5 2939.16 19.40
6 2663.55 6.15
7 1750.20 -2.55
Enter the height of the cylindrical tank, in inches: 128
Enter the radius of the cylindrical tank, in inches: 22
Initial Volume: 194627.95 cubic inches.
Time Volume Lost Fluid Height
==== =========== ============
0 0.00 128.00
1 1140.22 127.25
2 2273.75 125.75
3 3390.53 123.52
4 4480.45 120.58
5 5533.36 116.94
6 6539.06 112.64
7 7487.31 107.71
8 8367.80 102.21
9 9170.15 96.18
10 9883.88 89.68
11 10498.45 82.78
12 11003.15 75.54
13 11387.12 68.05
14 11639.32 60.40
15 11748.39 52.67
16 11702.60 44.97
17 11489.67 37.42
18 11096.54 30.12
19 10508.84 23.21
20 9710.15 16.82
21 8680.25 11.11
22 7391.17 6.25
23 5795.73 2.44
24 3778.22 -0.04
PALMS for CS1 Java v1.0
Deliverables
Submit your .java file. Be sure to use coding guidelines: no longer than 80 column width, comment each line above or next to each statement ending in a semicolon, use javadoc comments where necessary.
FluidFlow/WaterTank.java
FluidFlow/WaterTank.java
/**
@author
@version
2.0
Date: 4-19-15
This class prompts user for information regardind acidity-
then decides the level of acidity based on the user's input.
*/
import
java
.
util
.
Scanner
;
//import for user inputs
class
WaterTank
{
/**
* Entry point for the program.
*
*
@param
args the command line arguments
*/
public
static
void
main
(
String
[]
args
){
//set Scanner to variable sc for use in program..
Scanner
sc
=
new
Scanner
(
System
.
in
);
//declare variables..
double
height_of_tank
=
0
;
//tank height from user input
double
radius_of_tank
=
0
;
//tank radius from user input
final
int
NOZZLE
=
2
;
//size of nozzle diameter in inches
double
volume
=
0.0
;
//volume of tank
double
velocity
;
//speed of tank decrease
double
volume_lost
;
//volume lost from tank
double
time
=
0
;
//measurement of time
double
fluid_height
=
0.0
;
//changing fluid height
System
.
out
.
print
(
"Enter the height of the cylindrical tank, in"
+
" inches: "
);
height_of_tank
=
sc
.
nextDouble
();
System
.
out
.
print
(
"Enter the height of the cylindrical tank, in"
+
" inches: "
);
radius_of_tank
=
sc
.
nextDouble
();
double
r
=
radius_of_tank
;
//set radius of tank to r for easier math comp
double
h
=
height_of_tank
;
//set height of tank to h for easier math comp
//compute the initial volume of the water tank..
volume
=
Math
.
PI
*
(
r
*
r
)
*
h
-
volume
;
//output the volume of the water tank with 2 decimal precision...
System
.
out
.
printf
(
"Initial cubic volume: "
+
"%.2f"
,
volume
);
}
//end main
}
//end WaterTank class