Yes. I'd been looking at the equations in the papers and hadn't spotted that the text introduces a possible simplification. The authors state that this should be valid for temperatures up to at least 75°C (and I presume up to pressures of 600 bar, given the scope of the whole paper). That's a wide enough range to cover the conditions anticipated in the CSP cases.

Discrepancies between the Python calculations of CO2 solubilities and other calculations must be related to some other aspect of the formulation. As I've said previously, I haven't checked through all of the Python script.

Original Message:

Sent: 07-25-2024 08:41 AM

From: Bernd Flemisch

Subject: Calculation of CO2 solubility

Actually, the issue is addressed in the paragraph below (23) (in my case (B7)) in the paper, where they also suggest the simplification.

Original Message:

Sent: 07-25-2024 08:38 AM

From: Bernd Flemisch

Subject: Calculation of CO2 solubility

Thank you! My guess is that the simplification is made since the definition of b_mix contains the solubilities which are to be calculated. I will check how this can be resolved. I'd certainly appreciate any hint in this direction.

Original Message:

Sent: 07-25-2024 07:55 AM

From: David Element

Subject: Calculation of CO2 solubility

Thanks for replying to my query.

I haven't checked all of the equations in the Spycher-Pruess papers and the Python code, but I can highlight one area of simplification, which relates to the calculation of fugacity coefficients. The Spycher-Pruess equations for fugacity require Redlich-Kwong a and b parameters a_{CO2}, a_{H2O}, b_{CO2}, b_{CO2} and mixing rules (giving a_{mix} and b_{mix}). I have included below a couple of screen grabs of equations from the Spycher-Pruess paper:

· Spycher, N., Pruess, K., and Ennis-King, J. 2003. CO_{2}-H_{2}O Mixtures in the Geological Sequestration of CO_{2}. I. Assessment and Calculation of Mutual Solubilities from 12 to 100°C and up to 600 Bar. Geochimica et Cosmochimica Acta 67 (16): 3015–3031.

In the Python script, b_CO2 is used instead of a b_{mix} term. In the case of the CO2 fugacity calculation, I have highlighted below in red where the full equations imply a b_{mix} term should be:

def fugacityCoefficientCO2(T, p, rhoCO2):

molarMassCO2 = 44.01e-3 # [kg/mol]

V = 1/(rhoCO2/molarMassCO2)*1e6 # molar volume [cm3/mol]

p_bar = p/1e5 # phase pressure in bar

a_CO2 = (7.54e7 - 4.13e4*T) # mixture parameter of Redlich-Kwong equation

b_CO2 = 27.8 # mixture parameter of Redlich-Kwong equation

R = 83.1446261815324 # universal gas constant [bar.cm3/mol.K]

lnPhiCO2 = math.log(V/(V - b_CO2)) + b_CO2/(V - b_CO2) \

- 2*a_CO2/(R*math.pow(T, 1.5)*b_CO2)*math.log((V + b_CO2)/V) \

+ a_CO2*b_CO2/(R*math.pow(T, 1.5)*b_CO2*b_CO2) \

*(math.log((V + b_CO2)/V) - b_CO2/(V + b_CO2)) \

- math.log(p_bar*V/(R*T))

return math.exp(lnPhiCO2)

def fugacityCoefficientH2O(T, p, rhoCO2):

molarMassCO2 = 44.01e-3 # [kg/mol]

V = 1/(rhoCO2/molarMassCO2)*1e6 # molar volume [cm3/mol]

p_bar = p/1e5 # phase pressure in bar

a_CO2 = (7.54e7 - 4.13e4*T) # mixture parameter of Redlich-Kwong equation

a_CO2_H2O = 7.89e7 # mixture parameter of Redlich-Kwong equation

b_CO2 = 27.8 # mixture parameter of Redlich-Kwong equation

b_H2O = 18.18 # mixture parameter of Redlich-Kwong equation

R = 83.1446261815324 # universal gas constant [bar.cm3/mol.K]

lnPhiH2O = math.log(V/(V - b_CO2)) + b_H2O/(V - b_CO2) \

- 2*a_CO2_H2O/(R*math.pow(T, 1.5)*b_CO2)*math.log((V + b_CO2)/V) \

+ a_CO2*b_H2O/(R*math.pow(T, 1.5)*b_CO2*b_CO2) \

*(math.log((V + b_CO2)/V) - b_CO2/(V + b_CO2)) \

- math.log(p_bar*V/(R*T))

return math.exp(lnPhiH2O)

There may be other simplifications. As I noted in my earlier post, I do not know whether differences between Python-calculated solubilities and other solubilities are due to such simplifications.

You asked about the data points on the plot I shared.

· The solubilities from simulators were obtained by from a 1d model initialised with a mixture of CO_{2} and H_{2}O.

· The web-based calculation of CO_{2} solubility made use of the tool at https://www.zetaware.com/utilities/CO2/index.html (although other online CO_{2} property calculators are available).

· The published tables of CO2 solubility at 50°C were obtained from Mao, Zhang, Li and Liu (https://www.sciencedirect.com/science/article/abs/pii/S0009254113001241), although many other measured and calculated CO_{2}/H_{2}O solubility tables are available in the literature.

I have summarised solubility values in the attached Excel file, with values at 10, 30, 50 and 70°C.

Regards,

------------------------------

David Element

Reservoir Engineer

RPS Energy

Original Message:

Sent: 07-25-2024 02:32 AM

From: Bernd Flemisch

Subject: Calculation of CO2 solubility

Hi David,

Thank you for the detailed investigation! I was not aware of the fact that the script implements a simplified version. Can you let me know what exact simplification is done? I would also be interested in the data points of the plot so that I can do a comparison myself.

Kind regards

Bernd

Original Message:

Sent: 07-24-2024 10:25 AM

From: David Element

Subject: Calculation of CO2 solubility

I have been examining the calculation of CO_{2} solubility. The plot shown here compares solubility (expressed as the mole fraction of CO_{2} in the aqueous phase) as a function of pressure, at 50°C. I have calculated the solubility in various ways:

· Using two different commercial simulators, each of which use the Spycher-Pruess method

· A web-based calculator tool which gives solubility for pure-CO_{2} / pure-H_{2}O mixtures

· A published table of solubility for pure-CO_{2} / pure-H_{2}O

· A calculation using the *make_solubility_table.py *script from the __thermodynamics section of the SPE CSP 11 competition's GitHub repository__

At low pressures all of these calculations yield very similar solubilities, but at pressures above ~150 bar the calculation from the *make_solubility_table.py* script deviates from the others. In problem 11B simulated pressures exceed 400 bar.

I know that the CSP definition states that for fluid PVT calculations, all mixture properties should be considered equal to that of the pure phase (except for water density). The reason given is that the range of pressures and temperatures in problems 11A, 11B and 11C imply that the mutual solubilities are quite small. I can also see that the Python code in the *make_solubility_table.py *script has simplified the Spycher-Pruess equations – presumably to reflect the assumption of low mutual solubility, and also because the script should only be used for the range of conditions expected in the CSP cases. I don't know whether these simplifications are the sole reason for the differences seen on the plot.

Nonetheless, I wanted to point out that (if my calculations are correct) the solubilities calculated by the *make_solubility_table.py *script will differ from those calculated by simulators which use the full Spycher-Pruess formulation.

------------------------------

David Element

Reservoir Engineer

RPS Energy

------------------------------