140 lines
3.4 KiB
Python
140 lines
3.4 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
def valveclosing(dt, tf, valve_op):
|
|
"""Define valve operation curve (percentage open v.s. time)
|
|
|
|
Parameters
|
|
----------
|
|
dt : float
|
|
Time step
|
|
tf : float
|
|
Simulation Time
|
|
valve_op : list
|
|
Contains parameters to define valve operation rule
|
|
valve_op = [tc,ts,se,m]
|
|
tc : the duration takes to close the valve [s]
|
|
ts : closure start time [s]
|
|
se : final open percentage [s]
|
|
m : closure constant [unitless]
|
|
|
|
Returns
|
|
-------
|
|
s : list
|
|
valve operation curve
|
|
"""
|
|
|
|
[tc,ts,se,m] = valve_op
|
|
tn = int(tf/dt)
|
|
# abrupt closure
|
|
if tc ==0:
|
|
s = np.array([(1- (i*dt- ts))**1 for i in range(tn)])
|
|
s[s>1] = 1
|
|
s[s<1] = se
|
|
# gradual closure
|
|
else:
|
|
t = np.array([(i*dt- ts)/tc for i in range(tn)])
|
|
t[t>1] = 1
|
|
t[t<0] = 0
|
|
s = np.array([1 - (1-se)*t[i]**m for i in range(tn)])
|
|
s[s>1] = 1
|
|
s[s<se] = se
|
|
|
|
return s
|
|
|
|
|
|
def valveopening(dt, tf, valve_op):
|
|
"""Define valve operation curve (percentage open v.s. time)
|
|
|
|
Parameters
|
|
----------
|
|
dt : float
|
|
Time step
|
|
tf : float
|
|
Simulation Time
|
|
valve_op : list
|
|
Contains parameters to define valve operation rule
|
|
valve_op = [tc,ts,se,m]
|
|
tc : the duration takes to close the valve [s]
|
|
ts : closure start time [s]
|
|
se : final open percentage [s]
|
|
m : closure constant [unitless]
|
|
|
|
Returns
|
|
-------
|
|
s : list
|
|
valve operation curve
|
|
"""
|
|
|
|
[tc,ts,se,m] = valve_op
|
|
tn = int(tf/dt)
|
|
# abrupt opening
|
|
if tc ==0:
|
|
s = np.array([((i*dt- ts))**1 for i in range(tn)])
|
|
s[s>0] = se
|
|
s[s<0] = 0
|
|
# gradual opening
|
|
else:
|
|
t = np.array([(i*dt- ts)/tc for i in range(tn)])
|
|
t[t>1] = 1
|
|
t[t<0] = 0
|
|
s = np.array([se* (t[i])**m for i in range(tn)])
|
|
s[s<0] = 0
|
|
s[s>se] = se
|
|
return s
|
|
|
|
dt = 0.1
|
|
tf = 2
|
|
t = np.arange(0, tf, dt)
|
|
|
|
tc = 1 # pump closure period
|
|
ts = 0 # pump closure start time
|
|
se = 0 # end open percentage
|
|
|
|
m = 1 # closure constant
|
|
valve_op = [tc,ts,se,m]
|
|
s1 = valveclosing(dt, tf, valve_op)
|
|
|
|
m = 2 # closure constant
|
|
valve_op = [tc,ts,se,m]
|
|
s2 = valveclosing(dt, tf, valve_op)
|
|
|
|
tc = 1 # pump closure period
|
|
ts = 0 # pump closure start time
|
|
se = 1 # end open percentage
|
|
|
|
m = 1 # closure constant
|
|
valve_op = [tc,ts,se,m]
|
|
s3 = valveopening(dt, tf, valve_op)
|
|
|
|
m = 2 # closure constant
|
|
valve_op = [tc,ts,se,m]
|
|
s4 = valveopening(dt, tf, valve_op)
|
|
|
|
import matplotlib
|
|
matplotlib.rcParams['pdf.fonttype'] = 42
|
|
fig = plt.figure(figsize=(10,4), dpi=80, facecolor='w', edgecolor='k')
|
|
plt.subplot(1, 2, 1)
|
|
plt.plot(t,s1,'k-', label='m=1')
|
|
plt.plot(t,s2,'r-', label='m=2')
|
|
plt.xlim([t[0],t[-1]])
|
|
plt.title('(a)')
|
|
plt.xticks([0,1,t[-1]],['ts','ts + tc','tf'])
|
|
plt.yticks([0,0.2,0.4,0.6,0.8,1.0],['se','0.2','0.4','0.6','0.8','1.0'])
|
|
plt.xlabel("Time [s]")
|
|
plt.ylabel("Valve opening ratio")
|
|
plt.legend(loc='best')
|
|
plt.grid(True)
|
|
|
|
plt.subplot(1, 2, 2)
|
|
plt.plot(t,s3,'k-', label='m=1')
|
|
plt.plot(t,s4,'r-', label='m=2')
|
|
plt.xlim([t[0],t[-1]])
|
|
plt.title('(b)')
|
|
plt.xticks([0,1,t[-1]],['ts','ts + tc','tf'])
|
|
plt.yticks([0,0.2,0.4,0.6,0.8,1.0],['0','0.2','0.4','0.6','0.8','se'])
|
|
plt.xlabel("Time [s]")
|
|
plt.legend(loc='best')
|
|
plt.grid(True)
|
|
|
|
fig.savefig('./docs/figures/valve_operating.pdf', format='pdf',dpi=500)
|