Pseudopotential for a species of ions, and atom positions and other properties for that species. More...
#include <SpeciesInfo.h>
Classes | |
struct | Constraint |
Contains the information on the constraints of motion for each ion. More... | |
Public Types | |
enum | PseudopotentialFormat { Fhi, Uspp, UPF } |
Public Member Functions | |
void | sync_atpos () |
update changes in atpos; call whenever atpos is changed (this will update atposManaged and invalidate cached projectors, if any) | |
void | setup (const Everything &) |
void | print (FILE *fp) const |
print ionic positions from current species | |
void | populationAnalysis (const std::vector< matrix > &RhoAll) const |
print population analysis given the density matrix in the Lowdin basis | |
bool | isRelativistic () const |
whether pseudopotential is relativistic | |
bool | isUltrasoft () const |
whether pseudopotential is ultrasoft | |
PseudopotentialFormat | getPSPFormat () |
Returns the pseudopotential format. | |
std::shared_ptr< ColumnBundle > | getV (const ColumnBundle &Cq) const |
get projectors with qnum and basis matching Cq (optionally cached) | |
int | nProjectors () const |
total number of projectors for all atoms in this species (number of columns in result of getV) | |
double | EnlAndGrad (const QuantumNumber &qnum, const diagMatrix &Fq, const matrix &VdagCq, matrix &HVdagCq) const |
void | augmentOverlap (const ColumnBundle &Cq, ColumnBundle &OCq, matrix *VdagCq=0) const |
Accumulate pseudopotential contribution to the overlap in OCq. | |
void | augmentDensityInit () |
Clear internal data and prepare for density augmentation (call before a loop over augmentDensitySpherical per k-point) | |
void | augmentDensitySpherical (const QuantumNumber &qnum, const diagMatrix &Fq, const matrix &VdagCq) |
Accumulate the pseudopotential dependent contribution to the density in the spherical functions nAug (call once per k-point) | |
void | augmentDensityGrid (ScalarFieldArray &n) const |
Accumulate the spherical augmentation functions nAug to the grid electron density (call only once, after augmentDensitySpherical on all k-points) | |
void | augmentDensityGridGrad (const ScalarFieldArray &E_n, std::vector< vector3<> > *forces=0) |
Gradient propagation corresponding to augmentDensityGrid (stores intermediate spherical function results to E_nAug; call only once) | |
void | augmentDensitySphericalGrad (const QuantumNumber &qnum, const matrix &VdagCq, matrix &HVdagCq) const |
Gradient propagation corresponding to augmentDensitySpherical (uses intermediate spherical function results from E_nAug; call once per k-point after augmentDensityGridGrad) | |
size_t | rhoAtom_nMatrices () const |
void | rhoAtom_initZero (matrix *rhoAtomPtr) const |
void | rhoAtom_calc (const std::vector< diagMatrix > &F, const std::vector< ColumnBundle > &C, matrix *rhoAtomPtr) const |
double | rhoAtom_computeU (const matrix *rhoAtomPtr, matrix *U_rhoAtomPtr) const |
void | rhoAtom_grad (const ColumnBundle &Cq, const matrix *U_rhoAtomPtr, ColumnBundle &HCq) const |
void | rhoAtom_forces (const std::vector< diagMatrix > &F, const std::vector< ColumnBundle > &C, const matrix *U_rhoAtomPtr, std::vector< vector3<> > &forces) const |
void | rhoAtom_getV (const ColumnBundle &Cq, const matrix *U_rhoAtomPtr, ColumnBundle &Opsi, matrix &M) const |
void | accumulateAtomicDensity (ScalarFieldTildeArray &nTilde) const |
Accumulate atomic density from this species. | |
void | accumulateAtomicPotential (ScalarFieldTilde &dTilde) const |
Accumulate electrostatic potential of neutral atoms from this species. | |
void | setAtomicOrbitals (ColumnBundle &Y, bool applyO, int colOffset=0) const |
Calculate atomic orbitals with/without O preapplied (store in Y with an optional column offset) | |
void | setAtomicOrbitals (ColumnBundle &Y, bool applyO, unsigned n, int l, int colOffset=0, int atomColStride=0) const |
If non-zero, atomColStride overrides the number of columns between the same orbital of multiple atoms (default = number of orbitals at current n and l) More... | |
int | nAtomicOrbitals () const |
return number of atomic orbitals in this species (all atoms) | |
int | lMaxAtomicOrbitals () const |
return maximum angular momentum in available atomic orbitals | |
int | nAtomicOrbitals (int l) const |
return number of (pseudo-)principal quantum numbers for atomic orbitals of given l | |
int | atomicOrbitalOffset (unsigned iAtom, unsigned n, int l, int m, int s) const |
s is 0/1 for up/dn spinors in non-relativistic case, s=0/1 is for j=l+/-0.5 and mj=m+/-0.5 in relativistic case More... | |
void | updateLocal (ScalarFieldTilde &Vlocps, ScalarFieldTilde &rhoIon, ScalarFieldTilde &nChargeball, ScalarFieldTilde &nCore, ScalarFieldTilde &tauCore) const |
Add contributions from this species to Vlocps, rhoIon, nChargeball and nCore/tauCore (if any) | |
std::vector< vector3<> > | getLocalForces (const ScalarFieldTilde &ccgrad_Vlocps, const ScalarFieldTilde &ccgrad_rhoIon, const ScalarFieldTilde &ccgrad_nChargeball, const ScalarFieldTilde &ccgrad_nCore, const ScalarFieldTilde &ccgrad_tauCore) const |
Return the local forces (due to Vlocps, rhoIon, nChargeball and nCore/tauCore) | |
void | accumNonlocalForces (const ColumnBundle &Cq, const matrix &VdagC, const matrix &E_VdagC, const matrix &grad_CdagOCq, std::vector< vector3<> > &forces) const |
Propagate gradient with respect to atomic projections (in E_VdagC, along with additional overlap contributions from grad_CdagOC) to forces: | |
Static Public Member Functions | |
static matrix | getYlmToSpinAngleMatrix (int l, int j2) |
Spin-angle helper functions: More... | |
static matrix | getYlmOverlapMatrix (int l, int j2) |
Get the ((2l+1)*2)x((2l+1)*2) overlap matrix of the spin-spherical harmonics for total angular momentum j (note j2=2*j) | |
Public Attributes | |
double | Z |
Valence charge of the species (prefactor to 1/r in long-range part of pseudopotential) | |
int | atomicNumber |
Atomic number of the species (0 if unavailable) | |
string | name |
Identifier. | |
string | potfilename |
pseudopotential filename | |
string | pulayfilename |
pulay correction filename | |
bool | fromWildcard |
whether this pseudopotential was automatically added using a wildcard (for command printing purposes only) | |
std::vector< vector3<> > | atpos |
array of atomic positions of this species | |
std::vector< vector3<> > | velocities |
array of atomic velocities (null unless running MD) in lattice coordinates | |
ManagedArray< vector3<> > | atposManaged |
managed copy of atpos accessed from operator code (for auto cpu/gpu transfers) | |
double | dE_dnG |
Derivative of [total energy per atom] w.r.t [nPlanewaves per unit volume] (for Pulay corrections) | |
double | mass |
ionic mass (currently unused) | |
double | coreRadius |
maximum pseudopotential core radius (used for core overlap checks during ionic/lattice relaxation) | |
double | ZfullCore |
number of electrons in full-core correction (atomicNumber - Z - integral(nCore)) | |
std::vector< Constraint > | constraints |
List of all constraints on ions of this species. | |
std::vector< vector3<> > | initialMagneticMoments |
Initial magnetic moments of each atom (used only for LCAO and symmetries) (x and y magnetizations only used in noncollinear calculations) | |
double | initialOxidationState |
Initial oxidation state of this species (only affects LCAO) | |
Pseudopotential for a species of ions, and atom positions and other properties for that species.
int SpeciesInfo::atomicOrbitalOffset | ( | unsigned | iAtom, |
unsigned | n, | ||
int | l, | ||
int | m, | ||
int | s | ||
) | const |
s is 0/1 for up/dn spinors in non-relativistic case, s=0/1 is for j=l+/-0.5 and mj=m+/-0.5 in relativistic case
offset of specified atomic orbital in output of current species (when not using the fixed n and l version)
double SpeciesInfo::EnlAndGrad | ( | const QuantumNumber & | qnum, |
const diagMatrix & | Fq, | ||
const matrix & | VdagCq, | ||
matrix & | HVdagCq | ||
) | const |
Return non-local energy for this species and quantum number q and optionally accumulate projected electronic gradient in HVdagCq (if non-null)
|
static |
Spin-angle helper functions:
Get the ((2l+1)*2)x(j2+1) matrix that transforms the Ylm+spin to the spin-angle functions, where j2=2*j with j = l+/-0.5
void SpeciesInfo::setAtomicOrbitals | ( | ColumnBundle & | Y, |
bool | applyO, | ||
unsigned | n, | ||
int | l, | ||
int | colOffset = 0 , |
||
int | atomColStride = 0 |
||
) | const |
If non-zero, atomColStride overrides the number of columns between the same orbital of multiple atoms (default = number of orbitals at current n and l)
Same as above, but for specific n and l.