From db045feec55ae7daede5c468be0c87ed3b6e269e Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 00:56:05 -0600 Subject: [PATCH 1/6] Remove sf_adjustment_factors class and use adjustment_factors class for sf_adjustment --- ssc/cmod_tcsgeneric_solar.cpp | 2 +- ssc/cmod_tcsmolten_salt.cpp | 2 +- ssc/common.cpp | 67 +++-------------------------------- ssc/common.h | 16 +-------- 4 files changed, 8 insertions(+), 79 deletions(-) diff --git a/ssc/cmod_tcsgeneric_solar.cpp b/ssc/cmod_tcsgeneric_solar.cpp index 42c46d97b..008b8f21d 100644 --- a/ssc/cmod_tcsgeneric_solar.cpp +++ b/ssc/cmod_tcsgeneric_solar.cpp @@ -377,7 +377,7 @@ class cm_tcsgeneric_solar : public tcKernel size_t hours = 8760; //Load the solar field adjustment factors - sf_adjustment_factors sf_haf(this); + adjustment_factors sf_haf(this, "sf_adjust"); if (!sf_haf.setup(hours)) throw exec_error("tcsgeneric_solar", "failed to setup sf adjustment factors: " + sf_haf.error()); //allocate array to pass to tcs diff --git a/ssc/cmod_tcsmolten_salt.cpp b/ssc/cmod_tcsmolten_salt.cpp index 5aa92c765..81e6d8c41 100644 --- a/ssc/cmod_tcsmolten_salt.cpp +++ b/ssc/cmod_tcsmolten_salt.cpp @@ -1755,7 +1755,7 @@ class cm_tcsmolten_salt : public compute_module heliostatfield.ms_params.mv_clearsky_data = clearsky_data; //Load the solar field adjustment factors - sf_adjustment_factors sf_haf(this); + adjustment_factors sf_haf(this, "sf_adjust"); if (!sf_haf.setup((int)n_steps_full)) throw exec_error("tcsmolten_salt", "failed to setup sf adjustment factors: " + sf_haf.error()); //allocate array to pass to tcs diff --git a/ssc/common.cpp b/ssc/common.cpp index 97aefbfc1..3ad52610f 100644 --- a/ssc/common.cpp +++ b/ssc/common.cpp @@ -1125,72 +1125,17 @@ ssc_number_t adjustment_factors::operator()( size_t time ) else return 0.0; } -sf_adjustment_factors::sf_adjustment_factors(compute_module *cm) -: m_cm(cm) +size_t adjustment_factors::size() { + return m_factors.size(); } -bool sf_adjustment_factors::setup(int nsteps) -{ - ssc_number_t f = m_cm->as_number("sf_adjust:constant"); - f = 1.0 - f / 100.0; //convert from percentage to factor - m_factors.resize(nsteps, f); - - if (m_cm->is_assigned("sf_adjust:hourly")) - { - size_t n; - ssc_number_t *p = m_cm->as_array("sf_adjust:hourly", &n); - if (p != 0 && n == (size_t)nsteps) - { - for (int i = 0; i < nsteps; i++) - m_factors[i] *= (1.0 - p[i] / 100.0); //convert from percentages to factors - } - if (n!=(size_t)nsteps) - m_error = util::format("array length (%d) must match number of yearly simulation time steps (%d).", n, nsteps); - } - - if (m_cm->is_assigned("sf_adjust:periods")) - { - size_t nr, nc; - ssc_number_t *mat = m_cm->as_matrix("sf_adjust:periods", &nr, &nc); - if (mat != 0 && nc == 3) - { - for (size_t r = 0; r= nsteps || end < start) - { - m_error = util::format("period %d is invalid ( start: %d, end %d )", (int)r, start, end); - continue; - } - - if (end >= nsteps) end = nsteps-1; - - for (int i = start; i <= end; i++) - m_factors[i] *= (1 - factor / 100); //convert from percentages to factors - } - } - } - - return m_error.length() == 0; -} - -ssc_number_t sf_adjustment_factors::operator()(size_t time) -{ - if (time < m_factors.size()) return m_factors[time]; - else return 0.0; -} - -int sf_adjustment_factors::size() -{ - return (int)m_factors.size(); -} shading_factor_calculator::shading_factor_calculator() { + m_steps_per_hour = 1; + m_string_option = -1; + m_enTimestep = false; m_enAzAlt = false; m_enMxH = false; m_diffFactor = 1.0; @@ -1198,8 +1143,6 @@ shading_factor_calculator::shading_factor_calculator() m_dc_shade_factor = 1.0; } - - bool shading_factor_calculator::setup( compute_module *cm, const std::string &prefix ) { bool ok = true; diff --git a/ssc/common.h b/ssc/common.h index 3d7d2f9f5..3b62ff7c2 100644 --- a/ssc/common.h +++ b/ssc/common.h @@ -84,6 +84,7 @@ class adjustment_factors adjustment_factors(compute_module *cm, const std::string &prefix); bool setup(int nsteps=8760, int analysis_period=1); ssc_number_t operator()(size_t time); + size_t adjustment_factors::size(); std::string error() { return m_error; } }; @@ -100,21 +101,6 @@ class forecast_price_signal std::string error() { return m_error; } }; - -class sf_adjustment_factors -{ - compute_module *m_cm; - std::vector m_factors; - std::string m_error; -public: - sf_adjustment_factors(compute_module *cm); - bool setup(int nsteps=8760); - int size(); - ssc_number_t operator()(size_t time); - std::string error() { return m_error; } -}; - - class shading_factor_calculator { std::vector m_errors; From 86513a89b9ae20a165035f220734626e9d6ce71d Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 01:09:06 -0600 Subject: [PATCH 2/6] Remove unused callbacks causing Github Actions to fail --- tcs/CMakeLists.txt | 2 -- tcs/fmin_callbacks.cpp | 9 --------- tcs/fmin_callbacks.h | 8 -------- tcs/nlopt_callbacks.cpp | 15 --------------- tcs/nlopt_callbacks.h | 11 ----------- 5 files changed, 45 deletions(-) delete mode 100644 tcs/fmin_callbacks.cpp delete mode 100644 tcs/fmin_callbacks.h delete mode 100644 tcs/nlopt_callbacks.cpp delete mode 100644 tcs/nlopt_callbacks.h diff --git a/tcs/CMakeLists.txt b/tcs/CMakeLists.txt index fc2b9e8d7..384e61603 100644 --- a/tcs/CMakeLists.txt +++ b/tcs/CMakeLists.txt @@ -41,11 +41,9 @@ set(TCS_SRC dispatch_builder.cpp etes_dispatch.cpp fmin.cpp - fmin_callbacks.cpp heat_exchangers.cpp Heliostat_AzElAod.cpp interconnect.cpp - nlopt_callbacks.cpp numeric_solvers.cpp ptes_solver_design_point.cpp sam_type250_input_generator.cpp diff --git a/tcs/fmin_callbacks.cpp b/tcs/fmin_callbacks.cpp deleted file mode 100644 index c9eee871a..000000000 --- a/tcs/fmin_callbacks.cpp +++ /dev/null @@ -1,9 +0,0 @@ -//#include "fmin_callbacks.h" -//#include "sco2_power_cycle.h" -// -//double fmin_callback_opt_eta(double x, void *data) -//{ -// RecompCycle *frame = static_cast(data); -// -// return frame->opt_eta(x); -//} diff --git a/tcs/fmin_callbacks.h b/tcs/fmin_callbacks.h deleted file mode 100644 index 42bea4043..000000000 --- a/tcs/fmin_callbacks.h +++ /dev/null @@ -1,8 +0,0 @@ -//#ifndef __FMIN_CB_ -//#define __FMIN_CB_ -// -//double fmin_callback_test(double x, void *data); -// -//double fmin_callback_opt_eta(double x, void *data); -// -//#endif \ No newline at end of file diff --git a/tcs/nlopt_callbacks.cpp b/tcs/nlopt_callbacks.cpp deleted file mode 100644 index 6dd38d1f0..000000000 --- a/tcs/nlopt_callbacks.cpp +++ /dev/null @@ -1,15 +0,0 @@ -//#include "nlopt_callbacks.h" -//#include "sco2_power_cycle.h" -// -//double nlopt_callback_opt_des(const std::vector &x, std::vector &grad, void *data) -//{ -// RecompCycle *frame = static_cast(data); -// if( frame != NULL ) return frame->design_point_eta(x); -//} -// -//double nlopt_callback_opt_off_des(const std::vector &x, std::vector &grad, void *data) -//{ -// RecompCycle *frame = static_cast(data); -// if( frame != NULL) return frame->off_design_target_power_function(x); -//} - diff --git a/tcs/nlopt_callbacks.h b/tcs/nlopt_callbacks.h deleted file mode 100644 index af03684b3..000000000 --- a/tcs/nlopt_callbacks.h +++ /dev/null @@ -1,11 +0,0 @@ -//#ifndef __NLOPT_CB_ -//#define __NLOPT_CB_ -// -// -//#include -// -//double nlopt_callback_opt_des(const std::vector &x, std::vector &grad, void *data); -// -//double nlopt_callback_opt_off_des(const std::vector &x, std::vector &grad, void *data); -// -//#endif \ No newline at end of file From 9076bdf47ce81bdd36cdcd7fd770c21733ce1380 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 01:16:15 -0600 Subject: [PATCH 3/6] Update CMakeLists.txt to skip removed include files for Github Actions --- tcs/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/tcs/CMakeLists.txt b/tcs/CMakeLists.txt index 384e61603..9fec0e37e 100644 --- a/tcs/CMakeLists.txt +++ b/tcs/CMakeLists.txt @@ -131,13 +131,11 @@ set(TCS_SRC etes_dispatch.h flat_plate_solar_collector.h fmin.h - fmin_callbacks.h heat_exchangers.h htf_props.h interconnect.h interpolation_routines.h ngcc_powerblock.h - nlopt_callbacks.h numeric_solvers.h ptes_solver_design_point.h sam_csp_util.h From e6c618ad26ae869fb58620768fcbac5487731e69 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 01:49:30 -0600 Subject: [PATCH 4/6] Restore commented out files --- tcs/fmin_callbacks.cpp | 9 +++++++++ tcs/fmin_callbacks.h | 8 ++++++++ tcs/nlopt_callbacks.cpp | 15 +++++++++++++++ tcs/nlopt_callbacks.h | 11 +++++++++++ 4 files changed, 43 insertions(+) create mode 100644 tcs/fmin_callbacks.cpp create mode 100644 tcs/fmin_callbacks.h create mode 100644 tcs/nlopt_callbacks.cpp create mode 100644 tcs/nlopt_callbacks.h diff --git a/tcs/fmin_callbacks.cpp b/tcs/fmin_callbacks.cpp new file mode 100644 index 000000000..c9eee871a --- /dev/null +++ b/tcs/fmin_callbacks.cpp @@ -0,0 +1,9 @@ +//#include "fmin_callbacks.h" +//#include "sco2_power_cycle.h" +// +//double fmin_callback_opt_eta(double x, void *data) +//{ +// RecompCycle *frame = static_cast(data); +// +// return frame->opt_eta(x); +//} diff --git a/tcs/fmin_callbacks.h b/tcs/fmin_callbacks.h new file mode 100644 index 000000000..42bea4043 --- /dev/null +++ b/tcs/fmin_callbacks.h @@ -0,0 +1,8 @@ +//#ifndef __FMIN_CB_ +//#define __FMIN_CB_ +// +//double fmin_callback_test(double x, void *data); +// +//double fmin_callback_opt_eta(double x, void *data); +// +//#endif \ No newline at end of file diff --git a/tcs/nlopt_callbacks.cpp b/tcs/nlopt_callbacks.cpp new file mode 100644 index 000000000..6dd38d1f0 --- /dev/null +++ b/tcs/nlopt_callbacks.cpp @@ -0,0 +1,15 @@ +//#include "nlopt_callbacks.h" +//#include "sco2_power_cycle.h" +// +//double nlopt_callback_opt_des(const std::vector &x, std::vector &grad, void *data) +//{ +// RecompCycle *frame = static_cast(data); +// if( frame != NULL ) return frame->design_point_eta(x); +//} +// +//double nlopt_callback_opt_off_des(const std::vector &x, std::vector &grad, void *data) +//{ +// RecompCycle *frame = static_cast(data); +// if( frame != NULL) return frame->off_design_target_power_function(x); +//} + diff --git a/tcs/nlopt_callbacks.h b/tcs/nlopt_callbacks.h new file mode 100644 index 000000000..af03684b3 --- /dev/null +++ b/tcs/nlopt_callbacks.h @@ -0,0 +1,11 @@ +//#ifndef __NLOPT_CB_ +//#define __NLOPT_CB_ +// +// +//#include +// +//double nlopt_callback_opt_des(const std::vector &x, std::vector &grad, void *data); +// +//double nlopt_callback_opt_off_des(const std::vector &x, std::vector &grad, void *data); +// +//#endif \ No newline at end of file From 255a327e956485e117d58016e4fbd2cc8ef92881 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 01:58:01 -0600 Subject: [PATCH 5/6] Restore all per patch and build locally on Linux --- tcs/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tcs/CMakeLists.txt b/tcs/CMakeLists.txt index 9fec0e37e..fc2b9e8d7 100644 --- a/tcs/CMakeLists.txt +++ b/tcs/CMakeLists.txt @@ -41,9 +41,11 @@ set(TCS_SRC dispatch_builder.cpp etes_dispatch.cpp fmin.cpp + fmin_callbacks.cpp heat_exchangers.cpp Heliostat_AzElAod.cpp interconnect.cpp + nlopt_callbacks.cpp numeric_solvers.cpp ptes_solver_design_point.cpp sam_type250_input_generator.cpp @@ -131,11 +133,13 @@ set(TCS_SRC etes_dispatch.h flat_plate_solar_collector.h fmin.h + fmin_callbacks.h heat_exchangers.h htf_props.h interconnect.h interpolation_routines.h ngcc_powerblock.h + nlopt_callbacks.h numeric_solvers.h ptes_solver_design_point.h sam_csp_util.h From 6ed193e16996ed35514e6e783675125e8b91b617 Mon Sep 17 00:00:00 2001 From: Steven Janzou Date: Thu, 25 May 2023 02:21:59 -0600 Subject: [PATCH 6/6] Remove extra qualification on size() function causing platforms other than Windows to fail Note - no error message in Github Actions log.... --- ssc/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssc/common.h b/ssc/common.h index 3b62ff7c2..92a166cbe 100644 --- a/ssc/common.h +++ b/ssc/common.h @@ -84,7 +84,7 @@ class adjustment_factors adjustment_factors(compute_module *cm, const std::string &prefix); bool setup(int nsteps=8760, int analysis_period=1); ssc_number_t operator()(size_t time); - size_t adjustment_factors::size(); + size_t size(); std::string error() { return m_error; } };