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: