Example: Hubbard combined with spin flip¶
The Hubbard model can be combined with spin flip. The toy system consists of two Cr atoms and two H atoms, the spin is flipped on one of the Cr atoms.
In this example it is shown how to achieve the same using three different input methods, of which the first (atom) is almost always the most convenient.
Download HubbardInputOptions.run
#!/bin/bash
report=report.txt
print_header() {
echo "* This is a fairly advanced application of the Hubbard model"
echo "* The toy model is a Cr dimer surrounded by two H atoms"
echo "* It is a spin polarized calculation with the spin is flipped on one of the Cr atoms"
echo "* The d orbitals of the two Cr atoms get a Hubbard U correction"
echo "* Three equivalent input setups are shown to achieve the same"
echo "* In the output feedback is given after the header: H U B B A R D S E T T I N G S"
printf "\n%10s %10s %10s\n" "input" "Energy" "E(hubbard)"
}
myreport () {
energy=`$AMSBIN/amsreport $AMS_JOBNAME.results -k "AMSResults%Energy#10.6f"`
hubbard_energy=`$AMSBIN/amsreport $AMS_JOBNAME.results/band.rkf -k "Bond energy terms%Hubbard Energy#10.6f"`
printf "%10s %10s %10s\n" $1 $energy $hubbard_energy
}
print_header > $report
# Method 1, set hubbard for all Cr atoms
export AMS_JOBNAME=inp=atom
$AMSBIN/ams --delete-old-results <<EOF
Task SinglePoint
System
Atoms
Cr 0.0000 0.0000 0.0000
H 10.0 0.0 0.0
Cr 0.0000 0.0000 1.6790 region=SpinFlip
H -10.0 0.0 0.0
End
End
Engine band
Unrestricted yes
Convergence SpinFlipRegion=SpinFlip
HubbardU
Enabled yes
PrintOccupations No
Atom Element=Cr UValue=0.02 lValue=d
End
EndEngine
EOF
myreport "atoms" >> $report
# Method 2, set hubbard for atoms in a region
export AMS_JOBNAME=inp=region
$AMSBIN/ams --delete-old-results <<EOF
Task SinglePoint
System
Atoms
Cr 0.0000 0.0000 0.0000 region=AllCr
H 10.0 0.0 0.0
Cr 0.0000 0.0000 1.6790 region=SpinFlip,AllCr
H -10.0 0.0 0.0
End
End
Engine band
Unrestricted yes
Convergence SpinFlipRegion=SpinFlip
HubbardU
Enabled yes
PrintOccupations No
Region Name=AllCr UValue=0.02 lValue=d
End
EndEngine
EOF
myreport "regions" >> $report
# Method 3: the old and inconvenient way, relying on knowledge of Band's internal atom type system.
export AMS_JOBNAME=inp=obsolete
$AMSBIN/ams --delete-old-results <<EOF
Task SinglePoint
System
Atoms
Cr 0.0000 0.0000 0.0000
H 10.0 0.0 0.0
Cr 0.0000 0.0000 1.6790 region=SpinFlip
H -10.0 0.0 0.0
End
End
Engine band
Unrestricted yes
Convergence SpinFlipRegion=SpinFlip
HubbardU
Enabled yes # band sees three types, 1 and 3 are the Cr atoms
PrintOccupations No
UValue 0.02 0.0 0.02
lValue 2 -1 2
End
EndEngine
EOF
myreport "obsolete" >> $report
echo "begin report"
cat $report
echo "end report"