Calculate values of activity or fugacity of basis species buffered by an assemblage of one or more species.
UTF-8
mod.buffer(name, species =NULL, state ="cr", logact =0)
Arguments
name: character, name of buffer to add to or find in thermo()$buffer.
species: character, names or formulas of species in a buffer.
state: character, physical states of species in buffer.
logact: numeric, logarithms of activities of species in buffer.
Details
A buffer is treated here as assemblage of one or more species whose presence constrains values of the chemical activity (or fugacity) of one or more basis species. To perform calculations for buffers use basis to associate the name of the buffer with one or more basis species. After this, calls to affinity will invoke the required calculations. The calculated values of the buffered activites can be retrieved by setting return.buffer to TRUE (in affinity). The maximum number of buffered chemical activities possible for any buffer is equal to the number of species in the buffer; however, the user may then elect to work with the values for only one or some of the basis species calculated with the buffer.
The identification of a conserved basis species (or other reaction balancing rule) is required in calculations for buffers of more than one species. For example, in the pyrite-pyrrhotite-magnetite buffer (FeS2-FeS-Fe3O4) a basis species common to each species is one representing Fe. Therefore, when writing reactions between the species in this buffer Fe is conserved while H2S and O2 are the variables of interest. The calculation for buffers attempts to determine which of the available basis species qualifies as a conserved quantity. This can be overriden with balance. The default value of balance is PBB , which instructs the function to use the protein backbone group as the conserved quantity in buffers consisting of proteins, but has no overriding effect on the computations for buffers without proteins.
To view the available buffers, print the thermo()$buffer object. Buffer definitions can be added to this dataframe with mod.buffer. The defaults for state and logact are intended for mineral buffers. If name identifies an already defined buffer, this function modifies the logarithms of activities or states of species in that buffer, optionally restricted to only those species given in species.
It is possible to assign different buffers to different basis species, in which case the order of their calculation depends on their order in thermo()$buffers. This function is compatible with systems of proteins, but note that for buffers made of proteins the buffer calculations presently use whole protein formulas (instead of residue equivalents) and consider nonionized proteins only.
See Also
diagram with type set to the name of a basis species solves for the activity of the basis species.
Examples
## List the buffersthermo()$buffer
# Another way to do it, for a specific bufferprint(mod.buffer("PPM"))## Buffer made of one species# Calculate the activity of CO2 in equilibrium with# (a buffer made of) acetic acid at a given activitybasis("CHNOS")basis("CO2","AC")# What activity of acetic acid are we using?print(mod.buffer("AC"))# Return the activity of CO2affinity(return.buffer =TRUE)$CO2 # -7.057521# As a function of oxygen fugacityaffinity(O2 = c(-85,-70,4), return.buffer =TRUE)# As a function of logfO2 and temperatureaffinity(O2 = c(-85,-70,4), T = c(25,100,4), return.buffer =TRUE)# Change the activity of species in the buffermod.buffer("AC", logact =-10)affinity(O2 = c(-85,-70,4), T = c(25,100,4), return.buffer =TRUE)## Buffer made of three species## Pyrite-Pyrrhotite-Magnetite (PPM)# Specify basis species and initial activitiesbasis(c("FeS2","H2S","O2","H2O"), c(0,-10,-50,0))# Note that the affinity of formation of pyrite,# which corresponds to FeS2 in the basis, is zerospecies(c("pyrite","pyrrhotite","magnetite"))affinity(T = c(200,400,11), P =2000)$values
# Setup H2S and O2 to be buffered by PPMbasis(c("H2S","O2"), c("PPM","PPM"))# Inspect values of H2S activity and O2 fugacityaffinity(T = c(200,400,11), P =2000, return.buffer =TRUE, exceed.Ttr =TRUE)# Calculate affinities of formation reactions of species in the buffera <- affinity(T = c(200,400,11), P =2000, exceed.Ttr =TRUE)$values
# The affinities for species in the buffer are all equal to zeroall.equal(as.numeric(a[[1]]), rep(0,11))# TRUEall.equal(as.numeric(a[[2]]), rep(0,11))# TRUEall.equal(as.numeric(a[[3]]), rep(0,11))# TRUE## Buffer made of one species: show values of logfO2 on an ## Eh-pH diagram; after Garrels, 1960, Figure 6basis("CHNOSe")# Here we will buffer the activity of the electron by O2mod.buffer("O2","O2","gas",999)basis("e-","O2")# Start our plot, then loop over values of logfO2thermo.plot.new(xlim = c(0,14), ylim = c(-0.8,1.2), xlab ="pH",ylab = axis.label("Eh"))# The upper and lower lines correspond to the upper# and lower stability limits of waterlogfO2 <- c(0,-20,-40,-60,-83.1)for(i in1:5){# Update the logarithm of fugacity (logact) of O2 in the buffer mod.buffer("O2","O2","gas", logfO2[i])# Get the values of the logarithm of activity of the electron a <- affinity(pH = c(0,14,15), return.buffer =TRUE)# Convert values of pe (-logact of the electron) to Eh Eh <- convert(-as.numeric(a$`e-`),"Eh") lines(seq(0,14, length.out =15), Eh)# Add some labels text(seq(0,14, length.out =15)[i*2+2], Eh[i*2+2], paste("logfO2 =", logfO2[i]))}title(main = paste("Relation between logfO2(g), Eh and pH at\n","25 degC and 1 bar. After Garrels, 1960"))## Buffer made of two species# Conditions for metastable equilibrium among # CO2 and acetic acid. note their starting activities:print(mod.buffer("CO2-AC"))basis("CHNOS")basis("O2","CO2-AC")affinity(return.buffer =TRUE)# logfO2 = -75.94248basis("CO2",123)# what the buffer reactions are balanced onaffinity(return.buffer =TRUE)# unchanged# Consider more oxidizing conditionsmod.buffer("CO2-AC", logact = c(0,-10))affinity(return.buffer =TRUE)