modelTrayColumn

Extends from ThermalSeparation.Icons.Color.TrayColumn, ThermalSeparation.Components.Columns.BaseClasses.FeedColumn (column with optional liquid and or vapour feed inlets).

Information

This model discribes a tray column.

Base classes for the following classes are instantiated her:

  • liquid holdup
  • pressure loss
  • film model (BaseFilmTray)
  • geometry
  • heat transfer to wall

Volume flow rate of the liquid leaving the tray

Liquid leaves the tray if the height of the two-phase regime on the tray, h, gets higher than the height of the weir, h_w. The volume flow rate of the liquid, Vdot_l, is then proportional to the height over weir, h_ow = h-h_w and is calculated using the following formula:

Vdot_l = l_w · eps_liq_2ph · ((h / eps_liq_2ph - h_w) · g1/3 / 1.45)3/2

where l_w is the weir length and eps_liq_2ph the liquid fraction in the two-phase regime on the tray. This equation was obtained from Stichlmair [1]. However this equation would yield a negative volume flow rate, if h < h_w. Since this is not possible, Vdot_l is set to zero if h < h_w (which may be the case for the start-up of the column). It is supposed that there is only liquid leaving the tray, if the height of the two-phase regime is high enough; " raining " through the holes in the tray (which occurs if the vapour load is too small) is not considered.

Operating range

A very important point for tray columns is the operating range. There exists a minimum and a maximum vapour load as well as a minimum and maximum liquid load. In order to discribe the minimum vapour flow not the vapour flow Vdot_v itself is used but the vapour load F (which is defined as F = wV · ρV wV is the superficial velocity) or the vapour load Fh, where the velocity is the velocity in the holes. In theory the F-values are different for all elements of the column, however the F-values are calculated only once for each section using the inlet conditions for vapour and liquid. This is acceptable since during normal operation the F-values don't vary a lot over one section and for conditions like for example start-up operation the equations to calulate maximum and minimum load are not valid anyway. Also the F-values shall only give an idea of the operation range and in any case it is suggested to stay well in the operating range.

    Minimum vapour load

    A minimum vapour load exists for sieve trays, since if the vapour load is too small, liquid is going to rain through the plates. To avoid this Ruff [2] found out that the vapour load must be at least

    Fh,min,Ruff ≥ (0.37 · dh · (ρL - ρV)5/4 / ρV1/4)0.5

    where dh is the diameter of the holes in the tray and ρL and ρV are the densities of the liquid and the vapour respectively. However if the holes in the trays are rather small (around 2 mm - 3 mm) raining is not the major problem, but the fact that vapour is only passing a part of the tray. This can be avoided the following holdes:

    Fh,min,Mersmann ≥ (2 · &sigma / dh)0.5

    This formula was found by Mersmann [3]. So the minimum vapour load was defined to be Fh,min = min(Fh,min,Ruff ,Fh,min,Mersmann). The model allows for vapour loads which are smaller than the minimum vapour load (so no assert is used in the code), however one has to bear in mind that raining and maldistribution of the gas are not modelled and the results for Fh < Fh,min are not very reliable.

    Maximum vapour load

    If the vapour load is too high, entrainment occurs, i.e. vapour blows the liquid out of the column. An equation from Stichlmair [1] was taken in order to calulate the maximum vapour load:

    Fmax = 2.5 · (φ2 · σ · (ρL - ρV) · g)1/4 · (100 Vdot_l/Vdot_v)0.06 / (1 - 10 Vdot_l/Vdot_v)0.5

    Again the compliance with this rule is not ensured via an assert, but the user is advised to check that F < Fmax. If this is not the case the equation used to calculate Vdot_l is not longer valid.

    Minimum and maximum liquid load

    Theoretically the liquid load can get very small, however this will not be very efficient, so it is recommanded to have a minimum height over weir of 5 mm. The liquid flows through the column due to the earth gravity. Therefore the capacity is limited. However up to now no correlations are implemented.

Literature

[1] Stichlmair: Dimensionierung des Gas/Flüssigkeits-Kontaktapparates Bodenkolonne, Chem.-Ing.-Tech. 50 (1978), Nr. 4, p. 281-284

[2] Ruff et al., Chem.-Ing.Tech. 48 (1976) Nr. 9, p. 759-764

[3] Mersmann, Chem.-Ing.Tech. 35 (1963) Nr. 2, p. 103-107

Parameters

TypeNameDefaultDescription
Integern (from BaseColumn)1packed column: number of discrete elements in the section; plate column: number of trays in one section
SI.Pressure[n]p_v_start (from BaseColumn)if n == 1 then {p_v_start_outlet} else linspace(p_v_start_inlet, p_v_start_outlet, n)
SI.Pressure[n + 1]p_v_start_comp (from BaseColumn)cat(1, p_v_start, {p_v_start[n]})
SI.MoleFraction[n,nSL]x_l_start (from BaseColumn)
SI.MoleFraction[n,nSV]x_v_start (from BaseColumn)
SI.Temperature[n]T_v_start (from BaseColumn)if (T_v_profile and not n == 1) then linspace(T_vap_start_bottom, T_vap_start_top, n) else (if (T_v_profile and n == 1) then ones(n)*(T_vap_start_bottom + T_vap_start_top)/2 else ones(n)*T_vapour_start)
SI.Temperature[n]T_l_start (from BaseColumn)if (T_l_profile and not n == 1) then linspace(T_liq_start_bottom, T_liq_start_top, n) else (if (T_l_profile and n == 1) then ones(n)*(T_liq_start_bottom + T_liq_start_top)/2 else ones(n)*T_liquid_start)
BooleanEQ (from BaseColumn)falseequilibrium model is used, no mass transfer, value provided by film model
Integer[nS,2]mapping (from BaseColumn){{i, i} for i in 1:nS}parameter to map the different medium vectors one to another
Boolean[nSV]inertVapour (from BaseColumn)fill(false, nSV)true for each component which is inert in the vapour phase
Boolean[nSL]inertLiquid (from BaseColumn)fill(false, nSL)true for each component which is inert in the liquid phase
Booleanh_evap_medium (from BaseColumn)MediumVapour.delta_hv_medium
IntegernS (from BaseColumn)number of species which are equal in vapour and liquid phase
IntegernL (from BaseColumn)MediumLiquid.nSubstance - nSnumber of additional substances which are only in liquid phase
IntegernV (from BaseColumn)MediumVapour.nSubstance - nSnumber of additional substances which are only in the vapour phase
IntegernSL (from BaseColumn)MediumLiquid.nSubstance
IntegernSV (from BaseColumn)MediumVapour.nSubstance
IntegernumberLiquidFeedsInternal (from FeedColumn)if hasLiquidFeed then numberLiquidFeeds else 0
IntegernumberVapourFeedsInternal (from FeedColumn)if hasVapourFeed then numberVapourFeeds else 0
Integer[:]aux{1, 3, 6, 10, 15, 21, 28, 36, 45}
Integern_trays2number of trays in the section
Reale12e-5value for interpolation
Reale21e-3value for interpolation
Booleanentrainmentfalsetrue if entrainment is to be considered
Advanced
SI.TemperatureT_ref (from BaseColumn)systemTS.T_refreference temperature
Initialization
SI.Pressurep_v_start_inlet (from BaseColumn)1.9e5
SI.Pressurep_v_start_outlet (from BaseColumn)1.8e5
Booleanx_l_profile (from BaseColumn)false
Booleanx_v_profile (from BaseColumn)false
SI.MoleFraction[nSL]x_l_start_const (from BaseColumn)fill(1/nSL, nSL)
SI.MoleFraction[nSV]x_v_start_const (from BaseColumn)fill(1/nSV, nSV)
SI.MoleFraction[nSL]x_l_start_in (from BaseColumn)fill(1/nSL, nSL)
SI.MoleFraction[nSL]x_l_start_out (from BaseColumn)fill(1/nSL, nSL)
SI.MoleFraction[nSV]x_v_start_in (from BaseColumn)fill(1/nSV, nSV)
SI.MoleFraction[nSV]x_v_start_out (from BaseColumn)fill(1/nSV, nSV)
Real[nSV]x_total_start (from BaseColumn)fill(1/nSV, nSV)total mole fraction in system (vapour and liquid), component ordering as in vapour medium
BooleanT_l_profile (from BaseColumn)false
BooleanT_v_profile (from BaseColumn)false
SI.TemperatureT_vap_start_bottom (from BaseColumn)300
SI.TemperatureT_vap_start_top (from BaseColumn)300
SI.TemperatureT_liq_start_bottom (from BaseColumn)300
SI.TemperatureT_liq_start_top (from BaseColumn)300
SI.TemperatureT_vapour_start (from BaseColumn)300
SI.TemperatureT_liquid_start (from BaseColumn)300
StartUp
BooleanconsiderStartUp (from BaseColumn)falsetrue if StartUp is to be considered
Realfriggelfaktor (from BaseColumn)0.0002e5
Realk (from BaseColumn)0.2e-3large value for steep omega
BooleanStartUp_CCS (from BaseColumn)falsetrue if StartUp of carbon capture plant is to be considered
BooleanswitchingCondition_Boiling (from BaseColumn)truetrue if boiling state is switching condition
BooleanswitchingCondition_Absorber_x_v (from BaseColumn)falsetrue if vapour composition is switching condition
Realx_v_switch (from BaseColumn)0.05vapour mole fraction value which is to be achieved
IntegercomponentNumber (from BaseColumn)3number of vapour component number in model
Realgain (from BaseColumn)0.01controler gain to maintain initial pressure before switch
Boolean[nSV]lowBoilingPoint (from BaseColumn)fill(false, nSV)true if substance has low boiling point
Realy_PID (from BaseColumn)10maximal value for supply startUp PID controller
RealVdot_startUp_pressure (from BaseColumn)0.005value when supply PID controller is switched off
ShutDown
BooleanconsiderShutDown (from BaseColumn)falsetrue if ShutDown is to be considered
StartUp › Smooth Start-Up
Booleansmooth_startUp (from BaseColumn)falsetrue if smooth switching is to be considered
Realdelay_startUp (from BaseColumn)200time delay for smooth startUp
Initialization › Initial liquid content
Realeps_liq_start (from BaseColumn)0.06start value for liquid content if it is not exactly wetted but with more or less liquid
SI.Height[n]h_start0.009*ones(n)start value for height of the 2ph regime on the tray
Feed › Liquid Feed
BooleanhasLiquidFeed (from FeedColumn)falsetrue, if there exist a liquid feed
IntegernumberLiquidFeeds (from FeedColumn)1
IntegerstageLiquidFeed (from FeedColumn){2}number of stage where feed enters the column
Integer[n - numberLiquidFeeds]nonFeed_stages_l (from FeedColumn){i for i in 1:(n - numberLiquidFeeds)}
Feed › Vapour Feed
Integer[n - numberVapourFeeds]nonFeed_stages_v (from FeedColumn){i for i in 1:(n - numberVapourFeeds)}
BooleanhasVapourFeed (from FeedColumn)falsetrue, if there exist a liquid feed
IntegernumberVapourFeeds (from FeedColumn)1
IntegerstageVapourFeed (from FeedColumn){1}number of stage where feed enters the column

Connectors

TypeNameDefaultDescription
ThermalSeparation.Interfaces.GasPortInupStreamIn (from BaseColumn)
ThermalSeparation.Interfaces.GasPortOutupStreamOut (from BaseColumn)
ThermalSeparation.Interfaces.LiquidPortIndownStreamIn (from BaseColumn)
ThermalSeparation.Interfaces.LiquidPortOutdownStreamOut (from BaseColumn)
ThermalSeparation.Interfaces.LiquidPortInfeedLiquid (from FeedColumn)
ThermalSeparation.Interfaces.GasPortInfeedVapour (from FeedColumn)
ThermalSeparation.Interfaces.GasPortInfeedVapour_dummy (from FeedColumn)
ThermalSeparation.Interfaces.LiquidPortInfeedLiquid_dummy (from FeedColumn)
ThermalSeparation.Interfaces.GasPortOutfeedVapour_dummy2 (from FeedColumn)
ThermalSeparation.Interfaces.LiquidPortOutfeedLiquid_dummy2 (from FeedColumn)
ThermalSeparation.Interfaces.HeatPortheatPort

Components

TypeNameDefaultDescription
ThermalSeparation.SystemTSsystemTS (from BaseColumn)
BooleanuseHomotopy (from BaseColumn)false
HomotopyMethodhomotopyMethod (from BaseColumn)
Resultsresults (from BaseColumn)
MediumVapour.BaseProperties[n]mediumVapour (from BaseColumn)
MediumVapour.BasePropertiesmediumVapourIn (from BaseColumn)
MediumLiquid.BaseProperties[n]mediumLiquid (from BaseColumn)
MediumLiquid.BasePropertiesmediumLiquidIn (from BaseColumn)
MediumLiquid.ActivityCoefficient[n]activityCoeff (from BaseColumn)
MediumVapour.EvaporationEnthalpy[n]evapEnthalpy (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpy[n,nSV]delta_hv (from BaseColumn)if h_evap_medium then zeros(n, nSV) else evapEnthalpy.h
SI.Density[n]rho_v (from BaseColumn)if homotopyMethod.bool_rho and homotopyMethod.useHomotopy then homotopy(actual = mediumVapour.d, simplified = fill(homotopyMethod.rho_vap, n)) else mediumVapour.dmixture vapour density
SI.Densityrho_v_in (from BaseColumn)mediumVapourIn.d
SI.MolarMass[n]MM_v (from BaseColumn)mediumVapour.MMmolar mass of the vapour mixture
SI.MolarMassMM_v_in (from BaseColumn)mediumVapourIn.MM
ThermalSeparation.Units.MolarEnthalpy[n]h_v (from BaseColumn)if homotopyMethod.bool_h and homotopyMethod.useHomotopy then homotopy(actual = mediumVapour.h, simplified = fill(homotopyMethod.h_vap, n)) else mediumVapour.h
ThermalSeparation.Units.MolarEnthalpyh_v_in (from BaseColumn)mediumVapourIn.h
SI.MolarInternalEnergy[n]u_v (from BaseColumn)mediumVapour.u
MediumVapour.ThermodynamicPropertiespropsVap (from BaseColumn)mediumVapour.properties
MediumVapour.ThermodynamicPropertiespropsVapIn (from BaseColumn)mediumVapourIn.properties
SI.Density[n]rho_l (from BaseColumn)if homotopyMethod.bool_rho and homotopyMethod.useHomotopy then homotopy(actual = mediumLiquid.d, simplified = fill(homotopyMethod.rho_liq, n)) else mediumLiquid.dmixture liquid density
SI.Densityrho_l_in (from BaseColumn)mediumLiquidIn.d
SI.MolarMass[n]MM_l (from BaseColumn)mediumLiquid.MMmolar mass of the liquid mixture
SI.MolarMassMM_l_in (from BaseColumn)mediumLiquidIn.MM
ThermalSeparation.Units.MolarEnthalpy[n]h_l (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpyh_l_in (from BaseColumn)
SI.MolarInternalEnergy[n]u_l (from BaseColumn)mediumLiquid.u
MediumLiquid.ThermodynamicPropertiespropsLiq (from BaseColumn)mediumLiquid.properties
MediumLiquid.ThermodynamicPropertiespropsLiqIn (from BaseColumn)mediumLiquidIn.properties
SI.Concentration[nSV]c_v_in (from BaseColumn)
SI.Concentration[n,nSV]c_v (from BaseColumn)
SI.MoleFraction[nSV]x_v_in (from BaseColumn)
SI.MoleFraction[n,nSV]x_v (from BaseColumn)
SI.VolumeFlowRateVdot_v_in (from BaseColumn)
SI.VolumeFlowRate[n]Vdot_v (from BaseColumn)
SI.TemperatureT_v_in (from BaseColumn)
SI.MoleFraction[nSV]x_upStreamIn_act (from BaseColumn)
SI.MoleFraction[nSV]x_upStreamOut_act (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpyh_upStreamIn_act (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpyh_upStreamOut_act (from BaseColumn)
SI.Pressure[n + 1]p_v (from BaseColumn)p_v[j] = pressure on the j-th stage, p_v[n+1] is the pressure in the first element of the sucesseding component
SI.Temperature[n]T_v (from BaseColumn)
SI.Concentration[nSL]c_l_in (from BaseColumn)molar concentration in the liquid at the liquid outlet of each stage
SI.Concentration[n,nSL]c_l (from BaseColumn)
SI.MoleFraction[nSL]x_l_in (from BaseColumn)
SI.MoleFraction[n,nSL]x_l (from BaseColumn)
SI.VolumeFlowRateVdot_l_in (from BaseColumn)
SI.VolumeFlowRate[n]Vdot_l (from BaseColumn)
SI.TemperatureT_l_in (from BaseColumn)
SI.Temperature[n]T_l (from BaseColumn)
SI.MoleFraction[nSL]x_downStreamIn_act (from BaseColumn)
SI.MoleFraction[nSL]x_downStreamOut_act (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpyh_downStreamIn_act (from BaseColumn)
ThermalSeparation.Units.MolarEnthalpyh_downStreamOut_act (from BaseColumn)
SI.MolarFlowRate[n,nSL]Ndot_reac (from BaseColumn)
SI.HeatFlowRate[n]Qdot_reac (from BaseColumn)
SI.VolumeFraction[n]eps_liq (from BaseColumn)liquid volume fraction
SI.VolumeFraction[n]eps_vap (from BaseColumn)vapour volume fraction
SI.Temperature[n]T (from BaseColumn)
SI.HeatFlowRate[n]Qdot_wall (from BaseColumn)heat flow rate to wall
SI.MolarFlowRate[n,nSV]Ndot_v_transfer (from BaseColumn)
SI.MolarFlowRate[n,nSL]Ndot_l_transfer (from BaseColumn)
SI.HeatFlowRate[n]Edot_l_transfer (from BaseColumn)
SI.HeatFlowRate[n]Edot_v_transfer (from BaseColumn)
SI.Temperature[n]T_star (from BaseColumn)
SI.Pressurep_v_in (from BaseColumn)
SI.Pressure[n,nSL]p_sat_bulk (from BaseColumn)
SI.VolumeFlowRate[n]Vdot_v_feed (from BaseColumn)
SI.Concentration[n,nSV]c_v_feed (from BaseColumn)
SI.SpecificEnthalpy[n]h_v_feed (from BaseColumn)
SI.VolumeFlowRate[n]Vdot_l_feed (from BaseColumn)
SI.Concentration[n,nSL]c_l_feed (from BaseColumn)
SI.SpecificEnthalpy[n]h_l_feed (from BaseColumn)
SI.Density[n]rho_l_feed (from BaseColumn)
SI.Density[n]rho_v_feed (from BaseColumn)
SI.MolarMass[n]MM_l_feed (from BaseColumn)
SI.MolarMass[n]MM_v_feed (from BaseColumn)
SI.MoleFraction[n,nSL]x_l_star (from BaseColumn)
SI.MoleFraction[n,nSV]x_v_star (from BaseColumn)
SI.MoleFraction[n,nS]x_vap_liq (from BaseColumn)total molar fractions
Real[n,nS]n_tot (from BaseColumn)
ThermoEquilibrium[n]bubblePressure (from BaseColumn)
Boolean[n]bool_eps (from BaseColumn)
SI.VolumeFlowRate[n]Vdot_le (from BaseColumn)liquid volume flow entrained by vapour
Boolean[n]before_transition (from BaseColumn)fill(false, n)
SI.Pressurep_initial (from BaseColumn)1e5
SI.Pressure[n]p_bub (from BaseColumn)bubblePressure.p_bubblemixture bubble pressure
SI.Pressure[n + 1]p_hyd (from BaseColumn)hydraulic pressure
Real[n]omega (from BaseColumn)
Boolean[n]startUp (from BaseColumn)
Real[n]Ndot_source_startUp (from BaseColumn)dummy molar flow rate to account for discharge of inert gas during startUp
Real[n]sum_xl (from BaseColumn)sum(x_l[:, i] for i in 1:nSL)
Real[n]sum_xv (from BaseColumn)sum(x_v[:, i] for i in 1:nSV)
SI.MolarFlowRate[nSL]Ndot_trans (from BaseColumn)sum(Ndot_l_transfer[j, :] for j in 1:n)
SI.MolarFlowRate[nSV]Ndot_trans_vap (from BaseColumn)sum(Ndot_v_transfer[j, :] for j in 1:n)
RealEdot_l (from BaseColumn)sum(Edot_l_transfer)
RealEdot_v (from BaseColumn)sum(Edot_v_transfer)
SI.MassFlowRate[n]mdot_v (from BaseColumn)Vdot_v.*rho_v
SI.MassFlowRate[n]mdot_l (from BaseColumn)Vdot_l.*rho_l
Real[n,nSV]X_v (from BaseColumn)mass fraction vapour
Real[n,nSL]X_l (from BaseColumn)mass fraction liquid
SI.VolumeV_liq (from BaseColumn)sum(A*H/n*eps*eps_liq)
SI.MolarFlowRate[n]Ndot_v (from BaseColumn)total molar flow rate vapour
SI.MolarFlowRateNdot_v_in (from BaseColumn)total molar flow rate vapour
SI.MolarFlowRate[n]Ndot_l (from BaseColumn)total molar flow rate liquid
SI.MolarFlowRateNdot_l_in (from BaseColumn)total molar flow rate vapour
Real[n,nSL]n_i_liq (from BaseColumn)
Real[n,nSV]n_i_vap (from BaseColumn)
Real[n]n_liq (from BaseColumn)sum(n_i_liq[:, i] for i in 1:nSL)
Real[n]n_vap (from BaseColumn)sum(n_i_vap[:, i] for i in 1:nSV)
Real[n]n_total (from BaseColumn)n_liq + n_vap
Real[n]n_mol_L (from BaseColumn)
Real[n]n_mol_V (from BaseColumn)
Real[n,nSL]n_mol_L_i (from BaseColumn)
Real[n,nSV]n_mol_V_i (from BaseColumn)
ThermalSeparation.Utilities.LimPID_Input[n]PID (from BaseColumn)
InternalFeedPort[n]internalFeedPort (from FeedColumn)
MediumLiquid.BaseProperties[numberLiquidFeeds]mediumLiquidFeed (from FeedColumn)
MediumVapour.BaseProperties[numberVapourFeeds]mediumVapourFeed (from FeedColumn)
SourcesSinks.SourceGas[numberVapourFeeds]sourceGas (from FeedColumn)
SourcesSinks.SourceLiquid[numberLiquidFeeds]sourceLiquid (from FeedColumn)
SourcesSinks.SinkGas[numberVapourFeeds]sinkGas (from FeedColumn)
SourcesSinks.SinkLiquid[numberLiquidFeeds]sinkLiquid (from FeedColumn)
Real[numberVapourFeeds,nSV]c_v_feed_used (from FeedColumn)
BalanceEquationsbalanceEquations
InitOptioninitOption
Reaction[n]reaction
SI.Height[n]hheight of the 2ph region on the tray
PressureLosspressureLoss
HeatTransferWallheatTransferWall
Geometrygeometry
Holdupholdup
Real[n]eweight entrainment ratio

Contents

NameDescription
BalanceEquations
InitOption
Reaction
Geometry
PressureLoss
HeatTransferWall
Holdup

Revisions

    created by Karin Dietl & Andreas Joos
    creation date 01.01.2009
    revised by nobody so far
    last revision this is an alpha version...
    based on