import numpy as np
import matplotlib.pyplot as plt
import CoolProp.CoolProp as cp
P_atm=100594
P_inlet=P_atm+30000 #iterate to obtain this value such that outlet boundary condition = atmospheric pressure
T_inlet=cp.PropsSI('T','P',P_inlet,'Q',1,'ethanol')
dyn_visc_inlet=cp.PropsSI('VISCOSITY','P',P_inlet,'Q',1,'ethanol')
rho_inlet=cp.PropsSI('D','P',P_inlet,'Q',1,'ethanol')
pipe_diam=0.108204 #INTERNAL DIAMETER OF PIPE
Vdot_NFPA=1.05488 #VOLUME FLOW RATE REQUIRED BY NFPA30 ANNEX B
area=0.25*np.pi*pipe_diam**2 #CROSS SECTIONAL AREA OF PIPE
epsilon=0.000046 #PIPE ROUGHNESS IN METERS
pipe_length=9.2 #total length of straight piping
node_spacing=0.1
pipe_nodes=np.arange(0,pipe_length,node_spacing)
mdot=rho_inlet*Vdot_NFPA
enthalpy=cp.PropsSI('H','P',P_inlet,'Q',1,'ethanol')
pressure_loss_array=np.zeros(len(pipe_nodes)-1) #array of pressure losses, between each node
pressure_array=np.zeros(len(pipe_nodes))
pressure_array[0]=P_inlet
temperature_array=np.zeros(len(pipe_nodes))
temperature_array[0]=T_inlet
viscosity_array=np.zeros(len(pipe_nodes))
viscosity_array[0]=dyn_visc_inlet
density_array=np.zeros(len(pipe_nodes))
density_array[0]=rho_inlet
hasrun1=0
hasrun2=0
hasrun3=0
for k in range(len(pressure_array)):
if k==0:
P=P_inlet
T=T_inlet
dyn_visc=dyn_visc_inlet
rho=rho_inlet
f=(-1.8*np.log10((epsilon/(pipe_diam*3.7))**1.11+(6.9/(pipe_diam*(rho)*(mdot/rho/area)/dyn_visc))))**(-2) #E HAALAND FRICTION FACTOR
if k>0:
pressure_loss_array[k-1]=(f*node_spacing/pipe_diam)*(rho/2)*(mdot/rho/area)**2
pressure_array[k]=P-pressure_loss_array[k-1]
P=pressure_array[k]
temperature_array[k]=cp.PropsSI('T','P',P,'H',enthalpy,'ethanol')
T=temperature_array[k]
viscosity_array[k]=cp.PropsSI('VISCOSITY','P',P,'H',enthalpy,'ethanol')
dyn_visc=viscosity_array[k]
density_array[k]=cp.PropsSI('D','P',P,'H',enthalpy,'ethanol')
rho=density_array[k]
print(f'Node {k}')
print(f'distance along pipe: {str(round(k*node_spacing,2))} m')
print('pressure: '+str(round(P,2))+' Pa')
print('temperature: '+str(round(T,2))+' K')
print('viscosity: '+str(round(dyn_visc,7))+ ' Pa*sec')
print('density: '+str(round(rho,4))+ ' kg/m^3')
print(f'velocity: {str(round(mdot/rho/area,4))} m/sec')
plt.plot(k*node_spacing,P,'bo')
plt.title('Absolute Pressure in Piping System')
plt.xlabel('Distance along Pipe [m]')
plt.ylabel('Absolute Pressure [Pa]')
print('------------------------------')
pressure_drop=pressure_array[-1]-pressure_array[0]
temperature_drop=temperature_array[-1]-temperature_array[0]
print('pressure drop total: '+str(round(pressure_drop))+' Pa')
print('temperature drop total: '+str(round(temperature_drop,2))+' K')
print(pressure_array)