# -*- coding: utf-8 -*-
"""
pumps
"""
from __future__ import division
import os
import pandas as pd
from scipy.interpolate import interp1d
import numpy as np
__author__ = "Thuy-An Nguyen"
__copyright__ = "Copyright 2015, Architecture and Building Systems - ETH Zurich"
__credits__ = ["Thuy-An Nguyen", "Tim Vollrath", "Jimeno A. Fonseca"]
__license__ = "MIT"
__version__ = "0.1"
__maintainer__ = "Daren Thomas"
__email__ = "cea@arch.ethz.ch"
__status__ = "Production"
# operation and total costs
[docs]def Pump_operation(P_design):
"""
Modeled after:
05_merkblatt_wirtschaftlichkeit_14.pdf
23_merkblatt_pumpen_web.pdf
ER_2010_11_Heizungspumpen.pdf
MerkblattPreiseFU2010_2011.pdf
MerkblattPreiseMotoren2010_2011.pdf
P_design : float
Load of time step
eta_el : float
electric efficiency of Pumping operation in abs. numbers (e.g. 0.93)
"""
x = [0.5, 0.75, 1.1, 1.5, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18, 22, 30, 37, 45, 55, 75, 90, 110, 132, 160, 200, 220] # Nominal load in kW
y = [83, 83.5, 84, 85.2, 86.8, 87.8, 88.8, 89.5, 90.5, 91.5, 92.2, 92.6, 93, 93.6, 93.9, 94.3, 94.6, 95, 95.2, 95.4, 95.6, 95.9, 96,96] # efficiency in %
# do the interpolation
eff_of_Pmax = interp1d(x, y, kind='cubic')
eta_motor = eff_of_Pmax(float(P_design) / float(100))
eta_pump_fluid = 0.8
eta_pumping = eta_pump_fluid * eta_motor
return eta_pumping, eta_pump_fluid, eta_motor
[docs]def calc_Ctot_pump(dicoSupply, buildList, network_results_folder, ntwFeat, gV):
"""
Computes the total pump investment cost
:type dicoSupply : class context
:type buildList : list
:param buildList: list of buildings in the district
:type network_results_folder : string
:param network_results_folder: path to network results folder
:type ntwFeat : class ntwFeatures
:rtype pumpCosts : float
:returns pumpCosts: pumping cost
"""
pumpCosts = 0
#nBuild = dicoSupply.nBuildingsConnected
#ntot = len(buildList)
os.chdir(network_results_folder)
if 1:
pumpCosts = 0
#nBuild = dicoSupply.nBuildingsConnected
#ntot = len(buildList)
os.chdir(network_results_folder)
df = pd.read_csv(dicoSupply.NETWORK_DATA_FILE, usecols=["mdot_DH_netw_total"])
mdotA = np.array(df)
mdotnMax = np.amax(mdotA)
#mdot0Max = np.amax( np.array( pd.read_csv("Network_summary_result_all.csv", usecols=["mdot_heat_netw_total"]) ) )
for i in range(int(np.shape(mdotA)[0])):
deltaP = 2* (104.81 * mdotA[i][0] + 59016)
pumpCosts += deltaP * mdotA[i][0] / 1000 * gV.ELEC_PRICE / gV.etaPump
deltaPmax = ntwFeat.DeltaP_DHN
investCosts = calc_Cinv_pump(deltaPmax, mdotnMax, gV.etaPump, gV) # investment of Machinery
pumpCosts += investCosts
print pumpCosts, " CHF - pump costs in pumps.py"
return pumpCosts
[docs]def Pump_Cost(deltaP, mdot, eta_pumping, gV):
"""
Calculates the cost of a pumping device.
if the nominal load (electric) > 375kW, a new pump is installed
if the nominal load (electric) < 500W, a pump with Pel_design = 500W is assumed
Investment costs are calculated upon the life time of a GHP (20y) and a GHP- related interest rate of 6%
:type deltaP : float
:param deltaP: nominal pressure drop that has to be overcome with the pump
:type mdot : float
:param mdot: nominal mass flow
:type eta_pumping : float
:param pump efficiency: (set 0.8 as standard value, eta = E_pumping / E_elec)
:rtype InvCa : float
:returns InvCa: annualized investment costs in CHF/year
"""
E_pumping_required = mdot * deltaP /gV.rho_60
P_motor_tot = E_pumping_required / eta_pumping
PmaxPumpkW = 375.0
PpumpMinkW = 0.5
nPumps = int(np.ceil(P_motor_tot / 1000.0 / PmaxPumpkW))
PpumpArray = np.zeros((nPumps))
PpumpRemain = P_motor_tot
#if PpumpRemain < PpumpMinkW * 1000:
# PpumpRemain = PpumpMinkW * 1000
x = [0.4999, 0.75, 1.1, 1.5, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18.5, 22, 30, 37, 45, 55, 75, 90, 110, 132, 160, 200, 220, 260, 315, 335, 375] # Nominal load in kW
y = [630, 580, 500, 420, 350, 315, 285, 260, 240, 220, 210, 205, 195, 190, 185, 182, 180, 176, 175, 174, 173, 170, 169, 168, 167, 165, 162, 161.9] # efficiency in %
# do the interpolation
x1 = [0.4999, 0.75, 1.1, 1.5, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18.5, 22, 30, 37, 45, 55, 75, 90, 110, 132, 160, 200, 220, 260, 315, 335, 375] # Nominal load in kW
y1 = [720, 680, 585, 425, 330, 275, 220, 195, 180, 150, 145, 143, 135, 120, 115, 114, 110, 100, 90, 88, 85, 80, 75, 74, 74, 73, 72, 71.9] # efficiency in %
InvC_mot= interp1d(x, y, kind='cubic')
InvC_VFC = interp1d(x1, y1, kind='cubic')
InvC = 0.0
InvCa = 0.0
for pump_i in range(nPumps):
# calculate pump nominal capacity
PpumpArray[pump_i] = min(PpumpRemain, PmaxPumpkW*1000)
if PpumpArray[pump_i] < PpumpMinkW * 1000:
PpumpArray[pump_i] = PpumpMinkW * 1000
PpumpRemain -= PpumpArray[pump_i]
# Calculate cost
InvC += InvC_mot(PpumpArray[pump_i]/1000.0) + InvC_VFC(PpumpArray[pump_i]/1000.0)
InvCa += InvC * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nHP / ((1+gV.GHP_i) ** gV.GHP_nHP - 1)
return InvCa
# investment and maintenance costs
[docs]def calc_Cinv_pump(deltaP, mdot, eta_pumping, gV):
"""
Calculates the cost of a pumping device.
if the nominal load (electric) > 375kW, a new pump is installed
if the nominal load (electric) < 500W, a pump with Pel_design = 500W is assumed
Investement costs are calculated upon the life time of a GHP (20y) and a GHP- related interest rate of 6%
:type deltaP : float
:param deltaP: nominal pressure drop that has to be overcome with the pump
:type mdot : float
:param mdot: nominal mass flow
:type eta_pumping : float
:param pump efficiency: (set 0.8 as standard value, eta = E_pumping / E_elec)
:rtype InvC_return : float
:returns InvC_return: total investment Cost in CHF
:rtype InvCa : float
:returns InvCa: annualized investment costs in CHF/year
"""
E_pumping_required = mdot * deltaP / gV.rho_60
P_motor_tot = E_pumping_required / eta_pumping # electricty to run the motor
PmaxPumpkW = 375.0
PpumpMinkW = 0.5
print P_motor_tot
print PmaxPumpkW
nPumps = int( np.ceil ( P_motor_tot / 1000.0 / PmaxPumpkW))
# if the nominal load (electric) > 375kW, a new pump is installed
print nPumps," nPumps"
PpumpArray = np.zeros((nPumps))
PpumpRemain = P_motor_tot
#if PpumpRemain < PpumpMinkW * 1000:
# PpumpRemain = PpumpMinkW * 1000
x = [0.4999, 0.75, 1.1, 1.5, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18.5, 22, 30, 37, 45, 55, 75, 90, 110, 132, 160, 200, 220, 260, 315, 335, 375] # Nominal load in kW
y = [630, 580, 500, 420, 350, 315, 285, 260, 240, 220, 210, 205, 195, 190, 185, 182, 180, 176, 175, 174, 173, 170, 169, 168, 167, 165, 162, 161.9] # efficiency in %
# do the interpolation
x1 = [0.4999, 0.75, 1.1, 1.5, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18.5, 22, 30, 37, 45, 55, 75, 90, 110, 132, 160, 200, 220, 260, 315, 335, 375] # Nominal load in kW
y1 = [720, 680, 585, 425, 330, 275, 220, 195, 180, 150, 145, 143, 135, 120, 115, 114, 110, 100, 90, 88, 85, 80, 75, 74, 74, 73, 72, 71.9] # efficiency in %
InvC_mot= interp1d(x, y, kind='cubic')
InvC_VFC = interp1d(x1, y1, kind='cubic')
InvC = 0.0
InvCa = 0.0
for pump_i in range(nPumps):
# calculate pump nominal capacity
PpumpArray[pump_i] = min(PpumpRemain, PmaxPumpkW*1000)
if PpumpArray[pump_i] < PpumpMinkW * 1000:
PpumpArray[pump_i] = PpumpMinkW * 1000
PpumpRemain -= PpumpArray[pump_i]
# Calculate cost
InvC += InvC_mot(PpumpArray[pump_i]/1000.0) + InvC_VFC(PpumpArray[pump_i]/1000.0)
InvCa += InvC * gV.GHP_i * (1+ gV.GHP_i) ** gV.GHP_nHP / ((1+gV.GHP_i) ** gV.GHP_nHP - 1)
return InvCa