-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #92 from issp-center-dev/develop
Develop
- Loading branch information
Showing
124 changed files
with
532,739 additions
and
34,213 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,4 @@ Reference Manual | |
reference/input | ||
reference/output | ||
impuritysolvers | ||
tools |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
File format for Green's function and self-energy | ||
================================================== | ||
|
||
The structure of the HDF5 dataset for Green's function and self-energy are as follows. | ||
|
||
|
||
.. csv-table:: | ||
:header: Data set, datatype, description | ||
:widths: 8, 10, 20 | ||
|
||
__version, H5T_STRING, DCore_GfImFreq_v1 | ||
data, "H5T_IEEE_F64LE (2*niw, N, N, 2)", "The first index runs from -niw to niw. The last one indices the real and imaginary parts" | ||
wn, "H5T_IEEE_F64LE (2*niw)", "Imaginary frequenceis wn = (2*n+1)*pi*T for n = -niw, -niw+1, ..., niw-1" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
Tools | ||
================ | ||
|
||
.. toctree:: | ||
:maxdepth: 1 | ||
|
||
tools/akw_converter/akw |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
A(k,w) converter | ||
========================================= | ||
|
||
DCore can generate four-dimensional data of :math:`A(\boldsymbol{k},\omega)` on a linear grid. | ||
An auxiliary tool ``akw_converter`` converts these data into three-dimensional volumeric data with a fixed value of :math:`\omega` that is suitable for reading with existing 3D graphic softwares such as VESTA. | ||
|
||
How to use | ||
---------- | ||
|
||
The following steps should be done after all calculations are finished, namely, self-consistent calculation by ``dcore`` and even post calculations by ``dcore_post``. | ||
|
||
#. **Modifying ini file** | ||
|
||
A parameter ``nk_mesh`` is added to the ini file | ||
|
||
:: | ||
|
||
[tools] | ||
nk_mesh = 100 | ||
|
||
This parameter activates a grid calculation. | ||
:math:`A(\boldsymbol{k},\omega)` is to be computed on a four-dimensional grid of size :math:`100^3 \times N_{\omega}`. | ||
In order to reduce the data size, one could instead specify a set of 3 parameters as | ||
|
||
:: | ||
|
||
[tools] | ||
nk0_mesh = 100 | ||
nk1_mesh = 100 | ||
nk2_mesh = 4 | ||
|
||
In this case, :math:`k_z` is computed on 0, pi/2, pi and 3pi/3. | ||
Note that the k-grid is generated in the *primitive* reciprocal space. | ||
It is also highly recommended to reduce the number of frequency points. For example, if only the Fermi surface is of interest, one can set | ||
|
||
:: | ||
|
||
Nomega = 3 | ||
omega_max = 1.0 | ||
omega_min = -1.0 | ||
|
||
Then, :math:`\omega=0` and two additional points are selected (``Nomega = 1`` is not allowed). | ||
In this way, the data points are reduced to :math:`100^2 \times 4 \times 3`. | ||
|
||
#. **Executing dcore\_post** | ||
|
||
Now, ``dcore_post`` is (re-)executed by | ||
|
||
:: | ||
|
||
dcore_post --np 4 --prefix post_grd/ square.ini | ||
|
||
The number of processes in the ``--np`` option (4 above) should be changed according to your environment. | ||
An output directory is specified by the ``--prefix`` option (default is 'post/'). | ||
In this case, the data are saved in 'post_grd' directory. | ||
We recommend to use this option to have k-path data and k-grid data in separate directories. | ||
|
||
The four-dimensional grid data are save in a file '*seed*\_akw\_mesh\_*sp*.dat', where *seed* is the seed name given in the ini file, and *sp* is the spin index ('up' and 'down' if spin-orbit coupling is not considered and 'ud' otherwise). | ||
|
||
#. **Executing akw\_converter.py** | ||
|
||
Finally, ``akw_converter`` is executed. | ||
``akw_converter.py`` is installed in bin directory, where other executables such as ``dcore`` and ``dcore_post`` are installed. | ||
|
||
:: | ||
|
||
akw_converter.py --omega 0.0 post_grd/square_akw_mesh_up.dat post_grd/akw_up.grd | ||
|
||
The value of :math:`\omega` is given by the ``--omega`` option. If data do not exist just on this :math:`\omega`, :math:`A(\boldsymbol{k},\omega)` is interpolated using 2 points nearby (depending on the kind of interpolation method). | ||
The first argument is the path to the four-dimensional data generated by ``dcore_post``. The second argument is the output file name. The default format is **GRD**, and the output filename should have extension 'grd'. | ||
|
||
The full option of ``akw_converter`` can be seen by the command | ||
:: | ||
|
||
akw_converter.py -h | ||
|
||
|
||
Example | ||
--------- | ||
|
||
As an example, we solve | ||
:doc:`the square-lattice model in tutorial <../../tutorial/square/square>`. | ||
The ini file is changed as below. | ||
|
||
:download:`dmft_square_akw.ini <dmft_square_akw.ini>` | ||
|
||
We use the CT-HYB solver to obtain a better spectrum. | ||
The occupation number is changed from n=1 to n=0.8 to break the particle-hole symmetry. | ||
|
||
A GRD file generated by the converter is opened by VESTA. | ||
A two-dimensional plot is made by "Utilities --> 2D Data Display". | ||
The plot clearly shows the Fermi surface in the square-lattice mode: | ||
|
||
.. image:: vesta_2d_data_display.png | ||
:width: 600 | ||
:align: center | ||
|
||
We note that one needs to change some configuration to have the above plot. | ||
One goes to "Slice" and change (1) "Distance from origin" from 0.5 to 0 to select :math:`k_z=0` plane, and (2) "Ranges of fractional coordinates" from [0:1] to [-0.5:0.5] to shift the Gamma point to the center of the plot. | ||
The figure below shows the Slice panel: | ||
|
||
.. image:: vesta_slice.png | ||
:width: 300 | ||
:align: center |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
[model] | ||
seedname = square | ||
lattice = square | ||
norb = 1 | ||
nelec = 0.8 | ||
t = -1.0 | ||
kanamori = [(4.0, 0.0, 0.0)] | ||
nk = 32 | ||
|
||
[system] | ||
T = 0.1 | ||
n_iw = 1024 | ||
prec_mu = 0.0001 | ||
|
||
[impurity_solver] | ||
name = ALPS/cthyb-seg | ||
exec_path{str} = /opt/ALPSCore-2.2.0/bin/alps_cthyb | ||
cthyb.TEXT_OUTPUT{int} = 1 | ||
cthyb.MEASUREMENT_freq{int} = 1 | ||
MEASURE_gw{int} = 1 | ||
MAX_TIME{int} = 60 | ||
cthyb.N_MEAS{int} = 50 | ||
cthyb.THERMALIZATION{int}=100000 | ||
cthyb.SWEEPS{int}=100000000 | ||
cthyb.MEASURE_nn{int} = 1 | ||
|
||
[control] | ||
max_step = 20 | ||
sigma_mix = 0.5 | ||
time_reversal = True | ||
|
||
[tool] | ||
broadening = 0.0 | ||
knode = [(G,0,0,0),(X,0.5,0,0),(M,0.5,0.5,0),(G,0,0,0)] | ||
nk_line = 100 | ||
#----------------------- for k-path | ||
# omega_max = 10.0 | ||
# omega_min = -10.0 | ||
# Nomega = 101 | ||
#----------------------- for k-grid | ||
nk0_mesh = 100 | ||
nk1_mesh = 100 | ||
nk2_mesh = 4 | ||
omega_max = 1.0 | ||
omega_min = -1.0 | ||
Nomega = 3 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
Antiferromagnetic state in 3D Hubbard model | ||
============================================ | ||
|
||
In this tutorial, you will learn the following: | ||
|
||
* How to define a lattice model using the Wannier90 interface | ||
* How to calculate antiferromagnetic states | ||
* How to set an initial guess for the self-energy | ||
|
||
As a particular example, we consider the Hubbard model on a cubic lattice with nearest neighbor hopping of :math:`t=1`. | ||
Within the single-site DMFT approximation, the model shows an antiferromagnetic transition at low temperature. | ||
The transition temperature was estimated as :math:`T_\mathrm{c}/t\simeq 0.5` in `a previous study <https://link.aps.org/doi/10.1103/PhysRevB.72.060411>`_. | ||
In this tutorial, we compute the antiferromagetic state below :math:`T_\mathrm{c}` using the ALPS/CT-HYB solver. | ||
The complete input file is shown below. | ||
|
||
.. literalinclude:: cubic.ini | ||
:language: ini | ||
|
||
Define lattice model | ||
--------------------------- | ||
|
||
First, we define the hopping matrix of the 3D Hubbard model with a 2x2x2 unit cell. | ||
Running :download:`mk_hr.py <mk_hr.py>` generates a text file (cubic_hr.dat) in the Wannier90 format. | ||
The unit cell contains eight sites whose internal coordinates are (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1). | ||
|
||
We now assume an antiferromagnetic order at :math:`q=(\pi, \pi, \pi)`. | ||
To this end, we assign the eight sites (correlated shells) to two inequivalent shells by using the `corr_to_inequiv` parameter in the model section. | ||
|
||
.. code-block:: bash | ||
python mk_hr.py | ||
Generate initial guess for self-energy | ||
-------------------------------------- | ||
|
||
Second, we generate intial guesses for the (static) self-energies on the two inequivalent shells. | ||
Running :download:`mk_init_se.py <mk_init_se.py>` generates `init_se_up.txt` and `init_se_down.txt`. | ||
|
||
.. code-block:: bash | ||
python mk_init_se.py | ||
Self-consistent calculations | ||
------------------------------ | ||
Now, DMFT calculations can be done as usual. | ||
|
||
.. code-block:: bash | ||
export MPIRUN="mpirun" | ||
dcore_pre cubic.ini > output-pre | ||
dcore cubic.ini --np 48 > output | ||
dcore_post cubic.ini --np 48 > output-post | ||
In the standard output of `dcore`, you will see that the magnetic moments converge to :math:`\simeq 0.43` (86 % of the saturated moment). | ||
|
||
.. code-block:: bash | ||
Density Matrix | ||
Inequivalent Shell 0 | ||
Spin up | ||
0.929-0.000j | ||
Eigenvalues: [0.92877164] | ||
Spin down | ||
0.072-0.000j | ||
Eigenvalues: [0.07229858] | ||
Magnetic moment (only spin contribution, S=1/2 gives 0.5) | ||
mx, my, mz : 0.0 0.0 0.428236533178 | ||
Inequivalent Shell 1 | ||
Spin up | ||
0.078-0.000j | ||
Eigenvalues: [0.0779467] | ||
Spin down | ||
0.930-0.000j | ||
Eigenvalues: [0.92994248] | ||
Magnetic moment (only spin contribution, S=1/2 gives 0.5) | ||
mx, my, mz : 0.0 0.0 -0.425997888424 | ||
Inequivalent shell0 | ||
|
||
.. image:: check/iter_sigma-ish0.png | ||
:width: 800 | ||
:align: center | ||
|
||
Inequivalent shell1 | ||
|
||
.. image:: check/iter_sigma-ish1.png | ||
:width: 800 | ||
:align: center |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
from __future__ import print_function | ||
|
||
import numpy | ||
from itertools import product | ||
|
||
norb = 1 | ||
mag = 1.0 | ||
|
||
with open('init_se_up.txt', 'w') as f: | ||
for i, (isp, iorb) in enumerate(product(range(2), range(norb))): | ||
print(isp, iorb, iorb, mag*(-1)**isp, 0.0, file=f) | ||
|
||
with open('init_se_down.txt', 'w') as f: | ||
for i, (isp, iorb) in enumerate(product(range(2), range(norb))): | ||
print(isp, iorb, iorb, -mag*(-1)**isp, 0.0, file=f) |
Oops, something went wrong.