"""
Newton Rapson method solution of the example of 3 reservouirs
|_____| H1
\ |_______| H2
\/
/HD
/
|______|H3
"""
import numpy as np
import matplotlib.pyplot as p
no = np.array([1,2,3])
L = np.array([3,1,5])
D = np.array([20,20,25])
C = np.array([120,110,125])
H = np.array([100,80,20])
n = 1.852
R = L*1.526e7/((C**n)*(D**4.87))
dQ = np.array([np.Inf, np.Inf])
Q = np.array([100, 100])
while np.max(np.abs(dQ)) > 1e-2:
f = R[0]*Q[0]**n - R[1]*Q[1]**n - (H[0] - H[1])
g = R[0]*Q[0]**n + R[2]*(Q[0]+Q[1])**n - (H[0] - H[2])
LHS = np.array([[n*R[0]*Q[0]**(n-1), -n*R[1]*Q[1]**(n-1)] ,
[n*(R[0]*Q[0]**(n-1) + R[2]*(Q[0]+Q[1])**(n-1)), n*R[2]*(Q[0]+Q[1])**(n-1)]])
RHS = np.array([-f,-g])
dQ = np.linalg.solve(LHS,RHS)
print dQ
Q = Q + dQ
Q.resize((3))
Q[2] = Q[0] + Q[1]
print "discharges:"
print Q
HD = H[0] - R[0]*Q[0]**n
print "head at D %3.2f m" % HD
HD = H[1] - R[1]*Q[1]**n
print "or %3.2f m" % HD
HD = H[2] + R[2]*Q[2]**n
print "or %3.2f m" % HD
print HD