QNANO
|
NOTE: The current QNANO code and the documentation is mainly developed and maintained by Dr. Moritz Cygorek in the group of Prof. Pawel Hawrylak at the University of Ottawa. For information about rights, intellectual property and usage, please contact us via e-mail to M.Cygorek@hw.ac.uk or Pawel .Haw rylak @uot tawa. ca
QNANO is a tool for atomistic modelling of quantum nanostructures based on tight-binding and configuration-interaction methods.
Currently, the library is specialized to and tested for tetragonally coordinated semiconductor materials, i.e., zincblende or wurtzite crystal structure. Tight-binding material files are available for:
QNANO has been refactored to enable million atom simulations based on diagonalization routines from the library SLEPc, which in turn is based on the library PETSc . Alternatively, diagonalization for smaller systems can be performed using the Eigen library.
The purpose of QNANO is the atomistic caluclation of the electronic structure, many-body states, spectra, etc., from a nanostructure defined by the approximate position of every atom:
At the core of QNANO are tight-binding calculations of single-particle states. The tight-binding approach requires sets of tight-binding parameters for every material. Obtaining these parameters is a non-trivial task, but it has been solved for the materials supported in QNANO.
The information about the material is stored in material files, lattice files, orbital files, etc., which have been set up for the supported materials and can readily be used for calculations by referencing the respective materials in the atom position file.
Thus, it is the main job of the user to generate a position file of the above format for her/his specific sample or use one of the provided tools to generate typical structures.
The code contains separate small tools, where one tool only performs one specific task, e.g., structure generation, generating pictures of structures (positions, charge densities, potentials, ...), strain minimization, tight-binding calculation of single-particle state, band structure calculation, calculation of Coulomb matrix elements, calculation of dipole moments, calculation of many-body states, calculation of spectra, ...
Internally, however, these tools access a high-level C++-library that makes it possible to reuse central data structures, e.g., dealing with the storage and input/output of atomic positions or Coulomb matrix elements, identification of nearest and next-nearest neighbors, diagonalization and integration routines, and much more.
The individual tools can be directly controlled via command line options. For example, to generate a sample of a CdSe nanoplatelet constructed from 10x7x3 blocks of cubic 8-atom zincblende unit cells, we can call (provided the environment variable $QNANO_DIR is set up properly)
$QNANO_DIR/bin/generate -resources_dir $QNANO_DIR/resources -material zbCdSe_cubic -Nx 10 -Ny 7 -Nz 3 -outfile positions.dat
If the number of parameters becomes inconveniently large, we can also outsource the parameter to a driver file, e.g., "driver_file.dat":
material zbCdSe_cubic #this line is just a comment Nx 10 Ny 7 Nz 3 outfile positions.dat
and execute
$QNANO_DIR/bin/generate -resources_dir $QNANO_DIR/resources -driver driver_file.dat
Note that we specify the resources directory, which contains the default material files, still on the command line, because reading from driver file will not resolve the environment variables of the shell.
Example: Graphene structure generation
Example: Graphene tight-binding calculation
Example: Bilayer Graphene
Example: Graphene in external potential
Example: Periodic boundary conditions