source: trunk/eml/heat_exchangers/HeatExchangerDetailed.mso @ 490

Last change on this file since 490 was 490, checked in by gerson bicca, 15 years ago

updated

File size: 41.1 KB
Line 
1#*-------------------------------------------------------------------
2* EMSO Model Library (EML) Copyright (C) 2004 - 2007 ALSOC.
3*
4* This LIBRARY is free software; you can distribute it and/or modify
5* it under the therms of the ALSOC FREE LICENSE as available at
6* http://www.enq.ufrgs.br/alsoc.
7*
8* EMSO Copyright (C) 2004 - 2007 ALSOC, original code
9* from http://www.rps.eng.br Copyright (C) 2002-2004.
10* All rights reserved.
11*
12* EMSO is distributed under the therms of the ALSOC LICENSE as
13* available at http://www.enq.ufrgs.br/alsoc.
14*--------------------------------------------------------------------
15* Author: Gerson Balbueno Bicca
16* $Id: HeatExchangerDetailed.mso 197 2007-03-08 14:31:57Z bicca $
17*------------------------------------------------------------------*#
18using "heat_exchangers/HEX_Engine";
19
20Model ShellandTubesBasic
21
22ATTRIBUTES
23        Pallete = false;
24        Brief  = "Basic Model for Detailed Shell and Tube Heat Exchanger.";
25        Info  =
26        "to be documented.";
27
28PARAMETERS
29
30HotSide                 as Switcher     (Brief="Hot Side in the Exchanger",Valid=["shell","tubes"],Default="shell");
31ShellType       as Switcher     (Brief="TEMA Designation",Valid=["Eshell","Fshell"],Default="Eshell");
32
33Pattern                                 as Switcher                     (Brief="Tube Layout Characteristic Angle",Valid=["Triangle","Rotated Square","Square"],Default="Triangle");
34
35VARIABLES
36
37        Tubes                   as Tube_Side_Main               (Brief="Tube Side Section");   
38        Shell                   as Shell_Side_Main      (Brief="Shell Side Section");
39        Baffles                 as Baffles_Main                         (Brief="Baffle Section", Symbol=" ");
40        Clearances      as Clearances_Main      (Brief="Diametral Clearances", Symbol=" ");
41       
42in  InletTube           as stream                                       (Brief="Inlet Tube Stream", PosX=0.08, PosY=0, Symbol="_{inTube}");
43out OutletTube  as streamPH                             (Brief="Outlet Tube Stream", PosX=0.08, PosY=1, Symbol="_{outTube}");
44in  InletShell          as stream                                       (Brief="Inlet Shell Stream", PosX=0.2237, PosY=0, Symbol="_{inShell}");
45out OutletShell as streamPH                             (Brief="Outlet Shell Stream", PosX=0.8237, PosY=1, Symbol="_{outShell}");
46        Details                         as Details_Main                         (Brief="Details in Heat Exchanger");
47       
48#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
49#                               Auxiliar Variables - Must be hidden                                             
50#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
51        Nc              as Real                                 (Brief = "Number of Tube rows Crossed in one Crossflow Section", Hidden = true, Lower=1);
52        Ncw     as Real                                 (Brief = "Number of Effective Crossflow rows in Each Window", Hidden = true, Lower=1);
53        a                       as Real                                 (Brief = "Variable for calculating Ji heat transfer correction Factor", Hidden = true, Lower=1e-3);
54        b                       as Real                                 (Brief = "Variable for calculating shell side pressure drop friction Factor", Hidden = true, Lower=1e-3);
55        Rb              as Real                                 (Brief = "ByPass Correction Factor for Pressure Drop", Hidden = true, Lower=1e-3);
56        Rss             as Real                                 (Brief = "Correction Factor for Pressure Drop", Hidden = true, Lower=1e-3);
57        Rspd    as Real                                 (Brief = "Pressure Drop Correction Factor for Unequal Baffle Spacing", Hidden = true, Lower=1e-3);
58        mw              as Real                                 (Brief = "Mass Velocity in Window Zone", Hidden = true, Unit='kg/m^2/s');
59        Ji                      as constant                     (Brief="Shell Side Ji Factor", Hidden = true, Default=0.05);
60        Jr                      as positive                     (Brief="Shell Side Jr Factor", Hidden = true, Lower=10e-6);
61        Jl                      as positive                     (Brief="Shell Side Jl Factor", Hidden = true, Lower=10e-6);
62        Jb                      as positive                     (Brief="Shell Side Jb Factor", Hidden = true, Lower=10e-6);
63        Jc                      as positive                     (Brief="Shell Side Jc Factor", Hidden = true, Lower=10e-6);
64        Js                      as positive                     (Brief="Shell Side Js Factor", Hidden = true, Lower=10e-6);
65        Jtotal  as positive                     (Brief="Shell Side Jtotal Factor", Hidden = true, Lower=10e-6);
66        Sm              as area                                 (Brief="Shell Side Cross Flow Area", Hidden = true, Default=0.05,Lower=10e-6);
67
68PARAMETERS
69outer PP                        as Plugin               (Brief="External Physical Properties",Type = "PP");
70outer NComp     as Integer      (Brief="Number of Components");
71       
72M(NComp)        as molweight (Brief="Component Mol Weight");
73
74TubeFlowRegime           as Switcher            (Brief="Tube Side Flow Regime ",Valid=["laminar","transition","turbulent"],Default="laminar");
75ShellFlowRegime                 as Switcher             (Brief="Shell Side Flow Regime ",Valid=["deep laminar","laminar","turbulent"],Default="deep laminar");
76ShellRange                              as Switcher             (Brief="Shell Side Flow Regime Range for Correction Factor",Valid=["range1","range2","range3", "range4","range5"],Default="range1");
77Side                                                            as Switcher             (Brief="Flag for Fluid Alocation ",Valid=["shell","tubes"],Default="shell");
78LaminarCorrelation      as Switcher             (Brief="Tube Heat Transfer Correlation in Laminar Flow",Valid=["Hausen","Schlunder"],Default="Hausen");
79TransitionCorrelation   as Switcher             (Brief="Tube Heat Transfer Correlation in Transition Flow",Valid=["Gnielinski","ESDU"],Default="Gnielinski");
80TurbulentCorrelation    as Switcher             (Brief="Tube Heat Transfer Correlation in Turbulent Flow",Valid=["Petukhov","SiederTate"],Default="Petukhov");
81
82#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
83#                               Auxiliar Parameters     - Must be hidden                                                       
84#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
85Pi                                                      as constant   (Brief="Pi Number", Hidden = true, Default=3.14159265);
86Aonozzle_Shell          as area                 (Brief="Shell Outlet Nozzle Area", Hidden = true, Lower=1E-6);
87Ainozzle_Shell          as area                 (Brief="Shell Inlet Nozzle Area", Hidden = true, Lower=1E-6);
88Aeonozzle_Shell         as area                 (Brief="Shell Outlet Escape Area Under Nozzle", Hidden = true, Lower=1E-6);
89Aeinozzle_Shell         as area                 (Brief="Shell Inlet Escape Area Under Nozzle",Hidden = true, Lower=1E-6);
90Aonozzle_Tube   as area                 (Brief="Tube Outlet Nozzle Area", Hidden = true, Lower=1E-6);
91Ainozzle_Tube           as area                 (Brief="Tube Inlet Nozzle Area", Hidden = true, Lower=1E-6);
92Kinlet_Tube             as positive     (Brief="Tube Inlet Nozzle Pressure Loss Coeff", Hidden = true, Default=1.1);
93Koutlet_Tube            as positive     (Brief="Tube Outlet Nozzle Pressure Loss Coeff",Hidden = true, Default=0.7);
94Ods                                             as Real                 (Brief="Baffle cut angle in degrees", Symbol = "\theta _{ds}", Hidden = true);
95Octl                                    as Real                 (Brief="Baffle cut angle relative to the centerline in degrees", Symbol = "\theta _{ctl}", Hidden = true);
96Ftw                                             as Real                 (Brief="Fraction of number of tubes in baffle window", Symbol = "F _{tw}", Hidden = true);
97Scd                                             as area                 (Brief="Shell to baffle leakage area", Symbol = "S _{cd}", Hidden = true);
98Std                                             as area                 (Brief="Tube to baffle hole leakage area", Symbol = "S _{td}", Hidden = true);
99Rs                                              as Real                 (Brief="Ratio of the shell to baffle leakage area", Symbol = "R_s", Hidden = true);
100Dw                                      as length               (Brief="Hydraulic diameter of the baffle window", Symbol = "D _w", Hidden = true);
101
102SET
103
104#"Molecular weight"
105        M       = PP.MolecularWeight();
106       
107#"Pi Number"
108        Pi      = 3.14159265;
109
110#"Baffle cut angle in degrees"
111        Ods     = (360/Pi)*acos(1-0.02*Baffles.BaffleCut);
112
113#"Baffle cut angle relative to the centerline"
114        Octl    = (360/Pi)*acos((Shell.ShellID/(Shell.ShellID - Clearances.BundleToShell - Tubes.TubeOD))*(1-0.02*Baffles.BaffleCut));
115
116#"Fraction of number of tubes in baffle window"
117        Ftw     = (Octl/360)-sin(Octl*Pi/180)/(2*Pi);
118
119#"Shell to baffle leakage area"
120        Scd     = Pi*Shell.ShellID*Clearances.BaffleToShell *((360-Ods)/720);
121
122#"Tube to baffle hole leakage area"
123        Std     = Pi*0.25*((Clearances.TubeToBaffle + Tubes.TubeOD)^2-Tubes.TubeOD*Tubes.TubeOD)*Tubes.NumberOfTubes*(1-Ftw);
124
125#"comments"
126        Rs              = Scd/(Scd+Std);
127
128#"comments"
129        Dw      = (4*abs((Pi*Shell.ShellID*Shell.ShellID*((Ods/360)-sin(Ods*Pi/180)/(2*Pi))/4)-(Tubes.NumberOfTubes*Pi*Tubes.TubeOD*Tubes.TubeOD*Ftw/4)))/(Pi*Tubes.TubeOD*Tubes.NumberOfTubes*Ftw+ Pi*Shell.ShellID*Ods/360);
130
131#"Tube Side Inlet Nozzle Area"
132        Ainozzle_Tube = 0.25*Pi*Tubes.InletNozzleID^2;
133
134#"Tube Side Outlet Nozzle Area"
135        Aonozzle_Tube = 0.25*Pi*Tubes.OutletNozzleID^2;
136
137#"Tube Inlet Nozzle Pressure Loss Coeff"
138        Kinlet_Tube   = 1.1;
139
140#"Tube Outlet Nozzle Pressure Loss Coeff"
141        Koutlet_Tube  = 0.7;
142
143#"Shell Outlet Nozzle Area"
144        Aonozzle_Shell  = 0.25*Pi*Shell.OutletNozzleID^2;
145
146#"Shell Inlet Nozzle Area"
147        Ainozzle_Shell  = 0.25*Pi*Shell.InletNozzleID^2;
148
149#"Shell Outlet Escape Area Under Nozzle"
150        Aeonozzle_Shell = Pi*Shell.OutletNozzleID*Clearances.Honozzle_Shell + 0.6*Aonozzle_Shell*(1-(Tubes.TubeOD/Tubes.TubePitch));
151
152#"Shell Inlet Escape Area Under Nozzle"
153        Aeinozzle_Shell = Pi*Shell.InletNozzleID*Clearances.Hinozzle_Shell + 0.6*Ainozzle_Shell*(1-(Tubes.TubeOD/Tubes.TubePitch));
154
155EQUATIONS
156
157"Shell Stream Average Temperature"
158        Shell.Properties.Average.T = 0.5*InletShell.T + 0.5*OutletShell.T;
159       
160"Tube Stream Average Temperature"
161        Tubes.Properties.Average.T = 0.5*OutletTube.T + 0.5*OutletTube.T;
162       
163"Shell Stream Average Pressure"
164        Shell.Properties.Average.P = 0.5*InletShell.P+0.5*OutletShell.P;
165       
166"Tube Stream Average Pressure"
167        Tubes.Properties.Average.P = 0.5*OutletTube.P+0.5*OutletTube.P;
168       
169"Shell Stream Average Molecular Weight"
170        Shell.Properties.Average.Mw = sum(M*InletShell.z);
171
172"Tube Stream Average Molecular Weight"
173        Tubes.Properties.Average.Mw = sum(M*OutletTube.z);
174       
175if InletTube.v equal 0
176       
177        then   
178       
179"Tube Stream Average Heat Capacity"
180        Tubes.Properties.Average.Cp     =       PP.LiquidCp(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
181
182"Tube Stream Average Mass Density"
183        Tubes.Properties.Average.rho =  PP.LiquidDensity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
184
185"Tube Stream Inlet Mass Density"
186        Tubes.Properties.Inlet.rho      =       PP.LiquidDensity(OutletTube.T,OutletTube.P,OutletTube.z);
187
188"Tube Stream Outlet Mass Density"
189        Tubes.Properties.Outlet.rho     =       PP.LiquidDensity(OutletTube.T,OutletTube.P,OutletTube.z);
190
191"TubeStream Average Viscosity"
192        Tubes.Properties.Average.Mu     =       PP.LiquidViscosity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
193
194"Tube Stream Average Conductivity"
195        Tubes.Properties.Average.K      =       PP.LiquidThermalConductivity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
196
197"Tube Stream Viscosity at Wall Temperature"
198        Tubes.Properties.Wall.Mu        =       PP.LiquidViscosity(Tubes.Properties.Wall.Twall,Tubes.Properties.Average.P,OutletTube.z);
199
200        else
201
202"Tube Stream Average Heat Capacity"
203        Tubes.Properties.Average.Cp     =       PP.VapourCp(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
204
205"Tube Stream Average Mass Density"
206        Tubes.Properties.Average.rho =  PP.VapourDensity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
207
208"Tube Stream Inlet Mass Density"
209        Tubes.Properties.Inlet.rho      =       PP.VapourDensity(OutletTube.T,OutletTube.P,OutletTube.z);
210
211"Tube Stream Outlet Mass Density"       
212        Tubes.Properties.Outlet.rho     =       PP.VapourDensity(OutletTube.T,OutletTube.P,OutletTube.z);
213
214"Tube Stream Average Viscosity "
215        Tubes.Properties.Average.Mu     =       PP.VapourViscosity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
216
217"Tube Stream Average Conductivity "
218        Tubes.Properties.Average.K      =       PP.VapourThermalConductivity(Tubes.Properties.Average.T,Tubes.Properties.Average.P,OutletTube.z);
219
220"Tube Stream Viscosity at Wall Temperature"
221        Tubes.Properties.Wall.Mu        =       PP.VapourViscosity(Tubes.Properties.Wall.Twall,Tubes.Properties.Average.P,OutletTube.z);
222
223end
224
225if InletShell.v equal 0
226
227        then
228
229"Shell Stream Average Heat Capacity"
230        Shell.Properties.Average.Cp     =               PP.LiquidCp(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
231
232"Shell Stream Average Mass Density"
233        Shell.Properties.Average.rho    =               PP.LiquidDensity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
234
235"ShellStream Inlet Mass Density"       
236        Shell.Properties.Inlet.rho      =               PP.LiquidDensity(InletShell.T,InletShell.P,InletShell.z);
237
238"Shell Stream Outlet Mass Density"     
239        Shell.Properties.Outlet.rho     =               PP.LiquidDensity(OutletShell.T,OutletShell.P,OutletShell.z);
240
241"Shell Stream Average Viscosity"
242        Shell.Properties.Average.Mu     =               PP.LiquidViscosity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
243
244"Shell Stream Average Conductivity"
245        Shell.Properties.Average.K      =               PP.LiquidThermalConductivity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);       
246
247"ShellStream Viscosity  at Wall Temperature"
248        Shell.Properties.Wall.Mu                =               PP.LiquidViscosity(Shell.Properties.Wall.Twall,Shell.Properties.Average.P,InletShell.z);       
249
250
251        else
252
253"Shell Stream Average Heat Capacity"
254        Shell.Properties.Average.Cp     =               PP.VapourCp(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
255
256"Shell Stream Average Mass Density"
257        Shell.Properties.Average.rho    =               PP.VapourDensity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
258
259"Shell Stream Inlet Mass Density"       
260        Shell.Properties.Inlet.rho      =               PP.VapourDensity(InletShell.T,InletShell.P,InletShell.z);
261
262"Shell Stream Outlet Mass Density"
263        Shell.Properties.Outlet.rho     =               PP.VapourDensity(OutletShell.T,OutletShell.P,OutletShell.z);
264
265"Shell Stream Average Viscosity"
266        Shell.Properties.Average.Mu     =               PP.VapourViscosity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);
267
268"Shell Stream Average Conductivity"
269        Shell.Properties.Average.K      =               PP.VapourThermalConductivity(Shell.Properties.Average.T,Shell.Properties.Average.P,InletShell.z);       
270
271"Shell Stream Viscosity at Wall Temperature"
272        Shell.Properties.Wall.Mu                =               PP.VapourViscosity(Shell.Properties.Wall.Twall,Shell.Properties.Average.P,InletShell.z);
273
274end
275
276switch Side
277       
278        case "shell":
279       
280"Energy Balance Hot Stream"
281        Details.Q = InletShell.F*(InletShell.h-OutletShell.h);
282
283"Energy Balance Cold Stream"
284        Details.Q =-InletTube.F*(InletTube.h-OutletTube.h);
285
286        when InletTube.T > InletShell.T switchto "tubes";
287
288        case "tubes":
289       
290"Energy Balance Hot Stream"
291        Details.Q = InletTube.F*(InletTube.h-OutletTube.h);
292
293"Energy Balance Cold Stream"
294        Details.Q =-InletShell.F*(InletShell.h-OutletShell.h);
295       
296        when InletTube.T < InletShell.T switchto "shell";
297       
298end
299
300"Flow Mass Inlet Tube Stream"
301        Tubes.Properties.Inlet.Fw               =  sum(M*InletTube.z)*InletTube.F;
302
303"Flow Mass Outlet Tube Stream"
304        Tubes.Properties.Outlet.Fw      =  sum(M*OutletTube.z)*OutletTube.F;
305
306"Flow Mass Inlet Shell Stream"
307        Shell.Properties.Inlet.Fw               =  sum(M*InletShell.z)*InletShell.F;
308
309"Flow Mass Outlet Shell Stream"
310        Shell.Properties.Outlet.Fw              =  sum(M*OutletShell.z)*OutletShell.F;
311
312"Molar Balance Shell Stream"
313        OutletShell.F  = InletShell.F;
314       
315"Molar Balance Tube Stream"
316        OutletTube.F = InletTube.F;
317
318"Shell  Stream Molar Fraction Constraint"
319        OutletShell.z=InletShell.z;
320       
321"Tube Stream Molar Fraction Constraint"
322        OutletTube.z=InletTube.z;
323       
324"Jc Factor"
325        Jc = 0.55+0.72*(1-2*Ftw);
326
327"Jl Factor"
328        Jl = 0.44*(1-Rs)+(1-0.44*(1-Rs))*exp(-2.2*(Scd + Std)/Sm);
329
330"Total J Factor"
331        Jtotal = Jc*Jl*Jb*Jr*Js;
332
333"Mass Velocity in Window Zone"
334        mw      = Shell.Properties.Inlet.Fw/sqrt(abs(Sm*abs((Pi*Shell.ShellID*Shell.ShellID*((Ods/360)-sin(Ods*Pi/180)/(2*Pi))/4)-(Tubes.NumberOfTubes*Pi*Tubes.TubeOD*Tubes.TubeOD*Ftw/4))));
335
336switch TubeFlowRegime
337       
338        case "laminar":
339       
340"Friction Factor for heat Transfer: Not Necessary in Laminar Correlation - Use any one equation that you want"
341        Tubes.HeatTransfer.fi   = 16/Tubes.HeatTransfer.Re;
342       
343"Friction Factor for Pressure Drop in Laminar Flow"
344        Tubes.PressureDrop.fi   = 16/Tubes.HeatTransfer.Re;
345       
346switch LaminarCorrelation
347       
348        case "Hausen":
349
350"Nusselt Number in Laminar Flow - Hausen Equation"
351        Tubes.HeatTransfer.Nu = 3.665 + ((0.19*((Tubes.TubeID/Tubes.TubeLength)*Tubes.HeatTransfer.Re*Tubes.HeatTransfer.PR)^0.8)/(1+0.117*((Tubes.TubeID/Tubes.TubeLength)*Tubes.HeatTransfer.Re*Tubes.HeatTransfer.PR)^0.467));
352       
353        case "Schlunder":
354       
355"Nusselt Number in Laminar Flow - Schlunder Equation"
356        Tubes.HeatTransfer.Nu = (49.027896+4.173281*Tubes.HeatTransfer.Re*Tubes.HeatTransfer.PR*(Tubes.TubeID/Tubes.TubeLength))^(1/3);
357
358end
359       
360        when Tubes.HeatTransfer.Re > 2300 switchto "transition";
361       
362        case "transition":
363       
364"Friction Factor for heat Transfer : for use in Gnielinski Equation"
365        Tubes.HeatTransfer.fi   = 1/(0.79*ln(Tubes.HeatTransfer.Re)-1.64)^2;
366       
367"Friction Factor for Pressure Drop in Transition Flow"
368        Tubes.PressureDrop.fi   = 0.0122;
369       
370switch TransitionCorrelation
371       
372        case "Gnielinski":
373       
374"Nusselt Number in Transition Flow - Gnielinski Equation"
375        Tubes.HeatTransfer.Nu*(1+(12.7*sqrt(0.125*Tubes.HeatTransfer.fi)*((Tubes.HeatTransfer.PR)^(2/3) -1))) = 0.125*Tubes.HeatTransfer.fi*(Tubes.HeatTransfer.Re-1000)*Tubes.HeatTransfer.PR;
376
377        case "ESDU":
378       
379"Nusselt Number in Transition Flow - ESDU Equation"
380        Tubes.HeatTransfer.Nu =1;#to be implemented
381       
382end
383
384        when Tubes.HeatTransfer.Re < 2300 switchto "laminar";
385        when Tubes.HeatTransfer.Re > 10000 switchto "turbulent";
386
387        case "turbulent":
388
389"Friction Factor for heat Transfer : for use in Petukhov Equation"
390        Tubes.HeatTransfer.fi   = 1/(1.82*log(Tubes.HeatTransfer.Re)-1.64)^2;
391
392"Friction Factor for Pressure Drop in Turbulent Flow"
393        Tubes.PressureDrop.fi   = 0.0035 + 0.264*Tubes.HeatTransfer.Re^(-0.42);
394
395switch TurbulentCorrelation
396       
397        case "Petukhov":
398       
399"Nusselt Number in Turbulent Flow - Petukhov Equation"
400        Tubes.HeatTransfer.Nu*(1.07+(12.7*sqrt(0.125*Tubes.HeatTransfer.fi)*((Tubes.HeatTransfer.PR)^(2/3) -1))) = 0.125*Tubes.HeatTransfer.fi*Tubes.HeatTransfer.Re*Tubes.HeatTransfer.PR;
401       
402        case "SiederTate":
403
404"Nusselt Number in Transition Flow - Sieder Tate Equation"
405        Tubes.HeatTransfer.Nu = 0.027*(Tubes.HeatTransfer.PR)^(1/3)*(Tubes.HeatTransfer.Re)^(4/5);
406
407end
408       
409        when Tubes.HeatTransfer.Re < 10000 switchto "transition";
410
411end
412
413switch Pattern
414       
415case "Triangle":
416
417"Shell Side Cross Flow Area"
418        Sm= Baffles.Central_Spacing*(Clearances.BundleToShell+((Shell.ShellID-Clearances.BundleToShell-Tubes.TubeOD)/Tubes.TubePitch)*(Tubes.TubePitch-Tubes.TubeOD));
419
420"Number of Tube rows Crossed in one Crossflow Section"
421        Nc      = Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.866*Tubes.TubePitch);
422
423"Number of Effective Crossflow rows in Each Window"
424        Ncw = 0.8*(Shell.ShellID*0.01*Baffles.BaffleCut-(Clearances.BundleToShell + Tubes.TubeOD)*0.5)/(0.866*Tubes.TubePitch);
425
426"Variable for calculating Ji heat transfer correction Factor"
427        a       =       1.45/(1+0.14*Shell.HeatTransfer.Re^0.519);
428       
429"Variable for calculating Shell Side Pressure Drop Friction Factor"
430        b=7/(1+0.14*Shell.HeatTransfer.Re^0.5);
431
432"Correction Factor for Pressure Drop"
433        Rss     = Clearances.SealStrip/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.866*Tubes.TubePitch)) ;
434       
435"Ideal Shell Side Pressure Drop"
436        Shell.PressureDrop.Pideal= 2*Shell.PressureDrop.fi*(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.866*Tubes.TubePitch))*(Shell.Properties.Inlet.Fw/Sm)^2/(Shell.Properties.Average.rho*Shell.HeatTransfer.Phi);
437
438"Shell Pressure End Zones"
439        Shell.PressureDrop.PdEndZones = Shell.PressureDrop.Pideal*(1+ (Ncw/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.866*Tubes.TubePitch))))*Rb*Rspd;
440
441switch ShellRange
442       
443        case "range1":
444       
445"Ji Factor"
446        Ji =1.40*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^0.667;
447       
448"Shell Side Pressure Drop Friction Factor"
449        Shell.PressureDrop.fi=48*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-1;
450       
451        when Shell.HeatTransfer.Re > 10 switchto "range2";
452       
453        case "range2":
454       
455"Ji Factor"
456        Ji =1.36*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.657;
457       
458"Shell Side Pressure Drop Friction Factor"
459        Shell.PressureDrop.fi=45.10*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.973;
460       
461        when Shell.HeatTransfer.Re > 100 switchto "range3";
462       
463        case "range3":
464
465"Ji Factor"
466        Ji =0.593*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.477;
467       
468"Shell Side Pressure Drop Friction Factor"
469        Shell.PressureDrop.fi=4.570*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.476;
470       
471        when Shell.HeatTransfer.Re > 1000 switchto "range4";
472       
473        case "range4":
474
475"Ji Factor"
476        Ji =0.321*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.388;
477       
478"Shell Side Pressure Drop Friction Factor"
479        Shell.PressureDrop.fi=0.486*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.152;
480
481        when Shell.HeatTransfer.Re > 10000 switchto "range5";
482
483        case "range5":
484
485"Ji Factor"
486        Ji =0.321*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.388;
487
488"Shell Side Pressure Drop Friction Factor"
489        Shell.PressureDrop.fi=0.372*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.123;
490       
491        when Shell.HeatTransfer.Re < 10000 switchto "range4";
492       
493end
494
495case "Rotated Square":
496
497"Shell Side Cross Flow Area"
498        Sm= Baffles.Central_Spacing*(Clearances.BundleToShell+((Shell.ShellID-Clearances.BundleToShell-Tubes.TubeOD)/(0.707*Tubes.TubePitch))*(Tubes.TubePitch-Tubes.TubeOD));
499
500"Number of Tube rows Crossed in one Crossflow Section"
501        Nc      = Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.707*Tubes.TubePitch);
502
503"Number of Effective Crossflow rows in Each Window"
504        Ncw = 0.8*(Shell.ShellID*0.01*Baffles.BaffleCut-(Clearances.BundleToShell + Tubes.TubeOD)*0.5)/(0.707*Tubes.TubePitch);
505
506"Variable for calculating Ji heat transfer correction Factor"
507        a       =       1.930/(1+0.14*Shell.HeatTransfer.Re^0.500);
508
509"Variable for calculating Shell Side Pressure Drop Friction Factor"
510        b=6.59/(1+0.14*Shell.HeatTransfer.Re^0.52);
511
512"Correction Factor for Pressure Drop"
513        Rss     = Clearances.SealStrip/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.707*Tubes.TubePitch)) ;
514
515"Ideal Shell Side Pressure Drop"
516        Shell.PressureDrop.Pideal= 2*Shell.PressureDrop.fi*(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.707*Tubes.TubePitch))*(Shell.Properties.Inlet.Fw/Sm)^2/(Shell.Properties.Average.rho*Shell.HeatTransfer.Phi);
517
518"Shell Pressure End Zones"
519        Shell.PressureDrop.PdEndZones = Shell.PressureDrop.Pideal*(1+ (Ncw/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/(0.707*Tubes.TubePitch))))*Rb*Rspd;
520
521switch ShellRange
522       
523        case "range1":
524
525"Ji Factor"
526        Ji =1.550*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^0.667;
527
528"Shell Side Pressure Drop Friction Factor"
529        Shell.PressureDrop.fi=32*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-1;
530       
531        when Shell.HeatTransfer.Re > 10 switchto "range2";
532       
533        case "range2":
534
535"Ji Factor"
536        Ji =0.498*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^0.656;
537
538"Shell Side Pressure Drop Friction Factor"
539        Shell.PressureDrop.fi=26.20*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.913;
540       
541        when Shell.HeatTransfer.Re > 100 switchto "range3";
542       
543        case "range3":
544
545"Ji Factor"
546        Ji =0.730*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^0.500;
547
548"Shell Side Pressure Drop Friction Factor"
549        Shell.PressureDrop.fi=3.50*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.476;
550       
551        when Shell.HeatTransfer.Re > 1000 switchto "range4";
552       
553        case "range4":
554       
555"Ji Factor"
556        Ji =0.370*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.396;
557       
558"Shell Side Pressure Drop Friction Factor"
559        Shell.PressureDrop.fi=0.333*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.136;
560
561        when Shell.HeatTransfer.Re > 10000 switchto "range5";
562
563        case "range5":
564
565"Ji Factor"
566        Ji =0.370*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.396;
567       
568"Shell Side Pressure Drop Friction Factor"
569        Shell.PressureDrop.fi=0.303*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.126;
570       
571        when Shell.HeatTransfer.Re < 10000 switchto "range4";
572       
573end
574
575case "Square":
576
577"Shell Side Cross Flow Area"
578        Sm= Baffles.Central_Spacing*(Clearances.BundleToShell+((Shell.ShellID-Clearances.BundleToShell-Tubes.TubeOD)/Tubes.TubePitch)*(Tubes.TubePitch-Tubes.TubeOD));
579
580"Number of Tube rows Crossed in one Crossflow Section"
581        Nc      = Shell.ShellID*(1-0.02*Baffles.BaffleCut)/Tubes.TubePitch;
582       
583"Number of Effective Crossflow rows in Each Window"
584        Ncw = 0.8*(Shell.ShellID*0.01*Baffles.BaffleCut-(Clearances.BundleToShell + Tubes.TubeOD)*0.5)/Tubes.TubePitch;
585
586"Variable for calculating Ji heat transfer correction Factor"
587        a       =       1.187/(1+0.14*Shell.HeatTransfer.Re^0.370);
588
589"Variable for calculating Shell Side Pressure Drop Friction Factor"
590        b=6.30/(1+0.14*Shell.HeatTransfer.Re^0.38);
591
592"Correction Factor for Pressure Drop"
593        Rss     = Clearances.SealStrip/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/Tubes.TubePitch) ;
594
595"Ideal Shell Side Pressure Drop"
596        Shell.PressureDrop.Pideal= 2*Shell.PressureDrop.fi*(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/Tubes.TubePitch)*(Shell.Properties.Inlet.Fw/Sm)^2/(Shell.Properties.Average.rho*Shell.HeatTransfer.Phi);
597
598"Shell Pressure End Zones"
599        Shell.PressureDrop.PdEndZones = Shell.PressureDrop.Pideal*(1+ (Ncw/(Shell.ShellID*(1-0.02*Baffles.BaffleCut)/Tubes.TubePitch)))*Rb*Rspd;
600
601switch ShellRange
602       
603        case "range1":
604
605"Ji Factor"
606        Ji =0.970*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.667;
607       
608"Shell Side Pressure Drop Friction Factor"     
609        Shell.PressureDrop.fi=35*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-1;
610
611        when Shell.HeatTransfer.Re > 10 switchto "range2";
612       
613        case "range2":
614
615"Ji Factor"
616        Ji =0.900*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.631;
617
618"Shell Side Pressure Drop Friction Factor"     
619        Shell.PressureDrop.fi=32.10*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.963;
620
621        when Shell.HeatTransfer.Re > 100 switchto "range3";
622       
623        case "range3":
624
625"Ji Factor"
626        Ji =0.408*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.460;
627
628"Shell Side Pressure Drop Friction Factor"     
629        Shell.PressureDrop.fi=6.090*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.602;
630
631        when Shell.HeatTransfer.Re > 1000 switchto "range4";
632       
633        case "range4":
634       
635"Ji Factor"
636        Ji =0.107*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.266;
637
638"Shell Side Pressure Drop Friction Factor"     
639        Shell.PressureDrop.fi=0.0815*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^0.022;
640
641        when Shell.HeatTransfer.Re > 10000 switchto "range5";
642
643        case "range5":
644       
645"Ji Factor"
646        Ji =0.370*((1.33*Tubes.TubeOD/Tubes.TubePitch)^a)*Shell.HeatTransfer.Re^-0.395;
647
648"Shell Side Pressure Drop Friction Factor"     
649        Shell.PressureDrop.fi=0.391*((1.33*Tubes.TubeOD/Tubes.TubePitch)^b)*Shell.HeatTransfer.Re^-0.148;
650
651        when Shell.HeatTransfer.Re < 10000 switchto "range4";
652       
653end
654
655end
656
657switch ShellFlowRegime
658
659        case "deep laminar":
660
661"Jr Factor"     
662        Jr = (10/((Nc +Ncw)*(Baffles.NumberOfBaffles+1)))^0.18;
663
664"Js Factor"
665        Js = (Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing)^0.7 + (Baffles.Outlet_Spacing/Baffles.Central_Spacing)^0.7)/(Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing) + (Baffles.Outlet_Spacing/Baffles.Central_Spacing));
666
667"Jb Factor"
668        Jb =    exp(-1.35*( Clearances.BundleToShell+ Tubes.TubeOD)*Baffles.Central_Spacing/Sm*(1-(2*(Clearances.SealStrip/Nc)^(1/3))));
669
670"ByPass Correction Factor for Pressure Drop"
671        Rb      = exp(-4.7*((Clearances.BundleToShell + Tubes.TubeOD)*Baffles.Central_Spacing/Sm)*(1-(2*Rss)^(1/3)));
672
673"Pressure Drop Correction Factor for Unequal Baffle Spacing"
674        Rspd = (Baffles.Central_Spacing/Baffles.Outlet_Spacing) + (Baffles.Central_Spacing/Baffles.Inlet_Spacing);
675
676"Shell Pressure Drop Baffle Window"
677        Shell.PressureDrop.Pdwindow    = Baffles.NumberOfBaffles*((26/Shell.Properties.Average.rho)*mw*Shell.Properties.Average.Mu*(Ncw/(Tubes.TubePitch-Tubes.TubeOD)+ Baffles.Central_Spacing/(Dw*Dw))+ 0.5*mw*mw/Shell.Properties.Average.rho)*exp(-1.33*(1+Rs)*((Scd + Std)/Sm)^(-0.15*(1+Rs) + 0.8));
678
679        when Shell.HeatTransfer.Re > 20 switchto "laminar";
680
681        case "laminar":
682
683"Jr Factor"     
684        Jr = (10/((Nc +Ncw)*(Baffles.NumberOfBaffles+1)))^0.18 + (0.25-0.0125*Shell.HeatTransfer.Re)*((10/((Nc +Ncw)*(Baffles.NumberOfBaffles+1)))^0.18 - 1);
685
686"Js Factor"
687        Js = (Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing)^0.7 + (Baffles.Outlet_Spacing/Baffles.Central_Spacing)^0.7)/(Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing) + (Baffles.Outlet_Spacing/Baffles.Central_Spacing));
688
689"Jb Factor"
690        Jb =    exp(-1.35*( Clearances.BundleToShell+ Tubes.TubeOD)*Baffles.Central_Spacing/Sm*(1-(2*(Clearances.SealStrip/Nc)^(1/3))));
691
692"ByPass Correction Factor for Pressure Drop"
693        Rb      = exp(-4.7*((Clearances.BundleToShell+ Tubes.TubeOD)*Baffles.Central_Spacing/Sm)*(1-(2*Rss)^(1/3)));
694
695"Pressure Drop Correction Factor for Unequal Baffle Spacing"
696        Rspd = (Baffles.Central_Spacing/Baffles.Outlet_Spacing) + (Baffles.Central_Spacing/Baffles.Inlet_Spacing);
697
698"Shell Pressure Drop Baffle Window"
699        Shell.PressureDrop.Pdwindow    = Baffles.NumberOfBaffles*((26/Shell.Properties.Average.rho)*mw*Shell.Properties.Average.Mu*(Ncw/(Tubes.TubePitch-Tubes.TubeOD)+ Baffles.Central_Spacing/(Dw*Dw))+ 0.5*mw*mw/Shell.Properties.Average.rho)*exp(-1.33*(1+Rs)*((Scd + Std)/Sm)^(-0.15*(1+Rs) + 0.8));
700
701        when Shell.HeatTransfer.Re < 20 switchto "deep laminar";
702        when Shell.HeatTransfer.Re > 100 switchto "turbulent";
703
704        case "turbulent":
705
706"Jr Factor"     
707        Jr = 1;
708
709"Js Factor"
710        Js = (Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing)^0.4 + (Baffles.Outlet_Spacing/Baffles.Central_Spacing)^0.4)/(Baffles.NumberOfBaffles-1+(Baffles.Inlet_Spacing/Baffles.Central_Spacing) + (Baffles.Outlet_Spacing/Baffles.Central_Spacing));
711
712"Jb Factor"
713        Jb =    exp(-1.25*( Clearances.BundleToShell+ Tubes.TubeOD)*Baffles.Central_Spacing/Sm*(1-(2*(Clearances.SealStrip/Nc)^(1/3))));
714
715"ByPass Correction Factor for Pressure Drop"
716        Rb      = exp(-3.7*((Clearances.BundleToShell + Tubes.TubeOD)*Baffles.Central_Spacing/Sm)*(1-(2*Rss)^(1/3)));
717
718"Pressure Drop Correction Factor for Unequal Baffle Spacing"
719        Rspd = (Baffles.Central_Spacing/Baffles.Outlet_Spacing)^1.8 + (Baffles.Central_Spacing/Baffles.Inlet_Spacing)^1.8;
720
721"Shell Pressure Drop Baffle Window"
722        Shell.PressureDrop.Pdwindow    = Baffles.NumberOfBaffles*((2+0.6*Ncw)*0.5*mw*mw/Shell.Properties.Average.rho)*exp(-1.33*(1+Rs)*((Scd + Std)/Sm)^(-0.15*(1+Rs) + 0.8));
723       
724        when Shell.HeatTransfer.Re < 100 switchto "laminar";
725       
726end
727
728"Shell Pressure Drop Cross Flow"
729        Shell.PressureDrop.PdCross = Shell.PressureDrop.Pideal*Rb*(Baffles.NumberOfBaffles-1)*exp(-1.33*(1+Rs)*((Scd + Std)/Sm)^(-0.15*(1+Rs) + 0.8));
730
731"Shell Side Phi correction"
732        Shell.HeatTransfer.Phi  = (Shell.Properties.Average.Mu/Shell.Properties.Wall.Mu)^0.14;
733
734"Tube Side Phi correction"
735        Tubes.HeatTransfer.Phi  = (Tubes.Properties.Average.Mu/Tubes.Properties.Wall.Mu)^0.14;
736       
737"Shell Side inlet Nozzle rho-V^2"
738        Shell.PressureDrop.RVsquare_in = Shell.Properties.Inlet.rho*(Shell.PressureDrop.Vnozzle_in)^2;
739
740"Shell Side Outlet Nozzle rho-V^2"
741        Shell.PressureDrop.RVsquare_out = Shell.Properties.Outlet.rho*(Shell.PressureDrop.Vnozzle_out)^2;
742
743"Tube Side Pressure Drop"
744        Tubes.PressureDrop.PdTube       = 2*Tubes.PressureDrop.fi*Tubes.TubeLength*Tubes.Properties.Average.rho*(Tubes.HeatTransfer.Vtube^2)*Tubes.Tubepasses/(Tubes.TubeID*Tubes.HeatTransfer.Phi);
745
746"Pressure Drop Tube Side Inlet Nozzle"
747        Tubes.PressureDrop.Pdnozzle_in  = 0.5*Kinlet_Tube*Tubes.Properties.Inlet.rho*Tubes.PressureDrop.Vnozzle_in^2;
748
749"Velocity Tube Side Inlet Nozzle"
750        Tubes.PressureDrop.Vnozzle_in   = Tubes.Properties.Inlet.Fw/(Tubes.Properties.Inlet.rho*Ainozzle_Tube);
751
752"Pressure Drop Tube Side Outlet Nozzle"
753        Tubes.PressureDrop.Pdnozzle_out = 0.5*Koutlet_Tube*Tubes.Properties.Outlet.rho*Tubes.PressureDrop.Vnozzle_out^2;
754
755"Velocity Tube Side Outlet Nozzle"
756        Tubes.PressureDrop.Vnozzle_out  = Tubes.Properties.Inlet.Fw/(Tubes.Properties.Outlet.rho*Aonozzle_Tube);
757
758"Shell Pressure Drop Inlet Nozzle"
759        Shell.PressureDrop.Pdnozzle_in  = (0.5*Shell.Properties.Inlet.Fw^2/Shell.Properties.Inlet.rho)*((1/Ainozzle_Shell^2)+(1/Aeinozzle_Shell^2));
760
761"Velocity Shell Side Inlet Nozzle"
762        Shell.PressureDrop.Vnozzle_in   = Shell.Properties.Inlet.Fw/(Shell.Properties.Inlet.rho*Ainozzle_Shell);
763
764"Shell Pressure Drop Outlet Nozzle"
765        Shell.PressureDrop.Pdnozzle_out = (0.5*Shell.Properties.Outlet.Fw^2/Shell.Properties.Outlet.rho)*((1/Ainozzle_Shell^2)+(1/Aeinozzle_Shell^2));
766
767"Velocity Shell Side Outlet Nozzle"
768        Shell.PressureDrop.Vnozzle_out  = Shell.Properties.Outlet.Fw/(Shell.Properties.Outlet.rho*Aonozzle_Shell);
769
770"Pressure Drop Shell Stream"
771        OutletShell.P  = InletShell.P - Shell.PressureDrop.Pdtotal;     
772       
773"Pressure Drop Tube Stream"
774        OutletTube.P  = InletTube.P - Tubes.PressureDrop.Pdtotal;
775
776"Shell Wall Temperature"
777        Shell.Properties.Wall.Twall     = (Shell.Properties.Average.T+Tubes.Properties.Average.T)/2;
778
779"Tube Wall Temperature"
780        Tubes.Properties.Wall.Twall  = (Shell.Properties.Average.T+Tubes.Properties.Average.T)/2;
781
782"Tube Side Velocity"
783        Tubes.HeatTransfer.Vtube        = Tubes.Properties.Inlet.Fw*Tubes.Tubepasses/((Pi*Tubes.TubeID*Tubes.TubeID/4)*Tubes.Properties.Average.rho*Tubes.NumberOfTubes);
784
785"Tube Side Reynolds Number"
786        Tubes.HeatTransfer.Re           = (Tubes.Properties.Average.rho*Tubes.HeatTransfer.Vtube*Tubes.TubeID)/Tubes.Properties.Average.Mu;
787       
788"Tube Side Prandtl Number"
789        Tubes.HeatTransfer.PR           = ((Tubes.Properties.Average.Cp/Tubes.Properties.Average.Mw)*Tubes.Properties.Average.Mu)/Tubes.Properties.Average.K;
790
791"Tube Side Film Coefficient"
792        Tubes.HeatTransfer.htube= (Tubes.HeatTransfer.Nu*Tubes.Properties.Average.K/Tubes.TubeID)*Tubes.HeatTransfer.Phi;
793
794"Shell Side Prandtl Number"
795        Shell.HeatTransfer.PR           = ((Shell.Properties.Average.Cp/Shell.Properties.Average.Mw)*Shell.Properties.Average.Mu)/Shell.Properties.Average.K;
796
797"Overall Heat Transfer Coefficient Dirty"
798        Details.Ud=1/(Tubes.TubeOD/(Tubes.HeatTransfer.htube*Tubes.TubeID)+Shell.Fouling+Tubes.Fouling*(Tubes.TubeOD/Tubes.TubeID)+(Tubes.TubeOD*ln(Tubes.TubeOD/Tubes.TubeID)/(2*Tubes.Kwall))+(1/(Shell.HeatTransfer.hshell)));
799
800"Overall Heat Transfer Coefficient Clean"
801        Details.Uc=1/(Tubes.TubeOD/(Tubes.HeatTransfer.htube*Tubes.TubeID)+(Tubes.TubeOD*ln(Tubes.TubeOD/Tubes.TubeID)/(2*Tubes.Kwall))+(1/(Shell.HeatTransfer.hshell)));
802
803"Exchange Surface Area"
804        Details.A=Pi*Tubes.TubeOD*Tubes.NumberOfTubes*Tubes.TubeLength;
805
806"Baffle Spacing Constraint"
807        Tubes.TubeLength = Baffles.Inlet_Spacing+Baffles.Outlet_Spacing+Baffles.Central_Spacing*(Baffles.NumberOfBaffles-1);
808
809"Shell Side Reynolds Number"
810        Shell.HeatTransfer.Re = (Tubes.TubeOD*Shell.Properties.Inlet.Fw/Sm)/Shell.Properties.Average.Mu;
811
812"Shell Heat Transfer Coefficient"
813        Shell.HeatTransfer.hshell                       = Ji*(Shell.Properties.Average.Cp/Shell.Properties.Average.Mw)*(Shell.Properties.Inlet.Fw/Sm)*(Shell.HeatTransfer.PR^(-2/3))*Jtotal*Shell.HeatTransfer.Phi;
814
815end
816
817Model ShellandTubes_NTU         as ShellandTubesBasic
818
819ATTRIBUTES
820        Pallete = true;
821        Icon    = "icon/ShellandTubes_NTU";     
822        Brief  = "Shell and Tubes Heat Exchangers";
823        Info  =
824        "to be documented";
825
826VARIABLES
827
828Method as NTU_Basic (Brief="NTU Method");
829
830EQUATIONS
831
832"Number of Units Transference"
833        Method.NTU*Method.Cmin = Details.Ud*Pi*Tubes.TubeOD*Tubes.NumberOfTubes*Tubes.TubeLength;
834
835"Minimum Heat Capacity"
836        Method.Cmin  = min([Method.Ch,Method.Cc]);
837       
838"Maximum Heat Capacity"
839        Method.Cmax  = max([Method.Ch,Method.Cc]);
840
841"Thermal Capacity Ratio"
842        Method.Cr    = Method.Cmin/Method.Cmax;
843       
844switch HotSide
845       
846        case "shell":
847
848"Duty"
849        Details.Q       = Method.Eft*Method.Cmin*(InletShell.T-InletTube.T);
850
851"Hot Stream Heat Capacity"
852        Method.Ch  = InletShell.F*Shell.Properties.Average.Cp;
853       
854"Cold Stream Heat Capacity"
855        Method.Cc = InletTube.F*Tubes.Properties.Average.Cp;
856
857        when InletTube.T > InletShell.T switchto "tubes";
858       
859        case "tubes":
860
861"Duty"
862        Details.Q       = Method.Eft*Method.Cmin*(InletTube.T-InletShell.T);
863
864"Hot Stream Heat Capacity"
865        Method.Cc = InletShell.F*Shell.Properties.Average.Cp;
866       
867"Cold Stream Heat Capacity"
868        Method.Ch = InletTube.F*Tubes.Properties.Average.Cp;
869       
870        when InletTube.T < InletShell.T switchto "shell";
871       
872end
873
874switch ShellType
875       
876        case "Fshell":
877       
878"Effectiveness Correction for 2 pass shell side"
879        Method.Eft1 = 2*(1+Method.Cr+sqrt(1+Method.Cr^2)*((1+exp(-Method.NTU*sqrt(1+Method.Cr^2)))/(1-exp(-Method.NTU*sqrt(1+Method.Cr^2)))) )^-1;
880
881"TEMA F Shell Effectiveness"
882        Method.Eft = ( ((1-Method.Eft1*Method.Cr)/(1-Method.Eft1))^2 -1  )*( ((1-Method.Eft1*Method.Cr)/(1-Method.Eft1))^2 - Method.Cr )^-1;
883
884        case "Eshell":
885       
886"TEMA E Shell Effectiveness"
887        Method.Eft = 2*(1+Method.Cr+sqrt(1+Method.Cr^2)*((1+exp(-Method.NTU*sqrt(1+Method.Cr^2)))/(1-exp(-Method.NTU*sqrt(1+Method.Cr^2)))) )^-1;
888#       Method.Eft = 1;
889
890"Variable not in use when 1 Pass Shell Side"
891        Method.Eft1     = 1;
892       
893end
894
895end
896
897Model ShellandTubes_LMTD        as ShellandTubesBasic
898
899ATTRIBUTES
900        Pallete = true;
901        Icon    = "icon/ShellandTubes_LMTD";   
902        Brief  = "Shell and Tubes Heat Exchangers";
903        Info  =
904        "to be documented.";
905
906PARAMETERS
907
908LMTDcorrection  as Switcher     (Brief="LMTD Correction Factor Model",Valid=["Bowmann","Fakeri"],Default="Bowmann");
909       
910VARIABLES
911
912Method  as LMTD_Basic;
913R                       as positive     (Brief=" Capacity Ratio for LMTD Correction Fator",Lower=1e-6);
914P                       as positive     (Brief="Non - Dimensional Variable for LMTD Correction Fator ",Lower=1e-6);
915Pc                      as positive     (Brief="Non - Dimensional Variable for LMTD Correction Fator when 2 Pass Shell Side",Lower=1e-6);
916Rho             as positive     (Brief="Non - Dimensional Variable for LMTD Correction Fator in Fakeri Equation",Lower=1e-6);
917Phi     as positive     (Brief="Non - Dimensional Variable for LMTD Correction Fator in Fakeri Equation",Lower=1e-6);
918lambdaN as positive     (Brief="Non - Dimensional Variable for LMTD Correction Fator in Fakeri Equation when 2 Pass Shell Side",Lower=1e-6);
919lambda1 as positive  (Brief="Non - Dimensional Variable for LMTD Correction Fator in Fakeri Equationwhen 2 Pass Shell Side",Lower=1e-6);
920
921EQUATIONS
922
923"Exchange Surface Area"
924        Details.Q   = Details.Ud*Pi*Tubes.TubeOD*Tubes.NumberOfTubes*Tubes.TubeLength*Method.LMTD*Method.Fc;
925
926switch HotSide
927       
928        case "shell":
929
930"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation "
931        Phi*(2*((InletShell.T+ OutletShell.T)-(InletTube.T+ OutletTube.T)))  = (sqrt(((InletShell.T- OutletShell.T)*(InletShell.T- OutletShell.T))+((OutletTube.T - InletTube.T)*(OutletTube.T - InletTube.T))));
932
933"R: Capacity Ratio for LMTD Correction Fator"
934        R*(OutletTube.T - InletTube.T ) = (InletShell.T-OutletShell.T);
935
936"P: Non - Dimensional Variable for LMTD Correction Fator"
937        P*(InletShell.T- InletTube.T)= (OutletTube.T-InletTube.T);
938       
939"Temperature Difference at Inlet"
940        Method.DT0 = InletShell.T - OutletTube.T;
941
942"Temperature Difference at Outlet"
943        Method.DTL = OutletShell.T - InletTube.T;
944
945        when InletTube.T > InletShell.T switchto "tubes";
946       
947        case "tubes":
948
949"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation "
950        Phi*(2*((InletShell.T+ OutletShell.T)-(InletTube.T+ OutletTube.T)))  = (sqrt(((InletShell.T- OutletShell.T)*(InletShell.T- OutletShell.T))+((OutletTube.T - InletTube.T)*(OutletTube.T - InletTube.T))));
951
952"R: Capacity Ratio for LMTD Correction Fator"
953        R*(OutletShell.T - InletShell.T ) = (InletTube.T-OutletTube.T);
954
955"P: Non - Dimensional Variable for LMTD Correction Fator"
956        P*(InletTube.T- InletShell.T)= (OutletShell.T-InletShell.T);
957       
958"Temperature Difference at Inlet"
959        Method.DT0 = InletTube.T - OutletShell.T;
960
961"Temperature Difference at Outlet"
962        Method.DTL = OutletTube.T - InletShell.T;
963
964       
965        when InletTube.T < InletShell.T switchto "shell";
966       
967end
968
969switch ShellType
970       
971        case "Fshell":
972       
973switch LMTDcorrection
974       
975        case "Bowmann":
976       
977" Variable not in use with Bowmann equation"
978        lambdaN =1;
979       
980" Variable not in use with Bowmann equation"
981        lambda1 =1;
982
983#" Variable not in use with Bowmann equation"
984#       Phi = 1;
985
986" Variable not in use with Bowmann equation"
987        Rho =1;
988
989if R equal 1
990       
991        then
992       
993"Non Dimensional Variable for LMTD Correction Fator when 2 Pass Shell Side"
994        Pc*(2-P)= P;
995
996"LMTD Correction Fator when 2 Pass Shell Side"
997        Method.Fc= (sqrt(2)*Pc)/((1-Pc)*ln( abs( ( 2-Pc*0.585786)/( 2-Pc*3.414214))));
998       
999        else
1000       
1001"Non Dimensional Variable for LMTD Correction Fator when 2 Pass Shell Side"
1002        Pc = (sqrt(abs(( 1-P*R)/(1-P)))-1)/(sqrt(abs(( 1-P*R)/(1-P)))-R);
1003
1004"LMTD Correction Fator when 2 Pass Shell Side"
1005        Method.Fc = sqrt(R*R+1)*ln(abs((1-Pc*R)/(1-Pc)))/((1-R)*ln( abs( ( 2-Pc*(R+1-sqrt(R*R+1)))/ ( 2-Pc*(R + 1 + sqrt(R*R+1))))));
1006       
1007end
1008
1009        case "Fakeri":
1010       
1011" Variable not in use with Fakeri equation"
1012        Pc = P;
1013       
1014"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation"
1015        Rho*(1-P*R) = (1-P);
1016
1017#"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation "
1018#       Phi = (sqrt(((Inlet.Hot.T - Outlet.Hot.T)*(Inlet.Hot.T- Outlet.Hot.T))+((Outlet.Cold.T -  Inlet.Cold.T)*(Outlet.Cold.T -  Inlet.Cold.T))))/(2*((Inlet.Hot.T + Outlet.Hot.T)-( Inlet.Cold.T + Outlet.Cold.T)));
1019
1020if Rho equal 1
1021       
1022        then
1023       
1024" Variable not in use when Rho = 1"
1025        lambdaN =       1;
1026       
1027" Variable not in use when Rho = 1"
1028        lambda1 =       1;
1029       
1030"LMTD Correction Fator when 2 Pass Shell Side"
1031        Method.Fc = (2*Phi )/(ln(abs((1+Phi )/(1-Phi ))));
1032       
1033        else
1034
1035"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation"
1036        lambdaN = (1/ln(sqrt(abs(Rho))))*((2*sqrt(abs(Rho))-2)/(sqrt(abs(Rho))+1));
1037       
1038"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation"
1039        lambda1 = (1/ln(abs(Rho)))*((2*Rho-2)/(Rho+1));
1040
1041"LMTD Correction Fator when 2 Pass Shell Side"
1042        Method.Fc =     ((2*Phi *(lambdaN/lambda1))/(ln(abs((1+Phi *(lambdaN/lambda1))/(1-Phi *(lambdaN/lambda1))))))*(1/lambdaN);
1043
1044end
1045
1046
1047end
1048
1049        case "Eshell":
1050       
1051" Variable not in use when 1 Pass Shell Side"
1052        lambdaN =1;
1053
1054" Variable not in use when 1 Pass Shell Side"
1055        lambda1 =1;
1056       
1057" Variable not in use when 1 Pass Shell Side"
1058        Pc = P;
1059       
1060switch LMTDcorrection
1061       
1062        case "Bowmann":
1063
1064#" Variable not in use with Bowmann equation"
1065#       Phi  = 1;
1066       
1067" Variable not in use with Bowmann equation"
1068        Rho = 1;
1069
1070
1071 if R equal 1
1072       
1073    then
1074       
1075"LMTD Correction Fator when 1 Pass Shell Side"
1076        Method.Fc = (sqrt(2)*P)/((1-P)*ln( abs( ( 2-P*0.585786)/( 2-P*3.414214))));
1077
1078        else
1079       
1080"LMTD Correction Fator when 1 Pass Shell Side"
1081        Method.Fc = sqrt(R*R+1)*ln(abs((1-P*R)/(1-P)))/((1-R)*ln( abs( ( 2-P*(R+1-sqrt(R*R+1)))/ ( 2-P*(R + 1 + sqrt(R*R+1))))));
1082
1083end
1084
1085        case "Fakeri":
1086
1087#"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation "
1088#       Phi  = (sqrt(((Inlet.Hot.T- Outlet.Hot.T)*(Inlet.Hot.T- Outlet.Hot.T))+((Outlet.Cold.T - Inlet.Cold.T)*(Outlet.Cold.T - Inlet.Cold.T))))/(2*((Inlet.Hot.T+ Outlet.Hot.T)-(Inlet.Cold.T+ Outlet.Cold.T)));
1089
1090"Non Dimensional Variable for LMTD Correction Fator in Fakeri Equation"
1091        Rho*(1-P*R) = (1-P);
1092
1093if Rho equal 1
1094       
1095        then
1096       
1097"LMTD Correction Fator when 1 Pass Shell Side"
1098        Method.Fc = (4*Phi)/(ln(abs((1+2*Phi)/(1-2*Phi))));
1099
1100        else
1101
1102"LMTD Correction Fator when 1 Pass Shell Side"
1103        Method.Fc = (2*Phi*(Rho+1)*ln(abs(Rho)))/( ln(abs((1+2*Phi)/(1-2*Phi)))*(Rho-1));
1104       
1105end
1106
1107end
1108
1109       
1110end
1111
1112end
1113
Note: See TracBrowser for help on using the repository browser.