1
1
/* *
2
2
BSD-3-Clause
3
3
Copyright 2019 Alliance for Sustainable Energy, LLC
4
- Redistribution and use in source and binary forms, with or without modification, are permitted provided
4
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided
5
5
that the following conditions are met :
6
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions
7
7
and the following disclaimer.
8
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
8
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
9
9
and the following disclaimer in the documentation and/or other materials provided with the distribution.
10
- 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse
10
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse
11
11
or promote products derived from this software without specific prior written permission.
12
12
13
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
14
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
- ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER, CONTRIBUTORS, UNITED STATES GOVERNMENT OR UNITED STATES
16
- DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
17
- OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
19
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
14
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
+ ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER, CONTRIBUTORS, UNITED STATES GOVERNMENT OR UNITED STATES
16
+ DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
17
+ OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
19
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
20
20
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
21
21
*/
22
22
@@ -38,8 +38,8 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
38
38
39
39
40
40
// TOU
41
- { SSC_INPUT, SSC_MATRIX, " weekday_schedule" , " 12x24 Time of Use Values for week days" , " " , " " , " tou_translator" , " *" , " " , " " },
42
- { SSC_INPUT, SSC_MATRIX, " weekend_schedule" , " 12x24 Time of Use Values for week end days" , " " , " " , " tou_translator" , " *" , " " , " " },
41
+ { SSC_INPUT, SSC_MATRIX, " weekday_schedule" , " 12x24 Time of Use Values for week days" , " " , " " , " tou_translator" , " *" , " " , " " },
42
+ { SSC_INPUT, SSC_MATRIX, " weekend_schedule" , " 12x24 Time of Use Values for week end days" , " " , " " , " tou_translator" , " *" , " " , " " },
43
43
44
44
// Generic solar model (type 260) inputs
45
45
// VARTYPE DATATYPE NAME LABEL UNITS META GROUP REQUIRED_IF CONSTRAINTS UI_HINTS
@@ -59,7 +59,7 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
59
59
{ SSC_INPUT, SSC_ARRAY, " sfhlQ_coefs" , " Irr-based solar field thermal loss adjustment coefficients" , " 1/MWt" , " " , " type_260" , " *" , " " , " " },
60
60
{ SSC_INPUT, SSC_ARRAY, " sfhlT_coefs" , " Temp.-based solar field thermal loss adjustment coefficients" , " 1/C" , " " , " type_260" , " *" , " " , " " },
61
61
{ SSC_INPUT, SSC_ARRAY, " sfhlV_coefs" , " Wind-based solar field thermal loss adjustment coefficients" , " 1/(m/s)" , " " , " type_260" , " *" , " " , " " },
62
-
62
+
63
63
{ SSC_INPUT, SSC_NUMBER, " qsf_des" , " Solar field thermal production at design" , " MWt" , " " , " type_260" , " *" , " " , " " },
64
64
{ SSC_INPUT, SSC_NUMBER, " w_des" , " Design power cycle gross output" , " MWe" , " " , " type_260" , " *" , " " , " " },
65
65
{ SSC_INPUT, SSC_NUMBER, " eta_des" , " Design power cycle gross efficiency" , " none" , " " , " type_260" , " *" , " " , " " },
@@ -76,7 +76,7 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
76
76
{ SSC_INPUT, SSC_ARRAY, " Wpar_prodQ_coefs" , " Part-load production parasitic adjustment coefs." , " 1/MWe" , " " , " type_260" , " *" , " " , " " },
77
77
{ SSC_INPUT, SSC_ARRAY, " Wpar_prodT_coefs" , " Temp.-based production parasitic adjustment coefs." , " 1/C" , " " , " type_260" , " *" , " " , " " },
78
78
{ SSC_INPUT, SSC_ARRAY, " Wpar_prodD_coefs" , " DNI-based production parasitic adjustment coefs." , " m2/W" , " " , " type_260" , " *" , " " , " " },
79
-
79
+
80
80
{ SSC_INPUT, SSC_NUMBER, " hrs_tes" , " Equivalent full-load hours of storage" , " hours" , " " , " type_260" , " *" , " " , " " },
81
81
{ SSC_INPUT, SSC_NUMBER, " f_charge" , " Storage charging energy derate" , " none" , " " , " type_260" , " *" , " " , " " },
82
82
{ SSC_INPUT, SSC_NUMBER, " f_disch" , " Storage discharging energy derate" , " none" , " " , " type_260" , " *" , " " , " " },
@@ -114,15 +114,15 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
114
114
{ SSC_OUTPUT, SSC_ARRAY, " solazi" , " Resource Solar Azimuth" , " deg" , " " , " weather" , " *" , " LENGTH=8760" , " " },
115
115
{ SSC_OUTPUT, SSC_ARRAY, " solzen" , " Resource Solar Zenith" , " deg" , " " , " weather" , " *" , " LENGTH=8760" , " " },
116
116
{ SSC_OUTPUT, SSC_ARRAY, " beam" , " Resource Beam normal irradiance" , " W/m2" , " " , " weather" , " *" , " LENGTH=8760" , " " },
117
- { SSC_OUTPUT, SSC_ARRAY, " global " , " Resource Global horizontal irradiance" , " W/m2" , " " , " weather" , " *" , " LENGTH=8760" , " " },
117
+ { SSC_OUTPUT, SSC_ARRAY, " glob " , " Resource Global horizontal irradiance" , " W/m2" , " " , " weather" , " *" , " LENGTH=8760" , " " },
118
118
{ SSC_OUTPUT, SSC_ARRAY, " diff" , " Resource Diffuse horizontal irradiance" , " W/m2" , " " , " weather" , " *" , " LENGTH=8760" , " " },
119
119
{ SSC_OUTPUT, SSC_ARRAY, " tdry" , " Resource Dry bulb temperature" , " C" , " " , " weather" , " *" , " LENGTH=8760" , " " },
120
120
{ SSC_OUTPUT, SSC_ARRAY, " twet" , " Resource Wet bulb temperature" , " C" , " " , " weather" , " *" , " LENGTH=8760" , " " },
121
121
{ SSC_OUTPUT, SSC_ARRAY, " wspd" , " Resource Wind Speed" , " m/s" , " " , " weather" , " *" , " LENGTH=8760" , " " },
122
122
{ SSC_OUTPUT, SSC_ARRAY, " pres" , " Resource Pressure" , " mbar" , " " , " weather" , " *" , " LENGTH=8760" , " " },
123
123
124
124
// { SSC_OUTPUT, SSC_ARRAY, "irr_used", "Irradiation value used in simulation", "W/m2", "", "Outputs", "*", "LENGTH=8760", "" },
125
-
125
+
126
126
// solar field
127
127
{ SSC_OUTPUT, SSC_ARRAY, " eta_opt_sf" , " Field collector optical efficiency" , " none" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
128
128
{ SSC_OUTPUT, SSC_ARRAY, " q_inc" , " Field thermal power incident" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
@@ -131,23 +131,23 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
131
131
{ SSC_OUTPUT, SSC_ARRAY, " f_sfhl_vwind" , " Field thermal power wind-based loss correction" , " none" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
132
132
{ SSC_OUTPUT, SSC_ARRAY, " q_hl_sf" , " Field thermal power loss total" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
133
133
{ SSC_OUTPUT, SSC_ARRAY, " q_sf" , " Field thermal power total produced" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
134
-
134
+
135
135
// thermal storage
136
136
{ SSC_OUTPUT, SSC_ARRAY, " q_to_tes" , " TES thermal energy into storage" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
137
137
{ SSC_OUTPUT, SSC_ARRAY, " q_from_tes" , " TES thermal energy from storage" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
138
138
{ SSC_OUTPUT, SSC_ARRAY, " e_in_tes" , " TES thermal energy available" , " MWht" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
139
139
{ SSC_OUTPUT, SSC_ARRAY, " q_hl_tes" , " TES thermal losses from tank(s)" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
140
-
140
+
141
141
// power block
142
142
{ SSC_OUTPUT, SSC_ARRAY, " eta_cycle" , " Cycle efficiency (gross)" , " " , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
143
143
{ SSC_OUTPUT, SSC_ARRAY, " f_effpc_qtpb" , " Cycle efficiency load-based correction" , " " , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
144
144
{ SSC_OUTPUT, SSC_ARRAY, " f_effpc_tamb" , " Cycle efficiency temperature-based correction" , " " , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
145
-
145
+
146
146
{ SSC_OUTPUT, SSC_ARRAY, " enet" , " Cycle electrical power output (net)" , " MWe" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
147
147
{ SSC_OUTPUT, SSC_ARRAY, " w_gr" , " Cycle electrical power output (gross)" , " MWe" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
148
148
{ SSC_OUTPUT, SSC_ARRAY, " w_gr_solar" , " Cycle electrical power output (gross, solar share)" , " MWe" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
149
149
{ SSC_OUTPUT, SSC_ARRAY, " w_gr_fossil" , " Cycle electrical power output (gross, fossil share)" , " MWe" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
150
-
150
+
151
151
{ SSC_OUTPUT, SSC_ARRAY, " q_to_pb" , " Cycle thermal power input" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
152
152
{ SSC_OUTPUT, SSC_ARRAY, " q_startup" , " Cycle thermal startup energy" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
153
153
{ SSC_OUTPUT, SSC_ARRAY, " q_dump_tesfull" , " Cycle thermal energy dumped - TES is full" , " MWt" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
@@ -165,7 +165,7 @@ static var_info _cm_vtab_tcsgeneric_solar[] = {
165
165
{ SSC_OUTPUT, SSC_ARRAY, " w_par_tot" , " Total parasitic losses" , " MWh" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
166
166
{ SSC_OUTPUT, SSC_ARRAY, " w_par_online" , " Online parasitics" , " MWh" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
167
167
{ SSC_OUTPUT, SSC_ARRAY, " w_par_offline" , " Offline parasitics" , " MWh" , " " , " Outputs" , " *" , " LENGTH=8760" , " " },
168
-
168
+
169
169
// { SSC_OUTPUT, SSC_ARRAY, "hourly_energy", "Hourly Energy", "kWh", "", "Outputs", "*", "LENGTH=8760", "" },
170
170
171
171
// monthly outputs
@@ -238,7 +238,7 @@ class cm_tcsgeneric_solar : public tcKernel
238
238
int weather = 0 ;
239
239
if (debug_mode) weather = add_unit (" trnsys_weatherreader" , " TRNSYS weather reader" );
240
240
else weather = add_unit (" weatherreader" , " TCS weather reader" );
241
-
241
+
242
242
// Add time-of-use reader
243
243
int tou = add_unit (" tou_translator" , " Time of Use Translator" );
244
244
// Add Physical Solar Field Model
@@ -343,7 +343,7 @@ class cm_tcsgeneric_solar : public tcKernel
343
343
344
344
// Connect the units
345
345
bool bConnected = connect (weather, " beam" , type260_genericsolar, " ibn" );
346
- bConnected &= connect (weather, " global " , type260_genericsolar, " itoth" );
346
+ bConnected &= connect (weather, " glob " , type260_genericsolar, " itoth" );
347
347
bConnected &= connect (weather, " poa_beam" , type260_genericsolar, " ibh" );
348
348
bConnected &= connect (weather, " tdry" , type260_genericsolar, " tdb" );
349
349
bConnected &= connect (weather, " twet" , type260_genericsolar, " twb" );
@@ -362,7 +362,7 @@ class cm_tcsgeneric_solar : public tcKernel
362
362
// check if all connections worked
363
363
if ( !bConnected )
364
364
throw exec_error ( " tcsgeneric_solar" , util::format (" there was a problem connecting outputs of one unit to inputs of another for the simulation." ) );
365
-
365
+
366
366
size_t hours = 8760 ;
367
367
368
368
// Load the solar field adjustment factors
0 commit comments