Lanczos API entry function.
46 unsigned int nRepeatCount = 1;
50 double *pKValue[3] = {NULL, NULL, NULL};
61 MPI_Comm_size(MPI_COMM_WORLD, &world_size);
62 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
78 system("rmdir /s /q result");
80 system(
"rm -rf result");
85 if(omp_get_num_threads() > 1)
87 if(omp_get_thread_num() == 0)
105 #ifndef DISABLE_MPI_ROUTINE
110 gethostname(host_name, 256);
117 double *local_real = NULL;
118 double *local_imaginary = NULL;
119 unsigned int *local_row = NULL;
120 unsigned int *local_col = NULL;
121 unsigned int local_size = 0;
122 unsigned int local_row_size = 0;
123 unsigned int local_col_size = 0;
125 double *left_real = NULL;
126 double *left_imaginary = NULL;
127 unsigned int *left_row = NULL;
128 unsigned int *left_col = NULL;
129 unsigned int left_size = 0;
130 unsigned int left_row_size = 0;
131 unsigned int left_col_size = 0;
133 double *right_real = NULL;
134 double *right_imaginary = NULL;
135 unsigned int *right_row = NULL;
136 unsigned int *right_col = NULL;
137 unsigned int right_size = 0;
138 unsigned int right_row_size = 0;
139 unsigned int right_col_size = 0;
152 local_row_size = plocalH->
m_vectRow.size();
154 #pragma offload_transfer target(mic:phi_tid) \
155 nocopy(local_real[0:local_size] : ALLOC) \
156 nocopy(local_imaginary[0:local_size] : ALLOC) \
157 nocopy(local_row[0:local_row_size] : ALLOC) \
158 nocopy(local_col[0:local_col_size] : ALLOC)
165 left_row_size = plocalHm1->
m_vectRow.size();
167 #pragma offload_transfer target(mic:phi_tid) \
168 nocopy(left_real[0:left_size] : ALLOC) \
169 nocopy(left_imaginary[0:left_size] : ALLOC) \
170 nocopy(left_row[0:left_row_size] : ALLOC) \
171 nocopy(left_col[0:left_col_size] : ALLOC)
187 right_row_size = plocalHp1->
m_vectRow.size();
189 #pragma offload_transfer target(mic:phi_tid) \
190 nocopy(right_real[0:right_size] : ALLOC) \
191 nocopy(right_imaginary[0:right_size] : ALLOC) \
192 nocopy(right_row[0:right_row_size] : ALLOC) \
193 nocopy(right_col[0:right_col_size] : ALLOC)
199 local_row = pHamiltonian->
m_vectRow.data();
202 local_row_size = pHamiltonian->
m_vectRow.size();
204 #pragma offload_transfer target(mic:phi_tid) \
205 nocopy(local_real[0:local_size] : ALLOC) \
206 nocopy(local_imaginary[0:local_size] : ALLOC) \
207 nocopy(local_row[0:local_row_size] : ALLOC) \
208 nocopy(local_col[0:local_col_size] : ALLOC)
211 #endif // USE_XEONPHI
220 #pragma offload_transfer target(mic:phi_tid) \
221 in(local_real[0:local_size] : REUSE) \
222 in(local_imaginary[0:local_size] : REUSE) \
223 in(local_row[0:local_row_size] : REUSE) \
224 in(local_col[0:local_col_size] : REUSE)
226 #pragma offload_transfer target(mic:phi_tid) \
227 in(left_real[0:left_size] : REUSE) \
228 in(left_imaginary[0:left_size] : REUSE) \
229 in(left_row[0:left_row_size] : REUSE) \
230 in(left_col[0:left_col_size] : REUSE)
232 #pragma offload_transfer target(mic:phi_tid) \
233 in(right_real[0:right_size] : REUSE) \
234 in(right_imaginary[0:right_size] : REUSE) \
235 in(right_row[0:right_row_size] : REUSE) \
236 in(right_col[0:right_col_size] : REUSE)
238 #endif // USE_XEONPHI
245 #pragma offload_transfer target(mic:phi_tid) \
246 in(local_real[0:local_size] : REUSE) \
247 in(local_imaginary[0:local_size] : REUSE) \
248 in(local_row[0:local_row_size] : REUSE) \
249 in(local_col[0:local_col_size] : REUSE)
251 #endif // USE_XEONPHI
257 lpParam->nLanczosIterationCount,
258 lpParam->nCheckEigenvalueInterval,
259 lpParam->nFindingEigenValueCount,
262 lpParam->fConvergeceCriteria,
263 lpParam->bDoSelectiveReorthogonalization,
264 lpParam->bCalculateEigenVectors,
265 lpParam->bCalculateWaveFunction,
266 lpParam->load_in_MIC,
274 if( lpParam->bCalculateWaveFunction )
278 if( lpParam->bSaveResultToFile )
300 #pragma offload_transfer target(mic:phi_tid) \
301 nocopy(local_real : FREE) \
302 nocopy(local_imaginary : FREE) \
303 nocopy(local_row : FREE) \
304 nocopy(local_col : FREE)
306 #pragma offload_transfer target(mic:phi_tid) \
307 nocopy(left_real : FREE) \
308 nocopy(left_imaginary : FREE) \
309 nocopy(left_row : FREE) \
310 nocopy(left_col : FREE)
312 #pragma offload_transfer target(mic:phi_tid) \
313 nocopy(right_real : FREE) \
314 nocopy(right_imaginary : FREE) \
315 nocopy(right_row : FREE) \
316 nocopy(right_col : FREE)
318 #endif // USE_XEONPHI
326 #pragma offload_transfer target(mic:phi_tid) \
327 nocopy(local_real : FREE) \
328 nocopy(local_imaginary : FREE) \
329 nocopy(local_row : FREE) \
330 nocopy(local_col : FREE)
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
static bool IsRootRank()
Get Total node count.
LPEIGENVALUE_RESULT DoLanczosMethod(CMatrixOperation::CCSR *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, CMatrixOperation::CCSR *pmylocalblock=NULL, CMatrixOperation::CCSR *leftlocalblock=NULL, CMatrixOperation::CCSR *rightlocalblock=NULL)
Doing lanczos method.
static void ShowLanczosResult(CLanczosMethod::LPEIGENVALUE_RESULT lpResult, bool bCalculateEigenVectors, bool bCalculateWaveFunction, double *pKValue, int nRepeatCount)
Showing calculating result into screen.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
static void UpdateLocalCSR(CMatrixOperation::CCSR *source, CMatrixOperation::CCSR *mine, CMatrixOperation::CCSR *left, CMatrixOperation::CCSR *right)
static void AllocateLocalCSR(CMatrixOperation::CCSR **mine, CMatrixOperation::CCSR **left, CMatrixOperation::CCSR **right, int nLBIndex)
static void BuildLocalCSR(CMatrixOperation::CCSR *source, CMatrixOperation::CCSR *mine, CMatrixOperation::CCSR *left, CMatrixOperation::CCSR *right)
static void TotalMeasurementStart()
Measurement start for total taken time.
unsigned int GetNoneZeroCount()
Getting numbers of none zero elements.
static void SetMPIEnviroment(int nRank, int nTotalNode)
Set MPI Enviroment.
#define CALCULATION_SUCCESS
Return code at main loop, every steps completed.
static void SaveLanczosResult(CLanczosMethod::LPEIGENVALUE_RESULT lpResult, bool bCalcuEigenvalue, bool bWaveFunction, double *pKValue, int nRepeatCount)
Saving Lanczos computation result into file.
static int GetTotalNodeCount()
static void TotalMeasurementEnd()
Measurement end for total taken time.
static int GetCurrentRank()
static int InitCommunicationBufferMetric()
Initializing MPI Communication buffer for MVMul.
static bool IsMultiLevelMPI()
Get MPI_Comm.
void RecalcuWaveFunction(CLanczosMethod::LPEIGENVALUE_RESULT lpResult)
Recalculating wavefunction after merging degenerated eigenvalues.
void MergeDegeneratedEigenvalues(CLanczosMethod::LPEIGENVALUE_RESULT lpResult, unsigned int nFindingDegeneratedEVCount, CMatrixOperation::CCSR *pA, CMatrixOperation::CCSR *pLocalBlock, CMatrixOperation::CCSR *pLeftBlock, CMatrixOperation::CCSR *pRightBlock)
Merging eigenvalue into mater group.
static bool InitLevel(int nMPILevel, int nFindingDegeneratedEVCount)
Init MPI Level, most low level is for multi node cacluation for Lanczos.
Structure for engienvalue computing.
static void FreeLocalCSR(CMatrixOperation::CCSR *mine, CMatrixOperation::CCSR *left, CMatrixOperation::CCSR *right)
static void SetShow(bool bShow)
Data and operation representation of CSR(Compressed Sparse Row)
void SetLBIndex(int nLBIndex)
static void ShowMsg(char *pszBuffer)
Show message.
This class for doing Lanczos method.
uint_vector_t m_vectColumn
A member variable for saving column information.
static void ShowLanczosWorkingTime()
Showing operation time into screen.
uint_vector_t m_vectRow
A member variable for saving row information.
#define SHOW_SIMPLE_MSG(message)