Compression:  Why is this done in multiple steps?

Mark J McCready
Professor of Chemical and Biomolecular Engineering
University of Notre Dame
mjm@nd.edu
chemeprof.com
6/2/21

Conclusions:

1.  For an ideal gas, we see that the compression work is a factor of the pressure ratio times the initial temperature.  Thus starting at a lower temperature, or more likely breaking the compression into a series of discrete steps with intermediate cooling, will require less work.
2.  Compressions of permanent gases are ~ideal --if the starting T is well above Tc. (maybe not for CO2).  The temperature of the gas increases fast enough so that the gas is roughly ideal throughout the compression!

Situation of interest:  A continuous compression process.

It is often necessary to compress a gas from 1 ATM to ~100 PSIG (~7 ATM) or “pipeline pressure” which could be 1000 PSI or more.  
This is done using multiple compression steps, commonly with a compression ratio of 3-4, with intermediate cooling.
We will explore below some of the reasons that multiple steps with cooling is done.

Note that in addition to the thermodynamics discussed here, as a gas is compressed and its volume decreases, the flow area also decreases and so there is some convenience to using separate devices of different cross section.  Also if there are separate device, the shaft rotation frequency does not have to be the same for each stage.

Ideal gas

As will become clear below,  we can largely answer the main question  just by considering an ideal gas.

The idealization of a process compressor is that compression is essentially adiabatic.  This assumption is justified because the residence time in a compressor is short compared to the time scale for heat transfer.  Further, while large compressors have a rotating shaft with blades and internal fixed fins, these are designed to create a “smooth” flow path of ever decreasing area.  Hence the degree of entropy generation small.  

We start with an adiabatic, isentropic ideal gas.

The relation between temperature and pressure is

((Subscript[P, 2])/(Subscript[P, 1])) = (((((Subscript[T, 2])/(Subscript[T, 1])) ))^((Subscript[C, P])/R))

For a steady state compressor the  required power input is the mass flow rate times the enthalpy change.  

For an ideal gas dH = (Subscript[C, P]) dT.

Let’s get the enthalpy change in terms of the pressure increase.  It is easiest to use PR and TR as P2/P1, i.e., the pressure ratio.  Re-writing the equation above...

PR ==(TR)^(cp/rr)

ans = Solve[%, TR]

Now substitute into  the equation for ΔH

ΔH = cp ( T2 - T1)

ΔH/.T2-> T1 TR

%/.ans[[1]]

Now get the enthalpy in terms of just the pressure change;

%/.PR-> P2/P1

enthalpychange = FullSimplify[%]

We see that the work for any relative pressure increase depends on the initial temperature!

Plot[(enthalpychange/.{cp-> 7/2 rr, T1->298, P1->1})/.rr->8.314,{P2,1.,10}, AxesLabel->{"pressure ratio","enthalpy change"}]

The equation makes the main answer clear.  Why do multistage compression?  Because the work required for a given compression ratio depends on the initial temperature.  We could reduce the amount of work for a compression ratio of 4, by breaking it into 2 steps of a compression ratio of 2 with intermediate cooling back to the initial temperature.

onestep  = cp (-1+(((4))^(rr/cp))) T1

twostep = 2 cp (-1+(((2))^(rr/cp))) T1

temp = FullSimplify[twostep/onestep]

For a diatomic ideal gas, we usually pick Cp = 7/2 R

N[temp/. cp-> 7/2 rr]

The 10% reduction in power requirement may seem modest, but for a pipeline, where there is no “value - added” just from the compression, all savings are important.  However, it is possible if the total change in pressure is just a factor of 4, the capital costs of the additional compressor and heat exchanger may out-weigh the potential operating cost savings.

temperature increase??

We should check the final temperature.   Starting at 298K

T2 = T1 ((( P2/P1))^(rr/cp))

298. ( 4)^(2/7)

This is probably acceptable, but above 500K may not be.  So for larger compression ratios you would need cooling to prevent the temperature from getting too high.  In this case the stainless steel blades are fine, but the seals and bearing components are limiting.  (In contrast, for a main turbine for power generation from steam, the steam temperature can’t exceed what is safe for the structural integrity of the stainless steel.)

Larger compression ratio

If you need to do a factor of 16.

onestep  = cp (-1+(((16))^(rr/cp))) T1

twostep = 2 cp (-1+(((4))^(rr/cp))) T1

temp1 = (FullSimplify[twostep/onestep])/. cp-> 7/2 rr

Now going from 1 to 2 steps saves 20% of the power requirement.

N[temp1]

This energy saving is significant.  Also, if we check the temperature  -- which was fine for a factor of 4 compression,

T2 = T1 ((( P2/P1))^(rr/cp))

298. ( 16)^(2/7)

which would be too high for a standard compressor.  For large scale process you might even do 3 steps of about 2.5

16^.333

threestep = 3 cp (-1+(((2.52))^(rr/cp))) T1

onestep  = cp (-1+(((16))^(rr/cp))) T1

This would build in a 25 % reduction in power requirement:

(FullSimplify[threestep/onestep])/. cp-> 7/2 rr

A general expression in terms of pressure ratio, pr and number of stages, n can be obtained.

multistage =  n cp (-1+(((pr^(1/n)))^(rr/cp))) T1/(cp (-1+(((pr))^(rr/cp))) T1)

Plot[{multistage/.{ pr->4, cp->7/2 rr},multistage/.{ pr->9, cp->7/2 rr},multistage/.{ pr->16, cp->7/2 rr}},{n,1,10}, AxesLabel->{"n, number of stages","power requirement"},PlotLegends->{"pressure ratio = 4","pressure ratio = 9","pressure ratio = 16"} ]

We see that as we would expect, even “theoretically” as n increases, the benefits of an additional stage diminishes.

What if the gas is not ideal?

You might like to use your favorite cubic equation of state to answer the question.  We might find that the quantitative effect of non ideality is not too large.   
We will use van der Waals for this example.

vdwaal = (P +  a/v^2) ( v-  b) ==  rr T

Kumar et al., “Van der Waal’s equation for an adiabatic process and its Carnot engine efficiency” (2017) (arXiv:1802.01474v1) show that for an adiabatic process the van der Waals equation has a formula similar to ideal for the pressure ratio.  The result is,

vdwadiabatic =  ( P +  a/v^2) ( v -  b)^Γ

(P+(a/(v^2))) (((-b+v))^Γ)

where Γ = R/(Subscript[C, v]) + 1.  For the adiabatic process, vdwadiabatic = constant.

 If a and b = 0, then we would get the ideal gas result, that Γ = (Subscript[C, P])/(Subscript[C, v]) and p ((v )^γ)= constant.

It would be good to pick a specific gas and get the numbers correct rather than just showing trends from “made up” constants.  Note that any difference in the enthalpy change for the vdWaal gas compared to ideal is both because the volume of the initial state will not match and the difference that the “a” and “b” will have on the compression process.

Choose N2.

We start with:  

a = ((27 (R^2) (Subscript[T, C]^2))/(64 (Subscript[P, c]))),  b = (( R (Subscript[T, c]))/(8(Subscript[P, c])))

Tc = 126.6 K, Pc = 3.394 MPa,  R = 8.314 MPa cm^3/K/mol

((27 (R^2) (Subscript[T, C]^2))/(64 (Subscript[P, c])))/.{R-> 8.314 MPa cm^3/K/mol, (Subscript[P, c])-> 3.394 MPa, (Subscript[T, C])->126.6 K}

(( R (Subscript[T, c]))/(8(Subscript[P, c])))/.{R-> 8.314 MPa cm^3/K/mol, (Subscript[P, c])-> 3.394 MPa, (Subscript[T, C])->126.6 K}

v/.FindRoot[(vdwaal/.{T->298, rr->8.314, a->137708, b->.306,P->.1}),{v,20000}]

As a check ideal:

v/.FindRoot[(vdwaal/.{T->298, rr->8.314, a->0, b->0,P->.1}),{v,20000}]

8.314  298/.1

OK.  We are off to a good start.  Here is the volume as a function of pressure at constant T.

Plot[v/.FindRoot[(vdwaal/.{T->298,  rr->8.314, a->137708, b->.306}),{v,20000}],{P,.1,1},PlotRange->All,PlotLegends->{"IsoThermal"},PlotStyle->Green, AxesLabel->{"Pressure, MPa", "Volume, cm^3/mol"}]

eqeq =(vdwaal/.{T->298, rr->.08206, a->1.3, b->2})

What is the constant for the adiabatic relation?

( P +  a/v^2) ( v -  b)^Γ == ( P1 +  a/v1^2) ( v1 -  b)^Γ

vadiabatric = %10/.{P1->.1, v1->24720.320291594984`, Γ-> 8.314/(5/2 8.314)+1,  rr->8.314, a->137708, b->.306}

Plot[v/.FindRoot[(%28/.{T->298, Γ-> 8.314/(5/2 8.314)+1, rr->8.314, a->137708, b->.306}),{v,20000}],{P,.1,1},PlotLegends->{"Adiabatic"},PlotStyle->Red]

Show[%25,%22]

Work = Integral [ V dp]

v/.Table[FindRoot[%28,{v,24000}],{P,.1,10}]

Define some functions.  The volumetric equation and the relation for adiabatic compression.

vdewaall[v_,P_,a_,b_,rr_]:=(P +  a/v^2) ( v-  b) -  rr T

vv[P_,Γ_,T1_,P1_,v_,v1_,a_,b_] := (P +a/v^2) (v-b)^Γ - (P1 +a/v1^2) (v1-b)^Γ

Now make these easily evaluatable. The first is the volume, the second is the temperature

g1  [dd_?NumericQ]:=FindRoot[{vv[P,1.4,298,.1,v,24720.320291594984`,137708,.306],vdewaall[v,P,137708,.306,T,8.314]},{v,15000},{T,298}][[1,2]]
g2  [dd_?NumericQ]:=FindRoot[{vv[P,1.4,298,.1,v,24720.320291594984`,137708,.306],vdewaall[v,P,137708,.306,T,8.314]},{v,15000},{T,298}][[2,2]]

Plot[g1[P],{P,.1,1}, AxesLabel->{"Pressure, MPa","Volume, cm^3/mole"}]

Plot[g2[P],{P,.1,1}, AxesLabel->{"Pressure, MPa","Temperature, K"}]

The work for compression is:

NIntegrate[g1[P],{P,.1,1}]

Plot[NIntegrate[g1[P],{P,.1,pz}],{pz,.1,1}]

How  does this compare to ideal.  Note that the  initial T and v are not exactly the same.

idealvolume = 8.314 298/.1

Solve[p V^(cp/cv) == p1 V1^(cp/cv),V]

idealwork = Integrate[ (((((p1 (V1^(cp/cv)))/p)))^(cv/cp)),p]

idealworkfunc =(idealwork/.{p1->.1, V1-> idealvolume,cp-> 7/2 8.314, cv-> 5/2 8.314}) -
                        (idealwork/.{p1->.1, V1-> idealvolume,cp-> 7/2 8.314, cv-> 5/2 8.314,p->.1,v->idealvolume})

idealworkfunc/.p->1

Plot[idealworkfunc,{p,.1,10},AxesLabel->{"Pressure, MPa","Work"},PlotLegends->{"Ideal"}]

Plot[NIntegrate[g1[P],{P,.1,pz}],{pz,.1,10},AxesLabel->{"Pressure, MPa","Work"},PlotLegends->{"van der Waals"},PlotStyle->Red]

Show[%,%%]

We see that up to 10 MPa, very little difference occurs for ideal compared to vdW.  The “a” term

NIntegrate[g1[P],{P,.1,10}]

idealworkfunc/.p->10

The temperature gets so high that the gas remains close to ideal through out the compression.

Plot[{g2[P], 298 ((( P/.1))^(2/7))} ,{P,.1,10},AxesLabel->{"Pressure, MPa","T, K"},PlotLegends->{"van der Waals","ideal"},PlotStyle->{Red, Green}]

Compressions of permanent gasses are approximately ideal!

We see that at the end Tr ~10 and since Pc = 3.4 MPa, Pr is just getting to 3.

Let’s check CO2

What if the gas is not ideal?

You might like to use your favorite cubic equation of state to answer the question.  We might find that the quantitative effect of non ideality is not too large.   
We will use van der Waals for this example.

vdwaal = (P +  a/v^2) ( v-  b) ==  rr T

Kumar et al., “Van der Waal’s equation for an adiabatic process and its Carnot engine efficiency” (2017) (arXiv:1802.01474v1) show that for an adiabatic process the van der Waals equation has a formula similar to ideal for the pressure ratio.  The result is,

vdwadiabatic =  ( P +  a/v^2) ( v -  b)^Γ

(P+(a/(v^2))) (((-b+v))^Γ)

where Γ = R/(Subscript[C, v]) + 1.  For the adiabatic process, vdwadiabatic = constant.

 If a and b = 0, then we would get the ideal gas result, that Γ = (Subscript[C, P])/(Subscript[C, v]) and p ((v )^γ)= constant.

It would be good to pick a specific gas and get the numbers correct rather than just showing trends from “made up” constants.  Note that any difference in the enthalpy change for the vdWaal gas compared to ideal is both because the volume of the initial state will not match and the difference that the “a” and “b” will have on the compression process.

Choose CO2.

We start with:  

a = ((27 (R^2) (Subscript[T, C]^2))/(64 (Subscript[P, c]))),  b = (( R (Subscript[T, c]))/(8(Subscript[P, c])))

Tc = 304.2 K, Pc = 7.376 MPa,  R = 8.314 MPa cm^3/K/mol

((27 (R^2) (Subscript[T, C]^2))/(64 (Subscript[P, c])))/.{R-> 8.314 MPa cm^3/K/mol, (Subscript[P, c])->7.376 MPa, (Subscript[T, C])->304.2 K}

(( R (Subscript[T, c]))/(8(Subscript[P, c])))/.{R-> 8.314 MPa cm^3/K/mol,  (Subscript[P, c])->7.376 MPa, (Subscript[T, C])->304.2 K}

v/.FindRoot[(vdwaal/.{T->298, rr->8.314, a->365849, b->.141,P->.1}),{v,20000}]

As a check ideal:

v/.FindRoot[(vdwaal/.{T->298, rr->8.314, a->0, b->0,P->.1}),{v,20000}]

8.314  298/.1

OK.  We are off to a good start.  Here is the volume as a function of pressure at constant T.

Plot[v/.FindRoot[(vdwaal/.{T->298,  rr->8.314, a->365849, b->.141}),{v,20000}],{P,.1,1},PlotRange->All,PlotLegends->{"IsoThermal"},PlotStyle->Green, AxesLabel->{"Pressure, MPa", "Volume, cm^3/mol"}]

What is the constant for the adiabatic relation?

adiabatictemp= ( P +  a/v^2) ( v -  b)^Γ == ( P1 +  a/v1^2) ( v1 -  b)^Γ

vadiabatric = adiabatictemp/.{P1->.1, v1->24627.307649960392`, Γ-> 8.314/(5/2 8.314)+1,  rr->8.314, a->365849, b->.141}

Plot[v/.FindRoot[(vadiabatric/.{T->298, Γ-> 8.314/(5/2 8.314)+1}),{v,20000}],{P,.1,1},PlotLegends->{"Adiabatic"},PlotStyle->Red]

Show[%109,%114]

Work = Integral [ V dp]

Define some functions.  The volumetric equation and the relation for adiabatic compression.

vdewaall[v_,P_,a_,b_,rr_]:=(P +  a/v^2) ( v-  b) -  rr T

vv[P_,Γ_,T1_,P1_,v_,v1_,a_,b_] := (P +a/v^2) (v-b)^Γ - (P1 +a/v1^2) (v1-b)^Γ

Now make these easily evaluatable. The first is the volume, the second is the temperature

g1  [dd_?NumericQ]:=FindRoot[{vv[P,1.4,298,.1,v,24627.307649960392`,365849,.141],vdewaall[v,P,365849,.141,T,8.314]},{v,15000},{T,298}][[1,2]]
g2  [dd_?NumericQ]:=FindRoot[{vv[P,1.4,298,.1,v,24627.307649960392`,365849,.141],vdewaall[v,P,365849,.141,T,8.314]},{v,15000},{T,298}][[2,2]]

Plot[g1[P],{P,.1,1}, AxesLabel->{"Pressure, MPa","Volume, cm^3/mole"}]

Plot[g2[P],{P,.1,1}, AxesLabel->{"Pressure, MPa","Temperature, K"}]

The work for compression is:

NIntegrate[g1[P],{P,.1,1}]

Plot[NIntegrate[g1[P],{P,.1,pz}],{pz,.1,1}]

How  does this compare to ideal.  Note that the  initial T and v are not exactly the same.

idealvolume = 8.314 298/.1

Solve[p V^(cp/cv) == p1 V1^(cp/cv),V]

idealwork = Integrate[ (((((p1 (V1^(cp/cv)))/p)))^(cv/cp)),p]

idealworkfunc =(idealwork/.{p1->.1, V1-> idealvolume,cp-> 7/2 8.314, cv-> 5/2 8.314}) -
                        (idealwork/.{p1->.1, V1-> idealvolume,cp-> 7/2 8.314, cv-> 5/2 8.314,p->.1,v->idealvolume})

idealworkfunc/.p->1

Plot[idealworkfunc,{p,.1,10},AxesLabel->{"Pressure, MPa","Work"},PlotLegends->{"Ideal"}]

Plot[NIntegrate[g1[P],{P,.1,pz}],{pz,.1,10},AxesLabel->{"Pressure, MPa","Work"},PlotLegends->{"van der Waals"},PlotStyle->Red]

Show[%,%%]

We see that up to 10 MPa, very little difference occurs for ideal compared to vdW.  The “a” term

NIntegrate[g1[P],{P,.1,10}]

idealworkfunc/.p->10

The temperature gets so high that the gas remains close to ideal through out the compression.

Plot[{g2[P], 298 ((( P/.1))^(2/7))} ,{P,.1,10},AxesLabel->{"Pressure, MPa","T, K"},PlotLegends->{"van der Waals","ideal"},PlotStyle->{Red, Green}]