From 1fc2fda58e5f25be5e59783dda164f147841369e Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Wed, 10 Dec 2014 00:54:03 -0500 Subject: [PATCH] Converted REFPROP to use REDXdll to get reducing state (thanks to email from Eric Lemmon) Signed-off-by: Ian Bell --- .../REFPROP/REFPROPMixtureBackend.cpp | 24 +++++++------------ src/Backends/REFPROP/REFPROP_lib.h | 7 ++++++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp index 30f0c6e1..9e204d90 100644 --- a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp +++ b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp @@ -186,6 +186,7 @@ static char default_reference_state[] = "DEF"; QMASSdll_POINTER QMASSdll; QMOLEdll_POINTER QMOLEdll; RESIDUALdll_POINTER RESIDUALdll; + REDXdll_POINTER REDXdll; RMIX2dll_POINTER RMIX2dll; SATDdll_POINTER SATDdll; SATEdll_POINTER SATEdll; @@ -316,6 +317,7 @@ double setFunctionPointers() PUREFLDdll = (PUREFLDdll_POINTER) getFunctionPointer(PUREFLDdll_NAME); RESIDUALdll = (RESIDUALdll_POINTER) getFunctionPointer(RESIDUALdll_NAME); RMIX2dll = (RMIX2dll_POINTER) getFunctionPointer(RMIX2dll_NAME); + REDXdll = (REDXdll_POINTER) getFunctionPointer(REDXdll_NAME); QMASSdll = (QMASSdll_POINTER) getFunctionPointer(QMASSdll_NAME); QMOLEdll = (QMOLEdll_POINTER) getFunctionPointer(QMOLEdll_NAME); SATDdll = (SATDdll_POINTER) getFunctionPointer(SATDdll_NAME); @@ -718,24 +720,14 @@ long double REFPROPMixtureBackend::calc_rhomolar_critical(){ return static_cast(dcrit_mol_L*1000); }; long double REFPROPMixtureBackend::calc_T_reducing(){ - if (mole_fractions.size() != 1){throw ValueError("calc_T_reducing only valid for one component");}; - long ierr = 0, i, i1 = 0, i2 = 1, i3 = 0; - char herr[255], h[255], input[] = "tz"; - double Tz; - std::vector z(255); - PASSCMNdll(input, &i1, &i2, &i3, h,&i,&Tz,&(z[0]),&ierr,herr,255,255,255); - if (ierr > 0) { throw ValueError(format("%s",herr).c_str()); } //else if (ierr < 0) {set_warning(format("%s",herr).c_str());} - return static_cast(Tz); + double rhored_mol_L = 0, Tr = 0; + REDXdll(&(mole_fractions[0]), &Tr, &rhored_mol_L); + return static_cast(Tr); }; long double REFPROPMixtureBackend::calc_rhomolar_reducing(){ - if (mole_fractions.size() != 1){throw ValueError("calc_rhomolar_reducing only valid for one component");}; - long ierr = 0, i = 0, i1 = 0, i2 = 1, i3 = 0; - char herr[255] = "", h[255] = "", input[255] = "rhoz"; - double rhored_mol_L; - std::vector z(20); - PASSCMNdll(input, &i1, &i2, &i3, h, &i, &rhored_mol_L,&(z[0]),&ierr,herr,255,255,255); - if (ierr > 0) { throw ValueError(format("%s",herr).c_str()); } //else if (ierr < 0) {set_warning(format("%s",herr).c_str());} - return static_cast(rhored_mol_L*1000); + double rhored_mol_L = 0, Tr = 0; + REDXdll(&(mole_fractions[0]), &Tr, &rhored_mol_L); + return static_cast(rhored_mol_L*1000); }; long double REFPROPMixtureBackend::calc_Ttriple(){ if (mole_fractions.size() != 1){throw ValueError("calc_Ttriple cannot be evaluated for mixtures");} diff --git a/src/Backends/REFPROP/REFPROP_lib.h b/src/Backends/REFPROP/REFPROP_lib.h index b420ba0d..49fc5786 100644 --- a/src/Backends/REFPROP/REFPROP_lib.h +++ b/src/Backends/REFPROP/REFPROP_lib.h @@ -92,6 +92,7 @@ # define QMASSdll QMASSdll # define QMOLEdll QMOLEdll # define RESIDUALdll RESIDUALdll +# define REDXdll REDXdll # define RMIX2dll RMIX2dll # define SATDdll SATDdll # define SATEdll SATEdll @@ -213,6 +214,7 @@ # define QMOLEdll qmoledll_ # define RESIDUALdll residualdll_ # define RMIX2dll rmix2dll_ +# define REDXdll redxdll_ # define SATDdll satddll_ # define SATEdll satedll_ # define SATHdll sathdll_ @@ -323,6 +325,7 @@ # define QMASSdll qmassdll_ # define QMOLEdll qmoledll_ # define RESIDUALdll residualdll_ +# define REDXdll redxdll_ # define RMIX2dll rmix2dll_ # define SATDdll satddll_ # define SATEdll satedll_ @@ -432,6 +435,7 @@ # define QMASSdll qmassdll # define QMOLEdll qmoledll # define RESIDUALdll residualdll +# define REDXdll redxdll # define RMIX2dll rmix2dll # define SATDdll satddll # define SATEdll satedll @@ -553,6 +557,7 @@ #define QMASSdll_NAME FUNCTION_NAME(QMASSdll) #define QMOLEdll_NAME FUNCTION_NAME(QMOLEdll) #define RESIDUALdll_NAME FUNCTION_NAME(RESIDUALdll) +#define REDXdll_NAME FUNCTION_NAME(REDXdll) #define RMIX2dll_NAME FUNCTION_NAME(RMIX2dll) #define SATDdll_NAME FUNCTION_NAME(SATDdll) #define SATEdll_NAME FUNCTION_NAME(SATEdll) @@ -671,6 +676,7 @@ extern "C" { typedef void (CALLCONV QMASSdll_TYPE)(double *,double *,double *,double *,double *,double *,double *,double *,long *,char*,long ); typedef void (CALLCONV QMOLEdll_TYPE)(double *,double *,double *,double *,double *,double *,double *,double *,long *,char*,long ); typedef void (CALLCONV RESIDUALdll_TYPE)(double *,double *,double *,double *,double *,double *,double *,double *,double *,double *,double *); + typedef void (CALLCONV REDXdll_TYPE)(double *,double *,double *); typedef void (CALLCONV RMIX2dll_TYPE)(double *,double *); typedef void (CALLCONV SATDdll_TYPE)(double *,double *,long *,long *,double *,double *,double *,double *,double *,double *,long *,char*,long ); typedef void (CALLCONV SATEdll_TYPE)(double *,double *,long *,long *,long *,double *,double *,double *,long *,double *,double *,double *,long *,char*,long ); @@ -884,6 +890,7 @@ extern "C" { typedef QMASSdll_TYPE * QMASSdll_POINTER; typedef QMOLEdll_TYPE * QMOLEdll_POINTER; typedef RESIDUALdll_TYPE * RESIDUALdll_POINTER; + typedef REDXdll_TYPE * REDXdll_POINTER; typedef RMIX2dll_TYPE * RMIX2dll_POINTER; typedef SATDdll_TYPE * SATDdll_POINTER; typedef SATEdll_TYPE * SATEdll_POINTER;