IPCC  1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CKNMatrixOperation::CKNVector Class Reference

This class for describing vector for Lanczos method. More...

#include "KNMatrixOperation.h"

Collaboration diagram for CKNMatrixOperation::CKNVector:
Collaboration graph

Classes

struct  VECTOR_ELEMENT
 

Public Types

typedef struct
CKNMatrixOperation::CKNVector::VECTOR_ELEMENT
LPVECTOR_ELEMENT
 

Public Member Functions

 CKNVector ()
 Constructor. More...
 
 ~CKNVector ()
 Destructor. More...
 
void SetSize (unsigned int nSize)
 Set Vector elements size. More...
 
unsigned int GetSize ()
 Return Vector elements size. More...
 
void SetAt (unsigned int nIndex, CKNComplex value)
 Set element value in specific index, Call by value. More...
 
void SetAtEx (unsigned int nIndex, CKNComplex *pValue)
 Set element value in specific index, Call by reference. More...
 
void SetAt (unsigned int nIndex, double fReal, double fImaginary)
 Set element value in specific index. More...
 
CKNComplex GetAt (unsigned int nIndex)
 Get element value from specific index. More...
 
CKNComplexGetAtPt (unsigned int nIndex)
 Get element value from specific index. More...
 
void ResetValue ()
 Reset every element to zero. More...
 
void ScalarMultiple (CKNComplex Scalar)
 Scalar multiple operation. More...
 
void ScalarMultiple (double fScalar)
 Scalar multiple operation. More...
 
void ScalarDivision (CKNComplex Scalar)
 Scalar division operation. More...
 
void ScalarDivision (double fScalar)
 Scalar division operation. More...
 
void BuildRandomVector ()
 Building vector that has random value elements. More...
 
void Normalize (bool bMPI=false)
 Normalize vector with norm. More...
 
double GetNorm (bool bMPI=false)
 Getting norm of vector. More...
 
void MinusVector (CKNVector *vector)
 Do minus operation between vectors. More...
 
void PlusVector (CKNVector *vector)
 Do plus operation between vectors. More...
 
void ScalarMultiThanMinusVector (double fScalar, CKNVector *vector)
 Do minus operation after scalar multiple to operand between vectors. More...
 
void ReorthogonalizationVector (CKNVector *pVector, CKNComplex complex)
 Do reorthogonalization. More...
 
void Finalize ()
 Free allocated memory for vector elements. More...
 
bool InsertVector (unsigned int nStartIndex, CKNMatrixOperation::CKNVector *pVector)
 
bool Serialize (double *pBuffer, bool bStore)
 Serialize vector. More...
 
CKNComplex operator* (CKNVector &vector)
 operation overload for dot product with reference parameter More...
 
CKNComplex operator* (CKNVector *vector)
 operation overload for dot product with pointer parameter More...
 
CKNVector operator- (CKNVector &vector)
 operation overload for vector minus operation with reference parameter More...
 
CKNVector operator- (CKNVector *vector)
 operation overload for vector minus operation with pointer parameter More...
 
CKNVector operator+ (CKNVector &vector)
 operation overload for vector plus operation with reference parameter More...
 
CKNVector operator+ (CKNVector *vector)
 operation overload for vector plus operation with pointer parameter More...
 
void operator= (CKNVector &vector)
 operation overload for subsitution with reference parameter More...
 
void operator= (CKNVector *vector)
 operation overload for subsitution with pointer parameter More...
 

Private Attributes

double_vector_t m_vectValueRealBuffer
 A member variable for saving none zero elements. More...
 
double_vector_t m_vectValueImaginaryBuffer
 A member variable for saving none zero elements. More...
 
unsigned int m_nValueCount
 A numbers of elements. More...
 
CKNComplex m_rtnTemp
 Temporary variable for return value. More...
 

Friends

class CKNLanczosMethod
 
class CKNMatrixOperation
 
class CKNMPIManager
 

Detailed Description

This class for describing vector for Lanczos method.

Date
27/May/2014
Author
Kyu Nam Cho(mysto.nosp@m.us@k.nosp@m.orea..nosp@m.ac.k.nosp@m.r), Hoon Ryu(elec1.nosp@m.020@.nosp@m.gmail.nosp@m..com)

Definition at line 60 of file KNMatrixOperation.h.

Member Typedef Documentation

Constructor & Destructor Documentation

CKNMatrixOperation::CKNVector::CKNVector ( )

Constructor.


        CKNVector Class member function - Start

Definition at line 28 of file KNMatrixOperation.cpp.

References m_nValueCount.

29 {
30  m_nValueCount = 0;
31 }
unsigned int m_nValueCount
A numbers of elements.
CKNMatrixOperation::CKNVector::~CKNVector ( )

Destructor.

Definition at line 33 of file KNMatrixOperation.cpp.

34 {
35 }

Member Function Documentation

void CKNMatrixOperation::CKNVector::BuildRandomVector ( )

Building vector that has random value elements.

Definition at line 201 of file KNMatrixOperation.cpp.

202 {
203  unsigned int i;
204 
205  srand((unsigned int)time(NULL));
206  for (i = 0; i < m_nValueCount; i++)
207  {
208  m_vectValueRealBuffer[i] = rand();
209  m_vectValueImaginaryBuffer[i] = rand();
210  }
211 }
unsigned int m_nValueCount
A numbers of elements.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
void CKNMatrixOperation::CKNVector::Finalize ( )
CKNComplex CKNMatrixOperation::CKNVector::GetAt ( unsigned int  nIndex)

Get element value from specific index.

Parameters
nIndexSpecific element index that want to get
Returns
element value

Definition at line 100 of file KNMatrixOperation.cpp.

References ERROR_OUT_OF_RANGE, and CKNComplex::SetComplexNumber().

Referenced by CKNLanczosTest::AuditResult_WF(), CKNLanczosResultAudit::AuditResult_WF(), CKNHamiltonianBuilder::BuildOffsiteMatrixFor10Band(), CKNLanczosMethod::BuildWaveFunction(), CKNLanczosMethod::CalculateEigenVector(), CKNMPIManager::ConvertVectorToMPIComplexBuffer(), CKNMatrixOperation::CKNCSR::DiagonalOperation(), InsertVector(), CKNMatrixOperation::MVMul(), operator*(), CKNMatrixOperation::CKNCSR::operator*(), operator+(), operator-(), CKNLanczosMethod::RecalcuWaveFunction(), IKNGeometricUnitCellInfo::RotateAxis(), IKNGeometricUnitCellInfo::RotateNeighbor(), CKNHamiltonianBuilder::RotateTransMatrixFor10Band(), CKNLanczosMethod::SaveLanczosResult(), CKNLanczosTest::SaveResult(), CKNMatrixOperation::CKNDMatrix::SetColumnElement(), CKNMatrixOperation::CKNDMatrix::SetDiagonal(), CKNMatrixOperation::CKNDMatrix::SetRowElement(), CKNIPCCUtility::ShowDoubleVector(), and CKNMatrixDebug::ShowDoubleVector().

101 {
102  CKNComplex rtnComplex;
103 
104  if (nIndex > GetSize())
105  {
106  throw ERROR_OUT_OF_RANGE;
107  return rtnComplex;
108  }
109 
111  return rtnComplex;
112 }
const unsigned long ERROR_OUT_OF_RANGE
Error code that means during access vector or matrix input index out of range.
Definition: CKNGlobal.h:63
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18
void SetComplexNumber(double fReal, double fImaginaray)
Set Complex number using real part and imaginary part.
Definition: KNComplex.cpp:59

Here is the call graph for this function:

Here is the caller graph for this function:

CKNComplex * CKNMatrixOperation::CKNVector::GetAtPt ( unsigned int  nIndex)

Get element value from specific index.

Parameters
nIndexSpecific element index that want to get
Returns
Vector class pointer

Definition at line 84 of file KNMatrixOperation.cpp.

References ERROR_OUT_OF_RANGE.

Referenced by MinusVector(), and PlusVector().

85 {
86  if (nIndex > GetSize())
87  {
88  throw ERROR_OUT_OF_RANGE;
89  return NULL;
90  }
91 
93  return &m_rtnTemp;
94 }
const unsigned long ERROR_OUT_OF_RANGE
Error code that means during access vector or matrix input index out of range.
Definition: CKNGlobal.h:63
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
CKNComplex m_rtnTemp
Temporary variable for return value.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
void SetComplexNumber(double fReal, double fImaginaray)
Set Complex number using real part and imaginary part.
Definition: KNComplex.cpp:59

Here is the caller graph for this function:

double CKNMatrixOperation::CKNVector::GetNorm ( bool  bMPI = false)

Getting norm of vector.

Parameters
bMPICurrently running under MPI or not
Returns
Norm value

Definition at line 232 of file KNMatrixOperation.cpp.

References CKNMPIManager::AllReduceDouble(), and LOOP_OPTIMIZE_COUNT.

Referenced by CKNLanczosTest::AuditResult_EV(), CKNLanczosResultAudit::AuditResult_EV(), CKNHamiltonianBuilder::BuildOffsiteMatrixFor10Band(), CKNLanczosMethod::DoResidualCheck(), CKNMatrixOperation::IsSame(), CKNLanczosMethod::LanczosIterationLoop(), and CKNLanczosMethod::MergeDegeneratedEigenvalues().

233 {
234  unsigned int i;
235  CKNComplex PowerTotal;
236  double fTotal = 0.0;
237  unsigned int nLeft = m_nValueCount % LOOP_OPTIMIZE_COUNT;
238  double fNorm;
239  double *pReal = m_vectValueRealBuffer.data();
240  double *pImaginary = m_vectValueImaginaryBuffer.data();
241 
242 #pragma omp parallel for reduction(+:fTotal)
243  for (i = 0; i < m_nValueCount; i++)
244  {
245  const double fReal = pReal[i];
246  const double fImaginary = pImaginary[i];
247 
248  //fNorm = sqrt(m_vectValueRealBuffer[i] * m_vectValueRealBuffer[i] + m_vectValueImaginaryBuffer[i] * m_vectValueImaginaryBuffer[i]);
249  /*fNorm = sqrt(fReal * fReal + fImaginary * fImaginary);
250  fTotal += (fNorm * fNorm);*/
251  fNorm = fReal * fReal + fImaginary * fImaginary;
252  fTotal += fNorm;
253  }
254 
255  if (bMPI)
256  fTotal = CKNMPIManager::AllReduceDouble(fTotal);
257  return sqrt(fTotal);
258 }
unsigned int m_nValueCount
A numbers of elements.
#define LOOP_OPTIMIZE_COUNT
static double AllReduceDouble(double fNumber)
Do all reduce function with CKNComplex.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
This class for complex operation and saving value.
Definition: KNComplex.h:18

Here is the call graph for this function:

Here is the caller graph for this function:

bool CKNMatrixOperation::CKNVector::InsertVector ( unsigned int  nStartIndex,
CKNMatrixOperation::CKNVector pVector 
)
Parameters
nStartIndexStart index that position of want to insert
pVectorSource vector
Returns
Success or fail

Definition at line 378 of file KNMatrixOperation.cpp.

References GetAt(), CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), and GetSize().

379 {
380  bool bRtn = false;
381  unsigned int i;
382 
383  if (nStartIndex > m_nValueCount || nStartIndex + pVector->GetSize() > m_nValueCount)
384  return bRtn;
385 
386  for (i = 0; i < pVector->GetSize(); i++)
387  {
388  m_vectValueRealBuffer[nStartIndex + i] = pVector->GetAt(i).GetRealNumber();;
389  m_vectValueImaginaryBuffer[nStartIndex + i] = pVector->GetAt(i).GetImaginaryNumber();
390  }
391 
392  bRtn = true;
393  return bRtn;
394 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
unsigned int m_nValueCount
A numbers of elements.
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.

Here is the call graph for this function:

void CKNMatrixOperation::CKNVector::MinusVector ( CKNVector vector)

Do minus operation between vectors.

Parameters
vectorvector that is used in minus operation

Definition at line 322 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetAtPt(), CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), and GetSize().

Referenced by CKNLanczosTest::AuditResult_EV(), CKNLanczosResultAudit::AuditResult_EV(), CKNLanczosMethod::DoResidualCheck(), CKNMatrixOperation::Gram_schmidt(), CKNMatrixOperation::IsSame(), and CKNLanczosMethod::MergeDegeneratedEigenvalues().

323 {
324  unsigned int i, nSize = GetSize();
325  CKNComplex *pOperand1, *pOperand2;
326 
327  if (nSize != vector->GetSize())
328  {
330  return;
331  }
332 
333  for (i = 0; i < nSize; i++)
334  {
335  pOperand1 = GetAtPt(i);
336  pOperand2 = vector->GetAtPt(i);
337 
338  SetAt(i, pOperand1->GetRealNumber() - pOperand2->GetRealNumber(), pOperand1->GetImaginaryNumber() - pOperand2->GetImaginaryNumber());
339  }
340 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
CKNComplex * GetAtPt(unsigned int nIndex)
Get element value from specific index.
void SetAt(unsigned int nIndex, CKNComplex value)
Set element value in specific index, Call by value.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNMatrixOperation::CKNVector::Normalize ( bool  bMPI = false)

Normalize vector with norm.

Parameters
bMPIOperation with MPI environment or not

Definition at line 216 of file KNMatrixOperation.cpp.

Referenced by CKNMatrixOperation::Gram_schmidt(), and CKNLanczosMethod::LanczosIteration().

217 {
218  double fVectorSize = GetNorm(bMPI);
219  unsigned int i;
220 
221  for (i = 0; i < m_nValueCount; i++)
222  {
223  m_vectValueRealBuffer[i] /= fVectorSize;
224  m_vectValueImaginaryBuffer[i] /= fVectorSize;
225  }
226 }
unsigned int m_nValueCount
A numbers of elements.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double GetNorm(bool bMPI=false)
Getting norm of vector.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.

Here is the caller graph for this function:

CKNComplex CKNMatrixOperation::CKNVector::operator* ( CKNVector vector)

operation overload for dot product with reference parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 443 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetAt(), and GetSize().

444 {
445  CKNComplex Rtn;
446  unsigned int i, nSize = GetSize();
447 
448  if (nSize != vector.GetSize())
449  {
451  return Rtn;
452  }
453 
454  for (i = 0; i < nSize; i++)
455  {
456  Rtn += (GetAt(i) * vector.GetAt(i));
457  }
458  return Rtn;
459 }
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18

Here is the call graph for this function:

CKNComplex CKNMatrixOperation::CKNVector::operator* ( CKNVector vector)

operation overload for dot product with pointer parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 434 of file KNMatrixOperation.cpp.

References operator*().

435 {
436  return operator*((*vector));
437 }
CKNComplex operator*(CKNVector &vector)
operation overload for dot product with reference parameter

Here is the call graph for this function:

CKNMatrixOperation::CKNVector CKNMatrixOperation::CKNVector::operator+ ( CKNVector vector)

operation overload for vector plus operation with reference parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 507 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetAt(), GetSize(), SetAt(), and SetSize().

508 {
509  CKNVector rtnVector;
510  unsigned int i, nSize = GetSize();
511 
512  if (nSize != vector.GetSize())
513  {
515  return rtnVector;
516  }
517 
518  rtnVector.SetSize(nSize);
519  for (i = 0; i < nSize; i++)
520  {
521  rtnVector.SetAt(i, GetAt(i) + vector.GetAt(i));
522  }
523 
524  return rtnVector;
525 }
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
unsigned int GetSize()
Return Vector elements size.

Here is the call graph for this function:

CKNMatrixOperation::CKNVector CKNMatrixOperation::CKNVector::operator+ ( CKNVector vector)

operation overload for vector plus operation with pointer parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 498 of file KNMatrixOperation.cpp.

499 {
500  return operator+((*vector));
501 }
CKNVector operator+(CKNVector &vector)
operation overload for vector plus operation with reference parameter
CKNMatrixOperation::CKNVector CKNMatrixOperation::CKNVector::operator- ( CKNVector vector)

operation overload for vector minus operation with reference parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 474 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetAt(), GetSize(), SetAt(), and SetSize().

475 {
476  CKNVector rtnVector;
477  unsigned int i, nSize = GetSize();
478 
479  if (nSize != vector.GetSize())
480  {
482  return rtnVector;
483  }
484 
485  rtnVector.SetSize(nSize);
486 
487  for (i = 0; i < nSize; i++)
488  {
489  rtnVector.SetAt(i, GetAt(i) - vector.GetAt(i));
490  }
491  return rtnVector;
492 }
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
unsigned int GetSize()
Return Vector elements size.

Here is the call graph for this function:

CKNMatrixOperation::CKNVector CKNMatrixOperation::CKNVector::operator- ( CKNVector vector)

operation overload for vector minus operation with pointer parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 465 of file KNMatrixOperation.cpp.

466 {
467  return operator-((*vector));
468 }
CKNVector operator-(CKNVector &vector)
operation overload for vector minus operation with reference parameter
void CKNMatrixOperation::CKNVector::operator= ( CKNVector vector)

operation overload for subsitution with reference parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 540 of file KNMatrixOperation.cpp.

References GetSize(), m_vectValueImaginaryBuffer, and m_vectValueRealBuffer.

541 {
542  unsigned int i, nSize = vector.GetSize();
543  double *pReal = NULL, *pImaginary = NULL;
544  double *pSourceReal = NULL, *pSourceImagianry = NULL;
545 
546  SetSize(nSize);
547 
548  pReal = m_vectValueRealBuffer.data();
549  pImaginary = m_vectValueImaginaryBuffer.data();
550  pSourceReal = vector.m_vectValueRealBuffer.data();
551  pSourceImagianry = vector.m_vectValueImaginaryBuffer.data();
552 
553 #pragma omp parallel for
554  for (i = 0; i < nSize; i++)
555  {
556  pReal[i] = pSourceReal[i];
557  pImaginary[i] = pSourceImagianry[i];
558  }
559 }
void SetSize(unsigned int nSize)
Set Vector elements size.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.

Here is the call graph for this function:

void CKNMatrixOperation::CKNVector::operator= ( CKNVector vector)

operation overload for subsitution with pointer parameter

Parameters
vectorVector operand
Returns
Operation result

Definition at line 531 of file KNMatrixOperation.cpp.

532 {
533  operator=((*vector));
534 }
void operator=(CKNVector &vector)
operation overload for subsitution with reference parameter
void CKNMatrixOperation::CKNVector::PlusVector ( CKNVector vector)

Do plus operation between vectors.

Parameters
vectorvector that is used in plus operation

Definition at line 345 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetAtPt(), CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), and GetSize().

346 {
347  unsigned int i, nSize = GetSize();
348  CKNComplex *pOperand1, *pOperand2;
349 
350  if (nSize != vector->GetSize())
351  {
353  return;
354  }
355 
356  for (i = 0; i < nSize; i++)
357  {
358  pOperand1 = GetAtPt(i);
359  pOperand2 = vector->GetAtPt(i);
360 
361  SetAt(i, pOperand1->GetRealNumber() + pOperand2->GetRealNumber(), pOperand1->GetImaginaryNumber() + pOperand2->GetImaginaryNumber());
362  }
363 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
CKNComplex * GetAtPt(unsigned int nIndex)
Get element value from specific index.
void SetAt(unsigned int nIndex, CKNComplex value)
Set element value in specific index, Call by value.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18

Here is the call graph for this function:

void CKNMatrixOperation::CKNVector::ReorthogonalizationVector ( CKNVector pVector,
CKNComplex  complex 
)

Do reorthogonalization.

Parameters
pVectorTarget vector for orthogonalization
complexInput scalar

Definition at line 293 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), GetSize(), m_vectValueImaginaryBuffer, and m_vectValueRealBuffer.

294 {
295  unsigned int i, nSize = GetSize();
296  double *pReal = NULL, *pImaginary = NULL;
297  double *pOperandReal = NULL, *pOperandImagianray = NULL;
298  double fReal = complex.GetRealNumber(), fImaginary = complex.GetImaginaryNumber();
299 
300  if (nSize != pVector->GetSize())
301  {
303  return;
304  }
305 
306  pReal = m_vectValueRealBuffer.data();
307  pImaginary = m_vectValueImaginaryBuffer.data();
308  pOperandReal = pVector->m_vectValueRealBuffer.data();
309  pOperandImagianray = pVector->m_vectValueImaginaryBuffer.data();
310 
311 #pragma omp parallel for
312  for (i = 0; i < nSize; i++)
313  {
314  pReal[i] = pReal[i] - fReal* pOperandReal[i] + fImaginary * pOperandImagianray[i];
315  pImaginary[i] = pImaginary[i] - fReal * pOperandImagianray[i] - fImaginary * pOperandReal[i];
316  }
317 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.

Here is the call graph for this function:

void CKNMatrixOperation::CKNVector::ResetValue ( )

Reset every element to zero.

Definition at line 114 of file KNMatrixOperation.cpp.

115 {
116  unsigned int i;
117 
118  for (i = 0; i < GetSize(); i++)
119  {
120  m_vectValueRealBuffer[i] = 0.;
122  }
123 
124 }
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
void CKNMatrixOperation::CKNVector::ScalarDivision ( CKNComplex  Scalar)

Scalar division operation.

Parameters
ScalarScalar value that want to use in operation

Definition at line 164 of file KNMatrixOperation.cpp.

References CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), and CKNComplex::SetComplexNumber().

Referenced by CKNLanczosMethod::LanczosIterationLoop(), and operator/().

165 {
166  unsigned int i;
167  CKNComplex tempComplex;
168 
169  for (i = 0; i < GetSize(); i++)
170  {
172  tempComplex = tempComplex / Scalar;
173 
174  m_vectValueRealBuffer[i] = tempComplex.GetRealNumber();
176  }
177 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18
void SetComplexNumber(double fReal, double fImaginaray)
Set Complex number using real part and imaginary part.
Definition: KNComplex.cpp:59

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNMatrixOperation::CKNVector::ScalarDivision ( double  fScalar)

Scalar division operation.

Parameters
fScalarScalar value that want to use in operation

Definition at line 182 of file KNMatrixOperation.cpp.

183 {
184  double *pReal = NULL, *pImaginary = NULL;
185  unsigned int i;
186  unsigned int nSize = GetSize();
187 
188  pReal = m_vectValueRealBuffer.data();
189  pImaginary = m_vectValueImaginaryBuffer.data();
190 
191 #pragma omp parallel for
192  for (i = 0; i < nSize ; i++)
193  {
194  /*m_vectValueRealBuffer[i] /= fScalar;
195  m_vectValueImaginaryBuffer[i] /= fScalar;*/
196  pReal[i] /= fScalar;
197  pImaginary[i] /= fScalar;
198  }
199 }
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
void CKNMatrixOperation::CKNVector::ScalarMultiple ( CKNComplex  Scalar)

Scalar multiple operation.

Parameters
ScalarScalar value that want to use in operation

Definition at line 129 of file KNMatrixOperation.cpp.

References CKNComplex::GetImaginaryNumber(), CKNComplex::GetRealNumber(), and CKNComplex::SetComplexNumber().

Referenced by CKNLanczosTest::AuditResult_EV(), CKNLanczosResultAudit::AuditResult_EV(), CKNLanczosMethod::DoResidualCheck(), CKNMatrixOperation::Gram_schmidt(), CKNLanczosMethod::MergeDegeneratedEigenvalues(), and operator*().

130 {
131  unsigned int i;
132  CKNComplex tempComplex;
133 
134  for (i = 0; i < GetSize(); i++)
135  {
137  tempComplex = tempComplex * Scalar;
138 
139  m_vectValueRealBuffer[i] = tempComplex.GetRealNumber();
141  }
142 
143  return;
144 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
This class for complex operation and saving value.
Definition: KNComplex.h:18
void SetComplexNumber(double fReal, double fImaginaray)
Set Complex number using real part and imaginary part.
Definition: KNComplex.cpp:59

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNMatrixOperation::CKNVector::ScalarMultiple ( double  fScalar)

Scalar multiple operation.

Parameters
fScalarScalar value that want to use in operation

Definition at line 149 of file KNMatrixOperation.cpp.

150 {
151  //double fReal, fImaginary;
152  unsigned int i;
153 
154  for (i = 0; i < GetSize(); i++)
155  {
156  m_vectValueRealBuffer[i] *= fScalar;
157  m_vectValueImaginaryBuffer[i] *= fScalar;
158  }
159 }
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
void CKNMatrixOperation::CKNVector::ScalarMultiThanMinusVector ( double  fScalar,
CKNVector vector 
)

Do minus operation after scalar multiple to operand between vectors.

Parameters
fScalarScalar factor
vectorVector operand for minus operation

Definition at line 264 of file KNMatrixOperation.cpp.

References ERROR_WRONG_ORDER_OPERATION, GetSize(), m_vectValueImaginaryBuffer, and m_vectValueRealBuffer.

Referenced by CKNLanczosMethod::LanczosIterationLoop().

265 {
266  unsigned int i, nSize = GetSize();
267  double *pReal = NULL, *pImaginary = NULL;
268  double *pOperandReal = NULL, *pOperandImagianray = NULL;
269 
270  if (nSize != vector->GetSize())
271  {
273  return;
274  }
275 
276  pReal = m_vectValueRealBuffer.data();
277  pImaginary = m_vectValueImaginaryBuffer.data();
278  pOperandReal = vector->m_vectValueRealBuffer.data();
279  pOperandImagianray = vector->m_vectValueImaginaryBuffer.data();
280 
281 #pragma omp parallel for
282  for (i = 0; i < nSize; i++)
283  {
284  pReal[i] = pReal[i] - fScalar * pOperandReal[i];
285  pImaginary[i] = pImaginary[i] - fScalar * pOperandImagianray[i];
286  }
287 }
const unsigned long ERROR_WRONG_ORDER_OPERATION
Error code that means during operation between vector & vector, matrix & vector order don't match...
Definition: CKNGlobal.h:64
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CKNMatrixOperation::CKNVector::Serialize ( double *  pBuffer,
bool  bStore 
)

Serialize vector.

Parameters
pBufferSaving/Loading buffer
bStoreSaving(true) or Loading(false)
Returns
Operation success or not

Definition at line 401 of file KNMatrixOperation.cpp.

Referenced by CKNMPIManager::ReceiveVectorSync(), and CKNMPIManager::SendVectorSync().

402 {
403  double *pReal = NULL, *pImaginariy = NULL;
404  bool bRtn = false;
405 
406  if( NULL == pBuffer )
407  return bRtn;
408 
409  if( bStore)
410  {
411  pReal = m_vectValueRealBuffer.data();
412  memcpy(pReal, pBuffer, m_nValueCount * sizeof(double));
413 
414  pImaginariy = m_vectValueImaginaryBuffer.data();
415  memcpy(pImaginariy, pBuffer + m_nValueCount, m_nValueCount * sizeof(double));
416  }
417  else
418  {
419  pReal = m_vectValueRealBuffer.data();
420  memcpy(pBuffer, pReal, m_nValueCount * sizeof(double));
421 
422  pImaginariy = m_vectValueImaginaryBuffer.data();
423  memcpy(pBuffer + m_nValueCount, pImaginariy, m_nValueCount * sizeof(double));
424  }
425 
426  bRtn = true;
427  return bRtn;
428 }
unsigned int m_nValueCount
A numbers of elements.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.

Here is the caller graph for this function:

void CKNMatrixOperation::CKNVector::SetAt ( unsigned int  nIndex,
CKNComplex  value 
)

Set element value in specific index, Call by value.

Parameters
nIndexSpecific element index that want to set
valueelement value

Definition at line 54 of file KNMatrixOperation.cpp.

References CKNComplex::GetImaginaryNumber(), and CKNComplex::GetRealNumber().

Referenced by CKNTBMS_Solver::ApplyPhPotential(), CKNHamiltonianBuilder::BuildHaaDiagonalFor10Band(), CKNHamiltonianBuilder::BuildHccDiagonalFor10Band(), CKNZincblendeParam::BuildMatrix(), CKNLanczosMethod::BuildWaveFunction(), CKNLanczosMethod::CalculateEigenVector(), CKNMatrixOperation::CKNDMatrix::GetColumnByVector(), CKNMatrixOperation::CKNDMatrix::GetRowByVector(), CKNLanczosMethod::LanczosIteration(), CKNMatrixOperation::MVMul(), CKNMatrixOperation::CKNCSR::operator*(), operator+(), operator-(), CKNLanczosMethod::RecalcuWaveFunction(), IKNGeometricUnitCellInfo::RotateAxis(), IKNGeometricUnitCellInfo::RotateNeighbor(), CKNHamiltonianBuilder::RotateTransMatrixFor10Band(), and CKNMPIManager::SplitVector().

55 {
56  SetAt(nIndex, value.GetRealNumber(), value.GetImaginaryNumber());
57 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
void SetAt(unsigned int nIndex, CKNComplex value)
Set element value in specific index, Call by value.

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNMatrixOperation::CKNVector::SetAt ( unsigned int  nIndex,
double  fReal,
double  fImaginary 
)

Set element value in specific index.

Parameters
nIndexSpecific element index that want to set
fRealReal number of element value
fImaginaryImaginary number of element value

Definition at line 69 of file KNMatrixOperation.cpp.

References ERROR_OUT_OF_RANGE, and THROW_END_EXIT.

70 {
71  if (nIndex > GetSize())
72  {
74  }
75 
76  m_vectValueRealBuffer[nIndex] = fReal;
77  m_vectValueImaginaryBuffer[nIndex] = fImaginary;
78 }
#define THROW_END_EXIT(EXCEPTION_NAME)
< Macro for exception throw than exit program
Definition: CKNGlobal.h:11
const unsigned long ERROR_OUT_OF_RANGE
Error code that means during access vector or matrix input index out of range.
Definition: CKNGlobal.h:63
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.
unsigned int GetSize()
Return Vector elements size.
void CKNMatrixOperation::CKNVector::SetAtEx ( unsigned int  nIndex,
CKNComplex pValue 
)

Set element value in specific index, Call by reference.

Definition at line 59 of file KNMatrixOperation.cpp.

References CKNComplex::GetImaginaryNumber(), and CKNComplex::GetRealNumber().

60 {
61  SetAt(nIndex, pValue->GetRealNumber(), pValue->GetImaginaryNumber());
62 }
double GetImaginaryNumber() const
Get imaginary part.
Definition: KNComplex.h:27
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
void SetAt(unsigned int nIndex, CKNComplex value)
Set element value in specific index, Call by value.

Here is the call graph for this function:

void CKNMatrixOperation::CKNVector::SetSize ( unsigned int  nSize)

Set Vector elements size.

Parameters
nSizeVector elements size

Definition at line 40 of file KNMatrixOperation.cpp.

Referenced by CKNLanczosMethod::AppendEigenVector(), CKNTBMS_Solver::ApplyPhPotential(), CKNLanczosTest::AuditResult_EV(), CKNLanczosResultAudit::AuditResult_EV(), CKNHamiltonianBuilder::BuildHonsiteBasicMatrixFor10Band(), CKNZincblendeParam::BuildMatrix(), CKNLanczosMethod::BuildWaveFunction(), CKNLanczosMethod::DoResidualCheck(), CKNMatrixOperation::CKNDMatrix::GetColumnByVector(), CKNMatrixOperation::CKNDMatrix::GetRowByVector(), CKNLanczosMethod::LanczosIteration(), CKNLanczosMethod::LanczosIterationLoop(), CKNLanczosMethod::MergeDegeneratedEigenvalues(), CKNMatrixOperation::MVMul(), CKNMatrixOperation::MVMulOptimal(), CKNMatrixOperation::CKNCSR::operator*(), operator+(), operator-(), IKNGeometricUnitCellInfo::RotateAxis(), IKNGeometricUnitCellInfo::RotateNeighbor(), CKNHamiltonianBuilder::RotateTransMatrixFor10Band(), CKNLanczosMethod::SortSolution(), and CKNMPIManager::SplitVector().

41 {
42  if (nSize == m_nValueCount)
43  return;
44 
45  m_nValueCount = nSize;
46  m_vectValueRealBuffer.resize(nSize);
47  m_vectValueImaginaryBuffer.resize(nSize);
48 }
unsigned int m_nValueCount
A numbers of elements.
double_vector_t m_vectValueImaginaryBuffer
A member variable for saving none zero elements.
double_vector_t m_vectValueRealBuffer
A member variable for saving none zero elements.

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class CKNLanczosMethod
friend

Definition at line 109 of file KNMatrixOperation.h.

friend class CKNMatrixOperation
friend

Definition at line 110 of file KNMatrixOperation.h.

friend class CKNMPIManager
friend

Definition at line 111 of file KNMatrixOperation.h.

Member Data Documentation

unsigned int CKNMatrixOperation::CKNVector::m_nValueCount
private

A numbers of elements.

Definition at line 106 of file KNMatrixOperation.h.

Referenced by CKNVector(), and GetSize().

CKNComplex CKNMatrixOperation::CKNVector::m_rtnTemp
private

Temporary variable for return value.

Definition at line 107 of file KNMatrixOperation.h.


The documentation for this class was generated from the following files: