Getting started¶
GfTool’s main content¶
gftool
collection of non-interacting Green’s functions and spectral functions, see also the
lattice
submodule.utility functions like Matsubara frequencies and Fermi functions.
reliable calculation of particle numbers via Matsubara sums
cpa
/beb
single site approximation to disorder
diagonal disorder only (CPA) and diagonal and off-diagonal (BEB)
average local Green’s function and component Green’s functions
fourier
Fourier transforms from Matsubara frequencies to imaginary time and back, including the handling of high-frequencies moments (especially important for transforms from Matsubara to imaginary time)
Laplace transform from real times to complex frequencies
matrix
helper for Green’s functions in matrix form
pade
analytic continuation via the Padé algorithm
Installation¶
The package is available on PyPI:
$ pip install gftool
For conda users, GfTool is also available on conda-forge
$ conda install -c conda-forge gftool
Alternatively, it can be installed via GitHub. You can install it using
$ pip install https://github.com/DerWeh/gftools/archive/VERSION.zip
where VERSION can be a release (e.g. 0.5.1) or a branch (e.g. develop). (As always, it is not advised to install it into your system Python, consider using pipenv, venv, conda, pyenv, or similar tools.) Of course you can also clone or fork the project.
If you clone the project, you can locally build the documentation:
$ pip install -r requirements-doc.txt
$ python setup.py build_sphinx
Note on documentation¶
We try to follow numpy
broadcasting rules. Many functions acting on an axis
act like generalized ufuncs. In this case, a function can be called for
stacked arguments instead of looping over the specific arguments.
We indicate this by argument shapes containing an ellipse e.g. (…) or (…, N).
It must be possible for all ellipses to be broadcasted against each other.
A good example is the fourier
module.
We calculate the Fourier transforms iw2tau
for Green’s
functions with different on-site energies without looping:
>>> e_onsite = np.array([-0.5, 0, 0.5])
>>> beta = 10
>>> iws = gt.matsubara_frequencies(range(1024), beta=beta)
>>> gf_iw = gt.bethe_gf_z(iws - e_onsite[..., np.newaxis], half_bandwidth=1.0)
>>> gf_iw.shape
(3, 1024)
>>> from gftool import fourier
>>> gf_tau = fourier.iw2tau(gf_iw, beta=beta, moments=np.ones([1]))
>>> gf_tau.shape
(3, 2049)
The moments are automatically broadcasted. We can also explicitly give the second moments:
>>> moments = np.stack([np.ones([3]), e_onsite], axis=-1)
>>> gf_tau = fourier.iw2tau(gf_iw, beta=beta, moments=moments)
>>> gf_tau.shape
(3, 2049)