TABLE OF CONTENTS


17-hp-composite

DESCRIPTION

This example demonstrates how PWTK facilitates the calculation of Hubbard U parameters with the hp.x code. It is a composite example, where the whole calculation of Hubbard U parameters is split over perturbed atoms and q points.

This example is adopted from HP/examples/exemple07 of Quantum ESPRESSO. The system considered is bulk ferromagnetic Ni2MnGa.

BEWARE

This example takes a while to complete.

EXAMPLE SOURCE FILE

hp.pwtk

SOURCE

restart on

# the pw.x input data

CONTROL { pseudo_dir = '.'  outdir = '.'  prefix = 'Ni2MnGa' }
SYSTEM {
    ibrav = 7  celldm(1) = 7.80  celldm(3) = 1.4142136  nat = 4  ntyp = 3
    ecutwfc = 50.0  ecutrho = 400.0
    occupations ='smearing'  smearing ='mv'  degauss = 0.01
    nspin = 2,
    starting_magnetization(Mn) = 0.5
    starting_magnetization(Ni) = 0.5
}
ELECTRONS { conv_thr =  1.d-15  mixing_beta = 0.7 }
ATOMIC_SPECIES {
    Mn  54.938  Mn.pbesol-spn-rrkjus_psl.0.3.1.UPF
    Ni  58.693  Ni.pbesol-n-rrkjus_psl.0.1.UPF
    Ga  69.723  Ga.pbesol-dn-rrkjus_psl.0.2.UPF
}
ATOMIC_POSITIONS {crystal} {
    Mn  0.0  0.0  0.0 
    Ni  1/2  3/4  1/4 
    Ni  1/2  1/4  3/4 
    Ga  0.0  1/2  1/2 
}
K_POINTS {automatic} {
    4 4 4  0 0 0
}
HUBBARD {ortho-atomic} {
    U Mn-3d 0.0001
    U Ni-3d 0.0001
}

# the hp.x input data common to all hp.x calcs

INPUTHP {
    nq1 = 2  nq2 = 2  nq3 = 2
    conv_thr_chi = 1.0d-8
    iverbosity = 2
}


# run the SCF calculation

runPW scf.Ni2MnGa

# run hp.x calculations per-partes

foreach atom {Mn Ni} {
    input_pushpop {
        INPUTHP "perturb_only_atom($atom) = .true."
        
        foreach {start_q last_q} {
            1 2
            3 4
        } {
            # run the hp.x calculation for $atom from q-points in [$start_q,$last_q]
            input_pushpop {
                INPUTHP "start_q = $start_q   last_q = $last_q"
                runHP hp.Ni2MnGa.$atom.q$start_q-$last_q
            }
        }
        
        # collect all q points for $atom
        input_pushpop {
            INPUTHP "sum_pertq = .true."
            runHP hp.Ni2MnGa.$atom.collect
        }
    }
}

# final step: collect all pieces of the response matrices, invert them
# and calculate U for Mn and Ni

INPUTHP { compute_hp = .true. }
runHP hp.Ni2MnGa.final