From e2a5d0e1422dcc9f57f6926c77e2f2be261b306e Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Tue, 24 Dec 2024 20:54:22 -0800 Subject: [PATCH 01/12] wip: rough implementation of heterostack (takes toooooo long) --- .../heterostructure_high_k_metal_gate.ipynb | 293 ++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb new file mode 100644 index 00000000..6f9b02c3 --- /dev/null +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -0,0 +1,293 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [], + "metadata": { + "collapsed": false + }, + "id": "e96bfb09b980e52b" + }, + { + "cell_type": "markdown", + "source": [ + "# Create High-k Metal Gate Stack Tutorial\n", + "\n", + "This notebook demonstrates how to create a high-k metal gate stack heterostructure with four materials: Si (substrate), SiO2 (gate oxide), HfO2 (high-k dielectric), and TiN (metal gate).\n" + ], + "metadata": { + "collapsed": false + }, + "id": "3ae4cc7db0846f04" + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Configuration Parameters\n" + ], + "metadata": { + "collapsed": false + }, + "id": "f1db6e522c6716dc" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "# Global parameters\n", + "MAX_AREA = 800 # Maximum area for all interfaces\n", + "MAX_AREA_RATIO_TOL = 0.09 # Maximum area ratio tolerance for strain matching\n", + "MAX_ANGLE_TOLERANCE = 0.03 # Maximum angle tolerance for strain matching\n", + "MAX_LENGTH_TOLERANCE = 0.03 # Maximum length tolerance for strain matching\n", + "FINAL_VACUUM = 20.0 # Final vacuum spacing in Angstroms\n", + "\n", + "# Structure parameters for each layer\n", + "STRUCTURE_PARAMS = [\n", + " {\n", + " # Silicon substrate\n", + " \"slab_params\": {\n", + " \"miller_indices\": (1, 0, 0),\n", + " \"thickness\": 3, # atomic layers\n", + " \"vacuum\": 0, # Angstroms\n", + " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"use_orthogonal_z\": True\n", + " },\n", + " \"interface_distance\": None # No interface for substrate\n", + " },\n", + " {\n", + " # SiO2 layer\n", + " \"slab_params\": {\n", + " \"miller_indices\": (1,0,0),\n", + " \"thickness\": 2,\n", + " \"vacuum\": 0,\n", + " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"use_orthogonal_z\": True\n", + " },\n", + " \"interface_distance\": 2.5 # Distance to Si substrate\n", + " },\n", + " {\n", + " # HfO2 layer\n", + " \"slab_params\": {\n", + " \"miller_indices\": (0, 1, 1),\n", + " \"thickness\": 3,\n", + " \"vacuum\": 0,\n", + " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"use_orthogonal_z\": True\n", + " },\n", + " \"interface_distance\": 2.8 # Distance to SiO2\n", + " },\n", + " {\n", + " # TiN layer\n", + " \"slab_params\": {\n", + " \"miller_indices\": (0, 0, 1),\n", + " \"thickness\": 3,\n", + " \"vacuum\": FINAL_VACUUM, # Add vacuum to final layer\n", + " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"use_orthogonal_z\": True\n", + " },\n", + " \"interface_distance\": 2.5 # Distance to HfO2\n", + " }\n", + "]\n", + "\n", + "INTERFACE_INDEX=[4,0,0]\n" + ], + "metadata": { + "collapsed": false + }, + "id": "813b06d4d77a8507", + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Environment Setup and Material Loading\n" + ], + "metadata": { + "collapsed": false + }, + "id": "b076b018bd5efe10" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "from mat3ra.standata.materials import Materials\n", + "from mat3ra.made.material import Material\n", + "from mat3ra.made.tools.build.slab import SlabConfiguration, get_terminations, create_slab\n", + "from mat3ra.made.tools.build.interface import (\n", + " InterfaceConfiguration,\n", + " ZSLStrainMatchingParameters,\n", + " ZSLStrainMatchingInterfaceBuilder,\n", + " ZSLStrainMatchingInterfaceBuilderParameters\n", + ")\n", + "from mat3ra.made.tools.modify import translate_to_z_level\n", + "from utils.visualize import visualize_materials as visualize\n", + "\n", + "# Load materials from Standata\n", + "materials = [\n", + " Material(Materials.get_by_name_first_match(\"Silicon\")), # Si substrate\n", + " Material(Materials.get_by_name_first_match(\"SiO2\")), # SiO2\n", + " Material(Materials.get_by_name_first_match(\"HfO2\")), # HfO2\n", + " Material(Materials.get_by_name_first_match(\"TiN\")) # TiN\n", + "]\n" + ], + "metadata": { + "collapsed": false + }, + "id": "deaa451cfe2f8dc0", + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Build Stack Layer by Layer\n", + "\n", + "Now we'll build the stack sequentially, starting with the substrate and adding each layer one by one.\n" + ], + "metadata": { + "collapsed": false + }, + "id": "9a6950d3f27d1c8" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "# Start with substrate (first material)\n", + "current_structure = materials[0]\n", + "print(\"Starting with substrate:\", materials[0].name)\n", + "\n", + "# Iterate through remaining materials to build interfaces\n", + "for i in range(1, len(materials)):\n", + " print(f\"\\nBuilding interface {i} of {len(materials)-1}...\")\n", + " print(f\"Adding {materials[i].name} to {materials[i-1].name}\")\n", + " \n", + " # Get parameters for current interface\n", + " film_params = STRUCTURE_PARAMS[i]\n", + " substrate_params = STRUCTURE_PARAMS[i-1]\n", + " \n", + " # Create slab configurations\n", + " film_config = SlabConfiguration(\n", + " bulk=materials[i],\n", + " **film_params[\"slab_params\"]\n", + " )\n", + " \n", + " substrate_config = SlabConfiguration(\n", + " bulk=current_structure,\n", + " **substrate_params[\"slab_params\"]\n", + " )\n", + " \n", + " # Get terminations\n", + " film_terminations = get_terminations(film_config)\n", + " substrate_terminations = get_terminations(substrate_config)\n", + " \n", + " # Use first termination pair for simplicity\n", + " film_termination = film_terminations[0]\n", + " substrate_termination = substrate_terminations[0]\n", + " \n", + " print(f\"Using terminations: {film_termination} (film) and {substrate_termination} (substrate)\")\n", + " \n", + " # Create interface configuration\n", + " interface_config = InterfaceConfiguration(\n", + " film_configuration=film_config,\n", + " substrate_configuration=substrate_config,\n", + " film_termination=film_termination,\n", + " substrate_termination=substrate_termination,\n", + " distance=film_params[\"interface_distance\"],\n", + " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", + " )\n", + " \n", + " # Set up strain matching and build interface\n", + " strain_params = ZSLStrainMatchingParameters(max_area=MAX_AREA, max_area_ratio_tol=MAX_AREA_RATIO_TOL, max_angle_tol=MAX_ANGLE_TOLERANCE, max_length_tol=MAX_LENGTH_TOLERANCE)\n", + " builder = ZSLStrainMatchingInterfaceBuilder(\n", + " build_parameters=ZSLStrainMatchingInterfaceBuilderParameters(\n", + " strain_matching_parameters=strain_params\n", + " )\n", + " )\n", + " \n", + " # Generate and sort interfaces\n", + " interfaces = builder.get_materials(configuration=interface_config)\n", + " \n", + " # Select the first interface (lowest strain, smallest area)\n", + " current_structure = interfaces[INTERFACE_INDEX[i-1]]\n", + " \n", + " # Translate structure to prepare for next layer\n", + " # current_structure = translate_to_z_level(current_structure, \"top\")\n", + " \n", + " # Visualize current state\n", + " visualize(\n", + " current_structure,\n", + " repetitions=[1, 1, 1],\n", + " title=f\"After adding {materials[i].name}\"\n", + " )\n", + " \n", + " # # Print interface statistics\n", + " # print(f\"\\nLayer {i} Statistics:\")\n", + " # print(f\"Number of atoms: {len(current_structure.atoms)}\")\n", + " print(f\"Height: {current_structure.lattice.c:.2f} Å\")\n", + " print(f\"Surface area: {current_structure.lattice.volume()/current_structure.lattice.c:.2f} Ų\")\n" + ], + "metadata": { + "collapsed": false + }, + "id": "88208178c30708a1", + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## 4. Final Structure Visualization and Analysis\n" + ], + "metadata": { + "collapsed": false + }, + "id": "ae16540b54491e35" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "# Visualize final structure\n", + "visualize(\n", + " current_structure,\n", + " repetitions=[3, 3, 1],\n", + " title=\"Complete High-k Metal Gate Stack\"\n", + ")\n", + "\n", + "# Print final analysis\n", + "print(\"\\nFinal Structure Analysis:\")\n", + "print(f\"Total number of atoms: {len(current_structure.atoms)}\")\n", + "print(f\"Total height: {current_structure.lattice.c:.2f} Å\")\n", + "print(f\"Surface area: {current_structure.lattice.surface_area:.2f} Ų\")\n", + "print(\"\\nLayer composition:\")\n", + "for element, count in current_structure.composition.items():\n", + " print(f\" {element}: {count} atoms\")" + ], + "metadata": { + "collapsed": false + }, + "id": "14be386aeddd4b" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 7251a9e8080b93bb6d222b6455cd266d963c2e9c Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:31:28 -0800 Subject: [PATCH 02/12] update: create layer by layer with simple builder --- .../heterostructure_high_k_metal_gate.ipynb | 421 +++++++++++++----- 1 file changed, 313 insertions(+), 108 deletions(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index 6f9b02c3..c43986ec 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -35,10 +35,10 @@ "outputs": [], "source": [ "# Global parameters\n", - "MAX_AREA = 800 # Maximum area for all interfaces\n", - "MAX_AREA_RATIO_TOL = 0.09 # Maximum area ratio tolerance for strain matching\n", - "MAX_ANGLE_TOLERANCE = 0.03 # Maximum angle tolerance for strain matching\n", - "MAX_LENGTH_TOLERANCE = 0.03 # Maximum length tolerance for strain matching\n", + "MAX_AREA = [200,200,260] # Maximum area for strain matching\n", + "MAX_AREA_RATIO_TOL = 0.25 # Maximum area ratio tolerance for strain matching\n", + "MAX_ANGLE_TOLERANCE = 0.15 # Maximum angle tolerance for strain matching\n", + "MAX_LENGTH_TOLERANCE = 0.15 # Maximum length tolerance for strain matching\n", "FINAL_VACUUM = 20.0 # Final vacuum spacing in Angstroms\n", "\n", "# Structure parameters for each layer\n", @@ -48,7 +48,7 @@ " \"slab_params\": {\n", " \"miller_indices\": (1, 0, 0),\n", " \"thickness\": 3, # atomic layers\n", - " \"vacuum\": 0, # Angstroms\n", + " \"vacuum\": FINAL_VACUUM, # Angstroms\n", " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", " \"use_orthogonal_z\": True\n", " },\n", @@ -58,8 +58,8 @@ " # SiO2 layer\n", " \"slab_params\": {\n", " \"miller_indices\": (1,0,0),\n", - " \"thickness\": 2,\n", - " \"vacuum\": 0,\n", + " \"thickness\": 3,\n", + " \"vacuum\": FINAL_VACUUM,\n", " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", " \"use_orthogonal_z\": True\n", " },\n", @@ -68,9 +68,9 @@ " {\n", " # HfO2 layer\n", " \"slab_params\": {\n", - " \"miller_indices\": (0, 1, 1),\n", + " \"miller_indices\": (0,0,1),\n", " \"thickness\": 3,\n", - " \"vacuum\": 0,\n", + " \"vacuum\": FINAL_VACUUM,\n", " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", " \"use_orthogonal_z\": True\n", " },\n", @@ -89,13 +89,17 @@ " }\n", "]\n", "\n", - "INTERFACE_INDEX=[4,0,0]\n" + "INTERFACE_1_INDEX = 11\n" ], "metadata": { - "collapsed": false + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-12-26T03:28:25.952389Z", + "start_time": "2024-12-26T03:28:25.938943Z" + } }, "id": "813b06d4d77a8507", - "execution_count": null + "execution_count": 1 }, { "cell_type": "markdown", @@ -124,113 +128,313 @@ "from utils.visualize import visualize_materials as visualize\n", "\n", "# Load materials from Standata\n", - "materials = [\n", - " Material(Materials.get_by_name_first_match(\"Silicon\")), # Si substrate\n", + "materials_1 = [\n", " Material(Materials.get_by_name_first_match(\"SiO2\")), # SiO2\n", + " Material(Materials.get_by_name_first_match(\"Silicon\")), # Si substrate\n", + " ]\n", + "materials_2 = [\n", " Material(Materials.get_by_name_first_match(\"HfO2\")), # HfO2\n", - " Material(Materials.get_by_name_first_match(\"TiN\")) # TiN\n", + " Material(Materials.get_by_name_first_match(\"TiN\")), # TiN\n", "]\n" ], "metadata": { - "collapsed": false + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-12-26T03:28:32.102086Z", + "start_time": "2024-12-26T03:28:25.972101Z" + } }, "id": "deaa451cfe2f8dc0", - "execution_count": null + "execution_count": 2 }, { "cell_type": "markdown", "source": [ - "## 3. Build Stack Layer by Layer\n", - "\n", - "Now we'll build the stack sequentially, starting with the substrate and adding each layer one by one.\n" + "## 3. Create Si/SiO2 Interface" ], "metadata": { "collapsed": false }, - "id": "9a6950d3f27d1c8" + "id": "9fe9b39b05f1dc7e" }, { "cell_type": "code", - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Interface will be built with terminations: (Si_P4/mmm_1, Si_Pmmm_1)\n", + "Interface will be built with terminations: (Si_P4/mmm_1, Si_Pmmm_1)\n" + ] + }, + { + "data": { + "text/plain": "GridBox(children=(VBox(children=(Label(value='O108Si198 - Si/SiO2 Interface - rotation: 0x,0y,0z', layout=Layo…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "b7946978dc3b4866bd8e88363811f666" + } + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": "GridBox(children=(VBox(children=(Label(value='O108Si198 - Si/SiO2 Interface - rotation: -90x', layout=Layout(a…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "69f28eeac9b7456f8643c8a1a28805cd" + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Start with substrate (first material)\n", - "current_structure = materials[0]\n", - "print(\"Starting with substrate:\", materials[0].name)\n", - "\n", - "# Iterate through remaining materials to build interfaces\n", - "for i in range(1, len(materials)):\n", - " print(f\"\\nBuilding interface {i} of {len(materials)-1}...\")\n", - " print(f\"Adding {materials[i].name} to {materials[i-1].name}\")\n", - " \n", - " # Get parameters for current interface\n", - " film_params = STRUCTURE_PARAMS[i]\n", - " substrate_params = STRUCTURE_PARAMS[i-1]\n", - " \n", - " # Create slab configurations\n", - " film_config = SlabConfiguration(\n", - " bulk=materials[i],\n", - " **film_params[\"slab_params\"]\n", - " )\n", - " \n", - " substrate_config = SlabConfiguration(\n", - " bulk=current_structure,\n", - " **substrate_params[\"slab_params\"]\n", - " )\n", - " \n", - " # Get terminations\n", - " film_terminations = get_terminations(film_config)\n", - " substrate_terminations = get_terminations(substrate_config)\n", - " \n", - " # Use first termination pair for simplicity\n", - " film_termination = film_terminations[0]\n", - " substrate_termination = substrate_terminations[0]\n", - " \n", - " print(f\"Using terminations: {film_termination} (film) and {substrate_termination} (substrate)\")\n", - " \n", - " # Create interface configuration\n", - " interface_config = InterfaceConfiguration(\n", - " film_configuration=film_config,\n", - " substrate_configuration=substrate_config,\n", - " film_termination=film_termination,\n", - " substrate_termination=substrate_termination,\n", - " distance=film_params[\"interface_distance\"],\n", - " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", - " )\n", - " \n", - " # Set up strain matching and build interface\n", - " strain_params = ZSLStrainMatchingParameters(max_area=MAX_AREA, max_area_ratio_tol=MAX_AREA_RATIO_TOL, max_angle_tol=MAX_ANGLE_TOLERANCE, max_length_tol=MAX_LENGTH_TOLERANCE)\n", - " builder = ZSLStrainMatchingInterfaceBuilder(\n", - " build_parameters=ZSLStrainMatchingInterfaceBuilderParameters(\n", - " strain_matching_parameters=strain_params\n", - " )\n", - " )\n", - " \n", - " # Generate and sort interfaces\n", - " interfaces = builder.get_materials(configuration=interface_config)\n", - " \n", - " # Select the first interface (lowest strain, smallest area)\n", - " current_structure = interfaces[INTERFACE_INDEX[i-1]]\n", - " \n", - " # Translate structure to prepare for next layer\n", - " # current_structure = translate_to_z_level(current_structure, \"top\")\n", - " \n", - " # Visualize current state\n", - " visualize(\n", - " current_structure,\n", - " repetitions=[1, 1, 1],\n", - " title=f\"After adding {materials[i].name}\"\n", + "from mat3ra.made.tools.build.slab import PymatgenSlabGeneratorParameters\n", + "\n", + "\n", + "film_params = STRUCTURE_PARAMS[1]\n", + "substrate_params = STRUCTURE_PARAMS[0]\n", + "\n", + "film_config = SlabConfiguration(\n", + " bulk=materials_1[1],\n", + " **film_params[\"slab_params\"]\n", + ")\n", + "\n", + "substrate_config = SlabConfiguration(\n", + " bulk=materials_1[0],\n", + " **substrate_params[\"slab_params\"]\n", + ")\n", + "params = PymatgenSlabGeneratorParameters(symmetrize = False)\n", + "\n", + "film_terminations = get_terminations(film_config, build_parameters=params)\n", + "substrate_terminations = get_terminations(substrate_config, build_parameters=params)\n", + "\n", + "film_termination = film_terminations[0]\n", + "substrate_termination = substrate_terminations[0]\n", + "\n", + "\n", + "interface_config = InterfaceConfiguration(\n", + " film_configuration=film_config,\n", + " substrate_configuration=substrate_config,\n", + " film_termination=film_termination,\n", + " substrate_termination=substrate_termination,\n", + " distance=film_params[\"interface_distance\"],\n", + " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", + ")\n", + "\n", + "\n", + "\n", + "builder = ZSLStrainMatchingInterfaceBuilder(\n", + " build_parameters=ZSLStrainMatchingInterfaceBuilderParameters(\n", + " strain_matching_parameters=ZSLStrainMatchingParameters(max_area=MAX_AREA[0], max_area_ratio_tol=MAX_AREA_RATIO_TOL, max_angle_tol=MAX_ANGLE_TOLERANCE, max_length_tol=MAX_LENGTH_TOLERANCE)\n", " )\n", - " \n", - " # # Print interface statistics\n", - " # print(f\"\\nLayer {i} Statistics:\")\n", - " # print(f\"Number of atoms: {len(current_structure.atoms)}\")\n", - " print(f\"Height: {current_structure.lattice.c:.2f} Å\")\n", - " print(f\"Surface area: {current_structure.lattice.volume()/current_structure.lattice.c:.2f} Ų\")\n" + ")\n", + "\n", + "interfaces = builder.get_materials(configuration=interface_config)\n", + "\n", + "visualize(\n", + " interfaces[11],\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2 Interface\"\n", + ")\n", + "\n", + "visualize(\n", + " interfaces[11],\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2 Interface\",\n", + " rotation='-90x'\n", + ")\n", + "\n", + "interface_1 = interfaces[INTERFACE_1_INDEX]\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-12-26T03:28:47.420848Z", + "start_time": "2024-12-26T03:28:32.104683Z" + } + }, + "id": "59c8eb0e549ee69e", + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Add HfO2 Layer" + ], + "metadata": { + "collapsed": false + }, + "id": "4cc11d87adc5d979" + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Film terminations: [O2_P-1_2, O2_P4/mmm_1, Hf_P4/mmm_1, O2_P4/mmm_1]\n", + "Substrate terminations: [Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, Si_P2_1/m_12, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, Si_P2_1/m_12, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6]\n" + ] + }, + { + "data": { + "text/plain": "GridBox(children=(VBox(children=(Label(value='Hf12O132Si198 - Si/SiO2/HfO2 Interface - rotation: 0x,0y,0z', la…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "8f7d841f788047fa925b782ebc450285" + } + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": "GridBox(children=(VBox(children=(Label(value='Hf12O132Si198 - Si/SiO2/HfO2 Interface - rotation: -90x', layout…", + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "b6b8285f0ac04a6c91bf16e64e3e0700" + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mat3ra.made.tools.build.interface import SimpleInterfaceBuilder, SimpleInterfaceBuilderParameters\n", + "\n", + "film_params = STRUCTURE_PARAMS[2]\n", + "\n", + "film_config = SlabConfiguration(\n", + " bulk=materials_2[0],\n", + " **film_params[\"slab_params\"]\n", + ")\n", + "\n", + "substrate_config = SlabConfiguration(\n", + " bulk=interface_1,\n", + " miller_indices=(0,0,1)\n", + ")\n", + "\n", + "film_terminations = get_terminations(film_config, build_parameters=params)\n", + "substrate_terminations = get_terminations(substrate_config, build_parameters=params)\n", + "\n", + "print(\"Film terminations:\", film_terminations)\n", + "print(\"Substrate terminations:\", substrate_terminations)\n", + "\n", + "\n", + "interface_config = InterfaceConfiguration(\n", + " film_configuration=film_config,\n", + " substrate_configuration=substrate_config,\n", + " film_termination=film_terminations[0],\n", + " substrate_termination=substrate_terminations[0],\n", + " distance=film_params[\"interface_distance\"],\n", + " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", + ")\n", + "\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True))\n", + "interface = builder.get_material(configuration=interface_config)\n", + "\n", + "visualize(\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2 Interface\"\n", + ")\n", + "\n", + "visualize(\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2 Interface\",\n", + " rotation='-90x'\n", + ")\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-12-26T03:29:20.477794Z", + "start_time": "2024-12-26T03:28:47.423339Z" + } + }, + "id": "670fc0c56e8b22b5", + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Add TiN Layer" ], "metadata": { "collapsed": false }, - "id": "88208178c30708a1", + "id": "93705fda2bacc16e" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "film_params = STRUCTURE_PARAMS[3]\n", + "\n", + "film_config = SlabConfiguration(\n", + " bulk=materials_2[1],\n", + " **film_params[\"slab_params\"]\n", + ")\n", + "\n", + "substrate_config = SlabConfiguration(\n", + " bulk=interface,\n", + " miller_indices=(0,0,1)\n", + ")\n", + "\n", + "film_terminations = get_terminations(film_config, build_parameters=params)\n", + "substrate_terminations = get_terminations(substrate_config, build_parameters=params)\n", + "\n", + "print(\"Film terminations:\", film_terminations)\n", + "print(\"Substrate terminations:\", substrate_terminations)\n", + "\n", + "interface_config = InterfaceConfiguration(\n", + " film_configuration=film_config,\n", + " substrate_configuration=substrate_config,\n", + " film_termination=film_terminations[0],\n", + " substrate_termination=substrate_terminations[0],\n", + " distance=film_params[\"interface_distance\"],\n", + " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", + ")\n", + "\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True))\n", + "\n", + "interface = builder.get_material(configuration=interface_config)\n", + "\n", + "visualize(\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2/TiN Interface\"\n", + ")\n", + "\n", + "visualize(\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2/TiN Interface\",\n", + " rotation='-90x'\n", + ")\n", + "\n" + ], + "metadata": { + "collapsed": false, + "is_executing": true, + "ExecuteTime": { + "start_time": "2024-12-26T03:29:20.482245Z" + } + }, + "id": "46bce40c8d46f8bb", "execution_count": null }, { @@ -247,26 +451,27 @@ "cell_type": "code", "outputs": [], "source": [ - "# Visualize final structure\n", + "from utils.jupyterlite import set_materials\n", + "\n", + "visualize(\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2/TiN Interface\",\n", + ")\n", + "\n", "visualize(\n", - " current_structure,\n", - " repetitions=[3, 3, 1],\n", - " title=\"Complete High-k Metal Gate Stack\"\n", + " interface,\n", + " repetitions=[1, 1, 1],\n", + " title=\"Si/SiO2/HfO2/TiN Interface\",\n", + " rotation='-90x'\n", ")\n", "\n", - "# Print final analysis\n", - "print(\"\\nFinal Structure Analysis:\")\n", - "print(f\"Total number of atoms: {len(current_structure.atoms)}\")\n", - "print(f\"Total height: {current_structure.lattice.c:.2f} Å\")\n", - "print(f\"Surface area: {current_structure.lattice.surface_area:.2f} Ų\")\n", - "print(\"\\nLayer composition:\")\n", - "for element, count in current_structure.composition.items():\n", - " print(f\" {element}: {count} atoms\")" + "set_materials(interface)" ], "metadata": { "collapsed": false }, - "id": "14be386aeddd4b" + "id": "803792030da3a97" } ], "metadata": { From 25d04a83d5b8e97777bc95062a95efb417e4c116 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Wed, 25 Dec 2024 20:03:30 -0800 Subject: [PATCH 03/12] update: cleanups --- .../heterostructure_high_k_metal_gate.ipynb | 143 ++++-------------- 1 file changed, 30 insertions(+), 113 deletions(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index c43986ec..047f25d9 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -39,7 +39,7 @@ "MAX_AREA_RATIO_TOL = 0.25 # Maximum area ratio tolerance for strain matching\n", "MAX_ANGLE_TOLERANCE = 0.15 # Maximum angle tolerance for strain matching\n", "MAX_LENGTH_TOLERANCE = 0.15 # Maximum length tolerance for strain matching\n", - "FINAL_VACUUM = 20.0 # Final vacuum spacing in Angstroms\n", + "VACUUM = 10.0 # Final vacuum spacing in Angstroms\n", "\n", "# Structure parameters for each layer\n", "STRUCTURE_PARAMS = [\n", @@ -47,9 +47,8 @@ " # Silicon substrate\n", " \"slab_params\": {\n", " \"miller_indices\": (1, 0, 0),\n", - " \"thickness\": 3, # atomic layers\n", - " \"vacuum\": FINAL_VACUUM, # Angstroms\n", - " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"thickness\": 4, # atomic layers\n", + " \"vacuum\": VACUUM, # Angstroms\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": None # No interface for substrate\n", @@ -59,8 +58,7 @@ " \"slab_params\": {\n", " \"miller_indices\": (1,0,0),\n", " \"thickness\": 3,\n", - " \"vacuum\": FINAL_VACUUM,\n", - " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"vacuum\": VACUUM,\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": 2.5 # Distance to Si substrate\n", @@ -70,19 +68,17 @@ " \"slab_params\": {\n", " \"miller_indices\": (0,0,1),\n", " \"thickness\": 3,\n", - " \"vacuum\": FINAL_VACUUM,\n", - " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"vacuum\": VACUUM,\n", " \"use_orthogonal_z\": True\n", " },\n", - " \"interface_distance\": 2.8 # Distance to SiO2\n", + " \"interface_distance\": 2.5 # Distance to SiO2\n", " },\n", " {\n", " # TiN layer\n", " \"slab_params\": {\n", - " \"miller_indices\": (0, 0, 1),\n", + " \"miller_indices\": (0,0, 1),\n", " \"thickness\": 3,\n", - " \"vacuum\": FINAL_VACUUM, # Add vacuum to final layer\n", - " \"xy_supercell_matrix\": [[1, 0], [0, 1]],\n", + " \"vacuum\": VACUUM, # Add vacuum to final layer\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": 2.5 # Distance to HfO2\n", @@ -92,14 +88,10 @@ "INTERFACE_1_INDEX = 11\n" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-12-26T03:28:25.952389Z", - "start_time": "2024-12-26T03:28:25.938943Z" - } + "collapsed": false }, "id": "813b06d4d77a8507", - "execution_count": 1 + "execution_count": null }, { "cell_type": "markdown", @@ -138,14 +130,10 @@ "]\n" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-12-26T03:28:32.102086Z", - "start_time": "2024-12-26T03:28:25.972101Z" - } + "collapsed": false }, "id": "deaa451cfe2f8dc0", - "execution_count": 2 + "execution_count": null }, { "cell_type": "markdown", @@ -159,40 +147,7 @@ }, { "cell_type": "code", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Interface will be built with terminations: (Si_P4/mmm_1, Si_Pmmm_1)\n", - "Interface will be built with terminations: (Si_P4/mmm_1, Si_Pmmm_1)\n" - ] - }, - { - "data": { - "text/plain": "GridBox(children=(VBox(children=(Label(value='O108Si198 - Si/SiO2 Interface - rotation: 0x,0y,0z', layout=Layo…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "b7946978dc3b4866bd8e88363811f666" - } - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": "GridBox(children=(VBox(children=(Label(value='O108Si198 - Si/SiO2 Interface - rotation: -90x', layout=Layout(a…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "69f28eeac9b7456f8643c8a1a28805cd" - } - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from mat3ra.made.tools.build.slab import PymatgenSlabGeneratorParameters\n", "\n", @@ -256,14 +211,10 @@ "\n" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-12-26T03:28:47.420848Z", - "start_time": "2024-12-26T03:28:32.104683Z" - } + "collapsed": false }, "id": "59c8eb0e549ee69e", - "execution_count": 3 + "execution_count": null }, { "cell_type": "markdown", @@ -277,40 +228,7 @@ }, { "cell_type": "code", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Film terminations: [O2_P-1_2, O2_P4/mmm_1, Hf_P4/mmm_1, O2_P4/mmm_1]\n", - "Substrate terminations: [Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_12, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, Si_P2_1/m_12, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, Si_P2_1/m_12, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, O2_Pmmm_6, Si_Pmmm_6]\n" - ] - }, - { - "data": { - "text/plain": "GridBox(children=(VBox(children=(Label(value='Hf12O132Si198 - Si/SiO2/HfO2 Interface - rotation: 0x,0y,0z', la…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "8f7d841f788047fa925b782ebc450285" - } - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": "GridBox(children=(VBox(children=(Label(value='Hf12O132Si198 - Si/SiO2/HfO2 Interface - rotation: -90x', layout…", - "application/vnd.jupyter.widget-view+json": { - "version_major": 2, - "version_minor": 0, - "model_id": "b6b8285f0ac04a6c91bf16e64e3e0700" - } - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from mat3ra.made.tools.build.interface import SimpleInterfaceBuilder, SimpleInterfaceBuilderParameters\n", "\n", @@ -342,7 +260,7 @@ " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", ")\n", "\n", - "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True))\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, slab_as_is=True))\n", "interface = builder.get_material(configuration=interface_config)\n", "\n", "visualize(\n", @@ -359,14 +277,10 @@ ")\n" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-12-26T03:29:20.477794Z", - "start_time": "2024-12-26T03:28:47.423339Z" - } + "collapsed": false }, "id": "670fc0c56e8b22b5", - "execution_count": 4 + "execution_count": null }, { "cell_type": "markdown", @@ -382,8 +296,12 @@ "cell_type": "code", "outputs": [], "source": [ + "from mat3ra.made.tools.build.supercell import create_supercell\n", + "\n", "film_params = STRUCTURE_PARAMS[3]\n", "\n", + "interface = create_supercell(interface, scaling_factor=[1,1,-1])\n", + "\n", "film_config = SlabConfiguration(\n", " bulk=materials_2[1],\n", " **film_params[\"slab_params\"]\n", @@ -409,7 +327,7 @@ " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", ")\n", "\n", - "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True))\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, slab_as_is=True))\n", "\n", "interface = builder.get_material(configuration=interface_config)\n", "\n", @@ -425,14 +343,12 @@ " title=\"Si/SiO2/HfO2/TiN Interface\",\n", " rotation='-90x'\n", ")\n", - "\n" + "\n", + "# invert the interface along the z-axis to match example\n", + "interface = create_supercell(interface, scaling_factor=[1,1,-1])" ], "metadata": { - "collapsed": false, - "is_executing": true, - "ExecuteTime": { - "start_time": "2024-12-26T03:29:20.482245Z" - } + "collapsed": false }, "id": "46bce40c8d46f8bb", "execution_count": null @@ -471,7 +387,8 @@ "metadata": { "collapsed": false }, - "id": "803792030da3a97" + "id": "803792030da3a97", + "execution_count": null } ], "metadata": { From c0eab5a7288622e1a669291012d9da89a6d28fd2 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Wed, 25 Dec 2024 22:11:15 -0800 Subject: [PATCH 04/12] update: use updates in made --- .../heterostructure_high_k_metal_gate.ipynb | 165 ++++++++++-------- 1 file changed, 90 insertions(+), 75 deletions(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index 047f25d9..cf69d3eb 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -2,36 +2,41 @@ "cells": [ { "cell_type": "markdown", - "source": [], + "id": "e96bfb09b980e52b", "metadata": { "collapsed": false }, - "id": "e96bfb09b980e52b" + "source": [] }, { "cell_type": "markdown", + "id": "3ae4cc7db0846f04", + "metadata": { + "collapsed": false + }, "source": [ "# Create High-k Metal Gate Stack Tutorial\n", "\n", "This notebook demonstrates how to create a high-k metal gate stack heterostructure with four materials: Si (substrate), SiO2 (gate oxide), HfO2 (high-k dielectric), and TiN (metal gate).\n" - ], - "metadata": { - "collapsed": false - }, - "id": "3ae4cc7db0846f04" + ] }, { "cell_type": "markdown", - "source": [ - "## 1. Configuration Parameters\n" - ], + "id": "f1db6e522c6716dc", "metadata": { "collapsed": false }, - "id": "f1db6e522c6716dc" + "source": [ + "## 1. Configuration Parameters\n" + ] }, { "cell_type": "code", + "execution_count": 6, + "id": "813b06d4d77a8507", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "# Global parameters\n", @@ -67,8 +72,9 @@ " # HfO2 layer\n", " \"slab_params\": {\n", " \"miller_indices\": (0,0,1),\n", - " \"thickness\": 3,\n", - " \"vacuum\": VACUUM,\n", + " \"thickness\": 4,\n", + " \"vacuum\": 0.5,\n", + " \"xy_supercell_matrix\": [[1, 0], [0, 2]],\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": 2.5 # Distance to SiO2\n", @@ -86,25 +92,25 @@ "]\n", "\n", "INTERFACE_1_INDEX = 11\n" - ], - "metadata": { - "collapsed": false - }, - "id": "813b06d4d77a8507", - "execution_count": null + ] }, { "cell_type": "markdown", - "source": [ - "## 2. Environment Setup and Material Loading\n" - ], + "id": "b076b018bd5efe10", "metadata": { "collapsed": false }, - "id": "b076b018bd5efe10" + "source": [ + "## 2. Environment Setup and Material Loading\n" + ] }, { "cell_type": "code", + "execution_count": 7, + "id": "deaa451cfe2f8dc0", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from mat3ra.standata.materials import Materials\n", @@ -128,25 +134,25 @@ " Material(Materials.get_by_name_first_match(\"HfO2\")), # HfO2\n", " Material(Materials.get_by_name_first_match(\"TiN\")), # TiN\n", "]\n" - ], - "metadata": { - "collapsed": false - }, - "id": "deaa451cfe2f8dc0", - "execution_count": null + ] }, { "cell_type": "markdown", - "source": [ - "## 3. Create Si/SiO2 Interface" - ], + "id": "9fe9b39b05f1dc7e", "metadata": { "collapsed": false }, - "id": "9fe9b39b05f1dc7e" + "source": [ + "## 3. Create Si/SiO2 Interface" + ] }, { "cell_type": "code", + "execution_count": null, + "id": "59c8eb0e549ee69e", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from mat3ra.made.tools.build.slab import PymatgenSlabGeneratorParameters\n", @@ -209,25 +215,25 @@ "\n", "\n", "\n" - ], - "metadata": { - "collapsed": false - }, - "id": "59c8eb0e549ee69e", - "execution_count": null + ] }, { "cell_type": "markdown", - "source": [ - "## 2. Add HfO2 Layer" - ], + "id": "4cc11d87adc5d979", "metadata": { "collapsed": false }, - "id": "4cc11d87adc5d979" + "source": [ + "## 2. Add HfO2 Layer" + ] }, { "cell_type": "code", + "execution_count": null, + "id": "670fc0c56e8b22b5", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from mat3ra.made.tools.build.interface import SimpleInterfaceBuilder, SimpleInterfaceBuilderParameters\n", @@ -239,6 +245,13 @@ " **film_params[\"slab_params\"]\n", ")\n", "\n", + "hfo2_slab= create_slab(film_config, build_parameters=params)\n", + "\n", + "film_config = SlabConfiguration(\n", + " bulk=hfo2_slab,\n", + " **film_params[\"slab_params\"]\n", + ")\n", + "\n", "substrate_config = SlabConfiguration(\n", " bulk=interface_1,\n", " miller_indices=(0,0,1)\n", @@ -260,7 +273,7 @@ " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", ")\n", "\n", - "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, slab_as_is=True))\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, build_slabs=False))\n", "interface = builder.get_material(configuration=interface_config)\n", "\n", "visualize(\n", @@ -275,25 +288,25 @@ " title=\"Si/SiO2/HfO2 Interface\",\n", " rotation='-90x'\n", ")\n" - ], - "metadata": { - "collapsed": false - }, - "id": "670fc0c56e8b22b5", - "execution_count": null + ] }, { "cell_type": "markdown", - "source": [ - "## 3. Add TiN Layer" - ], + "id": "93705fda2bacc16e", "metadata": { "collapsed": false }, - "id": "93705fda2bacc16e" + "source": [ + "## 3. Add TiN Layer" + ] }, { "cell_type": "code", + "execution_count": null, + "id": "46bce40c8d46f8bb", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from mat3ra.made.tools.build.supercell import create_supercell\n", @@ -307,6 +320,13 @@ " **film_params[\"slab_params\"]\n", ")\n", "\n", + "tin_slab = create_slab(film_config, build_parameters=params)\n", + "\n", + "film_config = SlabConfiguration(\n", + " bulk=tin_slab,\n", + " **film_params[\"slab_params\"]\n", + ")\n", + "\n", "substrate_config = SlabConfiguration(\n", " bulk=interface,\n", " miller_indices=(0,0,1)\n", @@ -327,7 +347,7 @@ " vacuum=film_params[\"slab_params\"][\"vacuum\"]\n", ")\n", "\n", - "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, slab_as_is=True))\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, build_slabs=False))\n", "\n", "interface = builder.get_material(configuration=interface_config)\n", "\n", @@ -346,25 +366,25 @@ "\n", "# invert the interface along the z-axis to match example\n", "interface = create_supercell(interface, scaling_factor=[1,1,-1])" - ], - "metadata": { - "collapsed": false - }, - "id": "46bce40c8d46f8bb", - "execution_count": null + ] }, { "cell_type": "markdown", - "source": [ - "## 4. Final Structure Visualization and Analysis\n" - ], + "id": "ae16540b54491e35", "metadata": { "collapsed": false }, - "id": "ae16540b54491e35" + "source": [ + "## 4. Final Structure Visualization and Analysis\n" + ] }, { "cell_type": "code", + "execution_count": null, + "id": "803792030da3a97", + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from utils.jupyterlite import set_materials\n", @@ -383,31 +403,26 @@ ")\n", "\n", "set_materials(interface)" - ], - "metadata": { - "collapsed": false - }, - "id": "803792030da3a97", - "execution_count": null + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv-3.11", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.11.7" } }, "nbformat": 4, From ed9d3911392cc398d3d146ccb6cf0c2432b62c02 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:43:07 -0800 Subject: [PATCH 05/12] chore: restructure notebook --- .../heterostructure_high_k_metal_gate.ipynb | 224 ++++++++++++------ 1 file changed, 149 insertions(+), 75 deletions(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index cf69d3eb..c1980027 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "813b06d4d77a8507", "metadata": { "collapsed": false @@ -40,11 +40,10 @@ "outputs": [], "source": [ "# Global parameters\n", - "MAX_AREA = [200,200,260] # Maximum area for strain matching\n", + "MAX_AREA = 200 # Maximum area for strain matching\n", "MAX_AREA_RATIO_TOL = 0.25 # Maximum area ratio tolerance for strain matching\n", "MAX_ANGLE_TOLERANCE = 0.15 # Maximum angle tolerance for strain matching\n", "MAX_LENGTH_TOLERANCE = 0.15 # Maximum length tolerance for strain matching\n", - "VACUUM = 10.0 # Final vacuum spacing in Angstroms\n", "\n", "# Structure parameters for each layer\n", "STRUCTURE_PARAMS = [\n", @@ -53,7 +52,7 @@ " \"slab_params\": {\n", " \"miller_indices\": (1, 0, 0),\n", " \"thickness\": 4, # atomic layers\n", - " \"vacuum\": VACUUM, # Angstroms\n", + " \"vacuum\": 5.0, # Angstroms\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": None # No interface for substrate\n", @@ -63,7 +62,7 @@ " \"slab_params\": {\n", " \"miller_indices\": (1,0,0),\n", " \"thickness\": 3,\n", - " \"vacuum\": VACUUM,\n", + " \"vacuum\": 5.0,\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": 2.5 # Distance to Si substrate\n", @@ -84,48 +83,67 @@ " \"slab_params\": {\n", " \"miller_indices\": (0,0, 1),\n", " \"thickness\": 3,\n", - " \"vacuum\": VACUUM, # Add vacuum to final layer\n", + " \"vacuum\": 10.0, # Add vacuum to final layer\n", " \"use_orthogonal_z\": True\n", " },\n", " \"interface_distance\": 2.5 # Distance to HfO2\n", " }\n", "]\n", "\n", - "INTERFACE_1_INDEX = 11\n" + "INTERFACE_1_INDEX = 11\n", + "INTERFACE_2_INDEX = 0\n", + "INTERFACE_3_INDEX = 0\n" ] }, { "cell_type": "markdown", - "id": "b076b018bd5efe10", + "source": [ + "### 1.2. Install Packages\n", + "The step executes only in Pyodide environment. For other environments, the packages should be installed via `pip install` (see [README](../../README.ipynb))." + ], "metadata": { "collapsed": false }, - "source": [ - "## 2. Environment Setup and Material Loading\n" - ] + "id": "a671bb0a66616061" }, { "cell_type": "code", - "execution_count": 7, - "id": "deaa451cfe2f8dc0", + "outputs": [], + "source": [ + "import sys\n", + "\n", + "if sys.platform == \"emscripten\":\n", + " import micropip\n", + "\n", + " await micropip.install('mat3ra-api-examples', deps=False)\n", + " from utils.jupyterlite import install_packages\n", + "\n", + " await install_packages(\"specific_examples\")" + ], + "metadata": { + "collapsed": false + }, + "id": "c11956a7712639b9", + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### 1.3. Get input material\n", + "In this notebook we will use materials from Standata." + ], "metadata": { "collapsed": false }, + "id": "15599efa4b241366" + }, + { + "cell_type": "code", "outputs": [], "source": [ - "from mat3ra.standata.materials import Materials\n", "from mat3ra.made.material import Material\n", - "from mat3ra.made.tools.build.slab import SlabConfiguration, get_terminations, create_slab\n", - "from mat3ra.made.tools.build.interface import (\n", - " InterfaceConfiguration,\n", - " ZSLStrainMatchingParameters,\n", - " ZSLStrainMatchingInterfaceBuilder,\n", - " ZSLStrainMatchingInterfaceBuilderParameters\n", - ")\n", - "from mat3ra.made.tools.modify import translate_to_z_level\n", - "from utils.visualize import visualize_materials as visualize\n", + "from mat3ra.standata.materials import Materials\n", "\n", - "# Load materials from Standata\n", "materials_1 = [\n", " Material(Materials.get_by_name_first_match(\"SiO2\")), # SiO2\n", " Material(Materials.get_by_name_first_match(\"Silicon\")), # Si substrate\n", @@ -133,8 +151,13 @@ "materials_2 = [\n", " Material(Materials.get_by_name_first_match(\"HfO2\")), # HfO2\n", " Material(Materials.get_by_name_first_match(\"TiN\")), # TiN\n", - "]\n" - ] + "]" + ], + "metadata": { + "collapsed": false + }, + "id": "474383a5e0f70d6", + "execution_count": null }, { "cell_type": "markdown", @@ -143,7 +166,8 @@ "collapsed": false }, "source": [ - "## 3. Create Si/SiO2 Interface" + "## 2. Create Si/SiO2 Interface\n", + "### 2.1. Create Si/SiO2 Interface" ] }, { @@ -155,8 +179,14 @@ }, "outputs": [], "source": [ - "from mat3ra.made.tools.build.slab import PymatgenSlabGeneratorParameters\n", - "\n", + "from mat3ra.made.tools.build.slab import SlabConfiguration, get_terminations, create_slab, PymatgenSlabGeneratorParameters\n", + "from mat3ra.made.tools.build.interface import (\n", + " InterfaceConfiguration,\n", + " ZSLStrainMatchingParameters,\n", + " ZSLStrainMatchingInterfaceBuilder,\n", + " ZSLStrainMatchingInterfaceBuilderParameters\n", + ")\n", + "from utils.visualize import visualize_materials as visualize\n", "\n", "film_params = STRUCTURE_PARAMS[1]\n", "substrate_params = STRUCTURE_PARAMS[0]\n", @@ -192,30 +222,46 @@ "\n", "builder = ZSLStrainMatchingInterfaceBuilder(\n", " build_parameters=ZSLStrainMatchingInterfaceBuilderParameters(\n", - " strain_matching_parameters=ZSLStrainMatchingParameters(max_area=MAX_AREA[0], max_area_ratio_tol=MAX_AREA_RATIO_TOL, max_angle_tol=MAX_ANGLE_TOLERANCE, max_length_tol=MAX_LENGTH_TOLERANCE)\n", + " strain_matching_parameters=ZSLStrainMatchingParameters(max_area=MAX_AREA, max_area_ratio_tol=MAX_AREA_RATIO_TOL, max_angle_tol=MAX_ANGLE_TOLERANCE, max_length_tol=MAX_LENGTH_TOLERANCE)\n", " )\n", ")\n", "\n", "interfaces = builder.get_materials(configuration=interface_config)\n", - "\n", + "interface_1 = interfaces[INTERFACE_1_INDEX]" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 2.2. Visualize the Si/SiO2 Interface" + ], + "metadata": { + "collapsed": false + }, + "id": "b4d5e3261b720c9d" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ "visualize(\n", - " interfaces[11],\n", + " interface_1,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2 Interface\"\n", ")\n", "\n", "visualize(\n", - " interfaces[11],\n", + " interface_1,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2 Interface\",\n", " rotation='-90x'\n", - ")\n", - "\n", - "interface_1 = interfaces[INTERFACE_1_INDEX]\n", - "\n", - "\n", - "\n" - ] + ")\n" + ], + "metadata": { + "collapsed": false + }, + "id": "49c046cf4517ad91", + "execution_count": null }, { "cell_type": "markdown", @@ -224,7 +270,8 @@ "collapsed": false }, "source": [ - "## 2. Add HfO2 Layer" + "## 3. Add HfO2 Layer\n", + "### 3.1. Add a layer with SimpleInterfaceBuilder" ] }, { @@ -274,21 +321,41 @@ ")\n", "\n", "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, build_slabs=False))\n", - "interface = builder.get_material(configuration=interface_config)\n", - "\n", + "interface_2 = builder.get_material(configuration=interface_config)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 3.2. Visualize the Si/SiO2/HfO2 Interface" + ], + "metadata": { + "collapsed": false + }, + "id": "6f62d46be77dbf7f" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ "visualize(\n", - " interface,\n", + " interface_2,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2/HfO2 Interface\"\n", ")\n", "\n", "visualize(\n", - " interface,\n", + " interface_2,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2/HfO2 Interface\",\n", " rotation='-90x'\n", - ")\n" - ] + ")" + ], + "metadata": { + "collapsed": false + }, + "id": "5ddc3d75b43a3926" }, { "cell_type": "markdown", @@ -297,7 +364,8 @@ "collapsed": false }, "source": [ - "## 3. Add TiN Layer" + "## 4. Add TiN Layer\n", + "### 4.1. Add a layer with SimpleInterfaceBuilder" ] }, { @@ -313,7 +381,7 @@ "\n", "film_params = STRUCTURE_PARAMS[3]\n", "\n", - "interface = create_supercell(interface, scaling_factor=[1,1,-1])\n", + "interface_2 = create_supercell(interface_2, scaling_factor=[1, 1, -1])\n", "\n", "film_config = SlabConfiguration(\n", " bulk=materials_2[1],\n", @@ -328,7 +396,7 @@ ")\n", "\n", "substrate_config = SlabConfiguration(\n", - " bulk=interface,\n", + " bulk=interface_2,\n", " miller_indices=(0,0,1)\n", ")\n", "\n", @@ -349,24 +417,43 @@ "\n", "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True, build_slabs=False))\n", "\n", - "interface = builder.get_material(configuration=interface_config)\n", - "\n", + "interface_3 = builder.get_material(configuration=interface_config)\n", + "# invert the interface along the z-axis to match example\n", + "interface_3 = create_supercell(interface_3, scaling_factor=[1, 1, -1])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 4.2. Visualize the Si/SiO2/HfO2/TiN Interface" + ], + "metadata": { + "collapsed": false + }, + "id": "de4385aa81264e6b" + }, + { + "cell_type": "code", + "outputs": [], + "source": [ "visualize(\n", - " interface,\n", + " interface_3,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2/HfO2/TiN Interface\"\n", ")\n", "\n", "visualize(\n", - " interface,\n", + " interface_3,\n", " repetitions=[1, 1, 1],\n", " title=\"Si/SiO2/HfO2/TiN Interface\",\n", " rotation='-90x'\n", - ")\n", - "\n", - "# invert the interface along the z-axis to match example\n", - "interface = create_supercell(interface, scaling_factor=[1,1,-1])" - ] + ")" + ], + "metadata": { + "collapsed": false + }, + "id": "2b3fda71c801aeff" }, { "cell_type": "markdown", @@ -375,7 +462,7 @@ "collapsed": false }, "source": [ - "## 4. Final Structure Visualization and Analysis\n" + "## 5. Save final material\n" ] }, { @@ -387,22 +474,9 @@ }, "outputs": [], "source": [ - "from utils.jupyterlite import set_materials\n", - "\n", - "visualize(\n", - " interface,\n", - " repetitions=[1, 1, 1],\n", - " title=\"Si/SiO2/HfO2/TiN Interface\",\n", - ")\n", - "\n", - "visualize(\n", - " interface,\n", - " repetitions=[1, 1, 1],\n", - " title=\"Si/SiO2/HfO2/TiN Interface\",\n", - " rotation='-90x'\n", - ")\n", + "from utils.jupyterlite import download_content_to_file\n", "\n", - "set_materials(interface)" + "download_content_to_file(interface_3, \"heterostructure_high_k_metal_gate.json\")" ] } ], From 34f41640a0f92363ad99048ccef494ea2b5ed796 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:16:52 -0800 Subject: [PATCH 06/12] chore: cleanup: --- .../heterostructure_high_k_metal_gate.ipynb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index c1980027..e015236b 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -90,9 +90,7 @@ " }\n", "]\n", "\n", - "INTERFACE_1_INDEX = 11\n", - "INTERFACE_2_INDEX = 0\n", - "INTERFACE_3_INDEX = 0\n" + "INTERFACE_1_INDEX = 11 " ] }, { @@ -355,7 +353,8 @@ "metadata": { "collapsed": false }, - "id": "5ddc3d75b43a3926" + "id": "5ddc3d75b43a3926", + "execution_count": null }, { "cell_type": "markdown", From 24c881bd5c953d8a3a80714783b6daac04bf708a Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:19:56 -0800 Subject: [PATCH 07/12] update: add a new flag from made --- .../create_interface_with_no_strain_matching.ipynb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/other/materials_designer/create_interface_with_no_strain_matching.ipynb b/other/materials_designer/create_interface_with_no_strain_matching.ipynb index 8d726c28..ca5085a9 100644 --- a/other/materials_designer/create_interface_with_no_strain_matching.ipynb +++ b/other/materials_designer/create_interface_with_no_strain_matching.ipynb @@ -44,6 +44,7 @@ "IS_TERMINATIONS_SELECTION_INTERACTIVE = False \n", "# Enable scaling of the film slab atomic coordinates to match the substrate lattice (preserve coordinates in crystal units).\n", "ENABLE_FILM_SCALING = True\n", + "CREATE_SLABS = True\n", "\n", "FILM_INDEX = 1\n", "FILM_MILLER_INDICES = (0, 0, 1)\n", @@ -314,9 +315,7 @@ " substrate_termination=substrate_termination,\n", " interface_distance=INTERFACE_DISTANCE, # in Angstrom\n", " interface_vacuum=INTERFACE_VACUUM # in Angstrom\n", - ")\n", - "\n", - "interface = create_interface(interface_configuration)" + ")" ] }, { @@ -333,9 +332,9 @@ "outputs": [], "source": [ "from mat3ra.made.tools.build.interface import SimpleInterfaceBuilder, SimpleInterfaceBuilderParameters\n", - "if ENABLE_FILM_SCALING:\n", - " builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=True))\n", - " interface = builder.get_material(configuration=interface_configuration)" + "\n", + "builder = SimpleInterfaceBuilder(build_parameters=SimpleInterfaceBuilderParameters(scale_film=ENABLE_FILM_SCALING, create_slabs=CREATE_SLABS))\n", + "interface = builder.get_material(configuration=interface_configuration)" ], "metadata": { "collapsed": false From ecdf3388ec80da7f3d659d20d9fef13a997b1494 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 12:16:18 -0800 Subject: [PATCH 08/12] update: add additional params for ZSL --- .../create_interface_with_min_strain_zsl.ipynb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/other/materials_designer/create_interface_with_min_strain_zsl.ipynb b/other/materials_designer/create_interface_with_min_strain_zsl.ipynb index 0b290348..a4f4b1de 100644 --- a/other/materials_designer/create_interface_with_min_strain_zsl.ipynb +++ b/other/materials_designer/create_interface_with_min_strain_zsl.ipynb @@ -52,21 +52,25 @@ "IS_TERMINATIONS_SELECTION_INTERACTIVE = False \n", "\n", "FILM_INDEX = 1 # Index in the list of materials, to access as materials[FILM_INDEX]\n", - "FILM_MILLER_INDICES = (0, 0, 1)\n", + "FILM_MILLER_INDICES = (0,0,1)\n", "FILM_THICKNESS = 1 # in atomic layers\n", "FILM_VACUUM = 0.0 # in angstroms\n", "FILM_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n", "FILM_USE_ORTHOGONAL_Z = True\n", "\n", "SUBSTRATE_INDEX = 0\n", - "SUBSTRATE_MILLER_INDICES = (1, 1, 1)\n", + "SUBSTRATE_MILLER_INDICES = (0,0,1)\n", "SUBSTRATE_THICKNESS = 3 # in atomic layers\n", - "SUBSTRATE_VACUUM = 3.0 # in angstroms\n", + "SUBSTRATE_VACUUM = 0.0 # in angstroms\n", "SUBSTRATE_XY_SUPERCELL_MATRIX = [[1, 0], [0, 1]]\n", "SUBSTRATE_USE_ORTHOGONAL_Z = True\n", "\n", "# Maximum area for the superlattice search algorithm\n", "MAX_AREA = 50 # in Angstrom^2\n", + "# Additional fine-tuning parameters (increase values to get more strained matches):\n", + "MAX_AREA_TOLERANCE = 0.09 # in Angstrom^2\n", + "MAX_ANGLE_TOLERANCE = 0.03\n", + "MAX_LENGTH_TOLERANCE = 0.03\n", "# Set the termination pair indices\n", "TERMINATION_PAIR_INDEX = 0 # Will be overridden in interactive selection is used\n", "INTERFACE_DISTANCE = 3.0 # in Angstrom\n", @@ -338,7 +342,10 @@ "source": [ "from mat3ra.made.tools.build.interface import ZSLStrainMatchingParameters\n", "zsl_strain_matching_parameters = ZSLStrainMatchingParameters(\n", - " max_area=MAX_AREA\n", + " max_area=MAX_AREA,\n", + " max_area_tol=MAX_AREA_TOLERANCE,\n", + " max_angle_tol=MAX_ANGLE_TOLERANCE,\n", + " max_length_tol=MAX_LENGTH_TOLERANCE,\n", ")" ], "metadata": { From fb55d30983b97244eae676b11e5e8f38b71a895a Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 13:13:49 -0800 Subject: [PATCH 09/12] update :add manuscript inage --- .../heterostructure_high_k_metal_gate.ipynb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb index e015236b..c6d8084c 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb @@ -17,7 +17,11 @@ "source": [ "# Create High-k Metal Gate Stack Tutorial\n", "\n", - "This notebook demonstrates how to create a high-k metal gate stack heterostructure with four materials: Si (substrate), SiO2 (gate oxide), HfO2 (high-k dielectric), and TiN (metal gate).\n" + "This notebook demonstrates how to create a high-k metal gate stack heterostructure with four materials: Si (substrate), SiO2 (gate oxide), HfO2 (high-k dielectric), and TiN (metal gate).\n", + "\n", + "We'll create a representation of the material from the image without the amorphous step.\n", + "\n", + "\"High-k\n" ] }, { From 75417492cfc727ede04e16ab8ff32370c5696fd2 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Thu, 26 Dec 2024 13:23:23 -0800 Subject: [PATCH 10/12] chore: rename to match docs --- ...l_gate.ipynb => heterostructure_high_k_metal_gate_stack.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename other/materials_designer/specific_examples/{heterostructure_high_k_metal_gate.ipynb => heterostructure_high_k_metal_gate_stack.ipynb} (100%) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb similarity index 100% rename from other/materials_designer/specific_examples/heterostructure_high_k_metal_gate.ipynb rename to other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb From 74e73ffe19fc34f6de59ea1b0e4849db3ee405a6 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Fri, 27 Dec 2024 12:18:08 -0800 Subject: [PATCH 11/12] chore: explain a flag --- .../create_interface_with_no_strain_matching.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/other/materials_designer/create_interface_with_no_strain_matching.ipynb b/other/materials_designer/create_interface_with_no_strain_matching.ipynb index ca5085a9..26eb0202 100644 --- a/other/materials_designer/create_interface_with_no_strain_matching.ipynb +++ b/other/materials_designer/create_interface_with_no_strain_matching.ipynb @@ -44,7 +44,8 @@ "IS_TERMINATIONS_SELECTION_INTERACTIVE = False \n", "# Enable scaling of the film slab atomic coordinates to match the substrate lattice (preserve coordinates in crystal units).\n", "ENABLE_FILM_SCALING = True\n", - "CREATE_SLABS = True\n", + "# Create slabs for the film and substrate when creating the interface, otherwise use provided materials directly.\n", + "CREATE_SLABS = True \n", "\n", "FILM_INDEX = 1\n", "FILM_MILLER_INDICES = (0, 0, 1)\n", From 7d4befc35b2dbf8a143f21fede053ccf1b1cc7d5 Mon Sep 17 00:00:00 2001 From: VsevolodX <79542055+VsevolodX@users.noreply.github.com> Date: Fri, 27 Dec 2024 12:18:31 -0800 Subject: [PATCH 12/12] update: add link --- .../heterostructure_high_k_metal_gate_stack.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb index c6d8084c..0d7ca305 100644 --- a/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb +++ b/other/materials_designer/specific_examples/heterostructure_high_k_metal_gate_stack.ipynb @@ -19,7 +19,7 @@ "\n", "This notebook demonstrates how to create a high-k metal gate stack heterostructure with four materials: Si (substrate), SiO2 (gate oxide), HfO2 (high-k dielectric), and TiN (metal gate).\n", "\n", - "We'll create a representation of the material from the image without the amorphous step.\n", + "We'll create a representation of the material from the [QuantumATK tutorial](https://docs.quantumatk.com/tutorials/hkmg_builder/hkmg_builder.html) without the amorphous step.\n", "\n", "\"High-k\n" ]