Jump to content
Geochemist's Workbench Support Forum

A question on the surface complexation model by a GWB newbie


Recommended Posts

I want to model the sorption of boron on surfaces using the constant capacitance (CC) model. I am trying to use a semi-mechanistic, mainly empirical, model advanced by Sabine Goldberg that uses measured physical and chemical properties of solids to calculate Kint-boron, and K+ and K- of the surface for CC. This is a generalized composite model that assigns these properties to the geomedia as a whole bulk system. Therein lays the first problem, defining a sorbing mineral phase and the surface reactions that go with it. I am very interested in the groups’ thoughts on how to best go about this.

 

My first thought was to just alter FeOH.sdat to reflect the right Ks, surface areas, etc. and then use it as a dummy variable. Then React would be used to simulate boron adsorption on porous media using a pretty complete water quality data set. All other reactions will be turned off.

 

The problem lies in the generalized composite model source of Kint, K+ and K-; it’s a bulk sample parameter, not mineral specific. All of the porous media would need to be Fe(OH)3 (ppt) to use a modified FeOH.sdat. My intuition is that this approach would fall apart when I went to determine bulk concentrations of boron on the solids because of molar considerations and surface site density being defined in moles/mole-mineral.

 

The system is a granular aquifer ~80% quartz, ~20% feldspars so my second approach has been to define the sorbing mineral as SiO2 to avoid the molar volume/mass issues and use a dummy water on the SiO2 as the reacting surface. So, the surface is SiO2-OH2, and sites SiO2-OH- and SiO2-OH3+ are formed by protonation/deprotonation, and boron on the surface is SiO2-HH3BO4-. The borate ion is not considered because the pH of the system is far below the 9.2 pKa. Using a defined mineral works in my very limited understanding of the features of GWB. Using dummy water as a fake metal oxide surface makes the charges and stoichiometry work out right (I think!) and shouldn’t blow up the math anywhere. My thinking is I will avoid the molar problems described above.

 

Is there another approach in GWB that might work better? I have to use the CC model. I can torture PHREEQC to do this with an as yet untested CC add-in, I prefer to use GWB because all my water chemistry data is in .gss, and if this goes well, I might add in some other rxns. There are a fair number of samples to be evaluated that all will need their own .sdat file.

 

Maybe there is a better way?

See any big holes in the Qtz + dummy water surface idea?

 

I greatly appreciate anybody’s time to think about this. I am thinking someone has done something close to this before.

 

Greg Miller

Link to comment
Share on other sites

Hi Greg,


If you didn’t need to account for electrostatics, I would consider using a Langmuir isotherm for your generalized composite model because you set the number of sorbing sites explicitly instead of having the software calculate it from the mass of a sorbing mineral. The two-layer surface complexation model, with a little effort, should also work well. To use the constant capacitance variant, simply specify the value for capacitance (in F/m2) at the top of the surface dataset. Or, you can leave it blank and set the value in your run (surface_capacitance command, or from the File – Open – Sorbing Surfaces dialog).


I think you’re on the right track in using a dummy variable. Instead of mixing real minerals like Fe(OH)3(ppd) with dummy surfaces, though, I would instead create a series of dummy variables for your generalized composite approach. You could modify the thermo dataset to include a dummy element (I’d give it a mole wt of 1 g/mol, for simplicity), a basis species, and a mineral (choose a log K such that the mineral would be very stable). Except for its surface, the mineral would be nonreactive. Then, your surface dataset might include a surface basis species like >XOH (instead of >FeOH) plus protonated and deprotonated forms and boron complexes. The sorbing mineral would be the dummy mineral from the thermo dataset. You would choose the specific surface area and site density together with the amount of sorbing mineral in the Basis such that you would have the correct number of sites for the geomedia.


Hope this helps,


Brian Farrell

Aqueous Solutions

Link to comment
Share on other sites

Brian,

 

Thank you for the prompt reply! I am stuck in the CC model, also it will handle the pH-sensitive nature of boron sorption that Langmuir isn't going to. I very much like the idea of creating my own dummy element, but I am a little stuck on the surface area/porosity issues and how they are handled in GWB. Much of this is not clear to me right now, even spending some time with the manuals and program. I probably need some more clarity using the Qtz setup before I move to the dummy element. I am probably overlooking clear guidance in the documentation, but its so much easier just to ask, sorry.

I have a .gss file with all the aqueous chemistry for waters I want to -flush through the sediments using react

I have a .sdat file for each set of sediments, example 43% porosity

I want to flush until the boron in water value doesn't change, i.e. equilibrium

 

Where is the best place for me to be specifying my water rock ratio in Flush if I use the qtx+dummy surface model, and the best way to do that?

 

I see a couple of ways I could set it up, specifying .43 L of solution in GSS, and setting the .57 L of quartz somewhere else, in SpecE8, or in React, or maybe as user variable in GSS that would let me batch this...but then I get lost.

If I know I am doing this water rock ratio right, I can use the CC sediment boron values to test for reasonableness.

 

Thanks!

 

Greg

Link to comment
Share on other sites

Hi Greg,

 

Most commonly in SpecE8 or React you start with 1 kg of solvent. This is listed at the top of the Basis pane. You can override this by setting a bulk volume for the system on the Medium pane. Dissolved species are commonly set relative to the amount of solvent (i.e., molal units) or solution (i.e. mg/kg units). Minerals in equilibrium with the system might be set in terms of absolute volume or mass (cm3 or mg Quartz), relative to the amount of solvent or solution, or relative to the volume of the system (i.e. mg/cm3 or volume %). Try playing around with real minerals, like Quartz or Fe(OH)3(ppd), to get a feel for this and how it related to porosity, etc. If you load a surface dataset like FeOH.sdat, you can also get a feel for sorbing surface area. I would wait till you're comfortable with all this before modifying or creating new surface datasets.

 

As for the flush configuration, (see section 3.3 in the GWB Reaction Modeling Guide), it allows you to specify a reactant fluid to displace existing fluid from the system. It is traced from the reference frame of the rock through which fluid migrates. You might define this fluid in the Basis pane of React (it's common to use 1 kg of solvent), equilibrate the fluid (run the model), then pick up the results as a reactant (this vacates the Basis pane and puts your fluid in the Reactants pane). You then define the initial fluid-rock system (again, commonly 1 kg solvent) on the now-empty Basis pane. Moving back to the Reactants pane, set a value for "reactants times" to control how many times the reactant fluid is flushed through the system. Finally, go to Config - Stepping and check the "flush" option. In this way, you set up a reaction path in which you gradually flush more and more fluid through the system. By plotting the boron concentration vs. the "mass reacted", you can determine the water:rock ratio you're looking for.

 

Hope this helps,

Brian

Link to comment
Share on other sites

Brian,

 

Very helpful! I think after much playing around in SpecE8 I think I have it set and working properly using absolute volumes of mineral "X" as per your suggestion. I set the molar weight of X equal to quartz for physical realism, and swap X+ for X in the input. I am using 1kg solvent and the porosity and molar mass of X to calculate the kilos of X to react with and the model converges nicely. Inputs attached, I don't think I botched any of this, but you never know. A once over of the setup as compared to my intent would be greatly appreciated.

 

I understand the principles in flush, but I am lost in the command structure to implement it. In PHREEQC I would name and recall solutions and am getting used to how to do this in GWB. I realize I will learn by doing, and looking up the commands in the Reference. Let me see how much of a mess I can make of React now and I'll come back with questions. However, if you could send what you just described as command line it would help me flop between the GUI and Reference with a little more personal certainty.... I am picking up the solids concentration, and re-reacting with the initial fluid again and again with what you outlined?

 

Greg

 

thermoX - Copy.tdat.dat

X1MW1421520 - Copy.sdat.dat

XT1_MW142S.sp8

Link to comment
Share on other sites

  • 2 weeks later...

Hi Greg,

 

Sorry for the delay in responding as I've been out of the office for a while. Just getting back into the swing of things after our Fate and Transport Modeling short course in Johannesburg last week.

 

Your thermo and surface datasets look pretty good to me. This isn't a huge deal, but I would suggest making the Basis species an uncharged species (perhaps X(aq)) so that the mineral's reaction can be simplified to X = X(aq). This way, the mineral's reaction doesn't involve electron transfer. And if you're using GWB10, I would get rid of the .dat at the end of the filenames so that TEdit can read the .tdat and .sdat files.

 

As for implementing the flush model, here are the steps:

 

1) Define the "flushing" fluid on the Basis pane of React. Run the model to equilibrate the fluid.

2) Pick up the resulting fluid to use as a reactant ("pickup reactants = fluid"). This moves the fluid to the Reactants pane, leaving the Basis pane empty. Type "reactants times 100" to specify that the fluid defined on the Reactants pane will replace the initial fluid 100 times.

3) Define the initial system (pore fluid and minerals, including mineral X) on the Basis pane.

4) Implement the flush configuration (type "flush" into the command pane).

 

This seems to be what you're describing.

 

Hope this helps,

Brian

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...