Natural gas sweetening by gas permeation​
​Authors: Housam Binous and Ahmed Bellagi

The separation of CO2 from methane and other gases is of primary importance. Traditional method of cleaning natural gas is the chemical absorption using amine-based solvents. Membrane separation is an interesting alternative if combined with re-injection of CO2 rich gas (i.e., permeate stream) as shown in Fig. 2.1 of Ref. 1.​​​
​​​Here, following Ref. 1, we consider the following feed stream composed of CO2, CH4, other hydrocarbons and water:​​​
​​​Assuming cross-flow pattern, we successfully reproduce, using the methodology of Ref. 2, the results obtained for CASE 1 of Ref. 1. Such later results were obtained by Ommedal using Aspen Custom Modeler and Aspen-Plus. One advantage of our methodology consists in performing a parametric study where the membrane area as well as permeate and retentate compositions are given versus stage cut. ​​References:​[1] Roy Sømme Ommedal, Process evaluation of novel CO2 capture processes for subsea application, FMH606 Master’s Thesis 2021, Process Technology, University of South-eastern Norway, 2021. https://openarchive.usn.no/usn-xmlui/handle/11250/2774684[2] [2] H . Binous, U . Zahid and A . Bellagi, Modeling for Multi - component Gas Permeation with Orthogonal Collocation and Arc - Length Continuation, Chemistry Africa (2024) . https://doi .org/10.1007/s42250-024-01167-y
​
In[]:=
In[]:=
unknown=Join[Flatten[Table[{{yA[i],
y
PAi
/.soli},{xB[i],xBin},{yB[i],
y
PBi
/.soli},{xC[i],xCin},{yC[i],
y
PCi
/.soli},{xD[i],xDin},{yD[i],
y
PDi
/.soli},{xE[i],xEin},{yE[i],
y
PEi
/.soli}},{i,1,Np+1}],1],Flatten[Table[{{xA[i],xAin},{q[i],
q
f
}},{i,1,Np+1}],1],{{theta,0.41}}];
In[]:=
sol=FindRoot[sys/.st->1,unknown,MaxIterations10000,AccuracyGoal->10]
Out[]=
{yA[1]0.975609,xB[1]0.127003,yB[1]0.00330818,xC[1]0.0320008,yC[1]0.00147103,xD[1]0.0320007,yD[1]0.00205141,xE[1]0.00800018,yE[1]0.000639166,yA[2]0.975609,xB[2]0.127003,yB[2]0.00330818,xC[2]0.0320007,yC[2]0.00147102,xD[2]0.0320007,yD[2]0.0020514,xE[2]0.00800018,yE[2]0.000639166,yA[3]0.975609,xB[3]0.127003,yB[3]0.00330817,xC[3]0.0320007,yC[3]0.00147102,xD[3]0.0320007,yD[3]0.0020514,xE[3]0.00800016,yE[3]0.000639164,yA[4]0.975609,xB[4]0.127002,yB[4]0.00330816,xC[4]0.0320006,yC[4]0.00147102,xD[4]0.0320006,yD[4]0.00205139,xE[4]0.00800014,yE[4]0.000639162,yA[5]0.975609,xB[5]0.127002,yB[5]0.00330815,xC[5]0.0320005,yC[5]0.00147101,xD[5]0.0320005,yD[5]0.00205138,xE[5]0.00800012,yE[5]0.000639159,yA[6]0.975609,xB[6]0.127002,yB[6]0.00330813,xC[6]0.0320004,yC[6]0.001471,xD[6]0.0320004,yD[6]0.00205137,xE[6]0.00800009,yE[6]0.000639156,yA[7]0.975609,xB[7]0.127001,yB[7]0.00330811,xC[7]0.0320003,yC[7]0.001471,xD[7]0.0320003,yD[7]0.00205136,xE[7]0.00800006,yE[7]0.000639153,yA[8]0.975609,xB[8]0.127001,yB[8]0.0033081,xC[8]0.0320002,yC[8]0.00147099,xD[8]0.0320002,yD[8]0.00205135,xE[8]0.00800004,yE[8]0.00063915,yA[9]0.975609,xB[9]0.127,yB[9]0.00330809,xC[9]0.0320001,yC[9]0.00147098,xD[9]0.0320001,yD[9]0.00205135,xE[9]0.00800002,yE[9]0.000639148,yA[10]0.975609,xB[10]0.127,yB[10]0.00330808,xC[10]0.032,yC[10]0.00147098,xD[10]0.032,yD[10]0.00205134,xE[10]0.008,yE[10]0.000639147,yA[11]0.975609,xB[11]0.127,yB[11]0.00330808,xC[11]0.032,yC[11]0.00147098,xD[11]0.032,yD[11]0.00205134,xE[11]0.008,yE[11]0.000639146,xA[1]0.795996,q[1]0.999975,xA[2]0.795996,q[2]0.999976,xA[3]0.795996,q[3]0.999978,xA[4]0.795996,q[4]0.99998,xA[5]0.795997,q[5]0.999984,xA[6]0.795998,q[6]0.999988,xA[7]0.795998,q[7]0.999991,xA[8]0.795999,q[8]0.999995,xA[9]0.796,q[9]0.999998,xA[10]0.796,q[10]0.999999,xA[11]0.796,q[11]1.,theta0.0000247477}
In[]:=
st=.;
In[]:=
init=Join[Flatten[Table[{xA[i][0](xA[i]/.sol),yA[i][0](xA[i]/.sol),xB[i][0](xB[i]/.sol),yB[i][0](yB[i]/.sol),xC[i][0](xC[i]/.sol),yC[i][0](xC[i]/.sol),xD[i][0](xD[i]/.sol),yD[i][0](xD[i]/.sol),xE[i][0](xE[i]/.sol),yE[i][0](xE[i]/.sol),q[i][0](q[i]/.sol)},{i,1,Np+1}],1],{theta[0](theta/.sol),st[0]1}];
In[]:=
initdev=Join[Flatten[Table[{xA[i]'[0]0.1,yA[i]'[0]0.1,xB[i]'[0]0.1,yB[i]'[0]0.1,xC[i]'[0]0.1,yC[i]'[0]0.1,xD[i]'[0]0.1,yD[i]'[0]0.1,xE[i]'[0]0.1,yE[i]'[0]0.1,q[i]'[0]0.1},{i,1,Np+1}],1],{theta'[0]0.1,st'[0]-1}];
In[]:=
aux=Sum[xA[i]'[s]^2+yA[i]'[s]^2+xB[i]'[s]^2+yB[i]'[s]^2+xC[i]'[s]^2+yC[i]'[s]^2+xD[i]'[s]^2+yD[i]'[s]^2+xE[i]'[s]^2+yE[i]'[s]^2+q[i]'[s]^2,{i,1,Np+1}]+theta'[s]^2+st'[s]^21;
In[]:=
unknown1=Join[Flatten[Table[{xA[i],yA[i],xB[i],yB[i],xC[i],yC[i],xD[i],yD[i],xE[i],yE[i],q[i]},{i,1,Np+1}],1],{theta,st}];
In[]:=
In[]:=
SYS=Join[sys/.functions,{aux},init,initdev];
In[]:=
SOL=Quiet@NDSolve[SYS,unknown1,{s,-10^5,10^5},AccuracyGoal10];
In[]:=
solA=First@NSolve[theta[s]yAP+(1-theta[s])xA[1][s]xAin,yAP]
Out[]=
yAP
0.796-1.(1.-1.theta[s])xA[1][s]
theta[s]

In[]:=
solB=First@NSolve[theta[s]yBP+(1-theta[s])xB[1][s]xBin,yBP]
Out[]=
yBP
0.127-1.(1.-1.theta[s])xB[1][s]
theta[s]

In[]:=
solC=First@NSolve[theta[s]yCP+(1-theta[s])xC[1][s]xCin,yCP]
Out[]=
yCP
0.032-1.(1.-1.theta[s])xC[1][s]
theta[s]

In[]:=
solD=First@NSolve[theta[s]yDP+(1-theta[s])xD[1][s]xDin,yDP]
Out[]=
yDP
0.032-1.(1.-1.theta[s])xD[1][s]
theta[s]

In[]:=
solE=First@NSolve[theta[s]yEP+(1-theta[s])xE[1][s]xEin,yEP]
Out[]=
yEP
0.008-1.(1.-1.theta[s])xE[1][s]
theta[s]

In[]:=
x=x/.FindRoot[(xA[1][s]/.SOL/.sx)0.08,{x,1000}]
Out[]=
-90480.3
In[]:=
st[s]/.SOL/.sx
Out[]=
{90481.4}
In[]:=
yAP/.solA/.SOL/.sx
Out[]=
{0.936482}
In[]:=
yBP/.solB/.SOL/.sx
Out[]=
{0.0279658}
In[]:=
yCP/.solC/.SOL/.sx
Out[]=
{0.0111793}
In[]:=
yDP/.solD/.SOL/.sx
Out[]=
{0.0142732}
In[]:=
yEP/.solE/.SOL/.sx
Out[]=
{0.00412687}

ResultsforCASE1reproducedfromRef.1​​

Final checks : stage cut and membrane area