/
cmod_fresnel_physical.cpp
1991 lines (1682 loc) · 223 KB
/
cmod_fresnel_physical.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
BSD 3-Clause License
Copyright (c) Alliance for Sustainable Energy, LLC. See also https://github.com/NREL/ssc/blob/develop/LICENSE
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define _HAS_STD_BYTE 0
#include "core.h"
#include "common.h"
#include "csp_solver_fresnel_collector_receiver.h"
#include "csp_solver_pc_Rankine_indirect_224.h"
#include "csp_solver_tou_block_schedules.h"
#include "csp_dispatch.h"
#include "csp_system_costs.h"
#include <ctime>
#include <algorithm>
#include <iterator>
static var_info _cm_vtab_fresnel_physical[] = {
/* VARTYPE DATATYPE NAME LABEL UNITS META GROUP REQUIRED_IF CONSTRAINTS UI_HINTS*/
{ SSC_INPUT, SSC_NUMBER, "sim_type", "1 (default): timeseries, 2: design only", "", "", "System Control", "?=1", "", "SIMULATION_PARAMETER"},
// Weather Reader
{ SSC_INPUT, SSC_STRING, "file_name", "Local weather file with path", "none", "", "weather", "*", "LOCAL_FILE", "" },
// System Design
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "solar_mult_in", "Solar multiple Input", "", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "total_Ap_in", "Field aperture Input", "m3", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "solar_mult_or_Ap", "Design using specified solar mult or field aperture", "m3", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "T_loop_in_des", "Design loop inlet temperature", "C", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "T_loop_out", "Target loop outlet temperature", "C", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "I_bn_des", "Solar irradiation at design", "W/m2", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "P_ref", "Design Turbine Net Output", "MWe", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "eta_ref", "Cycle thermal efficiency at design point", "-", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "tshours", "Equivalent full-load thermal storage hours", "hr", "", "System_Design", "*", "", "" },
/*X*/ /*System Design*/{ SSC_INPUT, SSC_NUMBER, "gross_net_conversion_factor", "Estimated gross to net conversion factor", "", "", "System_Design", "*", "", "" },
// Solar Field
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "nMod", "Number of collector modules in a loop", "", "", "Solar_Field", "*", "INTEGER", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "eta_pump", "HTF pump efficiency", "", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "HDR_rough", "Header pipe roughness", "m", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "theta_stow", "stow angle", "deg", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "theta_dep", "deploy angle", "deg", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "FieldConfig", "Number of subfield headers", "", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "m_dot_htfmin", "Minimum loop HTF flow rate", "kg/s", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "m_dot_htfmax", "Maximum loop HTF flow rate", "kg/s", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "Fluid", "Field HTF fluid number", "", "", "Solar_Field", "*", "INTEGER", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "T_fp", "Freeze protection temperature (heat trace activation temperature)", "C", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "V_hdr_max", "Maximum HTF velocity in the header at design", "m/s", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "V_hdr_min", "Minimum HTF velocity in the header at design", "m/s", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "Pipe_hl_coef", "Loss coefficient from the header - runner pipe - and non-HCE piping", "W/m2-K", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "mc_bal_hot", "The heat capacity of the balance of plant on the hot side", "kWht/K-MWt", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "mc_bal_cold", "The heat capacity of the balance of plant on the cold side", "kWht/K-MWt", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "mc_bal_sca", "Non-HTF heat capacity associated with each SCA - per meter basis", "Wht/K-m", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "water_per_wash", "Water usage per wash", "L/m2_aper", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "washes_per_year", "Mirror washing frequency", "none", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "rec_htf_vol", "Volume of HTF in a single collector unit per unit aperture area", "L/m2-ap", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "T_amb_sf_des", "Ambient design-point temperature for the solar field", "C", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "V_wind_des", "Design-point wind velocity", "m/s", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_MATRIX, "field_fl_props", "Fluid property data", "", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "SCA_drives_elec", "Tracking power in Watts per SCA drive", "W/module", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "land_mult", "Non-solar field land area multiplier", "-", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "T_startup", "Power block startup temperature", "C", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "rec_su_delay", "Fixed startup delay time for the receiver", "hr", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "rec_qf_delay", "Energy-based receiver startup delay (fraction of rated thermal power)", "-", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "p_start", "Collector startup energy, per SCA", "kWe-hr", "", "Solar_Field", "*", "", "" },
/*X*/ /*Solar Field*/{ SSC_INPUT, SSC_NUMBER, "L_rnr_pb", "Length of runner pipe in power block", "m", "", "Solar_Field", "*", "", "" },
// Collector and Receiver
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "ColAz", "Collector azimuth angle", "deg", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "opt_model", "The optical model", "", "", "Col_Rec", "*", "INTEGER", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "A_aperture", "Reflective aperture area of the collector", "m2", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "reflectivity", "Solar-weighted mirror reflectivity value", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "TrackingError", "Tracking error derate", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "GeomEffects", "Geometry effects derate", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "Dirt_mirror", "User-defined dirt on mirror derate", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "Error", "User-defined general optical error derate", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "L_mod", "The length of the collector module", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "IAM_T_coefs", "Incidence angle modifier coefficients - transversal plane", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "IAM_L_coefs", "Incidence angle modifier coefficients - longitudinal plane", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_MATRIX, "OpticalTable", "Values of the optical efficiency table", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "rec_model", "Receiver model type (1=Polynomial ; 2=Evac tube)", "", "", "Col_Rec", "*", "INTEGER", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "HCE_FieldFrac", "The fraction of the field occupied by this HCE type", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "D_abs_in", "The inner absorber tube diameter", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "D_abs_out", "The outer absorber tube diameter", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "D_glass_in", "The inner glass envelope diameter", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "D_glass_out", "The outer glass envelope diameter", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "D_plug", "The diameter of the absorber flow plug (optional)", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "Flow_type", "The flow type through the absorber", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "Rough", "Roughness of the internal surface", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "alpha_env", "Envelope absorptance", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_MATRIX, "epsilon_abs_1", "Absorber emittance - HCE variation 1", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_MATRIX, "epsilon_abs_2", "Absorber emittance - HCE variation 2", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_MATRIX, "epsilon_abs_3", "Absorber emittance - HCE variation 3", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_MATRIX, "epsilon_abs_4", "Absorber emittance - HCE variation 4", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "alpha_abs", "Absorber absorptance", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "Tau_envelope", "Envelope transmittance", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "epsilon_glass", "Glass envelope emissivity", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "GlazingIntactIn", "The glazing intact flag", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "P_a", "Annulus gas pressure", "torr", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "AnnulusGas", "Annulus gas type (1=air; 26=Ar; 27=H2)", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "AbsorberMaterial", "Absorber material type", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "Shadowing", "Receiver bellows shadowing loss factor", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "dirt_env", "Loss due to dirt on the receiver envelope", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "Design_loss", "Receiver heat loss at design", "W/m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "L_mod_spacing", "Piping distance between sequential modules in a loop", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "L_crossover", "Length of crossover piping in a loop", "m", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "HL_T_coefs", "HTF temperature-dependent heat loss coefficients", "W/m-K", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "HL_w_coefs", "Wind-speed-dependent heat loss coefficients", "W/m-(m/s)", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "DP_nominal", "Pressure drop across a single collector assembly at design", "bar", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_ARRAY, "DP_coefs", "Pressure drop mass flow based part-load curve", "", "", "Col_Rec", "*", "", "" },
/*X*/ /*Col & Rec*/{ SSC_INPUT, SSC_NUMBER, "nRecVar", "Number of receiver variations", "", "", "Col_Rec", "?=4", "INTEGER", "" },
// Power Cycle Inputs
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "startup_time", "Time needed for power block startup", "hr", "", "Powerblock", "*", "", "" },
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "startup_frac", "Fraction of design thermal power needed for startup", "none", "", "Powerblock", "*", "", "" },
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "q_sby_frac", "Fraction of thermal power required for standby mode", "none", "", "Powerblock", "*", "", "" },
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "pb_pump_coef", "Pumping power to move 1kg of HTF through PB loop", "kW/kg", "", "Powerblock", "*", "", "" },
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "cycle_max_frac", "Maximum turbine over design operation fraction", "", "", "Powerblock", "*", "", "" },
/*X*/ /*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "cycle_cutoff_frac", "Minimum turbine operation fraction before shutdown", "", "", "Powerblock", "*", "", "" },
/*X*/ /*startup script*/{ SSC_INPUT, SSC_NUMBER, "pc_config", "0: Steam Rankine (224), 1: user defined", "-", "", "Powerblock", "*", "INTEGER", "" },
// Steam Rankine Cycle
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "dT_cw_ref", "Reference condenser cooling water inlet/outlet T diff", "C", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "T_amb_des", "Reference ambient temperature at design point", "C", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "CT", "Flag for using dry cooling or wet cooling system", "none", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "T_approach", "Cooling tower approach temperature", "C", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "T_ITD_des", "ITD at design for dry system", "C", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "P_cond_ratio", "Condenser pressure ratio", "none", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "pb_bd_frac", "Power block blowdown steam fraction ", "none", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "P_cond_min", "Minimum condenser pressure", "inHg", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "n_pl_inc", "Number of part-load increments for the heat rejection system", "none", "", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_ARRAY, "F_wc", "Fraction indicating wet cooling use for hybrid system", "none", "constant=[0,0,0,0,0,0,0,0,0]", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "tech_type", "Turbine inlet pressure control flag (sliding=user, fixed=fresnel)", "1/2/3", "tower/trough/user", "Powerblock", "pc_config=0", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "DP_SGS", "Pressure drop within the steam generator", "bar", "", "Powerblock", "*", "", "" },
// User Defined cycle
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "ud_f_W_dot_cool_des", "Percent of user-defined power cycle design gross output consumed by cooling", "%", "", "user_defined_PC", "pc_config=1", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_NUMBER, "ud_m_dot_water_cool_des", "Mass flow rate of water required at user-defined power cycle design point", "kg/s", "", "user_defined_PC", "pc_config=1", "", "" },
/*Power Cycle*/{ SSC_INPUT, SSC_MATRIX, "ud_ind_od", "Off design user-defined power cycle performance as function of T_htf, m_dot_htf [ND], and T_amb", "", "", "user_defined_PC", "pc_config=1", "", "" },
// TES
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "store_fluid", "Storage HTF ID", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_MATRIX, "store_fl_props", "Storage user-defined HTF Properties", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "h_tank", "Height of HTF when tank is full", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "u_tank", "Loss coefficient from tank", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "tank_pairs", "Number of equivalent tank pairs", "", "", "Storage", "*", "INTEGER", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "hot_tank_Thtr", "Hot tank heater set point", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "hot_tank_max_heat", "Rated heater capacity for hot tank heating", "MWe", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "cold_tank_Thtr", "Cold tank heater set point", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "cold_tank_max_heat", "Rated heater capacity for cold tank heating", "MWe", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "dt_hot", "Hot side HX approach temp", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "h_tank_min", "Minimum tank fluid height", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "dt_cold", "Cold side HX approach temp", "", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "init_hot_htf_percent", "Initial fraction of avail. vol that is hot", "%", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "tes_pump_coef", "Pumping power to move 1kg of HTF through tes loop", "kW/(kg/s)", "", "Storage", "*", "", "" },
/*X*/ /*Storage*/{ SSC_INPUT, SSC_NUMBER, "tanks_in_parallel", "Tanks are in parallel, not in series, with solar field", "-", "", "Storage", "*", "", "" },
/*Storage NOT in UI*/{ SSC_INPUT, SSC_NUMBER, "V_tes_des", "Design-point velocity to size the TES pipe diameters", "m/s", "", "Storage", "?=1.85", "", "SIMULATION_PARAMETER" },
// System Control
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "pb_fixed_par", "Fixed parasitic load - runs at all times", "", "", "Sys_Control", "*", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_ARRAY, "bop_array", "Balance of plant parasitic power fraction", "", "", "Sys_Control", "*", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_ARRAY, "aux_array", "Aux heater, boiler parasitic", "", "", "Sys_Control", "*", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "is_dispatch", "Allow dispatch optimization?", /*TRUE=1*/ "-", "", "Sys_Control", "?=0", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "is_dispatch_series", "Use time-series dispatch factors", "", "", "Sys_Control", "?=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_ARRAY, "dispatch_series", "Time series dispatch factors", "", "", "Sys_Control", "*", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_frequency", "Frequency for dispatch optimization calculations", "hour", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_horizon", "Time horizon for dispatch optimization", "hour", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_max_iter", "Max. no. dispatch optimization iterations", "-", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_timeout", "Max. dispatch optimization solve duration", "s", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_mip_gap", "Dispatch optimization solution tolerance", "-", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_time_weighting", "Dispatch optimization future time discounting factor", "-", "", "Sys_Control", "?=0.99", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_rsu_cost_rel", "Receiver startup cost", "$/MWt/start", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_csu_cost_rel", "Cycle startup cost", "$/MWe-cycle/start", "", "Sys_Control", "is_dispatch=1", "", "" },
/*Sys Control*/{ SSC_INPUT, SSC_NUMBER, "disp_pen_ramping", "Dispatch cycle production change penalty", "$/MWe-change", "", "Sys_Control", "is_dispatch=1", "", "" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "is_write_ampl_dat", "Write AMPL data files for dispatch run", "-", "", "tou", "?=0", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "is_ampl_engine", "Run dispatch optimization with external AMPL engine", "-", "", "tou", "?=0", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_STRING, "ampl_data_dir", "AMPL data file directory", "-", "", "tou", "?=''", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_STRING, "ampl_exec_call", "System command to run AMPL code", "-", "", "tou", "?='ampl sdk_solution.run'", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "can_cycle_use_standby", "Can the cycle use standby operation?", "", "", "tou", "?=0", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_steps_per_hour", "Time steps per hour for dispatch optimization calculations", "-", "", "tou", "?=1", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_spec_presolve", "Dispatch optimization presolve heuristic", "-", "", "tou", "?=-1", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_spec_bb", "Dispatch optimization B&B heuristic", "-", "", "tou", "?=-1", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_reporting", "Dispatch optimization reporting level", "-", "", "tou", "?=-1", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_spec_scaling", "Dispatch optimization scaling heuristic", "-", "", "tou", "?=-1", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "disp_inventory_incentive", "Dispatch storage terminal inventory incentive multiplier", "", "", "System Control", "?=0.0", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "q_rec_standby", "Receiver standby energy consumption", "kWt", "", "tou", "?=9e99", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_NUMBER, "q_rec_heattrace", "Receiver heat trace energy consumption during startup", "kWe-hr", "", "tou", "?=0.0", "", "SIMULATION_PARAMETER" },
/*LK Only*/{ SSC_INPUT, SSC_ARRAY, "timestep_load_fractions", "Turbine load fraction for each timestep, alternative to block dispatch", "", "", "tou", "?", "", "SIMULATION_PARAMETER" },
// Financials
/*Sys Design*/{SSC_INPUT, SSC_NUMBER, "csp_financial_model", "", "1-8", "", "Financial Model", "?=1", "INTEGER,MIN=0", ""},
/*Dipatch*/{ SSC_INPUT, SSC_MATRIX, "weekday_schedule", "12x24 Time of Use Values for week days", "", "", "Sys_Control", "*", "", "" },
/*Dipatch*/{ SSC_INPUT, SSC_MATRIX, "weekend_schedule", "12x24 Time of Use Values for week end days", "", "", "Sys_Control", "*", "", "" },
/*Dipatch*/{ SSC_INPUT, SSC_NUMBER, "is_tod_pc_target_also_pc_max","Is the TOD target cycle heat input also the max cycle heat input?", "", "", "tou", "?=0", "", "" },
/*Dipatch*/{ SSC_INPUT, SSC_ARRAY, "f_turb_tou_periods", "Dispatch logic for turbine load fraction", "-", "", "tou", "*", "", "" },
/*Startup Script*/{ SSC_INPUT, SSC_NUMBER, "en_electricity_rates", "Enable electricity rates for grid purchase", "0/1", "", "Electricity Rates", "?=0", "", "SIMULATION_PARAMETER" },
/*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "ppa_multiplier_model", "PPA multiplier model 0: dispatch factors dispatch_factorX, 1: hourly multipliers dispatch_factors_ts", "0/1", "", "tou", "?=0", /*need a default so this var works in required_if*/ "INTEGER,MIN=0", "SIMULATION_PARAMETER" },
/*Financial TOD Factors*/{ SSC_INPUT, SSC_ARRAY, "dispatch_factors_ts", "Dispatch payment factor array", "", "", "tou", "ppa_multiplier_model=1&csp_financial_model<5&is_dispatch=1", "", "SIMULATION_PARAMETER" },
/*Financial TOD Factors*/{ SSC_INPUT, SSC_MATRIX, "dispatch_sched_weekday", "PPA pricing weekday schedule, 12x24", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
/*Financial TOD Factors*/{ SSC_INPUT, SSC_MATRIX, "dispatch_sched_weekend", "PPA pricing weekend schedule, 12x24", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
{ SSC_INPUT, SSC_ARRAY, "dispatch_tod_factors", "TOD factors for periods 1 through 9", "",
"We added this array input after SAM 2022.12.21 to replace the functionality of former single value inputs dispatch_factor1 through dispatch_factor9", "Time of Delivery Factors","ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1","", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor1", "Dispatch payment factor 1", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor2", "Dispatch payment factor 2", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor3", "Dispatch payment factor 3", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor4", "Dispatch payment factor 4", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor5", "Dispatch payment factor 5", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor6", "Dispatch payment factor 6", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor7", "Dispatch payment factor 7", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor8", "Dispatch payment factor 8", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
///*Financial TOD Factors*/{ SSC_INPUT, SSC_NUMBER, "dispatch_factor9", "Dispatch payment factor 9", "", "", "Time of Delivery Factors", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
/*Fin Sol Mode Sing Own*/{ SSC_INPUT, SSC_NUMBER, "ppa_soln_mode", "PPA solution mode (0=Specify IRR target, 1=Specify PPA price)", "", "", "Financial Solution Mode", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
/*Fin Sol Mode Sing Own*/{ SSC_INPUT, SSC_ARRAY, "ppa_price_input", "PPA solution mode (0=Specify IRR target, 1=Specify PPA price)", "", "", "Financial Solution Mode", "ppa_multiplier_model=0&csp_financial_model<5&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
/*Fin Merc Plant Energy*/{ SSC_INPUT, SSC_MATRIX, "mp_energy_market_revenue", "Energy market revenue input", "", "Lifetime x 2[Cleared Capacity(MW),Price($ / MWh)]", "Revenue", "csp_financial_model=6&is_dispatch=1&sim_type=1", "", "SIMULATION_PARAMETER" },
// Capital Costs
// Direct Capital Costs
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "site_improvements_spec_cost", "Site Improvement Cost per m2", "$/m2", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "solar_field_spec_cost", "Solar Field Cost per m2", "$/m2", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "htf_system_spec_cost", "HTF System Cost Per m2", "$/m2", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "storage_spec_cost", "Storage cost per kWht", "$/kWht", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "fossil_spec_cost", "Fossil Backup Cost per kWe", "$/kWe", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "power_plant_spec_cost", "Power Plant Cost per kWe", "$/kWe", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "bop_spec_cost", "Balance of Plant Cost per kWe", "$/kWe", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "contingency_percent", "Contingency Percent", "%", "", "Capital_Costs", "?=0", "", "" },
// Indirect Capital Costs
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "epc_cost_per_acre", "EPC Costs per acre", "$/acre", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "epc_cost_percent_direct", "EPC Costs % direct", "%", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "epc_cost_per_watt", "EPC Cost Wac", "$/Wac", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "epc_cost_fixed", "Fixed EPC Cost", "$", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "plm_cost_per_acre", "Land Cost per acre", "$/acre", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "plm_cost_percent_direct", "Land Cost % direct", "%", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "plm_cost_per_watt", "Land Cost Wac", "$/Wac", "", "Capital_Costs", "?=0", "", "" },
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "plm_cost_fixed", "Fixed Land Cost", "$", "", "Capital_Costs", "?=0", "", "" },
// Sales Tax
/*Capital Costs*/{ SSC_INPUT, SSC_NUMBER, "sales_tax_percent", "Sales Tax Percentage of Direct Cost", "%", "", "Capital_Costs", "?=0", "", "" },
/*Fin Tax and Insurace*/{ SSC_INPUT, SSC_NUMBER, "sales_tax_rate", "Sales Tax Rate", "%", "", "Capital_Costs", "?=0", "", "" },
// Construction financing inputs/outputs (SSC variable table from cmod_cb_construction_financing)
{ SSC_INPUT, SSC_NUMBER, "const_per_interest_rate1", "Interest rate, loan 1", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_interest_rate2", "Interest rate, loan 2", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_interest_rate3", "Interest rate, loan 3", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_interest_rate4", "Interest rate, loan 4", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_interest_rate5", "Interest rate, loan 5", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_months1", "Months prior to operation, loan 1", "", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_months2", "Months prior to operation, loan 2", "", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_months3", "Months prior to operation, loan 3", "", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_months4", "Months prior to operation, loan 4", "", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_months5", "Months prior to operation, loan 5", "", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_percent1", "Percent of total installed cost, loan 1", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_percent2", "Percent of total installed cost, loan 2", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_percent3", "Percent of total installed cost, loan 3", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_percent4", "Percent of total installed cost, loan 4", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_percent5", "Percent of total installed cost, loan 5", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_upfront_rate1", "Upfront fee on principal, loan 1", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_upfront_rate2", "Upfront fee on principal, loan 2", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_upfront_rate3", "Upfront fee on principal, loan 3", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_upfront_rate4", "Upfront fee on principal, loan 4", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_INPUT, SSC_NUMBER, "const_per_upfront_rate5", "Upfront fee on principal, loan 5", "%", "", "Financial Parameters", "*", "", "" },
// OUTPUTS
// Design Point Outputs
// System capacity required by downstream financial model
{ SSC_OUTPUT, SSC_NUMBER, "system_capacity", "System capacity", "kWe", "", "System Design", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "cp_system_nameplate", "System capacity for capacity payments", "MWe", "", "System Design", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "cp_battery_nameplate", "Battery nameplate", "MWe", "", "System Design", "*", "", "" },
// System Design
{ SSC_OUTPUT, SSC_NUMBER, "solar_mult", "Actual solar multiple", "", "", "System Design Calc", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "total_Ap", "Actual field aperture", "m2", "", "System Design Calc", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "nLoops", "Number of loops in the field", "", "", "controller", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "nameplate", "Nameplate capacity", "MWe", "", "System Design Calc", "*", "", "" },
// Solar Field
{ SSC_OUTPUT, SSC_NUMBER, "A_loop", "Aperture of a single loop", "m2", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "loop_opt_eff", "Loop optical efficiency at design", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "loop_therm_eff", "Loop thermal efficiency at design", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "loop_eff", "Total loop conversion efficiency at design", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "sm1_aperture", "Total required aperture, SM=1", "m2", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "sm1_nLoops", "Required number of loops, SM=1", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "total_tracking_power", "Design tracking power", "MW", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "A_field", "Total field aperture", "m2", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "q_field_des_actual", "Design-point thermal power from the solar field limited by mass flow", "MW", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "q_field_des_ideal", "Design-point thermal power from the solar field with no limit", "MW", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "field_area", "Solar field area", "acres", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "total_land_area", "Total land area", "acres", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "field_htf_min_temp", "Minimum field htf temp", "C", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "field_htf_max_temp", "Maximum field htf temp", "C", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "mdot_field_des", "Field design HTF mass flow rate", "kg/s", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "dP_field_des_SS", "Steady State Field design total pressure drop", "bar", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "Q_field_des_SS", "Steady State Field design thermal power", "MWt", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "T_field_out_des_SS", "Steady State Field design outlet temperature", "C", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "m_dot_des_SS", "Steady State Field mass flow rate", "kg/s", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "m_dot_loop_des_SS", "Steady State Loop mass flow rate", "kg/s", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "V_hdr_min_des_SS", "Steady State min header velocity", "m/s", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "V_hdr_max_des_SS", "Steady State max header velocity", "m/s", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "eta_optical_des_SS", "Steady State optical efficiency", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "therm_eff_des_SS", "Steady State field optical efficiency", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "eff_des_SS", "Steady State field total efficiency", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "W_dot_pump_des_SS", "Steady State field pumping power", "MWe", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "T_loop_out_des_SS", "Steady State loop design outlet temperature", "C", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "Q_loop_des_SS", "Steady State loop design thermal power", "MWt", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "therm_eff_loop_des_SS", "Steady State loop optical efficiency", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "eff_loop_des_SS", "Steady State loop total efficiency", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "W_dot_pump_des_SS", "Steady State field pumping power", "MWe", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "Q_loss_receiver_des_SS", "Steady State field heat loss from receiver", "MWt", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "Q_loss_hdr_rnr_des_SS", "Steady State field heat loss from headers and runners", "MWt", "", "Receiver", "*", "", "" },
// Collector and Receiver
{ SSC_OUTPUT, SSC_NUMBER, "DP_pressure_loss", "Total loop pressure loss at design", "bar", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "avg_dt_des", "Average field temp difference at design", "C", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "hl_des", "Heat loss at design", "W/m", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "opt_derate", "Receiver optical derate", "", "", "Receiver", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "opt_normal", "Collector optical loss at normal incidence", "", "", "Receiver", "*", "", "" },
// Power Cycle
{ SSC_OUTPUT, SSC_NUMBER, "q_dot_cycle_des", "PC thermal input at design", "MWt", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "mdot_cycle_des", "PC mass flow rate at design", "kg/s", "", "Power Cycle", "*", "", "" },
// Thermal Storage
{ SSC_OUTPUT, SSC_NUMBER, "vol_tank", "Total tank volume", "m3", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "Q_tes_des", "TES design capacity", "MWt-hr", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "d_tank", "Tank diameter", "m", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "vol_min", "Minimum Fluid Volume", "m3", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "q_dot_loss_tes_des", "Estimated TES Heat Loss", "MW", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "tes_htf_min_temp", "Minimum storage htf temp", "C", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "tes_htf_max_temp", "Maximum storage htf temp", "C", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "tes_htf_dens", "Storage htf density", "kg/m3", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "tes_htf_cp", "Storage htf specific heat", "kJ/kg-K", "", "Power Cycle", "*", "", "" },
// System Control
{ SSC_OUTPUT, SSC_NUMBER, "W_dot_bop_design", "BOP parasitics at design", "MWe", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "W_dot_fixed", "Fixed parasitic at design", "MWe", "", "Power Cycle", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "aux_design", "Aux parasitics at design", "MWe", "", "System Control", "*", "", "" },
// Capital Costs
// Direct Capital Costs
{ SSC_OUTPUT, SSC_NUMBER, "site_improvements_cost", "Site improvements cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "solar_field_cost", "Solar field cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "htf_system_cost", "HTF system cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "ts_cost", "Thermal storage cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "fossil_backup_cost", "Fossil backup cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "power_plant_cost", "Power plant cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "bop_cost", "Balance of plant cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "contingency_cost", "Contingency cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "total_direct_cost", "Total direct cost", "$", "", "Capital Costs", "", "", "" },
// Indirect Capital Costs
{ SSC_OUTPUT, SSC_NUMBER, "epc_total_cost", "EPC total cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "plm_total_cost", "Total land cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "total_indirect_cost", "Total direct cost", "$", "", "Capital Costs", "", "", "" },
// Sales Tax
{ SSC_OUTPUT, SSC_NUMBER, "sales_tax_total", "Sales tax total", "$", "", "Capital Costs", "", "", "" },
// Total Installed Costs
{ SSC_OUTPUT, SSC_NUMBER, "total_installed_cost", "Total installed cost", "$", "", "Capital Costs", "", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "installed_per_capacity", "Estimated total installed cost per net capacity ($/kW)", "$/kW", "", "Capital Costs", "", "", "" },
// Financing
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal1", "Principal, loan 1", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal2", "Principal, loan 2", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal3", "Principal, loan 3", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal4", "Principal, loan 4", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal5", "Principal, loan 5", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest1", "Interest cost, loan 1", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest2", "Interest cost, loan 2", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest3", "Interest cost, loan 3", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest4", "Interest cost, loan 4", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest5", "Interest cost, loan 5", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_total1", "Total financing cost, loan 1", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_total2", "Total financing cost, loan 2", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_total3", "Total financing cost, loan 3", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_total4", "Total financing cost, loan 4", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_total5", "Total financing cost, loan 5", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_percent_total", "Total percent of installed costs, all loans", "%", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_principal_total", "Total principal, all loans", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "const_per_interest_total", "Total interest costs, all loans", "$", "", "Financial Parameters", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "construction_financing_cost", "Total construction financing cost", "$", "", "Financial Parameters", "*", "", "" },
// ****************************************************************************************************************************************
// Timeseries Simulation Outputs here (sim_type = 1):
// ****************************************************************************************************************************************
// Simulation Kernel
{ SSC_OUTPUT, SSC_ARRAY, "time_hr", "Time at end of timestep", "hr", "", "solver", "sim_type=1", "", "" },
// Weather Reader
{ SSC_OUTPUT, SSC_ARRAY, "month", "Resource Month", "", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "hour_day", "Resource Hour of Day", "", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "solazi", "Resource Solar Azimuth", "deg", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "solzen", "Resource Solar Zenith", "deg", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "beam", "Resource Beam normal irradiance", "W/m2", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "tdry", "Resource Dry bulb temperature", "C", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "twet", "Resource Wet bulb temperature", "C", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "rh", "Resource Relative Humidity", "%", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "wspd", "Resource Wind Speed", "m/s", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pres", "Resource Pressure", "mbar", "", "weather", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "defocus", "Field optical focus fraction", "", "", "weather", "sim_type=1", "", "" },
// Solar Field (from Trough)
{ SSC_OUTPUT, SSC_ARRAY, "EqOpteff", "Field optical efficiency before defocus", "", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "SCAs_def", "Field fraction of focused SCAs", "", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_inc_sf_tot", "Field thermal power incident", "MWt", "", "solar_field", "*", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_rec_inc", "Receiver thermal power incident", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_rec_thermal_loss", "Receiver thermal losses", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_rec_abs", "Receiver thermal power absorbed", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "rec_thermal_eff", "Receiver thermal efficiency", "", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_piping_loss", "Field piping thermal losses", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "e_dot_field_int_energy", "Field change in material/htf internal energy", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_htf_sf_out", "Field thermal power leaving in HTF", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_freeze_prot", "Field freeze protection required", "MWt", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_loop", "Receiver mass flow rate", "kg/s", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_field_recirc", "Field total mass flow recirculated", "kg/s", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_field_delivered", "Field total mass flow delivered", "kg/s", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_field_cold_in", "Field timestep-averaged inlet temperature", "C", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_rec_cold_in", "Loop timestep-averaged inlet temperature", "C", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_rec_hot_out", "Loop timestep-averaged outlet temperature", "C", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_field_hot_out", "Field timestep-averaged outlet temperature", "C", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "deltaP_field", "Field pressure drop", "bar", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "W_dot_sca_track", "Field collector tracking power", "MWe", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "W_dot_field_pump", "Field htf pumping power", "MWe", "", "solar_field", "sim_type=1", "", "" },
// power block
{ SSC_OUTPUT, SSC_ARRAY, "eta", "PC efficiency: gross", "", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_pb", "PC input energy", "MWt", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_pc", "PC HTF mass flow rate", "kg/s", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_pc_startup", "PC startup thermal power", "MWt", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "P_cycle", "PC electrical power output: gross", "MWe", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_pc_in", "PC HTF inlet temperature", "C", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_pc_out", "PC HTF outlet temperature", "C", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_water_pc", "PC water consumption: makeup + cooling", "kg/s", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_pc_startup", "PC startup thermal energy", "MWht", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "cycle_htf_pump_power", "PC HTF pump power", "MWe", "", "powerblock", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "P_cooling_tower_tot", "Parasitic power condenser operation", "MWe", "", "powerblock", "sim_type=1", "", "" },
// TES
{ SSC_OUTPUT, SSC_ARRAY, "tank_losses", "TES thermal losses", "MWt", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_tes_heater", "TES freeze protection power", "MWe", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_tes_hot", "TES hot temperature", "C", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "T_tes_cold", "TES cold temperature", "C", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "mass_tes_cold", "TES cold tank mass (end)", "kg", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "mass_tes_hot", "TES hot tank mass (end)", "kg", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dc_tes", "TES discharge thermal power", "MWt", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_ch_tes", "TES charge thermal power", "MWt", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "e_ch_tes", "TES charge state", "MWht", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_cr_to_tes_hot", "Mass flow: field to hot TES", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_tes_hot_out", "Mass flow: TES hot out", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_pc_to_tes_cold", "Mass flow: cycle to cold TES", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_tes_cold_out", "Mass flow: TES cold out", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_field_to_cycle", "Mass flow: field to cycle", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_cycle_to_field", "Mass flow: cycle to field", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_cold_tank_to_hot_tank", "Mass flow: cold tank to hot tank", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "tes_htf_pump_power", "TES HTF pump power", "MWe", "", "TES", "sim_type=1", "", "" },
// Controller
{ SSC_OUTPUT, SSC_ARRAY, "op_mode_1", "1st operating mode", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "op_mode_2", "2nd op. mode, if applicable", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "op_mode_3", "3rd op. mode, if applicable", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "m_dot_balance", "Relative mass flow balance error", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_balance", "Relative energy balance error", "", "", "solver", "sim_type=1", "", "" },
// Monthly Outputs
{ SSC_OUTPUT, SSC_ARRAY, "monthly_energy", "Monthly Energy", "kWh", "", "Post-process", "sim_type=1", "LENGTH=12", "" },
// Annual Outputs
{ SSC_OUTPUT, SSC_NUMBER, "annual_energy", "Annual Net Electrical Energy Production w/ avail derate", "kWe-hr", "", "Post-process", "sim_type=1", "", "" },
//{ SSC_OUTPUT, SSC_NUMBER, "annual_gross_energy", "Annual Gross Electrical Energy Production w/ avail derate", "kWe-hr", "", "Post-process", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "annual_thermal_consumption", "Annual thermal freeze protection required", "kWt-hr", "", "Post-process", "sim_type=1", "", "" },
//{ SSC_OUTPUT, SSC_NUMBER, "annual_electricity_consumption", "Annual electricity consumptoin w/ avail derate", "kWe-hr", "", "Post-process", "*", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "annual_total_water_use", "Total Annual Water Usage", "m^3", "", "Post-process", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "annual_field_freeze_protection", "Annual thermal power for field freeze protection", "kWt-hr", "", "Post-process", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "annual_tes_freeze_protection", "Annual thermal power for TES freeze protection", "kWt-hr", "", "Post-process", "sim_type=1", "", "" },
// Newly added
{ SSC_OUTPUT, SSC_ARRAY, "n_op_modes", "Operating modes in reporting timestep", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "tou_value", "CSP operating Time-of-use value", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pricing_mult", "PPA price multiplier", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_pc_sb", "Thermal power for PC standby", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_pc_min", "Thermal power for PC min operation", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_pc_target", "Target thermal power to PC", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_pc_max", "Max thermal power to PC", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "is_rec_su_allowed", "is receiver startup allowed", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "is_pc_su_allowed", "is power cycle startup allowed", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "is_pc_sb_allowed", "is power cycle standby allowed", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_est_cr_su", "Estimate rec. startup thermal power", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_est_cr_on", "Estimate rec. thermal power TO HTF", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_est_tes_dc", "Estimate max TES discharge thermal power", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "q_dot_est_tes_ch", "Estimate max TES charge thermal power", "MWt", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "operating_modes_a", "First 3 operating modes tried", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "operating_modes_b", "Next 3 operating modes tried", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "operating_modes_c", "Final 3 operating modes tried", "", "", "solver", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_rel_mip_gap", "Dispatch relative MIP gap", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_solve_state", "Dispatch solver state", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_subopt_flag", "Dispatch suboptimal solution flag", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_solve_iter", "Dispatch iterations count", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_objective", "Dispatch objective function value", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_obj_relax", "Dispatch objective function - relaxed max", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_qsf_expected", "Dispatch expected solar field available energy", "MWt", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_qsfprod_expected", "Dispatch expected solar field generation", "MWt", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_qsfsu_expected", "Dispatch expected solar field startup enegy", "MWt", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_tes_expected", "Dispatch expected TES charge level", "MWht", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_pceff_expected", "Dispatch expected power cycle efficiency adj.", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_thermeff_expected", "Dispatch expected SF thermal efficiency adj.", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_qpbsu_expected", "Dispatch expected power cycle startup energy", "MWht", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_wpb_expected", "Dispatch expected power generation", "MWe", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_rev_expected", "Dispatch expected revenue factor", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_presolve_nconstr", "Dispatch number of constraints in problem", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_presolve_nvar", "Dispatch number of variables in problem", "", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "disp_solve_time", "Dispatch solver time", "sec", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "avg_suboptimal_rel_mip_gap", "Average suboptimal relative MIP gap", "%", "", "tou", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "P_fixed", "Parasitic power fixed load", "MWe", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "P_plant_balance_tot", "Parasitic power generation-dependent load", "MWe", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "P_out_net", "Total electric power to grid", "MWe", "", "system", "*", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "gen", "Total electric power to grid w/ avail. derate", "kWe", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "annual_W_cycle_gross", "Electrical source - Power cycle gross output", "kWhe", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "conversion_factor", "Gross to Net Conversion Factor", "%", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "capacity_factor", "Capacity factor", "%", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "kwh_per_kw", "First year kWh/kW", "kWh/kW", "", "system", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_NUMBER, "sim_duration", "Computational time of timeseries simulation", "s", "", "system", "sim_type=1", "", "" },
//{ SSC_OUTPUT, SSC_NUMBER, "W_dot_par_tot_haf", "Adjusted parasitic power", "kWe", "", "system", "*", "", "" },
//{ SSC_OUTPUT, SSC_NUMBER, "q_dot_defocus_est", "Thermal energy intentionally lost by defocusing", "MWt", "", "system", "*", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "recirculating", "Field recirculating (bypass valve open)", "-", "", "solar_field", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_diams", "Pipe diameters in TES", "m", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_wallthk", "Pipe wall thickness in TES", "m", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_lengths", "Pipe lengths in TES", "m", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_mdot_dsn", "Mass flow TES pipes at design conditions", "kg/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_vel_dsn", "Velocity in TES pipes at design conditions", "m/s", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_T_dsn", "Temperature in TES pipes at design conditions", "C", "", "TES", "sim_type=1", "", "" },
{ SSC_OUTPUT, SSC_ARRAY, "pipe_tes_P_dsn", "Pressure in TES pipes at design conditions", "bar", "", "TES", "sim_type=1", "", "" },
//{ SSC_OUTPUT, SSC_ARRAY, "defocus", "Field optical focus fraction", "", "", "solver", "*", "", "" },
var_info_invalid };
class cm_fresnel_physical : public compute_module
{
public:
cm_fresnel_physical()
{
add_var_info(_cm_vtab_fresnel_physical);
add_var_info(vtab_adjustment_factors);
}
void exec()
{
// Common Parameters
bool is_dispatch = as_boolean("is_dispatch");
int sim_type = as_number("sim_type");
// Weather reader
C_csp_weatherreader weather_reader;
C_csp_solver::S_sim_setup sim_setup;
int n_steps_fixed;
int steps_per_hour;
{
weather_reader.m_weather_data_provider = std::make_shared<weatherfile>(as_string("file_name"));
weather_reader.m_filename = as_string("file_name");
weather_reader.m_trackmode = 0;
weather_reader.m_tilt = 0.0;
weather_reader.m_azimuth = 0.0;
// Initialize to get weather file info
weather_reader.init();
if (weather_reader.has_error()) throw exec_error("fresnel_physical", weather_reader.get_error());
// Set up ssc output arrays
// Set steps per hour
double nhourssim = 8760.0; //[hr] Number of hours to simulate
sim_setup.m_sim_time_start = 0.0; //[s] starting first hour of year
sim_setup.m_sim_time_end = nhourssim * 3600.; //[s] full year simulation
steps_per_hour = 1; //[-]
int n_wf_records = (int)weather_reader.m_weather_data_provider->nrecords();
steps_per_hour = n_wf_records / 8760; //[-]
n_steps_fixed = steps_per_hour * 8760; //[-]
sim_setup.m_report_step = 3600.0 / (double)steps_per_hour; //[s]
}
// Solar field
C_csp_fresnel_collector_receiver c_fresnel;
{
// Inputs
{
c_fresnel.m_solar_mult_or_Ap = as_integer("solar_mult_or_Ap");
c_fresnel.m_solar_mult_in = as_double("solar_mult_in");
c_fresnel.m_total_Ap_in = as_double("total_Ap_in");
c_fresnel.m_nMod = as_integer("nMod");
c_fresnel.m_nRecVar = as_integer("nRecVar");
c_fresnel.m_eta_pump = as_number("eta_pump");
c_fresnel.m_HDR_rough = as_number("HDR_rough");
c_fresnel.m_theta_stow = as_number("theta_stow");
c_fresnel.m_theta_dep = as_number("theta_dep");
c_fresnel.m_FieldConfig = as_integer("FieldConfig");
c_fresnel.m_T_startup = as_number("T_startup");
c_fresnel.m_P_ref = as_double("P_ref") * 1e6;
c_fresnel.m_eta_ref = as_double("eta_ref");
c_fresnel.m_m_dot_htfmin = as_number("m_dot_htfmin");
c_fresnel.m_m_dot_htfmax = as_number("m_dot_htfmax");
c_fresnel.m_T_loop_in_des = as_number("T_loop_in_des");
c_fresnel.m_T_loop_out_des = as_number("T_loop_out");
c_fresnel.m_Fluid = as_integer("Fluid");
c_fresnel.m_field_fl_props = as_matrix("field_fl_props");
c_fresnel.m_T_fp = as_number("T_fp");
c_fresnel.m_I_bn_des = as_number("I_bn_des");
c_fresnel.m_V_hdr_max = as_number("V_hdr_max");
c_fresnel.m_V_hdr_min = as_number("V_hdr_min");
c_fresnel.m_Pipe_hl_coef = as_number("Pipe_hl_coef");
c_fresnel.m_SCA_drives_elec = as_number("SCA_drives_elec");
c_fresnel.m_ColAz = as_number("ColAz");
c_fresnel.m_mc_bal_hot = as_number("mc_bal_hot");
c_fresnel.m_mc_bal_cold = as_number("mc_bal_cold");
c_fresnel.m_mc_bal_sca = as_number("mc_bal_sca");
c_fresnel.m_opt_model = as_integer("opt_model");
c_fresnel.m_A_aperture = as_number("A_aperture");
c_fresnel.m_reflectivity = as_number("reflectivity");
c_fresnel.m_TrackingError = as_number("TrackingError");
c_fresnel.m_GeomEffects = as_number("GeomEffects");
c_fresnel.m_Dirt_mirror = as_number("Dirt_mirror");
c_fresnel.m_Error = as_number("Error");
c_fresnel.m_L_mod = as_number("L_mod");
c_fresnel.m_IAM_T_coefs = as_vector_double("IAM_T_coefs");
c_fresnel.m_IAM_L_coefs = as_vector_double("IAM_L_coefs");
c_fresnel.m_OpticalTable = as_matrix("OpticalTable");
c_fresnel.m_rec_model = as_integer("rec_model");
c_fresnel.m_HCE_FieldFrac = as_vector_double("HCE_FieldFrac");
c_fresnel.m_D_abs_in = as_vector_double("D_abs_in");
c_fresnel.m_D_abs_out = as_vector_double("D_abs_out");
c_fresnel.m_D_glass_in = as_vector_double("D_glass_in");
c_fresnel.m_D_glass_out = as_vector_double("D_glass_out");
c_fresnel.m_D_plug = as_vector_double("D_plug");
c_fresnel.m_Flow_type = as_vector_double("Flow_type");
c_fresnel.m_Rough = as_vector_double("Rough");
c_fresnel.m_alpha_env = as_vector_double("alpha_env");
c_fresnel.m_epsilon_abs_1 = as_matrix_transpose("epsilon_abs_1");
c_fresnel.m_epsilon_abs_2 = as_matrix_transpose("epsilon_abs_2");
c_fresnel.m_epsilon_abs_3 = as_matrix_transpose("epsilon_abs_3");
c_fresnel.m_epsilon_abs_4 = as_matrix_transpose("epsilon_abs_4");
c_fresnel.m_alpha_abs = as_vector_double("alpha_abs");
c_fresnel.m_Tau_envelope = as_vector_double("Tau_envelope");
c_fresnel.m_epsilon_glass = as_vector_double("epsilon_glass");
c_fresnel.m_GlazingIntact = as_vector_bool("GlazingIntactIn");
c_fresnel.m_P_a = as_vector_double("P_a");
c_fresnel.m_AnnulusGas = as_vector_double("AnnulusGas");
c_fresnel.m_AbsorberMaterial = as_vector_double("AbsorberMaterial");
c_fresnel.m_Shadowing = as_vector_double("Shadowing");
c_fresnel.m_dirt_env = as_vector_double("dirt_env");
c_fresnel.m_Design_loss = as_vector_double("Design_loss");
c_fresnel.m_L_mod_spacing = as_number("L_mod_spacing");
c_fresnel.m_L_crossover = as_number("L_crossover");
c_fresnel.m_HL_T_coefs = as_vector_double("HL_T_coefs");
c_fresnel.m_HL_w_coefs = as_vector_double("HL_w_coefs");
c_fresnel.m_DP_nominal = as_number("DP_nominal");
c_fresnel.m_DP_coefs = as_vector_double("DP_coefs");
c_fresnel.m_rec_htf_vol = as_number("rec_htf_vol");
c_fresnel.m_L_rnr_pb = as_number("L_rnr_pb");
c_fresnel.m_rec_su_delay = as_number("rec_su_delay");
c_fresnel.m_rec_qf_delay = as_number("rec_qf_delay");
c_fresnel.m_p_start = as_number("p_start");
c_fresnel.m_V_wind_des = as_number("V_wind_des");
c_fresnel.m_T_amb_sf_des = as_number("T_amb_sf_des");
}
// Calculate solar multiple (needed for other component constructors)
// Need latitude from weather reader
weather_reader.init();
c_fresnel.design_solar_mult(weather_reader.ms_solved_params.m_lat);
// Allocate Outputs
{
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_THETA_AVE, allocate("Theta_ave", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_COSTH_AVE, allocate("CosTh_ave", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_IAM_AVE, allocate("IAM_ave", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_ROWSHADOW_AVE, allocate("RowShadow_ave", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_ENDLOSS_AVE, allocate("EndLoss_ave", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_DNI_COSTH, allocate("dni_costh", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_EQUIV_OPT_ETA_TOT, allocate("EqOpteff", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_DEFOCUS, allocate("SCAs_def", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_INC_SF_TOT, allocate("q_inc_sf_tot", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_INC_SF_COSTH, allocate("qinc_costh", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_REC_INC, allocate("q_dot_rec_inc", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_REC_THERMAL_LOSS, allocate("q_dot_rec_thermal_loss", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_REC_ABS, allocate("q_dot_rec_abs", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_REC_THERMAL_EFF, allocate("rec_thermal_eff", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_PIPING_LOSS, allocate("q_dot_piping_loss", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_E_DOT_INTERNAL_ENERGY, allocate("e_dot_field_int_energy", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_HTF_OUT, allocate("q_dot_htf_sf_out", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DOT_FREEZE_PROT, allocate("q_dot_freeze_prot", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_M_DOT_LOOP, allocate("m_dot_loop", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_IS_RECIRCULATING, allocate("recirculating", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_M_DOT_FIELD_RECIRC, allocate("m_dot_field_recirc", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_M_DOT_FIELD_DELIVERED, allocate("m_dot_field_delivered", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_FIELD_COLD_IN, allocate("T_field_cold_in", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_REC_COLD_IN, allocate("T_rec_cold_in", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_REC_HOT_OUT, allocate("T_rec_hot_out", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_FIELD_HOT_OUT, allocate("T_field_hot_out", n_steps_fixed), n_steps_fixed);
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_PRESSURE_DROP, allocate("deltaP_field", n_steps_fixed), n_steps_fixed); //[bar]
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_W_DOT_SCA_TRACK, allocate("W_dot_sca_track", n_steps_fixed), n_steps_fixed); //[MWe]
c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_W_DOT_PUMP, allocate("W_dot_field_pump", n_steps_fixed), n_steps_fixed); //[MWe]
//// Fresnel
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_THETA_L, allocate("theta_L", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_PHI_T, allocate("phi_t", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_ETA_OPTICAL, allocate("eta_optical", n_steps_fixed), n_steps_fixed);
////c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_EQ_OPT_EFF, allocate("EqOptEff", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_SF_DEF, allocate("sf_def", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_INC_SF_TOT, allocate("q_inc_sf_tot", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_ABS_TOT, allocate("q_abs_tot", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_DUMP, allocate("q_dump", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_LOSS_TOT, allocate("q_loss_tot", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_PIPE_HL, allocate("Pipe_hl", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_AVAIL, allocate("q_avail", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_LOSS_SPEC_TOT, allocate("q_loss_spec_tot", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_ETA_THERMAL, allocate("eta_thermal", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_E_BAL_STARTUP, allocate("E_bal_startup", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_M_DOT_AVAIL, allocate("m_dot_avail", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_M_DOT_HTF2, allocate("m_dot_htf2", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_DP_TOT, allocate("DP_tot", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_SYS_C, allocate("T_sys_c", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_SYS_H, allocate("T_sys_h", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_T_LOOP_OUTLET, allocate("t_loop_outlet", n_steps_fixed), n_steps_fixed);
//c_fresnel.mc_reported_outputs.assign(C_csp_fresnel_collector_receiver::E_Q_I, allocate("q_I", n_steps_fixed), n_steps_fixed);
}
}
// Power cycle
C_csp_power_cycle* p_csp_power_cycle;
C_pc_Rankine_indirect_224 rankine_pc; // Steam Rankine and User Defined power cycle classes
{
int pb_tech_type = as_integer("pc_config");
if (!(pb_tech_type == 0 || pb_tech_type == 1)) // 0 = Rankine, 1 = UDPC
{
throw exec_error("fresnel_physical", "unsupported power cycle");
}
else
{
C_pc_Rankine_indirect_224::S_params* pc = &rankine_pc.ms_params;
pc->m_P_ref = as_double("P_ref");
pc->m_eta_ref = as_double("eta_ref");
pc->m_T_htf_hot_ref = as_double("T_loop_out");
pc->m_T_htf_cold_ref = as_double("T_loop_in_des");
pc->m_cycle_max_frac = as_double("cycle_max_frac");
pc->m_cycle_cutoff_frac = as_double("cycle_cutoff_frac");
pc->m_q_sby_frac = as_double("q_sby_frac");
pc->m_startup_time = as_double("startup_time");
pc->m_startup_frac = as_double("startup_frac");
pc->m_htf_pump_coef = as_double("pb_pump_coef");
pc->m_pc_fl = as_integer("Fluid"); // power cycle HTF is same as receiver HTF
pc->m_pc_fl_props = as_matrix("field_fl_props");
pc->DP_SGS = as_double("DP_SGS");
if (pb_tech_type == 0)
{
pc->m_dT_cw_ref = as_double("dT_cw_ref");
pc->m_T_amb_des = as_double("T_amb_des");
//pc->m_P_boil = as_double("P_boil");
pc->m_P_boil_des = 100.0; //[bar]
pc->m_CT = as_integer("CT"); // cooling tech type: 1=evaporative, 2=air, 3=hybrid
pc->m_tech_type = as_integer("tech_type"); // turbine inlet pressure: 1: Fixed, 3: Sliding
if (pc->m_tech_type == 1) { pc->m_tech_type = 2; }; // changing fixed pressure for the tower to fixed pressure for the fresnel
if (pc->m_tech_type == 3) { pc->m_tech_type = 8; }; // changing sliding pressure for the tower to sliding pressure for the fresnel
if (!(pc->m_tech_type == 2 || pc->m_tech_type == 5 || pc->m_tech_type == 6 || pc->m_tech_type == 8))
{
std::string tech_msg = util::format("tech_type must be either 2 (fixed pressure) or 8 (sliding). Input was %d."
" Simulation proceeded with fixed pressure", pc->m_tech_type);
pc->m_tech_type = 2;
}
pc->m_T_approach = as_double("T_approach");
pc->m_T_ITD_des = as_double("T_ITD_des");
pc->m_P_cond_ratio = as_double("P_cond_ratio");
pc->m_pb_bd_frac = as_double("pb_bd_frac");
pc->m_P_cond_min = as_double("P_cond_min");
pc->m_n_pl_inc = as_integer("n_pl_inc");
size_t n_F_wc = 0;
ssc_number_t* p_F_wc = as_array("F_wc", &n_F_wc);
pc->m_F_wc.resize(n_F_wc, 0.0);
for (size_t i = 0; i < n_F_wc; i++)
pc->m_F_wc[i] = (double)p_F_wc[i];
pc->m_is_user_defined_pc = false;
pc->m_W_dot_cooling_des = std::numeric_limits<double>::quiet_NaN();
}
else if (pb_tech_type == 1)
{
pc->m_is_user_defined_pc = true;
// User-Defined Cycle Parameters
pc->m_W_dot_cooling_des = as_double("ud_f_W_dot_cool_des") / 100.0 * as_double("P_ref"); //[MWe]
pc->m_m_dot_water_des = as_double("ud_m_dot_water_cool_des"); //[kg/s]
// User-Defined Cycle Off-Design Tables
pc->mc_combined_ind = as_matrix("ud_ind_od");
}
// Set pointer to parent class
p_csp_power_cycle = &rankine_pc;
// Set power cycle outputs common to all power cycle technologies
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_Q_DOT_HTF, allocate("q_pb", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_M_DOT_HTF, allocate("m_dot_pc", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_Q_DOT_STARTUP, allocate("q_dot_pc_startup", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_W_DOT, allocate("P_cycle", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_T_HTF_IN, allocate("T_pc_in", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_T_HTF_OUT, allocate("T_pc_out", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_M_DOT_WATER, allocate("m_dot_water_pc", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_W_DOT_HTF_PUMP, allocate("cycle_htf_pump_power", n_steps_fixed), n_steps_fixed);
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_W_DOT_COOLER, allocate("P_cooling_tower_tot", n_steps_fixed), n_steps_fixed);
// Dependent reported variable
p_csp_power_cycle->assign(C_pc_Rankine_indirect_224::E_ETA_THERMAL, allocate("eta", n_steps_fixed), n_steps_fixed);
}
}
// TES
C_csp_two_tank_tes storage;
{
double V_tes_des = as_double("V_tes_des");
/*double eta_pump = 0.85;
bool has_hot_tank_bypass = false;
double T_tank_hot_inlet_min = 200;
bool custom_tes_p_loss = false;
bool custom_tes_pipe_sizes = false;
double k_tes_loss_coeffs_val[11] = { 0,0,0,0,0,0,0,0,0,0,0 };
util::matrix_t<double> k_tes_loss_coeffs;
k_tes_loss_coeffs.assign(k_tes_loss_coeffs_val, 11);
double tes_diams_val[1] = { -1 };
util::matrix_t<double> tes_diams;
tes_diams.assign(tes_diams_val, 1);
double tes_wallthicks_val[1] = { -1 };
util::matrix_t<double> tes_wallthicks;
tes_wallthicks.assign(tes_wallthicks_val, 1);
double pipe_rough = 4.5700000000000000e-05;
double dP_discharge = 0;
double tes_length_vals[11] = { 0., 90., 100., 120., 0., 30., 90., 80., 80., 120., 80. };
util::matrix_t<double> tes_lengths;
tes_lengths.assign(tes_length_vals, 11);*/
storage = C_csp_two_tank_tes(
as_integer("Fluid"),
as_matrix("field_fl_props"),
as_integer("store_fluid"),
as_matrix("store_fl_props"),
as_double("P_ref") / as_double("eta_ref"),
c_fresnel.m_solar_mult,
as_double("P_ref") / as_double("eta_ref") * as_double("tshours"),
as_double("h_tank"),
as_double("u_tank"),
as_integer("tank_pairs"),
as_double("hot_tank_Thtr"),
as_double("hot_tank_max_heat"),
as_double("cold_tank_Thtr"),
as_double("cold_tank_max_heat"),
as_double("dt_hot"),
as_double("T_loop_in_des"),
as_double("T_loop_out"),
as_double("T_loop_out"),
as_double("T_loop_in_des"),
as_double("h_tank_min"),
as_double("init_hot_htf_percent"),
as_double("pb_pump_coef"),
as_boolean("tanks_in_parallel"),
V_tes_des,
false,
as_double("tes_pump_coef")
);
/*eta_pump,
has_hot_tank_bypass,
T_tank_hot_inlet_min,
custom_tes_p_loss,
custom_tes_pipe_sizes,
k_tes_loss_coeffs,
tes_diams,
tes_wallthicks,