mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-04-23 03:00:17 -04:00
Fix code for setting REFPROP path; see #759
This commit is contained in:
@@ -73,7 +73,13 @@ Path Issues
|
||||
|
||||
In order for REFPROP to be able to be loaded by CoolProp, the default logic for each operating system is used to load the REFPROP shared library. This means that on windows, the ``PATH`` environmental variable is searched for the ``REFPROP.dll`` (32-bit applications) or ``REFPRP64.dll`` (64-bit applications). On linux/OSX, the default shared library loading protocol is used. If your REFPROP is installed in a non-standard location (not on the path), make sure that when you run code that uses REFPROP, that you add (temporarily) the location of the REFPROP shared library to your path.
|
||||
|
||||
REFPROP needs to be able to find the fluid and mixture files at runtime, at a location specified on your computer. CoolProp allows you to avoid the pains of decoding REFPROP's internal logic for finding these files by explicitly specifying the path that it should tell REFPROP to look for the fluid files. The configuration key (see :ref:`configuration`) is ``ALTERNATIVE_REFPROP_PATH``, and you can set it doing something like this in python:
|
||||
REFPROP needs to be able to find the fluid and mixture files at runtime, at a location specified on your computer. CoolProp allows you to avoid the pains of decoding REFPROP's internal logic for finding these files by explicitly specifying the path that it should tell REFPROP to look for the fluid files.
|
||||
|
||||
.. warning::
|
||||
|
||||
These configuration variables should be set at the beginning of your script and then not touched again. Otherwise, you can get some weird behavior!
|
||||
|
||||
The configuration key for setting the REFPROP path (see :ref:`configuration`) is ``ALTERNATIVE_REFPROP_PATH``, and you can set it doing something like this in python:
|
||||
|
||||
.. ipython::
|
||||
|
||||
@@ -85,7 +91,7 @@ REFPROP needs to be able to find the fluid and mixture files at runtime, at a lo
|
||||
|
||||
In [3]: jj = CP.set_config_as_json_string(json.dumps(jj))
|
||||
|
||||
If you do this, internally CoolProp will call the ``SETPATH`` function in REFPROP to tell REFPROP that it should find the ``fluids`` and ``mixtures`` within this directory. If you don't do this, CoolProp will use whatever default logic REFPROP uses to find the fluid files.
|
||||
If you do this, internally CoolProp will call the ``SETPATH`` function in REFPROP to tell REFPROP that it should find the ``fluids`` and ``mixtures`` directories within this directory. If you don't do this, CoolProp will use whatever default logic REFPROP uses to find the fluid files.
|
||||
|
||||
If you are playing around with mixture parameters, you might want to set a different path to the HMX.BNC file which contains the interaction parameters for the mixture. You can do that by changing the configuration variable (see :ref:`configuration`) ``ALTERNATIVE_REFPROP_HMX_BNC_PATH``
|
||||
|
||||
@@ -99,4 +105,4 @@ If you are playing around with mixture parameters, you might want to set a diffe
|
||||
|
||||
In [3]: jj = CP.set_config_as_json_string(json.dumps(jj))
|
||||
|
||||
If you have set both the ``ALTERNATIVE_REFPROP_PATH`` and ``ALTERNATIVE_REFPROP_HMX_BNC_PATH`` variables, ``ALTERNATIVE_REFPROP_PATH`` "wins", and this path will be used when loading mixture interaction parameters
|
||||
If you have set both the ``ALTERNATIVE_REFPROP_PATH`` and ``ALTERNATIVE_REFPROP_HMX_BNC_PATH`` variables, ``ALTERNATIVE_REFPROP_PATH_HMX_BNC_PATH`` "wins", and this path will be used when loading mixture interaction parameters
|
||||
|
||||
@@ -25,12 +25,10 @@ namespace CoolProp {
|
||||
REFPROPBackend::REFPROPBackend(const std::string & fluid_name) {
|
||||
// Do the REFPROP instantiation for this fluid
|
||||
|
||||
// Try to add this fluid to REFPROP - might want to think about making array of
|
||||
// components and setting mole fractions if they change a lot.
|
||||
std::vector<std::string> component_names(1,fluid_name);
|
||||
set_REFPROP_fluids(component_names);
|
||||
construct(component_names);
|
||||
|
||||
// Set the mole fraction to 1 in the base class (we can't set the mole fraction in this class,
|
||||
// Set the mole fraction to 1 in the base class (we can't set the mole fraction in this class,
|
||||
// otherwise a NotImplementedError will be returned)
|
||||
if (get_mole_fractions().empty()){
|
||||
std::vector<CoolPropDbl> x(1, 1.0); // (one element with value of 1.0)
|
||||
|
||||
@@ -89,16 +89,30 @@ std::string get_REFPROP_fluid_path()
|
||||
|
||||
namespace CoolProp {
|
||||
|
||||
REFPROPMixtureBackend::REFPROPMixtureBackend(const std::vector<std::string>& fluid_names) {
|
||||
|
||||
void REFPROPMixtureBackend::construct(const std::vector<std::string>& fluid_names) {
|
||||
// Do the REFPROP instantiation for this fluid
|
||||
_mole_fractions_set = false;
|
||||
|
||||
|
||||
// Force loading of REFPROP
|
||||
REFPROP_supported();
|
||||
|
||||
// Call SETPATH if the ALTERNATIVE_REFPROP_PATH configuration variable has been set
|
||||
std::string alt_rp_path = get_config_string(ALTERNATIVE_REFPROP_PATH);
|
||||
if (!alt_rp_path.empty()){
|
||||
long len = alt_rp_path.length();
|
||||
char name[255];
|
||||
strcpy(name, alt_rp_path.c_str());
|
||||
SETPATHdll(name, 255);
|
||||
}
|
||||
|
||||
// Try to add this fluid to REFPROP - might want to think about making array of
|
||||
// components and setting mole fractions if they change a lot.
|
||||
this->set_REFPROP_fluids(fluid_names);
|
||||
|
||||
|
||||
// Bump the number of REFPROP backends that are in existence;
|
||||
REFPROPMixtureBackend::instance_counter++;
|
||||
|
||||
}
|
||||
|
||||
REFPROPMixtureBackend::~REFPROPMixtureBackend() {
|
||||
@@ -220,6 +234,8 @@ void REFPROPMixtureBackend::set_REFPROP_fluids(const std::vector<std::string> &f
|
||||
strcpy(mix, components_joined_raw.c_str());
|
||||
char hmx_bnc[255] = "HMX.BNC", reference_state[4] = "DEF";
|
||||
std::string alt_hmx_bnc_path = CoolProp::get_config_string(ALTERNATIVE_REFPROP_HMX_BNC_PATH);
|
||||
if (alt_hmx_bnc_path.length() > refpropcharlength){ throw ValueError(format("ALTERNATIVE_REFPROP_HMX_BNC_PATH (%s) is too long", alt_hmx_bnc_path.c_str()));
|
||||
}
|
||||
if (!alt_hmx_bnc_path.empty()){
|
||||
strcpy(hmx_bnc, alt_hmx_bnc_path.c_str());
|
||||
}
|
||||
|
||||
@@ -40,7 +40,11 @@ public:
|
||||
|
||||
/// The instantiator
|
||||
/// @param fluid_names The vector of strings of the fluid components, without file ending
|
||||
REFPROPMixtureBackend(const std::vector<std::string>& fluid_names);
|
||||
REFPROPMixtureBackend(const std::vector<std::string>& fluid_names) {construct(fluid_names);};
|
||||
|
||||
/// A function to actually do the initalization to allow it to be called in derived classes
|
||||
void construct(const std::vector<std::string>& fluid_names);
|
||||
|
||||
std::string backend_name(void){return "REFPROPMixtureBackend";}
|
||||
virtual ~REFPROPMixtureBackend();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user