70 std::vector<Complex> zshift_;
71 std::vector<Complex> zweightRho_;
72 std::vector<Complex> zweightRhoDrvMu_;
73 std::vector<Complex> zweightRhoDrvT_;
74 std::vector<Complex> zweightHelmholtz_;
75 std::vector<Complex> zweightForce_;
92 std::vector<Int> diagIdxLocal_;
99 Real CalculateChemicalPotentialNewtonFD(
101 const Real numElectronExact,
102 const Real numElectronTolerance,
103 const std::vector<Real>& muList,
104 const std::vector<Real>& numElectronList );
116 Real CalculateChemicalPotentialNewtonBisection(
117 const Real numElectronExact,
118 const Real numElectron,
119 const Real numElectronDrvMu,
175 Real numElectronExact,
184 Real numElectronTolerance,
187 bool isFreeEnergyDensityMatrix,
188 bool isEnergyDensityMatrix,
189 bool isDerivativeTMatrix,
190 std::vector<Real>& muList,
191 std::vector<Real>& numElectronList,
192 std::vector<Real>& numElectronDrvMuList,
317 const std::vector<Real>& shiftVec,
318 std::vector<Real>& inertiaVec,
322 Int numProcSymbFact );
328 const std::vector<Real>& shiftVec,
329 std::vector<Real>& inertiaVec,
333 Int numProcSymbFact );
DistSparseMatrix< Real > & FreeEnergyDensityMatrix()
DensityMatrix returns the free energy density matrix.
Definition: ppexsi.hpp:202
Real CalculateNumElectronDrvMu(const DistSparseMatrix< Real > &SMat)
CalculateNumElectronDrvMu computes the derivative of the number of electrons with respect to the chem...
Definition: ppexsi.cpp:939
DistSparseMatrix< Real > & EnergyDensityMatrix()
DensityMatrix returns the energy density matrix for computing the force.
Definition: ppexsi.hpp:206
Real CalculateForce(const DistSparseMatrix< Real > &HDerivativeMat, const DistSparseMatrix< Real > &SDerivativeMat)
CalculateFreeEnergy computes the force, including the Hellman-Feynman force and the Pulay force...
Definition: ppexsi.cpp:1077
DistSparseMatrix< Real > & DensityMatrix()
DensityMatrix returns the single particle density matrix.
Definition: ppexsi.hpp:199
SuperNodeType describes mapping between supernode and column, the permutation information, and potentially the elimination tree (not implemented here).
Definition: pselinv.hpp:121
void EstimateSpectralRadius(Int method, const DistSparseMatrix< Real > &HMat, const DistSparseMatrix< Real > &SMat, const NumVec< Real > &v0, Real tol, Int maxNumIter, Int &numIter, Real &sigma)
Estimate the spectral radius of the matrix stencil (H,S).
Definition: ppexsi.cpp:1364
Inteface with SuperLU_Dist (version 3.0 and later)
Implementation of Numerical Vector.
Main class for parallel PEXSI.
Definition: ppexsi.hpp:64
Main file for parallel selected inversion.
GridType is the PSelInv way of defining the grid.
Definition: pselinv.hpp:84
Interface with MPI to facilitate communication.
Various utility subroutines.
void Solve(Int numPole, Real temperature, Real numElectronExact, Real gap, Real deltaE, Real &mu, Real &muMin, Real &muMax, const DistSparseMatrix< Real > &HMat, const DistSparseMatrix< Real > &SMat, Int muMaxIter, Real numElectronTolerance, std::string ColPerm, Int numProcSymbFact, bool isFreeEnergyDensityMatrix, bool isEnergyDensityMatrix, bool isDerivativeTMatrix, std::vector< Real > &muList, std::vector< Real > &numElectronList, std::vector< Real > &numElectronDrvMuList, bool &isConverged)
Solve is the main subroutine for PPEXSI.
Definition: ppexsi.cpp:187
Real CalculateFreeEnergy(const DistSparseMatrix< Real > &SMat)
CalculateFreeEnergy computes the total Helmholtz free energy (band energy part only).
Definition: ppexsi.cpp:1038
Real EstimateZeroTemperatureChemicalPotential(Real temperature, Real mu, const DistSparseMatrix< Real > &SMat)
Estimate the chemical potential at zero temperature using quadratic approximation.
Definition: ppexsi.cpp:1117
Implementation of sparse matrices.
Interface subroutines of PEXSI that can be called by C.
Real CalculateTotalEnergy(const DistSparseMatrix< Real > &HMat)
CalculateTotalEnergy computes the total energy (band energy part only).
Definition: ppexsi.cpp:1012
A thin interface for the gridinfo_t strucutre in SuperLU.
Definition: superlu_dist_interf.hpp:64
void CalculateNegativeInertia(const std::vector< Real > &shiftVec, std::vector< Real > &inertiaVec, const DistSparseMatrix< Real > &HMat, const DistSparseMatrix< Real > &SMat, std::string ColPerm, Int numProcSymbFact)
Compute the negative inertia (the number of eigenvalues below a shift).
Definition: ppexsi.cpp:1147
Real CalculateNumElectronDrvT(const DistSparseMatrix< Real > &SMat)
CalculateNumElectronDrvT computes the derivative of the number of electrons with respect to the tempe...
Definition: ppexsi.cpp:976
Real CalculateNumElectron(const DistSparseMatrix< Real > &SMat)
CalculateNumElectron computes the number of electrons given the current density matrix.
Definition: ppexsi.cpp:902
Pole expansion subroutines.
void CalculateNegativeInertiaReal(const std::vector< Real > &shiftVec, std::vector< Real > &inertiaVec, const DistSparseMatrix< Real > &HMat, const DistSparseMatrix< Real > &SMat, std::string ColPerm, Int numProcSymbFact)
Compute the negative inertia (the number of eigenvalues below a shift) with real arithmetic which dir...
Definition: ppexsi_real.cpp:74