21 #ifndef JDFTX_ELECTRONIC_ELECINFO_H 22 #define JDFTX_ELECTRONIC_ELECINFO_H 24 #include <electronic/common.h> 43 int index()
const {
return spin<0 ? 1 : 0; }
55 bool isMine(
int q)
const {
return qDivision.isMine(q); }
56 int whose(
int q)
const {
return qDivision.whose(q); }
57 int qStartOther(
int iProc)
const {
return qDivision.start(iProc); }
58 int qStopOther(
int iProc)
const {
return qDivision.stop(iProc); }
62 std::vector<QuantumNumber>
qnums;
64 bool isNoncollinear()
const {
return spinType==SpinVector || spinType==SpinOrbit; }
65 int spinorLength()
const {
return isNoncollinear() ? 2 : 1; }
88 void printFillings(FILE* fp)
const;
89 void printFermi(
const char* suffix,
const double* muOverride=0)
const;
90 void mixFillings(std::vector<diagMatrix>& F,
Energies& ener);
91 void updateFillingsEnergies(
const std::vector<diagMatrix>& F,
Energies&)
const;
94 inline double muEff(
double mu,
double Bz,
int q)
const {
return mu + Bz*qnums[q].spin; }
95 double fermi(
double mu,
double eps)
const {
return 0.5*(1.-tanh(betaBy2*(eps-mu))); }
96 double fermiPrime(
double mu,
double eps)
const {
return -0.5*betaBy2/
pow(cosh(betaBy2*(eps-mu)), 2); }
105 double nElectronsFermi(
double mu,
const std::vector<diagMatrix>& eps,
double& Bz)
const;
109 double findMu(
const std::vector<diagMatrix>& eps,
double nElectrons,
double& Bz)
const;
111 void kpointsPrint(FILE* fp,
bool printSpin=
false)
const;
112 void kpointPrint(FILE* fp,
int q,
bool printSpin=
false)
const;
114 int findHOMO(
int q)
const;
117 void read(std::vector<diagMatrix>&,
const char *fname,
int nRowsOverride=0)
const;
118 void read(std::vector<matrix>&,
const char *fname,
int nRowsOverride=0,
int nColsOverride=0)
const;
119 void write(
const std::vector<diagMatrix>&,
const char *fname,
int nRowsOverride=0)
const;
120 void write(
const std::vector<matrix>&,
const char *fname,
int nRowsOverride=0,
int nColsOverride=0)
const;
121 void appendWrite(
const std::vector<diagMatrix>&,
const char *fname,
int nRowsOverride=0)
const;
130 double Qinitial, Minitial;
132 friend struct CommandElecInitialFillings;
133 friend struct CommandElecInitialCharge;
134 friend struct CommandElecInitialMagnetization;
135 friend struct CommandInitialState;
137 friend struct LCAOminimizer;
140 double magnetizationFermi(
double mu,
double Bz,
const std::vector<diagMatrix>& eps,
double& nElectrons)
const;
143 double fillingMixFraction;
144 double dnPrev, muMeasuredPrev;
145 double Cmeasured, Cweight;
146 double dnMixFraction;
147 friend struct CommandElecFermiFillings;
148 friend struct CommandTargetMu;
152 friend struct CommandKpointFolding;
156 void kpointsReduce();
159 #endif // JDFTX_ELECTRONIC_ELECINFO_H std::vector< QuantumNumber > qnums
k-points, spins and weights for each state
Definition: ElecInfo.h:62
ScalarField pow(const ScalarField &, double alpha)
Elementwise power (preserve input)
int index() const
return the appropriate index into electron (spin) density/potential arrays
Definition: ElecInfo.h:43
vector3 k
k-point wave vector
Definition: ElecInfo.h:38
string initialFillingsFilename
filename for initial fillings (zero-length if none)
Definition: ElecInfo.h:84
General complex matrix.
Definition: matrix.h:57
int mixInterval
we recalc. fillings every so many iterations
Definition: ElecInfo.h:78
int qStop
Range of states handled by current process (= 0 and nStates for non-MPI jobs)
Definition: ElecInfo.h:54
Definition: Energies.h:26
int whose(int q) const
find out which process this state index belongs to
Definition: ElecInfo.h:56
double weight
state weight (= 1x or 2x k-point weight depending on spintype)
Definition: ElecInfo.h:40
Real diagonal matrix.
Definition: matrix.h:30
Definition: ElecInfo.h:35
double fermiPrime(double mu, double eps) const
derivative of fermi function
Definition: ElecInfo.h:96
constant fillings (T=0)
Definition: ElecInfo.h:68
Calculate phonon dispersion, free energies and electron-phonon matrix elements.
Definition: Phonon.h:47
SpinType spinType
tells us what sort of spins we are using if any
Definition: ElecInfo.h:60
int qStartOther(int iProc) const
find out qStart for another process
Definition: ElecInfo.h:57
int spin
possible spin orientation. up=1, down=-1, none=0
Definition: ElecInfo.h:39
FillingsUpdate
Definition: ElecInfo.h:67
double fermi(double mu, double eps) const
fermi function
Definition: ElecInfo.h:95
bool isMine(int q) const
check if state index is local
Definition: ElecInfo.h:55
double mu
If NaN, fix nElectrons, otherwise fix/target chemical potential to this.
Definition: ElecInfo.h:76
double nElectrons
the number of electrons = Sum w Tr[F]
Definition: ElecInfo.h:61
fillings are a fermi function of the (auxilliary) subspace hamiltonian (recommended) ...
Definition: ElecInfo.h:70
Definition: Everything.h:41
Definition: ElecVars.h:30
Definition: ElecInfo.h:49
int nStates
Number of bands and total number of states.
Definition: ElecInfo.h:52
double kT
Temperature for Fermi distribution of fillings.
Definition: ElecInfo.h:75
bool subspaceRotation
whether subspace variables are required (either rotation or aux hamiltonian)
Definition: ElecInfo.h:79
int qStopOther(int iProc) const
find out qStop for another process
Definition: ElecInfo.h:58
std::vector< std::tuple< int, int, double > > customFillings
Flag to check whether the calculation has a DFT+U self-interaction correction.
Definition: ElecInfo.h:83
int qWeightSum
number of density components, spin weight factor (= max occupation per state) and sum of k-point weig...
Definition: ElecInfo.h:53
mix fermi functions every mixInterval iterations
Definition: ElecInfo.h:69