Handle transformation of ColumnBundles upon symmetry operations. More...
#include <ColumnBundleTransform.h>
Classes | |
struct | BasisWrapper |
Public Member Functions | |
ColumnBundleTransform (const vector3<> &kC, const Basis &basisC, const vector3<> &kD, const BasisWrapper &basisDwrapper, int nSpinor, const SpaceGroupOp &sym, int invert, const matrix3< int > &super=matrix3< int >(1, 1, 1)) | |
ColumnBundleTransform (const ColumnBundleTransform &)=delete | |
ColumnBundleTransform & | operator= (const ColumnBundleTransform &)=delete |
void | scatterAxpy (complex alpha, const ColumnBundle &C_C, int bC, ColumnBundle &C_D, int bD) const |
scatter-accumulate a single column | |
void | gatherAxpy (complex alpha, const ColumnBundle &C_D, int bD, ColumnBundle &C_C, int bC) const |
gather-accumulate a single column | |
void | scatterAxpy (complex alpha, const ColumnBundle &C_C, ColumnBundle &C_D, int bDstart, int bDstep) const |
scatter-accumulate all columns of C_C | |
void | gatherAxpy (complex alpha, const ColumnBundle &C_D, int bDstart, int bDstep, ColumnBundle &C_C) const |
gather-accumulate all columns of C_C | |
std::vector< matrix > | transformVdagC (const std::vector< matrix > &VdagC_C, int iSym) const |
Friends | |
class | WannierMinimizer |
Handle transformation of ColumnBundles upon symmetry operations.
ColumnBundleTransform::ColumnBundleTransform | ( | const vector3<> & | kC, |
const Basis & | basisC, | ||
const vector3<> & | kD, | ||
const BasisWrapper & | basisDwrapper, | ||
int | nSpinor, | ||
const SpaceGroupOp & | sym, | ||
int | invert, | ||
const matrix3< int > & | super = matrix3< int >(1, 1, 1) |
||
) |
Define transformations between basis/k 'C' indexed continuously and basis/k 'D' indexed discontinuously i.e. scatter will occur from C to D, whereas gather will occur from D to C. The D basis is wrapped so that a lookup table generated during construction can be reused if many transformations to a common D are required. The symmetry operation sym is in covariant lattice coordinates, and explicit k-point inversion is specified by invert = +/- 1. Optionally, super specifies a transform to a supercell (D corresponds to a supercell of C); columnbundles will however not be automatically re-normalized for the supercell Note that the transformation is kD = kC * sym * invert * super + offset (where offset is determined automatically). If the ColumnBundles are spinorial (nSpinor=2), corresponding spin-space transformations will also be applied
std::vector<matrix> ColumnBundleTransform::transformVdagC | ( | const std::vector< matrix > & | VdagC_C, |
int | iSym | ||
) | const |
Transform psp projection VdagC_C to VdagC_D. Need iSym for spherical and atom transformations. Does not support supercell transformations.