From 8dc42b08ae9bcf407f7c762f5647dcb41459e125 Mon Sep 17 00:00:00 2001 From: Priyanka Seth Date: Thu, 12 Mar 2015 00:01:12 +0100 Subject: [PATCH] [doc] New documentation * restructuring * added user reference * started working on user guide * added schematic to structure --- doc/DFTDMFTmain.rst | 158 ------ doc/_static/logo_erc.jpg | Bin 0 -> 195026 bytes doc/_templates/sideb.html | 1 + doc/about.rst | 8 +- doc/basicnotions/dft_dmft.rst | 5 + doc/basicnotions/images/structure.png | Bin 0 -> 29668 bytes doc/basicnotions/images/structure.svg | 472 ++++++++++++++++ doc/basicnotions/structure.rst | 11 + doc/conf.py.in | 13 +- doc/contents.rst | 1 - doc/{wien2k1.bib => dft_tools1.bib} | 0 doc/{wien2k2.bib => dft_tools2.bib} | 0 doc/documentation.rst | 55 +- doc/faqs/faqs.rst | 17 + doc/function_template.py | 98 ++++ doc/{ => guide}/analysis.rst | 3 + doc/{interface.rst => guide/conversion.rst} | 27 +- .../dftdmft_selfcons.rst} | 26 +- .../dftdmft_singleshot.rst} | 89 ++- doc/{Ce-HI.rst => guide/full_tutorial.rst} | 44 +- .../images_scripts}/Ce-gamma.indmftpr | 0 doc/{ => guide/images_scripts}/Ce-gamma.py | 0 .../images_scripts}/Ce-gamma.struct | 0 .../images_scripts}/Ce-gamma_DOS.py | 5 +- .../images_scripts}/Ce-gamma_DOS_script.rst | 2 +- .../images_scripts}/Ce-gamma_script.rst | 2 +- doc/{ => guide/images_scripts}/Ce_DOS.png | Bin .../images_scripts}/TutorialDmftproj.pdf | Bin doc/guide/orbital_construction.rst | 19 + doc/{Transport.rst => guide/transport.rst} | 34 +- doc/index.rst | 22 +- doc/install.rst | 12 +- doc/issues.rst | 2 +- doc/reference/U_matrix.rst | 5 + doc/reference/converters.rst | 21 + doc/reference/h5structure.rst | 82 +-- doc/reference/put_Sigma.rst | 5 - doc/reference/sumk_dft.rst | 10 +- doc/reference/sumk_dft_tools.rst | 8 + doc/reference/symmetry.rst | 6 + doc/reference/transbasis.rst | 6 + python/U_matrix.py | 341 +++++++++++- python/converters/converter_tools.py | 56 +- python/converters/hk_converter.py | 36 +- python/converters/wien2k_converter.py | 113 +++- python/sumk_dft.py | 514 ++++++++++++++++-- python/sumk_dft_tools.py | 275 ++++++++-- python/symmetry.py | 42 +- python/trans_basis.py | 68 ++- 49 files changed, 2224 insertions(+), 490 deletions(-) delete mode 100644 doc/DFTDMFTmain.rst create mode 100644 doc/_static/logo_erc.jpg create mode 100644 doc/basicnotions/dft_dmft.rst create mode 100644 doc/basicnotions/images/structure.png create mode 100644 doc/basicnotions/images/structure.svg create mode 100644 doc/basicnotions/structure.rst rename doc/{wien2k1.bib => dft_tools1.bib} (100%) rename doc/{wien2k2.bib => dft_tools2.bib} (100%) create mode 100644 doc/faqs/faqs.rst create mode 100644 doc/function_template.py rename doc/{ => guide}/analysis.rst (99%) rename doc/{interface.rst => guide/conversion.rst} (93%) rename doc/{selfcons.rst => guide/dftdmft_selfcons.rst} (91%) rename doc/{advanced.rst => guide/dftdmft_singleshot.rst} (66%) rename doc/{Ce-HI.rst => guide/full_tutorial.rst} (94%) rename doc/{ => guide/images_scripts}/Ce-gamma.indmftpr (100%) rename doc/{ => guide/images_scripts}/Ce-gamma.py (100%) rename doc/{ => guide/images_scripts}/Ce-gamma.struct (100%) rename doc/{ => guide/images_scripts}/Ce-gamma_DOS.py (98%) rename doc/{ => guide/images_scripts}/Ce-gamma_DOS_script.rst (78%) rename doc/{ => guide/images_scripts}/Ce-gamma_script.rst (79%) rename doc/{ => guide/images_scripts}/Ce_DOS.png (100%) rename doc/{ => guide/images_scripts}/TutorialDmftproj.pdf (100%) create mode 100644 doc/guide/orbital_construction.rst rename doc/{Transport.rst => guide/transport.rst} (73%) create mode 100644 doc/reference/U_matrix.rst create mode 100644 doc/reference/converters.rst delete mode 100644 doc/reference/put_Sigma.rst create mode 100644 doc/reference/sumk_dft_tools.rst create mode 100644 doc/reference/symmetry.rst create mode 100644 doc/reference/transbasis.rst diff --git a/doc/DFTDMFTmain.rst b/doc/DFTDMFTmain.rst deleted file mode 100644 index 3e5ec6f3..00000000 --- a/doc/DFTDMFTmain.rst +++ /dev/null @@ -1,158 +0,0 @@ -.. index:: DFT+DMFT calculation - -.. highlight:: python - -.. _DFTDMFTmain: - -The DFT+DMFT calculation -======================== - -After having set up the hdf5 archive, we can now do our DFT+DMFT calculation. It consists of -initialisation steps, and the actual DMFT self consistency loop. - -.. index:: initialisation of DFT+DMFT - -Initialisation of the calculation ---------------------------------- - -Before doing the calculation, we have to intialize all the objects that we will need. The first thing is the -:class:`SumkDFT` class. It contains all basic routines that are necessary to perform a summation in k-space -to get the local quantities used in DMFT. It is initialized by:: - - from pytriqs.applications.dft.sumk_dft import * - SK = SumkDFT(hdf_file = filename) - - -This is the reference for the function: - -.. function:: SumkDFT(hdf_file, h_field = 0.0, use_dft_blocks = False, dft_data = 'dft_input', symmcorr_data = 'dft_symmcorr_input', parproj_data = 'dft_parproj_input', symmpar_data = 'dft_symmpar_input', bands_data = 'dft_bands_input', transp_data = 'dft_transp_input', misc_data = 'dft_misc_input') - -The parameters needed to initialise SumkDFT as as follows (with any default variables as shown above): - -========================= ==================== =========================================================================== -Name Type Meaning -========================= ==================== =========================================================================== -hdf_file String Name of the main hdf5 file containing converted dft information. -h_field Scalar External magnetic field. -use_dft_blocks Boolean Analyse the structure of the density matrix at initialisation, - and identify non-zero matrix elements. - The DMFT calculation is then restricted to these matrix elements, - yielding a more efficient solution of the local interaction problem. - Degeneracies in orbital and spin space are also identified and stored for later use. -dft_data String hdf5 subgroup containing required DFT data. -symmcorr_data String hdf5 subgroup containing correlated shell symmetry data. -parproj_data String hdf5 subgroup containing partial projector data. -symmpar_data String hdf5 subgroup containing non-correlated shell symmetry data. -bands_data String hdf5 subgroup containing DFT band data. -transp_data String hdf5 subgroup containing optics/transport data. -misc_data String hdf5 subgroup containing miscellaneous DFT data. -========================= ==================== =========================================================================== - -.. index:: Multiband solver - -Setting up the Multi-Band Solver --------------------------------- - -The next step is to setup the impurity solver. -For more details here, see the `CTHYB `_ documentation. - -.. This is initialised as follows:: -.. -.. from pytriqs.applications.impurity_solvers.cthyb import * -.. beta = 40.0 -.. gf_struct = SK.gf_struct_solver[0] -.. S = Solver(beta=beta, gf_struct=gf_struct) -.. -.. The solver method is called later by this statement:: -.. -.. S.solve(h_loc=h_loc, **p) -.. -.. where `p` represents the solve parameters. -.. -.. There is a module that helps setting up the multiband CTQMC solver. It is loaded and initialized by:: -.. -.. from pytriqs.applications.dft.solver_multiband import * -.. S = SolverMultiBand(beta, n_orb, gf_struct = SK.gf_struct_solver[0], map=SK.map[0]) -.. -.. The necessary parameters are the inverse temperature `beta`, the Coulomb interaction `U_interact`, the Hund's rule coupling `J_hund`, -.. and the number of orbitals `n_orb`. There are again several optional parameters that allow the tailoring of the local Hamiltonian to -.. specific needs. They are: -.. -.. * `gf_struct`: The block structure of the local density matrix given in the format calculated by :class:`SumkDFT`. -.. * `map`: If `gf_struct` is given as parameter, `map` also must be given. This is the mapping from the block structure to a general -.. up/down structure. -.. -.. The solver method is called later by this statement:: -.. -.. S.solve(U_interact,J_hund,use_spinflip=False,use_matrix=True, -.. l=2,T=None, dim_reps=None, irep=None, n_cycles =10000, -.. length_cycle=200,n_warmup_cycles=1000) -.. -.. The parameters for the Coulomb interaction `U_interact` and the Hund's coupling `J_hund` are necessary input parameters. The rest are optional -.. parameters for which default values are set. Generally, they should be reset for the problem at hand. Here is a description of the parameters: -.. -.. * `use_matrix`: If `True`, the interaction matrix is calculated from Slater integrals, which are computed from `U_interact` and -.. `J_hund`. Otherwise, a Kanamori representation is used. Attention: We define the intraorbital interaction as -.. `U_interact`, the interorbital interaction for opposite spins as `U_interact-2*J_hund`, and interorbital for equal spins as -.. `U_interact-3*J_hund`. -.. * `T`: The matrix that transforms the interaction matrix from spherical harmonics to a symmetry-adapted basis. Only effective for Slater -.. parametrisation, i.e. `use_matrix=True`. -.. * `l`: The orbital quantum number. Again, only effective for Slater parametrisation, i.e. `use_matrix=True`. -.. * `use_spinflip`: If `True`, the full rotationally-invariant interaction is used. Otherwise, only density-density terms are -.. kept in the local Hamiltonian. -.. * `dim_reps`: If only a subset of the full d-shell is used as correlated orbtials, one can specify here the dimensions of all the subspaces -.. of the d-shell, i.e. t2g and eg. Only effective for Slater parametrisation. -.. * `irep`: The index in the list `dim_reps` of the subset that is used. Only effective for Slater parametrisation. -.. * `n_cycles`: Number of CTQMC cycles (a sequence of moves followed by a measurement) per core. The default value of 10000 is the minimum, and generally should be increased. -.. * `length_cycle`: Number of CTQMC moves per one cycle. -.. * `n_warmup_cycles`: Number of initial CTQMC cycles before measurements start. Usually of order of 10000, sometimes needs to be increased significantly. -.. -.. Most of above parameters can be taken directly from the :class:`SumkDFT` class, without defining them by hand. We will see a specific example -.. at the end of this tutorial. - - -.. index:: DFT+DMFT loop, one-shot calculation - -Doing the DMFT loop -------------------- - -Having initialised the SumK class and the Solver, we can proceed with the DMFT loop itself. As explained in the tutorial, we have to -set up the loop over DMFT iterations and the self-consistency condition:: - - n_loops = 5 - for iteration_number in range(n_loops) : # start the DMFT loop - - SK.put_Sigma(Sigma_imp = [ S.Sigma ]) # Put self energy to the SumK class - chemical_potential = SK.calc_mu() # calculate the chemical potential for the given density - S.G_iw << SK.extract_G_loc()[0] # extract the local Green function - S.G0_iw << inverse(S.Sigma_iw + inverse(S.G_iw)) # finally get G0, the input for the Solver - - S.solve(h_loc=h_loc, **p) # now solve the impurity problem - - dm = S.G_iw.density() # Density matrix of the impurity problem - SK.calc_dc(dm, U_interact=U, J_hund=J, orb=0, use_dc_formula=dc_type) # Set the double counting term - SK.save(['chemical_potential','dc_imp','dc_energ']) # Save data in the hdf5 archive - -These basic steps are enough to set up the basic DMFT Loop. For a detailed description of the :class:`SumkDFT` routines, -see the reference manual. After the self-consistency steps, the solution of the Anderson impurity problem is calculation by CTQMC. -Different to model calculations, we have to do a few more steps after this, because of the double-counting correction. We first -calculate the density of the impurity problem. Then, the routine `calc_dc` takes as parameters this density matrix, the -Coulomb interaction, Hund's rule coupling, and the type of double-counting that should be used. Possible values for `use_dc_formula` are: - - * `0`: Full-localised limit - * `1`: DC formula as given in K. Held, Adv. Phys. 56, 829 (2007). - * `2`: Around-mean-field - -At the end of the calculation, we can save the Greens function and self energy into a file:: - - from pytriqs.archive import HDFArchive - import pytriqs.utility.mpi as mpi - if mpi.is_master_node(): - ar = HDFArchive("YourDFTDMFTcalculation.h5",'w') - ar["G"] = S.G_iw - ar["Sigma"] = S.Sigma_iw - -This is it! - -These are the essential steps to do a one-shot DFT+DMFT calculation. For full charge-self consistent calculations, there are some more things -to consider, which we will see later on. diff --git a/doc/_static/logo_erc.jpg b/doc/_static/logo_erc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7181ee00db47c1803cc9f04c4ac74825fd62171 GIT binary patch literal 195026 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 hGmi?xgP~8HaVi`Xa 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 literal 0 HcmV?d00001 diff --git a/doc/_templates/sideb.html b/doc/_templates/sideb.html index 4f6a02c7..11622acf 100644 --- a/doc/_templates/sideb.html +++ b/doc/_templates/sideb.html @@ -3,4 +3,5 @@ Ecole Polytechnique
CNRS +ERC

diff --git a/doc/about.rst b/doc/about.rst index 54e4936c..85f82bad 100644 --- a/doc/about.rst +++ b/doc/about.rst @@ -12,16 +12,16 @@ package and TRIQS has been motivated by a scientific collaboration between the research groups of Antoine Georges, Silke Biermann (Ecole Polytechnique), Olivier Parcollet (CEA Saclay). A first step has been the definition of the framework and the construction of the projective Wannier functions as input for -the DMFT calculations [#wien2k1]_. This has been followed by the introduction -of full charge self-consistency [#wien2k2]_, necessary for total energy +the DMFT calculations [#dft_tools1]_. This has been followed by the introduction +of full charge self-consistency [#dft_tools2]_, necessary for total energy calculations. **Developers**: M. Aichhorn, L. Pourovskii, V. Vildosola, C. Martins **Related papers**: -.. [#wien2k1] `M. Aichhorn, L. Pourovskii, V. Vildosola, M. Ferrero, O. Parcollet, T. Miyake, A. Georges, and S. Biermann, Phys. Rev. B 80, 085101 (2009) `_ (:download:`bibtex file `) -.. [#wien2k2] `M. Aichhorn, L. Pourovskii, and A. Georges, Phys. Rev. B 84, 054529 (2011) `_ (:download:`bibtex file `) +.. [#dft_tools1] `M. Aichhorn, L. Pourovskii, V. Vildosola, M. Ferrero, O. Parcollet, T. Miyake, A. Georges, and S. Biermann, Phys. Rev. B 80, 085101 (2009) `_ (:download:`bibtex file `) +.. [#dft_tools2] `M. Aichhorn, L. Pourovskii, and A. Georges, Phys. Rev. B 84, 054529 (2011) `_ (:download:`bibtex file `) This application is a part of our scientific work and we would appreciate if projects using it will include a citation to the above relevant papers. In diff --git a/doc/basicnotions/dft_dmft.rst b/doc/basicnotions/dft_dmft.rst new file mode 100644 index 00000000..602e992a --- /dev/null +++ b/doc/basicnotions/dft_dmft.rst @@ -0,0 +1,5 @@ +Introduction to DFT+DMFT +======================== + +.. warning:: + TO BE WRITTEN! diff --git a/doc/basicnotions/images/structure.png b/doc/basicnotions/images/structure.png new file mode 100644 index 0000000000000000000000000000000000000000..72c7f54e72882e97ebdc8643aabb8715a77a13bc GIT binary patch literal 29668 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

5svMu7QD+=ijC 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 VR~@y`^AP!4x^n$zNuO^1>Yv|O?|A?K literal 0 HcmV?d00001 diff --git a/doc/basicnotions/images/structure.svg b/doc/basicnotions/images/structure.svg new file mode 100644 index 00000000..68a66d50 --- /dev/null +++ b/doc/basicnotions/images/structure.svg @@ -0,0 +1,472 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + DFT OrbitalConstruction Local orbital construction Conversion to hdf5 archive DMFT + + + + charge self-consistency + + + + + + + + + + h5 + + + + + + + + + diff --git a/doc/basicnotions/structure.rst b/doc/basicnotions/structure.rst new file mode 100644 index 00000000..ece8ca17 --- /dev/null +++ b/doc/basicnotions/structure.rst @@ -0,0 +1,11 @@ +Structure of DFT Tools +====================== + +.. warning:: + TO BE WRITTEN! + +.. image:: images/structure.png + :width: 700 + :align: center + + diff --git a/doc/conf.py.in b/doc/conf.py.in index dd6469ef..927a0b9a 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -5,11 +5,16 @@ extensions = ['sphinx.ext.autodoc', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx', - 'matplotlib.sphinxext.plot_directive'] + 'matplotlib.sphinxext.plot_directive', + 'sphinx.ext.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', + 'numpydoc'] source_suffix = '.rst' -project = u'TRIQS Interface to Wien2k' +project = u'TRIQS_DFT Tools' copyright = u'2011-2013, M. Aichhorn, L. Pourovskii, V. Vildosola, C. Martins' version = '@DFT_TOOLS_VERSION@' release = '@DFT_TOOLS_RELEASE@' @@ -21,7 +26,7 @@ html_theme = 'triqs' html_theme_path = ['@TRIQS_THEMES_PATH@'] html_show_sphinx = False html_context = {'header_title': 'dft_tools', - 'header_subtitle': 'Connecting TRIQS to DFT packages', + 'header_subtitle': 'connecting TRIQS to DFT packages', 'header_links': [['Install', 'install'], ['Documentation', 'documentation'], ['Issues', 'issues'], @@ -32,4 +37,4 @@ html_sidebars = {'index': ['sideb.html', 'searchbox.html']} htmlhelp_basename = 'TRIQSDftToolsdoc' intersphinx_mapping = {'python': ('http://docs.python.org/2.7', None), 'triqslibs': ('http://ipht.cea.fr/triqs', None), - 'triqscthyb': ('http://ipht.cea.fr/triqs/applications/cthyb_matrix', None)} + 'triqscthyb': ('http://ipht.cea.fr/triqs/applications/cthyb', None)} diff --git a/doc/contents.rst b/doc/contents.rst index 2cd84574..6afdfc3f 100644 --- a/doc/contents.rst +++ b/doc/contents.rst @@ -9,4 +9,3 @@ Table of contents documentation issues about - diff --git a/doc/wien2k1.bib b/doc/dft_tools1.bib similarity index 100% rename from doc/wien2k1.bib rename to doc/dft_tools1.bib diff --git a/doc/wien2k2.bib b/doc/dft_tools2.bib similarity index 100% rename from doc/wien2k2.bib rename to doc/dft_tools2.bib diff --git a/doc/documentation.rst b/doc/documentation.rst index 51b8dd2e..e3388075 100644 --- a/doc/documentation.rst +++ b/doc/documentation.rst @@ -1,4 +1,3 @@ - .. module:: pytriqs.applications.dft_tools .. _documentation: @@ -6,36 +5,30 @@ Documentation ============= -A (not so) quick tour ---------------------- +Basic notions +------------- .. toctree:: - :maxdepth: 1 + :maxdepth: 2 - interface - DFTDMFTmain - advanced - analysis - selfcons - Ce-HI - Transport + basicnotions/dft_dmft + basicnotions/structure -Projective Wannier functions: the dmftproj package --------------------------------------------------- -In addition to the python-related modules, TRIQS also -provides the Wien2k add-on :program:`dmftproj`. It takes the -information about the wave functions calculated by the `Wien2k package -`_, and constructs projected Wannier functions -that are used as localised orbitals for the DMFT calculation. +User guide +---------- + +.. toctree:: + :maxdepth: 2 + + guide/orbital_construction + guide/conversion + guide/dftdmft_singleshot + guide/dftdmft_selfcons + guide/analysis + guide/full_tutorial + guide/transport -The program :program:`dmftproj` is written in the flavor of the -`Wien2k package `_ without python -support. A detailed description of the usage and options of -:program:`dmftproj` -can be found in :download:`this extensive tutorial `. In -addition, it contains also a description of the Wien2k scripts that -are necessary to do the full charge self-consistent calculations. Reference manual ---------------- @@ -46,6 +39,18 @@ This is the reference manual for the python routines. :maxdepth: 2 reference/h5structure + reference/converters reference/sumk_dft + reference/sumk_dft_tools + reference/U_matrix + reference/symmetry + reference/transbasis +FAQs +---- + +.. toctree:: + :maxdepth: 2 + + faqs/faqs diff --git a/doc/faqs/faqs.rst b/doc/faqs/faqs.rst new file mode 100644 index 00000000..46eae97c --- /dev/null +++ b/doc/faqs/faqs.rst @@ -0,0 +1,17 @@ +Frequently-Asked Questions +========================== + +How do I do ..this..? +--------------------- + +This is how you do this. + +How do I do ..this.. correctly? +------------------------------- + +Correctly is subjective. + +Why is my calculation not working? +---------------------------------- + +Are you running in the right shell? diff --git a/doc/function_template.py b/doc/function_template.py new file mode 100644 index 00000000..072c5acc --- /dev/null +++ b/doc/function_template.py @@ -0,0 +1,98 @@ +class function_template(): + + def old_fft(name, state=None): + """This function does something. + + :param name: The name to use. + :type name: str. + :param state: Current state to be in. + :type state: bool. + :returns: int -- the return code. + :raises: AttributeError, KeyError + + """ + return 0 + + def fft(a, n=None, axis=-1): + + """ + Compute the one-dimensional discrete Fourier Transform. + This function computes the one-dimensional *n*-point discrete Fourier + Transform (DFT) with the efficient Fast Fourier Transform (FFT) + algorithm [CT]. + + Parameters + ---------- + a : array_like + Input array, can be complex. + n : int, optional + Length of the transformed axis of the output. + If `n` is smaller than the length of the input, the input is cropped. + If it is larger, the input is padded with zeros. If `n` is not given, + the length of the input along the axis specified by `axis` is used. + axis : int, optional + Axis over which to compute the FFT. If not given, the last axis is + used. + + Returns + ------- + out : complex ndarray + The truncated or zero-padded input, transformed along the axis + indicated by `axis`, or the last one if `axis` is not specified. + + Raises + ------ + IndexError + if `axes` is larger than the last axis of `a`. + + See Also + -------- + numpy.fft : for definition of the DFT and conventions used. + ifft : The inverse of `fft`. + fft2 : The two-dimensional FFT. + fftn : The *n*-dimensional FFT. + rfftn : The *n*-dimensional FFT of real input. + fftfreq : Frequency bins for given FFT parameters. + + Notes + ----- + FFT (Fast Fourier Transform) refers to a way the discrete Fourier + Transform (DFT) can be calculated efficiently, by using symmetries in the + calculated terms. The symmetry is highest when `n` is a power of 2, and + the transform is therefore most efficient for these sizes. + The DFT is defined, with the conventions used in this implementation, in + the documentation for the `numpy.fft` module. + + References + ---------- + .. [CT] Cooley, James W., and John W. Tukey, 1965, "An algorithm for the + machine calculation of complex Fourier series," *Math. Comput.* + 19: 297-301. + + Examples + -------- + >>> np.fft.fft(np.exp(2j * np.pi * np.arange(8) / 8)) + array([ -3.44505240e-16 +1.14383329e-17j, + 8.00000000e+00 -5.71092652e-15j, + 2.33482938e-16 +1.22460635e-16j, + 1.64863782e-15 +1.77635684e-15j, + 9.95839695e-17 +2.33482938e-16j, + 0.00000000e+00 +1.66837030e-15j, + 1.14383329e-17 +1.22460635e-16j, + -1.64863782e-15 +1.77635684e-15j]) + + >>> import matplotlib.pyplot as plt + >>> t = np.arange(256) + >>> sp = np.fft.fft(np.sin(t)) + >>> freq = np.fft.fftfreq(t.shape[-1]) + >>> plt.plot(freq, sp.real, freq, sp.imag) + [, ] + >>> plt.show() + In this example, real input has an FFT which is Hermitian, i.e., symmetric + in the real part and anti-symmetric in the imaginary part, as described in + the `numpy.fft` documentation. + + """ + + return 0 diff --git a/doc/analysis.rst b/doc/guide/analysis.rst similarity index 99% rename from doc/analysis.rst rename to doc/guide/analysis.rst index 4668f268..3da37939 100644 --- a/doc/analysis.rst +++ b/doc/guide/analysis.rst @@ -3,6 +3,9 @@ Tools for analysis ================== +.. warning:: + TO BE UPDATED! + This section explains how to use some tools of the package in order to analyse the data. .. warning:: diff --git a/doc/interface.rst b/doc/guide/conversion.rst similarity index 93% rename from doc/interface.rst rename to doc/guide/conversion.rst index 4f69933a..92a4bfcb 100644 --- a/doc/interface.rst +++ b/doc/guide/conversion.rst @@ -1,23 +1,27 @@ +.. _conversion: -The interface -============= +Converting DFT data to a hdf archive +==================================== + +.. warning:: + TO BE UPDATED! + +EXPLAIN CONCEPT OF CONVERSION + +Wien2k + dmftproj +----------------- + +LISTING OF FILES NECESSARY FOR EACH SUBGROUP The basic function of the interface to the Wien2k program package is to take the output of the program that constructs the projected local orbitals (:program:`dmftproj`, for documentation see -:download:`TutorialDmftproj.pdf `), +:download:`TutorialDmftproj.pdf `), and to store all the necessary information into an hdf5 file. This latter file is then used to do the DMFT calculation. The reason for this structure is that this enables the user to have everything that is necessary to reproduce the calculation in one single hdf5 archive. -.. index:: Interface to Wien2k - -.. _interfacetowien: - -The interface to Wien2k ------------------------ - As explained above, this interface produces an hdf5 archive out of the files that were written by the band structure package :program:`Wien2k/dmftproj`. For this purpose we @@ -60,6 +64,9 @@ After this step, all the necessary information for the DMFT loop is stored in th the string variable `Converter.hdf_file` gives the file name of the archive. You can now proceed with :ref:`DFTDMFTmain`. +A general H(k) +-------------- +LISTING OF FILES NECESSARY, NAME OF CONVERTER Data for post-processing ------------------------ diff --git a/doc/selfcons.rst b/doc/guide/dftdmft_selfcons.rst similarity index 91% rename from doc/selfcons.rst rename to doc/guide/dftdmft_selfcons.rst index 51af05f2..55042a29 100644 --- a/doc/selfcons.rst +++ b/doc/guide/dftdmft_selfcons.rst @@ -1,11 +1,17 @@ -.. index:: full charge self consistency +.. _full_charge_selfcons: Full charge self consistency ============================ +Wien2k + dmftproj +----------------- + +.. warning:: + TO BE UPDATED! + .. warning:: Before using this tool, you should be familiar with the band-structure package :program:`Wien2k`, since - the calculation is controlled by the :program:`Wien2k` scripts! See also the :download:`dmftproj tutorial`. + the calculation is controlled by the :program:`Wien2k` scripts! See also the :download:`dmftproj tutorial`. In order to do charge self-consistent calculations, we have to tell the band structure program about the changes in the charge density due to correlation effects. In the following, we discuss how to use the @@ -26,14 +32,14 @@ and store it in a format such that :program:`Wien2k` can read it. Therefore, aft previous section, we symmetrise the self energy, and recalculate the impurity Green function:: SK.symm_deg_gf(S.Sigma,orb=0) - S.G << inverse(S.G0) - S.Sigma - S.G.invert() + S.G_iw << inverse(S.G0_iw) - S.Sigma_iw + S.G_iw.invert() These steps are not necessary, but can help to reduce fluctuations in the total energy. Now we calculate the modified charge density:: # find exact chemical potential - SK.put_Sigma(Sigma_imp = [ S.Sigma ]) + SK.put_Sigma(Sigma_imp = [ S.Sigma_iw ]) chemical_potential = SK.calc_mu( precision = 0.000001 ) dN, d = SK.calc_density_correction(filename = dft_filename+'.qdmft') SK.save(['chemical_potential','dc_imp','dc_energ']) @@ -44,7 +50,7 @@ is stored in the file `dft_filename.qdmft`, which is later read by the :program: the chemical potential into the hdf5 archive. We need also the correlation energy, which we evaluate by the Migdal formula:: - correnerg = 0.5 * (S.G * S.Sigma).total_density() + correnerg = 0.5 * (S.G_iw * S.Sigma_iw).total_density() From this value, we substract the double counting energy:: @@ -85,3 +91,11 @@ unstable convergence, you have to adjust the parameters such as In the next section, :ref:`DFTDMFTtutorial`, we will see in a detailed example how such a self consistent calculation is performed. + +VASP + wannier90 +---------------- + +.. warning:: + IN PROGRESS! + + diff --git a/doc/advanced.rst b/doc/guide/dftdmft_singleshot.rst similarity index 66% rename from doc/advanced.rst rename to doc/guide/dftdmft_singleshot.rst index f1056b48..110ed7da 100644 --- a/doc/advanced.rst +++ b/doc/guide/dftdmft_singleshot.rst @@ -1,7 +1,87 @@ -.. _advanced: +.. highlight:: python + +.. _singleshot: + +Single-shot DFT+DMFT +==================== + +.. warning:: + TO BE UPDATED! + +After having set up the hdf5 archive, we can now do our DFT+DMFT calculation. It consists of +initialisation steps, and the actual DMFT self consistency loop. + +Initialisation of the calculation +--------------------------------- + +Before doing the calculation, we have to intialize all the objects that we will need. The first thing is the +:class:`SumkDFT` class. It contains all basic routines that are necessary to perform a summation in k-space +to get the local quantities used in DMFT. It is initialized by:: + + from pytriqs.applications.dft.sumk_dft import * + SK = SumkDFT(hdf_file = filename) + + +Setting up the impurity solver +------------------------------ + +The next step is to setup the impurity solver. +For more details here, see the `CTHYB `_ documentation. + + +Doing the DMFT loop +------------------- + +Having initialised the SumK class and the Solver, we can proceed with the DMFT +loop itself. As explained in the tutorial, we have to set up the loop over DMFT +iterations and the self-consistency condition:: + + n_loops = 5 + for iteration_number in range(n_loops) : # start the DMFT loop + + SK.put_Sigma(Sigma_imp = [ S.Sigma ]) # Put self energy to the SumK class + chemical_potential = SK.calc_mu() # calculate the chemical potential for the given density + S.G_iw << SK.extract_G_loc()[0] # extract the local Green function + S.G0_iw << inverse(S.Sigma_iw + inverse(S.G_iw)) # finally get G0, the input for the Solver + + S.solve(h_loc=h_loc, **p) # now solve the impurity problem + + dm = S.G_iw.density() # Density matrix of the impurity problem + SK.calc_dc(dm, U_interact=U, J_hund=J, orb=0, use_dc_formula=dc_type) # Set the double counting term + SK.save(['chemical_potential','dc_imp','dc_energ']) # Save data in the hdf5 archive + +These basic steps are enough to set up the basic DMFT Loop. For a detailed +description of the :class:`SumkDFT` routines, see the reference manual. After +the self-consistency steps, the solution of the Anderson impurity problem is +calculation by CTQMC. Different to model calculations, we have to do a few +more steps after this, because of the double-counting correction. We first +calculate the density of the impurity problem. Then, the routine `calc_dc` +takes as parameters this density matrix, the Coulomb interaction, Hund's rule +coupling, and the type of double-counting that should be used. Possible values +for `use_dc_formula` are: + + * `0`: Full-localised limit + * `1`: DC formula as given in K. Held, Adv. Phys. 56, 829 (2007). + * `2`: Around-mean-field + +At the end of the calculation, we can save the Greens function and self energy into a file:: + + from pytriqs.archive import HDFArchive + import pytriqs.utility.mpi as mpi + if mpi.is_master_node(): + ar = HDFArchive("YourDFTDMFTcalculation.h5",'w') + ar["G"] = S.G_iw + ar["Sigma"] = S.Sigma_iw + +This is it! + +These are the essential steps to do a one-shot DFT+DMFT calculation. +For full charge-self consistent calculations, there are some more things +to consider, which we will see later on. + A more advanced example -======================= +----------------------- Normally, one wants to adjust some more parameters in order to make the calculation more efficient. Here, we will see a more advanced example, which is also suited for parallel execution. @@ -64,7 +144,7 @@ Now we can use all this information to initialise the :class:`SumkDFT` class:: SK = SumkDFT(hdf_file=dft_filename+'.h5',use_dft_blocks=use_blocks) -The next step is to initialise the Solver:: +The next step is to initialise the :class:`Solver` class:: n_orb = SK.corr_shells[0]['dim'] l = SK.corr_shells[0]['l'] @@ -162,6 +242,3 @@ refinement:: SK.save(['chemical_potential','dc_imp','dc_energ']) This is all we need for the DFT+DMFT calculation. At the end, all results are stored in the hdf5 output file. - - - diff --git a/doc/Ce-HI.rst b/doc/guide/full_tutorial.rst similarity index 94% rename from doc/Ce-HI.rst rename to doc/guide/full_tutorial.rst index e36a711f..e82b3e4e 100644 --- a/doc/Ce-HI.rst +++ b/doc/guide/full_tutorial.rst @@ -1,5 +1,3 @@ -.. index:: tutorial on Ce within Hub.-I approximation - .. _DFTDMFTtutorial: DFT+DMFT tutorial: Ce with Hubbard-I approximation @@ -7,7 +5,11 @@ DFT+DMFT tutorial: Ce with Hubbard-I approximation In this tutorial we will perform DFT+DMFT :program:`Wien2k` calculations of the high-temperature :math:`\gamma`-phase of Ce employing the Hubbard-I approximation for its localized *4f* shell. -First we create the Wien2k :file:`Ce-gamma.struct` file as described in `Wien2k manual `_ + +Wien2k setup +------------ + +First we create the Wien2k :file:`Ce-gamma.struct` file as described in the `Wien2k manual `_ for the :math:`\gamma`-Ce fcc structure with lattice parameter of 9.75 a.u. .. literalinclude:: Ce-gamma.struct @@ -23,6 +25,8 @@ Hence, the initialization script is executed as follows :: and then LDA calculations of non-magnetic :math:`\gamma`-Ce are performed by launching the :program:`Wien2k` :program:`run` script. These self-consistent LDA calculations will typically take a couple of minutes. +DMFTPROJ +-------- Then we create :file:`Ce-gamma.indmftpr` file specifying parameters for construction of Wannier orbitals representing *4f* states: @@ -66,14 +70,10 @@ This program produces the following files: Now we have all necessary input from :program:`Wien2k` for running DMFT calculations. -.. index:: Hubbard-I in TRIQS +DMFT setup: Hubbard-I calculations in TRIQS +-------------------------------------------- -.. _HubITRIQS: - -Hubbard-I calculations in TRIQS -------------------------------- - -In order to run DFT+DMFT calculations within Hubbard-I we need the corresponding python script, :ref:`Ce-gamma-script`. +In order to run DFT+DMFT calculations within Hubbard-I we need the corresponding python script, :ref:`Ce-gamma_script`. It is generally similar to the script for the case of DMFT calculations with the CT-QMC solver (see :ref:`advanced`), however there are also some differences. First, instead of *pytriqs.applications.dft.solver_multiband* we import Hubbard-I solver :: @@ -122,13 +122,12 @@ Then the double counting is recalculated and the correlation energy is computed Finally, we compute the modified charge density and save it as well as correlational correction to the total energy in :file:`Ce-gamma.qdmft` file, which is then read by :program:`lapw2` in the case of self-consistent DFT+DMFT calculations. -.. index:: running DFT+DMFT calculations -Running DFT+DMFT calculations ------------------------------ +Running single-shot DFT+DMFT calculations +------------------------------------------ After having prepared the script one may run one-shot DMFT calculations by -executing :ref:`Ce-gamma-script` with :program:`pytriqs` on a single processor:: +executing :ref:`Ce-gamma_script` with :program:`pytriqs` on a single processor:: pytriqs Ce-gamma.py @@ -140,6 +139,10 @@ where :program:`mpirun` launches these calculations in parallel mode and enables MPI. The exact form of this command will, of course, depend on mpi-launcher installed in your system. + +Running self-consistent DFT+DMFT calculations +--------------------------------------------- + Instead of doing one-shot run one may also perform fully self-consistent DFT+DMFT calculations, as we will do in this tutorial. We launch these calculations as follows :: @@ -171,8 +174,9 @@ One may also check the convergence in total energy:: :ENE : ********** TOTAL ENERGY IN Ry = -17717.56285812 :ENE : ********** TOTAL ENERGY IN Ry = -17717.56287381 -Calculating DOS with Hubbard-I ------------------------------- + +Post-processing and data analysis +--------------------------------- Within Hubbard-I one may also easily obtain the angle-resolved spectral function (band structure) and integrated spectral function (density of states or DOS). In @@ -180,7 +184,7 @@ difference with the CT-QMC approach one does not need to provide the real-frequency self-energy (see :ref:`analysis`) as it can be calculated directly in the Hubbard-I solver. -The corresponding script :ref:`Ce-gamma_DOS-script` contains several new parameters :: +The corresponding script :ref:`Ce-gamma_DOS_script` contains several new parameters :: ommin=-4.0 # bottom of the energy range for DOS calculations ommax=6.0 # top of the energy range for DOS calculations @@ -204,17 +208,15 @@ We may first increase the number of **k**-points in BZ to 10000 by executing :pr x kgen -and then by executing :ref:`Ce-gamma_DOS-script` with :program:`pytriqs`:: +and then by executing :ref:`Ce-gamma_DOS_script` with :program:`pytriqs`:: pytriqs Ce-gamma_DOS.py In result we get the total DOS for spins `up` and `down` (identical in our paramagnetic case) in :file:`DOScorrup.dat` and :file:`DOScorrdown.dat` files, respectively, as well as projected DOSs written in the corresponding files as described in :ref:`analysis`. In our case, for example, the files :file:`DOScorrup.dat` and :file:`DOScorrup_proj3.dat` contain the total DOS for spin *up* and the corresponding projected DOS for Ce *4f* orbital, respectively. They are plotted below. -.. image:: Ce_DOS.png +.. image:: images_scripts/Ce_DOS.png :width: 700 :align: center As one may clearly see, the Ce *4f* band is split by the local Coulomb interaction into the filled lower Hubbard band and empty upper Hubbard band (the latter is additionally split into several peaks due to the Hund's rule coupling and multiplet effects). - - diff --git a/doc/Ce-gamma.indmftpr b/doc/guide/images_scripts/Ce-gamma.indmftpr similarity index 100% rename from doc/Ce-gamma.indmftpr rename to doc/guide/images_scripts/Ce-gamma.indmftpr diff --git a/doc/Ce-gamma.py b/doc/guide/images_scripts/Ce-gamma.py similarity index 100% rename from doc/Ce-gamma.py rename to doc/guide/images_scripts/Ce-gamma.py diff --git a/doc/Ce-gamma.struct b/doc/guide/images_scripts/Ce-gamma.struct similarity index 100% rename from doc/Ce-gamma.struct rename to doc/guide/images_scripts/Ce-gamma.struct diff --git a/doc/Ce-gamma_DOS.py b/doc/guide/images_scripts/Ce-gamma_DOS.py similarity index 98% rename from doc/Ce-gamma_DOS.py rename to doc/guide/images_scripts/Ce-gamma_DOS.py index 07abb329..0f7a2d4a 100644 --- a/doc/Ce-gamma_DOS.py +++ b/doc/guide/images_scripts/Ce-gamma_DOS.py @@ -5,7 +5,7 @@ from pytriqs.applications.impurity_solvers.hubbard_I.hubbard_solver import Solve # Creates the data directory, cd into it: #Prepare_Run_Directory(DirectoryName = "Ce-Gamma") dft_filename = 'Ce-gamma' -Beta = 40 +beta = 40 U_int = 6.00 J_hund = 0.70 DC_type = 0 # 0...FLL, 1...Held, 2... AMF, 3...Lichtenstein @@ -63,7 +63,7 @@ N = SK.corr_shells[0]['dim'] l = SK.corr_shells[0]['l'] # Init the Solver: -S = Solver(beta = Beta, l = l) +S = Solver(beta = beta, l = l) # set atomic levels: eal = SK.eff_atomic_levels()[0] @@ -75,4 +75,3 @@ SK.put_Sigma(Sigma_imp = [S.Sigma]) # compute DOS SK.dos_partial(broadening=broadening) - diff --git a/doc/Ce-gamma_DOS_script.rst b/doc/guide/images_scripts/Ce-gamma_DOS_script.rst similarity index 78% rename from doc/Ce-gamma_DOS_script.rst rename to doc/guide/images_scripts/Ce-gamma_DOS_script.rst index f59b342d..ebbbc392 100644 --- a/doc/Ce-gamma_DOS_script.rst +++ b/doc/guide/images_scripts/Ce-gamma_DOS_script.rst @@ -1,4 +1,4 @@ -.. _Ce-gamma_DOS-script: +.. _Ce-gamma_DOS_script: Ce-gamma_DOS.py --------------- diff --git a/doc/Ce-gamma_script.rst b/doc/guide/images_scripts/Ce-gamma_script.rst similarity index 79% rename from doc/Ce-gamma_script.rst rename to doc/guide/images_scripts/Ce-gamma_script.rst index 9b142276..ad6f40b5 100644 --- a/doc/Ce-gamma_script.rst +++ b/doc/guide/images_scripts/Ce-gamma_script.rst @@ -1,4 +1,4 @@ -.. _Ce-gamma-script: +.. _Ce-gamma_script: Ce-gamma.py ----------- diff --git a/doc/Ce_DOS.png b/doc/guide/images_scripts/Ce_DOS.png similarity index 100% rename from doc/Ce_DOS.png rename to doc/guide/images_scripts/Ce_DOS.png diff --git a/doc/TutorialDmftproj.pdf b/doc/guide/images_scripts/TutorialDmftproj.pdf similarity index 100% rename from doc/TutorialDmftproj.pdf rename to doc/guide/images_scripts/TutorialDmftproj.pdf diff --git a/doc/guide/orbital_construction.rst b/doc/guide/orbital_construction.rst new file mode 100644 index 00000000..9d706b8e --- /dev/null +++ b/doc/guide/orbital_construction.rst @@ -0,0 +1,19 @@ +.. _orbital_construction: + +Orbital construction +==================== + +.. warning:: + TO BE UPDATED! + +dmftproj +-------- + +The dft_tools package comes with a converter to use `Wien2k `_ band structure calculations as input for the DMFT part of the calculation, through the construction of projective Wannier functions. The first step is done by the program :program:`dmftproj`, producing text output files. In the second step, this ouput is read and converted into the hdf5 format, using the python module :class:`Wien2kConverter`. + + +Wannier90 +--------- + +.. warning:: + IN PROGRESS! diff --git a/doc/Transport.rst b/doc/guide/transport.rst similarity index 73% rename from doc/Transport.rst rename to doc/guide/transport.rst index a122c60d..63066314 100644 --- a/doc/Transport.rst +++ b/doc/guide/transport.rst @@ -1,12 +1,8 @@ -.. index:: Transport - .. _Transport: Transport calculations ====================== -.. index:: Theory - Formalism --------- The conductivity and the Seebeck coefficient in direction :math:`\alpha\beta` are defined as [#transp]_: @@ -34,26 +30,24 @@ The frequency depended optical conductivity is given by \sigma(\Omega) = N_{sp} \pi e^2 \hbar \int{d\omega \Gamma_{\alpha\beta}(\omega+\Omega/2,\omega-\Omega/2)\frac{f(\omega-\Omega/2)-f(\omega+\Omega/2)}{\Omega}}. -.. index:: Prerequisite Prerequisites ------------- -First perform a standard DFT+DMFT calculation for your desired material (see :ref:`DFTDMFTmain`) and obtain the real-frequency self energy by doing an +First perform a standard :ref:`DFT+DMFT calculation ` for your desired material and obtain the real-frequency self energy by doing an analytic continuation. .. note:: It is crucial to perform the analytic continuation in such a way that the obtained real-frequency self energy is accurate around the Fermi energy as only its low energy structure influences the final results! -Besides the self energy the Wien2k files read by the transport converter are: +Besides the self energy the Wien2k files read by the transport converter (:meth:`convert_transport_input `) are: * :file:`.struct`: The lattice constants specified in the struct file are used to calculate the unit cell volume. * :file:`.outputs`: In this file the k-point symmetries are given. * :file:`.oubwin`: Contains the indices of the bands within the projected subspace (written by :program:`dmftproj`) for each k-point. * :file:`.pmat`: This file is the output of the Wien2k optics package and contains the velocity (momentum) matrix elements between all bands in the desired energy window for each k-point. How to use the optics package is described below. - * :file:`.h5`: The hdf file has to be present and should contain the dft_input subgroup. Otherwise :class:`convert_dft_input` needs to be called before :class:`convert_transport_input`. + * :file:`.h5`: The hdf5 archive has to be present and should contain the dft_input subgroup. Otherwise :meth:`convert_dft_input ` needs to be called before :meth:`convert_transport_input `. -.. index:: Wien2k optics package Wien2k optics package --------------------- @@ -67,15 +61,13 @@ The basics steps to calculate the matrix elements of the momentum operator with 6) Run `x optic`. Additionally the input file :file:`case.inop` is required. A detail description on how to setup this file can be found in the Wien2k user guide [#userguide]_ on page 166. -Here the energy window can be chosen according to the window used for :program:`dmftprj`. However, keep in mind that energies have to be specified in absolute values! Furthermore it is important -to set line 6 to ON for printing the matrix elements to the :file:`.pmat` file. +Here the energy window can be chosen according to the window used for :program:`dmftproj`. However, keep in mind that energies have to be specified in absolute values! Furthermore it is important to set line 6 to ON for printing the matrix elements to the :file:`.pmat` file. -.. index:: Using the transport code. Using the transport code ------------------------ -First we have to read the Wien2k files and store the relevant information in the hdf-file:: +First we have to read the Wien2k files and store the relevant information in the hdf5 archive:: from pytriqs.applications.dft.converters.wien2k_converter import * from pytriqs.applications.dft.sumk_dft_tools import * @@ -95,17 +87,14 @@ Additionally we need to read and set the self energy, the chemical potential and As next step we can calculate the transport distribution :math:`\Gamma_{\alpha\beta}(\omega)`:: - SK.transport_distribution(directions=['xx'], Om_mesh=[0.00, 0.02], energy_window=[-0.3,0.3], + SK.transport_distribution(directions=['xx'], Om_mesh=[0.0, 0.1], energy_window=[-0.3,0.3], with_Sigma=True, broadening=0.0, beta=40) -The parameters are: - * `directions`: :math:`\alpha` and :math:`\beta` (e.g. xx, yy, xz, ...) - * `Om_mesh`: :math:`\Omega`-mesh for the optical conductivity. Note that the code repines this mesh to the closest values on the self energy mesh! The new mesh is stored in `Om_meshr`. - The Seebeck coefficient is only calculated if :math:`\Omega=0.0` is included. - * `energy_window`: Limits for the integration over :math:`\omega` (Due to the Fermi functions the integrand is only of considerable size in a small - window around the Fermi energy). For optical conductivity calculations the window is automatically enlarged by :math:`\Omega` . - * `with_Sigma`: If this parameter is set to False then Sigma is set to 0 (i.e. the DFT band structure :math:`A(k,\omega)` is taken). - * `broadening`: The numerical broadening should be set to a finite value for with_Sigma = False. +Here the transport distribution is calculated in :math:`xx` direction for the frequencies :math:`\Omega=0.0` and :math:`0.1`. +To use the previously obtained self energy we set with_Sigma to True and the broadening to :math:`0.0`. +As we also want to calculate the Seebeck coefficient we have to include :math:`\Omega=0.0` in the mesh. +Note that the current version of the code repines the :math:`\Omega` values to the closest values on the self energy mesh. +For complete description of the input parameters see the :meth:`transport_distribution reference `. The resulting transport distribution is not automatically saved, but this can be easily achieved with:: @@ -119,7 +108,6 @@ Finally the optical conductivity :math:`\sigma(\Omega)` and the Seebeck coeffici It is strongly advised to check convergence in the number of k-points! -.. index:: References References ---------- diff --git a/doc/index.rst b/doc/index.rst index a8d7249e..9f68e0f1 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,16 +1,20 @@ -.. index:: Wien2k +.. index:: DFT Tools .. module:: pytriqs.applications.dft -.. _wien2k: +.. _dfttools: -dft_tools -======================================================== +DFT Tools +========= -This application is aimed at DMFT calculations with -realistic band structure calculations. +This application is aimed at DMFT calculations with +realistic band structure calculations. A priori TRIQS can be connected to various realistic band structure codes. -In this release, we provide the dft_tools extension module which contains an -interface to the `Wien2k package `_. - +In this release, we provide the dft_tools extension module which contains an +interface to the + * `WIEN2K package `_. + * A general Hamiltonian H(k) + * FLEUR (in progress..) + * VASP? (in progress..) + * Wannier90? (in progress..) diff --git a/doc/install.rst b/doc/install.rst index 5bca0fa1..33566611 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -4,6 +4,8 @@ Installation ============ +LINKS ARE BROKEN! + Prerequisites ------------- @@ -33,6 +35,9 @@ Installation steps $ make test $ make install +TO BE FIXED +=========== + Installation steps for use with WIEN2K --------------------------------------- @@ -76,10 +81,9 @@ Version compatibility --------------------- Be careful that the version of the TRIQS library and of the dft tools must be -compatible (more information on the `TRIQS website -`_). If you want to use a version of -the dft tools that is not the latest one, go into the directory with the sources -and look at all available versions:: +compatible (more information on the :ref:`TRIQS website `. +If you want to use a version of the dft tools that is not the latest one, go +into the directory with the sources and look at all available versions:: $ cd src && git tag diff --git a/doc/issues.rst b/doc/issues.rst index e6082fc3..efe3e9ca 100644 --- a/doc/issues.rst +++ b/doc/issues.rst @@ -13,7 +13,7 @@ for us to solve the issue please follow these guidelines: #. If you have a problem during the installation, give us information about your operating system and the compiler you are using. Include the outputs of the ``cmake`` and ``make`` commands as well as the ``CMakeCache.txt`` file - which is in the build directory. Please include these outputs in a + which is in the build directory. Please include these outputs in a `gist `_ file referenced in the issue. #. If you are experiencing a problem during the execution of the application, provide diff --git a/doc/reference/U_matrix.rst b/doc/reference/U_matrix.rst new file mode 100644 index 00000000..d9e67732 --- /dev/null +++ b/doc/reference/U_matrix.rst @@ -0,0 +1,5 @@ +U_matrix +======== + +.. automodule:: pytriqs.applications.dft.U_matrix + :members: diff --git a/doc/reference/converters.rst b/doc/reference/converters.rst new file mode 100644 index 00000000..6d175a5d --- /dev/null +++ b/doc/reference/converters.rst @@ -0,0 +1,21 @@ +Converters +========== + +Wien2k Converter +---------------- +.. autoclass:: pytriqs.applications.dft.converters.wien2k_converter.Wien2kConverter + :members: + :special-members: + :show-inheritance: + +H(k) Converter +-------------- +.. autoclass:: pytriqs.applications.dft.converters.hk_converter.HkConverter + :members: + :special-members: + +Converter Tools +--------------- +.. autoclass:: pytriqs.applications.dft.converters.converter_tools.ConverterTools + :members: + :special-members: diff --git a/doc/reference/h5structure.rst b/doc/reference/h5structure.rst index c45b54d3..13c60d04 100644 --- a/doc/reference/h5structure.rst +++ b/doc/reference/h5structure.rst @@ -1,17 +1,24 @@ +hdf5 structure +============== -H5 input file and Converters -============================ +All the data is stored using the hdf5 standard, as described also in the +documentation of the TRIQS package itself. In order to do a DMFT calculation, +using input from DFT applications, a converter is needed on order to provide +the necessary data in the hdf5 format. -All the data is stored using the hdf5 standard, as described also in the documentation of the TRIQS package itself. In order to do a DMFT calculation, using input from DFT applications, a converter is needed on order to provide the necessary data in the hdf5 format. +groups and their formats +------------------------ +In order to be used with the DMFT routines, the following data needs to be +provided in the hdf5 file. It contains a lot of information in order to perform +DMFT calculations for all kinds of situations, e.g. d-p Hamiltonians, more than +one correlated atomic shell, or using symmetry operations for the k-summation. +We store all data in subgroups of the hdf5 archive: - -hdf5 data format ----------------- - -In order to be used with the DMFT routines, the following data needs to be provided in the hdf5 file. It contains a lot of information in order to perform DMFT calculations for all kinds of situations, e.g. d-p Hamiltonians, more than one correlated atomic shell, or using symmetry operations for the k-summation. We store all data in subgroups of the hdf5 archive: - -:program:`Main data`: There needs to be one subgroup for the main data of the calculation. The default name of this group is `dft_input`. Its contents are +Main data +^^^^^^^^^ +There needs to be one subgroup for the main data of the +calculation. The default name of this group is `dft_input`. Its contents are ================= ====================================================================== ===================================================================================== Name Type Meaning @@ -70,21 +77,30 @@ hopping numpy.array.complex, ================= ====================================================================== ===================================================================================== -:program:`Symmetry operations`: In this subgroup we store all the data for applying the symmetry - operations in the DMFT loop (in case you want to use symmetry operations). The default name of this subgroup is `SymmCorr`. This information is needed only if symmetry operations are used to do the k summation. To be continued... +Symmetry operations +^^^^^^^^^^^^^^^^^^^ +In this subgroup we store all the data for applying the symmetry operations in +the DMFT loop (in case you want to use symmetry operations). The default name +of this subgroup is `dft_symmcorr_input`. This information is needed only if symmetry +operations are used to do the k summation. To be continued... - -Wien2k Converter ----------------- - -The dft_tools package comes with a converter to use `Wien2k `_ band structure calculations as input for the DMFT part of the calculation, through the construction of projective Wannier functions. The first step is done by the program :program:`dmftproj`, producing text output files. In the second step, this ouput is read and converted into the hdf5 format, using the python module :class:`Wien2kConverter`. - -HERE COMES A LISTING OF THE FUNCTIONS. +.. warning:: + TO BE COMPLETED! General and simple H(k) Converter --------------------------------- -The above described converter of the Wien2k input is quite involved, since Wien2k provides a lot of information, e.g. about symmetry operations, that can be used in the calculation. However, sometimes we want to use a light implementation where the input consists basically only of the Hamiltonian matrix in Wannier basis, given at a grid of k points in the first Brillouin zone. For this purpose, a simple converter is included in the package, called :class:`HkConverter`, which is implemented for the simplest case of paramagnetic DFT calculations without spin-orbit coupling. It reads a simple, easy to construct text file, and produces an archive that can be used for the DMFT calculations. An example input file for a structure with one correlated site with 3 t2g orbitals in the unit cell contains the following: +The above described converter of the Wien2k input is quite involved, since +Wien2k provides a lot of information, e.g. about symmetry operations, that can +be used in the calculation. However, sometimes we want to use a light +implementation where the input consists basically only of the Hamiltonian +matrix in Wannier basis, given at a grid of k points in the first Brillouin +zone. For this purpose, a simple converter is included in the package, called +:class:`HkConverter`, which is implemented for the simplest case of +paramagnetic DFT calculations without spin-orbit coupling. It reads a simple, +easy to construct text file, and produces an archive that can be used for the +DMFT calculations. An example input file for a structure with one correlated +site with 3 t2g orbitals in the unit cell contains the following: 10 <- n_k @@ -98,19 +114,19 @@ The above described converter of the Wien2k input is quite involved, since Wien2 1 1 2 3 0 0 <- corr_shells, as above: atom, sort, l, dim, SO, dummy - 2 2 3 <- n_reps, dim_reps (length 2, because eg/t2g splitting) - -After this header, we give the Hamiltonian matrices for al the k-points. for each k-point we give first the matrix of the real part, then the matrix of the imaginary part. The projection matrices are set automatically to unity matrices, no rotations, no symmetry operations are used. That means that the symmetry sub group in the hdf5 archive needs not be set, since it is not used. It is furthermore assumed that all k-points have equal weight in the k-sum. Note that the input file should contain only the numbers, not the comments given in above example. - -The Hamiltonian matrices can be taken, e.g., from Wannier90, which contructs the Hamiltonian in a maximally localised Wannier basis. - -Note that with this simplified converter, no full charge self consistent calculations are possible! - - - - - - + 2 2 3 <- n_reps, dim_reps (length 2, because eg/t2g splitting) for each shell +After this header, we give the Hamiltonian matrices for al the k-points. for +each k-point we give first the matrix of the real part, then the matrix of the +imaginary part. The projection matrices are set automatically to unity +matrices, no rotations, no symmetry operations are used. That means that the +symmetry sub group in the hdf5 archive needs not be set, since it is not used. +It is furthermore assumed that all k-points have equal weight in the k-sum. +Note that the input file should contain only the numbers, not the comments +given in above example. +The Hamiltonian matrices can be taken, e.g., from Wannier90, which contructs +the Hamiltonian in a maximally localised Wannier basis. +Note that with this simplified converter, no full charge self consistent +calculations are possible! diff --git a/doc/reference/put_Sigma.rst b/doc/reference/put_Sigma.rst deleted file mode 100644 index 80e69ecf..00000000 --- a/doc/reference/put_Sigma.rst +++ /dev/null @@ -1,5 +0,0 @@ - -put_Sigma -========= - -Here comes some text. diff --git a/doc/reference/sumk_dft.rst b/doc/reference/sumk_dft.rst index 77e6841c..65c59c81 100644 --- a/doc/reference/sumk_dft.rst +++ b/doc/reference/sumk_dft.rst @@ -1,8 +1,8 @@ - -SumK_DFT +SumK DFT ======== -.. toctree:: - :maxdepth: 1 - put_Sigma +.. autoclass:: pytriqs.applications.dft.sumk_dft.SumkDFT + :members: + :special-members: + :show-inheritance: diff --git a/doc/reference/sumk_dft_tools.rst b/doc/reference/sumk_dft_tools.rst new file mode 100644 index 00000000..f6205b5c --- /dev/null +++ b/doc/reference/sumk_dft_tools.rst @@ -0,0 +1,8 @@ +SumK DFT Tools +============== + + +.. autoclass:: pytriqs.applications.dft.sumk_dft_tools.SumkDFTTools + :members: + :special-members: + :show-inheritance: diff --git a/doc/reference/symmetry.rst b/doc/reference/symmetry.rst new file mode 100644 index 00000000..e1d1b5a1 --- /dev/null +++ b/doc/reference/symmetry.rst @@ -0,0 +1,6 @@ +Symmetry +======== + +.. autoclass:: pytriqs.applications.dft.Symmetry + :members: + :special-members: diff --git a/doc/reference/transbasis.rst b/doc/reference/transbasis.rst new file mode 100644 index 00000000..822be890 --- /dev/null +++ b/doc/reference/transbasis.rst @@ -0,0 +1,6 @@ +TransBasis +========== + +.. autoclass:: pytriqs.applications.dft.trans_basis.TransBasis + :members: + :special-members: diff --git a/python/U_matrix.py b/python/U_matrix.py index d38cc6af..f1a003ef 100644 --- a/python/U_matrix.py +++ b/python/U_matrix.py @@ -5,13 +5,42 @@ import numpy as np # The interaction matrix in desired basis # U^{spherical}_{m1 m2 m3 m4} = \sum_{k=0}^{2l} F_k angular_matrix_element(l, k, m1, m2, m3, m4) -def U_matrix(l, radial_integrals=None, U_int=None, J_hund=None, basis="spherical", T=None): - """Calculate U matrix being given either radial_integrals or U_int and J_hund. - l = angular momentum of shell being treated (l=2 for d shell, l=3 for f shell) - radial_integrals = [F0,F2,F4,..] (default None) - U_int, J_hund = values to use to compute radial_integrals (default None), - basis = "spherical", "cubic", or "other", - T = transformation matrix from spherical to desired basis, if basis='other' (default None)""" +def U_matrix(l, radial_integrals=None, U_int=None, J_hund=None, basis='spherical', T=None): + r""" + Calculate the full four-index U matrix being given either radial_integrals or U_int and J_hund. + + Parameters + ---------- + l : integer + Angular momentum of shell being treated (l=2 for d shell, l=3 for f shell). + radial_integrals : list, optional + Slater integrals [F0,F2,F4,..]. + Must be provided if U_int and J_hund are not given. + Preferentially used to compute the U_matrix if provided alongside U_int and J_hund. + U_int : scalar, optional + Value of the screened Hubbard interaction. + Must be provided if radial_integrals are not given. + J_hund : scalar, optional + Value of the Hund's coupling. + Must be provided if radial_integrals are not given. + basis : string, optional + The basis in which the interaction matrix should be computed. + Takes the values + + - 'spherical': spherical harmonics, + - 'cubic': cubic harmonics, + - 'other': other basis type as given by the transformation matrix T. + + T : real/complex numpy array, optional + Transformation matrix for basis change. + Must be provided if basis='other'. + + Returns + ------- + U_matrix : float numpy array + The four-index interaction matrix in the chosen basis. + + """ # Check all necessary information is present and consistent if radial_integrals is None and (U_int is None and J_hund is None): @@ -22,7 +51,7 @@ def U_matrix(l, radial_integrals=None, U_int=None, J_hund=None, basis="spherical if len(radial_integrals)-1 != l: raise ValueError("U_matrix: inconsistency in l and number of radial_integrals provided.") if (radial_integrals - U_J_to_radial_integrals(l, U_int, J_hund)).any() != 0.0: - print "Warning: U_matrix: radial_integrals provided do not match U_int and J_hund. Using radial_integrals to calculate spherical U_matrix." + print "Warning: U_matrix: radial_integrals provided do not match U_int and J_hund. Using radial_integrals to calculate U_matrix." # Full interaction matrix # Basis of spherical harmonics Y_{-2}, Y_{-1}, Y_{0}, Y_{1}, Y_{2} @@ -45,7 +74,22 @@ def U_matrix(l, radial_integrals=None, U_int=None, J_hund=None, basis="spherical # Convert full 4-index U matrix to 2-index density-density form def reduce_4index_to_2index(U_4index): - """Reduces the four-index matrix to two-index matrices.""" + r""" + Reduces the four-index matrix to two-index matrices for parallel and anti-parallel spins. + + Parameters + ---------- + U_4index : float numpy array + The four-index interaction matrix. + + Returns + ------- + U : float numpy array + The two-index interaction matrix for parallel spins. + Uprime : float numpy array + The two-index interaction matrix for anti-parallel spins. + + """ size = len(U_4index) # 2l+1 U = np.zeros((size,size),dtype=float) # matrix for same spin @@ -60,7 +104,26 @@ def reduce_4index_to_2index(U_4index): # Construct the 2-index matrices for the density-density form def U_matrix_kanamori(n_orb, U_int, J_hund): - """Calculate the Kanamori U and Uprime matrices.""" + r""" + Calculate the Kanamori U and Uprime matrices. + + Parameters + ---------- + n_orb : integer + Number of orbitals in basis. + U_int : scalar + Value of the screened Hubbard interaction. + J_hund : scalar + Value of the Hund's coupling. + + Returns + ------- + U : float numpy array + The two-index interaction matrix for parallel spins. + Uprime : float numpy array + The two-index interaction matrix for anti-parallel spins. + + """ U = np.zeros((n_orb,n_orb),dtype=float) # matrix for same spin Uprime = np.zeros((n_orb,n_orb),dtype=float) # matrix for opposite spin @@ -77,14 +140,53 @@ def U_matrix_kanamori(n_orb, U_int, J_hund): # Get t2g or eg components def t2g_submatrix(U, convention=''): - """Return only the t2g part of the full d-manifold two- or four-index U matrix.""" + r""" + Extract the t2g submatrix of the full d-manifold two- or four-index U matrix. + + Parameters + ---------- + U : float numpy array + Two- or four-index interaction matrix. + convention : string, optional + The basis convention. + Takes the values + + - '': basis ordered as ("xy","yz","z^2","xz","x^2-y^2"), + - 'wien2k': basis ordered as ("z^2","x^2-y^2","xy","yz","xz"). + + Returns + ------- + U_t2g : float numpy array + The t2g component of the interaction matrix. + + """ if convention == 'wien2k': return subarray(U, len(U.shape)*[(2,3,4)]) else: return subarray(U, len(U.shape)*[(0,1,3)]) def eg_submatrix(U, convention=''): - """Return only the eg part of the full d-manifold two- or four-index U matrix.""" + r""" + Extract the eg submatrix of the full d-manifold two- or four-index U matrix. + + Parameters + ---------- + U : float numpy array + Two- or four-index interaction matrix. + convention : string, optional + The basis convention. + Takes the values + + - '': basis ordered as ("xy","yz","z^2","xz","x^2-y^2"), + - 'wien2k': basis ordered as ("z^2","x^2-y^2","xy","yz","xz"). + + + Returns + ------- + U_eg : float numpy array + The eg component of the interaction matrix. + + """ if convention == 'wien2k': return subarray(U, len(U.shape)*[(0,1)]) else: @@ -92,13 +194,48 @@ def eg_submatrix(U, convention=''): # Transform the interaction matrix into another basis def transform_U_matrix(U_matrix, T): - """Transform the interaction matrix into another basis by applying matrix T.""" + r""" + Transform a four-index interaction matrix into another basis. + + Parameters + ---------- + U_matrix : float numpy array + The four-index interaction matrix in the original basis. + T : real/complex numpy array, optional + Transformation matrix for basis change. + Must be provided if basis='other'. + + Returns + ------- + U_matrix : float numpy array + The four-index interaction matrix in the new basis. + + """ return np.einsum("ij,kl,jlmo,mn,op",np.conj(T),np.conj(T),U_matrix,np.transpose(T),np.transpose(T)) # Rotation matrices: complex harmonics to cubic harmonics # Complex harmonics basis: ..., Y_{-2}, Y_{-1}, Y_{0}, Y_{1}, Y_{2}, ... def spherical_to_cubic(l, convention=''): - """Returns the spherical harmonics to cubic harmonics rotation matrix.""" + r""" + Get the spherical harmonics to cubic harmonics transformation matrix. + + Parameters + ---------- + l : integer + Angular momentum of shell being treated (l=2 for d shell, l=3 for f shell). + convention : string, optional + The basis convention. + Takes the values + + - '': basis ordered as ("xy","yz","z^2","xz","x^2-y^2"), + - 'wien2k': basis ordered as ("z^2","x^2-y^2","xy","yz","xz"). + + Returns + ------- + T : real/complex numpy array + Transformation matrix for basis change. + + """ size = 2*l+1 T = np.zeros((size,size),dtype=complex) if convention != 'wien2k' and l != 2: @@ -140,6 +277,21 @@ def spherical_to_cubic(l, convention=''): # Names of cubic harmonics def cubic_names(l): + r""" + Get the names of the cubic harmonics. + + Parameters + ---------- + l : integer or string + Angular momentum of shell being treated. + Also takes 't2g' and 'eg' as arguments. + + Returns + ------- + cubic_names : tuple of strings + Names of the orbitals. + + """ if l == 0 or l == 's': return ("s") elif l == 1 or l == 'p': @@ -156,7 +308,24 @@ def cubic_names(l): # Convert U,J -> radial integrals F_k def U_J_to_radial_integrals(l, U_int, J_hund): - """Determines the radial integrals F_k from U_int and J_hund.""" + r""" + Determine the radial integrals F_k from U_int and J_hund. + + Parameters + ---------- + l : integer + Angular momentum of shell being treated (l=2 for d shell, l=3 for f shell). + U_int : scalar + Value of the screened Hubbard interaction. + J_hund : scalar + Value of the Hund's coupling. + + Returns + ------- + radial_integrals : list + Slater integrals [F0,F2,F4,..]. + + """ F = np.zeros((l+1),dtype=float) if l == 2: @@ -174,7 +343,24 @@ def U_J_to_radial_integrals(l, U_int, J_hund): # Convert radial integrals F_k -> U,J def radial_integrals_to_U_J(l, F): - """Determines U_int and J_hund from the radial integrals.""" + r""" + Determine U_int and J_hund from the radial integrals. + + Parameters + ---------- + l : integer + Angular momentum of shell being treated (l=2 for d shell, l=3 for f shell). + F : list + Slater integrals [F0,F2,F4,..]. + + Returns + ------- + U_int : scalar + Value of the screened Hubbard interaction. + J_hund : scalar + Value of the Hund's coupling. + + """ if l == 2: U_int = F[0] @@ -189,15 +375,73 @@ def radial_integrals_to_U_J(l, F): # Angular matrix elements of particle-particle interaction # (2l+1)^2 ((l 0) (k 0) (l 0))^2 \sum_{q=-k}^{k} (-1)^{m1+m2+q} ((l -m1) (k q) (l m3)) ((l -m2) (k -q) (l m4)) def angular_matrix_element(l, k, m1, m2, m3, m4): - result = 0 + r""" + Calculate the angular matrix element + + .. math:: + (2l+1)^2 + \begin{pmatrix} + l & k & l \\ + 0 & 0 & 0 + \end{pmatrix}^2 + \sum_{q=-k}^k (-1)^{m_1+m_2+q} + \begin{pmatrix} + l & k & l \\ + -m_1 & q & m_3 + \end{pmatrix} + \begin{pmatrix} + l & k & l \\ + -m_2 & -q & m_4 + \end{pmatrix}. + + Parameters + ---------- + l : integer + k : integer + m1 : integer + m2 : integer + m3 : integer + m4 : integer + + Returns + ------- + ang_mat_ele : scalar + Angular matrix element. + + """ + ang_mat_ele = 0 for q in range(-k,k+1): - result += three_j_symbol((l,-m1),(k,q),(l,m3))*three_j_symbol((l,-m2),(k,-q),(l,m4))*(-1.0 if (m1+q+m2) % 2 else 1.0) - result *= (2*l+1)**2 * (three_j_symbol((l,0),(k,0),(l,0))**2) - return result + ang_mat_ele += three_j_symbol((l,-m1),(k,q),(l,m3))*three_j_symbol((l,-m2),(k,-q),(l,m4))*(-1.0 if (m1+q+m2) % 2 else 1.0) + ang_mat_ele *= (2*l+1)**2 * (three_j_symbol((l,0),(k,0),(l,0))**2) + return ang_mat_ele # Wigner 3-j symbols # ((j1 m1) (j2 m2) (j3 m3)) def three_j_symbol(jm1, jm2, jm3): + r""" + Calculate the three-j symbol + + .. math:: + \begin{pmatrix} + l_1 & l_2 & l_3\\ + m_1 & m_2 & m_3 + \end{pmatrix}. + + Parameters + ---------- + jm1 : tuple of integers + (j_1 m_1) + jm2 : tuple of integers + (j_2 m_2) + jm3 : tuple of integers + (j_3 m_3) + + Returns + ------- + three_j_sym : scalar + Three-j symbol. + + """ j1, m1 = jm1 j2, m2 = jm2 j3, m3 = jm3 @@ -210,9 +454,9 @@ def three_j_symbol(jm1, jm2, jm3): j3 < abs(j1-j2)): return .0 - result = -1.0 if (j1-j2-m3) % 2 else 1.0 - result *= sqrt(fact(j1+j2-j3)*fact(j1-j2+j3)*fact(-j1+j2+j3)/fact(j1+j2+j3+1)) - result *= sqrt(fact(j1-m1)*fact(j1+m1)*fact(j2-m2)*fact(j2+m2)*fact(j3-m3)*fact(j3+m3)) + three_j_sym = -1.0 if (j1-j2-m3) % 2 else 1.0 + three_j_sym *= sqrt(fact(j1+j2-j3)*fact(j1-j2+j3)*fact(-j1+j2+j3)/fact(j1+j2+j3+1)) + three_j_sym *= sqrt(fact(j1-m1)*fact(j1+m1)*fact(j2-m2)*fact(j2+m2)*fact(j3-m3)*fact(j3+m3)) t_min = max(j2-j3-m1,j1-j3+m2,0) t_max = min(j1-m1,j2+m2,j1+j2-j3) @@ -221,12 +465,37 @@ def three_j_symbol(jm1, jm2, jm3): for t in range(t_min,t_max+1): t_sum += (-1.0 if t % 2 else 1.0)/(fact(t)*fact(j3-j2+m1+t)*fact(j3-j1-m2+t)*fact(j1+j2-j3-t)*fact(j1-m1-t)*fact(j2+m2-t)) - result *= t_sum - return result + three_j_sym *= t_sum + return three_j_sym # Clebsch-Gordan coefficients # < j1 m1 j2 m2 | j3 m3 > = (-1)^{j1-j2+m3} \sqrt{2j3+1} ((j1 m1) (j2 m2) (j3 -m3)) def clebsch_gordan(jm1, jm2, jm3): + r""" + Calculate the Clebsh-Gordan coefficient + + .. math:: + \langle j_1 m_1 j_2 m_2 | j_3 m_3 \rangle = (-1)^{j_1-j_2+m_3} \sqrt{2 j_3 + 1} + \begin{pmatrix} + j_1 & j_2 & j_3\\ + m_1 & m_2 & -m_3 + \end{pmatrix}. + + Parameters + ---------- + jm1 : tuple of integers + (j_1 m_1) + jm2 : tuple of integers + (j_2 m_2) + jm3 : tuple of integers + (j_3 m_3) + + Returns + ------- + cgcoeff : scalar + Clebsh-Gordan coefficient. + + """ norm = sqrt(2*jm3[0]+1)*(-1 if jm1[0]-jm2[0]+jm3[1] % 2 else 1) return norm*three_j_symbol(jm1,jm2,(jm3[0],-jm3[1])) @@ -236,6 +505,28 @@ def clebsch_gordan(jm1, jm2, jm3): # columns 2 and 3 for 2nd dim, # columns 0,1,2 and 3 for 3rd dim. def subarray(a,idxlist,n=None) : + r""" + Extract a subarray from a matrix-like object. + + Parameters + ---------- + a : matrix or array + idxlist : list of tuples + Columns that need to be extracted for each dimension. + + Returns + ------- + subarray : matrix or array + + Examples + -------- + idxlist = [(0),(2,3),(0,1,2,3)] gives + + - column 0 for 1st dim, + - columns 2 and 3 for 2nd dim, + - columns 0, 1, 2 and 3 for 3rd dim. + + """ if n is None: n = len(a.shape)-1 sa = a[tuple(slice(x) for x in a.shape[:n]) + (idxlist[n],)] return subarray(sa,idxlist, n-1) if n > 0 else sa diff --git a/python/converters/converter_tools.py b/python/converters/converter_tools.py index ff5633bd..735ff4cf 100644 --- a/python/converters/converter_tools.py +++ b/python/converters/converter_tools.py @@ -25,7 +25,22 @@ import pytriqs.utility.mpi as mpi class ConverterTools: def read_fortran_file(self,filename,to_replace): - """ Returns a generator that yields all numbers in the Fortran file as float, one by one""" + """ + Returns a generator that yields all numbers in the Fortran file as float, with possible replacements. + + Parameters + ---------- + filename : string + Name of Fortran-produced file. + to_replace : dict of str:str + Dictionary defining old_char:new_char. + + Yields + ------ + string + The next number in file. + + """ import os.path import string if not(os.path.exists(filename)) : raise IOError, "File %s does not exist."%filename @@ -35,9 +50,15 @@ class ConverterTools: def repack(self): - """Calls the h5repack routine, in order to reduce the file size of the hdf5 archive. - Should only be used BEFORE the first invokation of HDFArchive in the program, otherwise - the hdf5 linking is broken!!!""" + """ + Calls the h5repack routine in order to reduce the file size of the hdf5 archive. + + Note + ---- + Should only be used before the first invokation of HDFArchive in the program, + otherwise the hdf5 linking will be broken. + + """ import subprocess @@ -53,12 +74,29 @@ class ConverterTools: def det_shell_equivalence(self,corr_shells): """ - The number of inequivalent shells is determined from corr_shells, and a mapping is given as - corr_to_inequiv(i_corr_shells) = i_inequiv_shells - inequiv_to_corr(i_inequiv_shells) = i_corr_shells - in order to put the self energies to all equivalent shells, and for extracting Gloc - """ + Determine the equivalence of correlated shells. + Parameters + ---------- + corr_shells : list of dicts + See documentation of necessary hdf5 elements. + + Returns + ------- + n_inequiv_shells : integer + Number of inequivalent shells. + corr_to_inequiv : list + Mapping between correlated shell index and inequivalent shell index. + corr_to_inequiv(i_corr_shells) = i_inequiv_shells + inequiv_to_corr : list + Mapping between inequivalent shell index and correlated shell index. + inequiv_to_corr(i_inequiv_shells) = i_corr_shells + + Note + ---- + This is needed to set the self energies of all equivalent shells and to extract G_loc. + + """ corr_to_inequiv = [0 for i in range(len(corr_shells))] inequiv_to_corr = [0] n_inequiv_shells = 1 diff --git a/python/converters/hk_converter.py b/python/converters/hk_converter.py index 26269993..dc372c65 100644 --- a/python/converters/hk_converter.py +++ b/python/converters/hk_converter.py @@ -32,14 +32,30 @@ class HkConverter(ConverterTools): Conversion from general H(k) file to an hdf5 file that can be used as input for the SumKDFT class. """ - def __init__(self, hk_filename, hdf_filename, dft_subgrp = 'dft_input', symmcorr_subgrp = 'dft_symmcorr_input', repacking = False): + def __init__(self, filename, hdf_filename = None, dft_subgrp = 'dft_input', symmcorr_subgrp = 'dft_symmcorr_input', repacking = False): """ - Init of the class. + Initialise the class. + + Parameters + ---------- + filename : string + Name of file containing the H(k) and other relevant data. + hdf_filename : string, optional + Name of hdf5 archive to be created. + dft_subgrp : string, optional + Name of subgroup storing necessary DFT data. + symmcorr_subgrp : string, optional + Name of subgroup storing correlated-shell symmetry data. + The group is actually empty; it is just included for compatibility. + repacking : boolean, optional + Does the hdf5 archive need to be repacked to save space? + """ - assert type(hk_filename)==StringType,"HkConverter: hk_filename must be a filename." + assert type(filename)==StringType,"HkConverter: filename must be a filename." + if hdf_filename is None: hdf_filename = filename+'.h5' self.hdf_file = hdf_filename - self.dft_file = hk_filename + self.dft_file = filename self.dft_subgrp = dft_subgrp self.symmcorr_subgrp = symmcorr_subgrp self.fortran_to_replace = {'D':'E', '(':' ', ')':' ', ',':' '} @@ -52,7 +68,17 @@ class HkConverter(ConverterTools): def convert_dft_input(self, first_real_part_matrix = True, only_upper_triangle = False, weights_in_file = False): """ - Reads the input files, and stores the data in the HDFfile + Reads the appropriate files and stores the data for the dft_subgrp in the hdf5 archive. + + Parameters + ---------- + first_real_part_matrix : boolean, optional + Should all the real components for given k be read in first, followed by the imaginary parts? + only_upper_triangle : boolean, optional + Should only the upper triangular part of H(k) be read in? + weights_in_file : boolean, optional + Are the k-point weights to be read in? + """ # Read and write only on the master node diff --git a/python/converters/wien2k_converter.py b/python/converters/wien2k_converter.py index a5e9af2d..258fd133 100644 --- a/python/converters/wien2k_converter.py +++ b/python/converters/wien2k_converter.py @@ -37,10 +37,34 @@ class Wien2kConverter(ConverterTools): bands_subgrp = 'dft_bands_input', misc_subgrp = 'dft_misc_input', transp_subgrp = 'dft_transp_input', repacking = False): """ - Init of the class. Variable filename gives the root of all filenames, e.g. case.ctqmcout, case.h5, and so on. + Initialise the class. + + Parameters + ---------- + filename : string + Base name of DFT files. + hdf_filename : string, optional + Name of hdf5 archive to be created. + dft_subgrp : string, optional + Name of subgroup storing necessary DFT data. + symmcorr_subgrp : string, optional + Name of subgroup storing correlated-shell symmetry data. + parproj_subgrp : string, optional + Name of subgroup storing partial projector data. + symmpar_subgrp : string, optional + Name of subgroup storing partial-projector symmetry data. + bands_subgrp : string, optional + Name of subgroup storing band data. + misc_subgrp : string, optional + Name of subgroup storing miscellaneous DFT data. + transp_subgrp : string, optional + Name of subgroup storing transport data. + repacking : boolean, optional + Does the hdf5 archive need to be repacked to save space? + """ - assert type(filename)==StringType, "Please provide the DFT files' base name as a string." + assert type(filename)==StringType, "Wien2kConverter: Please provide the DFT files' base name as a string." if hdf_filename is None: hdf_filename = filename+'.h5' self.hdf_file = hdf_filename self.dft_file = filename+'.ctqmcout' @@ -68,7 +92,14 @@ class Wien2kConverter(ConverterTools): def convert_dft_input(self): """ - Reads the input files, and stores the data in the HDFfile + Reads the appropriate files and stores the data for the + + - dft_subgrp + - symmcorr_subgrp + - misc_subgrp + + in the hdf5 archive. + """ # Read and write only on the master node @@ -210,14 +241,18 @@ class Wien2kConverter(ConverterTools): # Symmetries are used, so now convert symmetry information for *correlated* orbitals: self.convert_symmetry_input(orbits=self.corr_shells,symm_file=self.symmcorr_file,symm_subgrp=self.symmcorr_subgrp,SO=self.SO,SP=self.SP) - self.convert_misc_input(bandwin_file=self.bandwin_file,struct_file=self.struct_file,outputs_file=self.outputs_file, - misc_subgrp=self.misc_subgrp,SO=self.SO,SP=self.SP,n_k=self.n_k) + self.convert_misc_input() def convert_parproj_input(self): """ - Reads the input for the partial charges projectors from case.parproj, and stores it in the symmpar_subgrp - group in the HDF5. + Reads the appropriate files and stores the data for the + + - parproj_subgrp + - symmpar_subgrp + + in the hdf5 archive. + """ if not (mpi.is_master_node()): return @@ -292,12 +327,12 @@ class Wien2kConverter(ConverterTools): def convert_bands_input(self): """ - Converts the input for momentum resolved spectral functions, and stores it in bands_subgrp in the - HDF5. + Reads the appropriate files and stores the data for the bands_subgrp in the hdf5 archive. + """ if not (mpi.is_master_node()): return - mpi.report("Reading bands input from %s..."%self.band_file) + mpi.report("Reading input from %s..."%self.band_file) R = ConverterTools.read_fortran_file(self,self.band_file,self.fortran_to_replace) try: @@ -372,14 +407,29 @@ class Wien2kConverter(ConverterTools): del ar - def convert_misc_input(self, bandwin_file, struct_file, outputs_file, misc_subgrp, SO, SP, n_k): + def convert_misc_input(self): """ - Reads input for the band window from bandwin_file, which is case.oubwin, - structure from struct_file, which is case.struct, - symmetries from outputs_file, which is case.outputs. + Reads additional information on: + + - the band window from :file:`case.oubwin`, + - lattice parameters from :file:`case.struct`, + - symmetries from :file:`case.outputs`, + + if those Wien2k files are present and stores the data in the hdf5 archive. + This function is automatically called by :meth:`convert_dft_input `. + """ if not (mpi.is_master_node()): return + + # Check if SP, SO and n_k are already in h5 + ar = HDFArchive(self.hdf_file, 'a') + if not (self.dft_subgrp in ar): raise IOError, "convert_misc_input: No %s subgroup in hdf file found! Call convert_dft_input first." %self.dft_subgrp + SP = ar[self.dft_subgrp]['SP'] + SO = ar[self.dft_subgrp]['SO'] + n_k = ar[self.dft_subgrp]['n_k'] + del ar + things_to_save = [] # Read relevant data from .oubwin/up/dn files @@ -392,7 +442,7 @@ class Wien2kConverter(ConverterTools): elif SP == 1: files = [self.bandwin_file+'up', self.bandwin_file+'dn'] else: # SO and SP can't both be 1 - assert 0, "convert_transport_input: Reding oubwin error! Check SP and SO!" + assert 0, "convert_misc_input: Reding oubwin error! Check SP and SO!" band_window = [numpy.zeros((n_k, 2), dtype=int) for isp in range(SP + 1 - SO)] for isp, f in enumerate(files): @@ -463,21 +513,26 @@ class Wien2kConverter(ConverterTools): # Save it to the HDF: ar=HDFArchive(self.hdf_file,'a') - if not (misc_subgrp in ar): ar.create_group(misc_subgrp) - for it in things_to_save: ar[misc_subgrp][it] = locals()[it] + if not (self.misc_subgrp in ar): ar.create_group(self.misc_subgrp) + for it in things_to_save: ar[self.misc_subgrp][it] = locals()[it] del ar def convert_transport_input(self): """ - Reads the input files necessary for transport calculations - and stores the data in the HDFfile + Reads the necessary information for transport calculations on: + + - the optical band window and the velocity matrix elements from :file:`case.pmat` + + and stores the data in the hdf5 archive. + """ + if not (mpi.is_master_node()): return # Check if SP, SO and n_k are already in h5 ar = HDFArchive(self.hdf_file, 'a') - if not (self.dft_subgrp in ar): raise IOError, "convert_transport_input: No %s subgroup in hdf file found! Call convert_dmft_input first." %self.dft_subgrp + if not (self.dft_subgrp in ar): raise IOError, "convert_transport_input: No %s subgroup in hdf file found! Call convert_dft_input first." %self.dft_subgrp SP = ar[self.dft_subgrp]['SP'] SO = ar[self.dft_subgrp]['SO'] n_k = ar[self.dft_subgrp]['n_k'] @@ -535,7 +590,23 @@ class Wien2kConverter(ConverterTools): def convert_symmetry_input(self, orbits, symm_file, symm_subgrp, SO, SP): """ - Reads input for the symmetrisations from symm_file, which is case.sympar or case.symqmc. + Reads and stores symmetrisation data from symm_file, which can be is case.sympar or case.symqmc. + + Parameters + ---------- + orbits : list of dicts + This is either shells or corr_shells depending on whether the symmetry + information is for correlated shells or partial projectors. + symm_file : string + Name of the file containing symmetry data. + This is case.symqmc for correlated shells and case.sympar for partial projectors. + symm_subgrp : string, optional + Name of subgroup storing symmetry data. + SO : integer + Is spin-orbit coupling considered? + SP : integer + Is the system spin-polarised? + """ if not (mpi.is_master_node()): return diff --git a/python/sumk_dft.py b/python/sumk_dft.py index 8a0597c7..fd841cea 100644 --- a/python/sumk_dft.py +++ b/python/sumk_dft.py @@ -36,12 +36,43 @@ class SumkDFT: dft_data = 'dft_input', symmcorr_data = 'dft_symmcorr_input', parproj_data = 'dft_parproj_input', symmpar_data = 'dft_symmpar_input', bands_data = 'dft_bands_input', transp_data = 'dft_transp_input', misc_data = 'dft_misc_input'): - """ - Initialises the class from data previously stored into an HDF5 + r""" + Initialises the class from data previously stored into an hdf5 archive. + + Parameters + ---------- + hdf_file : string + Name of hdf5 containing the data. + h_field : scalar, optional + The value of magnetic field to add to the DFT Hamiltonian. + The contribution -h_field*sigma is added to diagonal elements of the Hamiltonian. + It cannot be used with the spin-orbit coupling on; namely h_field is set to 0 if self.SO=True. + use_dft_blocks : boolean, optional + If True, the local Green's function matrix for each spin is divided into smaller blocks + with the block structure determined from the DFT density matrix of the corresponding correlated shell. + dft_data : string, optional + Name of hdf5 subgroup in which DFT data for projector and lattice Green's function construction are stored. + symmcorr_data : string, optional + Name of hdf5 subgroup in which DFT data on symmetries of correlated shells + (symmetry operations, permutaion matrices etc.) are stored. + parproj_data : string, optional + Name of hdf5 subgroup in which DFT data on non-normalized projectors for non-correlated + states (used in the partial density of states calculations) are stored. + symmpar_data : string, optional + Name of hdf5 subgroup in which DFT data on symmetries of the non-normalized projectors + are stored. + bands_data : string, optional + Name of hdf5 subgroup in which DFT data necessary for band-structure/k-resolved spectral + function calculations (projectors, DFT Hamiltonian for a chosen path in the Brillouin zone etc.) + are stored. + transp_data : string, optional + Name of hdf5 subgroup in which DFT data necessary for transport calculations are stored. + misc_data : string, optional + Name of hdf5 subgroup in which miscellaneous DFT data are stored. """ if not type(hdf_file) == StringType: - mpi.report("Give a string for the HDF5 filename to read the input!") + mpi.report("Give a string for the hdf5 filename to read the input!") else: self.hdf_file = hdf_file self.dft_data = dft_data @@ -99,14 +130,28 @@ class SumkDFT: # Analyse the block structure and determine the smallest gf_struct blocks and maps, if desired if use_dft_blocks: self.analyse_block_structure() - ################ -# HDF5 FUNCTIONS +# hdf5 FUNCTIONS ################ def read_input_from_hdf(self, subgrp, things_to_read): - """ - Reads data from the HDF file + r""" + Reads data from the HDF file. Prints a warning if a requested dataset is not found. + + Parameters + ---------- + subgrp : string + Name of hdf5 file subgroup from which the data are to be read. + things_to_read : list of strings + List of datasets to be read from the hdf5 file. + + Returns + ------- + subgroup_present : boolean + Is the subgrp is present in hdf5 file? + value_read : boolean + Did the reading of requested datasets succeed? + """ value_read = True @@ -126,7 +171,7 @@ class SumkDFT: mpi.report("Loading %s failed!"%it) value_read = False else: - if (len(things_to_read) != 0): mpi.report("Loading failed: No %s subgroup in HDF5!"%subgrp) + if (len(things_to_read) != 0): mpi.report("Loading failed: No %s subgroup in hdf5!"%subgrp) subgroup_present = False value_read = False del ar @@ -139,7 +184,17 @@ class SumkDFT: def save(self, things_to_save, subgrp='user_data'): - """Saves given quantities into the subgroup ('user_data' by default) of the HDF5 archive""" + + r""" + Saves data from a list into the HDF file. Prints a warning if a requested data is not found in SumkDFT object. + + Parameters + ---------- + things_to_save : list of strings + List of datasets to be saved into the hdf5 file. + subgrp : string, optional + Name of hdf5 file subgroup in which the data are to be stored. + """ if not (mpi.is_master_node()): return # do nothing on nodes ar = HDFArchive(self.hdf_file,'a') @@ -153,7 +208,21 @@ class SumkDFT: def load(self, things_to_load, subgrp='user_data'): - """Loads given quantities from the subgroup ('user_data' by default) of the HDF5 archive""" + r""" + Loads user data from the HDF file. Raises an exeption if a requested dataset is not found. + + Parameters + ---------- + things_to_read : list of strings + List of datasets to be read from the hdf5 file. + subgrp : string, optional + Name of hdf5 file subgroup from which the data are to be read. + + Returns + ------- + list_to_return : list + A list containing data read from hdf5. + """ if not (mpi.is_master_node()): return # do nothing on nodes ar = HDFArchive(self.hdf_file,'a') @@ -172,7 +241,38 @@ class SumkDFT: ################ def downfold(self,ik,ish,bname,gf_to_downfold,gf_inp,shells='corr',ir=None): - """Downfolding a block of the Greens function""" + r""" + Downfolds a block of the Green's function for a given shell and k-point using the corresponding projector matrices. + + Parameters + ---------- + ik : integer + k-point index for which the downfolding is to be done. + ish : integer + Shell index of GF to be downfolded. + + - if shells='corr': ish labels all correlated shells (equivalent or not) + - if shells='all': ish labels only representative (inequivalent) non-correlated shells + + bname : string + Block name of the target block of the lattice Green's function. + gf_to_downfold : Gf + Block of the Green's function that is to be downfolded. + gf_inp : Gf + FIXME + shells : string, optional + + - if shells='corr': orthonormalized projectors for correlated shells are used for the downfolding. + - if shells='all': non-normalized projectors for all included shells are used for the downfolding. + + ir : integer, optional + Index of equivalent site in the non-correlated shell 'ish', only used if shells='all'. + + Returns + ------- + gf_downfolded : Gf + Downfolded block of the lattice Green's function. + """ gf_downfolded = gf_inp.copy() isp = self.spin_names_to_ind[self.SO][bname] # get spin index for proj. matrices @@ -191,7 +291,38 @@ class SumkDFT: def upfold(self,ik,ish,bname,gf_to_upfold,gf_inp,shells='corr',ir=None): - """Upfolding a block of the Greens function""" + r""" + Upfolds a block of the Green's function for a given shell and k-point using the corresponding projector matrices. + + Parameters + ---------- + ik : integer + k-point index for which the upfolding is to be done. + ish : integer + Shell index of GF to be upfolded. + + - if shells='corr': ish labels all correlated shells (equivalent or not) + - if shells='all': ish labels only representative (inequivalent) non-correlated shells + + bname : string + Block name of the target block of the lattice Green's function. + gf_to_upfold : Gf + Block of the Green's function that is to be upfolded. + gf_inp : Gf + FIXME + shells : string, optional + + - if shells='corr': orthonormalized projectors for correlated shells are used for the upfolding. + - if shells='all': non-normalized projectors for all included shells are used for the upfolding. + + ir : integer, optional + Index of equivalent site in the non-correlated shell 'ish', only used if shells='all'. + + Returns + ------- + gf_upfolded : Gf + Upfolded block of the lattice Green's function. + """ gf_upfolded = gf_inp.copy() isp = self.spin_names_to_ind[self.SO][bname] # get spin index for proj. matrices @@ -210,8 +341,35 @@ class SumkDFT: def rotloc(self,ish,gf_to_rotate,direction,shells='corr'): - """Local <-> Global rotation of a GF block. - direction: 'toLocal' / 'toGlobal' """ + r""" + Rotates a block of the local Green's function from the local frame to the global frame and vice versa. + + Parameters + ---------- + ish : integer + Shell index of GF to be upfolded. + + - if shells='corr': ish labels all correlated shells (equivalent or not) + - if shells='all': ish labels only representative (inequivalent) non-correlated shells + + gf_to_rotate : Gf + Block of the Green's function that is to be rotated. + direction : string + The direction of rotation can be either + + - 'toLocal' : global -> local transformation, + - 'toGlobal' : local -> global transformation. + + shells : string, optional + + - if shells='corr': the rotation matrix for the correlated shell 'ish' is used, + - if shells='all': the rotation matrix for the generic (non-correlated) shell 'ish' is used. + + Returns + ------- + gf_rotated : Gf + Rotated block of the local Green's function. + """ assert ((direction == 'toLocal') or (direction == 'toGlobal')),"rotloc: Give direction 'toLocal' or 'toGlobal'." gf_rotated = gf_to_rotate.copy() @@ -242,9 +400,42 @@ class SumkDFT: def lattice_gf(self, ik, mu=None, iw_or_w="iw", beta=40, broadening=None, mesh=None, with_Sigma=True, with_dc=True): - """Calculates the lattice Green function from the DFT hopping and the self energy at k-point number ik - and chemical potential mu.""" + r""" + Calculates the lattice Green function for a given k-point from the DFT Hamiltonian and the self energy. + Parameters + ---------- + ik : integer + k-point index. + mu : real, optional + Chemical potential for which the Green's function is to be calculated. + If not provided, self.chemical_potential is used for mu. + iw_or_w : string, optional + + - `iw_or_w` = 'iw' for a imaginary-frequency self-energy + - `iw_or_w` = 'w' for a real-frequency self-energy + + beta : real, optional + Inverse temperature. + broadening : real, optional + Imaginary shift for the axis along which the real-axis GF is calculated. + If not provided, broadening will be set to double of the distance between mesh points in 'mesh'. + mesh : list, optional + Data defining mesh on which the real-axis GF will be calculated, given in the form + (om_min,om_max,n_points), where om_min is the minimum omega, om_max is the maximum omega and n_points is the number of points. + with_Sigma : boolean, optional + If True the GF will be calculated with the self-energy stored in self.Sigmaimp_(w/iw), for real/Matsubara GF, respectively. + In this case the mesh is taken from the self.Sigma_imp object. + If with_Sigma=True but self.Sigmaimp_(w/iw) is not present, with_Sigma is reset to False. + with_dc : boolean, optional + if True and with_Sigma=True, the dc correction is substracted from the self-energy before it is included into GF. + + Returns + ------- + G_latt : BlockGf + Lattice Green's function. + + """ if mu is None: mu = self.chemical_potential ntoi = self.spin_names_to_ind[self.SO] spn = self.spin_block_names[self.SO] @@ -319,7 +510,16 @@ class SumkDFT: def put_Sigma(self, Sigma_imp): - """Sets the impurity self energies for inequivalent atoms into the class, respects the multiplicity of the atoms.""" + r""" + Inserts the impurity self-energies into the sumk_dft class. + + Parameters + ---------- + Sigma_imp : list of BlockGf (Green's function) objects + List containing impurity self-energy for all inequivalent correlated shells. + Self-energies for equivalent shells are then automatically set by this function. + The self-energies can be of the real or imaginary-frequency type. + """ assert isinstance(Sigma_imp,list), "put_Sigma: Sigma_imp has to be a list of Sigmas for the correlated shells, even if it is of length 1!" assert len(Sigma_imp) == self.n_inequiv_shells, "put_Sigma: give exactly one Sigma for each inequivalent corr. shell!" @@ -357,10 +557,24 @@ class SumkDFT: def extract_G_loc(self, mu=None, with_Sigma=True, with_dc=True): - """ - Extracts the local downfolded Green function at the chemical potential of the class. - At the end, the local G is rotated from the global coordinate system to the local system. - if with_Sigma = False: Sigma is not included => non-interacting local GF + r""" + Extracts the local downfolded Green function by the Brillouin-zone integration of the lattice Green's function. + + Parameters + ---------- + mu : real, optional + Input chemical potential. If not provided the value of self.chemical_potential is used as mu. + with_Sigma : boolean, optional + If True then the local GF is calculated with the self-energy self.Sigma_imp. + with_dc : boolean, optional + If True then the double-counting correction is subtracted from the self-energy in calculating the GF. + + Returns + ------- + G_loc_inequiv : list of BlockGf (Green's function) objects + List of the local Green's functions for all inequivalent correlated shells, + rotated into the corresponding local frames. + """ if mu is None: mu = self.chemical_potential @@ -409,7 +623,24 @@ class SumkDFT: def analyse_block_structure(self, threshold = 0.00001, include_shells = None, dm = None): - """ Determines the Green's function block structure from simple point integration.""" + r""" + Determines the block structure of local Green's functions by analysing the structure of + the corresponding density matrices. The resulting block structures for correlated shells + are stored in self.gf_struct_solver list. + + Parameters + ---------- + threshold : real, optional + If the difference between density matrix elements is below threshold, + they are considered to be equal. + include_shells : list of integers, optional + List of correlated shells to be analysed. + If include_shells is not provided all correlated shells will be analysed. + dm : list of dict, optional + List of density matrices from which block stuctures are to be analysed. + Each density matrix is a dict {block names: 2d numpy arrays}. + If not provided, dm will be calculated from the DFT Hamiltonian by a simple-point BZ integration. + """ self.gf_struct_solver = [ {} for ish in range(self.n_inequiv_shells) ] self.sumk_to_solver = [ {} for ish in range(self.n_inequiv_shells) ] @@ -493,11 +724,24 @@ class SumkDFT: def density_matrix(self, method = 'using_gf', beta = 40.0): - """Calculate density matrices in one of two ways: - if 'using_gf': First get lattice gf (g_loc is not set up), then density matrix. - It is useful for Hubbard I, and very quick. - No assumption on the hopping structure is made (ie diagonal or not). - if 'using_point_integration': Only works for diagonal hopping matrix (true in wien2k). + """Calculate density matrices in one of two ways. + + Parameters + ---------- + method : string, optional + + - if 'using_gf': First get lattice gf (g_loc is not set up), then density matrix. + It is useful for Hubbard I, and very quick. + No assumption on the hopping structure is made (ie diagonal or not). + - if 'using_point_integration': Only works for diagonal hopping matrix (true in wien2k). + + beta : float, optional + Inverse temperature. + + Returns + ------- + dens_mat : list of dicts + Density matrix for each spin in each correlated shell. """ dens_mat = [ {} for icrsh in range(self.n_corr_shells)] for icrsh in range(self.n_corr_shells): @@ -569,7 +813,28 @@ class SumkDFT: # For simple dft input, get crystal field splittings. def eff_atomic_levels(self): - """Calculates the effective atomic levels needed as input for the Hubbard I Solver.""" + r""" + Calculates the effective local Hamiltonian required as an input for + the Hubbard I Solver. + The local Hamiltonian (effective atomic levels) is calculated by + projecting the on-site Bloch Hamiltonian: + + .. math:: H^{loc}_{m m'} = \sum_{k} P_{m \nu}(k) H_{\nu\nu'}(k) P^{*}_{\nu' m'}(k), + + where + + .. math:: H_{\nu\nu'}(k) = [\epsilon_{\nu k} - h_{z} \sigma_{z}] \delta_{\nu\nu'}. + + Parameters + ---------- + None + + Returns + ------- + eff_atlevels : gf_struct_solver like + Effective local Hamiltonian :math:`H^{loc}_{m m'}` for each correlated shell. + + """ # define matrices for inequivalent shells: eff_atlevels = [ {} for ish in range(self.n_inequiv_shells) ] @@ -617,8 +882,14 @@ class SumkDFT: def init_dc(self): - """ Initialise the double counting terms to have the correct shape.""" + r""" + Initializes the double counting terms. + Parameters + ---------- + None + + """ self.dc_imp = [ {} for icrsh in range(self.n_corr_shells)] for icrsh in range(self.n_corr_shells): dim = self.corr_shells[icrsh]['dim'] @@ -628,20 +899,61 @@ class SumkDFT: def set_dc(self,dc_imp,dc_energ): - """Sets double counting terms dc_imp and dc_energ to known values.""" + r""" + Sets double counting corrections to given values. + + Parameters + ---------- + dc_imp : gf_struct_sumk like + Double-counting self-energy term. + dc_energ : list of floats + Double-counting energy corrections for each correlated shell. + + """ self.dc_imp = dc_imp self.dc_energ = dc_energ def calc_dc(self,dens_mat,orb=0,U_interact=None,J_hund=None,use_dc_formula=0,use_dc_value=None): - """Sets the double counting corrections in the correct form for inequiv orbital orb: - 1) either using U_interact, J_hund and - use_dc_formula = 0: fully-localised limit (FLL), - use_dc_formula = 1: Held's formula, - use_dc_formula = 2: around mean-field (AMF). - 2) or using a given dc value in use_dc_value. - Be sure that you are using the correct interaction Hamiltonian!""" + r""" + Calculates and sets the double counting corrections. + + If 'use_dc_value' is provided the double-counting term is uniformly initialized + with this constant and 'U_interact' and 'J_hund' are ignored. + + If 'use_dc_value' is None the correction is evaluated according to + one of the following formulae: + + * use_dc_formula = 0: fully-localised limit (FLL) + * use_dc_formula = 1: Held's formula, i.e. mean-field formula for the Kanamori + type of the interaction Hamiltonian + * use_dc_formula = 2: around mean-field (AMF) + + Note that FLL and AMF formulae were derived assuming a full Slater-type interaction + term and should be thus used accordingly. For the Kanamori-type interaction + one should use formula 1. + + The double-counting self-energy term is stored in `self.dc_imp` and the energy + correction in `self.dc_energ`. + + Parameters + ---------- + dens_mat : gf_struct_solver like + Density matrix for the specified correlated shell. + orb : int, optional + Index of an inequivalent shell. + U_interact : float, optional + Value of interaction parameter `U`. + J_hund : float, optional + Value of interaction parameter `J`. + use_dc_formula : int, optional + Type of double-counting correction (see description). + use_dc_value : float, optional + Value of the double-counting correction. If specified + `U_interact`, `J_hund` and `use_dc_formula` are ignored. + + """ for icrsh in range(self.n_corr_shells): @@ -704,7 +1016,22 @@ class SumkDFT: def add_dc(self,iw_or_w="iw"): - """Substracts the double counting term from the impurity self energy.""" + r""" + Subtracts the double counting term from the impurity self energy. + + Parameters + ---------- + iw_or_w : string, optional + + - `iw_or_w` = 'iw' for a imaginary-frequency self-energy + - `iw_or_w` = 'w' for a real-frequency self-energy + + Returns + ------- + sigma_minus_dc : gf_struct_sumk like + Self-energy with a subtracted double-counting term. + + """ # Be careful: Sigma_imp is already in the global coordinate system!! sigma_minus_dc = [s.copy() for s in getattr(self,"Sigma_imp_"+iw_or_w)] @@ -718,7 +1045,21 @@ class SumkDFT: def symm_deg_gf(self,gf_to_symm,orb): - """Symmetrises a GF for the given degenerate shells self.deg_shells""" + r""" + Averages a GF over degenerate shells. + + Degenerate shells of an inequivalent correlated shell are defined by + `self.deg_shells`. This function enforces corresponding degeneracies + in the input GF. + + Parameters + ---------- + gf_to_symm : gf_struct_solver like + Input GF. + orb : int + Index of an inequivalent shell. + + """ for degsh in self.deg_shells[orb]: ss = gf_to_symm[degsh[0]].copy() @@ -729,14 +1070,41 @@ class SumkDFT: def total_density(self, mu=None, with_Sigma=True, with_dc=True): - """ - Calculates the total charge for the energy window for a given chemical potential mu. + r""" + Calculates the total charge within the energy window for a given chemical potential. + The chemical potential is either given by parameter `mu` or, if it is not specified, + taken from `self.chemical_potential`. + + The total charge is calculated from the trace of the GF in the Bloch basis. + By deafult, a full interacting GF is used. To use the non-interacting GF, set + parameter `with_Sigma = False`. + + The number of bands within the energy windows generally depends on `k`. The trace is + therefore calculated separately for each `k`-point. + Since in general n_orbitals depends on k, the calculation is done in the following order: - G_aa'(k,iw) -> n(k) = Tr G_aa'(k,iw) -> sum_k n_k + ..math:: n_{tot} = \sum_{k} n(k), + with + ..math:: n(k) = Tr G_{\nu\nu'}(k, i\omega_{n}). + + The calculation is done in the global coordinate system, if distinction is made between local/global. + + Parameters + ---------- + mu : float, optional + Input chemical potential. If not specified, `self.chemical_potential` is used instead. + with_Sigma : boolean, optional + If `True` the full interacing GF is evaluated, otherwise the self-energy is not + included and the charge would correspond to a non-interacting system. + with_dc : boolean, optional + Whether or not to subtract the double-counting term from the self-energy. + + Returns + ------- + dens : float + Total charge :math:`n_{tot}`. - The calculation is done in the global coordinate system, if distinction is made between local/global! """ - if mu is None: mu = self.chemical_potential dens = 0.0 ikarray = numpy.array(range(self.n_k)) @@ -751,18 +1119,36 @@ class SumkDFT: def set_mu(self,mu): - """Sets a new chemical potential""" + r""" + Sets a new chemical potential. + Parameters + ---------- + mu : float + New value of the chemical potential. + + """ self.chemical_potential = mu - def calc_mu(self, precision = 0.01): - """ - Searches for mu in order to give the desired charge - A desired precision can be specified in precision. - """ + def calc_mu(self, precision=0.01): + r""" + Searches for the chemical potential that gives the DFT total charge. + A simple bisection method is used. - F = lambda mu : self.total_density(mu = mu) + Parameters + ---------- + precision : float, optional + A desired precision of the resulting total charge. + + Returns + ------- + mu : float + Value of the chemical potential giving the DFT total charge + within specified precision. + + """ + F = lambda mu : self.total_density(mu=mu) density = self.density_required - self.charge_below self.chemical_potential = dichotomy.dichotomy(function = F, @@ -774,8 +1160,30 @@ class SumkDFT: return self.chemical_potential - def calc_density_correction(self,filename = 'dens_mat.dat'): - """ Calculates the density correction in order to feed it back to the DFT calculations.""" + def calc_density_correction(self, filename='dens_mat.dat'): + r""" + Calculates the charge density correction and stores it into a file. + + The charge density correction is needed for charge-self-consistent DFT+DMFT calculations. + It represents a density matrix of the interacting system defined in Bloch basis + and it is calculated from the sum over Matsubara frequecies of the full GF, + + ..math:: N_{\nu\nu'}(k) = \sum_{i\omega_{n}} G_{\nu\nu'}(k, i\omega_{n}) + + The density matrix for every `k`-point is stored into a file. + + Parameters + ---------- + filename : string + Name of the file to store the charge density correction. + + Returns + ------- + (deltaN, dens) : tuple + Returns a tuple containing the density matrix `deltaN` and + the corresponing total charge `dens`. + + """ assert type(filename) == StringType, "calc_density_correction: filename has to be a string!" diff --git a/python/sumk_dft_tools.py b/python/sumk_dft_tools.py index 19cad09a..6585a1df 100644 --- a/python/sumk_dft_tools.py +++ b/python/sumk_dft_tools.py @@ -27,13 +27,18 @@ from symmetry import * from sumk_dft import SumkDFT class SumkDFTTools(SumkDFT): - """Extends the SumkDFT class with some tools for analysing the data.""" + """ + Extends the SumkDFT class with some tools for analysing the data. + """ def __init__(self, hdf_file, h_field = 0.0, use_dft_blocks = False, dft_data = 'dft_input', symmcorr_data = 'dft_symmcorr_input', parproj_data = 'dft_parproj_input', symmpar_data = 'dft_symmpar_input', bands_data = 'dft_bands_input', transp_data = 'dft_transp_input', misc_data = 'dft_misc_input'): - + """ + Initialisation of the class. Parameters are exactly as for SumKDFT. + """ + SumkDFT.__init__(self, hdf_file=hdf_file, h_field=h_field, use_dft_blocks=use_dft_blocks, dft_data=dft_data, symmcorr_data=symmcorr_data, parproj_data=parproj_data, symmpar_data=symmpar_data, bands_data=bands_data, transp_data=transp_data, @@ -41,10 +46,37 @@ class SumkDFTTools(SumkDFT): def dos_wannier_basis(self, mu=None, broadening=None, mesh=None, with_Sigma=True, with_dc=True, save_to_file=True): - + """ + Calculates the density of states in the basis of the Wannier functions. + + Parameters + ---------- + mu : double, optional + Chemical potential, overrides the one stored in the hdf5 archive. + broadening : double, optional + Lorentzian broadening of the spectra. If not given, standard value of lattice_gf is used. + mesh : real frequency MeshType, optional + Omega mesh for the real-frequency Green's function. Given as parameter to lattice_gf. + with_Sigma : boolean, optional + If True, the self energy is used for the calculation. If false, the DOS is calculated without self energy. + with_dc : boolean, optional + If True the double counting correction is used. + save_to_file : boolean, optional + If True, text files with the calculated data will be created. + + Returns + ------- + DOS : Dict of numpy arrays + Contains the full density of states. + DOSproj : Dict of numpy arrays + DOS projected to atoms. + DOSproj_orb : Dict of numpy arrays + DOS projected to atoms and resolved into orbital contributions. + """ + if (mesh is None) and (not with_Sigma): raise ValueError, "lattice_gf: Give the mesh=(om_min,om_max,n_points) for the lattice GfReFreq." - if mesh is None: + if mesh is None: om_mesh = [x.real for x in self.Sigma_imp_w[0].mesh] om_min = om_mesh[0] om_max = om_mesh[-1] @@ -130,7 +162,36 @@ class SumkDFTTools(SumkDFT): def dos_parproj_basis(self, mu=None, broadening=None, mesh=None, with_Sigma=True, with_dc=True, save_to_file=True): - """Calculates the orbitally-resolved DOS""" + """ + Calculates the orbitally-resolved DOS. + Different to dos_Wannier_basis is that here we calculate projections also to non-Wannier projectors, in the + flavour of Wien2k QTL calculatuions. + + Parameters + ---------- + mu : double, optional + Chemical potential, overrides the one stored in the hdf5 archive. + broadening : double, optional + Lorentzian broadening of the spectra. If not given, standard value of lattice_gf is used. + mesh : real frequency MeshType, optional + Omega mesh for the real-frequency Green's function. Given as parameter to lattice_gf. + with_Sigma : boolean, optional + If True, the self energy is used for the calculation. If false, the DOS is calculated without self energy. + with_dc : boolean, optional + If True the double counting correction is used. + save_to_file : boolean, optional + If True, text files with the calculated data will be created. + + Returns + ------- + DOS : Dict of numpy arrays + Contains the full density of states. + DOSproj : Dict of numpy arrays + DOS projected to atoms. + DOSproj_orb : Dict of numpy arrays + DOS projected to atoms and resolved into orbital contributions. + """ + things_to_read = ['n_parproj','proj_mat_all','rot_mat_all','rot_mat_all_time_inv'] value_read = self.read_input_from_hdf(subgrp=self.parproj_data,things_to_read = things_to_read) @@ -228,7 +289,30 @@ class SumkDFTTools(SumkDFT): def spaghettis(self,broadening=None,plot_shift=0.0,plot_range=None,ishell=None,mu=None,save_to_file='Akw_'): - """ Calculates the correlated band structure with a real-frequency self energy.""" + """ + Calculates the correlated band structure using a real-frequency self energy. + + Parameters + ---------- + mu : double, optional + Chemical potential, overrides the one stored in the hdf5 archive. + broadening : double, optional + Lorentzian broadening of the spectra. If not given, standard value of lattice_gf is used. + plot_shift : double, optional + Offset for each A(k,w) for stacked plotting of spectra. + plot_range : list of double, optional + Sets the energy window for plotting to (plot_range[0],plot_range[1]). If not provided, the energy mesh of the self energy is used. + ishell : integer, optional + Contains the index of the shell on which the spectral function is projected. If ishell=None, the total spectrum without projection is calculated. + save_to_file : string, optional + Filename where the spectra are stored. + + Returns + ------- + Akw : Dict of numpy arrays + Data as it is also written to the files. + """ + assert hasattr(self,"Sigma_imp_w"), "spaghettis: Set Sigma_imp_w first." things_to_read = ['n_k','n_orbitals','proj_mat','hopping','n_parproj','proj_mat_all'] @@ -322,9 +406,29 @@ class SumkDFTTools(SumkDFT): return Akw def partial_charges(self,beta=40,mu=None,with_Sigma=True,with_dc=True): - """Calculates the orbitally-resolved density matrix for all the orbitals considered in the input. - The theta-projectors are used, hence case.parproj data is necessary""" - + """ + Calculates the orbitally-resolved density matrix for all the orbitals considered in the input, consistent with + the definition of Wien2k. Hence, (possibly non-orthonormal) projectors have to be provided in the partial projectors subgroup of + the hdf5 archive. + + Parameters + ---------- + + with_Sigma : boolean, optional + If True, the self energy is used for the calculation. If false, partial charges are calculated without self-energy correction. + beta : double, optional + In case the self-energy correction is not used, the inverse temperature where the calculation should be done has to be given here. + mu : double, optional + Chemical potential, overrides the one stored in the hdf5 archive. + with_dc : boolean, optional + If True the double counting correction is used. + + Returns + ------- + dens_mat : list of numpy array + A list of density matrices projected to all shells provided in the input. + """ + things_to_read = ['dens_mat_below','n_parproj','proj_mat_all','rot_mat_all','rot_mat_all_time_inv'] value_read = self.read_input_from_hdf(subgrp=self.parproj_data,things_to_read = things_to_read) if not value_read: return value_read @@ -387,7 +491,10 @@ class SumkDFTTools(SumkDFT): def print_hamiltonian(self): - """ Print Hamiltonian for checks.""" + """ + Prints the Kohn-Sham Hamiltonian to the text files hamup.dat and hamdn.dat (no spin orbit-coupling), or to ham.dat (with spin-orbit coupling). + """ + if self.SP == 1 and self.SO == 0: f1 = open('hamup.dat','w') f2 = open('hamdn.dat','w') @@ -412,8 +519,8 @@ class SumkDFTTools(SumkDFT): # ----------------- transport ----------------------- def read_transport_input_from_hdf(self): - """ - Reads the data for transport calculations from the HDF file + r""" + Reads the data for transport calculations from the hdf5 archive. """ thingstoread = ['band_window_optics','velocities_k'] self.read_input_from_hdf(subgrp=self.transp_data,things_to_read = thingstoread) @@ -422,31 +529,71 @@ class SumkDFTTools(SumkDFT): def cellvolume(self, lattice_type, lattice_constants, latticeangle): + r""" + Determines the conventional und primitive unit cell volumes. + + Parameters + ---------- + lattice_type : string + Lattice type according to the Wien2k convention (P, F, B, R, H, CXY, CYZ, CXZ). + lattice_constants : list of double + Lattice constants (a, b, c). + lattice angles : list of double + Lattice angles (:math:`\alpha, \beta, \gamma`). + + Returns + ------- + vol_c : double + Conventional unit cell volume. + vol_p : double + Primitive unit cell volume. """ - Calculate cell volume: volumecc conventional cell, volumepc, primitive cell. - """ + a = lattice_constants[0] b = lattice_constants[1] c = lattice_constants[2] c_al = numpy.cos(latticeangle[0]) c_be = numpy.cos(latticeangle[1]) c_ga = numpy.cos(latticeangle[2]) - volumecc = a * b * c * numpy.sqrt(1 + 2 * c_al * c_be * c_ga - c_al ** 2 - c_be * 82 - c_ga ** 2) + vol_c = a * b * c * numpy.sqrt(1 + 2 * c_al * c_be * c_ga - c_al ** 2 - c_be * 82 - c_ga ** 2) det = {"P":1, "F":4, "B":2, "R":3, "H":1, "CXY":2, "CYZ":2, "CXZ":2} - volumepc = volumecc / det[lattice_type] + vol_p = vol_c / det[lattice_type] - return volumecc, volumepc + return vol_c, vol_p - def transport_distribution(self, directions=['xx'], energy_window=None, Om_mesh=[0.0], beta=40.0, with_Sigma=False, n_om=None, broadening=0.0): - """ - calculate Tr A(k,w) v(k) A(k, w+Om) v(k). - energy_window: regime for omega integral - Om_mesh: mesh for optic conductivitity. Om_mesh is repinned to the self-energy mesh! - directions: list of directions: xx,yy,zz,xy,yz,zx. - with_Sigma: Use Sigma_w = 0 if False (In this case it is necessary to specifiy the energywindow (energy_window), - the number of omega points (n_om) in the window and the broadening (broadening)). + def transport_distribution(self, beta, directions=['xx'], energy_window=None, Om_mesh=[0.0], with_Sigma=False, n_om=None, broadening=0.0): + r""" + Calculates the transport distribution + + .. math:: + \Gamma_{\alpha\beta}\left(\omega+\Omega/2, \omega-\Omega/2\right) = \frac{1}{V} \sum_k Tr\left(v_{k,\alpha}A_{k}(\omega+\Omega/2)v_{k,\beta}A_{k}\left(\omega-\Omega/2\right)\right) + + in the direction :math:`\alpha\beta`. The velocities :math:`v_{k}` are read from the transport subgroup of the hdf5 archive. + + Parameters + ---------- + + beta : double + Inverse temperature :math:`\beta`. + directions : list of double, optional + :math:`\alpha\beta` e.g.: ['xx','yy','zz','xy','xz','yz']. + energy_window : list of double, optional + Specifies the upper and lower limit of the frequency integration for :math:`\Omega=0.0`. The window is automatically enlarged by the largest :math:`\Omega` value, + hence the integration is performed in the interval [energy_window[0]-max(Om_mesh), energy_window[1]+max(Om_mesh)]. + Om_mesh : list of double, optional + :math:`\Omega` frequency mesh of the optical conductivity. For the conductivity and the Seebeck coefficient :math:`\Omega=0.0` has to be + part of the mesh. In the current version Om_mesh is repined to the mesh provided by the self-energy! The actual mesh is printed on the screen and stored as + member Om_mesh. + with_Sigma : boolean, optional + Determines whether the calculation is performed with or without self energy. If this parameter is set to False the self energy is set to zero (i.e. the DFT band + structure :math:`A(k,\omega)` is used). Note: For with_Sigma=False it is necessary to specify the parameters energy_window, n_om and broadening. + n_om : integer, optional + Number of equidistant frequency points in the interval [energy_window[0]-max(Om_mesh), energy_window[1]+max(Om_mesh)]. This parameters is only used if + with_Sigma = False. + broadening : double, optional + Lorentzian broadening. It is necessary to specify the boradening if with_Sigma = False, otherwise this parameter can be set to 0.0. """ # Check if wien converter was called and read transport subgroup form hdf file @@ -479,7 +626,7 @@ class SumkDFTTools(SumkDFT): # calculate A(k,w) ####################################### - # Define mesh for Greens function and in the specified energy window + # Define mesh for Green's function and in the specified energy window if (with_Sigma == True): self.omega = numpy.array([round(x.real,12) for x in self.Sigma_imp_w[0].mesh]) mesh = None @@ -525,7 +672,7 @@ class SumkDFTTools(SumkDFT): print "where the omega vector is:" print self.omega print "Calculation requested for Omega mesh: ", numpy.array(Om_mesh) - print "Omega mesh automatically repinned to: ", self.Om_mesh + print "Omega mesh automatically repined to: ", self.Om_mesh self.Gamma_w = {direction: numpy.zeros((len(self.Om_mesh), n_om), dtype=numpy.float_) for direction in self.directions} @@ -567,13 +714,28 @@ class SumkDFTTools(SumkDFT): / self.cellvolume(self.lattice_type, self.lattice_constants, self.lattice_angles)[1] / self.n_symmetries) - def transport_coefficient(self, direction, iq=0, n=0, beta=40): - """ - calculates the transport coefficients A_n in a given direction and for a given Omega. (see documentation) - A_1 is set to nan if requested for Omega != 0.0 - iq: index of Omega point in Om_mesh - direction: 'xx','yy','zz','xy','xz','yz' + def transport_coefficient(self, direction, iq, n, beta): + r""" + Calculates the transport coefficient A_n in a given direction for a given :math:`\Omega`. The required members (Gamma_w, directions, Om_mesh) have to be obtained first + by calling the function :meth:`transport_distribution `. For n>0 A is set to NaN if :math:`\Omega` is not 0.0. + + Parameters + ---------- + direction : string + :math:`\alpha\beta` e.g.: 'xx','yy','zz','xy','xz','yz'. + iq : integer + Index of :math:`\Omega` point in the member Om_mesh. + n : integer + Number of the desired moment of the transport distribution. + beta : double + Inverse temperature :math:`\beta`. + + Returns + ------- + A : double + Transport coefficient. """ + if not (mpi.is_master_node()): return assert hasattr(self,'Gamma_w'), "transport_coefficient: Run transport_distribution first or load data from h5!" @@ -589,13 +751,32 @@ class SumkDFTTools(SumkDFT): / (self.Om_mesh[iq] * beta) * d_omega) else: A = numpy.nan - return A * numpy.pi * (2.0-self.SP) + A = A * numpy.pi * (2.0-self.SP) + + return A - def conductivity_and_seebeck(self, beta=40): + def conductivity_and_seebeck(self, beta): + r""" + Calculates the Seebeck coefficient and the optical conductivity by calling + :meth:`transport_coefficient `. + The required members (Gamma_w, directions, Om_mesh) have to be obtained first by calling the function + :meth:`transport_distribution `. + + Parameters + ---------- + beta : double + Inverse temperature :math:`\beta`. + + Returns + ------- + optic_cond : dictionary of double vectors + Optical conductivity in each direction and frequency given by Om_mesh. + + seebeck : dictionary of double + Seebeck coefficient in each direction. If zero is not present in Om_mesh the Seebeck coefficient is set to NaN. """ - Calculates the Seebeck coefficient and the conductivity for a given Gamma_w - """ + if not (mpi.is_master_node()): return assert hasattr(self,'Gamma_w'), "conductivity_and_seebeck: Run transport_distribution first or load data from h5!" @@ -620,10 +801,24 @@ class SumkDFTTools(SumkDFT): print "Conductivity in direction %s for Omega = %.2f %f x 10^4 Ohm^-1 cm^-1" % (direction, self.Om_mesh[iq], self.optic_cond[direction][iq]) if not (numpy.isnan(A1[direction][iq])): print "Seebeck in direction %s for Omega = 0.00 %f x 10^(-6) V/K" % (direction, self.seebeck[direction]) - + + return self.optic_cond, self.seebeck + def fermi_dis(self, x): - """ - fermi distribution at x = omega * beta + r""" + Fermi distribution. + + .. math:: + f(x) = 1/(e^x+1). + + Parameters + ---------- + x : double + Inverse temperature times frequency :math:`\beta\omega`. + + Returns + ------- + f : double """ return 1.0/(numpy.exp(x)+1) diff --git a/python/symmetry.py b/python/symmetry.py index 8b50e457..ad9d3720 100644 --- a/python/symmetry.py +++ b/python/symmetry.py @@ -27,17 +27,24 @@ from pytriqs.archive import * import pytriqs.utility.mpi as mpi class Symmetry: - """This class provides the routines for applying symmetry operations for the k sums. - It contains the permutations of the atoms in the unti cell, and the corresponding - rotational matrices for each symmetry operation.""" + """ + This class provides the routines for applying symmetry operations for the k sums. + It contains the permutations of the atoms in the unit cell, and the corresponding + rotational matrices for each symmetry operation. + """ def __init__(self, hdf_file, subgroup = None): - """Initialises the class. - Reads the permutations and rotation matrizes from the file, and constructs the mapping for - the given orbitals. For each orbit a matrix is read!!! - SO: Flag for spin-orbit coupling. - SP: Flag for spin polarisation. - """ + """ + Initialises the class. + + Parameters + ---------- + hdf_file : string + Base name of the hdf5 archive with the symmetry data. + subgroup : string, optional + Name of subgroup storing correlated-shell symmetry data. If not given, it is assumed that + the data is stored at the root of the hdf5 archive. + """ assert type(hdf_file) == StringType, "Symmetry: hdf_file must be a filename." self.hdf_file = hdf_file @@ -72,6 +79,23 @@ class Symmetry: def symmetrize(self,obj): + """ + Symmetrizes a given object. + + Parameters + ---------- + obj : list + object to symmetrize. It has to be given as list, where its length is determined by the number + of equivalent members of the object. Two types of objects are supported: + + - BlockGf : list of Green's functions, + - Matrices : The format is taken from density matrices as obtained from Green's functions (DictType). + + Returns + ------- + symm_obj : list + Symmetrized object, of the same type as input object. + """ assert isinstance(obj,list), "symmetrize: obj has to be a list of objects." assert len(obj) == self.n_orbits, "symmetrize: obj has to be a list of the same length as defined in the init." diff --git a/python/trans_basis.py b/python/trans_basis.py index 12aa6f5b..1ef8eba2 100644 --- a/python/trans_basis.py +++ b/python/trans_basis.py @@ -1,17 +1,33 @@ from pytriqs.applications.dft.sumk_dft import * from pytriqs.applications.dft.converters import Wien2kConverter -from pytriqs.gf.local.block_gf import BlockGf -from pytriqs.gf.local.gf_imfreq import GfImFreq +from pytriqs.gf.local import * from pytriqs.archive import * import pytriqs.utility.mpi as mpi import numpy import copy class TransBasis: - '''Computates rotations into a new basis in order to make certain quantities diagonal.''' + """ + Computates rotations into a new basis, using the condition that a given property is diagonal in the new basis. + """ def __init__(self, SK=None, hdf_datafile=None): - '''Inits the class by reading the input.''' + """ + Initialization of the class. There are two ways to do so: + + - existing SumkLDA class : when you have an existing SumkLDA instance + - from hdf5 archive : when you want to use data from hdf5 archive + + Giving the class instance overrides giving the string for the hdf5 archive. + + Parameters + ---------- + SK : class SumkLDA, optional + Existing instance of SumkLDA class. + hdf5_datafile : string, optional + Name of hdf5 archive to be used. + + """ if SK is None: # build our own SK instance @@ -31,8 +47,24 @@ class TransBasis: self.w = numpy.identity(SK.corr_shells[0]['dim']) - def __call__(self, prop_to_be_diagonal = 'eal'): - '''Calculates the diagonalisation.''' + def calculate_diagonalisation_matrix(self, prop_to_be_diagonal = 'eal'): + """ + Calculates the diagonalisation matrix w, and stores it as member of the class. + + Parameters + ---------- + prop_to_be_diagonal : string, optional + Defines the property to be diagonalized. + + - 'eal' : local hamiltonian (i.e. crystal field) + - 'dm' : local density matrix + + Returns + ------- + wsqr : double + Measure for the degree of rotation done by the diagonalisation. wsqr=1 means no rotation. + + """ if prop_to_be_diagonal == 'eal': prop = self.SK.eff_atomic_levels()[0] @@ -57,7 +89,19 @@ class TransBasis: def rotate_gf(self,gf_to_rot): - '''Rotates a given GF into the new basis.''' + """ + Uses the diagonalisation matrix w to rotate a given GF into the new basis. + + Parameters + ---------- + gf_to_rot : BlockGf + Green's function block to rotate. + + Returns + ------- + gfreturn : BlockGf + Green's function rotated into the new basis. + """ # build a full GF gfrotated = BlockGf( name_block_generator = [ (block,GfImFreq(indices = inner, mesh = gf_to_rot.mesh)) for block,inner in self.SK.gf_struct_sumk[0] ], make_copies = False) @@ -84,7 +128,15 @@ class TransBasis: def write_trans_file(self, filename): - '''Writes the new transformation into a file readable by dmftproj.''' + """ + Writes the new transformation T into a file readable by dmftproj. By that, the requested quantity is + diagonal already at input. + + Parameters + ---------- + filename : string + Name of the file where the transformation is stored. + """ f = open(filename,'w') Tnew = self.T.conjugate()