Add multi-unit combined cycle gas turbine component#232
Add multi-unit combined cycle gas turbine component#232jfrederik-nrel wants to merge 59 commits into
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?
|
|
||
| ### | ||
| # Describe this simulation setup | ||
| description: Combined Cycle Gas Turbine (CCGT) Example |
There was a problem hiding this comment.
Is the current implementation simulating just one OCGT+ST? Can you simulate multiples of these pairs? It seems like only one can be defined per CombinedCyclePlant. If you can assign multiples of these in the multi-unit plant, then maybe CombinedCycleUnit would be a better name?
There was a problem hiding this comment.
Currently, you can only have one OCGT+ST, so yes, you would need to scale them to model a more complicated setup that for example has two steam turbines (which I do think is actually relatively common). I did consider making it generalizable, but this would severely complicate the control logic as there are many ways the different units could be linked. I therefore chose to keep it simple for now and stick to a single OCGT+ST setup. The nomenclature doesn't seem overly important to me personally, but if you want to change the name to CombinedCycleUnit, I won't fight you on it.
There was a problem hiding this comment.
Ok, since it's meant to represent the whole plant, I'll keep it as is for now!
Work in progress. Still to do:
feature/mm-thermalback inNo reviews necessary yet at this time.