from __future__ import division from CoolProp.CoolProp import Props, DerivTerms def finite_diff(Output, Input1, Val1, Input2, Val2, Fluid, index, deriv, order, type='centered', dx=1e-3): def f(index, dx): if index == 1: return Props(Output, Input1, Val1 + dx, Input2, Val2, Fluid) else: return Props(Output, Input1, Val1, Input2, Val2 + dx, Fluid) if deriv == 1: if order == 1: return (f(index, dx) - f(index, 0)) / (dx) elif order == 2: return (f(index, dx) - f(index, -dx)) / (2 * dx) elif order == 4: return (f(index, -2 * dx) - 8 * f(index, -dx) + 8 * f(index, dx) - f(index, 2 * dx)) / (12 * dx) elif deriv == 2: if order == 2: return (f(index, -dx) - 2 * f(index, 0) + f(index, dx)) / (dx**2) elif order == 4: return (-f(index, -2 * dx) + 16 * f(index, -dx) - 30 * f(index, 0) + 16 * f(index, dx) - f(index, 2 * dx)) / (12 * dx**2) else: raise ValueError else: raise ValueError ## fluid = 'Water' # T = 647.74374374374372#647#Props(fluid,'Tcrit')+1 # rho = 322.32199999#358#Props(fluid,'rhocrit')+1 ## H = Props('H','T',T,'D',rho,fluid) ## P = Props('P','T',T,'D',rho,fluid) # print T,rho,H,P fluid = 'R125' T = 300 rho = 1.5 H = Props('H', 'T', T, 'D', rho, fluid) P = Props('P', 'T', T, 'D', rho, fluid) print("%s %s %s %s" % (T, rho, H, P)) dpdT__rho = DerivTerms('dpdT|rho', T, rho, fluid) dpdrho__T = DerivTerms('dpdrho|T', T, rho, fluid) dhdT__rho = DerivTerms('dhdT|rho', T, rho, fluid) dhdrho__T = DerivTerms('dhdrho|T', T, rho, fluid) print('*******************************************') print('CHECKING DERIVATIVES FROM EOS') print('*******************************************') dpdT__rho_num = finite_diff('P', 'T', T, 'D', rho, fluid, 1, 1, 4) print('dpdT|rho') print(dpdT__rho) print(dpdT__rho_num) dpdrho__T_num = finite_diff('P', 'T', T, 'D', rho, fluid, 2, 1, 4) print('dpdrho|T') print(dpdrho__T) print(dpdrho__T_num) dhdT__rho_num = finite_diff('H', 'T', T, 'D', rho, fluid, 1, 1, 4) print('dhdT|rho') print(dhdT__rho) print(dhdT__rho_num) dhdrho__T_num = finite_diff('H', 'T', T, 'D', rho, fluid, 2, 1, 4) print('dhdrho|T') print(dhdrho__T) print(dhdrho__T_num) print("") print('*******************************************') print('CHECKING HELMHOLTZ DERIVATIVES') print('*******************************************') dx = 1e-10 Tc = Props(fluid, 'Tcrit') rhoc = Props(fluid, 'rhocrit') delta = rho / rhoc tau = Tc / T def f(dx): rho = rhoc * (delta + dx) return DerivTerms('dphir_dDelta', T, rho, fluid) print('d2phir_dDelta2') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d2phir_dDelta2', T, rho, fluid)) def f(dx): rho = rhoc * (delta + dx) return DerivTerms('d2phir_dDelta2', T, rho, fluid) print('d3phir_dDelta3') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d3phir_dDelta3', T, rho, fluid)) def f(dx): rho = rhoc * (delta + dx) return DerivTerms('dphir_dTau', T, rho, fluid) print('d2phir_dDelta_dTau') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d2phir_dDelta_dTau', T, rho, fluid)) def f(dx): rho = rhoc * (delta + dx) return DerivTerms('d2phir_dTau2', T, rho, fluid) print('d3phir_dDelta_dTau2') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d3phir_dDelta_dTau2', T, rho, fluid)) def f(dx): T = Tc / (tau + dx) return DerivTerms('d2phir_dDelta2', T, rho, fluid) print('d3phir_dDelta2_dTau') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d3phir_dDelta2_dTau', T, rho, fluid)) def f(dx): T = Tc / (tau + dx) return DerivTerms('dphir_dTau', T, rho, fluid) print('d2phir_dTau2') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d2phir_dTau2', T, rho, fluid)) def f(dx): T = Tc / (tau + dx) return DerivTerms('d2phir_dTau2', T, rho, fluid) print('d3phir_dTau3') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d3phir_dTau3', T, rho, fluid)) def f(dx): T = Tc / (tau + dx) return DerivTerms('dphi0_dTau', T, rho, fluid) print('d2phi0_dTau2') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d2phi0_dTau2', T, rho, fluid)) def f(dx): T = Tc / (tau + dx) return DerivTerms('d2phi0_dTau2', T, rho, fluid) print('d3phi0_dTau3') print((f(-2 * dx) - 8 * f(-dx) + 8 * f(dx) - f(2 * dx)) / (12 * dx)) print(DerivTerms('d3phi0_dTau3', T, rho, fluid)) print("") print('*******************************************') print('CHECKING FIRST DERIVATIVES OF PROPERTIES') print('*******************************************') A = dpdT__rho * dhdrho__T - dpdrho__T * dhdT__rho dT_dh_num = finite_diff('T', 'H', H, 'P', P, fluid, 1, 1, 4) dT_dh = 1 / Props('C', 'T', T, 'D', rho, fluid) print('dTdh|p') print(dT_dh) print(dT_dh_num) dT_dp_num = finite_diff('T', 'H', H, 'P', P, fluid, 2, 1, 4) dT_dp = 1 / A * dhdrho__T print('dTdp|h') print(dT_dp) print(dT_dp_num) drho_dh_num = finite_diff('D', 'H', H, 'P', P, fluid, 1, 1, 4) drho_dh = 1 / A * dpdT__rho print('drhodh|p') print(drho_dh_num) print(drho_dh_num) drho_dp_num = finite_diff('D', 'H', H, 'P', P, fluid, 2, 1, 4) drho_dp = -1 / A * dhdT__rho print('drhodp|h') print(drho_dp) print(drho_dp_num) ds_dh_num = finite_diff('S', 'H', H, 'P', P, fluid, 1, 1, 4) ds_dh = 1 / T print('dsdh|p') print(ds_dh) print(ds_dh_num) ds_dp_num = finite_diff('S', 'H', H, 'P', P, fluid, 2, 1, 4) ds_dp = -1 / (T * rho) print('dsdp|h') print(ds_dp) print(ds_dp_num) print("") print('*******************************************') print('CHECKING SECOND DERIVATIVES OF PROPERTIES') print('*******************************************') ## d2T_dh2_num = finite_diff('T','H',H,'P',P,fluid,1,2,4) ## d2T_dh2 = 1/Props('C','T',T,'D',rho,fluid) # print 'dTdh|p' # print dT_dh # print dT_dh_num d2s_dh2 = -(1 / T / T) * dT_dh d2s_dh2_num = finite_diff('S', 'H', H, 'P', P, fluid, 1, 2, 4, dx=10) print('d2sdh2|p') print(d2s_dh2) print(d2s_dh2_num) d2s_dp2 = 1 / (T**2 * rho) * dT_dp + 1 / (T * rho**2) * drho_dp d2s_dp2_num = finite_diff('S', 'H', H, 'P', P, fluid, 2, 2, 4, dx=10) print('d2sdp2|h') print(d2s_dp2) print(d2s_dp2_num) d2s_dhdp = -(1 / T / T) * dT_dp d2s_dhdp_num = finite_diff('S', 'H', H, 'P', P, fluid, 1, 2, 4) print('d2s_dhdp') print(d2s_dhdp) print(d2s_dhdp_num) ## d2s_dhdp = -(1/T/T)*dT_dp # print d2s_dhdp ## d2s_dhdp = 1/(T**2*rho)*dT_dh+1/(T*rho**2)*drho_dh # print d2s_dhdp