Package: nano-net
NanoNETIntroductionThe project NanoNET (Nanoscale Non-equilibrium Electron Transport) represents an extendable Python framework for
the electronic structure computations based on
the tight-binding method. The code can deal with both finite
and periodic systems translated in one, two or three dimensions.All computations can be governed by means of the python application programming interface (pyAPI) or the command line interface (CLI).Getting StartedRequirementsNanoNetrequiresopenmpito be installed in the system:Ubuntusudoapt-getinstalllibopenmpi-devMacOSbrewinstallopen-mpiInstalling from PiPyThe easiest way to installNanoNetwithout tests is from the PiPy repository:pipinstallnano-netInstalling from sourcesThe source distribution can be obtained from GitHub:gitclonehttps://github.com/freude/NanoNet.gitcdNanoNetAll other dependencies can be installed at once by invoking the following command
from within the source directory:pipinstall-rrequirements.txtIn order to install the packageNanonetjust invoke
the following line in the bash from within the source directory:pip install .Running the testsIf the source distribution is available, all tests may be run by invoking the following command in the root directory:nosetests --with-doctestExamples of usageAtomic chainHuckel modelBulk siliconBulk silicon - initialization via an input fileSilicon nanowirePython interfaceBelow is a short example demonstrating usage of thetbpackage.
More illustrative examples can be found in the ipython notebooks
in the directoryjupyter_notebooksinside the source directory.Below we demonstrate band structure computation for a nanoribbon with four
atoms per unit cell:--A--
  |
--A--
  |
--A--
  |
--A--If the package is properly installed, the work starts with the import of all necessary modules:importnumpyasnpimportmatplotlib.pyplotaspltimportnanonet.tbastbfromnanonet.negf.recursive_greens_functionsimportrecursive_gffromnanonet.negf.greens_functionsimportsurface_greens_functionFirst, one needs to specify atomic species and corresponding basis sets. We assume that each atom has one s-type atomic orbital with energy -1 eV. It is also possible to use predefined basis sets as
is shown in examples in the ipython notebooks.orb=tb.Orbitals('A')orb.add_orbital(title='s',energy=-1.0)Set tight-binding parameters:tb.set_tb_params(PARAMS_A_A={"ss_sigma":1.0})Define atomic coordinates for the unit cell:input_file="""4NanostripA1 0.0 0.0 0.0A2 0.0 1.0 0.0A3 0.0 2.0 0.0A4 0.0 3.0 0.0"""Make instance of the Hamiltonian class and specify periodic boundary conditions if any:h=tb.Hamiltonian(xyz=input_file,nn_distance=1.4)h.initialize()h.set_periodic_bc([[0,0,1.0]])h_l,h_0,h_r=h.get_hamiltonians()Compute DOS and transmission using Green's functions:energy=np.linspace(-5.0,5.0,150)dos=np.zeros((energy.shape[0]))tr=np.zeros((energy.shape[0]))forj,Einenumerate(energy):# compute surface Green's functionsL,R=surface_greens_function(E,h_l,h_0,h_r)# recursive Green's functionsg_trans,grd,grl,gru,gr_left=recursive_gf(E,[h_l],[h_0+L+R],[h_r])# compute DOSdos[j]=np.real(np.trace(1j*(grd[0]-grd[0].conj().T)))# compute left-lead couplinggamma_l=1j*(L-L.conj().T)# compute right-lead couplinggamma_r=1j*(R-R.conj().T)# compute transmissiontr[j]=np.real(np.trace(gamma_l@g_trans@gamma_r@g_trans.conj().T)))Plot DOS and transmission spectrum:fig,ax=plt.subplots(1,2)ax[0].plot(energy,dos,'k')ax[0].set_ylabel(r'DOS (a.u)')ax[0].set_xlabel(r'Energy (eV)')ax[1].plot(energy,tr,'k')ax[1].set_ylabel(r'Transmission (a.u.)')ax[1].set_xlabel(r'Energy (eV)')fig.tight_layout()plt.show()Done. The result will appear on the screen.AuthorsMykhailo V. Klymenko (mike.klymenko@rmit.edu.au)Jackson S. SmithJesse A. VaitkusJared H. ColeLicenseThis project is licensed under the MIT License - see theLICENSE.mdfile for detailsAcknowledgmentsWe acknowledge support of the RMIT University,
Australian Research Council through grant CE170100026, and
National Computational Infrastructure, which is supported by the Australian Government.ReferencesM.V. Klymenko, J.A. Vaitkus, J.S. Smith, and J.H. Cole, "NanoNET: An extendable Python framework for semi-empirical tight-binding models,"Computer Physics Communications, Volume 259, 107676 (2021)