|
| 1 | +--- |
| 2 | +# YAML header |
| 3 | +render_macros: true |
| 4 | +--- |
| 5 | + |
| 6 | +# Passivation of Silicon Nanowire |
| 7 | + |
| 8 | +## Introduction |
| 9 | + |
| 10 | +This tutorial demonstrates the process of creating passivated silicon nanowires based on the work presented in the following manuscript, where the chemical gap tuning in silicon nanowires is studied. |
| 11 | + |
| 12 | + |
| 13 | +!!!note "Manuscript" |
| 14 | + B. Aradi, L. E. Ramos, P. Deák, Th. Köhler, F. Bechstedt, R. Q. Zhang, and Th. Frauenheim, |
| 15 | + "Theoretical study of the chemical gap tuning in silicon nanowires" |
| 16 | + Phys. Rev. B 76, 035305 (2007) |
| 17 | + DOI: [10.1103/PhysRevB.76.035305](https://doi.org/10.1103/PhysRevB.76.035305) |
| 18 | + |
| 19 | + |
| 20 | +We will focus on creating silicon nanowires with hydrogen passivation from FIG. 1. |
| 21 | + |
| 22 | +Specifically, the material from FIG. 1. of the publication: |
| 23 | + |
| 24 | + |
| 25 | + |
| 26 | + |
| 27 | +## 1. Create Silicon Nanowire |
| 28 | + |
| 29 | +### 1.1. Load Silicon Material |
| 30 | + |
| 31 | +Since we're using Silicon, it can be already loaded as the default material and we can skip this step. |
| 32 | + |
| 33 | +Otherwise, we navigate to [Materials Designer](../../../materials-designer/overview.md) and import the silicon material from the [Standata](../../../materials-designer/header-menu/input-output/standata-import.md). |
| 34 | + |
| 35 | +### 1.2. Launch JupyterLite Session |
| 36 | + |
| 37 | +Select the "Advanced > [JupyterLite Transformation](../../../materials-designer/header-menu/advanced/jupyterlite-dialog.md)" menu item to launch the JupyterLite environment. |
| 38 | + |
| 39 | + |
| 40 | + |
| 41 | +### 1.3. Open `create_nanowire_custom_shapeipynb` notebook |
| 42 | + |
| 43 | +Find `create_nanowire_custom_shape.ipynb` in the list of notebooks and click/double-click open it. |
| 44 | + |
| 45 | +### 1.4. Open and modify the notebook |
| 46 | + |
| 47 | +Next, we need to create a nanowire wit ha custom shape. |
| 48 | + |
| 49 | +We'll specify the orientation of the nanowire with Miller indices of `(1,1,0)` as described in the manuscript. |
| 50 | + |
| 51 | +Then we'll define a supercell matrix to add enough of material to cut the nanowire from: |
| 52 | + |
| 53 | +`[[3, 0, 0], [0, 2, 0], [0, 0, 2]]`. |
| 54 | + |
| 55 | +Finally, we'll define a custom coordinate condition to create a rhombus-shaped nanowire with coordinates of the vertices corresponding to the corners of the rhombus. |
| 56 | + |
| 57 | +The vertices of the rhombus are defined as follows: |
| 58 | + |
| 59 | +Bottom:`[0.5, 0.2, 0]`, |
| 60 | + |
| 61 | +Left:`[0, 0.5, 0]`, |
| 62 | + |
| 63 | +Top:`[0.5, 1, 0]`, |
| 64 | + |
| 65 | +Right:`[1, 0.5, 0]` |
| 66 | + |
| 67 | + |
| 68 | +For that, edit `create_nanowire_custom_shape.ipynb` notebook to modify the parameters by adding the following content to the "1.1. Set up nanowire parameters" cell: |
| 69 | + |
| 70 | +```python |
| 71 | +from typing import List |
| 72 | +import numpy as np |
| 73 | +from mat3ra.made.tools.utils.coordinate import CoordinateCondition |
| 74 | +# Flag to use Cartesian coordinates for the center and radii |
| 75 | +USE_CARTESIAN_COORDINATES = False |
| 76 | + |
| 77 | +# Miller indices of the nanowire direction |
| 78 | +MILLER_INDICES= (1,1,0) |
| 79 | +# Supercell matrix to cut the cylinder from |
| 80 | +SUPERCELL_MATRIX = [[3, 0, 0], [0, 2, 0], [0, 0, 2]] |
| 81 | +# Vacuum thickness on the sides in Angstroms |
| 82 | +VACUUM = 10.0 |
| 83 | +ALIGN_ALONG_X = False |
| 84 | + |
| 85 | +# Custom Coordinate Condition for |
| 86 | +class CustomCoordinateCondition(CoordinateCondition): |
| 87 | + vertices: List[List[float]] |
| 88 | + |
| 89 | + def condition(self, coordinate: List[float]) -> bool: |
| 90 | + coord = np.array(coordinate) |
| 91 | + v0, v1, v2, v3 = np.array(self.vertices) |
| 92 | + vec0 = v1 - v0 |
| 93 | + vec1 = v2 - v1 |
| 94 | + vec2 = v3 - v2 |
| 95 | + vec3 = v0 - v3 |
| 96 | + |
| 97 | + # Calculate cross products |
| 98 | + cross0 = np.cross(vec0, coord[:2] - v0[:2]) |
| 99 | + cross1 = np.cross(vec1, coord[:2] - v1[:2]) |
| 100 | + cross2 = np.cross(vec2, coord[:2] - v2[:2]) |
| 101 | + cross3 = np.cross(vec3, coord[:2] - v3[:2]) |
| 102 | + |
| 103 | + # Check if point is inside the rhombus |
| 104 | + return (np.all(cross0 >= 0) and np.all(cross1 >= 0) and \ |
| 105 | + np.all(cross2 >= 0) and np.all(cross3 >= 0)) or \ |
| 106 | + (np.all(cross0 <= 0) and np.all(cross1 <= 0) and \ |
| 107 | + np.all(cross2 <= 0) and np.all(cross3 <= 0)) |
| 108 | + |
| 109 | +# Define the vertices of the rhombus |
| 110 | +vertices = [ |
| 111 | + [0.5, 0.2, 0], |
| 112 | + [0, 0.5, 0], |
| 113 | + [0.5, 1, 0], |
| 114 | + [1, 0.5, 0] |
| 115 | +] |
| 116 | + |
| 117 | +condition = CustomCoordinateCondition(vertices=vertices).condition |
| 118 | +``` |
| 119 | + |
| 120 | +## 1.5. Run the Notebook and use the Material |
| 121 | + |
| 122 | +Run the notebook by clicking `Run` > `Run All` in the top menu to run cells and wait for the results to appear. |
| 123 | + |
| 124 | + |
| 125 | + |
| 126 | +After running the notebook and submitting the material, the user will be able to visualize the structure of Silicon Nanowire. |
| 127 | + |
| 128 | + |
| 129 | + |
| 130 | +## 2. Passivate with Hydrogen |
| 131 | + |
| 132 | +### 2.1. Setup the Passivation |
| 133 | + |
| 134 | +Open JupyterLite Session again and select Silicon Nanowire material for Input Materials. |
| 135 | + |
| 136 | +Next, we need to passivate the silicon nanowire with hydrogen atoms. |
| 137 | + |
| 138 | +Open the `passivate_edge.ipynb` notebook and set: |
| 139 | + |
| 140 | +`BOND_LENGTH = 1.46` -- Si-H bond length in Angstroms, |
| 141 | + |
| 142 | +`COORDINATION_THRESHOLD = 3` -- Silicon that has less than 4 neighbors is undercoordinated in the silicon lattice, so all with 3 or less neighbors will be passivated, |
| 143 | + |
| 144 | +`COORDINATION_SEARCH_RADIUS = 2.5` -- Search radius for neighbors for every atom, in Angstroms, |
| 145 | + |
| 146 | +`MAX_BONDS_TO_PASSIVATE = 2` -- Maximum number of bonds to saturate for undercoordinated atoms. |
| 147 | + |
| 148 | + |
| 149 | +Copy the below content and edit the "1.1. Set up defect parameters" cell in the notebook as follows: |
| 150 | + |
| 151 | +```python |
| 152 | +# Enable interactive selection of coordination threshold |
| 153 | +IS_COORDINATION_SELECTION_INTERACTIVE = False |
| 154 | + |
| 155 | +MATERIAL_INDEX = 0 |
| 156 | + |
| 157 | +BOND_LENGTH = 1.46 # in Angstroms |
| 158 | +PASSIVANT = "H" # Chemical symbol of the passivant |
| 159 | +COORDINATION_SEARCH_RADIUS = 2.5 # in Angstroms (sphere in which to search for neighbors) |
| 160 | +COORDINATION_THRESHOLD = 3 # Coordination number below which to passivate |
| 161 | +MAX_BONDS_TO_SATURATE = 2 # Maximum number of bonds to saturate |
| 162 | + |
| 163 | +SYMMETRY_TOLERANCE = 0.1 |
| 164 | + |
| 165 | +SHOW_INTERMEDIATE_STEPS = True |
| 166 | +CELL_REPETITIONS_FOR_VISUALIZATION = [1, 1, 1] |
| 167 | +``` |
| 168 | + |
| 169 | +Here's the visual of the updated content: |
| 170 | + |
| 171 | + |
| 172 | + |
| 173 | +### 2.2. Run the notebook and analyze the results |
| 174 | + |
| 175 | +After running the notebook, the user will be able to visualize the structure of Silicon Nanowire with substitution defects. |
| 176 | + |
| 177 | + |
| 178 | + |
| 179 | +## 3. Pass the Material to Materials Designer |
| 180 | + |
| 181 | +The user can pass the material with substitution defects in the current Materials Designer environment and save it. |
| 182 | + |
| 183 | + |
| 184 | + |
| 185 | +Or the user can [save or download](../../../materials-designer/header-menu/input-output.md) the material in Material JSON format or POSCAR format. |
| 186 | + |
| 187 | + |
| 188 | +## Interactive JupyterLite Notebook |
| 189 | + |
| 190 | +The following JupyterLite notebook demonstrates the process of creating materials with hydrogen passivation of silicon nanowire. Select "Run" > "Run All Cells". |
| 191 | + |
| 192 | +{% with origin_url=config.extra.jupyterlite.origin_url %} |
| 193 | +{% with notebooks_path_root=config.extra.jupyterlite.notebooks_path_root %} |
| 194 | +{% with notebook_name='specific_examples/passivation_edge_silicon_nanowire.ipynb' %} |
| 195 | +{% include 'jupyterlite_embed.html' %} |
| 196 | +{% endwith %} |
| 197 | +{% endwith %} |
| 198 | +{% endwith %} |
| 199 | + |
| 200 | +## References |
| 201 | + |
| 202 | +1. B. Aradi, L. E. Ramos, P. Deák, Th. Köhler, F. Bechstedt, R. Q. Zhang, and Th. Frauenheim, |
| 203 | + Theoretical study of the chemical gap tuning in silicon nanowires |
| 204 | + Phys. Rev. B 76, 035305 (2007) |
| 205 | + DOI: [10.1103/PhysRevB.76.035305](https://doi.org/10.1103/PhysRevB.76.035305) |
| 206 | + |
| 207 | +## Tags |
| 208 | + |
| 209 | + `silicon`, `hydrogen`, `passivation`, `nanowire` |
0 commit comments