Antiferromagnetic state¶
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 square lattice (The first example: 2D Hubbard model). Within the single-site DMFT approximation, the model shows an antiferromagnetic transition at low temperature (the Mermin-Wagner theorem is not fulfilled in DMFT). The transition temperature was estimated as \(T_\mathrm{c}/t\simeq 0.23\) for \(U=4\). This means that the parameter set used in [The first example: 2D Hubbard model] is actually in the antiferromagnetic phase. In this tutorial, we compute the antiferromagetic solution below \(T_\mathrm{c}\) using a CT-HYB solver.
The complete input file is shown below:
[model]
seedname = afm_dim2
lattice = wannier90
ncor = 4
norb = 1, 1
nelec = 4.0
kanamori = [(4.0, 0.0, 0.0), (4.0, 0.0, 0.0)]
corr_to_inequiv = 0, 1, 1, 0
nk = 8
[system]
T = 0.1
n_iw = 1000
mu = 2.0
fix_mu = True
[impurity_solver]
name = ALPS/cthyb-seg
exec_path{str} = /path/to/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
[control]
max_step = 30
sigma_mix = 0.5
initial_static_self_energy = {0: 'init_se_up.txt', 1: 'init_se_down.txt'}
[post.spectrum]
broadening = 0.0
knode = [(G,0.0,0.0,0.0),(X,0.5,0.0,0.0),(M,0.5,0.5,0.0),(G,0.0,0.0,0.0)]
# knode = [(G,0,0,0),(X,1,0,0),(M,1,1,0),(G,0,0,0)]
nk_line = 100
[post.anacont]
omega_max = 6.0
omega_min = -6.0
Nomega = 401
Note that /path/to/alps_cthyb
for [impurity_solver] exec_path{str}
parameter needs to be replaced with a full path to alps_cthyb
executable in your environment.
Define lattice model¶
First, we define the hopping matrix of the 2D Hubbard model with a 2x2 unit cell.
Running the script mk_hr_2.py
as
python mk_hr_2.py
a text file in the Wannier90 format is generated (afm_dim2_hr.dat
).
The unit cell contains four sites whose internal coordinates are (0, 0), (0, 1), (1, 0), (1, 1).
We now assume an antiferromagnetic order characterized by the wave vector \(q=(\pi, \pi)\).
To this end, we assign the four sites (correlated shells) to two inequivalent shells by using the corr_to_inequiv
parameter in the model section.
Generate initial guess for self-energy¶
Second, we set up intial guesses for the (static) self-energies on the two inequivalent shells.
For one shell, we use the text file init_se_up.txt
containing
0 0 0 -1.0 0.0
1 0 0 1.0 0.0
and for the other, we use init_se_down.txt
containing
0 0 0 1.0 0.0
1 0 0 -1.0 0.0
Thus, spin moments tend to turn up on inequivalent shell0 and turn down on shell1.
Self-consistent calculations¶
Now, DMFT calculations can be done as usual.
export MPIRUN="mpirun"
dcore_pre cubic.ini > output-pre
dcore cubic.ini --np 48 > output
dcore_anacont cubic.ini > output-anacont
dcore_spectrum cubic.ini --np 48 > output-spectrum
In the standard output of dcore
, you will see that the magnetic moments converge to \(\simeq 0.28\) (57 % of the saturated moment).
Density Matrix
Inequivalent Shell 0
Spin up
0.784-0.000j
Eigenvalues: [0.7837032]
Spin down
0.218+0.000j
Eigenvalues: [0.2182982]
Magnetic moment (only spin contribution, S=1/2 gives 0.5)
mx,my,mz= 0.0 0.0 0.282702499302
Inequivalent Shell 1
Spin up
0.218-0.000j
Eigenvalues: [0.21842138]
Spin down
0.784-0.000j
Eigenvalues: [0.78360972]
Magnetic moment (only spin contribution, S=1/2 gives 0.5)
mx,my,mz= 0.0 0.0 -0.282594174364
The graph below is one of the figures generated by dcore_check
, which shows the convergence of the spin moment for inequivalent shell0:
For inequivalent shell1, the spin moment points the opposite directions: