Source code for pyH2A.Plugins.Production_Scaling_Plugin

from pyH2A.Utilities.input_modification import insert, process_table

[docs]class Production_Scaling_Plugin: '''Calculation of plant output and potential scaling. Parameters ---------- Technical Operating Parameters and Specifications > Plant Design Capacity (kg of H2/day) > Value : float Plant design capacity in kg of H2/day, ``process_table()`` is used. Technical Operating Parameters and Specifications > Operating Capacity Factor (%) > Value : float Operating capacity factor in %, ``process_table()`` is used. Technical Operating Parameters and Specifications > Maximum Output at Gate > Value : float, optional Maximum output at gate in (kg of H2)/day, ``process_table()`` is used. If this parameter is not specified it defaults to `Plant Design Capacity (kg of H2/day)`. Technical Operating Parameters and Specifications > New Plant Design Capacity (kg of H2/day) > Value : float, optional New plant design capacity in kg of H2/day to calculate scaling, which overwrites possible Scaling Ratio, ``process_table()`` is used. Technical Operating Parameters and Specifications > Scaling Ratio > Value : float, optional Scaling ratio which is multiplied by current plant design capacity to obtain scaled plant size, ``process_table`` is used. Technical Operating Parameters and Specifications > Capital Scaling Exponent > Value : float, optional Exponent to calculate capital scaling factor, ``process_table()`` is used. Defaults to 0.78. Technical Operating Parameters and Specifications > Labor Scaling Exponent > Value : float, optional Exponent to calculcate labor scaling factor, ``process_table()`` is used. Defaults to 0.25. Returns ------- Technical Operating Parameters and Specifications > Design Output per Day > Value : float Design output in (kg of H2)/day. Technical Operating Parameters and Specifications > Max Gate Output per Day > Value : float Maximum gate ouput in (kg of H2)/day. Technical Operating Parameters and Specifications > Output per Year > Value : float Yearly output taking operating capacity factor into account, in (kg of H2)/year. Technical Operating Parameters and Specifications > Output per Year at Gate > Value : float Actual yearly output at gate, in (kg of H2)/year. Technical Operating Parameters and Specifications > Scaling Ratio > Value : float or None Returned if New Plant Design Capacity was specified. Scaling > Capital Scaling Factor > Value : float or None Returned if scaling is active (`Scaling Ratio` or `New Plant Design Capacity (kg of H2/day)` specified). Scaling > Labor Scaling Factor > Value : float or None Returned if scaling is active (`Scaling Ratio` or `New Plant Design Capacity (kg of H2/day)` specified). Notes ----- To scale capital or labor costs, a path to `Scaling > Capital Scaling Factor > Value` or `Scaling > Labor Scaling Factor > Value` has to specified for the respective table entry. ''' def __init__(self, dcf, print_info): process_table(dcf.inp, 'Technical Operating Parameters and Specifications', 'Value') self.dictionary = dcf.inp['Technical Operating Parameters and Specifications'] self.calculate_scaling(dcf, print_info) self.calculate_output(dcf) insert(dcf, 'Technical Operating Parameters and Specifications', 'Design Output per Day', 'Value', self.design_output_per_day, __name__, print_info = print_info) insert(dcf, 'Technical Operating Parameters and Specifications', 'Max Gate Output per Day', 'Value', self.max_gate_output_per_day, __name__, print_info = print_info) insert(dcf, 'Technical Operating Parameters and Specifications', 'Output per Year', 'Value', self.output_per_year, __name__, print_info = print_info) insert(dcf, 'Technical Operating Parameters and Specifications', 'Output per Year at Gate', 'Value', self.output_per_year_at_gate, __name__, print_info = print_info)
[docs] def calculate_scaling(self, dcf, print_info): '''Calculation of scaling if scaling is requested (either `New Plant Design Capacity (kg of H2/day)` or `Scaling Ratio` was provided). Otherwise returns regular design output and output at gate per day in (kg H2). ''' if 'Maximum Output at Gate' not in self.dictionary: maximum_output_at_gate = self.dictionary['Plant Design Capacity (kg of H2/day)']['Value'] insert(dcf, 'Technical Operating Parameters and Specifications', 'Maximum Output at Gate', 'Value', maximum_output_at_gate, __name__, print_info = print_info) if 'New Plant Design Capacity (kg of H2/day)' in self.dictionary: scaling_ratio = self.dictionary['New Plant Design Capacity (kg of H2/day)']['Value'] / self.dictionary['Plant Design Capacity (kg of H2/day)']['Value'] insert(dcf, 'Technical Operating Parameters and Specifications', 'Scaling Ratio', 'Value', scaling_ratio, __name__, print_info = print_info) if 'Scaling Ratio' in self.dictionary: self.design_output_per_day = self.dictionary['Plant Design Capacity (kg of H2/day)']['Value'] * self.dictionary['Scaling Ratio']['Value'] self.max_gate_output_per_day = self.dictionary['Maximum Output at Gate']['Value'] * self.dictionary['Scaling Ratio']['Value'] if 'Capital Scaling Exponent' in self.dictionary: self.capital_scaling_factor = self.dictionary['Scaling Ratio']['Value'] ** self.dictionary['Capital Scaling Exponent']['Value'] else: self.capital_scaling_factor = self.dictionary['Scaling Ratio']['Value'] ** 0.78 if 'Labor Scaling Exponent' in self.dictionary: self.labor_scaling_factor = self.dictionary['Scaling Ratio']['Value'] ** self.dictionary['Labor Scaling Exponent']['Value'] else: self.labor_scaling_factor = self.dictionary['Scaling Ratio']['Value'] ** 0.25 insert(dcf, 'Scaling', 'Capital Scaling Factor', 'Value', self.capital_scaling_factor, __name__, print_info = print_info) insert(dcf, 'Scaling', 'Labor Scaling Factor', 'Value', self.labor_scaling_factor, __name__, print_info = print_info) else: self.design_output_per_day = self.dictionary['Plant Design Capacity (kg of H2/day)']['Value'] self.max_gate_output_per_day = self.dictionary['Maximum Output at Gate']['Value']
[docs] def calculate_output(self, dcf): '''Calculation of yearly output in kg and yearly output at gate in kg. ''' self.output_per_year = self.design_output_per_day * 365. * self.dictionary['Operating Capacity Factor (%)']['Value'] self.output_per_year_at_gate = self.max_gate_output_per_day * 365. * self.dictionary['Operating Capacity Factor (%)']['Value']