├── .gitignore ├── LICENSE ├── MANIFEST.in ├── README.md ├── __init__.py ├── docs ├── .nojekyll ├── doctrees │ ├── environment.pickle │ ├── hetero2d │ │ ├── hetero2d.doctree │ │ ├── hetero2d.firetasks.doctree │ │ ├── hetero2d.fireworks.doctree │ │ ├── hetero2d.io.doctree │ │ ├── hetero2d.manipulate.doctree │ │ ├── hetero2d.workflow.doctree │ │ └── modules.doctree │ ├── index.doctree │ ├── modules.doctree │ └── project_intro │ │ ├── installation.doctree │ │ ├── introduction.doctree │ │ ├── modules.doctree │ │ ├── references.doctree │ │ └── team.doctree ├── html │ ├── .buildinfo │ ├── _images │ │ ├── github.png │ │ └── orcid.jpg │ ├── _sources │ │ ├── hetero2d │ │ │ ├── hetero2d.firetasks.rst.txt │ │ │ ├── hetero2d.fireworks.rst.txt │ │ │ ├── hetero2d.io.rst.txt │ │ │ ├── hetero2d.manipulate.rst.txt │ │ │ ├── hetero2d.rst.txt │ │ │ ├── hetero2d.workflow.rst.txt │ │ │ └── modules.rst.txt │ │ ├── index.rst.txt │ │ ├── modules.rst.txt │ │ └── project_intro │ │ │ ├── installation.rst.txt │ │ │ ├── introduction.rst.txt │ │ │ ├── modules.rst.txt │ │ │ ├── references.rst.txt │ │ │ └── team.rst.txt │ ├── _static │ │ ├── basic.css │ │ ├── css │ │ │ ├── badge_only.css │ │ │ ├── fonts │ │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ ├── lato-bold-italic.woff │ │ │ │ ├── lato-bold-italic.woff2 │ │ │ │ ├── lato-bold.woff │ │ │ │ ├── lato-bold.woff2 │ │ │ │ ├── lato-normal-italic.woff │ │ │ │ ├── lato-normal-italic.woff2 │ │ │ │ ├── lato-normal.woff │ │ │ │ └── lato-normal.woff2 │ │ │ └── theme.css │ │ ├── doctools.js │ │ ├── documentation_options.js │ │ ├── file.png │ │ ├── github.png │ │ ├── jquery-3.4.1.js │ │ ├── jquery.js │ │ ├── js │ │ │ ├── badge_only.js │ │ │ ├── html5shiv-printshiv.min.js │ │ │ ├── html5shiv.min.js │ │ │ └── theme.js │ │ ├── language_data.js │ │ ├── minus.png │ │ ├── orcid.jpg │ │ ├── plus.png │ │ ├── pygments.css │ │ ├── searchtools.js │ │ ├── underscore-1.3.1.js │ │ └── underscore.js │ ├── genindex.html │ ├── hetero2d │ │ ├── hetero2d.firetasks.html │ │ ├── hetero2d.fireworks.html │ │ ├── hetero2d.html │ │ ├── hetero2d.io.html │ │ ├── hetero2d.manipulate.html │ │ ├── hetero2d.workflow.html │ │ └── modules.html │ ├── index.html │ ├── modules.html │ ├── objects.inv │ ├── project_intro │ │ ├── installation.html │ │ ├── introduction.html │ │ ├── modules.html │ │ ├── references.html │ │ └── team.html │ ├── py-modindex.html │ ├── search.html │ └── searchindex.js └── index.html ├── examples ├── 2d_substrate_heterostructures.json ├── Complete Workflow Guide for Hetero-interfaces Workflow.ipynb ├── ExampleLayerSolver.ipynb ├── LayerSolver_CONTCAR ├── bulkcounterpart.png ├── example_structs.pkl ├── mos2.png └── zr.png ├── hetero2d ├── __init__.py ├── firetasks │ ├── __init__.py │ ├── heteroiface_tasks.py │ ├── parse_outputs.py │ ├── run_calc.py │ └── write_inputs.py ├── fireworks │ ├── __init__.py │ └── core.py ├── io │ ├── CMDLRelaxSet.yaml │ ├── VASPIncarBase.yaml │ ├── VaspInterfaceSet.py │ ├── __init__.py │ └── vdW_parameters.yaml ├── manipulate │ ├── __init__.py │ ├── heterotransmuter.py │ ├── layersolver.py │ └── utils.py └── workflow │ ├── __init__.py │ └── core.py ├── requirements.txt ├── setup.cfg ├── setup.py └── sphinx ├── .nojekyll ├── Makefile ├── _static ├── github.png └── orcid.jpg ├── conf.py ├── hetero2d ├── hetero2d.firetasks.rst ├── hetero2d.fireworks.rst ├── hetero2d.io.rst ├── hetero2d.manipulate.rst ├── hetero2d.rst ├── hetero2d.workflow.rst └── modules.rst ├── index.html ├── index.rst ├── make.bat ├── modules.rst └── project_intro ├── installation.rst ├── introduction.rst ├── modules.rst ├── references.rst └── team.rst /.gitignore: -------------------------------------------------------------------------------- 1 | # python directory 2 | __pycache__/ 3 | */__pycache__/ 4 | 5 | # sphinx doc 6 | sphinx/_build 7 | .idea/ 8 | .DS_Store 9 | 10 | # Jupyter notebook directory 11 | .ipynb_checkpoints/ 12 | examples/.ipynb_checkpoints/ 13 | 14 | # PyPy Wheel Directory 15 | dist/ 16 | build/ 17 | hetero2d.egg-info/ 18 | 19 | 20 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include pyproject.toml 2 | 3 | # Include the README 4 | include *.md 5 | 6 | # Include the license file 7 | include LICENSE 8 | 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hetero2d 2 | The Hetero2d package leverages well known computational tools: pymatgen, MPInterfaces, atomate, fireworks, and custodian to perform high-throughput *ab-initio* calculations. Hetero2d is tailored to addressing scientific questions regarding the stability of 2D-substrate hetero-structured materials using an all-in-one workflow approach to model the hetero-structures formed by arbitrary 2D materials and substrates. The workflow creates, computes, analyzes and stores all relevant simulation parameters and results in a queryable MongoDB database that can be accessed through our API. Check out our [documentation](https://cmdlab.github.io/Hetero2d/) or the [paper](https://doi.org/10.1016/j.commatsci.2022.111238)! 3 | 4 | ## Package Description 5 | The 2D-substrate hetero-structure workflow takes a given 2D material, 3D phase (bulk) of the 2D material, and a substrate, relaxes the structures using vdW-corrected DFT and creates hetero-structures subject to user constraints. The workflow analyzes and stores energetic stability information of various 2D hetero-structured materials to predict the feasibility of a substrate stabilizing a meta-stable 2D material 6 | 7 | Hetero2d provides automated routines for the generation of low-lattice mismatched hetero-structures for arbitrary 2D materials and substrate surfaces, the creation of van der Waals corrected density-functional theory (DFT) input files, the submission and monitoring of simulations on computing resources, the post-processing of the key parameters to compute (a) the interface interaction energy of 2D-substrate hetero-structures, (b) the identification of substrate-induced changes in interfacial structure, and (c) charge doping of the 2D material. 8 | 9 | ## Installation Instructions for Hetero2d 10 | IMPORTANT NOTE: Atomate and FireWorks do not run on Windows OS. You need a unix-based OS (Mac or Linux) in order for these packages to run. As such, all setup instructions are given for Unix systems. 11 | 12 | 1. Download the repo using **one** of the following methods: 13 | - ``gh repo clone cmdlab/Hetero2d`` (gh must be installed) 14 | - ``git clone https://github.com/cmdlab/Hetero2d.git`` 15 | - ``git clone git@github.com:cmdlab/Hetero2d.git`` 16 | 2. Install Hetero2d in a clean python enviromnent using python>=3.9. I suggest using Anaconda3 to manange environments. 17 | - ``conda create --name hetero2d python=3.9`` 18 | 3. Activate the Hetero2d virtual environment and install the package from the Hetero2d directory: 19 | - ``pip install -r requirements.txt`` 20 | 4. After installation, Hetero2d needs to be added to your python path. This can be done by running the first line below **OR** by adding the 2nd line listed below to your *.bashrc* file. Only necessary if python cannot find the package or the setup.py failed for some reason. 21 | - ``python setup.py develop`` or ``python setup.py install`` 22 | - ``export PYTHONPATH="$HOME/path_to_package/Hetero2d:$PYTHONPATH"`` 23 | 5. If this is your first time installing the package dependencies listed below, please ensure you have followed the respective setup instructions: 24 | - [atomate](https://atomate.org/) 25 | - [FireWorks](https://materialsproject.github.io/fireworks/installation.html) 26 | - [pymatgen](https://pymatgen.org/installation.html) 27 | 6. To run jupyter notebooks on various resources the ipykernel has to be installed. Sometimes this isn't enough and you need explicitly add the kernel to the list of environments. Via the command line: 28 | - Activate your environment ``conda activate hetero2d`` 29 | - ``python -m ipykernel install --user --name hetero2d`` 30 | 31 | ## Setting up dependancies 32 | The Hetero2d package dependancies have a lot of documentation to look over. I will highlight the essential documentation to get started as quickly as possible. 33 | 1. *atomate* requires the most set up. Mainly, creating a directory scaffold and writing the 5 required files to connect to the database and run jobs. (MongoDB or free Atlas MongoDB is required) 34 | 2. *pymatgen* has a command line tool installed to set up default directory paths called pmg. There are 2 essential commands you have to run to use Hetero2d on any system. 35 | - Reference directory for the VASP POTCARs. You need to have the POTCARs from VASP yourself. 36 | - `pmg config -p ` 37 | - Default pseudopotential files from VASP 38 | - `pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_54` 39 | 40 | ## Examples 41 | To get started using Hetero2d, various tutorials and examples have been created using Jupyter Notebooks. These notebooks demonstrate the basic functionality of Hetero2d to enable users to quickly learn how to use the various modules within this package. These can be found under Hetero2d/examples. 42 | 43 | ## Issues Installing 44 | 1. If you have a new install you likely do not have the gcc compiler that pymatgen requires. In that case run 45 | - `sudo apt install build-essential` 46 | - `sudo apt-get install manpages-dev` 47 | 48 | ## How to cite Hetero2d 49 | If you use Hetero2d in your research, please consider citing the paper! 50 | 51 | > Tara M. Boland, Arunima K. Singh. *Computational synthesis of 2D materials: A high-throughput approach to materials design.* Computational Materials Science, 2022, 207, 111238. [doi:10.1016/j.commatsci.2022.111238](https://doi.org/10.1016/j.commatsci.2022.111238) 52 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara Boland ' 2 | __version__ = '1.0.0' 3 | 4 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.firetasks.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.firetasks.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.fireworks.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.fireworks.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.io.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.io.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.manipulate.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.manipulate.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/hetero2d.workflow.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/hetero2d.workflow.doctree -------------------------------------------------------------------------------- /docs/doctrees/hetero2d/modules.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/hetero2d/modules.doctree -------------------------------------------------------------------------------- /docs/doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/index.doctree -------------------------------------------------------------------------------- /docs/doctrees/modules.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/modules.doctree -------------------------------------------------------------------------------- /docs/doctrees/project_intro/installation.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/project_intro/installation.doctree -------------------------------------------------------------------------------- /docs/doctrees/project_intro/introduction.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/project_intro/introduction.doctree -------------------------------------------------------------------------------- /docs/doctrees/project_intro/modules.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/project_intro/modules.doctree -------------------------------------------------------------------------------- /docs/doctrees/project_intro/references.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/project_intro/references.doctree -------------------------------------------------------------------------------- /docs/doctrees/project_intro/team.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/doctrees/project_intro/team.doctree -------------------------------------------------------------------------------- /docs/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: aa16c9d355b0127c0c1845a80be49b79 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/html/_images/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_images/github.png -------------------------------------------------------------------------------- /docs/html/_images/orcid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_images/orcid.jpg -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.firetasks.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d.firetasks package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.firetasks.heteroiface\_tasks module 8 | -------------------------------------------- 9 | 10 | .. automodule:: hetero2d.firetasks.heteroiface_tasks 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | hetero2d.firetasks.parse\_outputs module 16 | ---------------------------------------- 17 | 18 | .. automodule:: hetero2d.firetasks.parse_outputs 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | hetero2d.firetasks.run\_calc module 24 | ----------------------------------- 25 | 26 | .. automodule:: hetero2d.firetasks.run_calc 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | 31 | hetero2d.firetasks.write\_inputs module 32 | --------------------------------------- 33 | 34 | .. automodule:: hetero2d.firetasks.write_inputs 35 | :members: 36 | :undoc-members: 37 | :show-inheritance: 38 | 39 | Module contents 40 | --------------- 41 | 42 | .. automodule:: hetero2d.firetasks 43 | :members: 44 | :undoc-members: 45 | :show-inheritance: 46 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.fireworks.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d.fireworks package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.fireworks.core module 8 | ------------------------------ 9 | 10 | .. automodule:: hetero2d.fireworks.core 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.fireworks 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.io.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d.io package 2 | =================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.io.VaspInterfaceSet module 8 | ----------------------------------- 9 | 10 | .. automodule:: hetero2d.io.VaspInterfaceSet 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.io 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.manipulate.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d.manipulate package 2 | =========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.manipulate.heterotransmuter module 8 | ------------------------------------------- 9 | 10 | .. automodule:: hetero2d.manipulate.heterotransmuter 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | hetero2d.manipulate.layersolver module 16 | -------------------------------------- 17 | 18 | .. automodule:: hetero2d.manipulate.layersolver 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | hetero2d.manipulate.utils module 24 | -------------------------------- 25 | 26 | .. automodule:: hetero2d.manipulate.utils 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | 31 | Module contents 32 | --------------- 33 | 34 | .. automodule:: hetero2d.manipulate 35 | :members: 36 | :undoc-members: 37 | :show-inheritance: 38 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d package 2 | ================ 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | hetero2d.firetasks 11 | hetero2d.fireworks 12 | hetero2d.io 13 | hetero2d.manipulate 14 | hetero2d.workflow 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: hetero2d 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/hetero2d.workflow.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d.workflow package 2 | ========================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.workflow.core module 8 | ----------------------------- 9 | 10 | .. automodule:: hetero2d.workflow.core 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.workflow 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/html/_sources/hetero2d/modules.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | hetero2d 8 | -------------------------------------------------------------------------------- /docs/html/_sources/index.rst.txt: -------------------------------------------------------------------------------- 1 | .. Hetero2d documentation master file, created by 2 | sphinx-quickstart on Tue Aug 3 17:24:39 2021. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Welcome to Hetero2d's documentation! 7 | ===================================== 8 | 9 | .. toctree:: 10 | :maxdepth: 1 11 | :caption: Contents: 12 | 13 | project_intro/modules 14 | Documentation 15 | 16 | Indices and tables 17 | =================== 18 | 19 | * :ref:`genindex` 20 | * :ref:`modindex` 21 | * :ref:`search` 22 | 23 | -------------------------------------------------------------------------------- /docs/html/_sources/modules.rst.txt: -------------------------------------------------------------------------------- 1 | hetero2d 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | project_intro/modules 8 | Documentation 9 | 10 | -------------------------------------------------------------------------------- /docs/html/_sources/project_intro/installation.rst.txt: -------------------------------------------------------------------------------- 1 | ===================== 2 | Installing Hetero2d 3 | ===================== 4 | 5 | IMPORTANT NOTE: Atomate and FireWorks do not run on Windows OS. You need a unix-based OS (Mac or Linux) in order for these packages to run. As such, all setup instructions are given for Unix systems. 6 | 7 | 1. Download the repo from the green code icon or via github's commandline tool gh. 8 | 9 | * ``gh repo clone cmdlab/Hetero2d`` (gh must be installed) 10 | * ``git clone https://github.com/cmdlab/Hetero2d.git`` 11 | 12 | 2. Install Hetero2d in a clean enviromnent using python=3.6. I suggest using Anaconda3 to manange environments. 13 | 14 | * ``conda create --name hetero2d python=3.6`` 15 | 16 | 3. Activate the *hetero2d* environment and run the line below to install Hetero2d. Must be in the directory where Hetero2d was downloaded to. 17 | 18 | * ``pip install -r requirements.txt`` 19 | 20 | 4. After installation, Hetero2d needs to be added to your python path. This can be done by running the first line below **OR** by adding the 2nd line to your *.bashrc* file. This is only necessary if python cannot find the package or the setup.py failed for some reason. 21 | 22 | * ``python setup.py develop`` or ``python setup.py install`` 23 | * ``export PYTHONPATH="$HOME/path_to_package/Hetero2d:$PYTHONPATH"`` 24 | 25 | 5. If this is your first time installing the package dependencies listed below, please ensure you have followed the respective setup instructions: 26 | * `atomate `_ 27 | * `FireWorks `_ 28 | * `pymatgen `_ 29 | * `MPInterfaces `_ 30 | 31 | 6. To run jupyter notebooks on various resources the ipykernel has to be installed. Sometimes this isn't enough and you need explicitly add the kernel to the list of environments. 32 | 33 | * Activate your environment ``conda activate hetero2d`` 34 | * ``python -m ipykernel install --user --name hetero2d`` 35 | 36 | 37 | Setting up dependancies 38 | ======================== 39 | The Hetero2d package dependancies have a lot of documentation to look over. I will highlight the essential documentation to get started as quickly as possible. 40 | 41 | 1. *atomate* requires the most set up. Mainly, creating a directory scaffold and writing the 5 required files to connect to the database and run jobs. (MongoDB or free Atlas MongoDB is required) 42 | 43 | 2. *pymatgen* has a command line tool installed to set up default directory paths for psuedopotentials called *pmg*. There are 2 essential commands you have to run to use Hetero2d on any system. 44 | 45 | * VASP POTCARs directory: ``pmg config -p `` 46 | * Default pseudopotential: ``pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_54`` 47 | 48 | 3. *MPInterfaces* has a config file similar to pymatgen. You need to set at least 2 parameters in the mpint_config.yaml file to remove the warning message. An example config file can be found on MPInterfaces github website. 49 | 50 | * mp_api: the_key_obtained_from_materialsproject 51 | * potentials: path_to_vasp_potcar_files 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/html/_sources/project_intro/introduction.rst.txt: -------------------------------------------------------------------------------- 1 | ============ 2 | Introduction 3 | ============ 4 | 5 | The Hetero2d package leverages well known computational tools: pymatgen, MPInterfaces, atomate, fireworks, and custodian to perform high-throughput ab-initio calculations. Hetero2d is tailored to addressing scientific questions regarding the stability of 2D-substrate hetero-structured materials using an all-in-one workflow approach to model the hetero-structures formed by arbitrary 2D materials and substrates. The workflow creates, computes, analyzes and stores all relevant simulation parameters and results in a queryable MongoDB database that can be accessed through our API. 6 | 7 | 8 | Package Description 9 | =================== 10 | 11 | The 2D-substrate hetero-structure workflow takes a given 2D material, 3D phase (bulk) of the 2D material, and a substrate, relaxes the structures using vdW-corrected DFT and creates hetero-structures subject to user constraints. The workflow analyzes and stores energetic stability information of various 2D hetero-structured materials to predict the feasibility of a substrate stabilizing a meta-stable 2D material. 12 | 13 | Hetero2d provides automated routines for the generation of low-lattice mismatched hetero-structures for arbitrary 2D materials and substrate surfaces, the creation of van der Waals corrected density-functional theory (DFT) input files, the submission and monitoring of simulations on computing resources, the post-processing of the key parameters to compute (a) the interface interaction energy of 2D-substrate hetero-structures, (b) the identification of substrate-induced changes in interfacial structure, and (c) charge doping of the 2D material. 14 | 15 | Examples 16 | ======== 17 | 18 | To get started using Hetero2d, various tutorials and examples have been created using Jupyter Notebooks. These notebooks demonstrate the basic functionality of Hetero2d to enable users to quickly learn how to use the various modules within this package. These can be found under Hetero2d/examples. 19 | 20 | How to cite Hetero2d 21 | ==================== 22 | 23 | If you use Hetero2d in your research, please consider citing the following work: 24 | 25 | Tara M. Boland, Arunima K. Singh. Computational Synthesis of 2D Materials: A High-throughput Approach to Materials Design (2021). arXiv:2112.03900. 26 | 27 | License 28 | ======= 29 | 30 | Hetero2d is released under the GNU General Public Version 3 License. Copyright (C) 2007 Free Software Foundation, Inc. . The terms of the license can be found in the main directory in this software package under the LICENSE file. 31 | 32 | About the Team 33 | ============== 34 | 35 | Arunima Singh (P.I.) of the Computational Materials Design Lab started Hetero2d in 2020, and is project lead. 36 | 37 | Currently, the main developer for this package is graduate student Tara M. Boland who has developed much of the existing Hetero2d package under the guidance of Arunima Singh. 38 | 39 | See more team details in the Development Team section. 40 | 41 | Copyright Policy 42 | ================ 43 | 44 | Hetero2d uses a shared copyright model. Each contributor maintains 45 | copyright over their contributions to pymatgen. But, it is important 46 | to note that these contributions are typically only changes to the 47 | repositories. Thus, the Hetero2d source code, in its entirety is not 48 | the copyright of any single person or institution. Instead, it is the 49 | collective copyright of the entire Hetero2d Development Team. If 50 | individual contributors want to maintain a record of what 51 | changes/contributions they have specific copyright on, they should 52 | indicate their copyright in the commit message of the change, when 53 | they commit the change to one of the pymatgen repositories. 54 | 55 | With this in mind, the following banner should be used in any source 56 | code file to indicate the copyright and license terms:: 57 | 58 | # Copyright (c) CMD Lab Development Team. 59 | # Distributed under the terms of the GNU License. 60 | -------------------------------------------------------------------------------- /docs/html/_sources/project_intro/modules.rst.txt: -------------------------------------------------------------------------------- 1 | Project Introduction 2 | ========================== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | introduction 8 | installation 9 | team 10 | references 11 | -------------------------------------------------------------------------------- /docs/html/_sources/project_intro/references.rst.txt: -------------------------------------------------------------------------------- 1 | References 2 | ========== 3 | 4 | Some of Hetero2d’s functionality is based on scientific advances / principles developed by various scientists. If you use Hetero2d in your research, you may wish to consider citing the following works: 5 | 6 | Shyue Ping Ong, William Davidson Richards, Anubhav Jain, Geoffroy 7 | Hautier, Michael Kocher, Shreyas Cholia, Dan Gunter, Vincent 8 | Chevrier, Kristin A. Persson, Gerbrand Ceder. *Python Materials 9 | Genomics (pymatgen) : A Robust, Open-Source Python Library for 10 | Materials Analysis.* Computational Materials Science, 2013, 68, 314– 11 | 319. doi:10.1016/j.commatsci.2012.10.028 12 | 13 | Mathew, K., Singh, A. K., Gabriel, J. J., Choudhary, K., Sinnott, 14 | S. B., Davydov, A. V, Hennig, R. G. *MPInterfaces : A Materials 15 | Project based Python tool for high-throughput computational screening 16 | of interfacial systems.* Computational Materials Science, 2016, 122, 17 | 183–190. dio:10.1016/j.commatsci.2016.05.020 18 | 19 | Zur, A., & McGill, T. C. *Lattice match: An application to 20 | heteroepitaxy.* Journal of Applied Physics, 1984, 55, 378–386. 21 | dio:10.1063/1.333084 22 | 23 | Mathew, K., Montoya, J. H., Faghaninia, A., Dwarakanath, S., 24 | Aykol, M., Tang, H., Chu, I., Smidt, T., Bocklund, B., Horton, M., 25 | Dagdelen, J., Wood, B., Liu, Z.-K., Neaton, J., Ong, S. P., 26 | Persson, K., Jain, A. *Atomate: A high-level interface to generate, 27 | execute, and analyze computational materials science workflows.* 28 | Comput. Mater. Sci. 2017, 139, 140–152. 29 | 30 | Singh, A. K., Zhuang, H. L., & Hennig, R. G. *Ab initio synthesis 31 | of single-layer III-V materials.* Physical Review B - Condensed 32 | Matter and Materials Physics, 2014, 89, 1–10. 33 | dio:10.1103/PhysRevB.89.245431 34 | -------------------------------------------------------------------------------- /docs/html/_sources/project_intro/team.rst.txt: -------------------------------------------------------------------------------- 1 | ================ 2 | Development Team 3 | ================ 4 | 5 | Hetero2d currently has a small development team. 6 | 7 | Lead Maintainers 8 | ================ 9 | 10 | | **Arunima K. Singh** |as2362| |0000-0002-7212-6310| 11 | | Assistant Professor, Department of Physics 12 | | Arizona State University, Tempe 13 | 14 | .. |as2362| image:: ../_static/github.png 15 | :target: https://github.com/as2362 16 | :width: 26 17 | :height: 26 18 | :alt: GitHub profile for as2362 19 | 20 | .. |0000-0002-7212-6310| image:: ../_static/orcid.jpg 21 | :target: https://orcid.org/0000-0002-7212-6310 22 | :width: 26 23 | :height: 26 24 | :alt: ORCID profile for 0000-0002-7212-6310 25 | 26 | | **Tara M. Boland** |tboland1| |0000-0002-2587-5677| 27 | | PhD Candidate, Materials Science and Engineering 28 | | Arizona State University, Tempe 29 | 30 | .. |tboland1| image:: ../_static/github.png 31 | :target: https://github.com/tboland1 32 | :width: 26 33 | :height: 26 34 | :alt: GitHub profile for tboland1 35 | 36 | .. |0000-0002-2587-5677| image:: ../_static/orcid.jpg 37 | :target: https://orcid.org/0000-0002-2587-5677 38 | :width: 26 39 | :height: 26 40 | :alt: ORCID profile for 0000-0002-2587-5677 41 | 42 | List of Developers (A-Z) 43 | ======================== 44 | 45 | | **Syd Olson** |SNOlson| 46 | | Arizona State University, Tempe 47 | 48 | .. |SNOlson| image:: ../_static/github.png 49 | :target: https://github.com/SNOlson 50 | :width: 26 51 | :height: 26 52 | :alt: GitHub profile for SNOlson 53 | 54 | -------------------------------------------------------------------------------- /docs/html/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /docs/html/_static/doctools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * doctools.js 3 | * ~~~~~~~~~~~ 4 | * 5 | * Sphinx JavaScript utilities for all documentation. 6 | * 7 | * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. 8 | * :license: BSD, see LICENSE for details. 9 | * 10 | */ 11 | 12 | /** 13 | * select a different prefix for underscore 14 | */ 15 | $u = _.noConflict(); 16 | 17 | /** 18 | * make the code below compatible with browsers without 19 | * an installed firebug like debugger 20 | if (!window.console || !console.firebug) { 21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir", 22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", 23 | "profile", "profileEnd"]; 24 | window.console = {}; 25 | for (var i = 0; i < names.length; ++i) 26 | window.console[names[i]] = function() {}; 27 | } 28 | */ 29 | 30 | /** 31 | * small helper function to urldecode strings 32 | */ 33 | jQuery.urldecode = function(x) { 34 | return decodeURIComponent(x).replace(/\+/g, ' '); 35 | }; 36 | 37 | /** 38 | * small helper function to urlencode strings 39 | */ 40 | jQuery.urlencode = encodeURIComponent; 41 | 42 | /** 43 | * This function returns the parsed url parameters of the 44 | * current request. Multiple values per key are supported, 45 | * it will always return arrays of strings for the value parts. 46 | */ 47 | jQuery.getQueryParameters = function(s) { 48 | if (typeof s === 'undefined') 49 | s = document.location.search; 50 | var parts = s.substr(s.indexOf('?') + 1).split('&'); 51 | var result = {}; 52 | for (var i = 0; i < parts.length; i++) { 53 | var tmp = parts[i].split('=', 2); 54 | var key = jQuery.urldecode(tmp[0]); 55 | var value = jQuery.urldecode(tmp[1]); 56 | if (key in result) 57 | result[key].push(value); 58 | else 59 | result[key] = [value]; 60 | } 61 | return result; 62 | }; 63 | 64 | /** 65 | * highlight a given string on a jquery object by wrapping it in 66 | * span elements with the given class name. 67 | */ 68 | jQuery.fn.highlightText = function(text, className) { 69 | function highlight(node, addItems) { 70 | if (node.nodeType === 3) { 71 | var val = node.nodeValue; 72 | var pos = val.toLowerCase().indexOf(text); 73 | if (pos >= 0 && 74 | !jQuery(node.parentNode).hasClass(className) && 75 | !jQuery(node.parentNode).hasClass("nohighlight")) { 76 | var span; 77 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); 78 | if (isInSVG) { 79 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 80 | } else { 81 | span = document.createElement("span"); 82 | span.className = className; 83 | } 84 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 85 | node.parentNode.insertBefore(span, node.parentNode.insertBefore( 86 | document.createTextNode(val.substr(pos + text.length)), 87 | node.nextSibling)); 88 | node.nodeValue = val.substr(0, pos); 89 | if (isInSVG) { 90 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 91 | var bbox = node.parentElement.getBBox(); 92 | rect.x.baseVal.value = bbox.x; 93 | rect.y.baseVal.value = bbox.y; 94 | rect.width.baseVal.value = bbox.width; 95 | rect.height.baseVal.value = bbox.height; 96 | rect.setAttribute('class', className); 97 | addItems.push({ 98 | "parent": node.parentNode, 99 | "target": rect}); 100 | } 101 | } 102 | } 103 | else if (!jQuery(node).is("button, select, textarea")) { 104 | jQuery.each(node.childNodes, function() { 105 | highlight(this, addItems); 106 | }); 107 | } 108 | } 109 | var addItems = []; 110 | var result = this.each(function() { 111 | highlight(this, addItems); 112 | }); 113 | for (var i = 0; i < addItems.length; ++i) { 114 | jQuery(addItems[i].parent).before(addItems[i].target); 115 | } 116 | return result; 117 | }; 118 | 119 | /* 120 | * backward compatibility for jQuery.browser 121 | * This will be supported until firefox bug is fixed. 122 | */ 123 | if (!jQuery.browser) { 124 | jQuery.uaMatch = function(ua) { 125 | ua = ua.toLowerCase(); 126 | 127 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 128 | /(webkit)[ \/]([\w.]+)/.exec(ua) || 129 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 130 | /(msie) ([\w.]+)/.exec(ua) || 131 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 132 | []; 133 | 134 | return { 135 | browser: match[ 1 ] || "", 136 | version: match[ 2 ] || "0" 137 | }; 138 | }; 139 | jQuery.browser = {}; 140 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 141 | } 142 | 143 | /** 144 | * Small JavaScript module for the documentation. 145 | */ 146 | var Documentation = { 147 | 148 | init : function() { 149 | this.fixFirefoxAnchorBug(); 150 | this.highlightSearchWords(); 151 | this.initIndexTable(); 152 | if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { 153 | this.initOnKeyListeners(); 154 | } 155 | }, 156 | 157 | /** 158 | * i18n support 159 | */ 160 | TRANSLATIONS : {}, 161 | PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, 162 | LOCALE : 'unknown', 163 | 164 | // gettext and ngettext don't access this so that the functions 165 | // can safely bound to a different name (_ = Documentation.gettext) 166 | gettext : function(string) { 167 | var translated = Documentation.TRANSLATIONS[string]; 168 | if (typeof translated === 'undefined') 169 | return string; 170 | return (typeof translated === 'string') ? translated : translated[0]; 171 | }, 172 | 173 | ngettext : function(singular, plural, n) { 174 | var translated = Documentation.TRANSLATIONS[singular]; 175 | if (typeof translated === 'undefined') 176 | return (n == 1) ? singular : plural; 177 | return translated[Documentation.PLURALEXPR(n)]; 178 | }, 179 | 180 | addTranslations : function(catalog) { 181 | for (var key in catalog.messages) 182 | this.TRANSLATIONS[key] = catalog.messages[key]; 183 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); 184 | this.LOCALE = catalog.locale; 185 | }, 186 | 187 | /** 188 | * add context elements like header anchor links 189 | */ 190 | addContextElements : function() { 191 | $('div[id] > :header:first').each(function() { 192 | $('\u00B6'). 193 | attr('href', '#' + this.id). 194 | attr('title', _('Permalink to this headline')). 195 | appendTo(this); 196 | }); 197 | $('dt[id]').each(function() { 198 | $('\u00B6'). 199 | attr('href', '#' + this.id). 200 | attr('title', _('Permalink to this definition')). 201 | appendTo(this); 202 | }); 203 | }, 204 | 205 | /** 206 | * workaround a firefox stupidity 207 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 208 | */ 209 | fixFirefoxAnchorBug : function() { 210 | if (document.location.hash && $.browser.mozilla) 211 | window.setTimeout(function() { 212 | document.location.href += ''; 213 | }, 10); 214 | }, 215 | 216 | /** 217 | * highlight the search words provided in the url in the text 218 | */ 219 | highlightSearchWords : function() { 220 | var params = $.getQueryParameters(); 221 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; 222 | if (terms.length) { 223 | var body = $('div.body'); 224 | if (!body.length) { 225 | body = $('body'); 226 | } 227 | window.setTimeout(function() { 228 | $.each(terms, function() { 229 | body.highlightText(this.toLowerCase(), 'highlighted'); 230 | }); 231 | }, 10); 232 | $('') 234 | .appendTo($('#searchbox')); 235 | } 236 | }, 237 | 238 | /** 239 | * init the domain index toggle buttons 240 | */ 241 | initIndexTable : function() { 242 | var togglers = $('img.toggler').click(function() { 243 | var src = $(this).attr('src'); 244 | var idnum = $(this).attr('id').substr(7); 245 | $('tr.cg-' + idnum).toggle(); 246 | if (src.substr(-9) === 'minus.png') 247 | $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); 248 | else 249 | $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); 250 | }).css('display', ''); 251 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { 252 | togglers.click(); 253 | } 254 | }, 255 | 256 | /** 257 | * helper function to hide the search marks again 258 | */ 259 | hideSearchWords : function() { 260 | $('#searchbox .highlight-link').fadeOut(300); 261 | $('span.highlighted').removeClass('highlighted'); 262 | }, 263 | 264 | /** 265 | * make the url absolute 266 | */ 267 | makeURL : function(relativeURL) { 268 | return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; 269 | }, 270 | 271 | /** 272 | * get the current relative url 273 | */ 274 | getCurrentURL : function() { 275 | var path = document.location.pathname; 276 | var parts = path.split(/\//); 277 | $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { 278 | if (this === '..') 279 | parts.pop(); 280 | }); 281 | var url = parts.join('/'); 282 | return path.substring(url.lastIndexOf('/') + 1, path.length - 1); 283 | }, 284 | 285 | initOnKeyListeners: function() { 286 | $(document).keydown(function(event) { 287 | var activeElementType = document.activeElement.tagName; 288 | // don't navigate when in search box or textarea 289 | if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' 290 | && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { 291 | switch (event.keyCode) { 292 | case 37: // left 293 | var prevHref = $('link[rel="prev"]').prop('href'); 294 | if (prevHref) { 295 | window.location.href = prevHref; 296 | return false; 297 | } 298 | case 39: // right 299 | var nextHref = $('link[rel="next"]').prop('href'); 300 | if (nextHref) { 301 | window.location.href = nextHref; 302 | return false; 303 | } 304 | } 305 | } 306 | }); 307 | } 308 | }; 309 | 310 | // quick alias for translations 311 | _ = Documentation.gettext; 312 | 313 | $(document).ready(function() { 314 | Documentation.init(); 315 | }); 316 | -------------------------------------------------------------------------------- /docs/html/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '1.0.0', 4 | LANGUAGE: 'None', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '.txt', 11 | NAVIGATION_WITH_KEYS: false 12 | }; -------------------------------------------------------------------------------- /docs/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/file.png -------------------------------------------------------------------------------- /docs/html/_static/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/github.png -------------------------------------------------------------------------------- /docs/html/_static/js/badge_only.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); -------------------------------------------------------------------------------- /docs/html/_static/js/html5shiv-printshiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/html/_static/js/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/html/_static/js/theme.js: -------------------------------------------------------------------------------- 1 | !function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 62 | var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 63 | var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 64 | var s_v = "^(" + C + ")?" + v; // vowel in stem 65 | 66 | this.stemWord = function (w) { 67 | var stem; 68 | var suffix; 69 | var firstch; 70 | var origword = w; 71 | 72 | if (w.length < 3) 73 | return w; 74 | 75 | var re; 76 | var re2; 77 | var re3; 78 | var re4; 79 | 80 | firstch = w.substr(0,1); 81 | if (firstch == "y") 82 | w = firstch.toUpperCase() + w.substr(1); 83 | 84 | // Step 1a 85 | re = /^(.+?)(ss|i)es$/; 86 | re2 = /^(.+?)([^s])s$/; 87 | 88 | if (re.test(w)) 89 | w = w.replace(re,"$1$2"); 90 | else if (re2.test(w)) 91 | w = w.replace(re2,"$1$2"); 92 | 93 | // Step 1b 94 | re = /^(.+?)eed$/; 95 | re2 = /^(.+?)(ed|ing)$/; 96 | if (re.test(w)) { 97 | var fp = re.exec(w); 98 | re = new RegExp(mgr0); 99 | if (re.test(fp[1])) { 100 | re = /.$/; 101 | w = w.replace(re,""); 102 | } 103 | } 104 | else if (re2.test(w)) { 105 | var fp = re2.exec(w); 106 | stem = fp[1]; 107 | re2 = new RegExp(s_v); 108 | if (re2.test(stem)) { 109 | w = stem; 110 | re2 = /(at|bl|iz)$/; 111 | re3 = new RegExp("([^aeiouylsz])\\1$"); 112 | re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 113 | if (re2.test(w)) 114 | w = w + "e"; 115 | else if (re3.test(w)) { 116 | re = /.$/; 117 | w = w.replace(re,""); 118 | } 119 | else if (re4.test(w)) 120 | w = w + "e"; 121 | } 122 | } 123 | 124 | // Step 1c 125 | re = /^(.+?)y$/; 126 | if (re.test(w)) { 127 | var fp = re.exec(w); 128 | stem = fp[1]; 129 | re = new RegExp(s_v); 130 | if (re.test(stem)) 131 | w = stem + "i"; 132 | } 133 | 134 | // Step 2 135 | re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; 136 | if (re.test(w)) { 137 | var fp = re.exec(w); 138 | stem = fp[1]; 139 | suffix = fp[2]; 140 | re = new RegExp(mgr0); 141 | if (re.test(stem)) 142 | w = stem + step2list[suffix]; 143 | } 144 | 145 | // Step 3 146 | re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; 147 | if (re.test(w)) { 148 | var fp = re.exec(w); 149 | stem = fp[1]; 150 | suffix = fp[2]; 151 | re = new RegExp(mgr0); 152 | if (re.test(stem)) 153 | w = stem + step3list[suffix]; 154 | } 155 | 156 | // Step 4 157 | re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; 158 | re2 = /^(.+?)(s|t)(ion)$/; 159 | if (re.test(w)) { 160 | var fp = re.exec(w); 161 | stem = fp[1]; 162 | re = new RegExp(mgr1); 163 | if (re.test(stem)) 164 | w = stem; 165 | } 166 | else if (re2.test(w)) { 167 | var fp = re2.exec(w); 168 | stem = fp[1] + fp[2]; 169 | re2 = new RegExp(mgr1); 170 | if (re2.test(stem)) 171 | w = stem; 172 | } 173 | 174 | // Step 5 175 | re = /^(.+?)e$/; 176 | if (re.test(w)) { 177 | var fp = re.exec(w); 178 | stem = fp[1]; 179 | re = new RegExp(mgr1); 180 | re2 = new RegExp(meq1); 181 | re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 182 | if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) 183 | w = stem; 184 | } 185 | re = /ll$/; 186 | re2 = new RegExp(mgr1); 187 | if (re.test(w) && re2.test(w)) { 188 | re = /.$/; 189 | w = w.replace(re,""); 190 | } 191 | 192 | // and turn initial Y back to y 193 | if (firstch == "y") 194 | w = firstch.toLowerCase() + w.substr(1); 195 | return w; 196 | } 197 | } 198 | 199 | 200 | 201 | 202 | 203 | var splitChars = (function() { 204 | var result = {}; 205 | var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, 206 | 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, 207 | 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, 208 | 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, 209 | 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, 210 | 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, 211 | 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, 212 | 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, 213 | 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, 214 | 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; 215 | var i, j, start, end; 216 | for (i = 0; i < singles.length; i++) { 217 | result[singles[i]] = true; 218 | } 219 | var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], 220 | [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], 221 | [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], 222 | [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], 223 | [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], 224 | [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], 225 | [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], 226 | [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], 227 | [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], 228 | [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], 229 | [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], 230 | [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], 231 | [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], 232 | [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], 233 | [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], 234 | [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], 235 | [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], 236 | [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], 237 | [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], 238 | [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], 239 | [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], 240 | [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], 241 | [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], 242 | [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], 243 | [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], 244 | [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], 245 | [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], 246 | [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], 247 | [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], 248 | [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], 249 | [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], 250 | [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], 251 | [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], 252 | [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], 253 | [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], 254 | [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], 255 | [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], 256 | [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], 257 | [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], 258 | [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], 259 | [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], 260 | [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], 261 | [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], 262 | [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], 263 | [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], 264 | [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], 265 | [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], 266 | [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], 267 | [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; 268 | for (i = 0; i < ranges.length; i++) { 269 | start = ranges[i][0]; 270 | end = ranges[i][1]; 271 | for (j = start; j <= end; j++) { 272 | result[j] = true; 273 | } 274 | } 275 | return result; 276 | })(); 277 | 278 | function splitQuery(query) { 279 | var result = []; 280 | var start = -1; 281 | for (var i = 0; i < query.length; i++) { 282 | if (splitChars[query.charCodeAt(i)]) { 283 | if (start !== -1) { 284 | result.push(query.slice(start, i)); 285 | start = -1; 286 | } 287 | } else if (start === -1) { 288 | start = i; 289 | } 290 | } 291 | if (start !== -1) { 292 | result.push(query.slice(start)); 293 | } 294 | return result; 295 | } 296 | 297 | 298 | -------------------------------------------------------------------------------- /docs/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/minus.png -------------------------------------------------------------------------------- /docs/html/_static/orcid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/orcid.jpg -------------------------------------------------------------------------------- /docs/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/_static/plus.png -------------------------------------------------------------------------------- /docs/html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffffcc } 2 | .highlight { background: #f8f8f8; } 3 | .highlight .c { color: #408080; font-style: italic } /* Comment */ 4 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 5 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 6 | .highlight .o { color: #666666 } /* Operator */ 7 | .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ 8 | .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ 9 | .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ 10 | .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ 11 | .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ 12 | .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ 13 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 14 | .highlight .ge { font-style: italic } /* Generic.Emph */ 15 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 16 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 17 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 18 | .highlight .go { color: #888888 } /* Generic.Output */ 19 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 20 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 21 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 22 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 23 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 24 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 25 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 26 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 27 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 28 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 29 | .highlight .m { color: #666666 } /* Literal.Number */ 30 | .highlight .s { color: #BA2121 } /* Literal.String */ 31 | .highlight .na { color: #7D9029 } /* Name.Attribute */ 32 | .highlight .nb { color: #008000 } /* Name.Builtin */ 33 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 34 | .highlight .no { color: #880000 } /* Name.Constant */ 35 | .highlight .nd { color: #AA22FF } /* Name.Decorator */ 36 | .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ 37 | .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ 38 | .highlight .nf { color: #0000FF } /* Name.Function */ 39 | .highlight .nl { color: #A0A000 } /* Name.Label */ 40 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 41 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 42 | .highlight .nv { color: #19177C } /* Name.Variable */ 43 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 44 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 45 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */ 46 | .highlight .mf { color: #666666 } /* Literal.Number.Float */ 47 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */ 48 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */ 49 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */ 50 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 51 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 52 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 53 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 54 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 55 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 56 | .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ 57 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 58 | .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ 59 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 60 | .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ 61 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 62 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 63 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 64 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */ 65 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 66 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 67 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 68 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 69 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /docs/html/_static/underscore.js: -------------------------------------------------------------------------------- 1 | // Underscore.js 1.3.1 2 | // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. 3 | // Underscore is freely distributable under the MIT license. 4 | // Portions of Underscore are inspired or borrowed from Prototype, 5 | // Oliver Steele's Functional, and John Resig's Micro-Templating. 6 | // For all details and documentation: 7 | // http://documentcloud.github.com/underscore 8 | (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== 9 | c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, 10 | h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= 11 | b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== 12 | null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= 13 | function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= 14 | e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= 15 | function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, 17 | c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; 24 | b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, 25 | 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; 26 | b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; 27 | b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), 28 | function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ 29 | u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= 30 | function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= 31 | true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); 32 | -------------------------------------------------------------------------------- /docs/html/hetero2d/hetero2d.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | hetero2d package — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 61 | 62 |
66 | 67 |
68 |
69 |
70 | 78 |
79 |
80 | 135 |
139 | 140 |
141 | 142 |
143 |

© Copyright 2021, Tara Maria Boland.

144 |
145 | 146 | Built with Sphinx using a 147 | theme 148 | provided by Read the Docs. 149 | 150 | 151 |
152 |
153 |
154 |
155 |
156 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /docs/html/hetero2d/modules.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | hetero2d — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 50 | 51 |
55 | 56 |
57 |
58 |
59 | 66 |
67 |
68 | 124 |
128 | 129 |
130 | 131 |
132 |

© Copyright 2021, Tara Maria Boland.

133 |
134 | 135 | Built with Sphinx using a 136 | theme 137 | provided by Read the Docs. 138 | 139 | 140 |
141 |
142 |
143 |
144 |
145 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /docs/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Welcome to Hetero2d’s documentation! — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 46 | 47 |
51 | 52 |
53 |
54 |
55 |
    56 |
  • »
  • 57 |
  • Welcome to Hetero2d’s documentation!
  • 58 |
  • 59 | View page source 60 |
  • 61 |
62 |
63 |
64 |
65 |
66 | 67 |
68 |

Welcome to Hetero2d’s documentation!

69 |
70 |

Contents:

71 | 75 |
76 |
77 |
78 |

Indices and tables

79 | 84 |
85 | 86 | 87 |
88 |
89 |
92 | 93 |
94 | 95 |
96 |

© Copyright 2021, Tara Maria Boland.

97 |
98 | 99 | Built with Sphinx using a 100 | theme 101 | provided by Read the Docs. 102 | 103 | 104 |
105 |
106 |
107 |
108 |
109 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /docs/html/modules.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | hetero2d — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 45 | 46 |
50 | 51 |
52 |
53 |
54 | 61 |
62 |
63 |
64 |
65 | 66 | 110 | 111 | 112 |
113 |
114 |
115 | 116 |
117 | 118 |
119 |

© Copyright 2021, Tara Maria Boland.

120 |
121 | 122 | Built with Sphinx using a 123 | theme 124 | provided by Read the Docs. 125 | 126 | 127 |
128 |
129 |
130 |
131 |
132 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /docs/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/docs/html/objects.inv -------------------------------------------------------------------------------- /docs/html/project_intro/installation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Installing Hetero2d — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 56 | 57 |
61 | 62 |
63 |
64 |
65 | 73 |
74 |
75 |
76 |
77 | 78 |
79 |

Installing Hetero2d

80 |

IMPORTANT NOTE: Atomate and FireWorks do not run on Windows OS. You need a unix-based OS (Mac or Linux) in order for these packages to run. As such, all setup instructions are given for Unix systems.

81 |
    82 |
  1. Download the repo from the green code icon or via github’s commandline tool gh.

  2. 83 |
84 |
85 |
    86 |
  • gh repo clone cmdlab/Hetero2d (gh must be installed)

  • 87 |
  • git clone https://github.com/cmdlab/Hetero2d.git

  • 88 |
89 |
90 |
    91 |
  1. Install Hetero2d in a clean enviromnent using python=3.6. I suggest using Anaconda3 to manange environments.

  2. 92 |
93 |
94 |
    95 |
  • conda create --name hetero2d python=3.6

  • 96 |
97 |
98 |
    99 |
  1. Activate the hetero2d environment and run the line below to install Hetero2d. Must be in the directory where Hetero2d was downloaded to.

  2. 100 |
101 |
102 |
    103 |
  • pip install -r requirements.txt

  • 104 |
105 |
106 |
    107 |
  1. After installation, Hetero2d needs to be added to your python path. This can be done by running the first line below OR by adding the 2nd line to your .bashrc file. This is only necessary if python cannot find the package or the setup.py failed for some reason.

  2. 108 |
109 |
110 |
    111 |
  • python setup.py develop or python setup.py install

  • 112 |
  • export PYTHONPATH="$HOME/path_to_package/Hetero2d:$PYTHONPATH"

  • 113 |
114 |
115 |
    116 |
  1. If this is your first time installing the package dependencies listed below, please ensure you have followed the respective setup instructions:

  2. 117 |
118 |
119 |
125 |
126 |
    127 |
  1. To run jupyter notebooks on various resources the ipykernel has to be installed. Sometimes this isn’t enough and you need explicitly add the kernel to the list of environments.

  2. 128 |
129 |
130 |
    131 |
  • Activate your environment conda activate hetero2d

  • 132 |
  • python -m ipykernel install --user --name hetero2d

  • 133 |
134 |
135 |
136 |

Setting up dependancies

137 |

The Hetero2d package dependancies have a lot of documentation to look over. I will highlight the essential documentation to get started as quickly as possible.

138 |
    139 |
  1. atomate requires the most set up. Mainly, creating a directory scaffold and writing the 5 required files to connect to the database and run jobs. (MongoDB or free Atlas MongoDB is required)

  2. 140 |
  3. pymatgen has a command line tool installed to set up default directory paths for psuedopotentials called pmg. There are 2 essential commands you have to run to use Hetero2d on any system.

  4. 141 |
142 |
143 |
    144 |
  • VASP POTCARs directory: pmg config -p <EXTRACTED_VASP_POTCAR> <MY_PSP>

  • 145 |
  • Default pseudopotential: pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_54

  • 146 |
147 |
148 |
    149 |
  1. MPInterfaces has a config file similar to pymatgen. You need to set at least 2 parameters in the mpint_config.yaml file to remove the warning message. An example config file can be found on MPInterfaces github website.

  2. 150 |
151 |
152 |
    153 |
  • mp_api: the_key_obtained_from_materialsproject

  • 154 |
  • potentials: path_to_vasp_potcar_files

  • 155 |
156 |
157 |
158 |
159 | 160 | 161 |
162 |
163 |
167 | 168 |
169 | 170 |
171 |

© Copyright 2021, Tara Maria Boland.

172 |
173 | 174 | Built with Sphinx using a 175 | theme 176 | provided by Read the Docs. 177 | 178 | 179 |
180 |
181 |
182 |
183 |
184 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /docs/html/project_intro/introduction.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Introduction — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 61 | 62 |
66 | 67 |
68 |
69 |
70 | 78 |
79 |
80 |
81 |
82 | 83 |
84 |

Introduction

85 |

The Hetero2d package leverages well known computational tools: pymatgen, MPInterfaces, atomate, fireworks, and custodian to perform high-throughput ab-initio calculations. Hetero2d is tailored to addressing scientific questions regarding the stability of 2D-substrate hetero-structured materials using an all-in-one workflow approach to model the hetero-structures formed by arbitrary 2D materials and substrates. The workflow creates, computes, analyzes and stores all relevant simulation parameters and results in a queryable MongoDB database that can be accessed through our API.

86 |
87 |

Package Description

88 |

The 2D-substrate hetero-structure workflow takes a given 2D material, 3D phase (bulk) of the 2D material, and a substrate, relaxes the structures using vdW-corrected DFT and creates hetero-structures subject to user constraints. The workflow analyzes and stores energetic stability information of various 2D hetero-structured materials to predict the feasibility of a substrate stabilizing a meta-stable 2D material.

89 |

Hetero2d provides automated routines for the generation of low-lattice mismatched hetero-structures for arbitrary 2D materials and substrate surfaces, the creation of van der Waals corrected density-functional theory (DFT) input files, the submission and monitoring of simulations on computing resources, the post-processing of the key parameters to compute (a) the interface interaction energy of 2D-substrate hetero-structures, (b) the identification of substrate-induced changes in interfacial structure, and (c) charge doping of the 2D material.

90 |
91 |
92 |

Examples

93 |

To get started using Hetero2d, various tutorials and examples have been created using Jupyter Notebooks. These notebooks demonstrate the basic functionality of Hetero2d to enable users to quickly learn how to use the various modules within this package. These can be found under Hetero2d/examples.

94 |
95 |
96 |

How to cite Hetero2d

97 |

If you use Hetero2d in your research, please consider citing the following work:

98 |
99 |

Tara M. Boland, Arunima K. Singh. Computational Synthesis of 2D Materials: A High-throughput Approach to Materials Design (2021). arXiv:2112.03900.

100 |
101 |
102 |
103 |

License

104 |

Hetero2d is released under the GNU General Public Version 3 License. Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>. The terms of the license can be found in the main directory in this software package under the LICENSE file.

105 |
106 |
107 |

About the Team

108 |

Arunima Singh (P.I.) of the Computational Materials Design Lab started Hetero2d in 2020, and is project lead.

109 |

Currently, the main developer for this package is graduate student Tara M. Boland who has developed much of the existing Hetero2d package under the guidance of Arunima Singh.

110 |

See more team details in the Development Team section.

111 |
112 | 131 |
132 | 133 | 134 |
135 |
136 |
140 | 141 |
142 | 143 |
144 |

© Copyright 2021, Tara Maria Boland.

145 |
146 | 147 | Built with Sphinx using a 148 | theme 149 | provided by Read the Docs. 150 | 151 | 152 |
153 |
154 |
155 |
156 |
157 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /docs/html/project_intro/modules.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Project Introduction — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 53 | 54 |
58 | 59 |
60 |
61 |
62 | 69 |
70 |
71 |
72 |
73 | 74 |
75 |

Project Introduction

76 | 99 |
100 | 101 | 102 |
103 |
104 |
108 | 109 |
110 | 111 |
112 |

© Copyright 2021, Tara Maria Boland.

113 |
114 | 115 | Built with Sphinx using a 116 | theme 117 | provided by Read the Docs. 118 | 119 | 120 |
121 |
122 |
123 |
124 |
125 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /docs/html/project_intro/references.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | References — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 53 | 54 |
58 | 59 |
60 |
61 |
62 | 70 |
71 |
72 |
73 |
74 | 75 |
76 |

References

77 |

Some of Hetero2d’s functionality is based on scientific advances / principles developed by various scientists. If you use Hetero2d in your research, you may wish to consider citing the following works:

78 |
79 |

Shyue Ping Ong, William Davidson Richards, Anubhav Jain, Geoffroy 80 | Hautier, Michael Kocher, Shreyas Cholia, Dan Gunter, Vincent 81 | Chevrier, Kristin A. Persson, Gerbrand Ceder. Python Materials 82 | Genomics (pymatgen) : A Robust, Open-Source Python Library for 83 | Materials Analysis. Computational Materials Science, 2013, 68, 314– 84 | 319. doi:10.1016/j.commatsci.2012.10.028

85 |

Mathew, K., Singh, A. K., Gabriel, J. J., Choudhary, K., Sinnott, 86 | S. B., Davydov, A. V, Hennig, R. G. MPInterfaces : A Materials 87 | Project based Python tool for high-throughput computational screening 88 | of interfacial systems. Computational Materials Science, 2016, 122, 89 | 183–190. dio:10.1016/j.commatsci.2016.05.020

90 |

Zur, A., & McGill, T. C. Lattice match: An application to 91 | heteroepitaxy. Journal of Applied Physics, 1984, 55, 378–386. 92 | dio:10.1063/1.333084

93 |

Mathew, K., Montoya, J. H., Faghaninia, A., Dwarakanath, S., 94 | Aykol, M., Tang, H., Chu, I., Smidt, T., Bocklund, B., Horton, M., 95 | Dagdelen, J., Wood, B., Liu, Z.-K., Neaton, J., Ong, S. P., 96 | Persson, K., Jain, A. Atomate: A high-level interface to generate, 97 | execute, and analyze computational materials science workflows. 98 | Comput. Mater. Sci. 2017, 139, 140–152.

99 |

Singh, A. K., Zhuang, H. L., & Hennig, R. G. Ab initio synthesis 100 | of single-layer III-V materials. Physical Review B - Condensed 101 | Matter and Materials Physics, 2014, 89, 1–10. 102 | dio:10.1103/PhysRevB.89.245431

103 |
104 |
105 | 106 | 107 |
108 |
109 |
113 | 114 |
115 | 116 |
117 |

© Copyright 2021, Tara Maria Boland.

118 |
119 | 120 | Built with Sphinx using a 121 | theme 122 | provided by Read the Docs. 123 | 124 | 125 |
126 |
127 |
128 |
129 |
130 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /docs/html/project_intro/team.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Development Team — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 57 | 58 |
62 | 63 |
64 |
65 |
66 | 74 |
75 |
76 |
77 |
78 | 79 |
80 |

Development Team

81 |

Hetero2d currently has a small development team.

82 |
83 |

Lead Maintainers

84 |
85 |
Arunima K. Singh GitHub profile for as2362 ORCID profile for 0000-0002-7212-6310
86 |
Assistant Professor, Department of Physics
87 |
Arizona State University, Tempe
88 |
89 |
90 |
Tara M. Boland GitHub profile for tboland1 ORCID profile for 0000-0002-2587-5677
91 |
PhD Candidate, Materials Science and Engineering
92 |
Arizona State University, Tempe
93 |
94 |
95 |
96 |

List of Developers (A-Z)

97 |
98 |
Syd Olson GitHub profile for SNOlson
99 |
Arizona State University, Tempe
100 |
101 |
102 |
103 | 104 | 105 |
106 |
107 |
111 | 112 |
113 | 114 |
115 |

© Copyright 2021, Tara Maria Boland.

116 |
117 | 118 | Built with Sphinx using a 119 | theme 120 | provided by Read the Docs. 121 | 122 | 123 |
124 |
125 |
126 |
127 |
128 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /docs/html/py-modindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Python Module Index — Hetero2d 1.0.0 documentation 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 48 | 49 |
53 | 54 |
55 |
56 |
57 |
    58 |
  • »
  • 59 |
  • Python Module Index
  • 60 |
  • 61 |
  • 62 |
63 |
64 |
65 |
66 |
67 | 68 | 69 |

Python Module Index

70 | 71 |
72 | h 73 |
74 | 75 | 76 | 77 | 79 | 80 | 82 | 85 | 86 | 87 | 90 | 91 | 92 | 95 | 96 | 97 | 100 | 101 | 102 | 105 | 106 | 107 | 110 | 111 | 112 | 115 | 116 | 117 | 120 | 121 | 122 | 125 | 126 | 127 | 130 | 131 | 132 | 135 | 136 | 137 | 140 | 141 | 142 | 145 | 146 | 147 | 150 | 151 | 152 | 155 | 156 | 157 | 160 |
 
78 | h
83 | hetero2d 84 |
    88 | hetero2d.firetasks 89 |
    93 | hetero2d.firetasks.heteroiface_tasks 94 |
    98 | hetero2d.firetasks.parse_outputs 99 |
    103 | hetero2d.firetasks.run_calc 104 |
    108 | hetero2d.firetasks.write_inputs 109 |
    113 | hetero2d.fireworks 114 |
    118 | hetero2d.fireworks.core 119 |
    123 | hetero2d.io 124 |
    128 | hetero2d.io.VaspInterfaceSet 129 |
    133 | hetero2d.manipulate 134 |
    138 | hetero2d.manipulate.heterotransmuter 139 |
    143 | hetero2d.manipulate.layersolver 144 |
    148 | hetero2d.manipulate.utils 149 |
    153 | hetero2d.workflow 154 |
    158 | hetero2d.workflow.core 159 |
161 | 162 | 163 |
164 |
165 |
166 | 167 |
168 | 169 |
170 |

© Copyright 2021, Tara Maria Boland.

171 |
172 | 173 | Built with Sphinx using a 174 | theme 175 | provided by Read the Docs. 176 | 177 | 178 |
179 |
180 |
181 |
182 |
183 | 188 | 189 | 190 | -------------------------------------------------------------------------------- /docs/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Search — Hetero2d 1.0.0 documentation 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 48 | 49 |
53 | 54 |
55 |
56 |
57 |
    58 |
  • »
  • 59 |
  • Search
  • 60 |
  • 61 |
  • 62 |
63 |
64 |
65 |
66 |
67 | 68 | 75 | 76 | 77 |
78 | 79 |
80 | 81 |
82 |
83 |
84 | 85 |
86 | 87 |
88 |

© Copyright 2021, Tara Maria Boland.

89 |
90 | 91 | Built with Sphinx using a 92 | theme 93 | provided by Read the Docs. 94 | 95 | 96 |
97 |
98 |
99 |
100 |
101 | 106 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /examples/LayerSolver_CONTCAR: -------------------------------------------------------------------------------- 1 | Mo7 C26 S14 2 | 1.00000000000000 3 | 6.1629069999999997 6.4046810000000001 0.0000000000000000 4 | 8.6280730000000005 -2.1348940000000001 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 -20.0000000000000000 6 | Mo C S 7 | 7 26 14 8 | Direct 9 | 0.5897429999999986 0.4358989999999991 0.7498494413679779 10 | 0.4467257639738236 0.1502190472325893 0.7499665069994705 11 | 0.1612094005573184 0.5787636392114877 0.7499226975618001 12 | 0.3040640472325862 0.8645951887935936 0.7499665069994705 13 | 0.0184401887935977 0.2928817639738170 0.7499665069994705 14 | 0.8754129602311878 0.0073644005573144 0.7499226975618001 15 | 0.7326076392114871 0.7215679602311837 0.7499226975618001 16 | 0.7436001523983862 0.8974480081477836 0.5025532420078562 17 | 0.6667201094294413 0.6665979225471617 0.5026743079140346 18 | 0.4359799161329931 0.9743132974822046 0.5034612146295316 19 | 0.5897440000000032 0.4358969999999971 0.5025675925179272 20 | 0.3590000496813204 0.7435553461537623 0.5029478247542158 21 | 0.1281592974822061 0.0512457863848041 0.5034612146295316 22 | 0.5128286041649304 0.2051540496813189 0.5029478247542158 23 | 0.2820659680233959 0.5128731094294423 0.5026743079140346 24 | 0.0512940081477851 0.8204898394538418 0.5025532420078562 25 | 0.2050917863848056 0.2821329161329942 0.5034612146295316 26 | 0.9743368394538408 0.5897531523983872 0.5025532420078562 27 | 0.8974023461537612 0.3589816041649314 0.5029478247542158 28 | 0.8204449225471606 0.1282199680233944 0.5026743079140346 29 | 0.9230769999999993 0.7692309999999978 0.5024261946878710 30 | 0.8461419210185852 0.5384768320409918 0.5026601575893537 31 | 0.6154201005965731 0.8461005224762772 0.5029115520313994 32 | 0.7692393216204536 0.3076313812708307 0.5026646741595542 33 | 0.5385142971087191 0.6153933216204592 0.5026646741595542 34 | 0.3077279085107349 0.9230339804802057 0.5034536653687667 35 | 0.6923228320409862 0.0769202469404320 0.5026601575893537 36 | 0.4614773812708250 0.3846672971087131 0.5026646741595542 37 | 0.2307662469404335 0.6922959210185837 0.5026601575893537 38 | 0.3846221110090511 0.1538819085107335 0.5034536653687667 39 | 0.1538643769271602 0.4615731005965671 0.5029115520313994 40 | 0.0768799804802072 0.2307761110090567 0.5034536653687667 41 | 0.9999465224762787 0.0000183769271587 0.5029115520313994 42 | 0.5420458643476422 0.6742548571390614 0.6737852052684872 43 | 0.3990832785133023 0.3882008643476382 0.6737852052684872 44 | 0.1136866927065938 0.8169912289681704 0.6738280678972615 45 | 0.2564100000000025 0.1025640000000010 0.6737469918870502 46 | 0.9708372289681648 0.5308610783252377 0.6738280678972615 47 | 0.8281008571390558 0.2452382785132983 0.6737852052684872 48 | 0.6847070783252320 0.9598406927065923 0.6738280678972615 49 | 0.5421771923849121 0.6739324706807963 0.8260071445332642 50 | 0.3992743369342975 0.3883321923849010 0.8260071445332642 51 | 0.1135701901746060 0.8169443708588773 0.8260345404368010 52 | 0.2564100000000025 0.1025640000000010 0.8261293760837418 53 | 0.9707903708588717 0.5310244389665328 0.8260345404368010 54 | 0.8277784706807907 0.2454293369342935 0.8260071445332642 55 | 0.6848704389665272 0.9597241901746045 0.8260345404368010 56 | 57 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 58 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 59 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 60 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 61 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 62 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 63 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 64 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 65 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 66 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 67 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 68 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 69 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 70 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 71 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 72 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 73 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 74 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 75 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 76 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 77 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 78 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 79 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 80 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 81 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 82 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 83 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 84 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 85 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 86 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 87 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 88 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 89 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 90 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 91 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 92 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 93 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 94 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 95 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 96 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 97 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 98 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 99 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 100 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 101 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 102 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 103 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 104 | -------------------------------------------------------------------------------- /examples/bulkcounterpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/examples/bulkcounterpart.png -------------------------------------------------------------------------------- /examples/example_structs.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/examples/example_structs.pkl -------------------------------------------------------------------------------- /examples/mos2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/examples/mos2.png -------------------------------------------------------------------------------- /examples/zr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/examples/zr.png -------------------------------------------------------------------------------- /hetero2d/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara Boland ' 2 | -------------------------------------------------------------------------------- /hetero2d/firetasks/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara M. Boland ' 2 | -------------------------------------------------------------------------------- /hetero2d/firetasks/write_inputs.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | # Copyright (c) CMD Lab Development Team. 3 | # Distributed under the terms of the GNU License. 4 | 5 | """ 6 | These classes write the vasp input sets used to control VASP tags. 7 | """ 8 | from __future__ import division, print_function, unicode_literals, absolute_import 9 | 10 | import os 11 | from importlib import import_module 12 | 13 | from atomate.utils.utils import get_logger 14 | from fireworks.core.firework import FiretaskBase 15 | from fireworks.utilities.fw_utilities import explicit_serialize 16 | from pymatgen.alchemy.materials import TransformedStructure 17 | from pymatgen.alchemy.transmuters import StandardTransmuter 18 | from pymatgen.core import Structure 19 | from pymatgen.io.vasp import Poscar 20 | from pymatgen.transformations.site_transformations import AddSitePropertyTransformation 21 | 22 | from hetero2d.io import CMDLElectronicSet 23 | from hetero2d.manipulate.utils import set_sd_flags 24 | 25 | __author__ = 'Tara M. Boland' 26 | __email__ = 'tboland1@asu.edu' 27 | __copyright__ = "Copyright 2022, CMD Lab" 28 | __maintainer__ = "Tara M. Boland" 29 | __date__ = "June 09, 2022" 30 | 31 | logger = get_logger(__name__) 32 | 33 | @explicit_serialize 34 | class WriteVaspElectronicFromPrev(FiretaskBase): 35 | """ 36 | Writes input files to perform bader analysis, density of states, and charge 37 | density difference calculations. 38 | 39 | Args: 40 | dedos (float): Automatically set nedos using the total energy range 41 | which will be divided by the energy step dedos. Default 0.05 eV. 42 | grid_density (float): Distance between grid points for the NGXF,Y,Z grids. 43 | Defaults to 0.03 Angs; NGXF,Y,Z are ~2x > default. For charge 44 | density difference calculations the parent grid density is used for all 45 | children fireworks. 46 | dos (bool): If True, sets INCAR tags for high quality site-orbital projected 47 | density of states. Defaults to True. 48 | bader (bool): If True, sets INCAR tags to generate bader analysis files. 49 | cdd (bool): If True, ensures the grid density matches between the parent 50 | and child Fireworks. Default set to False. 51 | 52 | Other Parameters: 53 | **kwargs (keyword arguments): Dict of any keyword arguments supported by the 54 | CMDLRelaxSet.from_prev_calc(). 55 | 56 | """ 57 | required_params = ["dedos", "grid_density", "dos", "bader", "cdd"] 58 | 59 | optional_params = ["prev_calc_dir", "small_gap_multiply", "nbands_factor", "electronic_set_overrides"] 60 | 61 | def run_task(self, fw_spec): 62 | # get previous calculation information and increase accuracy 63 | vis_orig = CMDLElectronicSet.from_prev_calc(prev_calc_dir=self.get("prev_calc_dir", "."), 64 | dedos=self.get("dedos", 0.05), 65 | grid_density=self.get("grid_density", 0.03), 66 | dos=self.get("dos", True ), 67 | bader=self.get("bader", True), 68 | cdd=self.get("cdd", False), 69 | nbands_factor=self.get("nbands_factor", 1), 70 | small_gap_multiply=self.get("small_gap_multiply", None), 71 | **self.get("electronic_set_overrides", {})) 72 | 73 | vis_dict = vis_orig.as_dict() # make changes to vis in dict format 74 | vis_orig.write_input(".") 75 | 76 | @explicit_serialize 77 | class WriteSlabStructureIOSet(FiretaskBase): 78 | """ 79 | Apply the provided transformations to the input structure and write the 80 | input set for that structure. Reads structure from POSCAR if no structure 81 | provided. Note that if a transformation yields many structures from one, 82 | only the last structure in the list is used. 83 | 84 | Args: 85 | structure (Structure): Input structure. 86 | transformations (list): List of names of transformation classes as defined 87 | in the modules in pymatgen.transformations. 88 | vasp_input_set (VaspInputSet): VASP input set. 89 | 90 | Other Parameters: 91 | transformation_params (list): List of dicts where each dict specifies the 92 | input parameters to instantiate the transformation class in the 93 | transformations list. 94 | override_default_vasp_params (dict): Additional user input settings. 95 | prev_calc_dir (str): Path to previous calculation if using structure 96 | from another calculation. 97 | 98 | Returns: 99 | none 100 | """ 101 | 102 | required_params = ["structure", "transformations", "vasp_input_set"] 103 | optional_params = ["prev_calc_dir", "transformation_params", "override_default_vasp_params"] 104 | 105 | def run_task(self, fw_spec): 106 | """ 107 | Execute the transformations and write the input files for the calculation. 108 | """ 109 | transformations = [] 110 | transformation_params = self.get("transformation_params", 111 | [{} for i in range(len(self["transformations"]))]) 112 | for t in self["transformations"]: 113 | found = False 114 | for m in ["advanced_transformations", "defect_transformations", 115 | "site_transformations", "standard_transformations"]: 116 | mod = import_module("pymatgen.transformations.{}".format(m)) 117 | try: 118 | t_cls = getattr(mod, t) 119 | except AttributeError: 120 | continue 121 | t_obj = t_cls(**transformation_params.pop(0)) 122 | transformations.append(t_obj) 123 | found = True 124 | if not found: 125 | raise ValueError("Could not find transformation: {}".format(t)) 126 | 127 | structure = self['structure'] if not self.get('prev_calc_dir', None) else \ 128 | Poscar.from_file(os.path.join(self['prev_calc_dir'], 'POSCAR')).structure 129 | ts = TransformedStructure(structure) 130 | transmuter = StandardTransmuter([ts], transformations) 131 | trans_structure = transmuter.transformed_structures[-1].final_structure.copy() 132 | 133 | # add selective dynamics tags 134 | aspt = AddSitePropertyTransformation({'selective_dynamics': set_sd_flags( 135 | interface=trans_structure, n_layers=fw_spec.get('nlayers_sub'), 136 | top=True, bottom=False)}) 137 | final_structure = aspt.apply_transformation(trans_structure) 138 | 139 | # update vasp input with user overrides 140 | vis_orig = self["vasp_input_set"] 141 | vis_dict = vis_orig.as_dict() 142 | vis_dict["structure"] = final_structure.as_dict() 143 | vis_dict.update(self.get("override_default_vasp_params", {}) or {}) 144 | vis = vis_orig.__class__.from_dict(vis_dict) 145 | vis.write_input(".") 146 | 147 | @explicit_serialize 148 | class WriteHeteroStructureIOSet(FiretaskBase): 149 | """ 150 | Apply the provided transformations to the input 2D structure and 151 | substrate slab then write the input set for that simulation. Reads 152 | structure from POSCAR if no structure provided. 153 | 154 | Args: 155 | structure (Slab): 2D input structure to place on substrate. Valid 156 | parameters include all pymatgen structure objects. 157 | 158 | Other Parameters: 159 | vasp_input_set (VaspInputSet): VASP input set for the transformed 2d on sub-slab. 160 | override_default_vasp_params (dict): Additional user input settings. 161 | user_incar_settings (dict): Additional incar settings to add to the calculation. 162 | 163 | Returns: 164 | None 165 | """ 166 | required_params = ["structure", "nlayers_sub", "nlayers_2d"] 167 | optional_params = ["user_incar_settings", "override_default_vasp_params", 168 | "vasp_input_set"] 169 | 170 | def run_task(self, fw_spec): 171 | ''' 172 | Write the selective dynamics tags for the 2d-substrate heterostructure 173 | configuration and all calculation input file to the specified directory. 174 | ''' 175 | structure = self['structure'] 176 | 177 | # set selective dynamics for the 2D sub slab iface 178 | sd_flags = set_sd_flags( 179 | interface=structure, 180 | n_layers=self['nlayers_sub'] + self['nlayers_2d'], 181 | top=True, bottom=False) 182 | for idx, sd in enumerate(sd_flags): 183 | sd_flags[idx] = [True if j == 1.0 else False for j in sd] 184 | structure.add_site_property('selective_dynamics', sd_flags) 185 | 186 | # write vasp input 187 | vis_orig = self["vasp_input_set"] # get vis passed to FW 188 | vis_dict = vis_orig.as_dict() # editable 189 | vis_dict["structure"] = structure.as_dict() # update structure 190 | vis_dict.update(self.get("override_default_vasp_params", 191 | {}) or {}) # override defaults 192 | vis_dict['user_incar_settings'].update(self.get("user_incar_settings", {})) # uis 193 | vis = vis_orig.__class__.from_dict(vis_dict) # update the vis 194 | vis.write_input(".") 195 | -------------------------------------------------------------------------------- /hetero2d/fireworks/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara M. Boland ' 2 | 3 | from .core import * 4 | -------------------------------------------------------------------------------- /hetero2d/io/CMDLRelaxSet.yaml: -------------------------------------------------------------------------------- 1 | # Default VASP settings for calculations in the 2DMSD. 2 | # Reasonably robust and based off Materials Project 3 | # VASP settings 4 | INCAR: 5 | ALGO: FAST 6 | ENCUT: 520 7 | EDIFF: 1e-4 8 | EDIFFG: -0.02 9 | IBRION: 2 10 | ICHARG: 1 11 | ISIF: 3 12 | ISMEAR: 0 13 | ISPIN: 1 14 | LORBIT: 11 15 | LREAL: AUTO 16 | LWAVE: false 17 | NELM: 100 18 | NSW: 99 19 | PREC: Accurate 20 | SIGMA: 0.05 21 | POTIM: 0.15 22 | KPOINTS: 23 | reciprocal_density: 64 24 | POTCAR: 25 | Ac: Ac 26 | Ag: Ag 27 | Al: Al 28 | Ar: Ar 29 | As: As 30 | Au: Au 31 | B: B 32 | Ba: Ba_sv 33 | Be: Be_sv 34 | Bi: Bi 35 | Br: Br 36 | C: C 37 | Ca: Ca_sv 38 | Cd: Cd 39 | Ce: Ce 40 | Cl: Cl 41 | Co: Co 42 | Cr: Cr_pv 43 | Cs: Cs_sv 44 | Cu: Cu_pv 45 | Dy: Dy_3 46 | Er: Er_3 47 | Eu: Eu 48 | F: F 49 | Fe: Fe_pv 50 | Ga: Ga_d 51 | Gd: Gd 52 | Ge: Ge_d 53 | H: H 54 | He: He 55 | Hf: Hf_pv 56 | Hg: Hg 57 | Ho: Ho_3 58 | I: I 59 | In: In_d 60 | Ir: Ir 61 | K: K_sv 62 | Kr: Kr 63 | La: La 64 | Li: Li_sv 65 | Lu: Lu_3 66 | Mg: Mg_pv 67 | Mn: Mn_pv 68 | Mo: Mo_pv 69 | N: N 70 | Na: Na_pv 71 | Nb: Nb_pv 72 | Nd: Nd_3 73 | Ne: Ne 74 | Ni: Ni_pv 75 | Np: Np 76 | O: O 77 | Os: Os_pv 78 | P: P 79 | Pa: Pa 80 | Pb: Pb_d 81 | Pd: Pd 82 | Pm: Pm_3 83 | Pr: Pr_3 84 | Pt: Pt 85 | Pu: Pu 86 | Rb: Rb_sv 87 | Re: Re_pv 88 | Rh: Rh_pv 89 | Ru: Ru_pv 90 | S: S 91 | Sb: Sb 92 | Sc: Sc_sv 93 | Se: Se 94 | Si: Si 95 | Sm: Sm_3 96 | Sn: Sn_d 97 | Sr: Sr_sv 98 | Ta: Ta_pv 99 | Tb: Tb_3 100 | Tc: Tc_pv 101 | Te: Te 102 | Th: Th 103 | Ti: Ti_pv 104 | Tl: Tl_d 105 | Tm: Tm_3 106 | U: U 107 | V: V_pv 108 | W: W_pv 109 | Xe: Xe 110 | Y: Y_sv 111 | Yb: Yb_2 112 | Zn: Zn 113 | Zr: Zr_sv 114 | -------------------------------------------------------------------------------- /hetero2d/io/VASPIncarBase.yaml: -------------------------------------------------------------------------------- 1 | MAGMOM: 2 | Ce: 5 3 | Ce3+: 1 4 | Co: 5 5 | Co3+: 0.6 6 | Co4+: 1 7 | Cr: 5 8 | Dy3+: 5 9 | Er3+: 3 10 | Eu: 10 11 | Eu2+: 7 12 | Eu3+: 6 13 | Fe: 5 14 | Gd3+: 7 15 | Ho3+: 4 16 | La3+: 0.6 17 | Lu3+: 0.6 18 | Mn: 5 19 | Mn3+: 4 20 | Mn4+: 3 21 | Mo: 5 22 | Nd3+: 3 23 | Ni: 5 24 | Pm3+: 4 25 | Pr3+: 2 26 | Sm3+: 5 27 | Tb3+: 6 28 | Tm3+: 2 29 | V: 5 30 | W: 5 31 | Yb3+: 1 32 | -------------------------------------------------------------------------------- /hetero2d/io/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara M. Boland ' 2 | from .VaspInterfaceSet import CMDLElectronicSet, CMDLInterfaceSet 3 | -------------------------------------------------------------------------------- /hetero2d/io/vdW_parameters.yaml: -------------------------------------------------------------------------------- 1 | # VASP settings for the various vdW functionals. 2 | dftd2: 3 | IVDW: 1 4 | dftd3: 5 | IVDW: 11 6 | dftd3-bj: 7 | IVDW: 12 8 | ts: 9 | IVDW: 2 10 | ts-hirshfeld: 11 | IVDW: 21 12 | mbd@rsc: 13 | IVDW: 202 14 | ddsc: 15 | IVDW: 4 16 | df: 17 | LUSE_VDW: True 18 | AGGAC: 0.0 19 | GGA: RE 20 | optpbe: 21 | LUSE_VDW: True 22 | AGGAC: 0.0 23 | GGA: OR 24 | optb88: 25 | LUSE_VDW: True 26 | AGGAC: 0.0 27 | GGA: BO 28 | PARAM1: 0.18333333 29 | PARAM2: 0.22 30 | optb86b: 31 | LUSE_VDW: True 32 | AGGAC: 0.0 33 | GGA: MK 34 | PARAM1: 0.1234 35 | PARAM2: 1.0 36 | df2: 37 | LUSE_VDW: True 38 | AGGAC: 0.0 39 | GGA: ML 40 | ZAB_VDW: -1.8867 41 | rvv10: 42 | LUSE_VDW: True 43 | BPARAM: 15.7 44 | -------------------------------------------------------------------------------- /hetero2d/manipulate/__init__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | __author__ = 'Tara M. Boland ' 3 | 4 | from .utils import * 5 | from hetero2d.manipulate.heterotransmuter import * 6 | -------------------------------------------------------------------------------- /hetero2d/manipulate/layersolver.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | # Copyright (c) CMD Lab Development Team. 3 | # Distributed under the terms of the GNU License. 4 | 5 | """ 6 | Analyze an existing structure and parse it based on atomic layers. The cutoff can be changed but defaults to 0.5 7 | Angstroms. Returns a LayeredStructure dictionary. 8 | """ 9 | import numpy as np 10 | from copy import deepcopy 11 | from operator import itemgetter 12 | 13 | from pymatgen.core.structure import Structure 14 | from pymatgen.symmetry.analyzer import SpacegroupAnalyzer 15 | 16 | 17 | __author__ = "Sydney Olson" 18 | __copyright__ = "Copyright 2022, CMD Lab" 19 | __maintainer__ = "Tara M. Boland" 20 | __email__ = "tboland1@asu.edu, snolson1@asu.edu" 21 | __date__ = "June 9, 2022" 22 | 23 | 24 | def LayerSolver(structure, cutoff=0.5): 25 | """ 26 | Group sites in a structure into layers according to z-coordinate. Return layer specific data such as the 27 | z-coordinate of layer, a list of sites, the species of elements in the layer and the atom indices of that layer. 28 | 29 | Args: 30 | structure (Structure): Input structure to be analyzed. 31 | cutoff (float): The inter-layer separation distance that the algorithm searches for. 32 | 33 | Returns: 34 | Layers dictionary returning layer specific information: each layer information is encoded with dictionary key 35 | num_layers (int): number of layers in the structure and Layer{i} with sub-keys 36 | avg_z (float): average z-coordinate of the layer 37 | sites (list of PeriodicSite): PeriodicSites for each site within the layer 38 | species (list): elemental species of each site within the layer 39 | site_idx (list): atom indices for species within the layer 40 | wyckoffs (list): wyckoff symbols for each site in the layer 41 | """ 42 | # ensure structure is pymatgen structure obj 43 | if not isinstance(structure, Structure): 44 | # return print('Structure must be a pymatgen structure object.') 45 | print('Structure must be a pymatgen structure object.') 46 | 47 | # add wyckoff to site_property 48 | sga = SpacegroupAnalyzer(structure) 49 | sym_data = sga.get_symmetry_dataset() 50 | wyckoffs = sym_data['wyckoffs'] 51 | structure.add_site_property('wyckoffs', values=wyckoffs) 52 | 53 | # add site indices & z_value to sort structure & track sites 54 | dict_structure = structure.as_dict() # dictionary rep of struct 55 | [site.update({'index': idx, 'z_value': site['xyz'][2]}) 56 | for idx, site in enumerate(dict_structure['sites'])] 57 | 58 | # sort sites based on z value 59 | dict_structure['sites'] = sorted(dict_structure['sites'], key=itemgetter('z_value')) 60 | 61 | # get lower & upper z value searching bounds 62 | z0 = dict_structure['sites'][0]['z_value'] 63 | z1 = dict_structure['sites'][-1]['z_value'] 64 | 65 | # initialized return data and layer counter 66 | n = 0 # number of layers to track 67 | z = deepcopy(z0) # starting z value 68 | layered_structure = {} # layer dependent dict 69 | 70 | while z <= z1: 71 | layer_indices = [] # layer atom indices 72 | layer_sites = [] # site dictionary object 73 | layer_wyc = [] # site wyckoff labels for each atom 74 | 75 | # search for all sites within [z,z+cutoff] 76 | # all sites found within this range compose a layer 77 | for site in dict_structure['sites']: 78 | if z <= site['z_value'] <= z + cutoff: 79 | layer_indices.append(site['index']) 80 | layer_sites.append(structure[site['index']]) 81 | layer_wyc.append(site['properties']['wyckoffs']) 82 | 83 | # only analyze data if it exists 84 | if layer_indices: 85 | # compute: average z-coordinate for all layer sites & 86 | # return layer species 87 | 88 | z_cords = [layer_site.z for layer_site in layer_sites] 89 | layer_species = [layer_site.species_string for layer_site in layer_sites] 90 | average_z = sum(z_cords) / len(z_cords) 91 | 92 | # dictionary of layer information computed 93 | layered_structure["Layer{}".format(n)] = {'avg_z': average_z, 94 | 'sites': layer_sites, 'species': list(np.unique(layer_species)), 95 | 'site_idx': layer_indices, 'wyckoffs': layer_wyc} 96 | n += 1 # increment the layer number 97 | 98 | # add cutoff to z to search next z area 99 | z += cutoff 100 | layered_structure['num_layers'] = n 101 | 102 | return layered_structure 103 | -------------------------------------------------------------------------------- /hetero2d/workflow/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'Tara M. Boland ' 2 | 3 | from .core import * 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | ase==3.22.1 2 | mpmath==1.1.0 3 | pip 4 | seaborn 5 | ipykernel 6 | numpy 7 | FireWorks 8 | pymatgen==2022.5.26 9 | custodian 10 | atomate 11 | monty 12 | sphinx==3.0.1 13 | sphinx-rtd-theme==0.5.2 14 | sphinx_autodoc_annotation==1.0.post1 15 | pybtex 16 | Jinja2 17 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | license_files = LICENSE 3 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # Always prefer setuptools over distutils 2 | from setuptools import setup, find_packages 3 | from os import path 4 | 5 | here = path.abspath(path.dirname(__file__)) 6 | 7 | # Get the long description from the README file 8 | with open(path.join(here, 'README.md'), encoding='utf-8') as f: 9 | long_description = f.read() 10 | 11 | setup( 12 | name='hetero2d', 13 | version='1.0.1', 14 | platform='linux', 15 | description='Automation workflow to simulate the synthesis of two dimensional materials', 16 | long_description=long_description, 17 | long_description_content_type='text/x-rst', 18 | url='https://github.com/cmdlab/Hetero2d', 19 | author='Tara M. Boland. Lead Developer', 20 | author_email='tara.boland01@gmail.com', 21 | 22 | classifiers=[ 23 | 'Development Status :: 5 - Production/Stable', 24 | 'Intended Audience :: Academic Research', 25 | 'Topic :: Computational :: DFT :: Automation', 26 | 'License :: GNU GPL', 27 | 'Programming Language :: Python :: 3.6', 28 | 'Programming Language :: Python :: 3.7', 29 | 'Programming Language :: Python :: 3.8', 30 | 'Programming Language :: Python :: 3.9', 31 | 'Programming Language :: Python :: 3 :: Only', 32 | ], 33 | 34 | keywords='synthesis density-functional-theory two-dimensional 2D automation pymatgen', 35 | 36 | packages=find_packages(), 37 | python_requires='>=3.6, <4', 38 | install_requires=[], 39 | project_urls={'Bug Reports': 'https://github.com/cmdlab/Hetero2d/issues', 40 | 'Source': 'https://github.com/cmdlab/Hetero2d/', 41 | }, 42 | ) 43 | -------------------------------------------------------------------------------- /sphinx/.nojekyll: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sphinx/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = ../docs 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /sphinx/_static/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/sphinx/_static/github.png -------------------------------------------------------------------------------- /sphinx/_static/orcid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cmdlab/Hetero2d/bd3371aa098d31bb8d2173febaa56c411ce3f0d3/sphinx/_static/orcid.jpg -------------------------------------------------------------------------------- /sphinx/conf.py: -------------------------------------------------------------------------------- 1 | # -- Path setup -------------------------------------------------------------- 2 | 3 | # If extensions (or modules to document with autodoc) are in another directory, 4 | # add these directories to sys.path here. If the directory is relative to the 5 | # documentation root, use os.path.abspath to make it absolute, like shown here. 6 | import os 7 | import sys 8 | sys.path.insert(0, os.path.abspath('../')) 9 | sys.path.insert(0, os.path.abspath('../hetero2d')) 10 | sys.path.insert(0, os.path.abspath('../hetero2d/workflow')) 11 | sys.path.insert(0, os.path.abspath('../hetero2d/io')) 12 | sys.path.insert(0, os.path.abspath('../hetero2d/manipulate')) 13 | sys.path.insert(0, os.path.abspath('../hetero2d/fireworks')) 14 | sys.path.insert(0, os.path.abspath('../hetero2d/firetasks')) 15 | # -- Project information ----------------------------------------------------- 16 | 17 | project = 'Hetero2d' 18 | copyright = '2021, Tara Maria Boland' 19 | author = 'Tara Maria Boland' 20 | 21 | # The full version, including alpha/beta/rc tags 22 | release = '1.0.0' 23 | 24 | 25 | # -- General configuration --------------------------------------------------- 26 | 27 | # Add any Sphinx extension module names here, as strings. They can be 28 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 29 | # ones. 30 | extensions = [ 31 | 'sphinx.ext.autodoc', 32 | 'sphinx.ext.napoleon' 33 | ] 34 | 35 | # Add any paths that contain templates here, relative to this directory. 36 | templates_path = ['_templates'] 37 | 38 | # The master toctree document. 39 | master_doc = 'index' 40 | 41 | # List of patterns, relative to source directory, that match files and 42 | # directories to ignore when looking for source files. 43 | # This pattern also affects html_static_path and html_extra_path. 44 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] 45 | 46 | 47 | # -- Options for HTML output ------------------------------------------------- 48 | 49 | # The theme to use for HTML and HTML Help pages. See the documentation for 50 | # a list of builtin themes. 51 | # 52 | html_theme = 'sphinx_rtd_theme' 53 | autodoc_member_order = 'bysource' 54 | autodoc_mock_imports = ["fireworks", "firetasks"] 55 | autoclass_content = 'both' 56 | autodoc_default_flags = ['members', 'undoc-members', 'private-members', 'special-members', 'inherited-members', 'show-inheritance'] 57 | # Add any paths that contain custom static files (such as style sheets) here, 58 | # relative to this directory. They are copied after the builtin static files, 59 | # so a file named "default.css" will overwrite the builtin "default.css". 60 | html_static_path = ['_static'] 61 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.firetasks.rst: -------------------------------------------------------------------------------- 1 | hetero2d.firetasks package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.firetasks.heteroiface\_tasks module 8 | -------------------------------------------- 9 | 10 | .. automodule:: hetero2d.firetasks.heteroiface_tasks 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | hetero2d.firetasks.parse\_outputs module 16 | ---------------------------------------- 17 | 18 | .. automodule:: hetero2d.firetasks.parse_outputs 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | hetero2d.firetasks.run\_calc module 24 | ----------------------------------- 25 | 26 | .. automodule:: hetero2d.firetasks.run_calc 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | 31 | hetero2d.firetasks.write\_inputs module 32 | --------------------------------------- 33 | 34 | .. automodule:: hetero2d.firetasks.write_inputs 35 | :members: 36 | :undoc-members: 37 | :show-inheritance: 38 | 39 | Module contents 40 | --------------- 41 | 42 | .. automodule:: hetero2d.firetasks 43 | :members: 44 | :undoc-members: 45 | :show-inheritance: 46 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.fireworks.rst: -------------------------------------------------------------------------------- 1 | hetero2d.fireworks package 2 | ========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.fireworks.core module 8 | ------------------------------ 9 | 10 | .. automodule:: hetero2d.fireworks.core 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.fireworks 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.io.rst: -------------------------------------------------------------------------------- 1 | hetero2d.io package 2 | =================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.io.VaspInterfaceSet module 8 | ----------------------------------- 9 | 10 | .. automodule:: hetero2d.io.VaspInterfaceSet 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.io 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.manipulate.rst: -------------------------------------------------------------------------------- 1 | hetero2d.manipulate package 2 | =========================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.manipulate.heterotransmuter module 8 | ------------------------------------------- 9 | 10 | .. automodule:: hetero2d.manipulate.heterotransmuter 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | hetero2d.manipulate.layersolver module 16 | -------------------------------------- 17 | 18 | .. automodule:: hetero2d.manipulate.layersolver 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | 23 | hetero2d.manipulate.utils module 24 | -------------------------------- 25 | 26 | .. automodule:: hetero2d.manipulate.utils 27 | :members: 28 | :undoc-members: 29 | :show-inheritance: 30 | 31 | Module contents 32 | --------------- 33 | 34 | .. automodule:: hetero2d.manipulate 35 | :members: 36 | :undoc-members: 37 | :show-inheritance: 38 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.rst: -------------------------------------------------------------------------------- 1 | hetero2d package 2 | ================ 3 | 4 | Subpackages 5 | ----------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | hetero2d.firetasks 11 | hetero2d.fireworks 12 | hetero2d.io 13 | hetero2d.manipulate 14 | hetero2d.workflow 15 | 16 | Module contents 17 | --------------- 18 | 19 | .. automodule:: hetero2d 20 | :members: 21 | :undoc-members: 22 | :show-inheritance: 23 | -------------------------------------------------------------------------------- /sphinx/hetero2d/hetero2d.workflow.rst: -------------------------------------------------------------------------------- 1 | hetero2d.workflow package 2 | ========================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | hetero2d.workflow.core module 8 | ----------------------------- 9 | 10 | .. automodule:: hetero2d.workflow.core 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: hetero2d.workflow 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /sphinx/hetero2d/modules.rst: -------------------------------------------------------------------------------- 1 | hetero2d 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | hetero2d 8 | -------------------------------------------------------------------------------- /sphinx/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sphinx/index.rst: -------------------------------------------------------------------------------- 1 | .. Hetero2d documentation master file, created by 2 | sphinx-quickstart on Tue Aug 3 17:24:39 2021. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Welcome to Hetero2d's documentation! 7 | ===================================== 8 | 9 | .. toctree:: 10 | :maxdepth: 1 11 | :caption: Contents: 12 | 13 | project_intro/modules 14 | Documentation 15 | 16 | Indices and tables 17 | =================== 18 | 19 | * :ref:`genindex` 20 | * :ref:`modindex` 21 | * :ref:`search` 22 | 23 | -------------------------------------------------------------------------------- /sphinx/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=../docs 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /sphinx/modules.rst: -------------------------------------------------------------------------------- 1 | hetero2d 2 | ======== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | project_intro/modules 8 | Documentation 9 | 10 | -------------------------------------------------------------------------------- /sphinx/project_intro/installation.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | Installing Hetero2d 3 | ===================== 4 | 5 | IMPORTANT NOTE: Atomate and FireWorks do not run on Windows OS. You need a unix-based OS (Mac or Linux) in order for these packages to run. As such, all setup instructions are given for Unix systems. 6 | 7 | 1. Download the repo from the green code icon or via github's commandline tool gh. 8 | 9 | * ``gh repo clone cmdlab/Hetero2d`` (gh must be installed) 10 | * ``git clone https://github.com/cmdlab/Hetero2d.git`` 11 | 12 | 2. Install Hetero2d in a clean enviromnent using python=3.6. I suggest using Anaconda3 to manange environments. 13 | 14 | * ``conda create --name hetero2d python=3.6`` 15 | 16 | 3. Activate the *hetero2d* environment and run the line below to install Hetero2d. Must be in the directory where Hetero2d was downloaded to. 17 | 18 | * ``pip install -r requirements.txt`` 19 | 20 | 4. After installation, Hetero2d needs to be added to your python path. This can be done by running the first line below **OR** by adding the 2nd line to your *.bashrc* file. This is only necessary if python cannot find the package or the setup.py failed for some reason. 21 | 22 | * ``python setup.py develop`` or ``python setup.py install`` 23 | * ``export PYTHONPATH="$HOME/path_to_package/Hetero2d:$PYTHONPATH"`` 24 | 25 | 5. If this is your first time installing the package dependencies listed below, please ensure you have followed the respective setup instructions: 26 | * `atomate `_ 27 | * `FireWorks `_ 28 | * `pymatgen `_ 29 | * `MPInterfaces `_ 30 | 31 | 6. To run jupyter notebooks on various resources the ipykernel has to be installed. Sometimes this isn't enough and you need explicitly add the kernel to the list of environments. 32 | 33 | * Activate your environment ``conda activate hetero2d`` 34 | * ``python -m ipykernel install --user --name hetero2d`` 35 | 36 | 37 | Setting up dependancies 38 | ======================== 39 | The Hetero2d package dependancies have a lot of documentation to look over. I will highlight the essential documentation to get started as quickly as possible. 40 | 41 | 1. *atomate* requires the most set up. Mainly, creating a directory scaffold and writing the 5 required files to connect to the database and run jobs. (MongoDB or free Atlas MongoDB is required) 42 | 43 | 2. *pymatgen* has a command line tool installed to set up default directory paths for psuedopotentials called *pmg*. There are 2 essential commands you have to run to use Hetero2d on any system. 44 | 45 | * VASP POTCARs directory: ``pmg config -p `` 46 | * Default pseudopotential: ``pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_54`` 47 | 48 | 3. *MPInterfaces* has a config file similar to pymatgen. You need to set at least 2 parameters in the mpint_config.yaml file to remove the warning message. An example config file can be found on MPInterfaces github website. 49 | 50 | * mp_api: the_key_obtained_from_materialsproject 51 | * potentials: path_to_vasp_potcar_files 52 | 53 | 54 | -------------------------------------------------------------------------------- /sphinx/project_intro/introduction.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Introduction 3 | ============ 4 | 5 | The Hetero2d package leverages well known computational tools: pymatgen, MPInterfaces, atomate, fireworks, and custodian to perform high-throughput ab-initio calculations. Hetero2d is tailored to addressing scientific questions regarding the stability of 2D-substrate hetero-structured materials using an all-in-one workflow approach to model the hetero-structures formed by arbitrary 2D materials and substrates. The workflow creates, computes, analyzes and stores all relevant simulation parameters and results in a queryable MongoDB database that can be accessed through our API. 6 | 7 | 8 | Package Description 9 | =================== 10 | 11 | The 2D-substrate hetero-structure workflow takes a given 2D material, 3D phase (bulk) of the 2D material, and a substrate, relaxes the structures using vdW-corrected DFT and creates hetero-structures subject to user constraints. The workflow analyzes and stores energetic stability information of various 2D hetero-structured materials to predict the feasibility of a substrate stabilizing a meta-stable 2D material. 12 | 13 | Hetero2d provides automated routines for the generation of low-lattice mismatched hetero-structures for arbitrary 2D materials and substrate surfaces, the creation of van der Waals corrected density-functional theory (DFT) input files, the submission and monitoring of simulations on computing resources, the post-processing of the key parameters to compute (a) the interface interaction energy of 2D-substrate hetero-structures, (b) the identification of substrate-induced changes in interfacial structure, and (c) charge doping of the 2D material. 14 | 15 | Examples 16 | ======== 17 | 18 | To get started using Hetero2d, various tutorials and examples have been created using Jupyter Notebooks. These notebooks demonstrate the basic functionality of Hetero2d to enable users to quickly learn how to use the various modules within this package. These can be found under Hetero2d/examples. 19 | 20 | How to cite Hetero2d 21 | ==================== 22 | 23 | If you use Hetero2d in your research, please consider citing the following work: 24 | 25 | Tara M. Boland, Arunima K. Singh. Computational Synthesis of 2D Materials: A High-throughput Approach to Materials Design (2021). arXiv:2112.03900. 26 | 27 | License 28 | ======= 29 | 30 | Hetero2d is released under the GNU General Public Version 3 License. Copyright (C) 2007 Free Software Foundation, Inc. . The terms of the license can be found in the main directory in this software package under the LICENSE file. 31 | 32 | About the Team 33 | ============== 34 | 35 | Arunima Singh (P.I.) of the Computational Materials Design Lab started Hetero2d in 2020, and is project lead. 36 | 37 | Currently, the main developer for this package is graduate student Tara M. Boland who has developed much of the existing Hetero2d package under the guidance of Arunima Singh. 38 | 39 | See more team details in the Development Team section. 40 | 41 | Copyright Policy 42 | ================ 43 | 44 | Hetero2d uses a shared copyright model. Each contributor maintains 45 | copyright over their contributions to pymatgen. But, it is important 46 | to note that these contributions are typically only changes to the 47 | repositories. Thus, the Hetero2d source code, in its entirety is not 48 | the copyright of any single person or institution. Instead, it is the 49 | collective copyright of the entire Hetero2d Development Team. If 50 | individual contributors want to maintain a record of what 51 | changes/contributions they have specific copyright on, they should 52 | indicate their copyright in the commit message of the change, when 53 | they commit the change to one of the pymatgen repositories. 54 | 55 | With this in mind, the following banner should be used in any source 56 | code file to indicate the copyright and license terms:: 57 | 58 | # Copyright (c) CMD Lab Development Team. 59 | # Distributed under the terms of the GNU License. 60 | -------------------------------------------------------------------------------- /sphinx/project_intro/modules.rst: -------------------------------------------------------------------------------- 1 | Project Introduction 2 | ========================== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | introduction 8 | installation 9 | team 10 | references 11 | -------------------------------------------------------------------------------- /sphinx/project_intro/references.rst: -------------------------------------------------------------------------------- 1 | References 2 | ========== 3 | 4 | Some of Hetero2d’s functionality is based on scientific advances / principles developed by various scientists. If you use Hetero2d in your research, you may wish to consider citing the following works: 5 | 6 | Shyue Ping Ong, William Davidson Richards, Anubhav Jain, Geoffroy 7 | Hautier, Michael Kocher, Shreyas Cholia, Dan Gunter, Vincent 8 | Chevrier, Kristin A. Persson, Gerbrand Ceder. *Python Materials 9 | Genomics (pymatgen) : A Robust, Open-Source Python Library for 10 | Materials Analysis.* Computational Materials Science, 2013, 68, 314– 11 | 319. doi:10.1016/j.commatsci.2012.10.028 12 | 13 | Mathew, K., Singh, A. K., Gabriel, J. J., Choudhary, K., Sinnott, 14 | S. B., Davydov, A. V, Hennig, R. G. *MPInterfaces : A Materials 15 | Project based Python tool for high-throughput computational screening 16 | of interfacial systems.* Computational Materials Science, 2016, 122, 17 | 183–190. dio:10.1016/j.commatsci.2016.05.020 18 | 19 | Zur, A., & McGill, T. C. *Lattice match: An application to 20 | heteroepitaxy.* Journal of Applied Physics, 1984, 55, 378–386. 21 | dio:10.1063/1.333084 22 | 23 | Mathew, K., Montoya, J. H., Faghaninia, A., Dwarakanath, S., 24 | Aykol, M., Tang, H., Chu, I., Smidt, T., Bocklund, B., Horton, M., 25 | Dagdelen, J., Wood, B., Liu, Z.-K., Neaton, J., Ong, S. P., 26 | Persson, K., Jain, A. *Atomate: A high-level interface to generate, 27 | execute, and analyze computational materials science workflows.* 28 | Comput. Mater. Sci. 2017, 139, 140–152. 29 | 30 | Singh, A. K., Zhuang, H. L., & Hennig, R. G. *Ab initio synthesis 31 | of single-layer III-V materials.* Physical Review B - Condensed 32 | Matter and Materials Physics, 2014, 89, 1–10. 33 | dio:10.1103/PhysRevB.89.245431 34 | -------------------------------------------------------------------------------- /sphinx/project_intro/team.rst: -------------------------------------------------------------------------------- 1 | ================ 2 | Development Team 3 | ================ 4 | 5 | Hetero2d currently has a small development team. 6 | 7 | Lead Maintainers 8 | ================ 9 | 10 | | **Arunima K. Singh** |as2362| |0000-0002-7212-6310| 11 | | Assistant Professor, Department of Physics 12 | | Arizona State University, Tempe 13 | 14 | .. |as2362| image:: ../_static/github.png 15 | :target: https://github.com/as2362 16 | :width: 26 17 | :height: 26 18 | :alt: GitHub profile for as2362 19 | 20 | .. |0000-0002-7212-6310| image:: ../_static/orcid.jpg 21 | :target: https://orcid.org/0000-0002-7212-6310 22 | :width: 26 23 | :height: 26 24 | :alt: ORCID profile for 0000-0002-7212-6310 25 | 26 | | **Tara M. Boland** |tboland1| |0000-0002-2587-5677| 27 | | PhD Candidate, Materials Science and Engineering 28 | | Arizona State University, Tempe 29 | 30 | .. |tboland1| image:: ../_static/github.png 31 | :target: https://github.com/tboland1 32 | :width: 26 33 | :height: 26 34 | :alt: GitHub profile for tboland1 35 | 36 | .. |0000-0002-2587-5677| image:: ../_static/orcid.jpg 37 | :target: https://orcid.org/0000-0002-2587-5677 38 | :width: 26 39 | :height: 26 40 | :alt: ORCID profile for 0000-0002-2587-5677 41 | 42 | List of Developers (A-Z) 43 | ======================== 44 | 45 | | **Syd Olson** |SNOlson| 46 | | Arizona State University, Tempe 47 | 48 | .. |SNOlson| image:: ../_static/github.png 49 | :target: https://github.com/SNOlson 50 | :width: 26 51 | :height: 26 52 | :alt: GitHub profile for SNOlson 53 | 54 | --------------------------------------------------------------------------------