Skip to content

danielguterding/dhva

Repository files navigation

#dhva

dhva is a code for calculating de Haas-van Alphen frequencies and electronic
band masses from XCrySDen band-grid files. It works very similar to SKEAF by
P.M.C. Rourke and S.R. Julian, but it is written in object-oriented C++ and
offers different interpolation schemes.

The basic approach is to construct a super cell of band energies, which is then
cut into one k-point thick slices. On each of these slices the Fermi surface is
detected and therefore, de Haas-van Alphen orbits can be calculated. Arbitrary
shapes of the reciprocal unit cell are supported.

The construction of the super cell makes use of interpolation on the supplied 
band structure data. In this program a standard trilinear and a sophisticated 
tricubic interpolator are available. The tricubic interpolator is almost as fast 
as the trilinear one. Therefore, use of the tricubic interpolator is advised.

Output files are written to the subfolder "data/" and are named unambigously 
according to the input file and the settings used during the run. Compared to 
SKEAF the output is reduced to the essentials, i.e. the frequencies, masses and
positions of the orbits with standard deviations.

The command line program takes all possible settings as input parameters. 
If you need assistance in using the program, please feel free to contact the 
author.

Most of the relevant ideas can be found in:
  
  Rourke, P.M.C. and Julian, S.R.: Numerical extraction of de Haas–van Alphen
                                   frequencies from calculated band energies.
                                   In: Computer Physics Communications (2012),
                                   No. 183, p. 324–332
                                   
The tricubic interpolation scheme is described in:

  Lekien, F. and Marsden, J.: Tricubic interpolation in three dimensions.
                              In: International Journal for Numerical Methods
                              in Engineering (2005), No. 63, p. 455-471

If you have any questions about this code, encounter bugs or want support for
other input file formats, please contact the author.

##0. Building

This chapter assumes that you are working in a standard Linux environment with
tools like g++ and make already installed. The Eigen linear algebra library and
Boost are required to compile this code. Both can be obtained and installed 
easily on every Linux distribution.

required:
* [Eigen >=3.1.3](http://eigen.tuxfamily.org/)
* [Boost >=1.48](http://www.boost.org/)

After having installed the required dependencies, the source code can be
downloaded and compiled. Adjusting the include path after "-I" in the makefile
to the path where you installed Eigen is necessary.

  git clone git://github.com/danielguterding/dhva.git
  cd dhva
  make
  
You should now have an executable named dhva in the dhva folder.

##1. Scripting

Python scripts are a nice way to issue multiple runs of command line programs.
An example script that only needs a standard Python installation is given by 
scripts/scanangles.py.

##2. Command line arguments

dhva [string filepath]
     [int inputinev]
     [int nksc]
     [float nsc]
     [float phi]
     [float theta]
     [float maxkdiff]
     [float maxfreqdiff]
     [float minimumfreq]
     [int ip]
     [int go]
     
 string filepath
Sets the path of the input-file containing the band data.

 int inputinev
Specifies whether input energies are given in electron volts (eV) or Rydberg.
== 0: Input energies are given in Rydberg.
== 1: Input energies are given in eV.

 int nksc
Specifies the number of k-points along one side of the super cell constructed
from the input data. This is the switch that predominantly controls calculation
accuracy. A value of 400 delivers reasonable accuracy while keeping the 
run-time on a single core within a few minutes and using about 3.5GB of memory.

 int nsc
Sets the number of reciprocal unit cells along on side of the super cell. A 
value of 4 to 6 delivers good accuracy with nksc set to about 400. Increasing
the number of super cells will increase the number of real orbits found 
compared to accidental matches.

 float phi
Sets the angle between magnetic field and kz-vector measured down towards the
kx-ky-plane of the reciprocal unit cell in degrees. I.e. if all reciprocal unit
vectors are perpendicular to each other, choosing a value of 90 will lead to a
situation where the magnetic field is perpendicular to the kz-axis.
 
 float theta
Sets the angle of the magnetic field in the kx-ky-plane measured from the
kx-axis in degrees.
 
 float maxkdiff
Sets the maximum k-space distance between orbit centers within a sheet measured
in units of the reciprocal lattice vectors. If the distance between orbit
centers is larger than maxkdiff, they will not be attributed to the same sheet.
Thus setting maxkdiff to a value of zero will lead to no averaging, while a 
value of one will lead to averaging over all orbits.
A value of 0.05 is recommended.
 
 float maxfreqdiff
Sets the maximum relative frequency difference between neighbouring orbits in a
sheet. If the frequency difference between orbits on neighbouring slices
through the super cell is larger than maxfreqdiff, they will not be taken into
account on the same sheet. Increase this value to average over a larger
frequency range, if multiple frequencies very close to each other are detected.
A value of 0.01 is recommended.
 
 int ip
Sets the interpolation algorithm to be used for constructing the super cell.
Cubic interpolation delivers higher accuracy while linear interpolation is
faster. For production runs use of the tricubic interpolator is recommended.
== 0: Use linear interpolation.
== 1: Use cubic interpolation.

 int go
Sets whether simple graphical ASCII output is desired or not. For production 
runs this should be set to zero.
== 0: Deactivate graphical output.
== 1: Write graphical output to data folder.

##License

Copyright (c) 2013, Daniel Guterding <guterding@itp.uni-frankfurt.de>

dhva is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

dhva is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with dhva. If not, see <http://www.gnu.org/licenses/>.

About

Calculates de Haas-van Alphen frequencies and band masses.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published