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-dev
Make 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
make
One can generate documentation locally by
make doxy
which 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);
dimensions
set dimensions of the system:length
;width
;height
;
parameters
set system parameters (see Docs);connections
set user defined geometries (available for the selected models);solver options
set eigendecomposition options:tol
convergence tolerance (lower the better, see Armadillo docs);noe
number of eigenvalues (sparse);nov
number of eigenvectors;target
eigenvalues (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.json
One 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 10
This 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 100
The 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