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)
Пример #2
0
              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()
Пример #3
0
# %% 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)
Пример #5
0
# 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