"NRG Ljubljana" is a flexible framework for performing large-scale numerical renormalization group (NRG) calculations for quantum impurity problems. It is highly extensible without sacrificing numerical efficiency.
Copyright (C) 2006-2022 Rok Zitko
The framework "NRG Ljubljana" is a set of interrelated computer codes for performing numerical renormalization group (NRG) calculations for quantum impurity problems, described by models such as the Kondo exchange (s-d) model or the Anderson single impurity model, and their multi-impurity and multi-channel generalizations. It also contains a number of tools for analyzing the results (thermodynamic properties, such as magnetic and charge susceptibility, entropy and heat capacity; expectation values of arbitrary operators; spectral functions). It is user-friendly, in the sense that it is easy to set up new types of problems (Hamiltonians, perturbation terms, etc.) and the output is formatted and annotated for easy interpretation, parsing and plotting. It efficiently handles problems with different symmetries, such as spin SU(2) symmetry, charge SU(2) symmetry, Z_2 reflection symmetry (parity), etc.
To achieve a high degree of flexibility without sacrificing numerical efficiency, "NRG Ljubljana" is composed of a hierarchy of modules: high level modules are written in a mixture of functional and procedural Mathematica code, while the low level numerically intensive parts are programmed in the object oriented approach in the C++ language. The foundation of the framework is a Mathematica package for performing calculations with non-commutative second quantisation operators, SNEG. The next layer is a Mathematica program which defines the Hamiltonian, the basis of states, and the physical operators of interest: with the help of SNEG, Hamiltonian and operators can be defined using the familiar second-quantization expressions. This program performs the diagonalization of the initial Hamiltonian and prepares the input for the NRG iteration proper.
For efficiency, NRG iteration is performed by a separate C++ program: for a typical problem, most of the time (90%) is spent in the LAPACK dsyev routine which solves the eigenvalue problem. There is very little housekeeping overhead due to the tasks required by the NRG iteration; "NRG Ljubljana" is thus suitable for performing large scale NRG calculations on computer clusters.
Features
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
The full text of the GPL General Public License can be found in file LICENSE.
Compiling and dependencies
NRG Ljubljana is very portable and it should work without any modification on any modern Linux distribution and, with some tweaking, on any Unix or Unix-like operating system with a good standards-compliant C++ compiler. It has been reported to me that it can also be compiled under Windows.
The following libraries are required to compile the C++ part of the NRG code and the tools:
Due to the heavy use of template metaprogramming in Boost libraries, a high-quality standards-compliant C++ compiler must be used. Tested to work with GCC, Clang and Intel C++ compiler. As of 2019, the code is written in C++14.
Wolfram Reasearch Mathematica must be installed for running the Mathematica part of the NRG code. Versions 5 through 12 have been tested. Mathematica is only required for the initialization of the problem (basis construction, diagonalisation of the initial Hamiltonian, transformations of the operator matrices, etc.) which is relatively fast. When "NRG Ljubljana" is used on a cluster, it is therefore sufficient to have Mathematica installed on a single
computer (for example on the cluster host computer), while the numerically demanding (C++) part of the program can be ran on the cluster nodes.
Since Nov 2019, the code uses cmake for the configuration stage. The compilation thus consists of the following steps:
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/nrgljubljana/
make
make install
For debugging, add -DCMAKE_BUILD_TYPE=Debug to cmake.
Contributing to "NRG Ljubljana"
If you make improvements to "NRG Ljubljana", you are encouraged to share them with other users. Bug reports (and fixes) are very welcome as well. The contact information is in the next section.
Contact information:
"NRG Ljubljana" home-page: http://nrgljubljana.ijs.si/
Rok Zitko
"Jozef Stefan" Institute
F1 - Theoretical physics
Jamova 39
SI-1000 Ljubljana
Slovenia
rok.zitko@ijs.si
Acknowledgements
The development of the "NRG Ljubljana" framework started during author's PhD studies at the Faculty for mathematics and physics of the University of Ljubljana, and the "Jozef Stefan" Institute, Ljubljana, Slovenia. Discussions and collaboration with prof. Janez Bonca, prof. Anton Ramsak, dr. Jernej Mravlje and dr. Tomaz Rejec from the F1, Theoretical Physics department are acknowledged. I'm also grateful to prof. Thomas Pruschke, Robert Peters and Oliver Bodensiek from the University in Goettingen for many very fruitful discussions. I thank Marcus Greger from the University in Augsburg for contributing optimized routines for the spectral function calculation. Nils Wentzell helped me make the switch to cmake build system.