Add multi-unit combined cycle gas turbine component#232
Conversation
| "For the combined cycle plant, one of the units must be an open cycle gas turbine." | ||
| ) | ||
|
|
||
| if len(generic_units) != 2: |
There was a problem hiding this comment.
We may want to relax this constraint in some cases in the future, where multiple gas generators could be combined to feed a steam unit. We can probably work around this for now.
Will the code break in this case? I'm not sure we should change it now, but it might be good to know in the future.
There was a problem hiding this comment.
Yes, I was thinking about that too. What I think I will try to do on the short term (though perhaps not in this PR) is allow at least 2 (or perhaps more? From what I can find, 2 is currently the max) gas units powering a single steam unit. I don't think that would break anything, but definitely not excluding the possibility that it causes complications that I'm currently not overseeing.
|
|
||
| # Update h_dict with outputs | ||
| h_dict[self.component_name]["power"] = self.power_output | ||
| # h_dict[self.component_name]["state"] = self.state.value |
There was a problem hiding this comment.
Do you want the state or is it not needed because each unit has its own state?
There was a problem hiding this comment.
Each unit has it's own state. We would need to define a new state machine for the combined unit as it has complicated combined states like "gas turbine on, steam turbine off". I refrained from doing that and just left it at each unit having its own state
| return h_dict | ||
|
|
||
| def control(self, power_setpoint): | ||
| """""" |
There was a problem hiding this comment.
Maybe denote that this is the control of the combined plant?
| 1 - self.gas_power_ratio | ||
| ) * power_setpoint | ||
|
|
||
| # TODO: we probably want to add an actual controller for the gas turbine |
There was a problem hiding this comment.
It looks like you did this TODO?
There was a problem hiding this comment.
No I didn't. I meant that right now it uses the basic _control logic defined in the thermal_component_base class, as there is no control method defined in the open_cycle_gas_turbine class. What I meant here is that we might want to add that at some point, or else rename _control in thermal_component_base to control.
dzalkind
left a comment
There was a problem hiding this comment.
Overall, this looks good to me. Nice job!
I like the power set point input addition. It might be nice to have that documented for future reference, along with making sure your new docs are included.
Otherwise, I left some small comments in the files; they are pretty minor and often for my understanding.
|
Ok, I've merged in develop but I have a few questions:
|
|
|
For #1, that would be great! Also, there are two example 07s now, so I'll take a look at that, as well. |
|
|
||
| Similar to the `ThermalPlant` class, the `CombinedCyclePlant` class does not have many default parameters. Key attributes that must be provided in the YAML configuration file are the `OpenCycleGasTurbine` and `SteamTurbine` `units`, which is a list that is used to instantiate the individual thermal units that make up the plant, and `unit_names`, which is a list of unique names for each unit. The number of entries in `units` and `unit_names` must match. | ||
|
|
||
| However, unlike the base `ThermalPlant` class, it is recommended that some parameters are defined outside the individual thermal units. Since the gas turbine does not have its own individual fuel source, instead using the rest heat from gas turbine, it is not possible to specify the efficiency and fuel consumption of the steam turbine in the same way as done for individual components that are not linked. As a result, these outputs are instead calculated for the plant as a whole, necessitating an efficiency table for the unit as a whole. Note that this table is only used when both the gas and steam turbine are running. If only the gas turbine is running, the `OpenCycleGasTurbine` efficiency table is used instead. |
There was a problem hiding this comment.
@jfrederik-nrel in the second sentence, should it be steam turbine first?
There was a problem hiding this comment.
The yaml file should contain a unit of OCGT and a unit of ST. The order doesn't matter, if I understand your question correctly.
There was a problem hiding this comment.
Ah, I'm specifically asking about the wording of the documentation: "Since the gas turbine does not have its own individual fuel source, instead using the rest heat from gas turbine, ..."
This sounds like one of the gas turbine references should be referring to the steam turbine?
genevievestarke
left a comment
There was a problem hiding this comment.
Really good work @jfrederik-nrel ! I just had a question about whether you can simulate multiple combined cycle units in the same plant or not? To create a whole plant, do you just scale the OCGT rating and the ST rating to account for all the units in the plant?
Work in progress. Still to do:
feature/mm-thermalback inNo reviews necessary yet at this time.