Codes for Majorana zero modes identification in non-interacting systems. The program supports the input script in JSON format, see an example below. The current version of the program is header-only. The program supports Hamiltonian, which can be written in the following form
where gammas are general Majorana operators. The detailed description of the algorithm, which is used for identification of the Majorana zero modes can be found in the paper.
Majoranapp depends on the Armadillo library.
Before compiling Majoranapp please follow the instructions for Armadillo installation.
Before installing Armadillo, it is recommended to install (at least) the following libraries:
LAPACK,
ARPACK,
BLAS,
OPENBLAS (highly recommended!). When the installation of the selected libraries is completed, please install Armadillo.
Majoranapp supports input scripts for setting system parameters.
One have to install nlohmann-json.
It can be install from Github
or package manager
sudo apt install nlohmann-json-devMake sure that you have installed at least version 3.7.3.
Majoranapp requires C++17 and it is tested with g++-7.5,
to complie run make
makeOne can generate documentation locally by
make doxywhich requires doxygen.
Majoranapp handles custom user input scripts, which are stored in JSON format.
Input scripts have 5 parts (2 of them are necessary)
model name(mandatory) select model (see Docs for details);matrix type(mandatory) select matrix data storage type, current two options are available:dense(exact diagonalization);sparse(Krylov space based methods);
dimensionsset dimensions of the system:length;width;height;
parametersset system parameters (see Docs);connectionsset user defined geometries (available for the selected models);solver optionsset eigendecomposition options:tolconvergence tolerance (lower the better, see Armadillo docs);noenumber of eigenvalues (sparse);novnumber of eigenvectors;targeteigenvalues (see Armadillo docs);showEigenvalues(bool, defaulttrue) display the lambdas, see the publication for the details;showEigenvectors(bool, defaultfalse) display eigenvectors for the corresponding lambdas.
{
"model name": "SpinlessUniformChain",
"matrix type": "sparse",
"dimensions": {
"Length": 1000
},
"parameters": {
"t_integral": 10.0,
"delta": -1.0,
"mu_potential": 0.0
},
"solver options": {
"tol": 0.0,
"noe": 50,
"nov": 2,
"target": "sa",
"showEigenvalues": true,
"showEigenvectors": true
}
}To see example scripts go into the InputScripts directory.
What is the next step after the prepared input script?
To run the simulation for the selected input_script.json, type
./majoranapp.exe -f input_script.jsonOne does not have to prepare separate input scripts for slightly different cases. The parameters can be specified after input script flag, example
./majoranapp.exe -f input_script.json -L 10This will run the simulation for the system with parameters set in the input script but the length will be set to 10.
Use -h flag to see the current key bindings for the system parameters and program options:
$ ./majoranapp.exe -h
# ========================================
# Majoranapp @ 0.200.0 (alpha)
# armadillo @ 9.850.1 (Pyrocumulus Wrath)
# nlohmann JSON @ 3.7.3
# ========================================
# Program options
# opt ARG description
# ========================================
# -f [ARG] filename: select inputscript filename
# -h help: show help page
# -q quiet: decrease output verbosity
# -v verbose: increase output verbosity
# ========================================
# Parameters settings
# key name
# ========================================
# -H Height
# -L Length
# -W Width
# -X rashbaX
# -Y rashbaY
# -Z rashbaZ
# -d delta
# -m mu_potential
# -t t_integral
# -x zeemanX
# -y zeemanY
# -z zeemanZ
# ========================================
# Example
# ========================================
# The following command will run program with
# settings and parameters loaded from JSON
# and the Length will be replaced by 100:
#
# ./majoranapp.exe -f inputscript.json -L 100The verbose flag (-v) can be useful for debugging and for measuring the program execution time.
To see the full model description please visit the Docs page. Current version support the following models:
- Spinless models (aka Kitaev models)
- chain
- 2D system
- user geometry defined
- Spinfull models (aka Rashba models)
- chain
- 2D system
- 3D system
- user geometry defined
Please cite the following papers if you use the program in your research and/or software.
- Andrzej Więckowski @ Wrocław University of Science and Technology
- Michał Kupczyński @ Wrocław University of Science and Technology