| tags | hide | render_macros | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
true |
This tutorial demonstrates how to passivate a reconstructed silicon (100) surface with hydrogen atoms, following the methodology described in the literature.
!!!note "Manuscript" Hansen, U., & Vogl, P. "Hydrogen passivation of silicon surfaces: A classical molecular-dynamics study." Physical Review B, 57(20), 13295–13304. (1998) DOI: 10.1103/PhysRevB.57.13295{:target='_blank'}. [@Hansen1998; @Northrup1991; @Boland1990]
We will recreate the passivated surface structure shown in Fig. 8:
Navigate to Materials Designer and import the reconstructed Si(100) surface from Standata.
Select the "Advanced > JupyterLite Transformation" menu item to launch the JupyterLite environment.
Open create_supercell.ipynb, select input material as the Si(100) structure, and set the supercell parameters in 1.1.:
SUPERCELL_MATRIX = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
# or use the scaling factor
SCALING_FACTOR = None # [3, 3, 1]Also add to the "Get input materials" cell the following code to adjust the Si atom position:
from utils.jupyterlite import get_materials
materials = get_materials(globals())
material = materials[0]
# Find coordinates of the Si atoms, list in descending order, and change the 2nd one from the top
si_atoms_coordinates = [coordinate for coordinate in slab.basis.coordinates.values]
si_atoms_sorted = sorted(si_atoms_coordinates, key=lambda x: x[2], reverse=True)
second_from_top_index = 1
second_si_atom_coordinate = si_atoms_sorted[second_from_top_index]
print(f"Coordinates of the second Si atom: {second_si_atom_coordinate}")
adjusted_coordinate = [
coord + delta for coord, delta in zip(second_si_atom_coordinate, [0.025, 0, 0.025])
]
print(f"Adjusted coordinate: {adjusted_coordinate}")
new_coordinates = si_atoms_coordinates.copy()
index_to_adjust = slab.basis.coordinates.get_element_id_by_value(second_si_atom_coordinate)
new_coordinates[index_to_adjust] = adjusted_coordinate
slab.set_coordinates(new_coordinates)Run the notebook using "Run > Run All Cells". This will:
- Load the Si(100) structure
- Adjust the position of the specified Si atom
- Create a supercell if specified in the parameters
- Visualize the adjusted structure
Find and open the passivate_slab.ipynb notebook to add hydrogen atoms to the surface.
Configure the following parameters for hydrogen passivation:
# Material selection
MATERIAL_INDEX = 0 # Which material to use from input list
# Passivation parameters
PASSIVANT = "H" # Chemical symbol of passivating atom
BOND_LENGTH = 1.46 # Distance from surface to passivant, in Angstroms
SURFACE = "top" # Which surface to passivate: "top", "bottom" or "both"
# Surface detection parameters
SHADOWING_RADIUS = 1.8 # Radius to exclude subsurface atoms, in Angstroms
DEPTH = 0.5 # How deep to look for surface atoms, in Angstroms
BYPASS_SLAB_CREATION = False # If True, will use input material directly
# Slab parameters for creating a new slab if previous option is set to True
DEFAULT_SLAB_PARAMETERS = {
"miller_indices": (0, 0, 1),
"thickness": 3,
"vacuum": 10.0,
"USE_ORTHOGONAL_C": True,
"xy_supercell_matrix": [[3, 0], [0, 3]]
}
# Visualization parameters
SHOW_INTERMEDIATE_STEPS = True
CELL_REPETITIONS_FOR_VISUALIZATION = [1, 1, 1] # Structure repeat in viewKey parameters explained:
BOND_LENGTH: Si-H bond length from literature.SHADOWING_RADIUS: Controls which atoms are considered surface atoms, set to be below the distance between top Si atoms pair.SURFACE: Passivate only the top surface.DEPTH: How deep to look for surface atoms, set to include only top Si atoms.
Run all cells in the notebook. The passivation process will:
- Detect surface Si atoms
- Add H atoms at the specified bond length
- Generate the passivated structure
After running both notebooks, examine the final structure:
Check that:
- The adjusted Si atom position is correct
- Surface reconstruction is maintained
- H atoms are properly placed above surface Si atoms
The final structure will be automatically passed back to Materials Designer where you can:
- Save it in your workspace
- Export it in various formats
- Use it for further calculations
The following embedded notebook demonstrates the complete process. Select "Run" > "Run All Cells".
{% with origin_url=config.extra.jupyterlite.origin_url %} {% with notebooks_path_root=config.extra.jupyterlite.notebooks_path_root %} {% with notebook_name='specific_examples/passivation_surface_silicon.ipynb' %} {% include 'jupyterlite_embed.html' %} {% endwith %} {% endwith %} {% endwith %}
To adjust the passivation:
-
Surface Detection:
- Increase
SHADOWING_RADIUSto be more selective about surface atoms - Adjust
DEPTHto control how deep to look for surface atoms
- Increase
-
Passivation:
- Modify
BOND_LENGTHfor different Si-H distances - Change
SURFACEto passivate different surfaces - Change
PASSIVANTto use different passivating species
- Modify