# Calculating the Parabolic Water Surface

On the page Surface of Rotating Water as Proof of Gravity we have derived the parabola in the X/Z cross-section plane of the Level surface. Here I extend the parabola to a paraboloid which is a rotation of the parabola around the Z axis.

The cross-section parabola is:

 (1)

The distance r in any direction from the axis of rotation is x2+y2. So to extend the parabola to 3D we can simply replace x2 in the equation (1) by r2 and get:

(2)

The lowest height z0 of the water in the middle depends on the volume of the water and the surface. Given a volume we can calculte it:

(3)

Given z0 we can also calculate the volume V of the water:

(4)

## Derivation

The volume of the water is the area below the parabolic water surface. So as long as the parabolic surface is within the container without beeing clipped at the bottom or top, we can derive a closed solution for the volume by integration of all volume elements dV over the ground area of the fish tank. A volume element is:

 (5)

So the whole volume is:

(6)
where'
 $a$ ' =' 'distance of the container wall from the center of rotation in x direction $b$ ' =' 'distance of the container wall from the center of rotation in y direction

Separating into 3 sums:

 (7)

Solving each integral of the 3 sum terms:

 (8)
 (9)
 (10)

Putting together the results from the 3 integrals:

 (11)

## Clipping

If the paraboloid surface is clipped by the container bottom or top wall, due to too few or too much water, the volume can not be calculated in closed from easily. So to calculate the integration constant z0 we have to use a numeric solver, that varies z0 and calculates the volume of the water numerically until we get the z0 value for the amount of water we have in the container.

The following code from the Model of the Rotating Water Surface is used to calculate the integration constant z0:

   :
CompWaterVolume: function( z0 ) {

var deltaX = this.width / 100;
var deltaY = this.depth / 100;
var area = deltaX * deltaY;
var vol = 0;
var breakOuterLoop = false;
for (var x = this.width/2 - deltaX/2; x > 0; x -= deltaX) {

var yStart = this.depth/2 - deltaY/2;
for (var y = yStart; y > 0; y -= deltaY) {

var z = this.CompWaterHeight( x, y, z0 );
if (z < 0) {
breakOuterLoop = (y == yStart);
break;
}
if (z > this.height) {
z = this.height;
}
vol += z * area;

}

if (breakOuterLoop) break;

}

return 4 * vol;

},

CompWaterHeight: function( x, y, z0 ) {
return this.omega * this.omega / this.g / 2 * ( x*x + y*y ) + z0;
},

CompZ0: function() {

var xDim = this.width / 2;
var yDim = this.depth / 2;
var xyDim = xDim * yDim;
var xy2Dim = xDim * xDim + yDim * yDim;

var z0 = (this.volume - 4 * this.omega2g2 * xyDim * xy2Dim / 3) / (4 * xyDim);
if (z0 >= 0) {
if (z0 > this.height) {
return this.height;
}
var waterHeight = this.CompWaterHeight( xDim, yDim, z0 );
if (waterHeight <= this.height) {
return z0;
}
}

// surface intersects with top or bottom wall -> surface is intersected parabola
// find z0 so that effective water volume = this.volume

// SolveWithNewton( Function, Target, Guess, Precision, Data );
var me = this;
var guess = z0;
if (guess > this.height) guess = this.height - 0.00001;
if (guess < 0) guess = 0;
var z0 = SolveWithNewton( function(z){ return me.CompWaterVolume(z); }, this.volume, guess, 0.0000005 );

return z0;
},
: