Intermat
Interface materials design toolkit
Install / Use
/learn @atomgptlab/IntermatREADME

Table of Contents
- Introduction
- Installation
- Generation
- Calculators and analyzers
- Benchmarking
- Datasets
- AI/ML
- Webapp
- References
- How to contribute
- Correspondence
- Funding support
<a name="intro"></a>
Introduction
Interfaces are critical for a variety of technological applications including semiconductor transistors and diodes, solid-state lighting devices, solar-cells, data-storage and battery applications. While interfaces are ubiquitous, predicting even basic interface properties from bulk data or chemical models remains challenging. Furthermore, the continued scaling of devices towards the atomic limit makes interface properties even more important. There have been numerous scientific efforts to model interfaces with a variety of techniques including density functional theory (DFT), force-field (FF), tight-binding, TCAD and machine learning (ML) techniques. However, to the best of our knowledge, there is no systematic investigation of interfaces for a large class of structural variety and chemical compositions. Most of the previous efforts focus on a limited number of interfaces, and hence there is a need for a dedicated infrastructure for data-driven interface materials design.
The Interface materials design (InterMat) package (https://arxiv.org/abs/2401.02021) introduces a multi-scale and data-driven approach for material interface/heterostructure design. This package allows:
- Generation of an atomistic interface geometry given two similar or different materials,
- Performing calculations using multi-scale methods such as DFT, MD/FF, ML, TB, QMC, TCAD etc.,
- analyzing properties such as equilibrium geometries, energetics, work functions, ionization potentials, electron affinities, band offsets, carrier effective masses, mobilities, and thermal conductivities, classification of heterojunctions, benchmarking calculated properties with experiments,
- training machine learning models especially to accelerate interface design.
<a name="google"></a>
Google colab notebooks
| Notebooks | Google Colab | Descriptions |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Getting started | | Installation of InterMat and generation of atomistic interface geometries given two similar or different materials and other examples. |
| Generating interfaces |
| Si(110)/GaAs(110) interface and Ewald calculations. |
| Band offset with quantum espresso |
| Installing Quantum espresso DFT package and calculations for valence band offset. |
<a name="install"></a>
Installation
-
We recommend installing miniconda environment from https://conda.io/miniconda.html :
bash Miniconda3-latest-Linux-x86_64.sh (for linux) bash Miniconda3-latest-MacOSX-x86_64.sh (for Mac) Download 32/64 bit python 3.9 miniconda exe and install (for windows) Now, let's make a conda environment just for JARVIS:: conda create --name my_intermat python=3.9 source activate my_intermat git clone https://github.com/usnistgov/intermat.git cd inermat python setup.py develop
<a name="generation"></a>
Generation
<a name="bulk"></a>
Bulk structures from scratch
An atomic structure can consist of atomic element types, corresponding xyz coordinates in space (either in real or reciprocal space) and lattice matrix used in setting periodic boundary conditions.
An example of constructing an atomic structure class using
jarvis.core.Atoms is given below. After creating the Atoms class, we
can simply print it and visualize the POSCAR format file in a software
such as VESTA. While the examples below use Silicon elemental crystal
creation and analysis, it can be used for multi-component systems as
well.
from jarvis.core.atoms import Atoms
box = [[2.715, 2.715, 0], [0, 2.715, 2.715], [2.715, 0, 2.715]]
coords = [[0, 0, 0], [0.25, 0.25, 0.25]]
elements = ["Si", "Si"]
Si = Atoms(lattice_mat=box, coords=coords, elements=elements, cartesian=False)
print (Si) # To visualize
Si.write_poscar('POSCAR.vasp')
Si.write_cif('POSCAR.vasp')
The <span class="title-ref">Atoms</span> class here is created from the raw data, but it can also be read from different file formats such as: <span class="title-ref">'.cif', 'POSCAR', '.xyz', '.pdb', '.sdf', '.mol2'</span> etc. The Atoms class can also be written to files in formats such as POSCAR/.cif etc.
Note that for molecular systems, we use a large vaccum padding (say 50 Angstrom in each direction) and set lattice_mat accordingly, e.g. lattice_mat = [[50,0,0],[0,50,0],[0,0,50]]. Similarly, for free surfaces we set high vaccum in one of the crystallographic directions (say z) by giving a large z-comonent in the lattice matrix while keeping the x, y comonents intact.
my_atoms = Atoms.from_poscar('POSCAR')
my_atoms.write_poscar('MyPOSCAR')
Once this Atoms class is created, several imprtant information can be obtained such as:
print ('volume',Si.volume)
print ('density in g/cm3', Si.density)
print ('composition as dictionary', Si.composition)
print ('Chemical formula', Si.composition.reduced_formula)
print ('Spacegroup info', Si.spacegroup())
print ('lattice-parameters', Si.lattice.abc, Si.lattice.angles)
print ('packing fraction',Si.packing_fraction)
print ('number of atoms',Si.num_atoms)
print ('Center of mass', Si.get_center_of_mass())
print ('Atomic number list', Si.atomic_numbers)
For creating/accessing dataset(s), we use Atoms.from_dict() and
Atoms.to_dict() methods:
d = Si.to_dict()
new_atoms = Atoms.from_di
