def create_comps(self):

        self.comps['splitter'] = splitter(self.label + '_splitter')
        self.comps['merge'] = merge(self.label + '_merge')

        for i in range(self.num_branch):
            j = str(i)
            self.comps['valve_' + j] = valve(self.label + '_valve_' + j)
    def create_comps(self):

        for i in range(self.num_consumer - 1):
            j = str(i)
            self.comps['feed_' + j] = pipe(self.label + '_pipe feed_' + j)
            self.comps['return_' + j] = pipe(self.label + '_pipe return_' + j)

        for i in range(self.num_consumer):
            j = str(i)
            self.comps['splitter_' + j] = splitter(self.label + '_splitter_' +
                                                   j)
            self.comps['merge_' + j] = merge(self.label + '_merge_' + j)
            self.comps['consumer_' +
                       j] = heat_exchanger_simple(self.label + '_consumer_' +
                                                  j)
            self.comps['valve_' + j] = valve(self.label + '_valve_' + j)
    def __init__(self, working_fluid):

        self.working_fluid = working_fluid
        fluids = ['water', self.working_fluid, 'air']
        self.nw = network(fluids=fluids)
        self.nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg')

        # geo parameters

        geo_mass_flow = 210
        geo_steam_share = 0.1
        T_brine_in = 144.8
        T_reinjection = 70.8

        # ambient parameters

        T_amb = 0
        p_amb = 1

        # main components

        geo_steam = source('steam source')
        geo_brine = source('brine source')
        geo_reinjection = sink('reinjection well')

        air_in = source('ambient air source')
        air_out = sink('ambient air sink')
        air_cond = condenser('main condenser')

        orc_cc = cycle_closer('orc cycle closer')

        evap_steam = condenser('steam evaporator')
        evap_splitter = splitter('splitter evaporation')
        evap_merge = merge('merge evaporation')
        evap_steam = condenser('steam evaporator')
        geo_steam_pump = pump('geosteam condensate pump')
        evap_brine = heat_exchanger('brine evaporator')
        dr = drum('drum')

        eco = heat_exchanger('economiser')
        feed_water_pump = pump('feed water pump')
        geo_merge = merge('brine merge')

        tur = turbine('turbine')

        ls_valve = valve('live steam valve')

        ihe = heat_exchanger('internal heat exchanger')

        # busses
        power_bus = bus('power output')
        power_bus.add_comps({
            'c': tur,
            'char': -1
        }, {
            'c': feed_water_pump,
            'char': -1
        }, {
            'c': geo_steam_pump,
            'char': -1
        })

        geothermal_bus = bus('thermal input')
        geothermal_bus.add_comps({
            'c': eco,
            'char': -1
        }, {
            'c': evap_brine,
            'char': -1
        }, {
            'c': evap_steam,
            'char': -1
        })

        self.nw.add_busses(power_bus, geothermal_bus)

        # turbine to condenser
        ls_in = connection(orc_cc, 'out1', ls_valve, 'in1')
        lsv_tur = connection(ls_valve, 'out1', tur, 'in1')
        tur_ihe = connection(tur, 'out1', ihe, 'in1')
        ihe_cond = connection(ihe, 'out1', air_cond, 'in1')
        self.nw.add_conns(ls_in, lsv_tur, tur_ihe, ihe_cond)

        # condenser to steam generator
        cond_fwp = connection(air_cond, 'out1', feed_water_pump, 'in1')
        fwp_ihe = connection(feed_water_pump, 'out1', ihe, 'in2')
        self.nw.add_conns(cond_fwp, fwp_ihe)

        # steam generator
        ihe_eco = connection(ihe, 'out2', eco, 'in2')
        eco_dr = connection(eco, 'out2', dr, 'in1')
        dr_esp = connection(dr, 'out1', evap_splitter, 'in1')
        esp_eb = connection(evap_splitter, 'out1', evap_brine, 'in2')
        esp_es = connection(evap_splitter, 'out2', evap_steam, 'in2')
        eb_em = connection(evap_brine, 'out2', evap_merge, 'in1')
        es_em = connection(evap_steam, 'out2', evap_merge, 'in2')
        em_dr = connection(evap_merge, 'out1', dr, 'in2')
        ls_out = connection(dr, 'out2', orc_cc, 'in1')
        self.nw.add_conns(ihe_eco, eco_dr, dr_esp, esp_eb, esp_es, eb_em,
                          es_em, em_dr, ls_out)

        # air cold side
        air_cold = connection(air_in, 'out1', air_cond, 'in2')
        air_hot = connection(air_cond, 'out2', air_out, 'in1')
        self.nw.add_conns(air_cold, air_hot)

        # geo source
        gs_es = connection(geo_steam,
                           'out1',
                           evap_steam,
                           'in1',
                           label='geosteam')
        es_gsp = connection(evap_steam, 'out1', geo_steam_pump, 'in1')
        gsp_gm = connection(geo_steam_pump, 'out1', geo_merge, 'in1')
        gb_eb = connection(geo_brine,
                           'out1',
                           evap_brine,
                           'in1',
                           label='geobrine')
        eb_gm = connection(evap_brine, 'out1', geo_merge, 'in2')
        self.nw.add_conns(gs_es, es_gsp, gsp_gm, gb_eb, eb_gm)

        gm_eco = connection(geo_merge, 'out1', eco, 'in1')
        eco_gr = connection(eco,
                            'out1',
                            geo_reinjection,
                            'in1',
                            label='reinjection')
        self.nw.add_conns(gm_eco, eco_gr)

        # fluid settings
        ihe_eco.set_attr(fluid={self.working_fluid: 1, 'air': 0, 'water': 0})
        air_cold.set_attr(fluid={self.working_fluid: 0, 'air': 1, 'water': 0})
        gs_es.set_attr(fluid={self.working_fluid: 0, 'air': 0, 'water': 1})
        gb_eb.set_attr(fluid={self.working_fluid: 0, 'air': 0, 'water': 1})

        # connection parameters
        ls_stable_p0 = PSI('P', 'T', T_brine_in + 273.15, 'Q', 1,
                           self.working_fluid) / 1e5
        lsv_tur.set_attr(p0=ls_stable_p0)
        ws_stable_h0 = (
            PSI('H', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid) + 0.5 *
            (PSI('H', 'T', T_brine_in + 273.15, 'Q', 1, self.working_fluid) -
             PSI('H', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid))) / 1e3
        tur_ihe.set_attr(h=ws_stable_h0)
        ihe_cond.set_attr(
            Td_bp=2,
            design=['Td_bp'],
            p0=PSI('P', 'T', T_amb + 273.15, 'Q', 1, self.working_fluid) / 1e5)
        fwp_ihe.set_attr(h=ref(cond_fwp, 1, 1e3))

        # steam generator
        gs_es.set_attr(m=geo_mass_flow * geo_steam_share,
                       T=T_brine_in,
                       x=1,
                       p0=5)
        gb_eb.set_attr(m=geo_mass_flow * (1 - geo_steam_share),
                       T=T_brine_in,
                       x=0)

        em_dr.set_attr()
        eb_em.set_attr(x=0.5)
        es_em.set_attr(x=0.5, design=['x'])
        eb_gm.set_attr(T=T_brine_in - 20)

        eco_dr.set_attr(Td_bp=-2)

        # main condenser
        air_cold.set_attr(p=p_amb, T=T_amb)
        air_hot.set_attr(T=15)

        # component parameters
        # turbines
        tur.set_attr(design=['eta_s'], offdesign=['cone', 'eta_s_char'])
        ls_valve.set_attr(pr=1, design=['pr'])
        # condensing
        ihe.set_attr(pr1=1, pr2=1, offdesign=['kA_char'])
        air_cond.set_attr(pr1=1,
                          pr2=1,
                          ttd_u=10,
                          design=['ttd_u'],
                          offdesign=['kA_char'])
        feed_water_pump.set_attr(design=['eta_s'], offdesign=['eta_s_char'])

        # steam generator
        evap_steam.set_attr(
            pr1=0.99,
            offdesign=['kA_char'])  # no pr2 due to drum pressure balance
        evap_brine.set_attr(
            pr1=1, ttd_l=10,
            offdesign=['kA_char'])  # no pr2 due to drum pressure balance
        eco.set_attr(pr1=1, pr2=1)
        geo_steam_pump.set_attr(eta_s=0.75,
                                design=['eta_s'],
                                offdesign=['eta_s_char'])

        self.nw.set_attr(iterinfo=False)
        self.nw.solve('design')
        self.nw.print_results()
        tur.set_attr(eta_s=0.9)
        feed_water_pump.set_attr(eta_s=0.75)
        tur_ihe.set_attr(h=None)
        fwp_ihe.set_attr(h=None)
        eb_gm.set_attr(T=None)
amb_out1 = sink('sink ambient 1')
amb_out2 = sink('sink ambient 2')

# ambient air system
sp = splitter('splitter')
fan = compressor('fan')

# consumer system

cd = condenser('condenser')
dhp = pump('district heating pump')
cons = heat_exchanger_simple('consumer')

# evaporator system

ves = valve('valve')
dr = drum('drum')
ev = heat_exchanger('evaporator')
su = heat_exchanger('superheater')
erp = pump('evaporator reciculation pump')

# compressor-system

cp1 = compressor('compressor 1')
cp2 = compressor('compressor 2')
ic = heat_exchanger('intercooler')

# %% connections

# consumer system
Beispiel #5
0
cf = sink('consumer feed flow')
lt_si = sink('low temp sink')
lt_so = source('low temp source')

# low temp water system
pu = pump('pump')

# consumer system

cd = condenser('condenser')
dhp = pump('district heating pump')
cons = heat_exchanger_simple('consumer')

# evaporator system

va = valve('valve')
dr = drum('drum')
ev = heat_exchanger('evaporator')
erp = pump('evaporator reciculation pump')

# compressor-system

cp = compressor('compressor')

# %% connections

# consumer system

c_in_cd = connection(cc, 'out1', cd, 'in1')

cb_dhp = connection(cb, 'out1', dhp, 'in1')
Beispiel #6
0
class HeatPump(object):
    # define the structure of heat pump

    # %% network

    nw = network(fluids=['water', 'NH3', 'air'],
                 T_unit='C',
                 p_unit='bar',
                 h_unit='kJ / kg',
                 m_unit='kg / s')

    # %% components

    # sources & sinks

    cc = cycle_closer('coolant cycle closer')
    cb = source('consumer back flow')
    cf = sink('consumer feed flow')
    amb = source('ambient air')
    amb_out1 = sink('sink ambient 1')
    amb_out2 = sink('sink ambient 2')

    # ambient air system

    sp = splitter('splitter')
    pu = pump('pump')

    # consumer system

    cd = condenser('condenser')
    dhp = pump('district heating pump')
    cons = heat_exchanger_simple('consumer')

    # evaporator system

    ves = valve('valve')
    dr = drum('drum')
    ev = heat_exchanger('evaporator')
    su = heat_exchanger('superheater')
    erp = pump('evaporator reciculation pump')

    # compressor-system

    cp1 = compressor('compressor 1')
    cp2 = compressor('compressor 2')
    ic = heat_exchanger('intercooler')

    # %% connections

    # consumer system

    c_in_cd = connection(cc, 'out1', cd, 'in1')
    cb_dhp = connection(cb, 'out1', dhp, 'in1')
    dhp_cd = connection(dhp, 'out1', cd, 'in2')
    cd_cons = connection(cd, 'out2', cons, 'in1')
    cons_cf = connection(cons, 'out1', cf, 'in1')
    nw.add_conns(c_in_cd, cb_dhp, dhp_cd, cd_cons, cons_cf)

    # connection condenser - evaporator system

    cd_ves = connection(cd, 'out1', ves, 'in1')
    nw.add_conns(cd_ves)

    # evaporator system

    ves_dr = connection(ves, 'out1', dr, 'in1')
    dr_erp = connection(dr, 'out1', erp, 'in1')
    erp_ev = connection(erp, 'out1', ev, 'in2')
    ev_dr = connection(ev, 'out2', dr, 'in2')
    dr_su = connection(dr, 'out2', su, 'in2')
    nw.add_conns(ves_dr, dr_erp, erp_ev, ev_dr, dr_su)
    amb_p = connection(amb, 'out1', pu, 'in1')
    p_sp = connection(pu, 'out1', sp, 'in1')
    sp_su = connection(sp, 'out1', su, 'in1')
    su_ev = connection(su, 'out1', ev, 'in1')
    ev_amb_out = connection(ev, 'out1', amb_out1, 'in1')
    nw.add_conns(amb_p, p_sp, sp_su, su_ev, ev_amb_out)

    # connection evaporator system - compressor system

    su_cp1 = connection(su, 'out2', cp1, 'in1')
    nw.add_conns(su_cp1)

    # compressor-system

    cp1_he = connection(cp1, 'out1', ic, 'in1')
    he_cp2 = connection(ic, 'out1', cp2, 'in1')
    cp2_c_out = connection(cp2, 'out1', cc, 'in1')
    sp_ic = connection(sp, 'out2', ic, 'in2')
    ic_out = connection(ic, 'out2', amb_out2, 'in1')
    nw.add_conns(cp1_he, he_cp2, sp_ic, ic_out, cp2_c_out)

    def __init__(self, q, eff, Temp):
        r"""
        :param Temp:
        :param q: q output
        :param eff: efficient of each part in pump
        """
        self.q = q
        self.eff = eff
        self.Temp = Temp

    def caculation(self):
        self.set_attr()

        HeatPump.nw.solve('design')
        P = [
            HeatPump.cp1.P.val, HeatPump.cp2.P.val, HeatPump.erp.P.val,
            HeatPump.pu.P.val
        ]
        P_total = sum(map(abs, P))
        P = list(map(abs, P))

        COP = self.q / P_total
        # T = [HeatPump.su_cp1.T.val, HeatPump.cp2_c_out.T.val, HeatPump.cd_ves.T.val, HeatPump.su_ev.T.val]
        # p = [HeatPump.su_cp1.p.val, HeatPump.cp2_c_out.p.val, HeatPump.cd_ves.p.val, HeatPump.su_ev.p.val,
        #      HeatPump.cp1_he.p.val]

        return P, P_total, COP

    def set_attr(self):
        r"""
        # %% set the attribution of the heat pump
        :return: heat output of the heat pump
        """

        HeatPump.cd.set_attr(pr1=0.99,
                             pr2=0.99,
                             ttd_u=15,
                             design=['pr2', 'ttd_u'],
                             offdesign=['zeta2', 'kA'])
        HeatPump.dhp.set_attr(eta_s=self.eff,
                              design=['eta_s'],
                              offdesign=['eta_s_char'])
        HeatPump.cons.set_attr(pr=0.99, design=['pr'], offdesign=['zeta'])

        # water pump

        HeatPump.pu.set_attr(eta_s=self.eff,
                             design=['eta_s'],
                             offdesign=['eta_s_char'])

        # evaporator system

        kA_char1 = ldc('heat exchanger', 'kA_char1', 'DEFAULT', char_line)
        kA_char2 = ldc('heat exchanger', 'kA_char2', 'EVAPORATING FLUID',
                       char_line)
        HeatPump.ev.set_attr(pr1=0.98,
                             pr2=0.99,
                             ttd_l=5,
                             kA_char1=kA_char1,
                             kA_char2=kA_char2,
                             design=['pr1', 'ttd_l'],
                             offdesign=['zeta1', 'kA'])

        HeatPump.su.set_attr(pr1=0.98,
                             pr2=0.99,
                             ttd_u=2,
                             design=['pr1', 'pr2', 'ttd_u'],
                             offdesign=['zeta1', 'zeta2', 'kA'])

        HeatPump.erp.set_attr(eta_s=self.eff,
                              design=['eta_s'],
                              offdesign=['eta_s_char'])

        # compressor system

        HeatPump.cp1.set_attr(eta_s=self.eff,
                              design=['eta_s'],
                              offdesign=['eta_s_char'])
        HeatPump.cp2.set_attr(eta_s=self.eff,
                              pr=3,
                              design=['eta_s'],
                              offdesign=['eta_s_char'])
        HeatPump.ic.set_attr(pr1=0.99,
                             pr2=0.98,
                             design=['pr1', 'pr2'],
                             offdesign=['zeta1', 'zeta2', 'kA'])

        # %% connection parametrization

        # condenser system

        HeatPump.c_in_cd.set_attr(fluid={'air': 0, 'NH3': 1, 'water': 0})
        HeatPump.cb_dhp.set_attr(T=20,
                                 p=10,
                                 fluid={
                                     'air': 0,
                                     'NH3': 0,
                                     'water': 1
                                 })
        HeatPump.cd_cons.set_attr(T=self.Temp)
        HeatPump.cons_cf.set_attr(h=ref(HeatPump.cb_dhp, 1, 0),
                                  p=ref(HeatPump.cb_dhp, 1, 0))

        # evaporator system cold side

        HeatPump.erp_ev.set_attr(m=ref(HeatPump.ves_dr, 1.25, 0), p0=5)
        HeatPump.su_cp1.set_attr(p0=5, h0=1700)

        # evaporator system hot side

        # pumping at constant rate in partload

        HeatPump.amb_p.set_attr(T=12,
                                p=2,
                                fluid={
                                    'air': 0,
                                    'NH3': 0,
                                    'water': 1
                                },
                                offdesign=['v'])
        HeatPump.sp_su.set_attr(offdesign=['v'])
        HeatPump.ev_amb_out.set_attr(p=2, T=9, design=['T'])

        # compressor-system

        HeatPump.he_cp2.set_attr(Td_bp=5, p0=20, design=['Td_bp'])
        HeatPump.ic_out.set_attr(T=15, design=['T'])

        # %% key paramter

        HeatPump.cons.set_attr(Q=self.q)
Beispiel #7
0
T_brine_out = 69.1

# basic network
nw = network(fluids=fluids)
nw.set_attr(p_unit='bar', T_unit='C', h_unit='kJ / kg')

# main components
cond1 = condenser('condenser 1')
cond2 = condenser('condenser 2')
ihe1 = heat_exchanger('internal heat exchanger 1')
ihe2 = heat_exchanger('internal heat exchanger 2')
pu1 = pump('feeding pump 1')
pu2 = pump('feeding pump 2')
turb1 = turbine('turb 1')
turb2 = turbine('turb 2')
val1 = valve('control valve 1')
val2 = valve('control valve 2')

spl = splitter('main cycle splitter')
mer = merge('main cycle merge')

preh = heat_exchanger('preheater')
evap = heat_exchanger('evaporator')

# cooling air
source_ca_1 = source('cooling air source 1')
sink_ca_1 = sink('cooling air sink 1')
source_ca_2 = source('cooling air source 2')
sink_ca_2 = sink('cooling air sink 2')

#brine
Beispiel #8
0
# steam turbine part
fs_source = source('Frischdampf')
hp_turbine = turbine('Hochdruck Turbine')
splitter_1 = splitter('splitter hp-extraction')

lp_turbine = turbine('low pressure turbine')
merge = merge('Merge vor Kondensator')
condenser_stp = condenser('Kondensator')
pump = pump('Speisewasserpumpe')

# DH Network
dh_source = source('District Heating source')
dh_sink = sink('dh sink')

valve_1 = valve('valve 1')
dh_heater_2 = heat_exchanger('Dh_heater_2')
valve_2 = valve('valve 2')

dh_heater = condenser('dh heater 1')

# Kuehlwasser
cw_source = source('Kuehlwasser Einlass')
cw_sink = sink('Kuehlwasser Austritt')

# vorläufige ZU Source und Sink
w = source('ZU Dampf Kalt')
z = sink('ZU Dampf Warm')

# Frischdampf-Senke
fs_sink = sink('Frischdampf Senke')
Beispiel #9
0
from tespy.connections import connection, bus, ref

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# %% network

fluids = ['water']

nw = network(fluids=fluids, p_unit='bar', T_unit='C', h_unit='kJ / kg')

# %% components

# turbine part
valve_turb = valve('turbine inlet valve')
turbine_hp = turbine('high pressure turbine')
split = splitter('extraction splitter')
turbine_lp = turbine('low pressure turbine')

# condenser and preheater
cond = condenser('condenser')
preheater = condenser('preheater')
merge_ws = merge('waste steam merge')
valve_pre = valve('preheater valve')

# feed water
pump = pump('pump')
steam_generator = heat_exchanger_simple('steam generator')

closer = cycle_closer('cycle closer')
Beispiel #10
0
fluids = ['water']

nw = network(fluids=fluids, p_unit='bar', T_unit='C', h_unit='kJ / kg')

# %% components

# turbine part
turb_hp = turbine('high pressure turbine')
split = splitter('extraction splitter')
turb_lp = turbine('low pressure turbine')

# condenser and preheater
cond = condenser('condenser')
preheat = condenser('preheater')
mer = merge('waste steam merge')
val = valve('valve')

# feed water
pu = pump('pump')
sg = heat_exchanger_simple('steam generator')

closer = cycle_closer('cycle closer')

# source and sink for cooling water
dh_in = source('district heating backflow')
dh_out = sink('district heating feedflow')

# %% connections

# turbine part
cc_turb_hp = connection(closer, 'out1', turb_hp, 'in1')