Source code for pyH2A.Plugins.PEC_Plugin

import numpy as np
from pyH2A.Utilities.Energy_Conversion import Energy, kWh, eV
from pyH2A.Utilities.input_modification import insert, process_table

[docs]class PEC_Plugin: '''Simulating H2 production using photoelectrochemical water splitting. Parameters ---------- Technical Operating Parameters and Specifications > Design Output per Day > Value : float Design output in (kg of H2)/day, ``process_table()`` is used. PEC Cells > Cell Cost ($/m2) > Value : float Cost of PEC cells in $/m2. PEC Cells > Lifetime (year) > Value : float Lifetime of PEC cells in years before replacement is required. PEC Cells > Length (m) > Value : float Length of single PEC cell in m. PEC Cells > Width (m) > Value : float Width of single PEC cell in m. Land Area Requirement > Cell Angle (degree) > Value : float Angle of PEC cells from the ground, in degrees. Land Area Requirement > South Spacing (m) > Value : float South spacing of PEC cells in m. Land Area Requirement > East/West Spacing (m) > Value : float East/West Spacing of PEC cells in m. Solar-to-Hydrogen Efficiency > STH (%) > Value : float Solar-to-hydrogen efficiency in percentage or as a value between 0 and 1. Solar Input > Mean solar input (kWh/m2/day) > Value : float Mean solar input in kWh/m2/day, ``process_table()`` is used. Solar Concentrator > Concentration Factor > Value : float, optional Concentration factor created by solar concentration module, which is used in combination with PEC cells. If "Solar Concentrator" is in dcf.inp, ``process_table()`` is used. Returns ------- Non-Depreciable Capital Costs > Land required (acres) > Value : float Total land area required in acres. Non-Depreciable Capital Costs > Solar Collection Area (m2) > Value : float Solar collection area in m2. Planned Replacement > Planned Replacement PEC Cells > Cost ($) : float Total cost of replacing all PEC cells once. Planned Replacement > Planned Replacement PEC Cells > Frequency (years) : float Replacement frequency of PEC cells in years, identical to PEC cell lifetime. Direct Capital Costs - PEC Cells > PEC Cell Cost ($) > Value : float Total cost of all PEC cells. PEC Cells > Number > Value : float Number of individual PEC cells required for design H2 output capacity. ''' def __init__(self, dcf, print_info): if 'Solar Concentrator' in dcf.inp: process_table(dcf.inp, 'Solar Concentrator', 'Value') process_table(dcf.inp, 'Solar Input', 'Value') process_table(dcf.inp, 'Solar-to-Hydrogen Efficiency', 'Value') process_table(dcf.inp, 'PEC Cells', 'Value') process_table(dcf.inp, 'Land Area Requirement', 'Value') process_table(dcf.inp, 'Technical Operating Parameters and Specifications', 'Value') self.hydrogen_production(dcf) self.PEC_cost(dcf) self.land_area(dcf) insert(dcf, 'Non-Depreciable Capital Costs', 'Land required (acres)', 'Value', self.total_land_area_acres, __name__, print_info = print_info) insert(dcf, 'Non-Depreciable Capital Costs', 'Solar Collection Area (m2)', 'Value', self.total_solar_collection_area, __name__, print_info = print_info) insert(dcf, 'Planned Replacement', 'Planned Replacement PEC Cells', 'Cost ($)', self.cell_cost, __name__, print_info = print_info) insert(dcf, 'Planned Replacement', 'Planned Replacement PEC Cells', 'Frequency (years)', dcf.inp['PEC Cells']['Lifetime (years)']['Value'], __name__, print_info = print_info) insert(dcf, 'Direct Capital Costs - PEC Cells', 'PEC Cell Cost ($)', 'Value', self.cell_cost, __name__, print_info = print_info) insert(dcf, 'PEC Cells', 'Number', 'Value', self.cell_number, __name__, print_info = print_info)
[docs] def hydrogen_production(self, dcf): '''Calculation of (kg of H2)/day produced by single PEC cell. ''' pec = dcf.inp['PEC Cells'] self.cell_area = pec['Length (m)']['Value'] * pec['Width (m)']['Value'] cell_insolation = Energy(self.cell_area * dcf.inp['Solar Input']['Mean solar input (kWh/m2/day)']['Value'], kWh) mol_H2_per_cell = (cell_insolation.J * dcf.inp['Solar-to-Hydrogen Efficiency']['STH (%)']['Value']) / Energy(2*1.229, eV).Jmol self.kg_H2_per_cell = (2 * mol_H2_per_cell) / 1000. self.mol_H2_per_m2_per_day = mol_H2_per_cell / self.cell_area
[docs] def PEC_cost(self, dcf): '''Calculation of cost per cell, number of required cells and total cell cost. ''' cost_per_cell = self.cell_area * dcf.inp['PEC Cells']['Cell Cost ($/m2)']['Value'] self.cell_number = np.ceil(dcf.inp['Technical Operating Parameters and Specifications']['Design Output per Day']['Value'] / self.kg_H2_per_cell) self.cell_cost = self.cell_number * cost_per_cell
[docs] def land_area(self, dcf): '''Calculation of total required land area and solar collection area. ''' land = dcf.inp['Land Area Requirement'] pec = dcf.inp['PEC Cells'] self.total_solar_collection_area = self.cell_area * self.cell_number cell_plan_view = pec['Length (m)']['Value'] * np.cos(np.radians(land['Cell Angle (degree)']['Value'])) total_length = cell_plan_view + land['South Spacing (m)']['Value'] total_width = pec['Width (m)']['Value'] + land['East/West Spacing (m)']['Value'] self.total_land_area = total_width * total_length * self.cell_number self.total_land_area_acres = self.total_land_area * 0.000247105