10 #ifndef DISABLE_MPI_ROUTINE
56 LPEIGENVALUE_RESULT DoLanczosMethod(
CKNMatrixOperation::CKNCSR *pAMatrix,
unsigned int nIterationCount,
unsigned int nEigenValueCheckInterval,
unsigned int nEigenValueCount,
double fEigenvalueMin,
double fEignevalueMax,
double fConvergenceTolerance,
bool bReorthogonalization,
bool bCalcuEigVector,
bool bWaveFunction,
double load_in_MIC,
CKNMatrixOperation::CKNCSR *pmylocalblock = NULL,
CKNMatrixOperation::CKNCSR *leftlocalblock = NULL,
CKNMatrixOperation::CKNCSR *rightlocalblock = NULL);
82 int EigenValueSolver(
unsigned int nIterationCount,
double *pAlpha,
double *pBeta,
double *pEigenValues,
double *pEigenVectors);
83 int ConvergenceChecking(
int nEigenValueCount,
double *pEigenValues,
double *pEiegnVectors,
double *pConvergedEigenValues,
double *pConvergedEigenVectors,
double fANorm,
double *pBeta,
int nIterationCount);
84 int ConvergenceCheckingEx(
int nEigenValueCount,
double *pEigenValues,
double *pEiegnVectors,
bool *pbValidEigenValue,
double fANorm,
double *pBeta,
int nIterationCount);
85 int RangeChecking(
int nEigenValueCount,
double *pEigenValues,
double *pEiegnVectors,
double *pRangeCheckingEigenValues,
double *pRangeCheckingVectors,
int nIterationCount);
86 int SpuriousRitzValueChecking(
int nEigenValueCount,
double *pEigenValues,
double *pEigenVectors,
double *pNonSpuriousValues,
double *pNonSpuriousVectors,
double fANorm,
int nIterationCount);
87 int DistinguishClusterOfEigenvalue(
int nEigenValueCount,
double *pEigenValues,
double *pEigenVectors,
double *pNonClustersValues,
double *pNonClustersVectors,
int nIterationCount);
89 double*
BuildTMatrix(
unsigned int nOrder,
double *pAlpha,
double *pBeta);
91 void ExtractDoubleValues(
double *pTarget,
double *pSource,
unsigned int nSrcCount,
int *pFilter,
unsigned int nFilterCount,
bool bExclusive);
92 void ExtractDoubleVector(
unsigned int nVectorsize,
double *pTarget,
double *pSource,
unsigned int nSrcCount,
int *pFilter,
unsigned int nFilterCount,
bool bExclusive);
96 void IntegrateEigenvaluesEx(
int nIterationCount,
LPEIGENVALUE_RESULT lpResult,
unsigned int nCalculatedEigenValueCount,
unsigned int nCalculatedEigenValueCountBeforeConvergenceCheck,
double *pCalcuResult_Value,
double *pCalcuResult_Vector,
bool *pbValidEigenValue);
double m_floadMIC
Computing ratio of CPU vs. MIC.
CKNMatrixOperation::CKNCSR * m_pAMatrix
A member variable for reference Hemiltonian matrix.
CKNMatrixOperation::CKNVector * pWaveFunctions
CKNMatrixOperation::CKNCSR * m_pALeftBlock
A member variable for reference Hemiltonian matrix.
void FinalLanczosVector()
Deallocating lanczos vectors.
double * m_pRangeCheckedEigenValues
A temporary eigenvalue array for range check function.
double * m_pNoneSpuriousValues
A temporary eigenvalue array for spurious value check function.
int * m_pConvergedIndex
A temporary index array for converged check function.
double * m_pEigenVectors
A temporary eigenvector array for eig solver.
void DoSelectiveReorthogonalization(unsigned int nIterationCount)
Do selective reorthogonalization.
static void MergeDegeneratedEigenvalues(CKNLanczosMethod::LPEIGENVALUE_RESULT lpResult, unsigned int nFindingDegeneratedEVCount, CKNMatrixOperation::CKNCSR *pA, CKNMatrixOperation::CKNCSR *pLocalBlock, CKNMatrixOperation::CKNCSR *pLeftBlock, CKNMatrixOperation::CKNCSR *pRightBlock)
Merging eigenvalue into mater group.
unsigned int m_nEigenValueCheckInterval
A interval for checking T matrix eigenvlaue.
double * m_pNonClustersVectors
A temporary eigenvector array for cluster check function.
void DoResidualCheck(CKNMatrixOperation::CKNCSR *pAMatrix, LPEIGENVALUE_RESULT lpResult)
Residual checking.
double * m_pNoneSpuriousVectors
A temporary eigenvector array for spurious value check function.
double m_fEignevalueMax
Maxinum range of eigenvalue.
CKNMatrixOperation::CKNVector * pEigenVectorsForAMatrix
double m_fConvergenceTolerance
Convergence checking tolerance.
void InitLanczosIterationVariables(CKNComplex **pAlpha, double **pAlphaReal, double **pBeta, double **pWj, double **pWjm1, double **pWjp1, CKNMatrixOperation::CKNVector **pW)
Init omega, alpha, beta array.
CKNMatrixOperation::CKNCSR * m_pARightBoloc
A member variable for reference Hemiltonian matrix.
Data and operation representation of CSR(Compressed Sparse Row)
struct CKNLanczosMethod::RESULT_SORT_DATA * LPRESULT_SORT_DATA
void InitLanczosVector()
Init lanczos vectors.
This class for doing Lanczos method.
unsigned int nEigenVectorSize
static int ResultCompare(const void *pA, const void *pB)
Comparing computing result function for quick sorting.
bool InitializeTemporaryArrayAndVector(int nIterationCount)
Initialize temporary eigenvalue arrays and vectors.
double * m_pConvergedEigenValues
A temporary eigenvalue array for converged check function.
int * m_pNonClustersValueIndex
A temporary index array for cluster check function.
void BuildWaveFunction(LPEIGENVALUE_RESULT lpResult)
Building wavefunction.
unsigned int m_nMatrixSize
A size of Hemiltonian matrix.
struct CKNLanczosMethod::EIGENVALUE_RESULT * LPEIGENVALUE_RESULT
void FinalizeLanczosInterationVariable(CKNComplex *pAlpha, double *pAlphaReal, double *pBeta, double *pWj, double *pWjm1, double *pWjp1, CKNMatrixOperation::CKNVector *pW)
Deallocating omega, alpha, beta.
double * m_pNonClustersValues
A temporary eigenvalue array for cluster check function.
CKNLanczosMethod()
Constructor.
static void RecalcuWaveFunction(CKNLanczosMethod::LPEIGENVALUE_RESULT lpResult)
Recalculating wavefunction after merging degenerated eigenvalues.
bool CheckAndDoSelectiveReorthogonalization(int nIterationCount, double *pAlpha, double *pBeta, double *pWj, double *pWjm1, double *pWjp1, double fANorm)
Check current state need selective reorthogonalization and do it.
unsigned int m_nEigenValueCount
A numbers of eigenvlaue that want to calculation.
static void AppendEigenVector(LPEIGENVALUE_RESULT lpResult, CKNMatrixOperation::CKNVector *pEigenVector, bool bInsertFirst=false)
Appending eigenvector into master group if degenerated eigenvalue is finded.
void IntegrateEigenvalues(int nIterationCount, LPEIGENVALUE_RESULT lpResult, unsigned int nCalculatedEigenValueCount, double *pCalcuResult_Value, double *pCalcuResult_Vector)
Integrating computing solution during Lanczos method operation.
Structure for eigenvalue result sorting.
double * BuildTMatrix(unsigned int nOrder, double *pAlpha, double *pBeta)
Building T matrix for solving eigenvalue.
static void StopIteration()
Stop lanczos iteration on going state.
double m_fEigenvalueMin
Minimum range of eigenvalue.
#define DEGENERATED_INDEX
static void SaveLanczosResult(CKNLanczosMethod::LPEIGENVALUE_RESULT lpResult, bool bCalcuEigenvalue, bool bWaveFunction, double *pKValue, int nRepeatCount)
Saving Lanczos computation result into file.
Common definition for Solver.
static bool CheckingCalculationCondition(bool bCalcuEigenValue, bool bCalcuWaveFunction, unsigned int nDeflationGroup)
Checking pre conditions for Lanczos method operation.
Collection of vector and matrix operation.
CKNMatrixOperation::CKNVector * m_pV
A member variable for saveing lanczos vectors.
Structure for engienvalue computing.
bool DoEigenValueSolving(int nIterationCount, double *pAlpha, double *pBeta, double fANorm, LPEIGENVALUE_RESULT lpResult, bool bFinal)
Every user set iteration count calculate eigenvalues.
int ConvergenceCheckingEx(int nEigenValueCount, double *pEigenValues, double *pEiegnVectors, bool *pbValidEigenValue, double fANorm, double *pBeta, int nIterationCount)
Checking convergence criteria.
int * m_pNonSpuriousValueIndex
A temporary index array for Spurious check function.
double * m_pEigenValues
A temporary eigenvalue array for eig solver.
unsigned int nDegeneratedEigenValueCount
unsigned int * pEigenValueFoundIteration
int SpuriousRitzValueChecking(int nEigenValueCount, double *pEigenValues, double *pEigenVectors, double *pNonSpuriousValues, double *pNonSpuriousVectors, double fANorm, int nIterationCount)
Checking spurious values.
unsigned int nMaxEigenValueFoundIteration
void ExtractDoubleVector(unsigned int nVectorsize, double *pTarget, double *pSource, unsigned int nSrcCount, int *pFilter, unsigned int nFilterCount, bool bExclusive)
Extract vectors by condition that described in filter.
CKNMatrixOperation::CKNCSR * m_pAMyLocalBlock
A member variable for reference Hemiltonian matrix.
double * pDegeneratedEigenValues
LPEIGENVALUE_RESULT DoLanczosMethod(CKNMatrixOperation::CKNCSR *pAMatrix, unsigned int nIterationCount, unsigned int nEigenValueCheckInterval, unsigned int nEigenValueCount, double fEigenvalueMin, double fEignevalueMax, double fConvergenceTolerance, bool bReorthogonalization, bool bCalcuEigVector, bool bWaveFunction, double load_in_MIC, CKNMatrixOperation::CKNCSR *pmylocalblock=NULL, CKNMatrixOperation::CKNCSR *leftlocalblock=NULL, CKNMatrixOperation::CKNCSR *rightlocalblock=NULL)
Doing lanczos method.
double * m_pRangeCheckedEigenVectors
A temporary eigenvector array for range check function.
void InitVariables()
Deallocating member variables.
bool m_bCalcuEigenvector
Option for doing or not calculating eigen vector.
static void SortSolution(LPEIGENVALUE_RESULT lpResult)
Sorting computing eigenvalue.
int DistinguishClusterOfEigenvalue(int nEigenValueCount, double *pEigenValues, double *pEigenVectors, double *pNonClustersValues, double *pNonClustersVectors, int nIterationCount)
Distinguish clusters values.
void CalculateEigenVector(LPEIGENVALUE_RESULT lpResult, CKNMatrixOperation::CKNVector V, unsigned int nIterationIndex)
Calculate Eigen vector of A Matrix.
unsigned int nOriginalIndex
unsigned int m_nIterationCount
A counts of lanczos interation.
void IntegrateEigenvaluesEx(int nIterationCount, LPEIGENVALUE_RESULT lpResult, unsigned int nCalculatedEigenValueCount, unsigned int nCalculatedEigenValueCountBeforeConvergenceCheck, double *pCalcuResult_Value, double *pCalcuResult_Vector, bool *pbValidEigenValue)
Integrating computing solution during Lanczos method operation.
static void AppendEigenValue(LPEIGENVALUE_RESULT lpResult, double fEigenValue, unsigned int nFindIteration=DEGENERATED_INDEX, bool bInsertFirst=false)
Checking is aborting computation flag.
double * m_pConvergedEigenVectors
A temporary eigenvector array for converged check function.
int * m_pRangecheckedIndex
A temporary index array for range check function.
bool m_bReorthogonalization
Option for doing or not re-orthogonalization.
unsigned int nEigenValueCount
~CKNLanczosMethod()
Destructor.
unsigned int nEigenValueCountForMemeory
void FinalizeTemporaryArrayAndVector()
Finalize temporary eigenvalue arrays and vectors.
void ExtractDoubleValues(double *pTarget, double *pSource, unsigned int nSrcCount, int *pFilter, unsigned int nFilterCount, bool bExclusive)
Extract value by condition that described in filter.
This class for complex operation and saving value.
static void ReleaseResult(LPEIGENVALUE_RESULT lpResult, bool bReleaseStruct)
Release memory for lanczos method result.
int DistinguishClusterOfEigenvalueEx(int nEigenValueCount, double *pEigenValues, double *pEigenVectors, bool *pbValidEigenValues, int nIterationCount)
Distinguish clusters values.
bool * m_pCheckNonClusterValue
A temporary check index array for cluster check function.
LPEIGENVALUE_RESULT LanczosIteration()
Doing lanczos basic iteration.
void LanczosIterationLoop(LPEIGENVALUE_RESULT lpResult, CKNMatrixOperation::CKNVector *V1, unsigned int nIterationCount, CKNComplex *pAlpha, double *pAlphaReal, double *pBeta, double *pWj, double *pWjm1, double *pWjp1, bool bMakeEigvVector=false)
Doing lanczos basic iteration.
static bool m_bStop
Determind stop iteration before end of iteration count.
int RangeChecking(int nEigenValueCount, double *pEigenValues, double *pEiegnVectors, double *pRangeCheckingEigenValues, double *pRangeCheckingVectors, int nIterationCount)
Checking eigenvalue range.
int EigenValueSolver(unsigned int nIterationCount, double *pAlpha, double *pBeta, double *pEigenValues, double *pEigenVectors)
EigenValue Solving.
int nEigenValueFoundIteration
int ConvergenceChecking(int nEigenValueCount, double *pEigenValues, double *pEiegnVectors, double *pConvergedEigenValues, double *pConvergedEigenVectors, double fANorm, double *pBeta, int nIterationCount)
Checking convergence criteria.
This class for describing vector for Lanczos method.
static void ShowLanczosResult(CKNLanczosMethod::LPEIGENVALUE_RESULT lpResult, bool bCalculateEigenVectors, bool bCalculateWaveFunction, double *pKValue, int nRepeatCount)
Save calculating result into file.