Source code for biosteam.facilities._cooling_tower

# -*- coding: utf-8 -*-
# BioSTEAM: The Biorefinery Simulation and Techno-Economic Analysis Modules
# Copyright (C) 2020-2023, Yoel Cortes-Pena <yoelcortes@gmail.com>
# 
# This module is under the UIUC open-source license. See 
# github.com/BioSTEAMDevelopmentGroup/biosteam/blob/master/LICENSE.txt
# for license details.
"""
"""
import biosteam as bst
cost = bst.decorators.cost

__all__ = ('CoolingTower',)


# %%

[docs] @cost('Flow rate', 'Cooling water pump', S=609624, kW=1021, cost=283671, CE=551, n=0.8, BM=3.1) @cost('Flow rate', 'Cooling tower', S=557183, kW=1598, cost=1375e3, CE=551, n=0.7, BM=1.5) class CoolingTower(bst.Facility): """ Create a cooling tower with capital cost and power based on the flow rate of cooling water as in [1]_. Parameters ---------- ID : str, optional Unit ID. References ---------- .. [1] Humbird, D., Davis, R., Tao, L., Kinchin, C., Hsu, D., Aden, A., Dudgeon, D. (2011). Process Design and Economics for Biochemical Conversion of Lignocellulosic Biomass to Ethanol: Dilute-Acid Pretreatment and Enzymatic Hydrolysis of Corn Stover (No. NREL/TP-5100-47764, 1013269). https://doi.org/10.2172/1013269 """ ticket_name = 'CT' network_priority = 0 _units = {'Flow rate': 'kmol/hr'} _N_ins = 3 _N_outs = 3 evaporation = 0.01 blowdown = 0.001 def __init__(self, ID='', agent=None): self.agent = cooling_water = agent or bst.settings.get_cooling_agent('cooling_water') self.makeup_water = makeup_water = cooling_water.to_stream('cooling_tower_makeup_water') return_cooling_water = cooling_water.to_stream() cooling_water = return_cooling_water.flow_proxy() cooling_tower_chemicals = return_cooling_water.copy('cooling_tower_chemicals') cooling_tower_chemicals.price = 3. blowdown = makeup_water.copy('cooling_tower_blowdown') evaporation = makeup_water.copy('cooling_tower_evaporation') super().__init__(ID, (return_cooling_water, makeup_water, cooling_tower_chemicals), (cooling_water, blowdown, evaporation), thermo=cooling_water.thermo) self.cooling_water_utilities = set() @property def return_cooling_water(self): return self.ins[0] @property def cooling_water(self): return self.outs[0] @property def blowdown_water(self): return self.outs[1] @property def evaporation_water(self): return self.outs[2] def _run(self): pass def _load_utility_agents(self): cwu = self.cooling_water_utilities ID = self.agent.ID cwu.clear() for u in self.other_units: if u is self: continue for hu in u.heat_utilities: agent = hu.agent if agent and agent.ID == ID: cwu.add(hu) def _design(self): self._load_utility_agents() cwu = self.cooling_water_utilities return_cooling_water, makeup_water, cooling_tower_chemicals = self._ins hu = self.create_heat_utility() self._load_utility_agents() hu.mix_from(cwu) return_cooling_water.imol['7732-18-5'] = \ self.design_results['Flow rate'] = \ cooling_tower_chemicals.imass['Water'] = 2 * return_cooling_water.F_mol / 4.4e+05 self.return_cooling_water.T = hu.inlet_utility_stream.T self.evaporation_water.mol[0] = evaporation = hu.flow * self.evaporation self.blowdown_water.mol[0] = blowdown = hu.flow * self.blowdown self.makeup_water.mol[0] = evaporation + blowdown self.evaporation_water.T = self.cooling_water.T = self.blowdown_water.T = hu.outlet_utility_stream.T self.evaporation_water.phase = 'g' hu.reverse()