OM Structure: Limitations/Bugs/Considerations for Future Dev
As I'm working on adding in an OpenMDAO version of the electrolyzer models and functionalities, I've had to make decisions that would limit the flexibility of the software in the future. I'm listing them here now so that they can be eventually broken into separate issues and PRs as that work progresses.
Scale-up/Scale-down components
I initially had these components set-up to scale up/down power, and hydrogen (and eventually voltage) from the cluster to stack to cell level. Right now, these basically do the following in setup():
self.add_input(f"P_in", val=0.0, shape_by_conn=True, units="W")
self.add_output(f"P_out", val=0.0, copy_shape="P_in", units="W")
self.add_input(f"H2_in", val=0.0, copy_shape="P_in", units="kg/s")
self.add_output(f"H2_out", val=0.0, copy_shape="P_in", units="kg/s")
This works if we're connecting P_in from the controller and need to scale it down to the cell level, but this does not work if we wanted to use hydrogen from the controller to scale it down to the cell level (because it can't resolve the shape since P_in isn't connected.
One possible solution is to have a scale-up and scale-down component that takes in the variable name and units as an option, so it'd only scale up or down one variable. This component would be used for connecting the controller commands to the simulation blocks. We could then have a scale-up component that scales up multiple variables, this would be used after the simulation block to scale up all the outputs from the cell at the simulate level.
Random thoughts
- minimize computation time by splitting up the power to current conversion component into separate pieces. Rather than have the
spicy.optimize.curve_fit be run for each cluster, we could have the curve coefficients be calculated in one higher-level component, those curve coefficients are passed to the cluster-level components that convert power to current. Should ensure that we have some flexibility though so that eventually clusters could be defined with different designs (ex: one cluster has 5 stacks, another has 1, OR one cluster is alkaline, another cluster is PEM).
- Dream/Future: Think about grouping so that we could optimize cell parameters per cluster. Like optimize A_cell for each of the five clusters, maybe one cluster gets an optimal A_cell value of 5.0 and another gets an optimal A_cell value of 10.0, etc.
OM Structure: Limitations/Bugs/Considerations for Future Dev
As I'm working on adding in an OpenMDAO version of the electrolyzer models and functionalities, I've had to make decisions that would limit the flexibility of the software in the future. I'm listing them here now so that they can be eventually broken into separate issues and PRs as that work progresses.
Scale-up/Scale-down components
I initially had these components set-up to scale up/down power, and hydrogen (and eventually voltage) from the cluster to stack to cell level. Right now, these basically do the following in
setup():This works if we're connecting
P_infrom the controller and need to scale it down to the cell level, but this does not work if we wanted to use hydrogen from the controller to scale it down to the cell level (because it can't resolve the shape sinceP_inisn't connected.One possible solution is to have a scale-up and scale-down component that takes in the variable name and units as an option, so it'd only scale up or down one variable. This component would be used for connecting the controller commands to the simulation blocks. We could then have a scale-up component that scales up multiple variables, this would be used after the simulation block to scale up all the outputs from the cell at the simulate level.
Random thoughts
spicy.optimize.curve_fitbe run for each cluster, we could have the curve coefficients be calculated in one higher-level component, those curve coefficients are passed to the cluster-level components that convert power to current. Should ensure that we have some flexibility though so that eventually clusters could be defined with different designs (ex: one cluster has 5 stacks, another has 1, OR one cluster is alkaline, another cluster is PEM).