def power_plant_layout(self): """ Power plant layout calculation to determine power plant design point using nominal power input/output and nominal pressure as inputs. """ msg = 'Starting power plant layout calculation.' logging.debug(msg) for mode in ['charge', 'discharge']: model = getattr(self, mode + '_model') model_data = getattr(self, mode) pressure_conn = model.get_conn(model_data['pressure_conn']) massflow_conn = model.get_conn(model_data['massflow_conn']) power_bus = model.busses[model_data['power_bus']] power_bus.set_attr(P=model_data['power_nominal']) pressure_conn.set_attr(p=model_data['pressure_nominal'], m=Ref(massflow_conn, 1 / self.num_wells, 0)) massflow_conn.set_attr(m=np.nan) model.get_comp( self.storage['well_label']).set_attr(L=self.min_well_depth) model.solve('design') document_model(model, path=self.wdir + '_report_design_' + mode) model.save(self.wdir + self.sc + '_' + mode + '_design') m_nom = massflow_conn.m.val_SI setattr(self, 'm_nom_' + mode, m_nom) setattr(self, 'm_min_' + mode, m_nom * model_data['massflow_min_rel']) setattr(self, 'm_max_' + mode, m_nom * model_data['massflow_max_rel']) print(getattr(self, 'm_min_' + mode)) msg = ('Nominal mass flow for ' + mode + ' is ' + str(m_nom) + ' at nominal power ' + str(model_data['power_nominal']) + ' and nominal ' + 'pressure ' + str(model_data['pressure_nominal']) + '.') logging.debug(msg) model.solve('offdesign', design_path=self.wdir + self.sc + '_' + mode + '_design') document_model(model, path=self.wdir + '_report_offdesign_' + mode) msg = 'Finished power plant layout calculation.' logging.debug(msg)
p=5, fluid={ 'CO2': 0, 'Ar': 0, 'N2': 0, 'O2': 0, 'H2O': 1, 'CH4': 0 }) dh_w.set_attr(T=90) # %% nw.solve(mode='design') nw.print_results() nw.save('design_point') document_model(nw, filename='report_design.tex') power.set_attr(P=-100e6) nw.solve(mode='offdesign', init_path='design_point', design_path='design_point') nw.print_results() document_model(nw, filename='report_offdesign.tex') power.set_attr(P=1 / 0.9 * 0.8 * power.P.val) nw.solve(mode='offdesign', design_path='design_point') nw.print_results()
# %% connections a = Connection(so, 'out1', pi, 'in1') b = Connection(pi, 'out1', si, 'in1') nw.add_conns(a, b) # %% connection parameters a.set_attr(h=40, fluid={'water': 1}, p=1, m=10) # %% component parameters pi.set_attr(ks=1e-5, L=100, D='var', Q=0) # %% solve nw.set_attr(iterinfo=False) # specify different pressure ratios for the pipe, # calculate the diameter required for pr in np.linspace(0.9, 0.999, 10): pi.set_attr(pr=pr) nw.solve(mode='design') print('Pressure ratio: ' + str(round(pr, 3)) + ', diameter: ' + str(round(pi.D.val * 1000, 0)) + ' mm.') document_model(nw)
def __init__(self): self.nw = Network(fluids=['BICUBIC::water'], p_unit='bar', T_unit='C', h_unit='kJ / kg', iterinfo=False) # components # main cycle eco = HeatExchangerSimple('economizer') eva = HeatExchangerSimple('evaporator') sup = HeatExchangerSimple('superheater') cc = CycleCloser('cycle closer') hpt = Turbine('high pressure turbine') sp1 = Splitter('splitter 1', num_out=2) mpt = Turbine('mid pressure turbine') sp2 = Splitter('splitter 2', num_out=2) lpt = Turbine('low pressure turbine') con = Condenser('condenser') pu1 = Pump('feed water pump') fwh1 = Condenser('feed water preheater 1') fwh2 = Condenser('feed water preheater 2') dsh = Desuperheater('desuperheater') me2 = Merge('merge2', num_in=2) pu2 = Pump('feed water pump 2') pu3 = Pump('feed water pump 3') me = Merge('merge', num_in=2) # cooling water cwi = Source('cooling water source') cwo = Sink('cooling water sink') # connections # main cycle cc_hpt = Connection(cc, 'out1', hpt, 'in1', label='feed steam') hpt_sp1 = Connection(hpt, 'out1', sp1, 'in1', label='extraction1') sp1_mpt = Connection(sp1, 'out1', mpt, 'in1', state='g') mpt_sp2 = Connection(mpt, 'out1', sp2, 'in1', label='extraction2') sp2_lpt = Connection(sp2, 'out1', lpt, 'in1') lpt_con = Connection(lpt, 'out1', con, 'in1') con_pu1 = Connection(con, 'out1', pu1, 'in1') pu1_fwh1 = Connection(pu1, 'out1', fwh1, 'in2') fwh1_me = Connection(fwh1, 'out2', me, 'in1', state='l') me_fwh2 = Connection(me, 'out1', fwh2, 'in2', state='l') fwh2_dsh = Connection(fwh2, 'out2', dsh, 'in2', state='l') dsh_me2 = Connection(dsh, 'out2', me2, 'in1') me2_eco = Connection(me2, 'out1', eco, 'in1', state='l') eco_eva = Connection(eco, 'out1', eva, 'in1') eva_sup = Connection(eva, 'out1', sup, 'in1') sup_cc = Connection(sup, 'out1', cc, 'in1') self.nw.add_conns(cc_hpt, hpt_sp1, sp1_mpt, mpt_sp2, sp2_lpt, lpt_con, con_pu1, pu1_fwh1, fwh1_me, me_fwh2, fwh2_dsh, dsh_me2, me2_eco, eco_eva, eva_sup, sup_cc) # cooling water cwi_con = Connection(cwi, 'out1', con, 'in2') con_cwo = Connection(con, 'out2', cwo, 'in1') self.nw.add_conns(cwi_con, con_cwo) # preheating sp1_dsh = Connection(sp1, 'out2', dsh, 'in1') dsh_fwh2 = Connection(dsh, 'out1', fwh2, 'in1') fwh2_pu2 = Connection(fwh2, 'out1', pu2, 'in1') pu2_me2 = Connection(pu2, 'out1', me2, 'in2') sp2_fwh1 = Connection(sp2, 'out2', fwh1, 'in1') fwh1_pu3 = Connection(fwh1, 'out1', pu3, 'in1') pu3_me = Connection(pu3, 'out1', me, 'in2') self.nw.add_conns(sp1_dsh, dsh_fwh2, fwh2_pu2, pu2_me2, sp2_fwh1, fwh1_pu3, pu3_me) # busses # power bus self.power = Bus('power') self.power.add_comps({ 'comp': hpt, 'char': -1 }, { 'comp': mpt, 'char': -1 }, { 'comp': lpt, 'char': -1 }, { 'comp': pu1, 'char': -1 }, { 'comp': pu2, 'char': -1 }, { 'comp': pu3, 'char': -1 }) # heating bus self.heat = Bus('heat') self.heat.add_comps({ 'comp': eco, 'char': 1 }, { 'comp': eva, 'char': 1 }, { 'comp': sup, 'char': 1 }) self.nw.add_busses(self.power, self.heat) # parametrization # components hpt.set_attr(eta_s=0.9) mpt.set_attr(eta_s=0.9) lpt.set_attr(eta_s=0.9) pu1.set_attr(eta_s=0.8) pu2.set_attr(eta_s=0.8) pu3.set_attr(eta_s=0.8) eco.set_attr(pr=0.99) eva.set_attr(pr=0.99) sup.set_attr(pr=0.99) con.set_attr(pr1=1, pr2=0.99, ttd_u=5) fwh1.set_attr(pr1=1, pr2=0.99, ttd_u=5) fwh2.set_attr(pr1=1, pr2=0.99, ttd_u=5) dsh.set_attr(pr1=0.99, pr2=0.99) # connections eco_eva.set_attr(x=0) eva_sup.set_attr(x=1) cc_hpt.set_attr(m=200, T=650, p=100, fluid={'water': 1}) hpt_sp1.set_attr(p=20) mpt_sp2.set_attr(p=3) lpt_con.set_attr(p=0.05) cwi_con.set_attr(T=20, p=10, fluid={'water': 1}) # test run self.nw.solve('design') document_model(self.nw)
# compressor-system he_cp2.set_attr(Td_bp=5, p0=20, design=['Td_bp']) ic_out.set_attr(T=10, design=['T']) # %% key paramter heat.set_attr(P=Q_N) # %% Calculation nw.solve('design') nw.print_results() nw.save('hp_water') document_model(nw, 'report_design', draft=False) cp1.eta_s_char.char_func.extrapolate = True cp2.eta_s_char.char_func.extrapolate = True nw.solve('offdesign', design_path='hp_water') # document_model(nw) nw.set_attr(iterinfo=False) T_db = [] P_max = [] P_min = [] c_1 = [] c_0 = [] m_design = he_cp2.m.val