6 ''' Template of fluid class, this class is also the None value for fluid '''
7 def __init__(self
,project
,name
):
9 self
.__project
= project
22 #specific volume [m^3/kg]
90 class FluidXSteam(Fluid
):
91 ''' Interface with xsteam fluid'''
92 def __init__(self
,project
,name
):
93 Fluid
.__init
__(self
,project
,name
)
94 self
.__source
= 'XSteam'
100 return XSteam
.function('vv_p',p
,0)
106 return XSteam
.function('vl_p',p
,0)
112 return XSteam
.function('vv_T',T
,0)
118 return XSteam
.function('vl_T',T
,0)
122 if p
!= None and T
!= None:
125 return XSteam
.function('v_pT',p
,T
)
129 if p
!= None and h
!= None:
132 return XSteam
.function('v_ph',p
,h
)
136 if p
!= None and s
!= None:
139 return XSteam
.function('v_ps',p
,s
)
145 return 373.995+273.15
149 T
= XSteam
.function('Tsat_p',p
,0)
155 if p
!= None and h
!= None:
158 T
= XSteam
.function('T_ph',p
,h
)
163 if h
!= None and s
!= None:
166 T
= XSteam
.function('T_hs',h
,s
)
176 p
= XSteam
.function('psat_T',T
,0)
181 if h
!= None and s
!= None:
184 p
= XSteam
.function('p_hs',h
,s
)
192 h
= XSteam
.function('hV_p',p
,0)
199 h
= XSteam
.function('hL_p',p
,0)
206 h
= XSteam
.function('hV_T',T
,0)
213 h
= XSteam
.function('hL_T',T
,0)
219 if p
!= None and T
!= None:
222 h
= XSteam
.function('h_pT',p
,T
)
227 if p
!= None and s
!= None:
230 h
= XSteam
.function('h_ps',p
,s
)
235 if p
!= None and x
!= None:
237 h
= XSteam
.function('h_px',p
,x
)
242 if T
!= None and x
!= None:
244 h
= XSteam
.function('h_Tx',T
,x
)
253 s
= XSteam
.function('sV_p',p
,0)
260 s
= XSteam
.function('sL_p',p
,0)
267 s
= XSteam
.function('sV_T',T
,0)
274 s
= XSteam
.function('sL_T',T
,0)
280 if p
!= None and T
!= None:
283 s
= XSteam
.function('s_pT',p
,T
)
288 if p
!= None and h
!= None:
291 s
= XSteam
.function('s_ph',p
,h
)
298 if p
!= None and h
!= None :
301 x
= XSteam
.function('x_ph',p
,h
)
306 if p
!= None and s
!= None :
309 x
= XSteam
.function('x_ps',p
,s
)
314 class RefPropWrapper
:
317 def function(self
,f
,a
,b
,fl
):
318 if fl
not in self
.dic
:
319 self
.dic
[fl
]=subprocess
.Popen(["python","refpropext.py",fl
],stdin
=subprocess
.PIPE
,stdout
=subprocess
.PIPE
)
320 self
.dic
[fl
].stdin
.write(f
+"/"+str(a
)+"/"+str(b
)+"\n")
321 self
.dic
[fl
].stdin
.flush()
322 r
=float(self
.dic
[fl
].stdout
.readline())
324 refprop
=RefPropWrapper()
326 class FluidREFPROP(Fluid
):
327 '''Interface with REFPROP fluid'''
328 def __init__(self
,project
,name
):
329 Fluid
.__init
__(self
,project
,name
)
330 self
.__source
= 'REFPROP'
331 self
.__wm
= float(refprop
.function('wm', 0,0, self
.name
)/1000.0) # g/mol/1000 => kg/mol
334 # p [Pa] = p/float(1e3) [kPa]
336 # h [J/kg] = h/self.__wm [J/mol]
337 # s [J/(kg-K)] = s/self.__wm [J/(mol-K)]
338 # rho [kg/m^3] = rho /1000 /wm [mol/L]
345 return refprop
.function('vv_p',p
,0,self
.name
)
351 return refprop
.function('vl_p',p
,0,self
.name
)
356 return refprop
.function('vv_T',T
,0,self
.name
)
361 return refprop
.function('vl_T',T
,0,self
.name
)
366 if p
!= None and T
!= None:
368 v
= refprop
.function('v_pT',p
,T
,self
.name
)
373 if p
!= None and h
!= None:
376 v
= refprop
.function('v_ph',p
,h
,self
.name
)
381 if p
!= None and s
!= None:
384 v
= refprop
.function('v_ps',p
,s
,self
.name
)
394 T
= refprop
.function('Tsat_p',p
,0, self
.name
)
400 if p
!= None and h
!= None:
403 T
= refprop
.function('T_ph',p
,h
, self
.name
)
409 if h
!= None and s
!= None:
412 T
= refprop
.function('T_hs',h
,s
, self
.name
)
420 p
= refprop
.function('psat_T',T
,0, self
.name
)
426 if h
!= None and s
!= None:
429 p
= refprop
.function('p_hs',h
,s
, self
.name
)
438 h
= refprop
.function('hV_p',p
,0, self
.name
)
448 h
= refprop
.function('hL_p',p
,0, self
.name
)
457 h
= refprop
.function('hV_T',T
,0, self
.name
)
466 h
= refprop
.function('hL_T',T
,0, self
.name
)
474 if p
!= None and T
!= None:
476 h
= refprop
.function('h_pT',p
,T
, self
.name
)
481 if p
!= None and s
!= None:
484 h
= refprop
.function('h_ps',p
,s
, self
.name
)
489 if p
!= None and x
!= None:
491 h
= refprop
.function('h_px',p
,x
, self
.name
)
496 if T
!= None and x
!= None:
497 h
= refprop
.function('h_Tx',T
,x
, self
.name
)
506 s
= refprop
.function('sV_p',p
,0, self
.name
)
516 s
= refprop
.function('sL_p',p
,0, self
.name
)
526 s
= refprop
.function('sV_T',T
,0, self
.name
)
536 s
= refprop
.function('sL_T',T
,0, self
.name
)
546 if p
!= None and T
!= None:
548 s
= refprop
.function('s_pT',p
,T
, self
.name
)
553 if p
!= None and h
!= None:
556 s
= refprop
.function('s_ph',p
,h
, self
.name
)
563 if p
!= None and h
!= None :
566 x
= refprop
.function('x_ph',p
,h
, self
.name
)
575 if p
!= None and s
!= None :
578 x
= refprop
.function('x_ps',p
,s
, self
.name
)