Jump to content
Geochemist's Workbench Support Forum

Brian Farrell

Admin
  • Posts

    1,055
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by Brian Farrell

  1. Hi Polly, Tact is for making stability diagrams, like those you’ve made in Act2, but with a temperature axis. In other words, Tact makes polythermal calculations while Act2 makes isothermal calculations. The diagrams you’ve shown from the report are isothermal calculations repeated at different temperatures. It looks like React was used to perform the solubility calculations you’ve shown in the report. You can use sliding and fixed activity paths to scan over a range of pe values, while holding pH constant, or to scan over pH values while holding pe constant. As you run these calculations, you should be aware of the stability range of water. If you start or end a calculation far outside the stability range, you may encounter concentrations that don’t seem to make much sense at first glance. It might be helpful to create rough calculations in Act2 to determine the pH or pe ranges where water is stable, and also where the minerals of interest are stable. There’s no point in setting up the React calculation far outside the mineral stability range, especially if you’re leaving the stability range of water. You can plot data from multiple React calculations together in a single plot by exporting the numerical values to Excel. You can also use the exported information to fill your table. For more information, please see 3.5 Buffered paths and 3.6 Sliding activity and fugacity in the GWB Reaction Modeling Guide. Please see as well 6.7 Exporting the plot in the same guide. Again, please post on the front page of the GWB forum, not in the archive of old posts. Regards, Brian
  2. Hi Gustavo, A thermo dataset is a compilation of reactions with log K values at specific temperatures. You cannot simply change the temperature range without replacing the log K values. I'd recommend starting with one of the datasets that goes up to 300 C and adding the specific REE elements, species, and minerals that you need. The TEdit app will be useful for this. In the future, please post on the front page of the main GWB forum, not in the archive of old posts. Regards, Brian Farrell Aqueous Solutions
  3. Hi Jonah, The GWB runs under Windows 10, Windows 8 & 8.1, and Windows 7. You can also run the software on a Mac using virtualization software such as Parallels Desktop or using a dual boot configuration with a program like Boot Camp. Regards, Brian Farrell Aqueous Solutions LLC
  4. Hi Polly, Like I said, you need to use the “extrapolate” option to match your 80 C plot to the technical report. When set to 80 C, Act2 by default doesn’t load the UO2(OH)3- and UO2(OH)4-- species that you see in the report because they have log Ks only at 25 C. If you extrapolate these log K values to higher temperatures, Act2 will load them, and you’ll get the same diagram. Regards, Brian
  5. Hi Polly, The CO2 fugacity you specify should be unique for your particular calculation. Looking at the figure you’ve provided from the report, no species with carbon predominate, so I’m reasonably certain that’s not the missing link (in this type of calculation, at least). Act2’s Results pane (as well as the “Act2_output.txt” file that you can access by clicking “View Results” from the Plot pane) includes a list of all the species and minerals included in the calculation. If you look there, you’ll notice that UO2(OH)3- and UO2(OH)4--, which predominate in the upper right of the technical report’s diagram, but not yours, are missing. If you look in the thermo dataset, you’ll see they only have log K values specified at 25 C, so they won’t be considered in your 80 C calculation. Act2’s “extrapolate” function can be used to estimate log K values outside their known values. This can be quite dangerous, especially when only a single log K value is known, but I believe that’s what has been done in the report. For more information, please see the Thermo Datasets chapter in the GWB Reference Manual, as well as the extrapolate command in the GWB Command Reference. Regards, Brian Farrell Aqueous Solutions
  6. Hi Polly, First, verify that the thermo dataset you’re using matches that used in the technical report. I think a huge difference is that the diagram depicted in the technical report is an example of a “mosaic diagram”. The complexing HCO3- ion, for example, might be allowed to speciate as a function of pH into CO2(aq) or CO3--. To accomplish this, the diagram is divided into several parts in which one of those forms of carbon predominates. Within each subdiagram, reactions are written in terms of the predominant form of the complexing ligand. You can recognize a mosaic diagram by its shape – the slope of the bounding line between a pair of species is normally constant, but in a mosaic diagram it might change abruptly. You can choose to speciate over the conditions of the x axis only (pH here), y axis only (pe), or both. You should check as well the redox coupling and choice of oxidation states in the diagrams. Your analysis specifies only N, not the valence of nitrogen species. Do you know whether all the nitrogen exists in one oxidation state, such as nitrate, or as several? If it’s only nitrate, for example, you would decouple the redox species NO3- from the basis species NH3(aq), then add NO3- (not NH3(aq). In this case, speciate over y would have no effect, because no coupling reactions are enabled for the ligand. You should consider your choice of redox coupling reactions together with the degree of speciation you specify for complexing ligands. Finally, you may need to suppress one or more species that are thermodynamically favored, but may have been excluded from the report. Perhaps the paper, or an appendix, reveals more information about the details of the calculation? For more information, please see 2.4 Redox couples and 5.3 Mosaic diagrams in the GWB Essentials Guide. For information on suppressing species, please see 3.54 Suppress in the GWB Command Reference, as well as the example in 6.2 Solubility diagrams in the GWB Essentials Guide. Please post on the front page of the GWB forum, not the archive of old posts. Regards, Brian Farrell Aqueous Solutions
  7. Hi Jason, The potential drop across the length of the domain is the driving force for flow. The program uses it, along with the permeability and viscosity, to calculate flow according to Darcy’s law. A boundary might be open to flow, closed to flow (no flow), or water might be set to enter at a specified value of specific discharge. For more information, please see 2.14 Groundwater flow, 3.2 Setting flow rate, and 4.3 Calculating the flow field in the GWB Reactive Transport Modeling Guide. The program uses a correlation to calculate the log of permeability from the porosity, and optionally, the volume fraction of one or more minerals. Permeability is always a positive number. Log permeability, on the other hand, can be negative. For details of the correlation, please see 2.13 Permeability correlation in the same guide. If you’d like to set permeability directly, the porosity multiplier (A) should be set to 0. In your example, set B to 3.6987 mdarcy (the log of 5000). Yes, you can plot permeability in the x and y directions in Xtplot. It’s a good idea to verify that the permeability the program calculates is what you expect. You can use a combination of equilibrium and kinetic minerals, if necessary, to define the minerals that exist in your system. For a good example, see the Weathering and Steam examples in the Reactive Transport Modeling guide (3.8 Example: weathering in a soil profile and 3.11 Example: steam flood). In the future, please post on the main GWB forum (the front page), not the archive of old posts. Regards, Brian Farrell Aqueous Solutions LLC
  8. Hi, Can you explain more how you'd like to use these compounds? What is the conceptual model for your chemical system? If you want to see the effects of titrating a base like NaOH into an acidic fluid, for example, you don't need to add NaOH specifically. You can equivalently add Na+ and OH- as simple reactants, because the only property of a simple reactant that matters is its composition. For more information, please see 3.1 Titration paths in the GWB Reaction Modeling Guide. More generally, there are a variety of thermo datasets installed with the GWB, so you might try loading a different thermo dataset. Additionally, the species, minerals, and gases included in thermo datasets are fully editable. You can add new reactions to the GWB's datasets if they're missing something that you need. For more information, please see 2.3 Thermodynamic datasets and 9 Using TEdit in the GWB Essentials Guide, as well as the Thermo Datasets chapter in the GWB Reference Manual. Hope this helps, Brian Farrell Aqueous Solutions LLC
  9. Hi Sam, The inlet fluids don’t infiltrate very far into your domain over the timescale of your simulation, let alone by the first step in the plot file. You can plot “pore volumes displaced” or add a conservative tracer to verify this. And looking at the Q/K for Hydroxyapatite, I don’t think it ever gets undersaturated in most of the domain, it just approaches equilibrium – a log Q/K of ~0. The Hydroxyapatite is supersaturated in the initial porewater, and I think it’s just precipitating really quickly, and thus approaching equilibrium very quickly. The undersaturated inlet fluid doesn’t really come into play here. I think it would be a lot easier to troubleshoot a scenario like this with a 1D model in X1t, or even a flush model in React. Hope this helps, Brian Farrell Aqueous Solutions
  10. 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
  11. Hi, You probably have an incomplete chemical analysis for one or more samples. If you don't constrain all the species in the reaction to form a mineral, you won't be able to calculate its saturation state. If you'd like someone to take a closer look, please attach your script. Regards, Brian Farrell Aqueous Solutions LLC
  12. Hi Helge, If you're preparing a script in a text editor, like Notepad, you can start a comment line with a #. Regards, Brian Farrell Aqueous Solutions LLC
  13. Hi Erik, Ok, thanks for the additional information. A very simple strategy for that intermediate instance would be to fix pH and charge balance on SO4--. Assuming reaction within the domain increases pH, so that you’re always adding sulfuric acid to the effluent, the program will add enough H+ to achieve the desired pH, along with SO4-- to balance it out. If reaction along the domain were to decrease pH, however, the program would remove H+ and SO4-- from the intermediate instance to maintain the pH. In that case, the configuration is not realistic. I’m assuming here that you’re monitoring pH in the real world as a proxy for sulfuric acid concentration, since that’s an effectively instantaneous measurement, but that may not be the case. If that’s not quite right, a more complex solution might be to do something like the second task in the Time Marching Loops lesson in the ChemPlugin Modeling with Python Academy. In that example, the client titrates NaOH into a fluid and queries ChemPlugin for the pH after each small addition. It stops the titration when the desired pH is achieved. Perhaps you could titrate sulfuric acid into the fluid and query ChemPlugin for whatever you need, then once you reach that target, send that fluid to the inlet of your domain. Hope this helps, Brian
  14. Hi Erik, Can you clarify whether you want the fluid that flows out of the last node to loop directly into the first node, or whether it should be transformed in some way? If it’s being transformed, can you please elaborate on how this is done? What’s the process? Thanks, Brian
  15. I'm glad to hear it helped. I hope you enjoy using the software. Brian
  16. You can find the example ChemPlugin client RTM1.py at https://chemplugin.gwb.com/client_programs.php
  17. Hi Erik, You can use a variety of units when configuring a ChemPlugin instance. For example, cp.Config(“Ca++ = 1 mmol/kg”) cp.Config(“Ca++ = 40.08 mg/kg”) You can use a variety of units in retrieving results, as well. For example, cp.Report("concentration aqueous", "mmol/kg") cp.Report("concentration aqueous", "mg/kg") Similarly, you can use a variety of units in setting the links between instances. For example, this code from the Reactive Transport Model lesson on the ChemPlugin Academy is used to set up a link between an inlet fluid and the first node of a 1D domain. The client calculates three variables (flow, trans, and ttrans, representing flow rate, transmissivity, and thermal transmissivity, respectively) and passes them to ChemPlugin using three member functions (FlowRate(), Transmissivity(), and HeatTrans(), respectively). flow = some number trans = some number ttrans = some number link = cp[0].Link(cp_inlet) link.FlowRate(flow, “m3/s”) link.Transmissivity(trans, “m3/s”) link.HeatTrans(ttrans, “W/K”) The simulation parameters you’ve highlighted are from simple example client programs that use ChemPlugin, not ChemPlugin itself. A client could be relatively basic, like these, with no options for choosing units. Or, it could be a full-blown polished program with a GUI to choose units. Either way, ChemPlugin doesn’t care. The client just tells ChemPlugin what unit it used, and ChemPlugin is happy to accept it. If you look at the rest of the two client programs you’ve mentioned, you’ll see that the flow rates and transmissivities calculated by the client are either in cm3/s or m3/s, depending on the simulation parameters you’ve shown, and the units used were passed in the appropriate member functions. The important thing to remember is that you’re building a client, a reactive transport simulator tailor-made to your specifications here. It can be of any geometry, with any connections and feedbacks that you want to incorporate, and the user can interface with it however you’d like. Thanks, we’ll take a look at the website link. Hope this helps, Brian Farrell Aqueous Solutions
  18. Hi Dave, No, you can currently plot only a single Y axis on a Schoeller diagram. You can, however, choose from a variety of units, including mg/kg or mmol/kg, so that you can include uncharged components in your plot. The classical Schoeller diagram, though, uses electrical equivalent units like meq/kg. What is it that you'd like to plot on a second Y axis? Perhaps you can make separate diagrams and overlay them in a graphics program like PowerPoint? Regards, Brian Farrell Aqueous Solutions LLC
  19. You're welcome. Ahh, that makes sense. I hope you enjoy using the software. Regards, Brian
  20. Hi Clint, Glad to hear you're up and running. Regards, Brian
  21. Hi Erik, For something this complex, it sounds like you might be better off using ChemPlugin to construct your own reactive transport code, rather than trying to fit your needs to X2t’s capabilities. With a client program that you write to solve the flow problem, you can use ChemPlugin instances to solve the chemical reactions. Your client has fine-grained control over ChemPlugin’s time marching loop, and you’re able to retrieve results and set up sophisticated simulations without too much effort on your part. Hope this helps, Brian Farrell Aqueous Solutions LLC
  22. Hi, 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 HCO3- component, for example, might include the HCO3- species, as well as CO2(aq), CO3--, NaHCO3, etc. If you set 10 “mg/kg” HCO3-, the concentration is for the sum of those species. If you set 10 “free mg/kg” HCO3-, though, the concentration refers only to the individual HCO3- species. An additional amount of carbon exists as the other species. Likewise, for H2O, “free kg” refers to solvent H2O only. If you change the setting to simply “kg”, the mass you specify refers to the sum of solvent H2O plus species composed of water (e.g., Al(OH)4- + 4 H+ = Al+++ + 4 H2O). For more information, please see 7.1 Example Calculation in the GWB Essentials Guide. Log refers to the base 10 log of a number (e.g., 1 free kg H2O = 0 free log kg H2O). A more common use is for setting the CO2 fugacity or partial pressure using logs (e.g. log f CO2(g) = -3.5). In the future, please don’t post topics multiple times. Regards, Brian Farrell Aqueous Solutions
  23. Hi Clint, We can look into the issue of units changing from mg/l to mmol/kg when no mole weight is specified. However, your “Total X” analytes should almost certainly be defined with the mole weight of the appropriate element (e.g. 14.007 for N or 30.974 for P). Even if you’re not sure about the mole weight, you might still add the analyte with mg/l default units and the element’s mole weight, and just not convert to mmol/kg. The undesired unit change only happens when mole weight is set to 0. Alternatively, make the analyte name something like “Total N (mg/L)” and choose “Number” for the dimension and unit. Hope this helps, Brian Farrell Aqueous Solutions LLC P.S. It's best to post on the front page of the GWB forum, not in the archive of old posts.
  24. Hi Abel, The GWB apps come installed with example datasets for surface complexation on iron oxyhydroxides, but you can account for any number of different sorbing surfaces in React and the other GWB programs. You simply supply a dataset for each surface. The graphical thermo data editor TEdit can be used to quickly construct surface datasets. To use multiple surfaces in a model, each surface dataset that’s loaded should have a different “surface type”. The surface type is simply a descriptive label that appears in the third line of the surface dataset. For example, the label in FeOH.sdat, which describes sorption to hydrous ferric oxide, is HFO. If you prepare a separate dataset for Mn oxide sorption, you might use “Mn oxide” for the surface type. A separate requirement for using multiple surface datasets simultaneously is that species must have unique names. For example, an uncomplexed site in FeOH.sdat is >(w)FeOH, so you can’t reuse that name in your Mn oxide dataset. Instead, you might use something like >MnOH. That’s really all you need to do. For an example of a model incorporating multiple surfaces, check out Colloid.X1t, installed with the software in the Script folder. The example uses a Kd surface dataset to describe partitioning of Pb++ between the solution and sediments in an aquifer, and a two-layer surface complexation dataset to describe Pb++ complexation with a ferric hydroxide colloid that flows into the aquifer. Hope this helps, Brian Farrell Aqueous Solutions
  25. Hi Jeff, For this kinetic mineral reaction, you'll need to specify a custom rate law instead of using the GWB's Built-in rate law. I think the simplest option, the rate law equation, would work for your purposes, but you can set more complicated scripts or functions if you'd like. The process is described in section 5.1, Setting the rate law form directly, in the GWB Reaction Modeling Guide. After you've added the kinetic Forsterite, change the rate law pulldown from "built in" to "equation", then type in the equation to be evaluated. You can access the Internal parameters in Table 5.1 and the Helper functions in Table 5.2. The latter will be needed to include the H+ ion activity in your rate law. Regards, Brian Farrell Aqueous Solutions LLC
×
×
  • Create New...