I have a spreadsheet tool to do this. The answer is more accurate if you break the pipe length into segments because average end area is not totally mathematically correct unless the pipe is totally full, it can be off as much as 5% at low stages.
I could send you the tool but don't have much time to explain it. Alternatively, attached below is a VBA code for a custom Excel function you can use to develop your own tool. Another approach is to construct a partially full pipe lookup table (such as the one found in the Civil Engineering Reference Manual (Lindebergh) 6th Edition Chapter 3 Appendix E), if you are willing to type in the 100 values.
User Defined Function for Partially Full Tank:
Depth = depth of water measured from invert to water surface
Diam = diamter of tank
Units must be the same for depth and diam.
Public Function part_full_circ_area(depth, Diam) As Double
' This function will determine the area occupied when a circular section is partially filled.
' Prepared by Brian Taylor, April 2004
'
Dim arg1, eval_asin As Double
'
Const pi = 3.14159265
' Screen out very low values. Precision is limited to input depths greater than 1E-16
If depth <= 0.000000000000001 Then
part_full_circ_area = 0
Else
If depth >= Diam Then
part_full_circ_area = pi * Diam ^ 2 / 4
Else
' The following code computes the arcsin(1-2d/D).
' Note that Visual Basic does not have a function for arcsin.
' The following derived function is used: Arcsin(X) = Atn(X / Sqr(-X * X + 1))
arg1 = 1 - 2 * depth / Diam
eval_asin = Atn(arg1 / Sqr(-arg1 * arg1 + 1))
'
' Now apply the area formula:
' A = pi*D^2/8 - D^2/4*arcsin(1-2d/D)-(D/2-d)*sqr(d(D-d))
'
part_full_circ_area = pi * Diam ^ 2 / 8 - Diam ^ 2 / 4 * eval_asin - (Diam / 2 - depth) * Sqr(depth * (Diam - depth))
End If
End If
End Function
Reference: