QNANO
Tools

Table of Contents

Overview of tools

Preliminary Notes

NOTE 1:

One of the most frequently used parameters is the resources directory specified by "resources_dir". This will be used to find resources like material, lattice or orbital files. A parameter of type "resource" is a string that will be interpreted as a filename. The file will be searched in the local directory, optionally appending the suffix ".dat". If no such file is present in the local directory, the file (with and optional suffix ".dat") will be looked for in the resources directory. If called from the command line, "resources_dir" should typically be "$QNANO_DIR/resources".

NOTE 2:

The main input of the QNANO framework is a position file. When applicable, it will be specified by the parameter "positions". However, whenever a position file is required, we might alternatively generate the structure on the fly using the parameter "generate_positions_from_material", which takes 4 arguments: the material name (resource), and the numbers of unit cells Nx, Ny and Nz along the 3 primitive vectors.

NOTE 3:

Some vector-type parameters are available in two variants, where one has the suffix "_LU". This indicates "lattice units": The n-th vector component is multiplied with the n-th primitive lattice vector. The lattice is either specified by a separate parameter or, if a positions file is specified that contains a reference to material files, the equilibrium lattice of the first found material is used.

Parameter Types

In what follows, the "Types" of parameters have the meaning:

Type Name Meaning
Integer A single integer number (C++: int)
Real A real-valued floating point number (C++: double)
Boolean A Boolean value "true" or "false" (C++: bool)
String A string of characters (C++: std::string)
Resource A resource file name (cf. Preliminary Notes!)
Vector(N) A vector of N real-valued floating point numbers

Furthermore, we sometimes have "List of TYPE" for some type "TYPE". This implies that multiple instances of the respetive parameter are parsed, e.g., the "List of Vector(3)" variable "periodic_vec_LU" could be invoked by

-periodic_vec_LU 1 0 0 -periodic_vec_LU 0 1 0

For "List of Strings" in particular, where there is no ambiguity, we can alternatively place the strings simply one after the other, such as in

-EV_file EV0.dat EV1.dat EV2.dat EV3.dat

This allows one to use bash-shell replacements à la

-EV_file EV[0-3].dat


Structure Generation

$QNANO_DIR/bin/generate

Purpose: Generation of basic structures. The default is to create 1x1x1 unit cells of a given material. The number of unit cells can be adjusted and advanced options allow to cut out some predefined shapes.

Required parameters:

Name Type Meaning
material resource Material file name. This file contains the information required to set up the structure of a single unit cell.

Optional parameters:

Name Type Default Value Meaning
Nx, Ny, NzInteger 1 Number of unit cells in the direction of the first, second, and third primitive vector
outfile String"positions.dat" Name of generated positions file
cut_hexagon_zigzag Integer NOTE: only works for "hex2D" lattice (e.g., graphene)! Generates and cuts out a hexagonal flake with zigzag edges. The number specified by this parameter corresponds to the number of hexagonal benzene rings along one side of the hexagon.
cut_hexagon_armchair Integer NOTE: only works for "hex2D" lattice (e.g., graphene)! Generates and cuts out a hexagonal flake with armchair edges. The number specified by this parameter corresponds to the number of hexagonal benzene rings along one side of the hexagon.
use_center_as_originBoolean false If structures are cut (cf. cut_radius or cut_plane), the origin for cutting processes has to be defined. By default the origin is set to (0,0,0), which is the starting point from which the Nx x Ny x Nz is constructed. Setting "use_center_as_origin" to "true" will shift the origin to the center of a bounding box to the generated Nx x Ny x Nz sample.
cut_originVector(3) (0, 0, 0) Set origin for cutting manually
cut_origin_plusVector(3) (0, 0, 0) Shift origin by adding a vector to the original origin
cut_radiusReal 0. If larger than 0: After a block of unit cells has been specified (set Nx, Ny and Nz to large enough values) all atoms outside of a sphere with radius "cut_radius" are removed
cut_planeVector(4) Remove atoms beyond a plane specified by its Hesse normal form. Uses the "cut_origin".
cut_plane_throughVector(6) Remove atoms beyond a plane specified by the vector perpendicular to the plane and pointing outward and a vector determining the origin explicitly.
cut_plane_through_LUVector(6) Remove atoms beyond a plane specified by the vector perpendicular to the plane and pointing outward and a vector determining the origin explicitly. The origin is specified in lattice units, i.e., in multiples of lattice primitive vectors.
cut_plane_through_LU_LUVector(6) Remove atoms beyond a plane specified by the vector perpendicular to the plane and pointing outward and a vector determining the origin explicitly. Both, the direction vector as well as the origin are specified in lattice units.




$QNANO_DIR/bin/shift_positions

Purpose: Takes position file and shifts all atoms by a vector.

Required parameters:

Name Type Meaning
positions String Name of position file.
outfile String Name of output file.

Optional parameters:

Name Type Default Value Meaning
shift_nm Vector(3) (0., 0., 0.) Shift vector in nm.
shift_LU Vector(3) (0., 0., 0.) Shift vector in lattice units.
material Resource Material from which the lattice for the lattice units is deduced. If not specified, the material is taken to be the first one specified in the position file.




$QNANO_DIR/bin/center_positions

Purpose: Shifts all atom positions so that the new origin in the center of a bounding box. Otherwise, using the "generate" tools, the origin is typically the point from which a regular lattice of the underlying material is constructed. This tool is particularly useful in combination with external potentials.

Required parameters:

Name Type Meaning
positions String Name of position file
outfile String Name of generated position file




$QNANO_DIR/bin/add_positions

Purpose: From samples by adding two or more positions files

Required parameters:

Name Type Meaning
positions List of Strings Names of position files to be added
outfile String Name of generated position file

Optional parameters:

Name Type Default Value Meaning
shift_nm Vector(3) (0., 0., 0.) All position files except for the first will be shifted by the specified vector (units: nm) before being added.
shift_LU Vector(3) (0., 0., 0.) All position files except for the first will be shifted by the specified vector (units: lattice units) before being added.




$QNANO_DIR/bin/replace_elements

Purpose: Substitute elements in a position file.

Required parameters:

Name Type Meaning
positions String Name of input position file
outfile String Name of generated position file
replace List of Vector(2) Element identified by first argument is replace by the second argument

Optional parameters:

Name Type Default Value Meaning
density Real 1. Probability of atom being replaced. Used for alloying.
seed Integer 0 Random seed for probabilistic replacement.




$QNANO_DIR/bin/substitute_positions

Purpose: Combine two position files, where the atom types (elements) specified in the 'template' file are replaced by the types of the atoms specified in the 'substitute' file.

Required parameters:

Name Type Meaning
template String Template position file with atoms to be replaced
substitute String Position file with atoms that replace the ones in the 'template' file
outfile String Name of generated position file




Strain Optimization

$QNANO_DIR/bin/strain_optimize_tao

Purpose: Strain relaxation

NOTE: This tool requires a version of PETSc with real scalar type to be installed on the system. However, the system default should be that $PETSC_DIR points to a PETSCc version with complex scalar type for the solution of Hermitian eigenvector problems. Here, we assume that an environment variable $PETSC_DIR_REAL is set that points to the real version of PETSc. To switch to this version, one typically has to execute the tool with an overriden LD_LIBRARY_PATH variable:

LD_LIBRARY_PATH=$PETSC_DIR_REAL/lib:$LD_LIBRARY_PATH  $QNANO_DIR/bin/strain_optimize_tao  ...

Required parameters:

Name Type Meaning
positions String Unrelaxed positions file
outfile String Output (relaxed) position file
resources_dir String Name of generated position file

Optional parameters for PETSc Tao, e.g.:

Name Type Default Value Meaning
tao_gatol Real ? Absolute error tolerance for the modulus of the gradient
tao_max_it Integer ? Maximimum number of iterations. Should be set to a value large enough that the tolerance can be reached.




Local Potentials

$QNANO_DIR/bin/parabolic_potential

Purpose: Generates a parabolic confinement potential in one direction: $ V(\mathbf{r})= a \big[(\mathbf{r}-\mathbf{r}_c)\cdot \mathbf{d}\big]^2 $

Required parameters:

Name Type Meaning
positions String Position file containing atoms positions on which the potential is evaluated.
outfile String Output file containing the potential evaluated at the atoms from the position file.

Optional parameters:

Name Type Default Value Meaning
strength Real 1. Strenght of potential $a$ in meV/nm².
direction Vec3d (0,0,0) Direction vector $\mathbf{d}$ in nm.
center Vec3d (0,0,0) Center of potential $\mathbf{r}_c$ in nm.
truncate_radius Real -1. Truncation radius. If larger than zero, the parabolic potential is capped at $ a \,r_{tr}^2 $ when $ (\mathbf{r}-\mathbf{r}_c)\cdot \mathbf{d} \ge r_{tr}$
add_to String Adds generated potential to an existing potential from file specified by this parameter.




$QNANO_DIR/bin/parabolic_potential_2d

Purpose: Generates a parabolic confinement potential in one direction: $ V(\mathbf{r})= a \big[(\mathbf{r}-\mathbf{r}_c)^2- \big((\mathbf{r}-\mathbf{r}_c)\cdot \mathbf{d}\big)^2\big] $

Required parameters:

Name Type Meaning
positions String Position file containing atoms positions on which the potential is evaluated.
outfile String Output file containing the potential evaluated at the atoms from the position file.

Optional parameters:

Name Type Default Value Meaning
strength Real 1. Strenght of potential $a$ in meV/nm².
direction Vec3d (0,0,0) Direction vector $\mathbf{d}$ in nm.
center Vec3d (0,0,0) Center of potential $\mathbf{r}_c$ in nm.
truncate_radius Real -1. Truncation radius. If larger than zero, the parabolic potential is capped at $ a \,r_{tr}^2 $ when $ (\mathbf{r}-\mathbf{r}_c)\cdot \mathbf{d} \ge r_{tr}$
add_to String Adds generated potential to an existing potential from file specified by this parameter.
set_truncate_offset_zero Boolean false After truncation: shift potential so that the potential cap is set to zero.




$QNANO_DIR/bin/linear_potential

Purpose: Generate potential file describing a linear potential discretized on the atoms of a given sample: $V(r)=V_0 \;\mathbf{d}\cdot(\mathbf{r}-\mathbf{r}_0)$.

Required parameters:

Name Type Meaning
positions String Name of input position file
outfile String Name of generated position file
strength or strength_LU Real strength $V_0$ of the potential in [eV/nm] or [eV] if lattice units are used.

Optional parameters:

Name Type Default Value Meaning
center Vector(3) (0, 0, 0) Center $\mathbf{r}_0$ of the coordinate system.
direction Vector(3) (0, 0, 1) Direction $\mathbf{d}$, will be normalized. If "strength_LU" is specified, the direction is interpreted in lattice units before normalization.
add_to String After calculation, the potential is added to the potential from the file specified by this parameter.




$QNANO_DIR/bin/truncate_potential

Purpose: Truncates potential: every value of the potential above (or below) a given threshold is set to the threshold value.

Required parameters:

Name Type Meaning
potential String Name of the input potential file.
outfile String Name of the output potential file.
threshold Real Threshold at which the potential is capped

Optional parameters:

Name Type Default Value Meaning
from_below Boolean false Set to true if potential is to be capped from below instead of from above.




$QNANO_DIR/bin/add_potential

Purpose: Adds two or more potential files.

Required parameters:

Name Type Meaning
potential String Basic potential file to which others are added.
add List of Strings Names of other potential files.
outfile String Output file containing the summed potential.




$QNANO_DIR/bin/potential_from_GTE

TODO: EXPAND




Displaying structures

$QNANO_DIR/bin/QNANO2ps

Purpose: Display structures by generating postscript files. The output can be opened with a standard ps/pdf reader like "evince" on Linux or it can be converted by most image processing tools to another graphics format.

Required parameters:

Name Type Meaning
positions String Name of positions file of the structure to be depicted

Optional parameters:

Name Type Default Value Meaning
outfile String "QNANO2ps.ps" Name of the generated postscript file. Should end in ".ps"
displayEVList of Strings Name of a single-particle eigenvector file. When used, the charge density of the eigenstate will be plotted. If multiple file names are specified, the charge densities will be added (useful, e.g., for degenerate states).
potentialStringName of a potential file. When used, the potential on the selected atoms will be plotted.
lookfrom"x", "y" or "z" "z" Direction from which the structure is depicted
quaternionVector(4) (1, 0, 0, 0) Direction from which the structure is depicted, defined by a quaternion
boxwidthx, boxwidthy, boxwidthzReal0 Used if > 0: Plotting the structure from one side implies that everything below the surface will be covered by the surface atoms. We can filter out a subset of atoms to be displayed by defining a box (width in nm) around the center of the sample. For example, when looking from the z-direction, setting "boxwidthz" to a small value ~0.3 allows us to depict a cross section though the center of the sample.
translatex, translatey, translatezReal0 Translates the center of box of selected atoms.
atom_radiusReal0.05Radius of the circles depicting the atoms (in nm).
atom_border_widthReal0.001By default the circles depicting the atoms have a small gray border. This parameter defines its size in nm. Set to 0 if you don't want a border on the atoms.
postscript_nm_to_ptReal30.Scale with which distances in nm will be converted into pt in the postscript.




Single-Particle diagonalization

$QNANO_DIR/bin/tightbinding_slepc

Purpose: SLEPc-based solver for single-particle tight-binding Hamiltonians. MPI-Parallelized, so try calling by $MPIRUN -n $NTHREADS $QNANO_DIR/bin/tightbinding_slepc.

USES ALL PARAMETERS OF: TB_Model_Slater_Koster and Eigenvector_Printer as well as additional SLEPc/PETSc command line options

Typical useful SLEPc options:

Name Type Default Value Meaning
eps_target Real 0. Target value: Defines spectral region where eigenstates are looked for. Furthermore, eigenvalues/eigenvectors will be printed in ascending order of the absolute difference to the target value.
eps_nev Integer 1. Number of eigenstates to be calculated.
eps_monitor, eps_monitor_all No Argument Prints information after each iteration step.
eps_harmonic No Argument Turns on harmonic extraction. This can speed up the convergence significantly. However, know what you are doing an look it up in the documentation for SLEPc. If harmonic extraction is used, you should also set "eps_ncv" to an integer at least twice the size of "eps_nev", but not too large because the memory demands will increase as well.
without_strain_correctionNo Argument false Should be set to true for all cases!




$QNANO_DIR/bin/tightbinding_eigen

Purpose: Exact solver for single-particle tight-binding Hamiltonians using Eigen library.

USES ALL PARAMETERS OF: TB_Model_Slater_Koster and Eigenvector_Printer

Additional parameters:

Name Type Default Value Meaning
eps_target Real 0. Target value: Defines spectral region where eigenstates are looked for. Furthermore, eigenvalues/eigenvectors will be printed in ascending order of the absolute difference to the target value.




$QNANO_DIR/bin/bandstructure

Purpose: Band structure calculation tool. More precisely, caluculates tight-binding problems while multiplying each hopping element by $ \exp(i k r) $ for a number of values for $ k $, where $ r $ is the distance vector between the respective neighbors.

USES ALL PARAMETERS OF: TB_Model_Slater_Koster and Eigenvector_Printer

Additional parameters:

Name Type Default Value Meaning
kpt_file String required if "kpt_path_point" not set k-point file in the same format as in QUANTUM ESPRESSO
kpt_path_point Vector(4) required if "kpt_file" not set First 3 elements: k-point in units of reciprocal lattice vector (single unit cell specified by lattice file). 4th element: Number of discretization points from this k-point to the next specified point (exclusive). C.f. k-point path format in QUANTUM ESPRESSO.
scale_k Vector(3) (1., 1., 1.) Scales the first 3 numbers of 'kpt_path_point' (or of each line in the 'kpt_file') by the respective scaling factor specified here. Useful for periodic structures with more than 1x1x1 unit cells. For example, for a 2x2x1 unit cell, set scale_k to (0.5, 0.5, 1).

NOTE: "-periodic_vec_LU" from TB_Model_Slater_Koster for periodic structures is not automatically set! Do so manually!




Postprocessing of Single-Particle Eigenstates

$QNANO_DIR/bin/EV_info

Purpose: Show some information about single-particle eigenstates. Useful for sanity checks.

Required parameters:

Name Type Meaning
resources_dir String Resources directory, usually "$QNANO_DIR/resources"
positions String Name of positions file of the structure to be depicted
EV_file List of Strings Names of single-particle eigenvector files.




$QNANO_DIR/bin/EV_max_phase

Purpose: Print complex phase of the local orbital expansion coefficient of single-particle eigenvector files with maximal density.

Required parameters:

Name Type Meaning
EV_file List of Strings Names of single-particle eigenvector files.




$QNANO_DIR/bin/EV_scalar

Purpose: Calculates the scalar product between one single-particle eigenstate and a number of others

Required parameters:

Name Type Meaning
EV_file List of Strings Names of single-particle eigenvector files. The scalar product of the first state in the list with all the others will be calculated. At least two files have to be specified.




$QNANO_DIR/bin/single_particle_spins

Purpose: Calculate spins of single-particle states. Used as input for the tool $QNANO_DIR/bin/manybody_spins.

Required parameters:

Name Type Meaning
resources_dir String Resources directory. Usually "$QNANO_DIR/resources".
outfile String Name of output file.
nr_e and/or nr_h Integer Number of electron or hole states.
EV_filename_pattern_e and/or EV_filename_pattern_h String Pattern for conduction band electron (_e) or valence band electron (_h) single-particle eigenvector files. Has to contain a '*', which is then replaced by a number $i \in [0,1,\dots,n_{e/h}] $ for a concrete eigenstate.




$QNANO_DIR/bin/dipole

Purpose: Calculate dipole matrix elements between a set of single-particle states. Currently, only shift-terms are calculated.

Required parameters:

Name Type Meaning
resources_dir String Resources directory. Usually "$QNANO_DIR/resources".
positions String Name of positions file.
outfile String Name of output file.
nr_e and/or nr_h Integer Number of electron or hole states.
EV_filename_pattern_e and/or EV_filename_pattern_h String Pattern for conduction band electron (_e) or valence band electron (_h) single-particle eigenvector files. Has to contain a '*', which is then replaced by a number $i \in [0,1,\dots,n_{e/h}] $ for a concrete eigenstate.




Coulomb

$QNANO_DIR/bin/normalize_orbitals

TODO: EXPAND




$QNANO_DIR/bin/precompute_coulomb

Purpose: Pre-computation of onsite Coulomb matrix element for a given element (only done once for a new material).

Required parameters:

Name Type Meaning
orbfile String Name of the orbital file specifying the Slater orbitals and the orbitals to be used.
outfile String Name of the output file for the precomputed onsite Coulomb matrix elements.

Optional parameters:

Name Type Default Value Meaning
lim Real 2.5 Integration limits: -lim ... lim
Ndiscr Integer 1e8 Number of sample points for the VEGAS algorithm.




$QNANO_DIR/bin/coulomb

Purpose: Calculation of Coulomb matrix elements between selected single-particle eigenstates. MPI-Parallelized, so try calling by $MPIRUN -n $NTHREADS $QNANO_DIR/bin/coulomb.

Required parameters:

Name Type Meaning
resources_dir String Resources directory. Usually "$QNANO_DIR/resources".
positions String Name of the positions file.
dielectric_constant Real Dielectric constant for long-range terms. Only required if "no_longrange" is "false".
nr_e, nr_h, nr_e_LR, nr_h_LR, nr_e_OS and/or nr_h_OS Integer Number of electron (nr_e...) or hole (nr_h...) states. Can be set separately for long-range (LR) and onsite (OS) terms.
EV_filename_pattern_e and/or EV_filename_pattern_h String Pattern for conduction band electron (_e) or valence band electron (_h) single-particle eigenvector files. Has to contain a '*', which is then replaced by a number $i \in [0,1,\dots,n_{e/h}] $ for a concrete eigenstate.

Optional parameters:

Name Type Default Value Meaning
outfile_direct String "Vdirect.dat" Name of output file for direct electron-hole terms
outfile_exchange String "Vexchange.dat" Name of output file for exchange electron-hole terms
outfile_ee String "Vee.dat" Name of output file for electron-electron terms
outfile_hh String "Vhh.dat" Name of output file for hole-hole terms
nr_blocks Integer 1 Block decomposition of matrix-vector products for long-range terms. Set to larger value if program takes too much memory. This, however, comes at the cost of increasing overhead and therefore computation time.
no_dir, no_exc, no_ee, no_hh Boolean false Used to turn off calculation of direct, exchange, electron-electron or hole-hole terms
no_longrange, no_onsite Boolean false Used to turn off calculation of long-range or onsite terms
onsite_coulomb List of Pairs(String, String) Load precomputed onsite Coulomb matrix element for a specific material. First argument per pair is an orbital file, the second argument is the file containing the precomputed onsite Coulomb matrix elements.




Manybody

$QNANO_DIR/bin/manybody_slepc

SAME AS FOR $QNANO_DIR/bin/manybody_eigen plus additional SLEPc/PETSc command line options!




$QNANO_DIR/bin/manybody_eigen

USES ALL PARAMETERS OF: Eigenvector_Printer

Additional parameters:

Name Type Default Value Meaning
rank_e, rank_h Integer Required Rank, i.e., number of electron and hole in the excitonic complex, e.g, rank_e=1 and rank_h=2 for positive trions.
nr_e, nr_h Integer Required Number of electron and hole single particle states from which the basis of Slater determinants is constructed.
cb_energies, vb_energiesString Required Name of files containing conduction and valence band single-particle energy eigenvalues.
Vdir, Vexc, Vee, VhhString Coulomb matrix element files for direct, exchange, electron-electron and hole-hole terms.
no_dir, no_exc, no_ee, no_hhBoolean false Used to turn off direct, exchange, electron-electron or hole-hole states.
manybody_hilbertspace String "" If "" or "CI", the full CI is calculated within the selected Hilbert space (cf. select_nr_e/select_nr_h/select_start_e/select_start_h). Other values: "CIS": CI + single excitations (up to nr_e/nr_h single-particle states), "CISD": CI + single and double excitations, "CISDT": CI + up to triple excitations, "CISDTQ": CI + up to four excitations.
select_nr_e, select_nr_h Integer nr_e, nr_h If specified, the basis of Slater determinants is created up to select_nr_e/select_nr_h instead of nr_e/nr_h. This multi-configurational basis can be used as a starting point for calculations with a reduced Hilbert space, e.g., CIS/CISD/... (Configuration-interaction + single & double excitations). nr_e and nr_h then serve determine the respective full CI Hilbert space to be approximated.
select_start_e, select_start_h Integer 0 Not all single-particle states are used, select_start_e/select_start_h states will be skipped.
print_selected_states Boolean false If set to true, a list of selected states (reduced Hilbert space) is printed to the file "TEST_SELECTED_STATES.dat"
add_selected_states String "" States listed in this file are added to the Hilbert space.
PT_outfile String "" If specified, perturbative calculation will be performed in a larger Hilbert space with up to "nr_e_PT" and "nr_h_PT" single-particle states.
nr_e_PT, nr_h_PT Integer 0 C.f. parameter "PT_outfile"
threshold Real 0 If set, a single step of a perturbative selected-state CI algorithm is performed. New states for the next step are selected when their perturbative weight exceeds the threshold.
new_states_fileString "" Used if "threshold" is set: Specifies the name of the file in which the newly selected states are printed.
add_new_states_fileString "" Used if "threshold" is set: Specifies the name of the file in which the newly selected states are printed. New states will be printed in addition to the states already existing in the file.
small_denominator_threshold Real 1e-5 If "PT_outfile" and "threshold" are specified: also select states when the energy denominator is smaller than this value.




$QNANO_DIR/bin/manybody_spins

TODO: EXPAND




$QNANO_DIR/bin/spectra

Purpose: Extracts dipoles and transition energies from high-rank many-body states with n_e electrons and n_h holes to low-rank many-body states with n_e-1 electrons and n_h-1 holes.

Required parameters:

Name Type Meaning
dipole_file String Name of the single-particle dipole file, typically generated by $QNANO_DIR/bin/dipole.
outfile String Name of output file.
high_rank_EV_pattern String Patterns of many-body eigenvector files describing the high-rank complexes, i.e., the initial complexes for emission processes. Has to contain an "*".
low_rank_EV_pattern String Patterns of many-body eigenvector files describing the low-rank complexes, i.e., the final complexes for emission processes. Has to contain an "*". Can be empty if high-rank files describe excitons.
nr_high_rank / nr_low_rank Integer Number of high-rank and low-rank eigenvector files to be read. nr_low_rank only needs to be set if the high-rank eigenvectors do not correspond to excitons.

Optional parameters:

Name Type Default Value Meaning
high_rank_PT_file/low_rank_PT_file String "" If many-body calculations are performed with perturbative corrections, the many-body eigenvector files contain the unperturbed eigenvalues. Specify the file names set by the parameter "PT_outfile" of $QNANO_DIR/bin/manybody_eigen or $QNANO_DIR/bin/manybody_slepc to add perturbative corrections when calculating spectra.

$QNANO_DIR/bin/smooth_spectra

Purpose: Used to plot an emission spectrum with delta-functions broadened to Lorentzians and initial states occupied thermally.

Required parameters:

Name Type Meaning
spectra String Name of the input spectra file, typically generated by $QNANO_DIR/bin/spectra.
outfile String Name of output file.

Optional parameters:

Name Type Default Value Meaning
linewidth Integer 1e-4 Width of the spectral lines (Lorentzians) in eV.
temperature double 0 Temperature (in K) describing the occupation of initial states.
Estart, Eend double calculated from "spectra" Energy range in which the spectrum is plotted. Default: lowest to highest energy in the "spectra" file.
Ndiscr Integer 0 Number of sample intervals of the energy range. Default: calculated from Eend, Estart and linewidth.

Important Data Structures

TB_Model_Slater_Koster

Purpose: Structure to set up general tight-binding Hamiltonians with Slater-Koster parametrization.

Required parameters:

Name Type Meaning
resources_dir String Resources directory. Usually "$QNANO_DIR/resources".
positions String Name of the positions file. Only required if "generate_positions_from_material" is set.
generate_positions_from_material String+Vector(3) Instead of supplying a positions file, we can also generate Nx x Ny x Nz unit cells (arguments 2, 3, and 4) of a given material (first argument) on the fly. Not required if "positions" is specified.

Optional parameters:

Name Type Default Value Meaning
without_spinorbit Boolean false Used to force turning off spin-orbit coupling.
without_strain_correction Boolean false Used to force turning off strain corrections in tight-binding model.
periodic_vec_LU List of Vector(3) Periodicity vector for periodic structures in lattice units, i.e. smallest vector $ \mathbf{R} $ along a certain direction for which the atom at $\mathbf{r}+\mathbf{R}$ corresponds to the one at $\mathbf{r}$.
passivate_sp Boolean false Used to turn on surface passivation assuming sp3-hybridized orbitals.
potential String Name of file containing an external potential evaluated for the same structure as provided by the "positions" parameter.
no_nn2 Boolean false Used to turn off second-nearest neighbors, even if they are specified in the material files.
evaluate_at_k Vector(3) - Evaluate Hamiltonian at the specified k-point.
evaluate_at_k_LU Vector(3) - Evaluate Hamiltonian at the specified k-point. Specified in lattice units.

Eigenvector_Printer

Optional parameters:

Name Type Default Value Meaning
EV_filename_pattern String "EV*.dat" Pattern for printed eigenvector file name. Has to contain an '*'.
eigenvalue_filename String "eigenvalues.dat" File name for printed eigenvalues.
nr_print Integer 0 Number of printed eigenvectors. If <0, all converged states are printed.
print_Kramers_szBoolean false Used to switch on Kramers rotation: For calculations with spin but without magnetic field, time-reversal symmetry ensures that all energy eigenstates come in pairs. If "print_Kramers_sz" is set to true, those linear combinations of the two states in one pair are printed that minimize/maximize the z-component of the spin. For calculations without spin-orbit coupling, this means that the first state in each pair is a spin-down state, the second is a spin-up state.
kramers_toleranceReal 1e-7 Determines when two are assumed to be degenerate for Kramers rotation.