Jump to content
Geochemist's Workbench Support Forum
Abdulaziz

Carbonate acidizing -(Matching ICP result ) - Help to setup initial rock sample and fluid constrains on the system

Recommended Posts

Greetings all,

I conducted  HCl ( acid ) core flooding experiments at room temperature on cylindrical limestone rock samples (2.5 cm in diameter 5 cm long) which are mainly composed of ( ~ 97 % calcite from XRD analysis ) and the produced water (effluent) was chemically analyzed for cations using Inductively Coupled Plasma (ICP) spectroscopy to assess the dissolution reaction phenomena.

the chemical equation is as follows : CaCO3 + 2HCl ---> CaCl2 + CO2 + H2O                                                        

My aim is to get the dissolution reaction rate constant and the diffusion coefficient for the conducted experiment by matching laboratory ICP result (Ca++)  with the model (X1t).

I have read transport reactive and other documentation but I am missing something. 

I used X1t app to simulate the acidized core flooding experiments and match the laboratory ICP result.

my concerns are the followings : 

How precisely can I put the constraints on the initial system for the rock sample and the injected acid solution? I am a little bit confused about the input units ( mg/kg, free kg, mmol/kg, ..etc). I am only aware of the limestone rock sample weight ( 50 g) , porosity (22%) and the concentration of the injected acid (pH, wt% ).  how would I put the value of the followings with their units:

  • H2O .... free kg
  • H+ ..... 4 (pH) .. for example !
  • Cl- ...  
  • Ca++ ( mineral ) ...
  • HCO3- ....
  • do I need to equilibrate the fluid and the rock in the initial pane in constraints on the initial system, and if so, how would I equilibrate them?
  • injection rate was 10 cm3/min. how would I mimic the laboratory injection rate within the X1t  the discharge ( injection rate) unit (cm/s, cm3/cm2/s, ..etc)?
  • The laboratory domain was a cylindrical core sample (2.5 cm in diameter 5 cm long) , how would I simulate that domain in the model, I used a spherical domain with r1: 1.25 cm, r2: 1.26 cm and nodes (Nx) = 5, please advise the appropriate way.

 

Your support in this matter is highly appreciated.

 

regards

Abdulaziz

Share this post


Link to post
Share on other sites

Hi Abdulaziz,

The main purpose of The Geochemist’s Workbench® software package is geochemical reaction modeling and reactive transport modeling using parameters like rate constants and diffusion constants. You may estimate their optimum values by trial and error, though. For example, the Microbial Populations lesson on the GWB Online Academy describes how to adjust the rate constant to visually match experimental data. 

You can set most basis entries as bulk or free constraints. For a bulk constraint, the value you set refers to the entire thermodynamic component, whereas for a free constraint, it refers to the particular species only. The Ca++ component, for example, might include the Ca++ species, as well as Ca(OH)2(aq), CaHCO3(aq), etc. If you set 10 “mg/kg” Ca++, the concentration is for the sum of those species. If you set 10 “free mg/kg” Ca++, though, the concentration refers only to the individual Ca++ species.

If you are looking at the reaction between the fluid, and the rock, as the fluid traverse through it, you don't probably need to equilibrate the fluid and rock. For more information, please read section 3.10 in the GWB Reaction Modeling Guide.

In a spherical domain, the length of the domain is r2-r1. Please read section 3.1 in the GWB Reactive Transport Modeling Guide.

In future, please don't post your question in different topics. If you need further help, please attach your script.

Thanks,

Melika Sharifi

Aqueous Solutions LLC

Share this post


Link to post
Share on other sites

Hi Melika,

Thanks for your reply. when I  submitted my case in the forum, an error message appeared and I ended up submitting the question 4 times without knowing it was posted at the first attempt. sorry about that.

I used X1t app to simulate the acidized core flooding experiments and match the laboratory ICP result.

the chemical equation is as follows : CaCO3 + 2HCl ---> CaCl2 + CO2 + H2O   

my concerns are the followings : 

How precisely can I put the constraints on the initial system for the rock sample and the injected acid solution? I am a little bit confused about the input units ( mg/kg, free kg, mmol/kg, ..etc). 

I am only aware of the limestone rock sample weight ( 50 g) , porosity (22%) and the concentration of the injected acid (pH, wt% ).  how would I put the value of the followings with their units:

  • H2O .... free kg 
  • H+ ..... 4 (pH) .. for example !
  • Cl- ...  
  • Ca++ ( mineral or ... ) ...
  • HCO3- ....
  • do I need to equilibrate the fluid and the rock in the initial pane in constraints on the initial system, and if so, how would I equilibrate them?
  • injection rate was 10 cm3/min. how would I mimic the laboratory injection rate within the X1t  the discharge ( injection rate) unit (cm/s, cm3/cm2/s, ..etc)?
  • The laboratory domain was a cylindrical core sample (2.5 cm in diameter  5 cm long) , how would I simulate that domain in the model, I used a spherical domain with r1: 1.25 cm, r2: 1.26 cm and nodes (Nx) = 5, please advise the appropriate way.

 

I have attached 2 different files. please advise which one of them i should be simulating my lab work with. 

Carbonate acdizing.x1t

Aziz HCl.x1t

Share this post


Link to post
Share on other sites

Hi Abdulaziz,

As Melika stated in response to your question, you set the length of a spherical domain with the values of r1 and r2. For example, setting r1 to 1 cm and r2 to 6 cm will prescribe a spherical domain that’s 5 cm long. Such a configuration would not be appropriate for a cylindrical column, however, because the domain’s width is expanding, as you can see in the graphic in X1t’s Domain pane. You could "hack" the model by setting r1 and r2 so that they are very large, like 1001 cm and 1006 cm, thus defining a domain of the same length, but with a geometry much closer to a cylinder. This really defeats the purpose of using a spherical model, however. I'm only saying this so you get an understanding of how the two radius values are used to define the geometry of a spherical domain. For your model,  I recommend just using a linear 1D model. In that case, you set the length to 5cm, and you can choose values of deltay and deltaz that will give you the same cross-sectional area as your cylindrical column.

You have several options to set the flow field. You can set specific discharge directly. You can solve for the specific discharge by setting a hydraulic potential or hydraulic head drop across the domain, along with the permeability, in which case the program uses Darcy’s law to solve for specific discharge. Alternatively, you can tell the program how much of the initial pore water should be displaced in the time specific for the simulation (the pore volumes option).

The specific discharge is a volume flux, with units such as cm3/cm2/s. So, it’s the volume of water passing a cross-sectional area per unit time. You’ll notice that the discharge units can be simplified to velocity units, such as cm/s. The two sets of units can be used interchangeably here. It’s important to keep in mind that the specific discharge is not the groundwater velocity, because water molecules only move through pore space within the column. The velocity is the specific discharge divided by the porosity.  

You can divide your experimental flowrate by the cross-sectional area of the column to get the specific discharge. Alternatively, you can determine from your injection rate how many times the volume of fluid in your column (the total volume x the porosity) was displaced over the length of your experiment, then set that value for pore_volumes. 

It’s hard to say for sure, but I doubt you’ll be able to figure a diffusion coefficient from an experiment with such a high flowrate, and with data only at the outlet. When water flows at any appreciable rate, the effects of diffusion are insignificant compare to advection and hydrodynamic dispersion. As a result, changing the value of the diffusion coefficient won’t affect your results in any noticeable way. For that same reason, specifying a precise value for a diffusion coefficient is only useful in modeling systems with little or no flow. I think an experiment without reaction or flow, and with multiple sampling points at multiple times, would be ideal for determining a diffusion coefficient.

The rate constant, on the other hand, could possibly be calculated, but it really depends on your experimental setup. Most commonly rate constants are determined in simple batch systems. You’re adding complexity by trying to derive it from a column experiment.

For more information, please see sections 3.1 and 3.1 in the GWB Reactive Transport Modeling Guide.

Regards, 

Brian Farrell
Aqueous Solutions
 

Share this post


Link to post
Share on other sites

Hi Brain ,

 

Thanks for your feedback.

 

I have thoroughly read GWB documentations (Essentials, React and x1t  ) and forum questions, but I  must be missing something.

 

I am trying to reproduce acidic core flooding experiment of fresh water saturated carbonate rock using x1t to match the produced Ca++ ions (ICP ) and estimate diffusion coefficient and reaction rate constant.

 

the chemical equation is as follows : CaCO3 + 2HCl ---> CaCl2 + CO2 + H2O

 

Here are the summary info of the fluid -rock system and the core flooding experiments  :

  • Cylindrical Carbonate rock (97% Calcite (CaCo3), radius 2.5 cm ,length 5 cm, rock weight ( 58 g), Porosity ( 16% ) , Permeability (9 md) , Bulk volume ( 25 cm3)
  • Carbonate rock was saturated and flooded with Fresh Water
  • Then saturated carbonate rock was flooded with HCl as  intel fluid  ( pH=2) at injection rate ( 7 cm3/min) till wormhole channel was formed and pressure drop fall to near zero value.
  • I have tried to mimic the fluid-rock properties into the model, but I am not sure.

 

My concerns are the following :

  • How can I add the rock mineral ( carbonate calcite (CaCo3) ) and at what units (97 vol% or 58g , 58g/kg ) to the fluid system?I tried 2 methods.
    •  Method 1 (Aziz Model file) : I added calcite in the kinetic reactant pane (meaning calcite is not in equilibrium with the fresh water )  , but I couldn’t add calcite in 58 g unit as its weighted (97% of core sample weight ) which will be reflected in calcite specific surface area .
    •  Method 2 (Calcite swapped with Ca++ file) : I swapped calcite with Ca++ ( stating equilibrium condition with fluid) in the initial fluid pane plus adding the calcite in the kinetic reactant pane, but calcite concertation appeared to start producing from  350 mg/l instead from 0 mg/l . Do I need to equilibrate the fluid and the rock in the initial pane ?  I did try Calcite mineral swapped with Ca++ in the fluid pane with React script ( Ca++_3 file).
  •  Sometimes I get this Error:       -- Error: Porosity of node 0 is too small: -0.269011 . I can’t change much in the domain pane that semi-represents cylindrical core sample ( dimensions ) .

 

Any help with setting this up would be much appreciated.

  

Please see attached files.

Regards

Abdulaziz

Ca++_3.rea

Aziz Model.x1t

Calcite swapped with Ca++.x1t

Share this post


Link to post
Share on other sites

Hi Abdulaziz,

In a reactive transport model, it's best not to constrain the amount of a mineral using absolute units, like g or cm3, because changing your discretization will change the system. Relative units are much better. Since calcite is the only mineral, and you know the porosity (.16), set the mineral abundance to .84 vol. fract. 

You'll definitely need a lot more than three nodes to get an accurate solution. Start with 20 or 50, perhaps, to get a basic understanding of your system without costing too much in terms of computational effort, then increase the resolution to 100 or several hundred, perhaps. For a discussion, please see the Numerical Dispersion lesson in the GWB Online Academy.

It doesn't sounds like the limestone was in contact with the initial dilute fluid for very long, so I'm not sure it's appropriate to assume the initial pore fluid is in equilibrium with calcite. In other words, I wouldn't swap calcite into the basis on the Initial pane. Your Aziz model.x1t is ok in this regard, but I'd put smaller values than .1 mg/kg for the various solutes, unless those values are actually known. I would add Calcite as a reactant, specifying it's abundance as described above. I think that takes care of your questions. You should not set a value for "reactants times". 

Looking at your inlet fluid, I would set smaller, but nonzero, values for the Ca++ and HCO3- in solution. As for the Cl- component, I think it's correct to set it as the charge balancing ion, but the value you set doesn't actually matter because the program adjusts the Cl- component to balance out the other ions in solution. The "as HCl" setting is unnecessary here.

Finally, I think you'll want to double-check your width and height settings to ensure you have the same cross-section area as your cylindrical column. You also might want to double-check your flow rate.

Regards,

Brian

Share this post


Link to post
Share on other sites

Hi Brian ,

Thanks for your quick fruitful reply.

I have checked and updated Aziz Model_1(file). My main goal is to estimate Damköhler and Péclet numbers for each acidic core flooding experiment, where the diffusion coefficient and reaction rate constant are needed to be estimated. Yes, the carbonate rock sample was saturated with fresh water for a day at maximum, then flooded with freshwater to measure the brine permeability using Darcy’s law, then flooded with diluted HCl ( pH =2).  After the acidic flooding of HCl ( pH =2), pH value dropped from 7 to 6.4 through the whole experiment. 

Now, I hope my initial rock-fluid conditions are right. I have checked the specific discharge as advised in your previous comment ( flow rate (cm3/min) divided by cross-sectional area (cm2) , which is in my case : 7 (cm3/min ) / 5.22 (cm2) = 1.33 cm/min  ~ 0.022 cm/s).  also, I have adjusted the permeability to be 9 md , but it seems the permeability is constant along the whole interval time. 

In the reactants pane, calcite specific surface area is not provided in the database. I have looked in the literature (https://www.onepetro.org/conference-paper/SPE-21044-MS ) and found 0.49 m2/g is the specific surface for Indiana limestone using  BET method.  Shall I use this value for the calcite specific surface area or specific surface area should be estimated else way? 

I am trying to mimic the ICP Lab results of the produced Ca++ ions effluent (that (Ca++ ) concentration reaches a value of   120 mg/l in the first 5 minutes then stabilizes at 120 mg/l  afterwards ) using Ca++ vs time xtplot.  But it appears that the dissolution of  Ca++ ions is quite immediate from the first 2 minutes reaches and stabilizes at a concentration of  300 mg/l. how can I delay or elongate the production of Ca++ ions linearly and what are the parameters that would allow me to adjust the curve of the produced Ca++ ion ( e.g. specific surface area , diffusion coefficient  and reaction rate constant though both factors are competing in the dissolution process) .

please see attached Aziz Model_1 script.

Thank you for your help and support. 


Best Regards,
 

Abdulaziz 

Aziz Model_1.x1t

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×