Source code for aguaclara.design.sed_tank

""" A sedimentation tank of an AguaClara water treatment plant

Example:
    >>> from aguaclara.design.sed_tank import *
    >>> sed_tank = SedimentationTank(q = 60 * u.L / u.s)
    >>> round(sed_tank.diffuser_hl, 5)
    <Quantity(0.00926, 'centimeter')>
"""
from aguaclara.core.units import u
import aguaclara.core.constants as con
import aguaclara.core.materials as mat
import aguaclara.core.pipes as pipe
from aguaclara.core import drills
import aguaclara.core.utility as ut
from aguaclara.design.component import Component
import aguaclara.core.physchem as pc
import aguaclara.core.head_loss as hl

import numpy as np
import math


[docs]class SedimentationTank(Component): """Design an AguaClara plant's sedimentation tank. An sedimentation tank's design relies on the sedimentation channel's design in the same plant, but assumed/default values may be used to design an sedimentation tank by itself. To design these components in tandem, use :class:`aguaclara.design.sed.Sedimentor`. Constants: - ``INLET_MAN_Q_RATIO (float)``: The ratio of the flow in the inlet manifold. - ``OUTLET_MAN_HL (float * u.cm)``: The headloss of the outlet manifold - ``JET_REVERSER_ND (float * u.inch)``: The nominal diameter of the jet reverser. - ``JET_PLANE_RATIO (float)``: The ratio for the jet plane - ``JET_REVERSER_TO_DIFFUSERS_H (float * u.cm)``: The height between the jet reverser and diffusers. - ``WALL_THICKNESS (float * u.m)``: The thickness of the sed tank walls - ``DIFFUSER_L (float * u.cm)``: The length of a diffuser. Design Inputs: - ``q (float * u.L / u.s)``: Plant flow rate (recommended, defaults to 20L/s) - ``temp (float * u.degC)``: Water temperature (recommended, defaults to 20°C) - ``vel_upflow (float * u.mm / u.s)``: Upflow velocity (optional, defaults to 1mm/s) - ``l_inner (float * u.m)``: The inner length (optional, defaults to 5.8m) - ``w_inner (float * u.inch)``: The inner width (optional, defaults to 42in.) - ``diffuser_vel_max (float * u.cm / u.s)``: The max velocity of a diffuser (optional, defaults to 44.29 cm/s) - ``diffuser_n (int)``:The nunber of diffusers (optional, defaults to 108) - ``diffuser_wall_thickness (float * u.inch)``: The thickness of the wall of a diffuser (optional, defaults to 1.17in.) - ``diffuser_sdr (int)``: The standard dimension ratio of a diffuser (optional, defaults to 41) - ``inlet_man_hl (float * u.cm)``: The headloss of the inlet manifold (optional, defaults to 1cm) - ``inlet_man_sdr (float)``: The standard dimension ratio of the inlet manifold (optional, defaults to 41) - ``jet_reverser_sdr (int)``: The standard dimension ratio of the jet reverser (optional, defaults to 26) - ``plate_settler_angle (float * u.deg)``: The angle of the plate settler (optional, defaults to 60°) - ``plate_settler_s (float * u.cm)``: Spacing in between plate settlers (optional, defaults to 2.5cm) - ``plate_settler_thickness (float * u.mm)``: Thickness of a plate settler (optional, defaults to 2mm) - ``plate_settler_cantilever_l_max (float * u.cm)``: The max length of the plate settler cantilever (optional, defaults to 20cm) - ``plate_settler_vel_capture (float * u.mm / u.s)``: The capture velocity of a plate settler (optional, defaults to 0.12mm/s) - ``outlet_man_orifice_hl (float * u.cm)``: The headloss of the orifices in the outlet manifold (optional, defaults to 4cm) - ``outlet_man_orifice_q_ratio_max (float)``: The max ratio of the flow rate for the orifices of the outlet manifold (optional, defaults to 0.8) - ``outlet_man_orifice_n_est (int)``: The estimated number of orifices for the outlet manifold (optional, defaults to 58) - ``outlet_man_sdr (int)``: The standard dimension ratio of the outlet manifold (optional, defaults to 41) - ``slope_angle (float * u.deg)``: The angle at the bottom of the sed tank (optional, defaults to 50°) - ``side_slope_to_floc_weir_h_min (float * u.cm)``: The minimum height between the side slope and the floc weir. (optional, defaults to 5cm) - ``sed_chan_w_outer (float * u.cm)``: The outer width of the sedimentation channel (optional, defaults to 60cm) - ``sed_chan_weir_thickness (float * u.cm)``: The thickness of the sedimentation channel weir (optional, defaults to 5cm) - ``floc_weir_to_plate_frame_h (float * u.cm)``: The height from the top of the floc weir to the plate settler frame (optional, defaults to 10cm) - ``hopper_slope_vertical_angle (float * u.deg)``: The angle of the hopper wall slopes to vertical (optional, defaults to 60°) """ INLET_MAN_Q_RATIO = 0.8 OUTLET_MAN_HL = 4. * u.cm JET_REVERSER_ND = 3. * u.inch JET_PLANE_RATIO = 0.0124 JET_REVERSER_TO_DIFFUSERS_H = 3.0* u.cm WALL_THICKNESS = 0.15 * u.m DIFFUSER_L = 15.0 * u.cm def __init__(self, **kwargs): self.vel_upflow=1.0 * u.mm / u.s self.l_inner=5.8 * u.m self.w_inner=42.0 * u.inch self.diffuser_vel_max=44.29 * u.cm / u.s self.diffuser_n=108 self.diffuser_wall_thickness=1.17 * u.inch self.diffuser_sdr=41 self.inlet_man_hl=1. * u.cm self.inlet_man_sdr = 41 self.jet_reverser_sdr = 26 self.plate_settler_angle=60.0 * u.deg self.plate_settler_s=2.5 * u.cm self.plate_settler_thickness=2.0 * u.mm self.plate_settler_cantilever_l_max=20.0 * u.cm self.plate_settler_vel_capture=0.12 * u.mm / u.s self.outlet_man_orifice_hl=4.0 * u.cm self.outlet_man_orifice_q_ratio_max=0.8 self.outlet_man_orifice_n_est = 58 self.outlet_man_sdr=41 self.slope_angle=50. * u.deg self.side_slope_to_floc_weir_h_min = 5.0 * u.cm self.sed_chan_w_outer = 60.0 * u.cm self.sed_chan_weir_thickness = 5.0 * u.cm self.floc_weir_to_plate_frame_h = 10.0 * u.cm self.hopper_slope_vertical_angle = 60.0 * u.deg super().__init__(**kwargs) @property def q_tank(self): """The flow rate present in the tank.""" q_tank = self.l_inner * self.w_inner * self.vel_upflow return q_tank.to(u.L / u.s) @property def diffuser_hl(self): """The headloss of the diffuser.""" return self.inlet_man_hl / self.diffuser_n @property def diffuser_vel(self): """The velocity of the diffuser""" diffuser_vel = np.sqrt(2 * con.GRAVITY * self.diffuser_hl) return diffuser_vel.to(u.mm / u.s) @property def diffuser_w_inner(self): """The inner width(neglecting walls) of the diffuser.""" diffuser_w_inner = self.w_inner * self.vel_upflow / self.diffuser_vel return diffuser_w_inner.to(u.cm) @property def diffuser_a(self): """The area of the diffuser""" diffuser_a = self.q_tank / (self.diffuser_vel * self.diffuser_n) return diffuser_a.to(u.cm ** 2) @property def inlet_man_v_max(self): """The maximumum velocity in the inlet manifold.""" vel_manifold_max = np.sqrt(4 * con.GRAVITY * self.diffuser_hl * (1 - self.INLET_MAN_Q_RATIO ** 2) / (self.INLET_MAN_Q_RATIO ** 2 + 1) ) return vel_manifold_max.to(u.m / u.s) @property def inlet_man_nd(self): """The nominal diameter of the inlet manifold""" diam_inner = np.sqrt(4 * self.q_tank / (np.pi * self.inlet_man_v_max)) inlet_man_nd = pipe.ND_SDR_available(diam_inner, self.inlet_man_sdr) return inlet_man_nd.to(u.cm) @property def outlet_man_nd(self): """The nominal diameter of the outlet manifold.""" outlet_man_nd = pc.manifold_nd( self.q_tank, self.OUTLET_MAN_HL, self.l_inner, self.outlet_man_orifice_q_ratio_max, pc.viscosity_kinematic_water(self.temp), mat.PVC_PIPE_ROUGH.to(u.m), hl.PIPE_EXIT_K_MINOR, self.outlet_man_orifice_n_est, self.outlet_man_sdr ) return outlet_man_nd @property def outlet_man_orifice_d(self): """The diameter of the orifices in the outlet manifold.""" Q_orifice = self.q_tank / self.outlet_man_orifice_n_est D_orifice = pc.diam_circle(Q_orifice/(con.VC_ORIFICE_RATIO * \ np.sqrt(2 * con.GRAVITY* self.outlet_man_orifice_hl))) return ut.ceil_nearest(D_orifice, drills.DRILL_BITS_D_METRIC) @property def plate_l(self): """The length of a plate in the plate settlers.""" L_sed_plate = ((self.plate_settler_s * ((self.vel_upflow / \ self.plate_settler_vel_capture) - 1) + self.plate_settler_thickness * ( self.vel_upflow / self.plate_settler_vel_capture)) / (np.sin(self.plate_settler_angle) * \ np.cos(self.plate_settler_angle)) ).to(u.m) return L_sed_plate @property def outlet_man_orifice_q(self): """The flow rate in the orifices of the outlet manifold.""" outlet_man_orifice_q = pc.flow_orifice_vert( self.outlet_man_orifice_d, self.outlet_man_orifice_hl, con.VC_ORIFICE_RATIO ) return outlet_man_orifice_q.to(u.L / u.s) @property def outlet_man_orifice_spacing(self): """The spacing between orifices on the outlet manifold.""" outlet_man_orifice_spacing = ( self.l_inner - pipe.socket_depth(self.outlet_man_nd) - pipe.cap_thickness(self.outlet_man_nd) - self.outlet_man_orifice_d ) / ((self.q_tank / self.outlet_man_orifice_q) - 1) return outlet_man_orifice_spacing @property def outlet_man_orifice_n(self): """The number of orifices on the outlet manifold.""" outlet_orifice_n = math.floor( ( self.l_inner - pipe.socket_depth(self.outlet_man_nd) - pipe.cap_thickness(self.outlet_man_nd) - self.outlet_man_orifice_d ) / self.outlet_man_orifice_spacing ) + 1 return outlet_orifice_n @property def outlet_orifice_hl(self): """The headloss for the orifices of the outlet""" outlet_orifice_hl = pc.head_orifice( self.outlet_man_nd, con.VC_ORIFICE_RATIO, self.q_tank / self.outlet_man_orifice_n ) return outlet_orifice_hl.to(u.mm) @property def side_slopes_w(self): """The width of the side slopes.""" side_slopes_w = ( self.w_inner - pipe.ID_SDR(self.JET_REVERSER_ND, self.jet_reverser_sdr) ) / 2 return side_slopes_w.to(u.m) @property def side_slopes_h(self): """The height of the side slopes.""" side_slopes_h = np.tan(self.slope_angle) * self.side_slopes_w return side_slopes_h.to(u.m) @property def inlet_man_h(self): """The height of the inlet manifold height.""" inlet_man_h = self.JET_REVERSER_TO_DIFFUSERS_H + self.DIFFUSER_L + \ ( pipe.OD(self.inlet_man_nd)/ 2 ) return inlet_man_h @property def floc_weir_h(self): """The height of the floc weir.""" floc_weir_h = max( self.inlet_man_h + (pipe.OD(self.inlet_man_nd) / 2) + \ mat.CONCRETE_THICKNESS_MIN, self.side_slopes_h + self.side_slope_to_floc_weir_h_min ) return floc_weir_h