0% found this document useful (0 votes)
140 views

Python Code For Simple Tank

The document defines two classes - Tank and Flash. The Tank class models storage tanks and defines properties like volume, cost, etc. based on tank dimensions. The Flash class models flash drums and similarly defines properties like volume, weight, cost based on flash drum specifications. Sample objects of each class are created and properties printed to demonstrate their usage.

Uploaded by

Sanjiv Ch
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
140 views

Python Code For Simple Tank

The document defines two classes - Tank and Flash. The Tank class models storage tanks and defines properties like volume, cost, etc. based on tank dimensions. The Flash class models flash drums and similarly defines properties like volume, weight, cost based on flash drum specifications. Sample objects of each class are created and properties printed to demonstrate their usage.

Uploaded by

Sanjiv Ch
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

#!

/usr/bin/python # -*- coding: utf-8 -*-

###Modulo que define los equipos de almacenamiento

from math import log, exp, pi

from lib import unidades from lib.corriente import Corriente from parents import equipment

class Tank(equipment): """Clase que define los tanques de almacenamiento""" title="Deposito de almacenamiento" icon="" help=""

def __call__(self, **kwargs):

self.D=1. self.L=3. self.volumen(3) self.Coste(1.7, 0)

def volumen(self, cabeza):

""" cabeza: tipo de cabeza del recipiente 0 - Ellipsoidal 1 - Hemispherical 2 - Bumped 3 - Flat """ V_carcasa=pi/4*self.D**2*self.L

if cabeza==0: V_cabeza=4./3*pi/8*self.D**3 elif cabeza==1: V_cabeza=4./3*pi/8/2*self.D**3 elif cabeza==2: V_cabeza=0.215483/2*self.D**3 else: V_cabeza=0.

self.Volumen=unidades.Volume(V_carcasa+V_cabeza)

def coste(self, *args, **kwargs): """ material: 0 - Carbon steel 1 - Stainless steel 316 2 - Stainless steel 304

3 - Stainless steel 347 4 - Nickel 5 - Monel 6 - Inconel 7 - Zirconium 8 - Titanium 9 - Brick and rubber or brick and polyester-lined steel 10 - Rubber or lead-lined steel 11 - Polyester, fiberglass-reinforced 12 - Aluminum 13 - Copper 14 - Concrete """ self._indicesCoste(*args)

self.material=kwargs.get("material", 0)

V=self.Volumen.galUS

Fm=[1., 2.7, 2.4, 3.0, 3.5, 3.3, 3.8, 11.0, 11.0, 2.75, 1.9, 0.32, 2.7, 2.3, 0.55][self.material]

if V<=21000: C=Fm*exp(2.631+1.3673*log(V)-0.06309*log(V)**2) else: C=Fm*exp(11.662+0.6104*log(V)-0.04536*log(V)**2)

self.C_adq=unidades.Currency(C*self.Current_index/self.Base_index)

self.C_inst=unidades.Currency(self.C_adq*self.f_install)

class Flash(equipment): """Clase que modela los tambores flash.""" title="Tambor Flash" icon=":/equip/equip/flash.png" help=""

def __call__(self, entrada): self.D=unidades.Length(0) self.L=unidades.Length(0) self.reborde=0 self.espesor=0 self.espesor_cabeza=0

self.entrada=entrada self.SalidaVapor= Corriente(entrada.T, entrada.P.atm, entrada.caudalmasicoGas.kgh, entrada.Gas, flash=False, x=1) self.SalidaLiquido= Corriente(entrada.T, entrada.P.atm, entrada.caudalmasicoLiquido.kgh, entrada.Liquido, flash=False, x=0)

def volumen(self): V_carcasa=pi/4*self.D**2*self.L

if self.cabeza==0: V_cabeza=4./3*pi/8*self.D**3

elif self.cabeza==1: V_cabeza=4./3*pi/8/2*self.D**3 elif self.cabeza==2: V_cabeza=0.215483/2*self.D**3 else: V_cabeza=0.

self.Volumen=Volume(V_carcasa+V_cabeza)

def peso(self): W_carcasa=pi/4*(self.diametro_externo**2-self.D**2)*self.L*self.densidad

if self.cabeza==3: W_cabeza=pi/4*self.D**2*self.espesor_cabeza*self.densidad else: ratio=self.diametro_externo/self.espesor_cabeza if self.cabeza==0: if ratio>20: hb=1.24 else: hb=1.3 elif self.cabeza==2: if ratio>50: hb=1.09 elif ratio>30: hb=1.11

else: hb=1.15 else: if ratio>30: hb=1.6 elif ratio>18: hb=1.65 else: hb=1.70 Do=hb*self.diametro_externo+2*self.reborde W_cabeza=pi/4*Do**2*self.espesor_cabeza*self.densidad

self.Peso=Mass(W_carcasa+2*W_cabeza)

def Coste(self, *args, **kwargs): """ tipo: 0 - Horizontal 1 - Vertical material: 0 - Carbon steel 1 - Stainless steel 304 2 - Stainless steel 316 3 - Carpenter 20CB-3 4 - Nickel 200 5 - Monel 400

6 - Inconel 600 7 - Incoloy 825 8 - Titanium densidad: densidad del material diametro: diametro recipiente longitud espesor: espesor de la cubierta cabeza: tipo de cabeza del recipiente 0 - Ellipsoidal 1 - Hemispherical 2 - Bumped 3 - Flat espesor_cabeza: espesor de la cubierta en la cabeza reborde: longitud reborde """ self._indicesCoste(*args)

self.tipo=kwargs.get("tipo", 0) self.material=kwargs.get("material", 0) densidad=kwargs.get("subtipo", 0) if densidad: self.densidad=unidades.Density(densidad) else: self.densidad=unidades.Density(501, "lbft3") #La densidad del acero inoxidable 304 self.D=unidades.Length(kwargs.get("diametro", 0)) self.L=unidades.Length(kwargs.get("subtipo", 0)) self.espesor=unidades.Length(kwargs.get("espesor", 0))

self.cabeza=kwargs.get("cabeza", 0) espesor_cabeza=kwargs.get("espesor_cabeza", 0) if espesor_cabeza: self.espesor_cabeza=unidades.Length(espesor_cabeza) else: self.espesor_cabeza=unidades.Length(espesor) self.reborde=unidades.Length(kwargs.get("reborde", 0))

self.diametro_externo=Length(diametro+2*espesor)

self.volumen() self.peso()

V=self.Volumen.galUS D=self.D.ft L=self.L.ft W=self.Peso.lb

Fm=[1., 1.7, 2.1, 3.2, 5.4, 3.6, 3.9, 3.7, 7.7][self.material]

if self.tipo==0: Cb=exp(8.571-0.233*log(W)+0.04333*log(W)**2) Ca=1370*D**0.2029 else: Cb=exp(9.1-0.2889*log(W)+0.04576*log(W)**2) Ca=246*D**0.7396*L**0.7068

C=Fm*Cb+Ca

self.C_adq=unidades.Currency(C*self.Current_index/self.Base_index) self.C_inst=unidades.Currency(self.C_adq*self.f_install)

if __name__ == '__main__':

# tanque=Tank() # print tanque.C_inst # print tanque.Volumen

flash=Vessel() flash.Coste(1.7, 0, 0, 3, 1, 2, 0.05, 0.05, 0) print flash.C_adq print flash.Volumen print flash.Peso

You might also like