def RiemFluid_TP(T, P, *, fluid): from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary PATH = r'D:\REFPROP' RP = REFPROPFunctionLibrary(PATH) MOLAR_BASE_SI = RP.GETENUMdll(0, 'MOLAR BASE SI').iEnum RP.SETPATHdll(PATH) RP.SETFLUIDSdll(fluid) rhomolar, Riem = RP.REFPROPdll('', 'TP', 'D;RIEM', MOLAR_BASE_SI, 0, 0, T, P, [1.0]).Output[0:2] rhoN = rhomolar * N_A z = [1.0] + [0.0] * 19 Ar00, Ar01, Ar10, Ar02, Ar11, Ar20, Ar03, Ar12, Ar21, Ar30 = RP.REFPROPdll( '', 'TD', 'PHIR00;PHIR01;PHIR10;PHIR02;PHIR11;PHIR20;PHIR03;PHIR12;PHIR21;PHIR30', MOLAR_BASE_SI, 0, 0, T, rhomolar, z).Output[0:10] Ao00, Ao01, Ao10, Ao02, Ao11, Ao20, Ao03, Ao12, Ao21, Ao30 = RP.REFPROPdll( '', 'TD', 'PHIG00;PHIG01;PHIG10;PHIG02;PHIG11;PHIG20;PHIG03;PHIG12;PHIG21;PHIG30', MOLAR_BASE_SI, 0, 0, T, rhomolar, z).Output[0:10] Bstar = 1 + 2 * Ar01 + Ar02 cvstar = -Ao20 - Ar20 # First derivatives TdBdT = -(2 * Ar11 + Ar12) TdcvdT = ((2 * Ao20 + Ao30) + (2 * Ar20 + Ar30)) rhodBdrho = (2 * (Ar01 + Ar02) + (2 * Ar02 + Ar03)) rhodcvdrho = -Ar21 # Combinations of first derivatives rhodlnBcvdrho = 1 / Bstar * rhodBdrho + 1 / cvstar * rhodcvdrho TdlnBcvdT = 1 / Bstar * TdBdT + 1 / cvstar * TdcvdT rhodlnBovercvdrho = 1 / Bstar * rhodBdrho - 1 / cvstar * rhodcvdrho # Second derivatives, same treatment as first derivatives, # Fourth derivatives cancel conveniently T2dBdT2_plus_rho2dcvdrho2 = (4 * Ar11 + 2 * Ar12 + 2 * Ar21) Rstar = 1 / (Bstar * cvstar) * (TdBdT * (1 - 0.5 * TdlnBcvdT) + rhodcvdrho * (1 - 0.5 * rhodlnBcvdrho) - 0.5 * cvstar * rhodlnBovercvdrho + T2dBdT2_plus_rho2dcvdrho2) here = Rstar / rhoN # [m^3] return here * 1e27, Riem # [nm^3]
def time_REFPROP(n, Nrep): root = os.environ['RPPREFIX'] RP = REFPROPFunctionLibrary(root) RP.SETFLUIDSdll('METHANE') if n == 0: f = lambda D, T: RP.REFPROP1dll(D, T) elif n == 1: f = lambda AS: AS.delta() * AS.dalphar_dDelta() elif n == 2: f = lambda AS: AS.delta()**2 * AS.d2alphar_dDelta2() elif n == 3: f = lambda AS: AS.delta()**3 * AS.d3alphar_dDelta3() else: raise ValueError(n) T = 300 rho = 3.0 z = [1.0] tic = timeit.default_timer() for i in range(Nrep): RP.PRESSdll(T, rho / 1e3, z) toc = timeit.default_timer() elap = (toc - tic) / Nrep return elap