Skip to content

Commit 80a6d8e

Browse files
committed
Add solar_field_des_factor and apply to q_design
Introduce a new input variable `solar_field_des_factor` (default 1) to allow scaling of the solar field design capacity. The code now multiplies `q_dot_rec_des` by this factor and assigns it to `q_design` (SolarPILOT design capacity). Redundant later assignments of `q_design` were removed. This enables adjusting the solar field design point without modifying the receiver design heat input directly.
1 parent 8e42ab0 commit 80a6d8e

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

ssc/cmod_csp_tower_particle.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ static var_info _cm_vtab_csp_tower_particle[] = {
118118
{ SSC_INPUT, SSC_NUMBER, "washing_frequency", "Mirror washing frequency", "none", "", "Heliostat Field", "*", "", ""},
119119
{ SSC_INPUT, SSC_NUMBER, "check_max_flux", "Check max flux at design point", "", "", "Heliostat Field", "?=0", "", ""},
120120
{ SSC_INPUT, SSC_NUMBER, "sun_loc_des", "Sun location at design point (0 = Summer solstice, 1 = Equinox, 2 = Winter solstice)", "", "", "Heliostat Field", "?=0", "", ""},
121+
{ SSC_INPUT, SSC_NUMBER, "solar_field_des_factor", "Solar field design factor", "", "", "Heliostat Field", "?=1", "", "" },
122+
121123

122124
// Inputs required for user-defined SF performance when field_model_type = 4
123125
// Values can be defined by mapping to equivalent _calc output for simulation results with field_model_type < 3
@@ -404,6 +406,7 @@ static var_info _cm_vtab_csp_tower_particle[] = {
404406
{ SSC_OUTPUT, SSC_NUMBER, "total_land_area_calc", "Total land area - out", "acre", "", "Heliostat Field", "*", "", ""},
405407
{ SSC_OUTPUT, SSC_NUMBER, "W_dot_col_tracking_des", "Collector tracking power at design", "MWe", "", "Heliostat Field", "*", "", ""},
406408

409+
407410
// Receiver Geometry
408411
{ SSC_OUTPUT, SSC_ARRAY, "rec_height_calc", "Receiver height - out", "m", "", "Tower and Receiver", "*", "", ""},
409412
{ SSC_OUTPUT, SSC_ARRAY, "rec_width_calc", "Receiver width - out", "m", "", "Tower and Receiver", "*", "", ""},
@@ -946,13 +949,14 @@ class cm_csp_tower_particle : public compute_module
946949
refl_image_error = std::sqrt(2. * helio_optical_error_mrad * 2. * helio_optical_error_mrad * 2.); //[mrad]
947950
assign("refl_image_error", refl_image_error); //[mrad]
948951
assign("helio_optical_error", (ssc_number_t)(helio_optical_error_mrad * 1.E-3));
952+
double solar_field_des_factor = as_number("solar_field_des_factor");
953+
assign("q_design", q_dot_rec_des * solar_field_des_factor); //[MWt]
949954

950955
if (field_model_type < 4) {
951956
// Field types 0-3 Requires solarPILOT
952957
if (field_model_type == 0 && sim_type == 1) {
953958
// Run heliostat field / receiver optimization first
954959
solarpilot_invoke spi_opt(this);
955-
assign("q_design", q_dot_rec_des); //[MWt]
956960

957961
// Optimize design field and tower/receiver geometry without flux_map calculations
958962
assign("is_optimize", 1);
@@ -1008,7 +1012,6 @@ class cm_csp_tower_particle : public compute_module
10081012
}
10091013

10101014
solarpilot_invoke spi(this);
1011-
assign("q_design", q_dot_rec_des); //[MWt]
10121015

10131016
// TODO: Check 'n_flux_x' and 'n_flux_y'?
10141017
// - n_flux_y must be greater than the number of troughs in the curtain

0 commit comments

Comments
 (0)