Cobalt Nanoparticle on Silica Support
Estimated total CPU time: < 2 min when using 70 CPUs or more
Theoretical Background
Spin Polarization in Transition Metal Systems
Unlike our previous Si(100) example where we could use a non-spin-polarized approach, transition metals like cobalt exhibit strong magnetic behavior due to partially filled d-orbitals. To accurately model these systems, we must account for spin polarization by treating the spin-up (\(n_\uparrow\)) and spin-down (\(n_\downarrow\)) electron densities separately in our calculations.
The magnetic moment \(M\) of the system is given by the difference between the number of spin-up and spin-down electrons:
For cobalt-based systems, proper treatment of spin polarization is critical. While the non-magnetic silicon surface in our previous example did not require spin treatment, neglecting magnetism in cobalt systems would lead to qualitatively incorrect results for both geometric structure and adsorption energetics.
In FHI-aims, we can perform spin-polarized calculations using a collinear spin treatment, where the spins are aligned along a single axis. This is controlled by setting an initial magnetic moment for each atom, which is particularly crucial for cobalt to ensure proper convergence to the correct magnetic ground state.
For the calculations in this tutorial, we use the RPBE functional. This functional provides improved accuracy for adsorption energies on transition metal surfaces compared to standard PBE 3 and was used in the reference studies 1 2 that we are following.
Warning
In the following exercises, the "light" basis set settings are used throughout our calculations. The other settings are taken directly from the references that we are following 1 2. Although the qualitative trends already hold with the present settings, the basis set would have to be converged with much more care for real production calculations. As we will see later on, adsorption energies with "tight" basis settings reported in 1 2 agree well with the results reported here. For publication-quality results, we generally recommend 'tight' basis settings for these kinds of systems.
Note
If you have an interest in simulating complex metal oxides (or any other complex, charged, or spin-polarized sytem) with FHI-aims, we recommend to read through the tutorial here, which deals with Fe\(_2\)O\(_3\) (iron-oxide - based on the hematite crystal form). This will teach you strategies to achieve converged calculations for complex systems that rely on charge and spin initilization.
Adsorption Energy Calculation
The adsorption energy (\(E_{\text{ads}}\)) is a key descriptor for understanding catalyst-adsorbate interactions. It is defined as the energy difference between the combined system (adsorbate on catalyst) and the sum of the isolated components:
where \(E_{\text{adsorbate+catalyst}}\) is the total energy of the adsorbate on the catalyst, \(E_{\text{catalyst}}\) is the energy of the isolated catalyst, and \(E_{\text{adsorbate}}\) is the energy of the isolated adsorbate molecule. By this convention, a negative \(E_{\text{ads}}\) indicates an exothermic (energetically favorable) adsorption process. The more negative the adsorption energy, the stronger the binding.
In the case of CO\(_2\) adsorption on a Co\(_{20}\)/SiO\(_2\), we have the following:
Where \(E(\text{CO}_2 + \text{Co}_{20}/\text{SiO}_2)\) is the total energy of the CO\(_2\) molecule adsorbed on the C0\(_{20}\)/SiO\(_2\) slab, \(E(\text{Co}_{20}/\text{SiO}_2)\) is the total energy of the clean C0\(_{20}\)/SiO\(_2\) surface, and \(E(\text{CO}_2)\) is the total energy of an isolated CO\(_2\) molecule.
However, in this case, the catalyst components exhibit magnetic properties that must be properly accounted for to obtain reliable results.
For CO\(_2\) adsorption on cobalt catalysts, the adsorption energy provides insight into the initial activation of the molecule, which is often the rate-determining step in CO\(_2\) conversion reactions. Strong adsorption may facilitate CO\(_2\) activation by weakening and elongating the C-O bonds, but excessively strong binding can lead to catalyst poisoning.
In the studies we're following 1 2, the CO\(_2\) adsorption energy was identified as an important descriptor that correlates with catalytic performance, particularly the selectivity toward different products like methanol or methane.
Manual creation of input files
All the input files that we will show in the following sections can be manually created and adjusted by the user. The usage of the clims package is only for convenience but not necessary.
Modeling a Single Cobalt Atom
Understanding the electronic structure and magnetic properties of a single cobalt atom provides the foundation for our multi-scale approach to cobalt catalysis. The isolated cobalt atom, with its electron configuration [Ar]3d\(^7\)4s\(^2\), exhibits distinct magnetic behavior that needs to be properly captured in our calculations.
Start by creating a new working folder in your terminal:
Before we calculate the different components to obtain the adsorption energies, we want to briefly explain how we can accurately model the cobalt cluster in FHI-aims.
Electronic Structure of Cobalt
We start by looking at the electronic configuration of a free cobalt atom:
A free cobalt atom has 9 valence electrons distributed across the 3d and 4s orbitals. According to Hund's rule, the electrons in the 3d orbitals align their spins to maximize the total spin angular momentum. This results in 3 unpaired electrons and a theoretical magnetic moment of +3 per atom.
Setting Up a Single Atom Calculation in FHI-aims
Converging free-atom simulations
Converging free-atom calculations is no simple feat and we have a dedicated tutorial for this here. Please read through it if you are interested in strategies on how to achieve convergence in those cases.
One advantage of FHI-aims is its ability to perform calculations on non-periodic systems directly in real space without requiring a periodic cell. This makes it well-suited for modeling isolated atoms and clusters, as well as periodic systems on equal footing.
Create a new folder for our single atom calculation with
For a single cobalt atom calculation, we create a geometry.in
file with a Co atom:
Here, we set an initial spin moment of +3 (see the explanation above).
For our computational settings, we'll use the following control.in
:
The key parameters here include:
xc rpbe
: Using the RPBE functional for improved accuracy in adsorption energeticsspin collinear
: Enabling spin-polarized calculations with collinear spin treatment
Warning
When calculating adsorption energies, or energy differences in general, it's important to do so using consistent computational settings, i.e., the same basis set settings, exchange-correlation functional, and k-grid (if modeling periodic systems). In this tutorial we will thus only use the RPBE functional and "light" basis settings for consistency.
Add the light
species defaults by inputting this clims
command:
Submit the calculation to your compute system. During the webinar hands-on session, you may use the provided fhiaims_job.sh
script:
Submission script on provided AWS resources
You can submit a job to the computing queue with:
Make sure to submit the job from the folder where the FHI-aims input files are located.
The submission script looks like the following:
#!/bin/bash -l
# Standard output and error:
#SBATCH -o ./slurm.stdout
#SBATCH -e ./slurm.stderr
# Initial working directory:
#SBATCH -D ./
# Job Name:
#SBATCH -J FHI-aims
# Number of nodes and MPI tasks per node:
#SBATCH --nodes=1
# HPC7g
#SBATCH --tasks-per-node=64
#
# Wall clock limit:
#SBATCH --time=00:15:00
ulimit -s unlimited
module purge
module load fhi-aims aims-tools
date
mpirun aims.x > aims.out
After finishing this calculation, we can inspect the output file aims.out
in more detail. In the beginning, we can see the
spin initialization, which should match the expected electronic configuration:
List of occupied orbitals and eigenvalues:
n l energy [Ha] energy [eV] occupation
Spin-up
1 0 -281.582965 -7662.2623 1.00000000
2 0 -33.093880 -900.5303 1.00000000
3 0 -3.807790 -103.6152 1.00000000
4 0 -0.199895 -5.4394 1.00000000
2 1 -28.323563 -770.7234 3.00000000
3 1 -2.452683 -66.7409 3.00000000
3 2 -0.336156 -9.1473 5.00000000
Spin-down
1 0 -281.583196 -7662.2686 1.00000000
2 0 -33.037891 -899.0067 1.00000000
3 0 -3.686177 -100.3060 1.00000000
4 0 -0.179912 -4.8957 1.00000000
2 1 -28.281718 -769.5847 3.00000000
3 1 -2.333021 -63.4847 3.00000000
3 2 -0.228713 -6.2236 2.00000000
We can extract the converged magnetic moment from the output file aims.out
in the final self-consistent-cycle step to verify that our chemical intuition is appropriate, and we converged to the ground state:
In this case, we indeed converge to the appropriate spin state with a total spin moment of +3.
Modeling Cobalt Clusters
When cobalt atoms form clusters, their electronic and magnetic properties undergo substantial changes due to several quantum mechanical phenomena. Orbital hybridization occurs as the d-orbitals of adjacent cobalt atoms begin to overlap and interact, creating new combined electronic states with altered energy levels. This process is accompanied by electron delocalization, particularly the 4s electrons, creating a more metallic-like electron distribution throughout the cluster. These effects result in changes to the magnetic properties, notably reducing the magnetic moment per atom from approximately +3 for an isolated cobalt atom down to around +2 per atom in smaller clusters, approaching the bulk value of +1.7 per atom 5.
For our Co\(_{20}\) cluster model, we use the structure optimized by Farkaš and de Leeuw 4 as our starting point, which was subsequently reoptimized with FHI-aims (RPBE + light species defaults) by Miyazaki et al. in 1. This structure has been identified as a stable configuration for the Co\(_{20}\) cluster.
Practical Recommendation
One calculation - one directory.
We strongly recommend to create a new directory (with its own control.in and geometry.in files) for every new FHI-aims calculation. Rerunning and/or continuing FHI-aims calculations in the same directory that was used before will overwrite output and input files.
Create a new working folder for the cluster with:
The geometry.in
file for the relaxed Co\(_{20}\) cluster looks like the following:
atom 12.1633426699999969 15.1550794450000001 12.3410990649999999 Co
initial_moment 2.00
atom 11.2385140099999976 13.4051366150000000 11.0216271949999989 Co
initial_moment 2.00
atom 13.6719532099999981 13.5824434450000009 11.3842088149999991 Co
initial_moment 2.00
atom 10.4068971099999974 11.4253416449999996 10.0577690949999994 Co
initial_moment 2.00
atom 12.6970824399999973 11.6392623450000006 10.4897286950000002 Co
initial_moment 2.00
atom 15.0204173699999970 11.7616739750000008 10.7463090749999992 Co
initial_moment 2.00
atom 11.9047665599999970 14.0033479750000005 14.6334573450000001 Co
initial_moment 2.00
atom 10.7528315099999965 11.8884177449999999 14.5584822549999995 Co
initial_moment 2.00
atom 13.3209518999999972 12.0774066150000010 14.9417877249999993 Co
initial_moment 2.00
atom 9.9668595199999963 9.9449205549999995 13.6507811449999998 Co
initial_moment 2.00
atom 12.2768497999999973 10.1755601250000005 14.0318692849999991 Co
initial_moment 2.00
atom 14.6045294099999978 10.2844251650000000 14.3443841849999991 Co
initial_moment 2.00
atom 10.2809060299999970 13.9576365050000000 13.1161075049999987 Co
initial_moment 2.00
atom 13.8900079099999978 14.2212029150000010 13.6543330350000005 Co
initial_moment 2.00
atom 9.9195826299999972 11.8098550949999996 12.2622936050000000 Co
initial_moment 2.00
atom 12.3145226599999980 12.2266808749999996 12.7692361649999988 Co
initial_moment 2.00
atom 14.7877902399999979 12.1654135050000001 12.9885887849999992 Co
initial_moment 2.00
atom 11.4225603899999975 10.1093964750000005 11.7797781349999990 Co
initial_moment 2.00
atom 13.7474318199999974 10.2794481849999997 12.1270269249999991 Co
initial_moment 2.00
atom 11.7279753099999979 12.7337418050000011 16.4522309050000004 Co
initial_moment 2.00
We specify the initial moments individually (+2 per atom), based on a ferromagnetic configuration, which is the stable spin configuration for this Co cluster 4 and was also used in 1 2.
For the Co\(_{20}\) cluster, the control.in
file is similar to the single atom case:
We add the keyword output hirshfeld
to perform a Hirshfeld analysis at the end of the S.C.F. cycle. This will be useful when analyzing charge transfer later on.
Add the light
species defaults by inputting this clims
command:
Submit the calculation again to your compute system. During the webinar hands-on session, you may use the provided fhiaims_job.sh
script:
Inspect the aims.out
file to extract the magnetic moment in the final self-consistent-cycle step:
Once the S.C.F. cycle is completed, the Hirshfeld analysis can be found in aims.out
, as shown for the first atom here:
------------------------------------------------------------
Performing Hirshfeld analysis of fragment charges and moments.
----------------------------------------------------------------------
| Atom 1: Co
| Hirshfeld charge : 0.01980900
| Free atom volume : 95.29304162
| Hirshfeld volume : 86.51136731
| Hirshfeld spin moment : 2.16095524
| Hirshfeld dipole vector : -0.01160885 0.27044604 -0.05419864
| Hirshfeld dipole moment : 0.27606760
| Hirshfeld second moments: 0.13405466 -0.00481166 0.00643837
| -0.00481166 0.29830871 -0.04768267
| 0.00643837 -0.04768267 0.11443993
...
We can see that the Hirshfeld spin moment of +2.16 is quite close to our chemical intuition.
Charge Analysis Methods
When analyzing atomic charges, several methods are available beyond the Hirshfeld approach used in this tutorial. These include Bader charge analysis, which uses topological properties of the electron density and is supported for FHI-aims via external programs, Mulliken and Löwdin population analyses based on orbital partitioning, Natural Population Analysis (NPA), and Charge Model 5 (CM5). Each method has different theoretical foundations and may yield varying results for the same system. Hirshfeld and Bader analyses are particularly common for extended systems like the supported catalysts studied here. For critical applications, comparing results across multiple charge partitioning schemes is recommended.
We could read this in manually from the output file, but GIMS also has the functionality to display Hirshfeld charges directly from its Output Analyzer
when you upload the aims.out
file:
The absolute values are typically not to be seen as perfectly reliable, but they are suitable to study charge transfer effects. We will look at the difference of the Hirshfeld charges for the Co\(_{20}\) cluster in the gas phase and adsorbed on the silica support later.
Provided analysis scripts
In the following, we will provide python scripts to do the data analysis. We do this to ensure that the tutorial can be completed by any user. Writing scripts (in whatever programming language) is something any user should try to do. There are many good python resources available online, such as the one provided by MolSSI on Python Scripting for Computational Molecular Science.
As an alternative, we can also read in the Hirshfeld charges manually. For this, you can use the following script:
Hirshfeld analysis script
This script does the following:
- Read in the FHI-aims output file
aims.out
from a specified folder and save the Hirshfeld charges/spins for the last 20 atoms. The output folder is the command line argument. - Output the results in a markdown table,
{folder_name}_hirshfeld_analysis.md
, and as a json file,{folder_name}_hirshfeld_analysis.json
.
import json
import sys
import re
from pathlib import Path
def extract_hirshfeld_data(file_path):
"""
Manually extract Hirshfeld charges and spin moments from an aims.out file.
Args:
file_path: Path to the aims.out file
Returns:
list: List of dictionaries with atom index, element, charge, and spin moment
"""
results = []
# Regular expression pattern to match the charge blocks
# This pattern looks for blocks starting with "| Atom" and captures the atom number and element
atom_pattern = re.compile(r"\|\s+Atom\s+(\d+):\s+([A-Za-z]+)")
# Pattern to extract the Hirshfeld charge
charge_pattern = re.compile(r"\|\s+Hirshfeld charge\s+:\s+(-?\d+\.\d+)")
# Pattern to extract the Hirshfeld spin moment
spin_pattern = re.compile(r"\|\s+Hirshfeld spin moment\s+:\s+(-?\d+\.\d+)")
current_atom = None
with open(file_path, "r") as file:
for line in file:
# Check if this line starts a new atom block
atom_match = atom_pattern.search(line)
if atom_match:
current_atom = {
"index": int(atom_match.group(1)),
"element": atom_match.group(2),
}
# If we're in an atom block, look for the charge and spin lines
elif current_atom is not None:
charge_match = charge_pattern.search(line)
if charge_match:
current_atom["charge"] = float(charge_match.group(1))
spin_match = spin_pattern.search(line)
if spin_match:
current_atom["spin"] = float(spin_match.group(1))
# If we have both charge and spin, add to results
if "charge" in current_atom and "spin" in current_atom:
results.append(current_atom)
current_atom = None # Reset for the next atom
return results
def analyze_cobalt_data(folder_path):
"""
Analyze the Hirshfeld charges and spin moments of the last 20 atoms in the aims.out file.
Args:
folder_path: Path to the folder containing the aims.out file
Returns:
dict: Dictionary with analysis results
"""
# Construct the path to the aims.out file
aims_file = Path(folder_path) / "aims.out"
# Check if the file exists
if not aims_file.exists():
print(f"Error: File {aims_file} does not exist.")
sys.exit(1)
try:
# Extract all Hirshfeld data from the file
all_atoms = extract_hirshfeld_data(aims_file)
if not all_atoms:
print("Error: No Hirshfeld data found in the output file.")
sys.exit(1)
# Get the last 20 atoms (or all if less than 20)
last_atoms = all_atoms[-20:] if len(all_atoms) >= 20 else all_atoms
# Extract just the charges and spins for calculations
charges = [atom["charge"] for atom in last_atoms]
spins = [atom["spin"] for atom in last_atoms]
# Create result dictionary
results = {
"folder": folder_path,
"cobalt_data": [
{
"atom_index": atom["index"],
"element": atom["element"],
"charge": atom["charge"],
"spin": atom["spin"],
}
for atom in last_atoms
],
"charge_statistics": {
"average": float(sum(charges) / len(charges)),
"min": float(min(charges)),
"max": float(max(charges)),
},
"spin_statistics": {
"average": float(sum(spins) / len(spins)),
"min": float(min(spins)),
"max": float(max(spins)),
},
}
# Print summary to console
print(f"Analysis completed for {folder_path}")
print(f"Total atoms found: {len(all_atoms)}")
print(f"Number of atoms analyzed: {len(last_atoms)}")
print(
f"Average charge of last {len(last_atoms)} atoms: {results['charge_statistics']['average']:.6f}"
)
print(
f"Average spin moment of last {len(last_atoms)} atoms: {results['spin_statistics']['average']:.6f}"
)
return results
except Exception as e:
print(f"Error analyzing file: {e}")
sys.exit(1)
def save_results_json(results):
"""
Save analysis results to a JSON file.
Args:
results (dict): Dictionary with analysis results
"""
folder_name = Path(results["folder"]).name
output_file = f"{folder_name}_hirshfeld_analysis.json"
with open(output_file, "w") as file:
json.dump(results, file, indent=2)
print(f"\nAnalysis data has been saved to '{output_file}'")
def create_markdown_report(results):
"""
Create and save a markdown report of the analysis results.
Args:
results (dict): Dictionary with analysis results
"""
folder_path = results["folder"]
folder_name = Path(folder_path).name
# Create the header
markdown = f"# Atom Analysis for {folder_path}\n\n"
# Add charges and spins section
markdown += "## Hirshfeld Charges and Spin Moments\n\n"
markdown += "| Atom Index | Element | Charge | Spin Moment |\n"
markdown += "|------------|---------|--------|-------------|\n"
for item in results["cobalt_data"]:
markdown += f"| {item['atom_index']} | {item['element']} | {item['charge']:.6f} | {item['spin']:.6f} |\n"
# Add charge statistics with extra line break for better rendering
markdown += f"\n**Charge Statistics:**\n\n"
markdown += f"- Average charge: {results['charge_statistics']['average']:.6f}\n"
markdown += f"- Min charge: {results['charge_statistics']['min']:.6f}\n"
markdown += f"- Max charge: {results['charge_statistics']['max']:.6f}\n"
# Add spin statistics with extra line break for better rendering
markdown += f"\n**Spin Moment Statistics:**\n\n"
markdown += f"- Average spin moment: {results['spin_statistics']['average']:.6f}\n"
markdown += f"- Min spin moment: {results['spin_statistics']['min']:.6f}\n"
markdown += f"- Max spin moment: {results['spin_statistics']['max']:.6f}\n"
# Save the markdown file with folder name included
output_file = f"{folder_name}_hirshfeld_analysis.md"
with open(output_file, "w") as file:
file.write(markdown)
print(f"Markdown report has been saved to '{output_file}'")
def main():
# Check if a command line argument is provided
if len(sys.argv) != 2:
print("Usage: python analyze_charges.py <folder_path>")
print("Example: python analyze_charges.py Co20-silica")
sys.exit(1)
folder_path = sys.argv[1]
results = analyze_cobalt_data(folder_path)
save_results_json(results)
create_markdown_report(results)
if __name__ == "__main__":
main()
First go back a folder level with:
Copy in the script above and run the script with
You should also see two new files in your working directory after the script is finished, namely Co20_cluster_hirshfeld_analysis.json
and Co20_cluster_hirshfeld_analysis.md
:
Reference files after running analyze_charges.py
# Atom Analysis for Co20_cluster
## Hirshfeld Charges and Spin Moments
| Atom Index | Element | Charge | Spin Moment |
|------------|---------|--------|-------------|
| 1 | Co | 0.019809 | 2.160955 |
| 2 | Co | -0.025578 | 1.922202 |
| 3 | Co | -0.025416 | 1.922412 |
| 4 | Co | 0.044926 | 2.171776 |
| 5 | Co | -0.034440 | 1.839762 |
| 6 | Co | 0.044876 | 2.171896 |
| 7 | Co | -0.060213 | 1.836097 |
| 8 | Co | -0.038640 | 1.820869 |
| 9 | Co | -0.038584 | 1.820900 |
| 10 | Co | 0.039639 | 2.166580 |
| 11 | Co | -0.018020 | 1.929086 |
| 12 | Co | 0.039631 | 2.166352 |
| 13 | Co | 0.026927 | 2.093399 |
| 14 | Co | 0.026809 | 2.093116 |
| 15 | Co | -0.037215 | 1.918621 |
| 16 | Co | 0.041595 | 1.981964 |
| 17 | Co | -0.037070 | 1.919301 |
| 18 | Co | -0.014239 | 1.967989 |
| 19 | Co | -0.014309 | 1.967741 |
| 20 | Co | 0.057167 | 2.128045 |
**Charge Statistics:**
- Average charge: -0.000117
- Min charge: -0.060213
- Max charge: 0.057167
**Spin Moment Statistics:**
- Average spin moment: 1.999953
- Min spin moment: 1.820869
- Max spin moment: 2.171896
{
"folder": "Co20_cluster",
"cobalt_data": [
{
"atom_index": 1,
"element": "Co",
"charge": 0.019809,
"spin": 2.16095524
},
{
"atom_index": 2,
"element": "Co",
"charge": -0.02557834,
"spin": 1.92220219
},
{
"atom_index": 3,
"element": "Co",
"charge": -0.02541574,
"spin": 1.9224122
},
{
"atom_index": 4,
"element": "Co",
"charge": 0.04492621,
"spin": 2.17177627
},
{
"atom_index": 5,
"element": "Co",
"charge": -0.03443963,
"spin": 1.83976219
},
{
"atom_index": 6,
"element": "Co",
"charge": 0.04487592,
"spin": 2.17189602
},
{
"atom_index": 7,
"element": "Co",
"charge": -0.06021344,
"spin": 1.83609721
},
{
"atom_index": 8,
"element": "Co",
"charge": -0.0386399,
"spin": 1.82086927
},
{
"atom_index": 9,
"element": "Co",
"charge": -0.03858364,
"spin": 1.82090042
},
{
"atom_index": 10,
"element": "Co",
"charge": 0.03963923,
"spin": 2.16658015
},
{
"atom_index": 11,
"element": "Co",
"charge": -0.01801952,
"spin": 1.92908557
},
{
"atom_index": 12,
"element": "Co",
"charge": 0.03963108,
"spin": 2.16635215
},
{
"atom_index": 13,
"element": "Co",
"charge": 0.02692718,
"spin": 2.0933989
},
{
"atom_index": 14,
"element": "Co",
"charge": 0.0268086,
"spin": 2.09311638
},
{
"atom_index": 15,
"element": "Co",
"charge": -0.03721539,
"spin": 1.91862117
},
{
"atom_index": 16,
"element": "Co",
"charge": 0.04159488,
"spin": 1.98196429
},
{
"atom_index": 17,
"element": "Co",
"charge": -0.03707007,
"spin": 1.91930076
},
{
"atom_index": 18,
"element": "Co",
"charge": -0.0142392,
"spin": 1.96798933
},
{
"atom_index": 19,
"element": "Co",
"charge": -0.01430855,
"spin": 1.96774124
},
{
"atom_index": 20,
"element": "Co",
"charge": 0.05716719,
"spin": 2.12804523
}
],
"charge_statistics": {
"average": -0.00011720650000000034,
"min": -0.06021344,
"max": 0.05716719
},
"spin_statistics": {
"average": 1.9999533090000003,
"min": 1.82086927,
"max": 2.17189602
}
}
Hirshfeld analysis for the Co20 cluster
Atom Index | Element | Charge | Spin Moment |
---|---|---|---|
1 | Co | 0.019809 | 2.160955 |
2 | Co | -0.025578 | 1.922202 |
3 | Co | -0.025416 | 1.922412 |
4 | Co | 0.044926 | 2.171776 |
5 | Co | -0.034440 | 1.839762 |
6 | Co | 0.044876 | 2.171896 |
7 | Co | -0.060213 | 1.836097 |
8 | Co | -0.038640 | 1.820869 |
9 | Co | -0.038584 | 1.820900 |
10 | Co | 0.039639 | 2.166580 |
11 | Co | -0.018020 | 1.929086 |
12 | Co | 0.039631 | 2.166352 |
13 | Co | 0.026927 | 2.093399 |
14 | Co | 0.026809 | 2.093116 |
15 | Co | -0.037215 | 1.918621 |
16 | Co | 0.041595 | 1.981964 |
17 | Co | -0.037070 | 1.919301 |
18 | Co | -0.014239 | 1.967989 |
19 | Co | -0.014309 | 1.967741 |
20 | Co | 0.057167 | 2.128045 |
Charge Statistics:
- Average charge: -0.000117
- Min charge: -0.060213
- Max charge: 0.057167
Spin Moment Statistics:
- Average spin moment: 1.999953
- Min spin moment: 1.820869
- Max spin moment: 2.171896
Here, we can see that the Hirshfeld analysis results in an average spin moment of 2.0 as expected.
Simulating the Cobalt Nanoparticle on Silica Support
We now simulate the Co\(_{20}\) cluster on an amorphous silica support just as done in 1 and 2. If you are interested in how the structure of the amorphous silica support has been constructed and found, we refer to the explanations in 6. The structure that we will look at is the most stable position for the cobalt nanoparticle that was found, where 32 configurations of the cluster on different surface CO groups were sampled. For more details on the different configurations and their relative formation energies, we refer to the supporting information of 1.
The relaxed structure (again with the "light" basis settings and the RPBE functional) looks like this
and contains 417 atoms.
Geometry file for Co\(_{20}\)/SiO\(_2\) slab
lattice_vector 21.39490000 0.00000000 0.00000000
lattice_vector 0.00000000 21.39490000 0.00000000
lattice_vector 0.00000000 0.00000000 50.17000000
atom 5.95160724 15.04632614 2.68503702 O
atom 13.24189241 13.34067450 7.14992808 O
atom 3.34380247 8.40137257 3.20495870 O
atom 8.25737636 9.35687383 5.16799843 O
atom 14.42283393 17.95516393 4.46285795 O
atom 2.13786877 9.70170416 12.50163445 O
atom -0.13803135 16.50974549 10.35146696 O
atom 14.23684936 2.96602471 6.76312121 O
atom 7.62393607 8.36899618 3.99115112 Si
atom 4.56654914 14.15601342 2.93216469 Si
atom 6.71070697 15.27055715 10.89315001 Si
atom 7.50877247 15.43037037 3.07261643 Si
atom 6.23233585 18.11447197 9.97183343 Si
atom 9.59631689 12.27083187 7.95361090 Si
atom 4.35778769 19.59252970 6.89326677 O
atom 18.04955005 11.47007579 3.24802224 O
atom 8.26169244 16.10003944 6.73727288 O
atom 11.18975078 11.78824585 7.98366265 O
atom 2.53874200 10.90849402 7.50587170 O
atom 13.02395742 11.32344645 12.29771704 O
atom 9.42353401 13.91246782 7.87689017 O
atom 2.60632117 8.76747318 9.88171500 O
atom 8.53467900 2.07027686 9.90880988 Si
atom 13.56538415 3.90286996 7.95720895 Si
atom 10.70918832 16.25844561 7.66002156 O
atom 6.67546214 20.87179567 6.56442465 O
atom 6.54181191 18.18103416 6.07049386 O
atom 17.31209268 18.91114330 9.44709265 O
atom 21.18150851 5.35238280 11.24625811 O
atom 21.06756283 1.18458886 10.17376942 O
atom -0.64227776 0.05917405 6.23849737 O
atom 2.16550590 6.38206955 4.44156599 O
atom 19.54006188 1.03274918 9.59276455 Si
atom 1.47003828 16.51489229 10.78824213 Si
atom 17.32978765 16.02251936 12.28684466 Si
atom 12.52750938 15.41953415 9.41717322 O
atom 8.92825384 12.23184340 11.95837553 O
atom 17.04452698 6.89177206 5.35065873 O
atom 0.61893855 4.23134420 8.90981212 O
atom 11.14960171 14.58256656 2.88993334 O
atom 17.46180056 11.27717357 4.79219717 Si
atom 8.84652232 17.80368846 1.84262140 Si
atom 11.53043478 8.18205443 5.23346754 Si
atom 9.84168938 7.16111084 12.12237322 Si
atom 14.05852542 14.46741195 6.23506315 Si
atom 9.67071797 15.22083767 6.91420629 Si
atom 16.42902046 8.46108773 5.28450155 Si
atom 3.28566608 13.10739888 8.85961528 O
atom 11.93366100 3.68001819 8.03192948 O
atom 15.50011227 8.80897603 6.62169666 O
atom 10.82905501 20.17205833 4.07862337 O
atom 5.20229284 18.38163791 2.90538084 O
atom 13.31009157 15.94028857 6.06195552 O
atom 15.93460714 19.12507768 2.53987564 O
atom 14.79931731 17.93684204 9.39410446 O
atom 15.55631836 14.76372071 6.84640604 O
atom 18.28942021 16.42735377 4.49422302 Si
atom 18.39393878 19.74394964 8.52725324 Si
atom 4.80791532 6.10398021 6.17412990 O
atom 2.17293142 1.32267682 3.58311241 O
atom 12.29453407 3.74665424 11.18903332 O
atom 17.28210075 14.40297577 11.74651794 O
atom 4.77620965 6.13317099 8.84261539 O
atom 13.15728181 11.42463242 4.28602407 O
atom 18.61203136 11.44529873 11.10976588 Si
atom 7.12987510 10.14145925 7.52923061 O
atom 6.91762053 7.06228923 4.71280072 O
atom 6.37904490 20.64675240 3.88188723 O
atom 10.50203372 12.29384705 4.06191844 O
atom 18.78813453 9.82131137 10.99611126 O
atom 12.76223010 1.28891655 10.02874649 O
atom 13.44935614 2.68112757 10.61731826 Si
atom 16.62278269 21.15275740 6.14782056 Si
atom 12.82782124 12.00241656 8.05019226 Si
atom 13.34027054 12.55957119 11.23218597 Si
atom 20.36391361 1.61600423 6.66514921 Si
atom 7.03248075 3.10150028 4.12106468 Si
atom 6.00719848 19.42236432 7.05231484 Si
atom 10.01801064 2.78167398 6.30213659 O
atom 10.33811119 16.78553858 10.37562353 O
atom 10.92201733 8.32265811 12.64607916 O
atom 2.06564945 18.05892129 10.73036899 O
atom 6.62448114 8.61734655 9.60938917 O
atom 16.73112562 3.22356689 12.13077149 O
atom 10.24001193 14.70123573 5.43766552 O
atom -0.40992752 18.85545416 5.63636362 O
atom 18.91841377 16.43257361 12.47675008 O
atom 13.26087255 12.15517972 9.64286377 O
atom 15.91768501 18.59664539 4.11981587 Si
atom 16.62079786 14.87903044 8.08741715 Si
atom 20.16297576 17.87075239 6.65688767 Si
atom 16.93172487 17.28819684 4.16000023 O
atom 19.28757092 7.24828469 10.86042127 O
atom 17.60073233 9.67146477 5.25000528 O
atom 13.78157346 5.55148230 7.81057905 O
atom 18.95513550 17.18847976 5.78583014 O
atom 18.45792751 1.87597202 10.52776775 O
atom 15.48689087 2.59661348 13.01785200 Si
atom 3.52155680 18.70868042 11.25138850 Si
atom 1.37170270 0.10638891 2.80481620 Si
atom 9.61759990 19.37542231 10.86015471 O
atom 2.29113651 1.22639230 10.73474761 O
atom 0.74907524 9.00589709 7.79225862 O
atom 12.12304392 18.08321880 8.94510725 O
atom 0.39476482 2.38639730 6.90847905 O
atom 4.71050879 6.09510124 3.48983286 O
atom 10.08725944 6.78747421 7.63158393 Si
atom 0.89092985 5.42416168 10.02745134 Si
atom 10.32268836 3.63780178 7.68005328 Si
atom 4.37626613 6.97794737 7.49758970 Si
atom 1.93482855 14.09072114 9.01037320 Si
atom 2.67974679 2.87885450 3.72520491 Si
atom 9.17599099 18.33772028 5.40922955 O
atom 8.73118700 0.06183187 4.99513740 O
atom 2.73325830 3.27562075 7.53164797 O
atom 1.79409736 20.08679827 6.33531373 O
atom 6.47027783 19.01559132 8.57997992 O
atom 7.41491021 16.55955892 4.27584949 O
atom 12.67876449 0.81389652 7.32164247 O
atom 6.63990415 1.72049276 4.96269160 O
atom 0.94192569 10.58269769 7.31825230 Si
atom 8.77431819 7.47301003 8.37307510 O
atom 11.16927569 4.28895827 4.39141997 O
atom 14.52777993 7.11489813 1.90593745 O
atom 17.97410811 14.84091721 4.92547291 O
atom 18.07823460 14.26209648 7.60330178 O
atom 13.15708256 5.01617238 2.83164316 O
atom 8.17160410 16.28318513 1.79146092 O
atom 7.88674417 17.30011539 5.66662636 Si
atom 9.00992731 0.58317701 10.46913842 O
atom 6.63108140 11.41017815 10.88247868 O
atom 5.21466781 2.52847620 7.36535028 O
atom 10.23586386 20.89255203 10.55742064 Si
atom 13.59705649 18.69034274 8.56613558 Si
atom 5.70806261 5.93572891 4.79734305 Si
atom 14.01186735 0.93121357 3.22382509 Si
atom 12.55158869 21.53730803 8.83336740 Si
atom 3.27235955 10.02905325 3.29896006 Si
atom 11.60506396 11.06271766 3.76461990 Si
atom 9.89070588 0.15542675 3.82924466 Si
atom 15.84242929 11.68214201 4.82413770 O
atom 13.65314048 1.26506235 4.81074703 O
atom 17.63967169 20.54112122 7.29051221 O
atom 3.19267583 7.39234085 12.17139769 O
atom 5.11297268 14.77903076 11.09775084 O
atom 1.07253695 15.53549931 5.14076650 O
atom 14.24994590 13.86424404 4.70023679 O
atom 15.21653422 0.31540800 6.83279080 O
atom 13.77857621 18.51355522 6.92208648 O
atom 17.11512072 5.46017113 4.43664611 Si
atom 14.66068849 5.51255874 2.34070252 Si
atom 8.84038876 7.74297240 3.02767629 O
atom 10.65512594 5.64180707 2.06622808 O
atom 19.55923272 18.68468701 7.96199167 O
atom 11.82451620 6.99248582 4.12475557 O
atom 8.67162467 3.28969146 3.98227111 O
atom 16.88517397 16.45811898 8.48718231 O
atom 13.62399524 20.73107280 2.89235331 O
atom 4.60242623 9.63838314 11.47914826 O
atom 1.28388765 14.39948791 7.52152511 O
atom 12.25709400 5.38121218 11.48568837 Si
atom 10.32535035 17.98843354 11.54373119 Si
atom 1.15055000 3.75233100 7.42257515 Si
atom 3.38039640 0.20157353 10.04712597 Si
atom 19.10813373 20.82912319 9.54369978 O
atom 3.46043652 0.76773898 6.40457291 O
atom 7.21135318 1.76158476 8.96004363 O
atom 0.77563746 13.40100788 9.97366798 O
atom 19.55864928 2.43174608 5.46531281 O
atom 17.99781943 2.51382620 4.90298948 Si
atom 21.26800108 12.01497217 9.84621079 Si
atom 6.26958731 19.60189647 2.59099204 Si
atom 18.28607685 3.10260030 11.62179735 Si
atom 5.42978835 11.01521041 11.95268945 Si
atom 0.35853000 20.31690426 5.55721257 Si
atom 9.63936073 2.86839965 8.95760471 O
atom 3.70731181 2.99647319 5.03854447 O
atom 2.75245658 20.90075431 8.67784209 O
atom 6.85885961 18.93317613 11.24942546 O
atom 3.12488636 20.69925108 7.08634024 Si
atom 5.64746557 2.27382079 8.94858403 Si
atom 0.79894546 11.56997226 4.28407159 Si
atom 17.06886009 1.40109745 2.23276942 Si
atom 6.36899135 3.03847502 2.57975271 O
atom 18.35854889 5.57221368 3.35429949 O
atom 19.30884402 16.36105755 3.17065204 O
atom 2.38344269 15.50044385 9.77016055 O
atom 10.12083166 17.78602217 2.94967621 O
atom 9.34725146 0.25325153 2.26705606 O
atom 4.61058554 17.94085825 10.25993839 O
atom 17.25818418 1.14129751 5.49010979 O
atom 7.82908653 7.47039389 9.73661901 Si
atom 1.71248735 14.60286096 3.90877929 Si
atom 20.32803594 14.17366208 6.16696813 O
atom 7.18285667 5.94536406 9.99093999 O
atom 19.45540111 1.64450969 8.04643070 O
atom 17.10243262 11.93373130 10.64245832 O
atom 7.51431037 13.94213379 10.28507455 O
atom 10.67014525 5.87048095 11.44668856 O
atom 3.76451357 2.38240728 6.58426826 Si
atom 5.90375436 9.50526104 8.39256217 Si
atom 3.21002104 6.76412525 3.21346910 Si
atom 11.41885558 16.59161425 9.12307485 Si
atom 5.62764549 5.32934014 9.99532973 Si
atom 14.34732996 2.15421895 11.87981601 O
atom 19.67796733 12.32510869 10.17825735 O
atom 20.71452738 11.82027976 3.62318126 O
atom 11.02180863 20.96307359 9.08459855 O
atom 8.47911366 14.12741608 3.46798480 O
atom 8.26543636 2.94835909 11.28323908 O
atom 10.30881824 7.61021496 6.21411063 O
atom 0.52272446 10.85114552 5.75185004 O
atom 1.70095309 10.54452868 3.33767253 O
atom 4.59037705 12.39299597 6.62596170 O
atom 15.36286660 8.47905904 2.28186566 Si
atom 18.68277329 13.88586048 6.10575577 Si
atom 10.47528084 18.55526502 4.39237892 Si
atom 7.97540307 12.38367397 10.65073313 Si
atom 20.92120580 5.87247522 4.24941460 O
atom 4.08854705 10.54366652 4.66307379 O
atom 7.83477380 19.06509860 2.25526500 O
atom 6.63110277 11.39245610 5.15722480 O
atom 15.49434701 8.63622846 3.92500124 O
atom 3.30381901 15.02545207 3.61605780 O
atom 13.96164883 9.04649338 7.18575211 Si
atom 18.34662796 8.43253987 10.17385021 Si
atom 16.38652167 17.55838193 9.62917456 Si
atom 13.34168584 17.55051005 5.64570836 Si
atom 12.47369638 13.92522067 11.65811816 O
atom 13.18996560 6.23586577 10.39700861 O
atom 9.74448263 5.17633413 7.43337360 O
atom 5.59483571 3.71063441 9.75509225 O
atom 14.92119073 13.07150804 11.60127268 O
atom 11.45430918 6.94542856 8.54737207 O
atom 8.78904342 7.84739425 11.03359453 O
atom 6.38917548 4.42998385 4.85215340 O
atom 13.06945032 6.70422847 8.80783475 Si
atom 10.15460898 3.01764301 4.67098140 Si
atom 11.68068315 5.51984426 3.35669647 Si
atom 12.91100625 8.37206677 6.11737767 O
atom 11.55476934 10.77643787 2.13233394 O
atom 5.10549046 8.45353160 7.40220154 O
atom 13.87288606 8.14579744 8.60502694 O
atom 0.55710826 20.60794322 3.94740447 O
atom 18.33270330 12.28955900 5.79573223 O
atom 10.08483072 13.91230351 3.97079923 Si
atom 0.99012519 10.89106500 12.50493647 Si
atom 14.78513897 12.44176377 2.42640293 O
atom 13.62687577 10.64546680 7.48737518 O
atom 1.33637417 3.84236271 3.91110846 O
atom 19.37678995 5.82088897 13.19513653 O
atom 17.96813910 2.36175477 3.24837033 O
atom 10.74768919 1.57798950 4.02739317 O
atom 13.63637217 20.29603772 8.99745574 O
atom 4.98722100 13.00454981 4.02680352 O
atom 0.90750482 4.98742921 6.34979232 O
atom 16.34981700 19.88763775 5.09626832 O
atom 17.36140897 4.02341436 5.30453693 O
atom 19.60405624 5.78888920 11.53780526 Si
atom 0.77961681 1.06289615 11.41038491 Si
atom 7.08460790 0.12400387 5.09156841 Si
atom 7.75641307 10.61881886 6.10406618 Si
atom 4.96007314 5.56665620 11.48377359 O
atom 0.71122549 2.32969854 12.48108990 O
atom 15.63382681 1.00465478 2.95418539 O
atom 6.62033536 9.27743554 3.00898500 O
atom 16.52767992 16.94687162 11.14380630 O
atom 1.64371607 12.99961019 4.39410433 O
atom 18.63092634 4.58419477 10.94340622 O
atom 2.75182036 7.25390015 7.58037464 O
atom 0.70575456 6.90400358 9.30935034 O
atom 14.27916273 3.41479282 9.38724438 O
atom 3.36303389 5.77284562 11.90500273 Si
atom 3.12713708 8.88472118 11.47342503 Si
atom 14.51341431 12.35455214 4.07915833 Si
atom 5.03204581 11.82854465 5.13895196 Si
atom 3.83139362 11.79776992 7.97507770 Si
atom 0.22270919 15.17391889 6.51966967 Si
atom 16.35805941 13.39882713 10.82519847 Si
atom 4.86571613 10.76751022 8.78250691 O
atom 15.99433314 14.02772478 9.35018975 O
atom 15.67433627 5.29093328 3.64778223 O
atom 0.42936426 10.90274071 10.91794003 O
atom 4.32027894 12.26282022 12.05776620 O
atom 6.81878914 16.54938047 9.80688867 O
atom 2.41061910 5.23534895 10.64508919 O
atom 8.80504842 11.78247864 9.31574429 O
atom 16.02510327 1.25915469 13.84040938 O
atom 19.86457867 6.16894052 3.00068205 Si
atom 13.97966485 1.34092175 6.41766143 Si
atom 1.75023674 8.00404986 8.66952873 Si
atom 19.51735386 11.68498309 2.48207262 Si
atom 0.98243486 5.25669759 4.71663901 Si
atom 8.99445807 11.61208855 6.54387512 O
atom 0.79642312 14.89379678 2.55109008 O
atom 21.35158019 11.49516775 8.27694076 O
atom 11.14935855 9.66032666 4.57199360 O
atom 21.12317601 16.61480679 7.22994339 O
atom 3.68707889 20.35427363 11.09478722 O
atom 11.83456673 17.89072728 5.03208024 O
atom 4.72375212 1.10455735 9.68153572 O
atom 15.57050390 12.95981431 2.17866027 H
atom 12.33445028 10.28619861 1.80240913 H
atom 6.57210667 10.18223661 3.37073098 H
atom 9.26636703 8.43743324 2.49312762 H
atom 4.45625796 15.21601182 10.52738714 H
atom 7.25144937 15.65424214 12.40537172 O
atom 7.92294270 16.37289959 12.46645630 H
atom 4.63113228 13.13684933 11.71059377 H
atom 6.15930132 10.70453360 13.42676294 O
atom 5.52315657 10.45817575 14.11848725 H
atom 11.09749501 9.05355209 12.02826213 H
atom 9.04649654 6.51023189 13.42417135 O
atom 8.32902300 7.06287053 13.77609664 H
atom 2.99066180 4.97206254 13.29997989 O
atom 2.48759820 4.14983733 13.15234118 H
atom 12.50173132 15.00639610 10.31374059 H
atom 12.95093123 5.59268052 12.99620494 O
atom 12.99806733 6.52579364 13.26991740 H
atom 8.36090735 3.90993485 11.18847494 H
atom 14.87175353 3.66336214 14.12189766 O
atom 14.24564680 4.33509560 13.78028432 H
atom 19.31606644 2.78159022 12.91471067 O
atom 19.23754525 3.47045391 13.60166332 H
atom 19.51034015 16.44731179 11.70174721 H
atom 16.59276764 16.15875589 13.73664135 O
atom 18.85994105 11.78721182 12.74055950 O
atom 18.78054559 12.74053842 12.92907299 H
atom 16.73147638 8.18679275 10.43738338 O
atom 18.63717374 8.53647507 8.54515873 O
atom 19.56136360 8.40446427 8.27232346 H
atom 16.18726542 8.01417886 9.65138037 H
atom 1.64739738 12.35137172 12.94697912 O
atom 2.59580069 12.40333636 12.67552011 H
atom -0.17806750 10.42532004 13.57171706 O
atom -1.03804802 10.88156190 13.45366891 H
atom 11.89260087 18.31274665 12.04177111 O
atom -0.30538552 16.78019062 9.42964572 H
atom 1.61734676 15.99222834 12.36079641 O
atom 1.43117037 15.04922198 12.51996660 H
atom 3.71379518 18.43771192 12.87554628 O
atom 3.33326431 17.59107465 13.16970768 H
atom -0.21427180 2.52529291 12.74889899 H
atom 0.50485780 -0.42558806 12.09828137 O
atom 0.99951874 -0.59596830 12.91676074 H
atom 12.02691286 19.26940565 12.20202811 H
atom 9.41280545 17.44722160 12.80166497 O
atom 7.77495333 19.25900851 11.14807780 H
atom 15.56048057 1.10650081 14.67872946 H
atom 11.25176744 21.12684088 11.87119529 O
atom 11.87647783 21.86321263 11.75064920 H
atom 19.82426149 6.55642820 13.64657443 H
atom 14.45400500 9.69366883 1.60256325 O
atom 16.94831110 8.45137872 1.71815400 O
atom 17.02099600 8.39522267 0.75000166 H
atom 14.77021210 10.61131867 1.74860278 H
atom 15.17677665 4.75331413 0.98104615 O
atom 15.65702706 3.90370765 1.04752161 H
atom 6.81857735 2.42103489 1.97648674 H
atom 2.67558654 6.25002490 1.72837071 O
atom 2.91624416 5.30847733 1.59601508 H
atom 3.94923878 10.66140717 1.89943847 O
atom 4.68251288 10.10777894 1.57475194 H
atom 5.29310405 17.94678478 3.77013959 H
atom 9.85866745 6.16827936 2.27956663 H
atom 9.42351866 18.18954943 0.33910127 O
atom 9.82008547 17.45157670 -0.15181419 H
atom 4.09163926 13.51754956 1.48864361 O
atom 4.03522568 12.53800968 1.48793475 H
atom 8.93762076 -0.56076468 1.91895784 H
atom 0.07352086 15.51863226 2.74599439 H
atom 19.09445912 15.58924581 2.61290783 H
atom 15.11230861 19.64209058 2.38172851 H
atom 11.16874243 15.55494598 2.89733221 H
atom 5.75720814 20.41621351 1.24288759 O
atom 4.81445273 20.66444690 1.31088146 H
atom 19.33044219 13.12658796 1.65237107 O
atom 19.85872663 10.49112113 1.38951226 O
atom 20.10474280 13.32974943 1.09828289 H
atom 20.14665942 9.64500003 1.78762953 H
atom 12.75507905 20.43339734 3.22131073 H
atom 17.88185581 0.01503162 1.82035674 O
atom 17.38983237 20.58683941 2.02551477 H
atom 16.83455711 2.36565822 0.88498527 O
atom 16.74964912 1.87014951 0.05405284 H
atom 3.46913599 3.41806889 2.36565713 O
atom 4.44001649 3.26341793 2.36259591 H
atom 0.28942339 0.59992311 1.65103558 O
atom 2.58320010 20.62384468 2.05812954 O
atom 20.75929892 0.67531334 1.94214459 H
atom 20.32578945 5.39500205 1.60543446 O
atom 19.72859602 7.82891363 2.80795065 O
atom 21.20738370 5.64304727 1.27878196 H
atom 18.81657980 8.04972678 2.52222908 H
atom 2.27771352 19.78193272 1.67952937 H
atom 13.29544382 1.98648607 2.18269487 O
atom 12.39259193 2.25271972 2.42015022 H
atom 11.65096252 12.26696400 17.85418912 Co
initial_moment 2.00
atom 13.00081500 11.77854685 16.00590775 Co
initial_moment 2.00
atom 10.52463431 12.22246044 15.74761825 Co
initial_moment 2.00
atom 14.19460488 11.64899061 13.95153610 Co
initial_moment 2.00
atom 11.94618834 12.08502965 13.90812709 Co
initial_moment 2.00
atom 9.70434634 12.64387660 13.51347215 Co
initial_moment 2.00
atom 12.08299973 14.63989830 17.88830657 Co
initial_moment 2.00
atom 13.80957276 15.43638880 16.44751013 Co
initial_moment 2.00
atom 11.06299284 16.00850729 16.23511395 Co
initial_moment 2.00
atom 15.06444744 15.54766598 14.49146095 Co
initial_moment 2.00
atom 12.65365638 16.04441252 14.50425348 Co
initial_moment 2.00
atom 10.34013236 16.38874998 14.01788831 Co
initial_moment 2.00
atom 13.88094669 13.25466954 17.64648783 Co
initial_moment 2.00
atom 9.99152461 13.97962904 17.27842965 Co
initial_moment 2.00
atom 14.65391591 13.41388452 15.45619618 Co
initial_moment 2.00
atom 12.15088666 13.93810230 15.47430512 Co
initial_moment 2.00
atom 9.76567211 14.38500794 15.01652756 Co
initial_moment 2.00
atom 13.62498056 14.09395192 13.47911415 Co
initial_moment 2.00
atom 11.30499788 14.40474914 13.19734785 Co
initial_moment 2.00
atom 12.55240193 16.87046892 17.71131528 Co
initial_moment 2.00
As a total energy calculation for this structure would take ~60 min on the provided resources, we instead provide the output files for your convenience. On the provided resources (you can also find the reference files in the solutions
folder here), you may copy the reference results to your folder with
You can look at the control.in
file to see the used computational settings:
xc rpbe
charge 0.0
spin collinear
relativistic atomic_zora scalar
k_grid 3 3 1
output hirshfeld
[light species defaults for Si, O, H, Co]
Dipole correction
In typical slab calculations for crystalline surfaces with inequivalent top and bottom surfaces, we recommend to use a dipole correction to correct the dipole moment across the slab. The correction can be turned on with the keyword use_dipole_correction
in the control.in
file (note that the slab has to be oriented in the z-direction). In this tutorial, we are simulating a neutral amorphous SiO\(_2\) slab that induces less of a dipole moment compared to crystalline surfaces. The effects on the adsorption energies in this case are negligible. If you are interested in an accurate work function or electrostatic potential, you would need the dipole correction. More details on how to do these kinds of calculations can be found here.
Feel free to visualize the structure in geometry.in
before continuing. Just as before, all Co atoms have been initialized with a spin moment of +2.
Then analyze the Hirshfeld charges and spins with the same script as before:
You should also see two new files in your working directory after the script is finished, namely Co20-silica_hirshfeld_analysis.json
and Co20-silica_hirshfeld_analysis.md
:
Reference files after running analyze_charges.py
# Atom Analysis for Co20-silica
## Hirshfeld Charges and Spin Moments
| Atom Index | Element | Charge | Spin Moment |
|------------|---------|--------|-------------|
| 398 | Co | 0.060099 | 2.109546 |
| 399 | Co | 0.000153 | 1.994593 |
| 400 | Co | 0.022489 | 1.943407 |
| 401 | Co | 0.166800 | 2.148351 |
| 402 | Co | 0.063943 | 1.983126 |
| 403 | Co | 0.132463 | 2.068829 |
| 404 | Co | -0.026449 | 1.830233 |
| 405 | Co | -0.010586 | 1.886110 |
| 406 | Co | -0.003320 | 1.918911 |
| 407 | Co | 0.109604 | 1.995079 |
| 408 | Co | 0.069515 | 2.001433 |
| 409 | Co | 0.114792 | 2.007837 |
| 410 | Co | 0.066332 | 2.214371 |
| 411 | Co | 0.069908 | 2.223082 |
| 412 | Co | 0.011244 | 1.983635 |
| 413 | Co | 0.039756 | 1.922348 |
| 414 | Co | 0.024104 | 1.922808 |
| 415 | Co | 0.080209 | 1.982236 |
| 416 | Co | 0.109156 | 2.018528 |
| 417 | Co | 0.112373 | 2.196122 |
**Charge Statistics:**
- Average charge: 0.060629
- Min charge: -0.026449
- Max charge: 0.166800
**Spin Moment Statistics:**
- Average spin moment: 2.017529
- Min spin moment: 1.830233
- Max spin moment: 2.223082
{
"folder": "Co20-silica",
"cobalt_data": [
{
"atom_index": 398,
"element": "Co",
"charge": 0.0600989,
"spin": 2.10954626
},
{
"atom_index": 399,
"element": "Co",
"charge": 0.00015314,
"spin": 1.99459292
},
{
"atom_index": 400,
"element": "Co",
"charge": 0.02248891,
"spin": 1.94340665
},
{
"atom_index": 401,
"element": "Co",
"charge": 0.16680031,
"spin": 2.14835064
},
{
"atom_index": 402,
"element": "Co",
"charge": 0.06394348,
"spin": 1.98312585
},
{
"atom_index": 403,
"element": "Co",
"charge": 0.13246316,
"spin": 2.06882912
},
{
"atom_index": 404,
"element": "Co",
"charge": -0.02644909,
"spin": 1.83023261
},
{
"atom_index": 405,
"element": "Co",
"charge": -0.01058594,
"spin": 1.88610977
},
{
"atom_index": 406,
"element": "Co",
"charge": -0.00332023,
"spin": 1.91891087
},
{
"atom_index": 407,
"element": "Co",
"charge": 0.10960427,
"spin": 1.99507873
},
{
"atom_index": 408,
"element": "Co",
"charge": 0.06951514,
"spin": 2.00143263
},
{
"atom_index": 409,
"element": "Co",
"charge": 0.11479204,
"spin": 2.00783699
},
{
"atom_index": 410,
"element": "Co",
"charge": 0.06633245,
"spin": 2.2143708
},
{
"atom_index": 411,
"element": "Co",
"charge": 0.06990796,
"spin": 2.22308192
},
{
"atom_index": 412,
"element": "Co",
"charge": 0.01124408,
"spin": 1.98363543
},
{
"atom_index": 413,
"element": "Co",
"charge": 0.03975608,
"spin": 1.9223483
},
{
"atom_index": 414,
"element": "Co",
"charge": 0.02410396,
"spin": 1.92280799
},
{
"atom_index": 415,
"element": "Co",
"charge": 0.08020891,
"spin": 1.98223571
},
{
"atom_index": 416,
"element": "Co",
"charge": 0.10915595,
"spin": 2.01852848
},
{
"atom_index": 417,
"element": "Co",
"charge": 0.11237316,
"spin": 2.19612177
}
],
"charge_statistics": {
"average": 0.060629331999999994,
"min": -0.02644909,
"max": 0.16680031
},
"spin_statistics": {
"average": 2.017529172,
"min": 1.83023261,
"max": 2.22308192
}
}
Hirshfeld analysis for the Co\(_{20}\) nanoparticle on silica support
Atom Index | Element | Charge | Spin Moment |
---|---|---|---|
398 | Co | 0.060099 | 2.109546 |
399 | Co | 0.000153 | 1.994593 |
400 | Co | 0.022489 | 1.943407 |
401 | Co | 0.166800 | 2.148351 |
402 | Co | 0.063943 | 1.983126 |
403 | Co | 0.132463 | 2.068829 |
404 | Co | -0.026449 | 1.830233 |
405 | Co | -0.010586 | 1.886110 |
406 | Co | -0.003320 | 1.918911 |
407 | Co | 0.109604 | 1.995079 |
408 | Co | 0.069515 | 2.001433 |
409 | Co | 0.114792 | 2.007837 |
410 | Co | 0.066332 | 2.214371 |
411 | Co | 0.069908 | 2.223082 |
412 | Co | 0.011244 | 1.983635 |
413 | Co | 0.039756 | 1.922348 |
414 | Co | 0.024104 | 1.922808 |
415 | Co | 0.080209 | 1.982236 |
416 | Co | 0.109156 | 2.018528 |
417 | Co | 0.112373 | 2.196122 |
Charge Statistics:
- Average charge: 0.060629
- Min charge: -0.026449
- Max charge: 0.166800
Spin Moment Statistics:
- Average spin moment: 2.017529
- Min spin moment: 1.830233
- Max spin moment: 2.223082
Note that the script only outputs the Hirshfeld analysis for the last 20 atoms of the geometry.in
, which is the full Co cluster.
We can observe two things:
-
The average spin moment for the Co atoms is increased slightly to +2.02.
-
We can see that there is significant charge transfer from the silica support to the cobalt nanoparticle, with the average Hirshfeld charge being +0.06e. This transfer is most significant for the atoms in direct contact with the silica as also reported in 1:
The Hirshfeld charge analysis we've performed reveals important insights into the electronic structure of cobalt clusters and their interaction with the silica support. When comparing the isolated Co\(_{20}\) cluster with the supported Co\(_{20}\)/SiO\(_2\) system, we observe a clear pattern of electron transfer from the silica support to the cobalt nanoparticle, with the average charge per cobalt atom changing from approximately -0.0001e in the isolated neutral cluster to +0.061e in the supported system.
This charge transfer is not uniform across all cobalt atoms. As evident from both our calculations and the reference study 1, atoms at the cobalt-silica interface show significantly larger positive charges (up to +0.17e), indicating stronger electronic interaction with the support. These interface atoms, labeled as E, F, G, H, I, and J in the visualization above, act as primary anchoring points for the nanoparticle.
In the following, we will calculate the adsorption energy of a CO\(_2\) molecule when adsorbed on the most oxidized Co site (label J in the above visualization) and compare the result to the reported one in 1.
Simulating the CO₂ Molecule
Before calculating the adsorption energy, we still need to calculate a reference energy for the CO\(_2\) molecule. To start, create a new folder with
and create the geometry.in
file with the experimentally observed bond lengths:
Then create the control.in
file with the following to relax the molecule with the RPBE functional:
Append the "light" species defaults with:
Submit the calculation again to your compute system. During the webinar hands-on session, you may use the provided fhiaims_job.sh
script:
After the calculation is finished, you can inspect the relaxed geometry in geometry.in.next_step
:
atom -0.00000000 0.00000000 0.00000000 C
atom 1.17859817 -0.00000000 -0.00000000 O
atom -1.17859817 -0.00000000 -0.00000000 O
With this we now have the reference energy for the CO\(_2\) molecule that we need for the adsorption energy.
Adsorption Energy of CO₂ on Co₂₀/SiO₂
Similar to the pure Co\(_{20}\)/SiO\(_2\) slab, it is not feasible within the time constraints of this tutorial to do a full relaxation and energy calculation for the CO\(_2\) adsorbed structure. When using the webinar resources, you may copy the reference results to your folder with
The relaxed structure looks like this:
Your folder structure should now look similar to this:
Co_silica_work
├── CO2-Co20-silica
│ ├── aims.out
│ ├── control.in
│ └── geometry.in
├── CO2_molecule
│ ├── aims.out
│ ├── control.in
│ ├── geometry.in
│ └── geometry.in.next_step
├── Co20-silica
│ ├── aims.out
│ ├── control.in
│ └── geometry.in
├── Co20-silica_hirshfeld_analysis.json
├── Co20-silica_hirshfeld_analysis.md
├── Co20_cluster
│ ├── aims.out
│ ├── control.in
│ └── geometry.in
├── Co20_cluster_hirshfeld_analysis.json
├── Co20_cluster_hirshfeld_analysis.md
├── Co_atom
│ ├── aims.out
│ ├── control.in
│ └── geometry.in
└── analyze_hirshfeld.py
We have all the ingredients to finally calculate the adsorption energy for CO\(_2\) on Co\(_{20}\)/SiO\(_2\). You can do this by hand (extract the total energies from the individual folders and calculate the adsorption energy) or you use the following script:
Adsorption energy analysis script
This script does the following:
- Read in the FHI-aims output files for a reference catalyst and molecule.
- Read in the FHI-aims output files for the adsorbed system as command line arguments. Calculate their adsorption energies.
- Output the results in a markdown table,
adsorption_energies.md
, and as a json file,adsorption_energies.json
.
import json
from ase.io import read
from pathlib import Path
import sys
import argparse
def calculate_adsorption_energies(adsorbed_systems, ref_catalyst, ref_mol):
"""
Calculate adsorption energies for CO2 on Co20/SiO2 at different sites.
Args:
adsorbed_systems (list): List of folders with CO2-Co20/SiO2 calculations
ref_catalyst (Path): Path to the catalyst reference calculation (Co20/SiO2)
ref_mol (Path): Path to the molecule reference calculation (CO2)
Returns:
dict: A dictionary with adsorption sites as keys and adsorption energies in eV as values
"""
# Read reference energies
try:
co2_gas_file = ref_mol / "aims.out"
catalyst_file = ref_catalyst / "aims.out"
co2_gas = read(co2_gas_file)
catalyst = read(catalyst_file)
e_co2_gas = co2_gas.get_total_energy()
e_catalyst = catalyst.get_total_energy()
print(f"Reference energies:")
print(f"E(CO2_gas) = {e_co2_gas:.6f} eV from {co2_gas_file}")
print(f"E(Co20/SiO2) = {e_catalyst:.6f} eV from {catalyst_file}")
print("-" * 50)
except FileNotFoundError as e:
print(f"Error: Required reference calculation not found - {e}")
sys.exit(1)
except Exception as e:
print(f"Error reading reference energies: {e}")
sys.exit(1)
# Calculate adsorption energies for each system
adsorption_energies = {}
for system in adsorbed_systems:
system_path = Path(system)
if system_path.is_dir():
system_file = system_path / "aims.out"
if system_file.exists():
try:
adsorbed_system = read(system_file)
e_adsorbed = adsorbed_system.get_total_energy()
# Calculate adsorption energy: E_ads = E(CO2+Co20/SiO2) - E(Co20/SiO2) - E(CO2)
e_ads = e_adsorbed - e_catalyst - e_co2_gas
adsorption_energies[system] = e_ads
print(f"System {system}: E_ads = {e_ads:.4f} eV")
except Exception as e:
print(f"Error processing {system}: {e}")
adsorption_energies[system] = None
else:
print(f"Warning: {system_file} does not exist. Skipping.")
adsorption_energies[system] = None
else:
print(f"Warning: System directory {system_path} does not exist. Skipping.")
adsorption_energies[system] = None
return adsorption_energies
def save_energies_json(adsorption_energies, output_prefix="adsorption"):
"""
Save calculated adsorption energies to a JSON file.
Args:
adsorption_energies (dict): Dictionary of adsorption energies
output_prefix (str): Prefix for output files
"""
json_file = f"{output_prefix}_energies.json"
with open(json_file, "w") as file:
json.dump(adsorption_energies, file, indent=2)
print(f"\nAdsorption energy data has been saved to '{json_file}'")
def create_markdown_table(adsorption_energies, output_prefix="adsorption"):
"""
Create and save a markdown table of the adsorption energy data.
Args:
adsorption_energies (dict): Dictionary of adsorption energies
output_prefix (str): Prefix for output files
"""
toplevel_header = (
"# CO2 Adsorption Energies on Co20/SiO2\n\nAdsorption energies are in eV.\n"
)
header = "| Adsorption System | Energy (eV) |"
separator = "|------------------|------------|"
rows = []
for system, energy in adsorption_energies.items():
energy_str = f"{energy:.4f}" if energy is not None else "N/A"
rows.append(f"| {system} | {energy_str} |")
markdown_table = "\n".join([toplevel_header, header, separator] + rows)
# Save the markdown table to a file
md_file = f"{output_prefix}_energies.md"
with open(md_file, "w") as file:
file.write(markdown_table)
print(f"Markdown table has been saved to '{md_file}'")
def main():
parser = argparse.ArgumentParser(description="Calculate CO2 adsorption energies on Co20/SiO2")
parser.add_argument("--ref_catalyst", required=True, help="Path to the reference catalyst (Co20/SiO2) folder")
parser.add_argument("--ref_mol", required=True, help="Path to the reference molecule (CO2) folder")
parser.add_argument("--output", default="adsorption", help="Prefix for output files")
parser.add_argument("adsorbed_systems", nargs="+", help="Paths to adsorbed system folders")
args = parser.parse_args()
print(f"Calculating adsorption energies for systems: {args.adsorbed_systems}")
print(f"Using reference catalyst: {args.ref_catalyst}")
print(f"Using reference molecule: {args.ref_mol}")
adsorption_energies = calculate_adsorption_energies(
args.adsorbed_systems,
Path(args.ref_catalyst),
Path(args.ref_mol)
)
save_energies_json(adsorption_energies, args.output)
create_markdown_table(adsorption_energies, args.output)
print("\nSummary of CO2 adsorption energies on Co20/SiO2:")
for system, energy in adsorption_energies.items():
if energy is not None:
print(f"{system}: {energy:.4f} eV")
else:
print(f"{system}: N/A")
if __name__ == "__main__":
main()
Save the script in a file analyze_energies.py
and run it in the terminal with:
You should get the following output in your terminal:
Calculating adsorption energies for systems: ['CO2-Co20-silica']
Using reference catalyst: Co20-silica
Using reference molecule: CO2_molecule
Reference energies:
E(CO2_gas) = -5139.434625 eV from CO2_molecule/aims.out
E(Co20/SiO2) = -2053076.565294 eV from Co20-silica/aims.out
--------------------------------------------------
System CO2-Co20-silica: E_ads = -0.3576 eV
Adsorption energy data has been saved to 'adsorption_energies.json'
Markdown table has been saved to 'adsorption_energies.md'
Summary of CO2 adsorption energies on Co20/SiO2:
CO2-Co20-silica: -0.3576 eV
The script will also create two reference files adsorption_energies.md
and adsorption_energies.json
:
Reference files after running analyze_energies.py
# CO2 Adsorption Energies on Co20/SiO2
Adsorption energies are in eV.
| Adsorption System | Energy (eV) |
|------------------|------------|
| CO2-Co20-silica | -0.3576 |
We obtain an adsorption energy for the CO\(_2\) molecule adsorbed at the oxidized Co site (J) of -0.36 eV. This indicates that it is energetically favorable for the CO\(_2\) molecule to adsorb at that site (negative energy equals exothermic reaction). The absolute value we have obtained with "light" basis settings is also very close to the reference value obtained in 1 for "tight" settings of -0.27 eV.
Interestingly, Belthle et al. have shown in 1 that it's actually preferred to adsorb on a metallic Co site:
This trend was also confirmed when simulating a larger Co\(_{55}\) cluster on the silica support 1. So while DFT calculations show that CO\(_2\) binds more strongly to metallic Co\(^0\) than to oxidized Co\(^{\delta +}\) species, the oxidized interfacial species like Co-O-SiO\(_x\) play a crucial role in determining product selectivity. Catalysts with a higher proportion of these oxidized species demonstrate enhanced selectivity toward valuable oxygenates like methanol and formate, even with reduced overall CO\(_2\) conversion 1. This seems counterintuitive at first - the sites that don't adsorb CO\(_2\) as strongly are actually better at making these specific valuable products but it also shows that having the strongest possible binding isn't always best for obtaining desirable products (recall the Sabatier principle).
Solutions
You can find the solutions to all the above exercises by clicking on the button below.
References
-
Belthle, K. S. et al., J. Am. Chem. Soc. 144 (46), 21232−21243 (2022). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Miyazaki, R. et al., J. Am. Chem. Soc. 146, 5433−5444 (2024). ↩↩↩↩↩↩
-
Hammer, B., Hansen, L. B., Nørskov, J. K, Phys. Rev. B 59, 7413−7421 (1999). ↩
-
Farkaš, B.; de Leeuw, N. H. Nanotechnology, 31, 195711 (2020). ↩↩
-
Bucher, J. P., Douglass, D. C., Bloomfield, L. A., Phys. Rev. Lett. 66 (23), 3052-3055 (1991). ↩
-
A. Comas-Vives, Phys. Chem. Chem. Phys. 18, 7475-7482 (2016). ↩