#*---------------------------------------------------------------------- * File containg models of columns: distillation, stripping, absorbers * rectifier, .... * * The default nomenclature is: * Type_Column_reboilertype_condensertyper * * where: * Type = refluxed or reboiled or section * Column = Stripping, Absorption, Rectifier, Distillation * Reboiler type (if exists) = kettle or thermosyphon * Condenser type (if exists) = with subccoling or without subcooling * *----------------------------------------------------------------------- * Author: Paula B. Staudt * $Id: column.mso 1 2006-06-20 17:33:53Z rafael $ *---------------------------------------------------------------------*# using "tray"; using "reboiler"; using "condenser"; using "mixers_splitters/splitter"; using "tank"; using "pressure_changers/pump"; #*---------------------------------------------------------------------- * Model of a column section with: * - NTrays=number of trays trays. * *---------------------------------------------------------------------*# Model Section_Column PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; EQUATIONS "Pressure Drop through the tray" trays([1:NTrays]).OutletV.F = (1 + tanh(1 * (trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P)))/2 * trays([1:NTrays]).Ah/trays([1:NTrays]).vV * sqrt(2*(trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P + 1e-8 * "atm") / (trays([1:NTrays]).alfa*trays([1:NTrays]).rhoV)); CONNECTIONS trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #*---------------------------------------------------------------------- * Model of a distillation column containing: * - NTrays like tray; * - a kettle reboiler; * - dymamic condenser; * - a splitter which separate reflux and distillate; * - a pump in reflux stream; *---------------------------------------------------------------------*# Model Distillation_kettle_cond PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenser; reb as reboiler; sp as splitter; pump1 as pump; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - cond.OutletL.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - cond.OutletL.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays([NTrays]).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to sp.Inlet; sp.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to reb.InletL; end #* ------------------------------------------------------------------- * Distillation Column model with: * * - NTrays like tray; * - a vessel in the bottom of column; * - a splitter who separate the bottom product and the stream to reboiler; * - steady state reboiler (thermosyphon); * - a steady state condenser with subcooling; * - a vessel drum (layed cilinder); * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Distillation_thermosyphon_subcooling PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenserSteady; reb as reboilerSteady; tbottom as tank; ttop as tank_cylindrical; spbottom as splitter; sptop as splitter; pump1 as pump; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - ttop.Outlet.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - ttop.Outlet.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to ttop.Inlet; ttop.Outlet to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to tbottom.Inlet; tbottom.Outlet to spbottom.Inlet; spbottom.Outlet2 to reb.InletL; end #* ------------------------------------------------------------------- * Distillation Column model with: * * - NTrays like tray; * - a vessel in the bottom of column; * - a splitter who separate the bottom product and the stream to reboiler; * - steady state reboiler (thermosyphon); * - a dynamic condenser without subcooling; * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Distillation_thermosyphon_cond PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenser; reb as reboilerSteady; tbottom as tank; spbottom as splitter; sptop as splitter; pump1 as pump; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - cond.OutletL.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - cond.OutletL.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to tbottom.Inlet; tbottom.Outlet to spbottom.Inlet; spbottom.Outlet2 to reb.InletL; end #* ------------------------------------------------------------------- * Distillation Column model with: * * - NTrays like tray; * - a kettle reboiler; * - a steady state condenser with subcooling; * - a vessel drum (layed cilinder); * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Distillation_kettle_subcooling PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenserSteady; reb as reboiler; ttop as tank_cylindrical; sptop as splitter; pump1 as pump; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - ttop.Outlet.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - ttop.Outlet.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to ttop.Inlet; ttop.Outlet to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to reb.InletL; end #*---------------------------------------------------------------------- * Model of a rectifier containing: * - NTrays like tray; * - dymamic condenser without subcooling; * - a splitter which separate reflux and distillate; * - a pump in reflux stream; *---------------------------------------------------------------------*# Model Rectifier PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenser; sp as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - cond.OutletL.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - cond.OutletL.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to sp.Inlet; sp.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #* ------------------------------------------------------------------- * Rectifier Column with: * * - NTrays like tray; * - a steady state condenser with subcooling; * - a vessel drum (layed cilinder); * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Rectifier_subcooling PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenserSteady; ttop as tank_cylindrical; sptop as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - ttop.Outlet.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - ttop.Outlet.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to ttop.Inlet; ttop.Outlet to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #*---------------------------------------------------------------------- * Model of a Refluxed Stripping column containing: * - NTrays like tray; * - dymamic condenser without subcooling; * - a splitter which separate reflux and distillate; * - a pump in reflux stream; *---------------------------------------------------------------------*# Model Refluxed_Stripping PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenser; sp as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - cond.OutletL.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - cond.OutletL.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to sp.Inlet; sp.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #* ------------------------------------------------------------------- * Refluxed Stripping Column with: * * - NTrays like tray; * - a steady state condenser (with subcooling); * - a vessel drum (layed cilinder); * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Refluxed_Stripping_subcooling PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenserSteady; ttop as tank_cylindrical; sptop as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - ttop.Outlet.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - ttop.Outlet.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to ttop.Inlet; ttop.Outlet to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #*---------------------------------------------------------------------- * Model of a Refluxed Absorption column containing: * - NTrays like tray; * - dymamic condenser without subcooling; * - a splitter which separate reflux and distillate; * - a pump in reflux stream; *---------------------------------------------------------------------*# Model Refluxed_Absorption PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenser; sp as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - cond.OutletL.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - cond.OutletL.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to sp.Inlet; sp.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #* ------------------------------------------------------------------- * Refluxed Absorption Column with: * * - NTrays like tray; * - a steady state condenser (with subcooling); * - a vessel drum (layed cilinder); * - a splitter which separate reflux and distillate; * - a pump in reflux stream. * * ------------------------------------------------------------------*# Model Refluxed_Absorption_subcooling PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; cond as condenserSteady; ttop as tank_cylindrical; sptop as splitter; pump1 as pump; EQUATIONS "Pressure Drop through the tray" trays(1).OutletV.F = (1 + tanh(1 * (trays(1).OutletV.P - ttop.Outlet.P)))/2 * trays(1).Ah/trays(1).vV * sqrt(2*(trays(1).OutletV.P - ttop.Outlet.P + 1e-8 * "atm") / (trays(1).alfa*trays(1).rhoV)); trays([2:NTrays]).OutletV.F = (1 + tanh(1 * (trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P)))/2 * trays([2:NTrays]).Ah/trays([2:NTrays]).vV * sqrt(2*(trays([2:NTrays]).OutletV.P - trays([2:NTrays]).InletL.P + 1e-8 * "atm") / (trays([2:NTrays]).alfa*trays([2:NTrays]).rhoV)); CONNECTIONS #vapor trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; trays(1).OutletV to cond.InletV; #liquid cond.OutletL to ttop.Inlet; ttop.Outlet to sptop.Inlet; sptop.Outlet2 to pump1.Inlet; pump1.Outlet to trays(1).InletL; trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; end #* ------------------------------------------------------------------- * Reboiled Stripping Column model with: * * - NTrays like tray; * - a kettle reboiler; * * ------------------------------------------------------------------*# Model Reboiled_Stripping_kettle PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; reb as reboiler; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays([1:NTrays]).OutletV.F = (1 + tanh(1 * (trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P)))/2 * trays([1:NTrays]).Ah/trays([1:NTrays]).vV * sqrt(2*(trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P + 1e-8 * "atm") / (trays([1:NTrays]).alfa*trays([1:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; #liquid trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to reb.InletL; end #* ------------------------------------------------------------------- * Reboiled Stripping Column model with: * * - NTrays like tray; * - a vessel in the bottom of column; * - a splitter which separate the bottom product and the stream to reboiler; * - steady state reboiler (thermosyphon); * * ------------------------------------------------------------------*# Model Reboiled_Stripping_thermosyphon PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; reb as reboilerSteady; spbottom as splitter; tbottom as tank; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays([1:NTrays]).OutletV.F = (1 + tanh(1 * (trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P)))/2 * trays([1:NTrays]).Ah/trays([1:NTrays]).vV * sqrt(2*(trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P + 1e-8 * "atm") / (trays([1:NTrays]).alfa*trays([1:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; #liquid trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to tbottom.Inlet; tbottom.Outlet to spbottom.Inlet; spbottom.Outlet2 to reb.InletL; end #* ------------------------------------------------------------------- * Reboiled Absorption Column model with: * * - NTrays like tray; * - a kettle reboiler; * * ------------------------------------------------------------------*# Model Reboiled_Absorption_kettle PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; reb as reboiler; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays([1:NTrays]).OutletV.F = (1 + tanh(1 * (trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P)))/2 * trays([1:NTrays]).Ah/trays([1:NTrays]).vV * sqrt(2*(trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P + 1e-8 * "atm") / (trays([1:NTrays]).alfa*trays([1:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; #liquid trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to reb.InletL; end #* ------------------------------------------------------------------- * Reboiled Absorption Column model with: * * - NTrays like tray; * - a vessel in the bottom of column; * - a splitter which separate the bottom product and the stream to reboiler; * - steady state reboiler (thermosyphon); * * ------------------------------------------------------------------*# Model Reboiled_Absorption_thermosyphon PARAMETERS ext PP as CalcObject; ext NComp as Integer; NTrays as Integer(Brief="Number of trays", Default=2); VARIABLES trays(NTrays) as tray; reb as reboilerSteady; spbottom as splitter; tbottom as tank; EQUATIONS if (reb.OutletV.P > reb.InletL.P) then "Pressure Drop through the tray" reb.OutletV.F = 34803 * "mm^2"/reb.vV * sqrt((reb.OutletV.P - trays(NTrays).OutletL.P) / (1.3*reb.rhoV) ); # para o modelo com 25 pratos, o beta do refervedor é 0.8. Para a coluna com 80, o beta é:1.3 else "Prato selado" reb.OutletV.F = 0.0 * "mol/s"; end "Pressure Drop through the tray" trays([1:NTrays]).OutletV.F = (1 + tanh(1 * (trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P)))/2 * trays([1:NTrays]).Ah/trays([1:NTrays]).vV * sqrt(2*(trays([1:NTrays]).OutletV.P - trays([1:NTrays]).InletL.P + 1e-8 * "atm") / (trays([1:NTrays]).alfa*trays([1:NTrays]).rhoV)); CONNECTIONS #vapor reb.OutletV to trays(NTrays).InletV; trays([2:NTrays]).OutletV to trays([1:NTrays-1]).InletV; #liquid trays([1:NTrays-1]).OutletL to trays([2:NTrays]).InletL; trays(NTrays).OutletL to tbottom.Inlet; tbottom.Outlet to spbottom.Inlet; spbottom.Outlet2 to reb.InletL; end