From dbf729af17d41c269ea7538b8a60b7b4b18fd45a Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Fri, 21 Apr 2017 00:32:49 -0600 Subject: [PATCH] Roll back somewhat to get compilation to work for MSVC2008 --- include/AbstractState.h | 4 +- src/AbstractState.cpp | 50 +++++++++++++++++++ src/Backends/Cubics/CubicBackend.cpp | 17 ------- src/Backends/Cubics/VTPRBackend.cpp | 9 ---- .../Helmholtz/HelmholtzEOSMixtureBackend.cpp | 2 +- src/Backends/IF97/IF97Backend.cpp | 11 +--- .../Incompressible/IncompressibleBackend.cpp | 10 ---- .../REFPROP/REFPROPMixtureBackend.cpp | 3 +- 8 files changed, 55 insertions(+), 51 deletions(-) diff --git a/include/AbstractState.h b/include/AbstractState.h index 7c9779d8..6b8bdc15 100644 --- a/include/AbstractState.h +++ b/include/AbstractState.h @@ -1151,10 +1151,10 @@ public: */ void register_backend(const backend_families &bf, shared_ptr gen); -template +template class GeneratorInitializer{ public: - GeneratorInitializer(){ + GeneratorInitializer(backend_families bf){ register_backend(bf, shared_ptr(new T())); }; }; diff --git a/src/AbstractState.cpp b/src/AbstractState.cpp index 48c4fda6..f35397d8 100644 --- a/src/AbstractState.cpp +++ b/src/AbstractState.cpp @@ -13,6 +13,10 @@ #include "math.h" #include "AbstractState.h" #include "DataStructures.h" +#include "Backends/IF97/IF97Backend.h" +#include "Backends/Cubics/CubicBackend.h" +#include "Backends/Cubics/VTPRBackend.h" +#include "Backends/Incompressible/IncompressibleBackend.h" #if !defined(NO_TABULAR_BACKENDS) #include "Backends/Tabular/TTSEBackend.h" @@ -37,6 +41,7 @@ public: generator = backends.find(bg); end = backends.end(); }; + std::size_t size(){ return backends.size(); }; }; static BackendLibrary backend_library; @@ -44,6 +49,47 @@ void register_backend(const backend_families &bf, shared_ptr &fluid_names){ + return new IF97Backend(); + }; +} ; +// This static initialization will cause the generator to register +static GeneratorInitializer if97_gen(IF97_BACKEND_FAMILY); +class SRKGenerator : public AbstractStateGenerator{ +public: + AbstractState * get_AbstractState(const std::vector &fluid_names){ + return new SRKBackend(fluid_names, get_config_double(R_U_CODATA)); + }; +}; +static GeneratorInitializer srk_gen(CoolProp::SRK_BACKEND_FAMILY); +class PRGenerator : public AbstractStateGenerator{ +public: + AbstractState * get_AbstractState(const std::vector &fluid_names){ + return new PengRobinsonBackend(fluid_names, get_config_double(R_U_CODATA)); + }; +}; +static GeneratorInitializer pr_gen(CoolProp::PR_BACKEND_FAMILY); +class IncompressibleBackendGenerator : public AbstractStateGenerator{ +public: + AbstractState * get_AbstractState(const std::vector &fluid_names){ + if (fluid_names.size() != 1){throw ValueError(format("For INCOMP backend, name vector must be one element long"));} + return new IncompressibleBackend(fluid_names[0]); + }; +}; +// This static initialization will cause the generator to register +static GeneratorInitializer incomp_gen(INCOMP_BACKEND_FAMILY); +class VTPRGenerator : public CoolProp::AbstractStateGenerator{ +public: + CoolProp::AbstractState * get_AbstractState(const std::vector &fluid_names){ + return new CoolProp::VTPRBackend(fluid_names, CoolProp::get_config_double(R_U_CODATA)); + }; +} ; +// This static initialization will cause the generator to register +static CoolProp::GeneratorInitializer vtpr_gen(CoolProp::VTPR_BACKEND_FAMILY); + + AbstractState * AbstractState::factory(const std::string &backend, const std::vector &fluid_names) { if (get_debug_level() > 0){ @@ -56,6 +102,10 @@ AbstractState * AbstractState::factory(const std::string &backend, const std::ve std::map >::const_iterator gen, end; backend_library.get_generator_iterators(f1, gen, end); + + if (get_debug_level() > 0){ + std::cout << "AbstractState::factory backend_library size: " << backend_library.size() << std::endl; + } if (gen != end){ // One of the registered backends was able to match the given backend family diff --git a/src/Backends/Cubics/CubicBackend.cpp b/src/Backends/Cubics/CubicBackend.cpp index 6362f88d..aff60327 100644 --- a/src/Backends/Cubics/CubicBackend.cpp +++ b/src/Backends/Cubics/CubicBackend.cpp @@ -3,23 +3,6 @@ #include "Configuration.h" #include "Backends/Helmholtz/VLERoutines.h" -class SRKGenerator : public CoolProp::AbstractStateGenerator{ -public: - CoolProp::AbstractState * get_AbstractState(const std::vector &fluid_names){ - return new CoolProp::SRKBackend(fluid_names, CoolProp::get_config_double(R_U_CODATA)); - }; -}; -static CoolProp::GeneratorInitializer srk_gen; - -class PRGenerator : public CoolProp::AbstractStateGenerator{ -public: - CoolProp::AbstractState * get_AbstractState(const std::vector &fluid_names){ - return new CoolProp::PengRobinsonBackend(fluid_names, CoolProp::get_config_double(R_U_CODATA)); - }; -}; -static CoolProp::GeneratorInitializer pr_gen; - - void CoolProp::AbstractCubicBackend::setup(bool generate_SatL_and_SatV){ N = cubic->get_Tc().size(); diff --git a/src/Backends/Cubics/VTPRBackend.cpp b/src/Backends/Cubics/VTPRBackend.cpp index 5ce835d0..7b6df22a 100644 --- a/src/Backends/Cubics/VTPRBackend.cpp +++ b/src/Backends/Cubics/VTPRBackend.cpp @@ -11,15 +11,6 @@ static UNIFACLibrary::UNIFACParameterLibrary lib; -class VTPRGenerator : public CoolProp::AbstractStateGenerator{ -public: - CoolProp::AbstractState * get_AbstractState(const std::vector &fluid_names){ - return new CoolProp::VTPRBackend(fluid_names, CoolProp::get_config_double(R_U_CODATA)); - }; -} ; -// This static initialization will cause the generator to register -static CoolProp::GeneratorInitializer vtpr_gen; - void CoolProp::VTPRBackend::setup(const std::vector &names, bool generate_SatL_and_SatV){ R = get_config_double(R_U_CODATA); diff --git a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp index 4d24fb18..979a037f 100644 --- a/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp +++ b/src/Backends/Helmholtz/HelmholtzEOSMixtureBackend.cpp @@ -53,7 +53,7 @@ public: }; }; // This static initialization will cause the generator to register -static CoolProp::GeneratorInitializer heos_gen; +static CoolProp::GeneratorInitializer heos_gen(CoolProp::HEOS_BACKEND_FAMILY); HelmholtzEOSMixtureBackend::HelmholtzEOSMixtureBackend(){ imposed_phase_index = iphase_not_imposed; diff --git a/src/Backends/IF97/IF97Backend.cpp b/src/Backends/IF97/IF97Backend.cpp index 71491ed8..1cac79b9 100644 --- a/src/Backends/IF97/IF97Backend.cpp +++ b/src/Backends/IF97/IF97Backend.cpp @@ -2,13 +2,4 @@ #include "IF97Backend.h" #include "AbstractState.h" -#include "DataStructures.h" - -class IF97BackendGenerator : public CoolProp::AbstractStateGenerator{ -public: - CoolProp::AbstractState * get_AbstractState(const std::vector &fluid_names){ - return new CoolProp::IF97Backend(); - }; -} ; -// This static initialization will cause the generator to register -static CoolProp::GeneratorInitializer if97_gen; \ No newline at end of file +#include "DataStructures.h" \ No newline at end of file diff --git a/src/Backends/Incompressible/IncompressibleBackend.cpp b/src/Backends/Incompressible/IncompressibleBackend.cpp index 1fdbc9a0..d63bbb68 100644 --- a/src/Backends/Incompressible/IncompressibleBackend.cpp +++ b/src/Backends/Incompressible/IncompressibleBackend.cpp @@ -21,16 +21,6 @@ #include "MatrixMath.h" namespace CoolProp { - -class IncompressibleBackendGenerator : public AbstractStateGenerator{ -public: - AbstractState * get_AbstractState(const std::vector &fluid_names){ - if (fluid_names.size() != 1){throw ValueError(format("For INCOMP backend, name vector must be one element long"));} - return new IncompressibleBackend(fluid_names[0]); - }; -}; -// This static initialization will cause the generator to register -static GeneratorInitializer incomp_gen; IncompressibleBackend::IncompressibleBackend() { throw NotImplementedError("Empty constructor is not implemented for incompressible fluids"); diff --git a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp index 13a2d4a6..7ef7b6f6 100644 --- a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp +++ b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp @@ -144,8 +144,7 @@ public: }; }; // This static initialization will cause the generator to register -static GeneratorInitializer refprop_gen; - +static GeneratorInitializer refprop_gen(REFPROP_BACKEND_FAMILY); void REFPROPMixtureBackend::construct(const std::vector& fluid_names) { // Do the REFPROP instantiation for this fluid