Pressure-sensitive Azeotrope of the Ethanol-Water Binary Mixture
Authors: Samar Jebali, Oumaima Ben Saad, Ons Zarraa, Eya Kefi, Yassmine Ben Hamouda and Housam Binous
Pressure-sensitive Azeotrope of the Ethanol-Water Binary Mixture
Authors: Samar Jebali, Oumaima Ben Saad, Ons Zarraa, Eya Kefi, Yassmine Ben Hamouda and Housam Binous
Authors: Samar Jebali, Oumaima Ben Saad, Ons Zarraa, Eya Kefi, Yassmine Ben Hamouda and Housam Binous
We perform a parametric continuation procedure for the computation of azeotropic composition and temperature for the ethanol/water mixture. The nonlinear system is solved repeatedly for different values of the pressure parameter P. At each iteration, the previously computed solution is used as the initial guess for the next calculation, which significantly improves convergence and allows the algorithm to follow a continuous solution branch.
The variables x and T represent respectively the liquid mole fraction and the azeotropic temperature. For each pressure value, the program uses FindRoot to solve the nonlinear equilibrium equations derived from the vapor-liquid equilibrium model. Here, the van Laar model is used to compute the activity coefficients. Once the solution is obtained, the values of x and T are stored in the list curve. The continuation strategy acts as a predictor-corrector method because the last converged solution becomes the predictor for the next step in pressure.
A stopping criterion is introduced to terminate the continuation process when the mole fraction becomes physically impossible. Since mole fractions must satisfy the loop is interrupted whenever . This is achieved using the Mathematica command Break[], which exits the Do loop without terminating the Mathematica kernel. Such stopping criteria are important in continuation methods because nonlinear solvers may sometimes converge toward nonphysical mathematical branches.
Clearly, if one lowers the total pressure beyond 35 mmHg (beyong the green dot in the plots below), the binary azeotrope disappears. Also, the plots of azeotropic composition and temperature versus pressure clearly indicate that this azeotrope is pressure-sensitive.
The variables x and T represent respectively the liquid mole fraction and the azeotropic temperature. For each pressure value, the program uses FindRoot to solve the nonlinear equilibrium equations derived from the vapor-liquid equilibrium model. Here, the van Laar model is used to compute the activity coefficients. Once the solution is obtained, the values of x and T are stored in the list curve. The continuation strategy acts as a predictor-corrector method because the last converged solution becomes the predictor for the next step in pressure.
A stopping criterion is introduced to terminate the continuation process when the mole fraction becomes physically impossible. Since mole fractions must satisfy
0≤x≤1
x>1
Clearly, if one lowers the total pressure beyond 35 mmHg (beyong the green dot in the plots below), the binary azeotrope disappears. Also, the plots of azeotropic composition and temperature versus pressure clearly indicate that this azeotrope is pressure-sensitive.
(*AntoineEquationwhereTemperaturein°CandPressureinmmHg*)Psat1[T_]:=10^(8.20417-1642.89/(230.3+T));(*Ethanol*)Psat2[T_]:=10^(8.07131-1730.63/(233.426+T));(*Water*)
In[]:=
(*Normalboilingtemperatures*)
In[]:=
FindRoot[Psat1[T]==760,{T,80}]FindRoot[Psat2[T]==760,{T,80}]
Out[]=
{T78.3192}
Out[]=
{T99.9968}
In[]:=
(*VanLaarModel*)gamma1[x_]:=Exp[A12(A21(1-x)/(A12x+A21(1-x)))^2];gamma2[x_]:=Exp[A21(A12x/(A12x+A21(1-x)))^2];A12=1.6798;A21=0.9227;(*binaryinteractionparameters*)
In[]:=
(*Systemofequationsforazeotropedetermination*)(*Unknowns:xandT-Parameter:P*)system[{x_,T_},P_]:={gamma1[x]*Psat1[T]-P,gamma2[x]*Psat2[T]-P};(*initialsolution*)P0=760;sol0=FindRoot[system[{x,T},P0]=={0,0},{{x,0.9},{T,78}}];x0=x/.sol0;T0=T/.sol0;Print["Initial solution"];Print["x = ",x0];Print["T = ",T0];
Initial solution
x = 0.91489
T = 78.2193
In[]:=
(*pressurerange*)pressures=Range[2000,10,-1];curve={};xGuess=x0;TGuess=T0;(*continuationloop*)Do[sol=Quiet@FindRoot[system[{x,T},P]=={0,0},{{x,xGuess},{T,TGuess}}];(*corrector*)xSol=x/.sol;TSol=T/.sol;If[xSol>1,{Print["when azeotrope disappears"];Print["threshold : ",P," mmHg"];Break[]},{AppendTo[curve,{P,xSol,TSol}];(*predictor*)xGuess=xSol;TGuess=TSol;}],{P,pressures}];
when azeotrope disappears
threshold : 35 mmHg
In[]:=
(*dataextraction*)pressureData=curve[[All,1]];xData=curve[[All,2]];TData=curve[[All,3]];
In[]:=
(*AzeotropicTemperaturevsPressure-beyondgreendottheazeotropedisappears*)(*noticethattheazeotropefortheethanol/watersystemispressuresensitive*)tempPlot=Show[ListLinePlot[Transpose[{pressureData,TData}],AspectRatio->1,PlotStyle->{DarkRed,Thick},Frame->True,FrameLabel->{Style["Pressure (mmHg)",14],Style["Azeotropic Temperature (°C)",14]},GridLines->Automatic,ImageSize->400],Graphics[{PointSize[0.0175],Darker@Green,Point[{pressureData//Last,TData//Last}]}]]
Out[]=
In[]:=
(*AzeotropicCompositionvsPressure-beyondgreendottheazeotropedisappears*)(*noticethattheazeotropefortheethanol/watersystemispressuresensitive*)xPlot=Show[ListLinePlot[Transpose[{pressureData,xData}],PlotStyle->{DarkBlue,Thick},Frame->True,AspectRatio->1,FrameLabel->{Style["Pressure (mmHg)",14],Style["ethanol mole fraction",14]},GridLines->Automatic,ImageSize->400],Graphics[{PointSize[0.0175],Darker@Green,Point[{pressureData//Last,xData//Last}]}]]
Out[]=