Pourbaix Diagram for Copper
[1]:
import pyPourbaix as pb
Like elucidated in the previous examples, let’s define the nessecarry Reactants for the hydrogen evolution reaction \((\text{HER})\) and oxygen evolution reaction \((\text{OER})\).
[2]:
species = ('H|+1|, state=aq, dGf=0, dHf=0, Sm=0',
'H2, state=g, dGf=0, dHf=0, Sm=0',
'e|-1|, state=e, dGf=0, dHf=0, Sm=0',
'H2O, state=l, dGf=-2.37140E+05, dHf=-2.85830E+05, Sm=69.95',
'O2, state=g, dGf=0, dHf=0, Sm=205.137')
The Pourbaix diagram of Copper is slightly more compley than the Pourbaix diagram of Aluminium. It involves 3 solid phases, crystalline \(\text{Cu}^{0}(\text{s})\), copper oxide \(\text{Cu}_2\text{O}(\text{s})\) and copper hydroxide \(\text{Cu}(\text{OH})_2(\text{s})\):
[3]:
species = ('H|+1|, state=aq, dGf=0, dHf=0, Sm=0',
'H2, state=g, dGf=0, dHf=0, Sm=0',
'e|-1|, state=e, dGf=0, dHf=0, Sm=0',
'H2O, state=l, dGf=-2.37140E+05, dHf=-2.85830E+05, Sm=69.95',
'O2, state=g, dGf=0, dHf=0, Sm=205.137',
'Cu|0|, state=s, dGf=0, dHf=0, Sm=33.15',
'Cu2O|0|, state=s, dGf=-147.9E+03, dHf=0, Sm=92.36',
'Cu(OH)2|0|, state=s, dGf=-359.92E+03, dHf=0, Sm=87.0'
)
We will again consider two aqueous species, \(\text{Cu}^{2+}\) predominantly present at acidic \(\text{pH}\) and \(\text{Cu}(\text{OH})_4^{2-}\) that is preferrentially stabilised in alkaline media.
[4]:
species = ('H|+1|, state=aq, dGf=0, dHf=0, Sm=0',
'H2, state=g, dGf=0, dHf=0, Sm=0',
'e|-1|, state=e, dGf=0, dHf=0, Sm=0',
'H2O, state=l, dGf=-2.37140E+05, dHf=-2.85830E+05, Sm=69.95',
'O2, state=g, dGf=0, dHf=0, Sm=205.137',
'Cu|0|, state=s, dGf=0, dHf=0, Sm=33.15',
'Cu2O|0|, state=s, dGf=-147.9E+03, dHf=0, Sm=92.36',
'Cu(OH)2|0|, state=s, dGf=-359.92E+03, dHf=0, Sm=87.0',
'Cu|+2|, state=aq, dGf=65.04E+03, dHf=0, Sm=-98.0',
'Cu(OH)4|-2|,state=aq, dGf=-657.48e+03, dHf=0, Sm=-175'
)
db = pb.Database.from_default(species)
Having 5 rather that 4 stable constituents significantly increases the complexity of the final Pourbaix diagram. First of all, let’s implement all \(\text{Cu}^{0}(\text{s})\) oxidation reactions to form \(\text{Cu}^{2+}\), \(\text{Cu}_2\text{O}(\text{s})\) and \(\text{Cu}(\text{OH})_4^{2-}\).
[5]:
reactions = ('2H|+1| + 2e|-1| -> H2',
'O2 + 4H|+1| + 4e|-1| -> 2H2O',
'Cu|0| -> Cu|+2| + 2e|-1|',
'Cu2O|0| + 2H|+1| + 2e|-1| -> 2Cu|0| + H2O',
'Cu(OH)4|-2| + 4H|+1| + 2e|-1| -> Cu|0| + 4H2O'
)
The \(\text{Cu}(\text{I})\) copper oxide \(\text{Cu}_2\text{O}(\text{s})\) furthermore features 3 potential and \(\text{pH}\)-dependent transitions to the aqueous species \(\text{Cu}^{2+}\) and \(\text{Cu}(\text{OH})_4^{2-}\) as well as the \(\text{Cu}(\text{II})\) copper hydroxide \(\text{Cu}(\text{OH})_2(\text{s})\):
[6]:
reactions = ('2H|+1| + 2e|-1| -> H2',
'O2 + 4H|+1| + 4e|-1| -> 2H2O',
'Cu|0| -> Cu|+2| + 2e|-1|',
'Cu2O|0| + 2H|+1| + 2e|-1| -> 2Cu|0| + H2O',
'Cu(OH)4|-2| + 4H|+1| + 2e|-1| -> Cu|0| + 4H2O',
'2Cu|+2| + H2O + 2e|-1| -> Cu2O|0| + 2H|+1|',
'2Cu(OH)4|-2| + 6H|+1| + 2e|-1| -> Cu2O|0| + 7H2O',
'2Cu(OH)2|0| + 2H|+1| + 2e|-1| -> Cu2O|0| + 3H2O'
)
Lastly, 2 potential-independent hydrolysis reactions mark the transitions between the 3 \(\text{Cu}(\text{II})\) species \(\text{Cu}^{2+}\), \(\text{Cu}(\text{OH})_2(\text{s})\) and \(\text{Cu}(\text{OH})_4^{2-}\):
[7]:
reactions = ('2H|+1| + 2e|-1| -> H2',
'O2 + 4H|+1| + 4e|-1| -> 2H2O',
'Cu|0| -> Cu|+2| + 2e|-1|',
'Cu2O|0| + 2H|+1| + 2e|-1| -> 2Cu|0| + H2O',
'Cu(OH)4|-2| + 4H|+1| + 2e|-1| -> Cu|0| + 4H2O',
'2Cu|+2| + H2O + 2e|-1| -> Cu2O|0| + 2H|+1|',
'2Cu(OH)4|-2| + 6H|+1| + 2e|-1| -> Cu2O|0| + 7H2O',
'2Cu(OH)2|0| + 2H|+1| + 2e|-1| -> Cu2O|0| + 3H2O',
'Cu(OH)2|0| + 2H|+1| -> Cu|+2| + 2H2O',
'Cu(OH)4|-2| + 2H|+1| -> Cu(OH)2|0| + 2H2O'
)
Note that 1 additional solid species added a total of 3 reactions to the Pourbaix diagram. By this time, setting up the reactive system should come natural:
[8]:
Cu_system = pb.System()
Cu_system.set_database(db)
As the transition of \(\text{Cu}^{0}(\text{s})\) to \(\text{Cu}(\text{OH})_4^{2-}\) is only visible at strongly alkaline pH, we will pick a borad \(\text{pH}\) interval of \([0, \ 18]\).
[9]:
Cu_system.pHs = (0, 18)
We will continue defining the reference electrode of our system. How about we pick the copper suphate electrode (CSE) this time, that sounds appropriate considering we want to generate a Pourbaix diagram of the element copper.
[10]:
Cu_system.reference_electrode = ("CSE",0.241)
Let’s quickly define the electrode potential boundaries as well as all elements to be plotted. We will also set the activity of aqueous species to \(\{\text{Cu}\}_{\text{aq}} = 1\cdot10^{-3}\).
[11]:
Cu_system.electrode_potentials = (-1.5, 2)
Cu_system.add_elements(["O","H","Cu"])
Cu_system.set_aqueous_activity("Cu",1e-3)
After adding so many different reactions to the reactive system, users might have lost track. Luckily, we can easily get an overview over the reactive system and generate a summary of all reactions added using the print command like so:
[12]:
Cu_system.add_reactions(reactions)
print(Cu_system)
-----------------------------System-----------------------------
Temperature : 298.15, Pressure : 1.0
----------------------------------------------------------------
1.0H₂ ⇄ 2.0H⁺¹ + 2.0e⁻¹
2.0H₂O ⇄ 1.0O₂ + 4.0H⁺¹ + 4.0e⁻¹
1.0Cu⁺² + 2.0e⁻¹ ⇄ 1.0Cu⁰
2.0Cu⁰ + 1.0H₂O ⇄ 1.0Cu₂O⁰ + 2.0H⁺¹ + 2.0e⁻¹
1.0Cu⁰ + 4.0H₂O ⇄ 1.0Cu(OH)₄⁻² + 4.0H⁺¹ + 2.0e⁻¹
1.0Cu₂O⁰ + 2.0H⁺¹ ⇄ 2.0Cu⁺² + 1.0H₂O + 2.0e⁻¹
1.0Cu₂O⁰ + 7.0H₂O ⇄ 2.0Cu(OH)₄⁻² + 6.0H⁺¹ + 2.0e⁻¹
1.0Cu₂O⁰ + 3.0H₂O ⇄ 2.0Cu(OH)₂⁰ + 2.0H⁺¹ + 2.0e⁻¹
1.0Cu⁺² + 2.0H₂O ⇄ 1.0Cu(OH)₂⁰ + 2.0H⁺¹
1.0Cu(OH)₂⁰ + 2.0H₂O ⇄ 1.0Cu(OH)₄⁻² + 2.0H⁺¹
----------------------------------------------------------------
Likewise, we can inspect the database of species, together with all entered thermodynamic parameters:
[13]:
print(db)
----------------------------Database----------------------------
Species dGf dHf Sm
----------------------------------------------------------------
H|+1| 0.0 0.0 0.0
H2 0.0 0.0 0.0
e|-1| 0.0 0.0 0.0
H2O -237140.0 -285830.0 69.95
O2 0.0 0.0 205.137
Cu|0| 0.0 0.0 33.15
Cu2O|0| -147900.0 0.0 92.36
Cu(OH)2|0| -359920.0 0.0 87.0
Cu|+2| 65040.0 0.0 -98.0
Cu(OH)4|-2| -657480.0 0.0 -175.0
----------------------------------------------------------------
Let’s generate and plot the diagram using th plotting backend bokeh:
[14]:
Cu_diagram = pb.PourbaixDiagram(Cu_system,HER=True,OER=True)
Cu_diagram.solve()
Cu_diagram.show(backend='bokeh',plot_regions=True)
It can be recognised that any of the \(\text{Cu}^{0}(\text{s})\) oxidation reactions feature a potential greater than the hydrogen evolution line \(\text{E}_{\text{H}^+/\text{H}_2} = \text{E}^0_{\text{H}^+/\text{H}_2} - 0.059\times\text{pH}\).