#*------------------------------------------------------------------- * EMSO Model Library (EML) Copyright (C) 2004 - 2007 ALSOC. * * This LIBRARY is free software; you can distribute it and/or modify * it under the therms of the ALSOC FREE LICENSE as available at * http://www.enq.ufrgs.br/alsoc. * * EMSO Copyright (C) 2004 - 2007 ALSOC, original code * from http://www.rps.eng.br Copyright (C) 2002-2004. * All rights reserved. * * EMSO is distributed under the therms of the ALSOC LICENSE as * available at http://www.enq.ufrgs.br/alsoc. * *---------------------------------------------------------------------- * Author: Marcos L. Alencastro, Estefane S. Horn (Revised Gerson B. Bicca) * $Id: compressor.mso 681 2008-11-18 14:48:24Z bicca $ *--------------------------------------------------------------------*# using "streams"; Model centrifugal_compressor ATTRIBUTES Pallete = true; Icon = "icon/CentrifugalCompressor"; Brief = "Model of a centrifugal compressor."; Info = "To be documented == References == [1] GPSA, 1979, Engineering Data Book, Chapter 4, 5-9 - 5-10. [2] Bloch, Heinz P., A Practical Guide to Compressor Technology, John Wiley & Sons, Incorporate, 2006. [3] Mark R. Sandberg, Equation Of State Influences On Compressor Performance Determination,PROCEEDINGS OF THE THIRTY-FOURTH TURBOMACHINERY SYMPOSIUM, 2005."; PARAMETERS outer PP as Plugin (Brief = "External Physical Properties", Type="PP"); outer NComp as Integer (Brief = "Number of chemical components", Lower = 1); Rgas as positive (Brief = "Constant of Gases", Unit= 'kJ/kmol/K', Default = 8.31451,Hidden=true); Mw(NComp) as molweight (Brief = "Molar Weight"); CompressorType as Switcher (Brief = "Compressor Model Type",Valid=["Polytropic With GPSA Method","Isentropic With GPSA Method","Isentropic With ASME Method","Polytropic With ASME Method"], Default="Isentropic With GPSA Method"); VARIABLES Pratio as positive (Brief = "Pressure Ratio", Lower = 1E-6, Symbol ="P_{ratio}"); Pdrop as press_delta (Brief = "Pressure Drop", DisplayUnit = 'kPa', Symbol ="\Delta P"); Pincrease as press_delta (Brief = "Pressure Increase",Lower = 0, DisplayUnit = 'kPa', Symbol ="P_{incr}"); Head as energy_mass (Brief = "Actual Head"); HeadIsentropic as energy_mass (Brief = "Isentropic Head"); HeadPolytropic as energy_mass (Brief = "Polytropic Head"); HeadCorrection as positive (Brief = "Schultz Polytropic Head Correction"); EfficiencyOperation as positive (Brief = "Compressor efficiency - Polytropic or Isentropic (See Compressor Type)",Lower=1E-3,Upper=1); MechanicalEff as positive (Brief = "Mechanical efficiency",Lower=1E-3,Upper=1); FluidPower as power (Brief = "Fluid Power"); BrakePower as power (Brief = "Brake Power"); PowerLoss as power (Brief = "Power Losses"); PolyCoeff as positive (Brief = "Polytropic Coefficient", Lower=0.2,Protected=true); IseCoeff as positive (Brief = "Isentropic Coefficient", Lower=0.2,Protected=true); PolytropicEff as positive (Brief = "Polytropic efficiency",Lower=1E-3,Upper=1,Protected=true); IsentropicEff as positive (Brief = "Isentropic efficiency",Lower=1E-3,Upper=1,Protected=true); Tisentropic as temperature (Brief = "Isentropic Temperature",Protected=true); hise as enth_mol (Brief = "Enthalpy at constant entropy",Hidden=true); Mwm as molweight (Brief = "Mixture Molar Weight",Hidden=true); rho_in as dens_mass (Brief = "Mass Density at inlet conditions", Lower = 1E-6, Protected=true); rho_out as dens_mass (Brief = "Mass Density at outlet conditions", Lower = 1E-6, Protected=true); rho_ise as dens_mass (Brief = "Mass Density at isentropic conditions", Lower = 1E-6, Hidden=true); Zfac_in as fraction (Brief = "Compressibility factor at inlet", Lower = 1E-3, Protected=true); Zfac_out as fraction (Brief = "Compressibility factor at outlet", Lower = 1E-3, Protected=true); in Inlet as stream (Brief = "Inlet stream", PosX=0.437, PosY=1, Symbol="_{in}"); out Outlet as streamPH (Brief = "Outlet stream", PosX=0.953, PosY=0.0, Symbol="_{out}"); in WorkIn as work_stream (Brief = "Work Inlet", PosX=0, PosY=0.45); SET Mw = PP.MolecularWeight(); Rgas = 8.31451*'kJ/kmol/K'; EQUATIONS "Overall Molar Balance" Outlet.F = Inlet.F; "Component Molar Balance" Outlet.z = Inlet.z; "Average Molecular Weight" Mwm = sum(Mw*Inlet.z); "Pressure Ratio" Outlet.P = Inlet.P * Pratio; "Pressure Drop" Outlet.P = Inlet.P - Pdrop; "Pressure Increase" Outlet.P = Inlet.P + Pincrease; "Mass Density at inlet conditions" rho_in = PP.VapourDensity(Inlet.T, Inlet.P, Inlet.z); "Mass Density at outlet conditions" rho_out= PP.VapourDensity(Outlet.T, Outlet.P, Outlet.z); "Mass Density at isentropic conditions" rho_ise= PP.VapourDensity(Tisentropic, Outlet.P, Outlet.z); "Enthalpy at isentropic conditions" hise = PP.VapourEnthalpy(Tisentropic, Outlet.P, Outlet.z); "Compressibility factor at Inlet Conditions" Zfac_in = PP.VapourCompressibilityFactor(Inlet.T,Inlet.P,Inlet.z); "Compressibility factor at Outlet Conditions" Zfac_out = PP.VapourCompressibilityFactor(Outlet.T,Outlet.P,Outlet.z); "Isentropic Efficiency" IsentropicEff*(Outlet.h-Inlet.h) = (hise-Inlet.h); "Actual Head" Head*Mwm = (Outlet.h-Inlet.h); "Isentropic Outlet Temperature" PP.VapourEntropy(Tisentropic, Outlet.P, Outlet.z) = PP.VapourEntropy(Inlet.T, Inlet.P, Inlet.z); "Brake Power" BrakePower = -WorkIn.Work; "Brake Power" BrakePower*MechanicalEff = FluidPower; "Power Loss" PowerLoss = BrakePower - FluidPower; "Polytropic-Isentropic Relation" PolytropicEff*HeadIsentropic = HeadPolytropic*IsentropicEff; "Fluid Power" FluidPower = Head*Mwm*Inlet.F; switch CompressorType case "Isentropic With GPSA Method": "Efficiency" EfficiencyOperation = IsentropicEff; "Polytropic Efficiency" PolytropicEff*IseCoeff*(PolyCoeff-1) = PolyCoeff*(IseCoeff-1); "Isentropic Coefficient" HeadIsentropic = (0.5*Zfac_in+0.5*Zfac_out)*(1/Mwm)*(IseCoeff/(IseCoeff-1.001))*Rgas*Inlet.T*((Pratio)^((IseCoeff-1.001)/IseCoeff) - 1); "Polytropic Coefficient" HeadPolytropic = (0.5*Zfac_in+0.5*Zfac_out)*(1/Mwm)*(PolyCoeff/(PolyCoeff-1.001))*Rgas*Inlet.T*((Pratio)^((PolyCoeff-1.001)/PolyCoeff) - 1); "Head Correction" HeadCorrection =1; "Isentropic Head" HeadIsentropic = Head*IsentropicEff; case "Polytropic With GPSA Method": "Efficiency" EfficiencyOperation = PolytropicEff; "Polytropic Efficiency" PolytropicEff*IseCoeff*(PolyCoeff-1) = PolyCoeff*(IseCoeff-1); "Isentropic Coefficient" HeadIsentropic = (0.5*Zfac_in+0.5*Zfac_out)*(1/Mwm)*(IseCoeff/(IseCoeff-1.001))*Rgas*Inlet.T*((Pratio)^((IseCoeff-1.001)/IseCoeff) - 1); "Polytropic Coefficient" HeadPolytropic = (0.5*Zfac_in+0.5*Zfac_out)*(1/Mwm)*(PolyCoeff/(PolyCoeff-1.001))*Rgas*Inlet.T*((Pratio)^((PolyCoeff-1.001)/PolyCoeff) - 1); "Head Correction" HeadCorrection =1; "Isentropic Head" HeadIsentropic = Head*IsentropicEff; case "Isentropic With ASME Method": "Efficiency" EfficiencyOperation = IsentropicEff; "Isentropic Coefficient" IseCoeff*ln(rho_ise/rho_in) = ln(Outlet.P/Inlet.P); "Polytropic Coefficient" PolyCoeff*ln(rho_out/rho_in) = ln(Outlet.P/Inlet.P); "Isentropic Head" HeadIsentropic*rho_in = (IseCoeff/(IseCoeff-1.001))*Inlet.P*HeadCorrection*((Pratio)^((IseCoeff-1.001)/IseCoeff) - 1); "Polytropic Head" HeadPolytropic*rho_in = (PolyCoeff/(PolyCoeff-1.001))*Inlet.P*HeadCorrection*((Pratio)^((PolyCoeff-1.001)/PolyCoeff) - 1); "Schultz Polytropic Head Correction" HeadCorrection*Mwm*(IseCoeff/(IseCoeff-1.001))*(Outlet.P/rho_ise -Inlet.P/rho_in) = (hise-Inlet.h); case "Polytropic With ASME Method": "Efficiency" EfficiencyOperation = PolytropicEff; "Isentropic Coefficient" IseCoeff*ln(rho_ise/rho_in) = ln(Outlet.P/Inlet.P); "Polytropic Coefficient" PolyCoeff*ln(rho_out/rho_in) = ln(Outlet.P/Inlet.P); "Isentropic Head" HeadIsentropic*rho_in = (IseCoeff/(IseCoeff-1.001))*Inlet.P*HeadCorrection*((Pratio)^((IseCoeff-1.001)/IseCoeff) - 1); "Polytropic Head" HeadPolytropic*rho_in = (PolyCoeff/(PolyCoeff-1.001))*Inlet.P*HeadCorrection*((Pratio)^((PolyCoeff-1.001)/PolyCoeff) - 1); "Schultz Polytropic Head Correction" HeadCorrection*Mwm*(IseCoeff/(IseCoeff-1.001))*(Outlet.P/rho_ise -Inlet.P/rho_in) = (hise-Inlet.h); end end