IPCC  1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CHamiltonianBuilder Class Reference

This class includes functions for Hamiltonian building. More...

#include "HamiltonianBuilder.h"

Collaboration diagram for CHamiltonianBuilder:
Collaboration graph

Public Member Functions

 CHamiltonianBuilder ()
 
 ~CHamiltonianBuilder ()
 

Static Public Member Functions

static bool BuildHamiltonian (CCommandFileParser::LPINPUT_CMD_PARAM lpParam, LPNEIGHBOR_MAP_INFO lpMapInfo, CMatrixOperation::CCSR *pCSRResult, unsigned int fAtomStartID)
 Build Hamiltonian matrxi from mapinfo data. More...
 
static void ResetPeriodicBinding (CMatrixOperation::CCSR *pResult, LPNEIGHBOR_MAP_INFO lpMapInfo)
 Reset Hamiltonian before applying phase. More...
 
static void FinalizeMatrixBuffer ()
 Release all temporary buffer. More...
 
static unsigned int GetBandSize ()
 

Static Private Member Functions

static void BuildHccDiagonalFor10Band (CMatrixOperation::CVector *pVector, LPGEO_PARAMETER lpParameter)
 Build cation diagonal basic element. More...
 
static void BuildHaaDiagonalFor10Band (CMatrixOperation::CVector *pVector, LPGEO_PARAMETER lpParameter)
 Build aion diagonal basic element. More...
 
static void BuildHonsiteBasicMatrixFor10Band (CMatrixOperation::CDMatrix *pMatrixHonsiteAnion, CMatrixOperation::CDMatrix *pMatrixHonsiteCation, LPGEO_PARAMETER lpParameter)
 Build aion and cation basic element. More...
 
static void BuildOffsiteMatrixFor10Band (GEO_PARAMETER &parameter, CMatrixOperation::CDMatrix *pMatrixACNbr, MATERIAL_INDEX materialFrom, MATERIAL_INDEX materialDest, CGeometricAtom::ATOM_TYPE type)
 Build offdiable elements. More...
 
static bool FillMatrixFor10Band (CMatrixOperation::CCSR *pResult, CCommandFileParser::LPINPUT_CMD_PARAM lpParam, LPNEIGHBOR_MAP_INFO lpMapInfo)
 Fill Hamiltonian matrix. More...
 
static void BuildACCANeighborFor10Band (CMatrixOperation::CDMatrix *pMatrixACNbr, CMatrixOperation::CDMatrix *pMatrixCANbr, CCommandFileParser::LPINPUT_CMD_PARAM lpParam)
 Build aion to cation, cation to aion direction calculation elements. More...
 
static void InitMatirxsFor10BandFillMatrix (CMatrixOperation::CDMatrix *pMatrixTransAnion, CMatrixOperation::CDMatrix *pMatrixTransAnionTranspos, CMatrixOperation::CDMatrix *pMatrixTransCation, CMatrixOperation::CDMatrix *pMatrixTransCationTranspos, CMatrixOperation::CDMatrix *pMatrixTempSpinUp, CMatrixOperation::CDMatrix *pMatrixTempSpinUpResult, CMatrixOperation::CDMatrix *pMatrixHonsiteAnion, CMatrixOperation::CDMatrix *pMatrixHonsiteCation)
 Initializing matrix for 10 band basis Hamiltonian. More...
 
static void RotateTransMatrixFor10Band ()
 Rotating 10 band basis anion and cation base matrix. More...
 
static void InitTransMatrixFor10Band ()
 Initializing Trans matrix for 10 band basis Hamiltonian. More...
 

Static Private Attributes

static unsigned int m_fAtomIDStartIndex = 0
 Start index of atom in shape, using in MPI running enviroment. More...
 
static unsigned int m_nBandSize
 Band size 5, 10, 20. More...
 
static double m_Trans_anion [4][4]
 Trans matrix for anion. More...
 
static double m_Trans_cation [4][4]
 Trans matrix for cation. More...
 
static vector
< CMatrixOperation::CDMatrix * > 
m_vectMatrixNbr
 Hamiltonian offdiagonal elements. More...
 
static map< int, unsigned int > m_mapMatrixIndex
 Hamiltonian offdiagonal elements mapper. More...
 

Detailed Description

This class includes functions for Hamiltonian building.

Date
25/July/2015

Definition at line 21 of file HamiltonianBuilder.h.

Constructor & Destructor Documentation

CHamiltonianBuilder::CHamiltonianBuilder ( )

Definition at line 24 of file HamiltonianBuilder.cpp.

25 {
26 }
CHamiltonianBuilder::~CHamiltonianBuilder ( )

Definition at line 29 of file HamiltonianBuilder.cpp.

30 {
31 }

Member Function Documentation

void CHamiltonianBuilder::BuildACCANeighborFor10Band ( CMatrixOperation::CDMatrix pMatrixACNbr,
CMatrixOperation::CDMatrix pMatrixCANbr,
CCommandFileParser::LPINPUT_CMD_PARAM  lpParam 
)
staticprivate

Build aion to cation, cation to aion direction calculation elements.

Parameters
[out]pMatrixACNbrOffdiagonal element of anion to ctaion compling
[out]pMatrixCANbrOffdiagonal element of ctaion to anion compling
paramterGeometric parameters
lpParamInput parameters parsing from command file

Definition at line 194 of file HamiltonianBuilder.cpp.

References CCommandFileParser::INPUT_CMD_PARAM::bNeedRotate, CMatrixOperation::CDMatrix::BuildMatrixFirst(), CGeometricShape::m_rotationMatrix, CMatrixOperation::MMMul(), CMatrixOperation::CDMatrix::SetElement(), and CMatrixOperation::CDMatrix::TrnasPos().

Referenced by FillMatrixFor10Band().

195 {
196  int i, j;
197  CMatrixOperation::CDMatrix matrixACNbr, matrixCANbr;
198  double ac_nbr_100[4][3] = { { 0.25, 0.25, 0.25 },
199  { 0.25, -0.25, -0.25 },
200  { -0.25, 0.25, -0.25 },
201  { -0.25, -0.25, 0.25 } };
202 
203  double ca_nbr_100[4][3] = { { -0.25, -0.25, -0.25 },
204  { -0.25, 0.25, 0.25 },
205  { 0.25, -0.25, 0.25 },
206  { 0.25, 0.25, -0.25 } };
207  matrixACNbr.BuildMatrixFirst(4, 3);
208  matrixCANbr.BuildMatrixFirst(4, 3);
209 
210  for (i = 0; i < 4; i++)
211  {
212  for (j = 0; j < 3; j++)
213  {
214  matrixACNbr.SetElement(i, j, ac_nbr_100[i][j], 0);
215  matrixCANbr.SetElement(i, j, ca_nbr_100[i][j], 0);
216  }
217  }
218 
219  if (lpParam->bNeedRotate)
220  {
221  matrixACNbr.TrnasPos();
222  CMatrixOperation::MMMul(&CGeometricShape::m_rotationMatrix, &matrixACNbr, pMatrixACNbr);
223  pMatrixACNbr->TrnasPos();
224 
225  matrixCANbr.TrnasPos();
226  CMatrixOperation::MMMul(&CGeometricShape::m_rotationMatrix, &matrixCANbr, pMatrixCANbr);
227  pMatrixCANbr->TrnasPos();
228  }
229  else
230  {
231  *pMatrixACNbr = matrixACNbr;
232  *pMatrixCANbr = matrixCANbr;
233  }
234 
235 }
static CMatrixOperation::CDMatrix m_rotationMatrix
Rotation matrix for given direction.
bool TrnasPos()
Transpos matrix.
bool BuildMatrixFirst(unsigned int nRow, unsigned int nColumn)
Building matrix elements.
static void MMMul(CDMatrix *pMatrix, CDMatrix *pMatrixOperand, CDMatrix *pResult)
Matrix and matrix multiple operation.
bool SetElement(unsigned int nRow, unsigned int nColumn, CComplex element)
Set matrix elements value.
Data and operation representation of Matrix.
bool bNeedRotate
Calculation parameter that need to apply rotation matrix.

Here is the call graph for this function:

Here is the caller graph for this function:

void CHamiltonianBuilder::BuildHaaDiagonalFor10Band ( CMatrixOperation::CVector pVector,
LPGEO_PARAMETER  lpParameter 
)
staticprivate

Build aion diagonal basic element.

Parameters
[out]pVectorDiagonal elements of Anion
paramterGeometric parameters

Definition at line 57 of file HamiltonianBuilder.cpp.

References GEO_PARAMETER::fEda, GEO_PARAMETER::fEpa, GEO_PARAMETER::fEsa, GEO_PARAMETER::fEstara, and CMatrixOperation::CVector::SetAt().

Referenced by BuildHonsiteBasicMatrixFor10Band().

58 {
59  int i = 0;
60  pVector->SetAt(i++, lpParameter->fEsa, 0);
61  pVector->SetAt(i++, lpParameter->fEpa, 0);
62  pVector->SetAt(i++, lpParameter->fEpa, 0);
63  pVector->SetAt(i++, lpParameter->fEpa, 0);
64  pVector->SetAt(i++, lpParameter->fEstara, 0);
65  pVector->SetAt(i++, lpParameter->fEda, 0);
66  pVector->SetAt(i++, lpParameter->fEda, 0);
67  pVector->SetAt(i++, lpParameter->fEda, 0);
68  pVector->SetAt(i++, lpParameter->fEda, 0);
69  pVector->SetAt(i++, lpParameter->fEda, 0);
70 }
void SetAt(unsigned int nIndex, CComplex 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:

bool CHamiltonianBuilder::BuildHamiltonian ( CCommandFileParser::LPINPUT_CMD_PARAM  lpParam,
LPNEIGHBOR_MAP_INFO  lpMapInfo,
CMatrixOperation::CCSR pCSRResult,
unsigned int  fAtomStartID 
)
static

Build Hamiltonian matrxi from mapinfo data.

Parameters
lpParamInput parameters parsing from command file
lpMapInfoAtom map information
[out]CMatrixOperationEmpty CSR instance
fAtomStartIDFor MPI env., Setting start row index for current node
Returns
Operation success or not

Definition at line 244 of file HamiltonianBuilder.cpp.

References FillMatrixFor10Band(), NEIGHBOR_MAP_INFO::fItemCount, m_fAtomIDStartIndex, m_nBandSize, and CCommandFileParser::INPUT_CMD_PARAM::nBandSize.

Referenced by CSPLoop::BuildHamiltonian(), and CTBMS_Solver::Launching_TBMS_Solver().

245 {
246  bool bRtn = false;
247  double nTotalAtomSize = 0;
248 
249  nTotalAtomSize = lpMapInfo->fItemCount;
250  m_fAtomIDStartIndex = fAtomStartID;
251 
252  if (10 != lpParam->nBandSize && 20 != lpParam->nBandSize)
253  m_nBandSize = 10;
254  else
255  m_nBandSize = lpParam->nBandSize;
256 
257  switch (m_nBandSize)
258  {
259  case 10:
260  bRtn = FillMatrixFor10Band(pCSRResult, lpParam, lpMapInfo);
261  break;
262  case 20:
263  break;
264  }
265 
266  bRtn = true;
267  return bRtn;
268 }
static bool FillMatrixFor10Band(CMatrixOperation::CCSR *pResult, CCommandFileParser::LPINPUT_CMD_PARAM lpParam, LPNEIGHBOR_MAP_INFO lpMapInfo)
Fill Hamiltonian matrix.
unsigned int nBandSize
Band basis size.
double fItemCount
Item count at atom map.
Definition: AtomMapInfo.h:16
static unsigned int m_nBandSize
Band size 5, 10, 20.
static unsigned int m_fAtomIDStartIndex
Start index of atom in shape, using in MPI running enviroment.

Here is the call graph for this function:

Here is the caller graph for this function:

void CHamiltonianBuilder::BuildHccDiagonalFor10Band ( CMatrixOperation::CVector pVector,
LPGEO_PARAMETER  lpParameter 
)
staticprivate

Build cation diagonal basic element.

Parameters
[out]pVectorDiagonal elements of Cation
paramterGeometric parameters

Definition at line 38 of file HamiltonianBuilder.cpp.

References GEO_PARAMETER::fEdc, GEO_PARAMETER::fEpc, GEO_PARAMETER::fEsc, GEO_PARAMETER::fEstarc, and CMatrixOperation::CVector::SetAt().

Referenced by BuildHonsiteBasicMatrixFor10Band().

39 {
40  int i = 0;
41  pVector->SetAt(i++, lpParameter->fEsc, 0);
42  pVector->SetAt(i++, lpParameter->fEpc, 0);
43  pVector->SetAt(i++, lpParameter->fEpc, 0);
44  pVector->SetAt(i++, lpParameter->fEpc, 0);
45  pVector->SetAt(i++, lpParameter->fEstarc, 0);
46  pVector->SetAt(i++, lpParameter->fEdc, 0);
47  pVector->SetAt(i++, lpParameter->fEdc, 0);
48  pVector->SetAt(i++, lpParameter->fEdc, 0);
49  pVector->SetAt(i++, lpParameter->fEdc, 0);
50  pVector->SetAt(i++, lpParameter->fEdc, 0);
51 }
void SetAt(unsigned int nIndex, CComplex 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 CHamiltonianBuilder::BuildHonsiteBasicMatrixFor10Band ( CMatrixOperation::CDMatrix pMatrixHonsiteAnion,
CMatrixOperation::CDMatrix pMatrixHonsiteCation,
LPGEO_PARAMETER  lpParameter 
)
staticprivate

Build aion and cation basic element.

Parameters
[out]pMatrixHonsiteAnionOnsite matrix block for anion
[out]pMatrixHonsiteCationOnsite matrix block for cation
lpParameterGeometric parameters

Definition at line 77 of file HamiltonianBuilder.cpp.

References BuildHaaDiagonalFor10Band(), BuildHccDiagonalFor10Band(), CMatrixOperation::CVector::Finalize(), CMatrixOperation::CDMatrix::SetDiagonal(), and CMatrixOperation::CVector::SetSize().

Referenced by FillMatrixFor10Band().

78 {
79  CMatrixOperation::CVector vectorDiagonalTemp;
80 
81  vectorDiagonalTemp.SetSize(10);
82  BuildHaaDiagonalFor10Band(&vectorDiagonalTemp, lpParameter);
83  pMatrixHonsiteAnion->SetDiagonal(vectorDiagonalTemp);
84  BuildHccDiagonalFor10Band(&vectorDiagonalTemp, lpParameter);
85  pMatrixHonsiteCation->SetDiagonal(vectorDiagonalTemp);
86 
87  vectorDiagonalTemp.Finalize();
88 }
This class for describing vector for Lanczos method.
static void BuildHaaDiagonalFor10Band(CMatrixOperation::CVector *pVector, LPGEO_PARAMETER lpParameter)
Build aion diagonal basic element.
static void BuildHccDiagonalFor10Band(CMatrixOperation::CVector *pVector, LPGEO_PARAMETER lpParameter)
Build cation diagonal basic element.
bool SetDiagonal(CVector vector)
Set diagonal elements.
void SetSize(unsigned int nSize)
Set Vector elements size.
void Finalize()
Free allocated memory for vector elements.

Here is the call graph for this function:

Here is the caller graph for this function:

void CHamiltonianBuilder::BuildOffsiteMatrixFor10Band ( GEO_PARAMETER parameter,
CMatrixOperation::CDMatrix pMatrixACNbr,
MATERIAL_INDEX  materialFrom,
MATERIAL_INDEX  materialDest,
CGeometricAtom::ATOM_TYPE  type 
)
staticprivate

Build offdiable elements.

Parameters
parameterGeometric parameters
pMatrixNbr1Offdiagonal element for neighbor 1
pMatrixNbr2Offdiagonal element for neighbor 2
pMatrixNbr3Offdiagonal element for neighbor 3
pMatrixNbr4Offdiagonal element for neighbor 4

Definition at line 97 of file HamiltonianBuilder.cpp.

References CGeometricAtom::A, CMaterialParam::BuildMaterialParam(), CMatrixOperation::CDMatrix::BuildMatrixFirst(), CTwoCenterl::BuildTwoCenterlParam(), CGeometricAtom::C, CMatrixOperation::CVector::Finalize(), GEO_PARAMETER::fL, GEO_PARAMETER::fM, GEO_PARAMETER::fN, GEO_PARAMETER::fVd1ad1c, GEO_PARAMETER::fVd1ad2c, GEO_PARAMETER::fVd1ad3c, GEO_PARAMETER::fVd1ad4c, GEO_PARAMETER::fVd1ad5c, GEO_PARAMETER::fVd1apxc, GEO_PARAMETER::fVd1apyc, GEO_PARAMETER::fVd1apzc, GEO_PARAMETER::fVd1asc, GEO_PARAMETER::fVd1astc, GEO_PARAMETER::fVd1cd1a, GEO_PARAMETER::fVd1cd2a, GEO_PARAMETER::fVd1cd3a, GEO_PARAMETER::fVd1cd4a, GEO_PARAMETER::fVd1cd5a, GEO_PARAMETER::fVd1cpxa, GEO_PARAMETER::fVd1cpya, GEO_PARAMETER::fVd1cpza, GEO_PARAMETER::fVd1csa, GEO_PARAMETER::fVd1csta, GEO_PARAMETER::fVd2ad1c, GEO_PARAMETER::fVd2ad2c, GEO_PARAMETER::fVd2ad3c, GEO_PARAMETER::fVd2ad4c, GEO_PARAMETER::fVd2ad5c, GEO_PARAMETER::fVd2apxc, GEO_PARAMETER::fVd2apyc, GEO_PARAMETER::fVd2apzc, GEO_PARAMETER::fVd2asc, GEO_PARAMETER::fVd2astc, GEO_PARAMETER::fVd2cd1a, GEO_PARAMETER::fVd2cd2a, GEO_PARAMETER::fVd2cd3a, GEO_PARAMETER::fVd2cd4a, GEO_PARAMETER::fVd2cd5a, GEO_PARAMETER::fVd2cpxa, GEO_PARAMETER::fVd2cpya, GEO_PARAMETER::fVd2cpza, GEO_PARAMETER::fVd2csa, GEO_PARAMETER::fVd2csta, GEO_PARAMETER::fVd3ad1c, GEO_PARAMETER::fVd3ad2c, GEO_PARAMETER::fVd3ad3c, GEO_PARAMETER::fVd3ad4c, GEO_PARAMETER::fVd3ad5c, GEO_PARAMETER::fVd3apxc, GEO_PARAMETER::fVd3apyc, GEO_PARAMETER::fVd3apzc, GEO_PARAMETER::fVd3asc, GEO_PARAMETER::fVd3astc, GEO_PARAMETER::fVd3cd1a, GEO_PARAMETER::fVd3cd2a, GEO_PARAMETER::fVd3cd3a, GEO_PARAMETER::fVd3cd4a, GEO_PARAMETER::fVd3cd5a, GEO_PARAMETER::fVd3cpxa, GEO_PARAMETER::fVd3cpya, GEO_PARAMETER::fVd3cpza, GEO_PARAMETER::fVd3csa, GEO_PARAMETER::fVd3csta, GEO_PARAMETER::fVd4ad1c, GEO_PARAMETER::fVd4ad2c, GEO_PARAMETER::fVd4ad3c, GEO_PARAMETER::fVd4ad4c, GEO_PARAMETER::fVd4ad5c, GEO_PARAMETER::fVd4apxc, GEO_PARAMETER::fVd4apyc, GEO_PARAMETER::fVd4apzc, GEO_PARAMETER::fVd4asc, GEO_PARAMETER::fVd4astc, GEO_PARAMETER::fVd4cd1a, GEO_PARAMETER::fVd4cd2a, GEO_PARAMETER::fVd4cd3a, GEO_PARAMETER::fVd4cd4a, GEO_PARAMETER::fVd4cd5a, GEO_PARAMETER::fVd4cpxa, GEO_PARAMETER::fVd4cpya, GEO_PARAMETER::fVd4cpza, GEO_PARAMETER::fVd4csa, GEO_PARAMETER::fVd4csta, GEO_PARAMETER::fVd5ad1c, GEO_PARAMETER::fVd5ad2c, GEO_PARAMETER::fVd5ad3c, GEO_PARAMETER::fVd5ad4c, GEO_PARAMETER::fVd5ad5c, GEO_PARAMETER::fVd5apxc, GEO_PARAMETER::fVd5apyc, GEO_PARAMETER::fVd5apzc, GEO_PARAMETER::fVd5asc, GEO_PARAMETER::fVd5astc, GEO_PARAMETER::fVd5cd1a, GEO_PARAMETER::fVd5cd2a, GEO_PARAMETER::fVd5cd3a, GEO_PARAMETER::fVd5cd4a, GEO_PARAMETER::fVd5cd5a, GEO_PARAMETER::fVd5cpxa, GEO_PARAMETER::fVd5cpya, GEO_PARAMETER::fVd5cpza, GEO_PARAMETER::fVd5csa, GEO_PARAMETER::fVd5csta, GEO_PARAMETER::fVpxad1c, GEO_PARAMETER::fVpxad2c, GEO_PARAMETER::fVpxad3c, GEO_PARAMETER::fVpxad4c, GEO_PARAMETER::fVpxad5c, GEO_PARAMETER::fVpxapxc, GEO_PARAMETER::fVpxapyc, GEO_PARAMETER::fVpxapzc, GEO_PARAMETER::fVpxasc, GEO_PARAMETER::fVpxastc, GEO_PARAMETER::fVpxcd1a, GEO_PARAMETER::fVpxcd2a, GEO_PARAMETER::fVpxcd3a, GEO_PARAMETER::fVpxcd4a, GEO_PARAMETER::fVpxcd5a, GEO_PARAMETER::fVpxcpxa, GEO_PARAMETER::fVpxcpya, GEO_PARAMETER::fVpxcpza, GEO_PARAMETER::fVpxcsa, GEO_PARAMETER::fVpxcsta, GEO_PARAMETER::fVpyad1c, GEO_PARAMETER::fVpyad2c, GEO_PARAMETER::fVpyad3c, GEO_PARAMETER::fVpyad4c, GEO_PARAMETER::fVpyad5c, GEO_PARAMETER::fVpyapxc, GEO_PARAMETER::fVpyapyc, GEO_PARAMETER::fVpyapzc, GEO_PARAMETER::fVpyasc, GEO_PARAMETER::fVpyastc, GEO_PARAMETER::fVpycd1a, GEO_PARAMETER::fVpycd2a, GEO_PARAMETER::fVpycd3a, GEO_PARAMETER::fVpycd4a, GEO_PARAMETER::fVpycd5a, GEO_PARAMETER::fVpycpxa, GEO_PARAMETER::fVpycpya, GEO_PARAMETER::fVpycpza, GEO_PARAMETER::fVpycsa, GEO_PARAMETER::fVpycsta, GEO_PARAMETER::fVpzad1c, GEO_PARAMETER::fVpzad2c, GEO_PARAMETER::fVpzad3c, GEO_PARAMETER::fVpzad4c, GEO_PARAMETER::fVpzad5c, GEO_PARAMETER::fVpzapxc, GEO_PARAMETER::fVpzapyc, GEO_PARAMETER::fVpzapzc, GEO_PARAMETER::fVpzasc, GEO_PARAMETER::fVpzastc, GEO_PARAMETER::fVpzcd1a, GEO_PARAMETER::fVpzcd2a, GEO_PARAMETER::fVpzcd3a, GEO_PARAMETER::fVpzcd4a, GEO_PARAMETER::fVpzcd5a, GEO_PARAMETER::fVpzcpxa, GEO_PARAMETER::fVpzcpya, GEO_PARAMETER::fVpzcpza, GEO_PARAMETER::fVpzcsa, GEO_PARAMETER::fVpzcsta, GEO_PARAMETER::fVsad1c, GEO_PARAMETER::fVsad2c, GEO_PARAMETER::fVsad3c, GEO_PARAMETER::fVsad4c, GEO_PARAMETER::fVsad5c, GEO_PARAMETER::fVsapxc, GEO_PARAMETER::fVsapyc, GEO_PARAMETER::fVsapzc, GEO_PARAMETER::fVsasc, GEO_PARAMETER::fVsastc, GEO_PARAMETER::fVscd1a, GEO_PARAMETER::fVscd2a, GEO_PARAMETER::fVscd3a, GEO_PARAMETER::fVscd4a, GEO_PARAMETER::fVscd5a, GEO_PARAMETER::fVscpxa, GEO_PARAMETER::fVscpya, GEO_PARAMETER::fVscpza, GEO_PARAMETER::fVscsa, GEO_PARAMETER::fVscsta, GEO_PARAMETER::fVstad1c, GEO_PARAMETER::fVstad2c, GEO_PARAMETER::fVstad3c, GEO_PARAMETER::fVstad4c, GEO_PARAMETER::fVstad5c, GEO_PARAMETER::fVstapxc, GEO_PARAMETER::fVstapyc, GEO_PARAMETER::fVstapzc, GEO_PARAMETER::fVstasc, GEO_PARAMETER::fVstastc, GEO_PARAMETER::fVstcd1a, GEO_PARAMETER::fVstcd2a, GEO_PARAMETER::fVstcd3a, GEO_PARAMETER::fVstcd4a, GEO_PARAMETER::fVstcd5a, GEO_PARAMETER::fVstcpxa, GEO_PARAMETER::fVstcpya, GEO_PARAMETER::fVstcpza, GEO_PARAMETER::fVstcsa, GEO_PARAMETER::fVstcsta, CMatrixOperation::CVector::GetAt(), CMatrixOperation::CVector::GetNorm(), CComplex::GetRealNumber(), CMatrixOperation::CDMatrix::GetRowByVector(), m_mapMatrixIndex, m_nBandSize, and m_vectMatrixNbr.

Referenced by FillMatrixFor10Band().

98 {
99  CTwoCenterl twoCenterl;
100  CMatrixOperation::CVector vectorNbr;
101  CMatrixOperation::CDMatrix *pMatrixNbr[4];
102  double fNormValue, fValueArray[10][10];
103  int i, j, k;
104  GEO_PARAMETER parameterNeighbor;
105  CMaterialParam materialParam;
106  int mapKey = materialFrom | materialDest;
107  bool bRtn;
108 
109  if (CGeometricAtom::C == type)
110  mapKey *= -1;
111 
112  if (m_mapMatrixIndex.find(mapKey) != m_mapMatrixIndex.end())
113  return;
114 
115  for (i = 0; i < 4; ++i)
116  {
117  pMatrixNbr[i] = new CMatrixOperation::CDMatrix();
118  pMatrixNbr[i]->BuildMatrixFirst(m_nBandSize, m_nBandSize);
119  }
120 
121  parameterNeighbor = materialParam.BuildMaterialParam(materialFrom, materialDest, bRtn);
122 
123  switch (type)
124  {
125  case CGeometricAtom::A:
126  for (i = 0; i < 4; i++)
127  {
128  pMatrixACNbr->GetRowByVector(i, &vectorNbr);
129  fNormValue = vectorNbr.GetNorm();
130  parameterNeighbor.fL = vectorNbr.GetAt(0).GetRealNumber() / fNormValue;
131  parameterNeighbor.fM = vectorNbr.GetAt(1).GetRealNumber() / fNormValue;
132  parameterNeighbor.fN = vectorNbr.GetAt(2).GetRealNumber() / fNormValue;
133  twoCenterl.BuildTwoCenterlParam(parameterNeighbor, CGeometricAtom::A);
134 
135  fValueArray[0][0] = parameterNeighbor.fVsasc; fValueArray[0][1] = parameterNeighbor.fVsapxc; fValueArray[0][2] = parameterNeighbor.fVsapyc; fValueArray[0][3] = parameterNeighbor.fVsapzc; fValueArray[0][4] = parameterNeighbor.fVsastc; fValueArray[0][5] = parameterNeighbor.fVsad1c; fValueArray[0][6] = parameterNeighbor.fVsad2c; fValueArray[0][7] = parameterNeighbor.fVsad3c; fValueArray[0][8] = parameterNeighbor.fVsad4c; fValueArray[0][9] = parameterNeighbor.fVsad5c;
136  fValueArray[1][0] = parameterNeighbor.fVpxasc; fValueArray[1][1] = parameterNeighbor.fVpxapxc; fValueArray[1][2] = parameterNeighbor.fVpxapyc; fValueArray[1][3] = parameterNeighbor.fVpxapzc; fValueArray[1][4] = parameterNeighbor.fVpxastc; fValueArray[1][5] = parameterNeighbor.fVpxad1c; fValueArray[1][6] = parameterNeighbor.fVpxad2c; fValueArray[1][7] = parameterNeighbor.fVpxad3c; fValueArray[1][8] = parameterNeighbor.fVpxad4c; fValueArray[1][9] = parameterNeighbor.fVpxad5c;
137  fValueArray[2][0] = parameterNeighbor.fVpyasc; fValueArray[2][1] = parameterNeighbor.fVpyapxc; fValueArray[2][2] = parameterNeighbor.fVpyapyc; fValueArray[2][3] = parameterNeighbor.fVpyapzc; fValueArray[2][4] = parameterNeighbor.fVpyastc; fValueArray[2][5] = parameterNeighbor.fVpyad1c; fValueArray[2][6] = parameterNeighbor.fVpyad2c; fValueArray[2][7] = parameterNeighbor.fVpyad3c; fValueArray[2][8] = parameterNeighbor.fVpyad4c; fValueArray[2][9] = parameterNeighbor.fVpyad5c;
138  fValueArray[3][0] = parameterNeighbor.fVpzasc; fValueArray[3][1] = parameterNeighbor.fVpzapxc; fValueArray[3][2] = parameterNeighbor.fVpzapyc; fValueArray[3][3] = parameterNeighbor.fVpzapzc; fValueArray[3][4] = parameterNeighbor.fVpzastc; fValueArray[3][5] = parameterNeighbor.fVpzad1c; fValueArray[3][6] = parameterNeighbor.fVpzad2c; fValueArray[3][7] = parameterNeighbor.fVpzad3c; fValueArray[3][8] = parameterNeighbor.fVpzad4c; fValueArray[3][9] = parameterNeighbor.fVpzad5c;
139  fValueArray[4][0] = parameterNeighbor.fVstasc; fValueArray[4][1] = parameterNeighbor.fVstapxc; fValueArray[4][2] = parameterNeighbor.fVstapyc; fValueArray[4][3] = parameterNeighbor.fVstapzc; fValueArray[4][4] = parameterNeighbor.fVstastc; fValueArray[4][5] = parameterNeighbor.fVstad1c; fValueArray[4][6] = parameterNeighbor.fVstad2c; fValueArray[4][7] = parameterNeighbor.fVstad3c; fValueArray[4][8] = parameterNeighbor.fVstad4c; fValueArray[4][9] = parameterNeighbor.fVstad5c;
140  fValueArray[5][0] = parameterNeighbor.fVd1asc; fValueArray[5][1] = parameterNeighbor.fVd1apxc; fValueArray[5][2] = parameterNeighbor.fVd1apyc; fValueArray[5][3] = parameterNeighbor.fVd1apzc; fValueArray[5][4] = parameterNeighbor.fVd1astc; fValueArray[5][5] = parameterNeighbor.fVd1ad1c; fValueArray[5][6] = parameterNeighbor.fVd1ad2c; fValueArray[5][7] = parameterNeighbor.fVd1ad3c; fValueArray[5][8] = parameterNeighbor.fVd1ad4c; fValueArray[5][9] = parameterNeighbor.fVd1ad5c;
141  fValueArray[6][0] = parameterNeighbor.fVd2asc; fValueArray[6][1] = parameterNeighbor.fVd2apxc; fValueArray[6][2] = parameterNeighbor.fVd2apyc; fValueArray[6][3] = parameterNeighbor.fVd2apzc; fValueArray[6][4] = parameterNeighbor.fVd2astc; fValueArray[6][5] = parameterNeighbor.fVd2ad1c; fValueArray[6][6] = parameterNeighbor.fVd2ad2c; fValueArray[6][7] = parameterNeighbor.fVd2ad3c; fValueArray[6][8] = parameterNeighbor.fVd2ad4c; fValueArray[6][9] = parameterNeighbor.fVd2ad5c;
142  fValueArray[7][0] = parameterNeighbor.fVd3asc; fValueArray[7][1] = parameterNeighbor.fVd3apxc; fValueArray[7][2] = parameterNeighbor.fVd3apyc; fValueArray[7][3] = parameterNeighbor.fVd3apzc; fValueArray[7][4] = parameterNeighbor.fVd3astc; fValueArray[7][5] = parameterNeighbor.fVd3ad1c; fValueArray[7][6] = parameterNeighbor.fVd3ad2c; fValueArray[7][7] = parameterNeighbor.fVd3ad3c; fValueArray[7][8] = parameterNeighbor.fVd3ad4c; fValueArray[7][9] = parameterNeighbor.fVd3ad5c;
143  fValueArray[8][0] = parameterNeighbor.fVd4asc; fValueArray[8][1] = parameterNeighbor.fVd4apxc; fValueArray[8][2] = parameterNeighbor.fVd4apyc; fValueArray[8][3] = parameterNeighbor.fVd4apzc; fValueArray[8][4] = parameterNeighbor.fVd4astc; fValueArray[8][5] = parameterNeighbor.fVd4ad1c; fValueArray[8][6] = parameterNeighbor.fVd4ad2c; fValueArray[8][7] = parameterNeighbor.fVd4ad3c; fValueArray[8][8] = parameterNeighbor.fVd4ad4c; fValueArray[8][9] = parameterNeighbor.fVd4ad5c;
144  fValueArray[9][0] = parameterNeighbor.fVd5asc; fValueArray[9][1] = parameterNeighbor.fVd5apxc; fValueArray[9][2] = parameterNeighbor.fVd5apyc; fValueArray[9][3] = parameterNeighbor.fVd5apzc; fValueArray[9][4] = parameterNeighbor.fVd5astc; fValueArray[9][5] = parameterNeighbor.fVd5ad1c; fValueArray[9][6] = parameterNeighbor.fVd5ad2c; fValueArray[9][7] = parameterNeighbor.fVd5ad3c; fValueArray[9][8] = parameterNeighbor.fVd5ad4c; fValueArray[9][9] = parameterNeighbor.fVd5ad5c;
145 
146  for (j = 0; j < 10; j++)
147  for (k = 0; k < 10; k++)
148  pMatrixNbr[i]->SetElement(j, k, fValueArray[j][k], 0);
149  }
150 
151  break;
152  case CGeometricAtom::C:
153  for (i = 0; i < 4; i++)
154  {
155  pMatrixACNbr->GetRowByVector(i, &vectorNbr);
156  fNormValue = vectorNbr.GetNorm();
157  parameterNeighbor.fL = vectorNbr.GetAt(0).GetRealNumber() / fNormValue;
158  parameterNeighbor.fM = vectorNbr.GetAt(1).GetRealNumber() / fNormValue;
159  parameterNeighbor.fN = vectorNbr.GetAt(2).GetRealNumber() / fNormValue;
160  twoCenterl.BuildTwoCenterlParam(parameterNeighbor, CGeometricAtom::C);
161 
162  fValueArray[0][0] = parameterNeighbor.fVscsa; fValueArray[0][1] = parameterNeighbor.fVscpxa; fValueArray[0][2] = parameterNeighbor.fVscpya; fValueArray[0][3] = parameterNeighbor.fVscpza; fValueArray[0][4] = parameterNeighbor.fVscsta; fValueArray[0][5] = parameterNeighbor.fVscd1a; fValueArray[0][6] = parameterNeighbor.fVscd2a; fValueArray[0][7] = parameterNeighbor.fVscd3a; fValueArray[0][8] = parameterNeighbor.fVscd4a; fValueArray[0][9] = parameterNeighbor.fVscd5a;
163  fValueArray[1][0] = parameterNeighbor.fVpxcsa; fValueArray[1][1] = parameterNeighbor.fVpxcpxa; fValueArray[1][2] = parameterNeighbor.fVpxcpya; fValueArray[1][3] = parameterNeighbor.fVpxcpza; fValueArray[1][4] = parameterNeighbor.fVpxcsta; fValueArray[1][5] = parameterNeighbor.fVpxcd1a; fValueArray[1][6] = parameterNeighbor.fVpxcd2a; fValueArray[1][7] = parameterNeighbor.fVpxcd3a; fValueArray[1][8] = parameterNeighbor.fVpxcd4a; fValueArray[1][9] = parameterNeighbor.fVpxcd5a;
164  fValueArray[2][0] = parameterNeighbor.fVpycsa; fValueArray[2][1] = parameterNeighbor.fVpycpxa; fValueArray[2][2] = parameterNeighbor.fVpycpya; fValueArray[2][3] = parameterNeighbor.fVpycpza; fValueArray[2][4] = parameterNeighbor.fVpycsta; fValueArray[2][5] = parameterNeighbor.fVpycd1a; fValueArray[2][6] = parameterNeighbor.fVpycd2a; fValueArray[2][7] = parameterNeighbor.fVpycd3a; fValueArray[2][8] = parameterNeighbor.fVpycd4a; fValueArray[2][9] = parameterNeighbor.fVpycd5a;
165  fValueArray[3][0] = parameterNeighbor.fVpzcsa; fValueArray[3][1] = parameterNeighbor.fVpzcpxa; fValueArray[3][2] = parameterNeighbor.fVpzcpya; fValueArray[3][3] = parameterNeighbor.fVpzcpza; fValueArray[3][4] = parameterNeighbor.fVpzcsta; fValueArray[3][5] = parameterNeighbor.fVpzcd1a; fValueArray[3][6] = parameterNeighbor.fVpzcd2a; fValueArray[3][7] = parameterNeighbor.fVpzcd3a; fValueArray[3][8] = parameterNeighbor.fVpzcd4a; fValueArray[3][9] = parameterNeighbor.fVpzcd5a;
166  fValueArray[4][0] = parameterNeighbor.fVstcsa; fValueArray[4][1] = parameterNeighbor.fVstcpxa; fValueArray[4][2] = parameterNeighbor.fVstcpya; fValueArray[4][3] = parameterNeighbor.fVstcpza; fValueArray[4][4] = parameterNeighbor.fVstcsta; fValueArray[4][5] = parameterNeighbor.fVstcd1a; fValueArray[4][6] = parameterNeighbor.fVstcd2a; fValueArray[4][7] = parameterNeighbor.fVstcd3a; fValueArray[4][8] = parameterNeighbor.fVstcd4a; fValueArray[4][9] = parameterNeighbor.fVstcd5a;
167  fValueArray[5][0] = parameterNeighbor.fVd1csa; fValueArray[5][1] = parameterNeighbor.fVd1cpxa; fValueArray[5][2] = parameterNeighbor.fVd1cpya; fValueArray[5][3] = parameterNeighbor.fVd1cpza; fValueArray[5][4] = parameterNeighbor.fVd1csta; fValueArray[5][5] = parameterNeighbor.fVd1cd1a; fValueArray[5][6] = parameterNeighbor.fVd1cd2a; fValueArray[5][7] = parameterNeighbor.fVd1cd3a; fValueArray[5][8] = parameterNeighbor.fVd1cd4a; fValueArray[5][9] = parameterNeighbor.fVd1cd5a;
168  fValueArray[6][0] = parameterNeighbor.fVd2csa; fValueArray[6][1] = parameterNeighbor.fVd2cpxa; fValueArray[6][2] = parameterNeighbor.fVd2cpya; fValueArray[6][3] = parameterNeighbor.fVd2cpza; fValueArray[6][4] = parameterNeighbor.fVd2csta; fValueArray[6][5] = parameterNeighbor.fVd2cd1a; fValueArray[6][6] = parameterNeighbor.fVd2cd2a; fValueArray[6][7] = parameterNeighbor.fVd2cd3a; fValueArray[6][8] = parameterNeighbor.fVd2cd4a; fValueArray[6][9] = parameterNeighbor.fVd2cd5a;
169  fValueArray[7][0] = parameterNeighbor.fVd3csa; fValueArray[7][1] = parameterNeighbor.fVd3cpxa; fValueArray[7][2] = parameterNeighbor.fVd3cpya; fValueArray[7][3] = parameterNeighbor.fVd3cpza; fValueArray[7][4] = parameterNeighbor.fVd3csta; fValueArray[7][5] = parameterNeighbor.fVd3cd1a; fValueArray[7][6] = parameterNeighbor.fVd3cd2a; fValueArray[7][7] = parameterNeighbor.fVd3cd3a; fValueArray[7][8] = parameterNeighbor.fVd3cd4a; fValueArray[7][9] = parameterNeighbor.fVd3cd5a;
170  fValueArray[8][0] = parameterNeighbor.fVd4csa; fValueArray[8][1] = parameterNeighbor.fVd4cpxa; fValueArray[8][2] = parameterNeighbor.fVd4cpya; fValueArray[8][3] = parameterNeighbor.fVd4cpza; fValueArray[8][4] = parameterNeighbor.fVd4csta; fValueArray[8][5] = parameterNeighbor.fVd4cd1a; fValueArray[8][6] = parameterNeighbor.fVd4cd2a; fValueArray[8][7] = parameterNeighbor.fVd4cd3a; fValueArray[8][8] = parameterNeighbor.fVd4cd4a; fValueArray[8][9] = parameterNeighbor.fVd4cd5a;
171  fValueArray[9][0] = parameterNeighbor.fVd5csa; fValueArray[9][1] = parameterNeighbor.fVd5cpxa; fValueArray[9][2] = parameterNeighbor.fVd5cpya; fValueArray[9][3] = parameterNeighbor.fVd5cpza; fValueArray[9][4] = parameterNeighbor.fVd5csta; fValueArray[9][5] = parameterNeighbor.fVd5cd1a; fValueArray[9][6] = parameterNeighbor.fVd5cd2a; fValueArray[9][7] = parameterNeighbor.fVd5cd3a; fValueArray[9][8] = parameterNeighbor.fVd5cd4a; fValueArray[9][9] = parameterNeighbor.fVd5cd5a;
172 
173  for (j = 0; j < 10; j++)
174  for (k = 0; k < 10; k++)
175  pMatrixNbr[i]->SetElement(j, k, fValueArray[j][k], 0);
176  }
177 
178  break;
179  }
180 
181  m_mapMatrixIndex[mapKey] = (unsigned int)m_vectMatrixNbr.size();
182  for (i = 0; i < 4; ++i)
183  m_vectMatrixNbr.push_back(pMatrixNbr[i]);
184 
185  vectorNbr.Finalize();
186 }
bool BuildMatrixFirst(unsigned int nRow, unsigned int nColumn)
Building matrix elements.
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
Class for Material Parameter.
Definition: MaterialParam.h:19
void BuildTwoCenterlParam(GEO_PARAMETER &parameter, CGeometricAtom::ATOM_TYPE type)
Calculating parameter.
Definition: TwoCenterl.cpp:23
double fVd5cd5a
--------------------— To this point generated by twoCenterl
CComplex GetAt(unsigned int nIndex)
Get element value from specific index.
static vector< CMatrixOperation::CDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
bool GetRowByVector(unsigned int nRowIndex, CMatrixOperation::CVector *pVector)
Get row elements.
Class for calculating parameter.
Definition: TwoCenterl.h:15
static unsigned int m_nBandSize
Band size 5, 10, 20.
This class for describing vector for Lanczos method.
GEO_PARAMETER BuildMaterialParam(char *pszMaterialName, bool &bResult)
Load material parameter.
Data and operation representation of Matrix.
Structure for saving geometric parameter.
double GetNorm(bool bMPI=false)
Getting norm of vector.
double GetRealNumber() const
Get real part.
Definition: Complex.h:24
void Finalize()
Free allocated memory for vector elements.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CHamiltonianBuilder::FillMatrixFor10Band ( CMatrixOperation::CCSR pResult,
CCommandFileParser::LPINPUT_CMD_PARAM  lpParam,
LPNEIGHBOR_MAP_INFO  lpMapInfo 
)
staticprivate

Fill Hamiltonian matrix.

Parameters
[out]pResultCSR instance
lpParamInput parameters parsing from command file
lpMapInfoAtom map information

Definition at line 275 of file HamiltonianBuilder.cpp.

References CGeometricAtom::A, ATOM_DEFAULT_INDEX, CCommandFileParser::INPUT_CMD_PARAM::bNeedRotate, BuildACCANeighborFor10Band(), BuildHonsiteBasicMatrixFor10Band(), CMaterialParam::BuildMaterialParam(), CMatrixOperation::CDMatrix::BuildMatrixFirst(), BuildOffsiteMatrixFor10Band(), CGeometricAtom::C, NEIGHBOR_MAP_INFO::fItemCount, CMatrixOperation::CDMatrix::GetElement(), CComplex::GetRealNumber(), CMatrixOperation::CDMatrix::GetSmallMatrix(), InitMatirxsFor10BandFillMatrix(), InitTransMatrixFor10Band(), m_fAtomIDStartIndex, m_mapMatrixIndex, m_vectMatrixNbr, CMatrixOperation::MMMul(), CCommandFileParser::INPUT_CMD_PARAM::nBandSize, CMatrixOperation::FILL_MATRIX_DATA::nColumnIndex, NEIGHBOR_MAP_INFO::pAtomType, NEIGHBOR_MAP_INFO::pDomainMaterialNumber, NEIGHBOR_MAP_INFO::pfNeighbor, NEIGHBOR_MAP_INFO::pMaterialNumber, CMatrixOperation::FILL_MATRIX_DATA::pMatrix, NEIGHBOR_MAP_INFO::pNeighborMaterial, CMatrixOperation::CCSR::PushMatrixConcurrent(), RotateTransMatrixFor10Band(), CMatrixOperation::CDMatrix::ScalarDivision(), CMatrixOperation::CDMatrix::SetElement(), CComplex::SetRealNumber(), and CMatrixOperation::CDMatrix::TrnasPos().

Referenced by BuildHamiltonian().

276 {
277  unsigned int i, j, nInsertColumn;
278  const double fBondingE = 30.; //< %(eV)
279  CMatrixOperation::CDMatrix matrixTransAnion, matrixTransAnionTranspos;
280  CMatrixOperation::CDMatrix matrixTransCation, matrixTransCationTranspos;
281  CMatrixOperation::CDMatrix matrixTempSpinUp, matrixTempSpinUpResult, matrixTempSpinUpInterResult;
282  CMatrixOperation::CDMatrix *pMatrixHonsite = NULL;
283  CMatrixOperation::CDMatrix matrixNbr1Transpos, matrixNbr2Transpos, matrixNbr3Transpos, matrixNbr4Transpos;
284  CMatrixOperation::CDMatrix matrixHonsiteAnion, matrixHonsiteCation;
285  CMatrixOperation::CDMatrix matrixACNbr, matrixCANbr;
286  CMaterialParam materialParam;
287  GEO_PARAMETER parameter;
288  bool bRtn = false;
289  int mapKey;
290 
291  BuildACCANeighborFor10Band(&matrixACNbr, &matrixCANbr, lpParam);
292 
294  if (lpParam->bNeedRotate)
296 
297  InitMatirxsFor10BandFillMatrix(&matrixTransAnion, &matrixTransAnionTranspos, &matrixTransCation, &matrixTransCationTranspos, &matrixTempSpinUp, &matrixTempSpinUpResult, &matrixHonsiteAnion, &matrixHonsiteCation);
298 
299  for (i = 0; i < lpMapInfo->fItemCount; ++i)
300  {
301  CMatrixOperation::CDMatrix matrixHonsitePassivated;
302  CMatrixOperation::CDMatrix *matrixTrans, *matrixTransTranspos;
303  CComplex tempNumber;
304  double fNeighborIndex[4];
305  int nMatrixIndex = 0;
306  CMatrixOperation::FILL_MATRIX_DATA elementData[5];
307 
308  parameter = materialParam.BuildMaterialParam(lpMapInfo->pDomainMaterialNumber[i], bRtn);
309 
310  if (false == bRtn)
311  return bRtn;
312 
313  BuildHonsiteBasicMatrixFor10Band(&matrixHonsiteAnion, &matrixHonsiteCation, &parameter);
314 
315  for (j = 0; j < 4; ++j)
316  fNeighborIndex[j] = lpMapInfo->pfNeighbor[j][i];
317 
318  if (CGeometricAtom::A == lpMapInfo->pAtomType[i])
319  {
320  pMatrixHonsite = &matrixHonsiteAnion;
321  matrixTrans = &matrixTransAnion;
322  matrixTransTranspos = &matrixTransAnionTranspos;
323  }
324  else
325  {
326  pMatrixHonsite = &matrixHonsiteCation;
327  matrixTrans = &matrixTransCation;
328  matrixTransTranspos = &matrixTransCationTranspos;
329  }
330  matrixHonsitePassivated = pMatrixHonsite;
331  pMatrixHonsite = &matrixHonsitePassivated;
332 
333  for (j = 0; j < 4; j++)
334  {
335  if (ATOM_DEFAULT_INDEX == fNeighborIndex[j])
336  {
337  CMatrixOperation::CDMatrix matrixSymetic;
338 
339  pMatrixHonsite->GetSmallMatrix(0, 0, 4, 4, &matrixTempSpinUp);
340 
341  CMatrixOperation::MMMul(matrixTrans, &matrixTempSpinUp, &matrixTempSpinUpInterResult);
342  CMatrixOperation::MMMul(&matrixTempSpinUpInterResult, matrixTransTranspos, &matrixTempSpinUpResult);
343 
344  tempNumber = matrixTempSpinUpResult.GetElement(j, j);
345  tempNumber.SetRealNumber(tempNumber.GetRealNumber() + fBondingE);
346  matrixTempSpinUpResult.SetElement(j, j, tempNumber);
347 
348  CMatrixOperation::MMMul(matrixTransTranspos, &matrixTempSpinUpResult, &matrixTempSpinUpInterResult);
349  CMatrixOperation::MMMul(&matrixTempSpinUpInterResult, matrixTrans, &matrixTempSpinUpResult);
350 
351  matrixSymetic.BuildMatrixFirst(4, 4);
352  matrixSymetic = matrixTempSpinUpResult;
353  matrixSymetic.TrnasPos();
354  matrixSymetic += matrixTempSpinUpResult;
355  matrixSymetic.ScalarDivision(2.0);
356 
357  pMatrixHonsite->SetElement(0, 0, 0, 0, 4, 4, matrixSymetic);
358 
359  elementData[j + 1].nColumnIndex = ATOM_DEFAULT_INDEX;
360  elementData[j + 1].pMatrix = NULL;
361  }
362  else
363  {
364  switch (lpMapInfo->pAtomType[i])
365  {
366  case CGeometricAtom::A:
367  BuildOffsiteMatrixFor10Band(parameter, &matrixACNbr, lpMapInfo->pMaterialNumber[i], lpMapInfo->pNeighborMaterial[j][i], lpMapInfo->pAtomType[i]);
368  break;
369  case CGeometricAtom::C:
370  BuildOffsiteMatrixFor10Band(parameter, &matrixCANbr, lpMapInfo->pMaterialNumber[i], lpMapInfo->pNeighborMaterial[j][i], lpMapInfo->pAtomType[i]);
371  break;
372  }
373 
374  mapKey = lpMapInfo->pMaterialNumber[i] | lpMapInfo->pNeighborMaterial[j][i];
375  if (CGeometricAtom::C == lpMapInfo->pAtomType[i])
376  mapKey *= -1;
377 
378  elementData[j + 1].nColumnIndex = (int)fNeighborIndex[j];
379  elementData[j + 1].pMatrix = m_vectMatrixNbr[m_mapMatrixIndex[mapKey] + j];
380  }
381  }
382 #ifdef DISABLE_MPI_ROUTINE
383  nInsertColumn = i;
384 #else //DISABLE_MPI_ROUTINE
385  nInsertColumn = i + (unsigned int)m_fAtomIDStartIndex;
386 #endif //DISABLE_MPI_ROUTINE
387  elementData[0].nColumnIndex = nInsertColumn;
388  elementData[0].pMatrix = pMatrixHonsite;
389  pResult->PushMatrixConcurrent(i, &elementData[0], false, lpParam->nBandSize);
390  }
391 
392  bRtn = true;
393  return bRtn;
394 }
bool TrnasPos()
Transpos matrix.
bool BuildMatrixFirst(unsigned int nRow, unsigned int nColumn)
Building matrix elements.
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
static void InitTransMatrixFor10Band()
Initializing Trans matrix for 10 band basis Hamiltonian.
CGeometricAtom::ATOM_TYPE * pAtomType
An array of atom type 0:A, 1:C.
Definition: AtomMapInfo.h:18
Class for Material Parameter.
Definition: MaterialParam.h:19
void SetRealNumber(double fRealNumber)
Set real part.
Definition: Complex.h:29
static void RotateTransMatrixFor10Band()
Rotating 10 band basis anion and cation base matrix.
CComplex GetElement(unsigned int nRowIndex, unsigned int nColumnIndex)
Get matrix element with row, column index.
MATERIAL_INDEX * pNeighborMaterial[MAX_NEIGHBOR]
Definition: AtomMapInfo.h:27
static vector< CMatrixOperation::CDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
static void BuildACCANeighborFor10Band(CMatrixOperation::CDMatrix *pMatrixACNbr, CMatrixOperation::CDMatrix *pMatrixCANbr, CCommandFileParser::LPINPUT_CMD_PARAM lpParam)
Build aion to cation, cation to aion direction calculation elements.
unsigned int nBandSize
Band basis size.
double fItemCount
Item count at atom map.
Definition: AtomMapInfo.h:16
static void MMMul(CDMatrix *pMatrix, CDMatrix *pMatrixOperand, CDMatrix *pResult)
Matrix and matrix multiple operation.
double * pfNeighbor[MAX_NEIGHBOR]
An array of Neighbor no 1 index.
Definition: AtomMapInfo.h:25
static void BuildHonsiteBasicMatrixFor10Band(CMatrixOperation::CDMatrix *pMatrixHonsiteAnion, CMatrixOperation::CDMatrix *pMatrixHonsiteCation, LPGEO_PARAMETER lpParameter)
Build aion and cation basic element.
#define ATOM_DEFAULT_INDEX
Atom index default value that empty atom instance.
Definition: Global.h:52
static void InitMatirxsFor10BandFillMatrix(CMatrixOperation::CDMatrix *pMatrixTransAnion, CMatrixOperation::CDMatrix *pMatrixTransAnionTranspos, CMatrixOperation::CDMatrix *pMatrixTransCation, CMatrixOperation::CDMatrix *pMatrixTransCationTranspos, CMatrixOperation::CDMatrix *pMatrixTempSpinUp, CMatrixOperation::CDMatrix *pMatrixTempSpinUpResult, CMatrixOperation::CDMatrix *pMatrixHonsiteAnion, CMatrixOperation::CDMatrix *pMatrixHonsiteCation)
Initializing matrix for 10 band basis Hamiltonian.
bool PushMatrixConcurrent(unsigned int nRow, CMatrixOperation::LPFILL_MATRIX_DATA lpData, bool bCopyZeroOnSite, int nBandSize)
void ScalarDivision(double fScalar)
Scalar division operation.
bool SetElement(unsigned int nRow, unsigned int nColumn, CComplex element)
Set matrix elements value.
This class for complex operation and saving value.
Definition: Complex.h:16
GEO_PARAMETER BuildMaterialParam(char *pszMaterialName, bool &bResult)
Load material parameter.
static void BuildOffsiteMatrixFor10Band(GEO_PARAMETER &parameter, CMatrixOperation::CDMatrix *pMatrixACNbr, MATERIAL_INDEX materialFrom, MATERIAL_INDEX materialDest, CGeometricAtom::ATOM_TYPE type)
Build offdiable elements.
Data and operation representation of Matrix.
MATERIAL_INDEX * pMaterialNumber
An array of Atom number.
Definition: AtomMapInfo.h:19
bool bNeedRotate
Calculation parameter that need to apply rotation matrix.
CMatrixOperation::CDMatrix * pMatrix
Structure for saving geometric parameter.
Hamiltonian building data.
bool GetSmallMatrix(unsigned int nRowStartIndex, unsigned int nColumnStartIndex, unsigned int nRowCount, unsigned int nColumnCount, CMatrixOperation::CDMatrix *pMatrix)
Get matrix from large matrix.
MATERIAL_INDEX * pDomainMaterialNumber
An array of Domain Atom number.
Definition: AtomMapInfo.h:20
static unsigned int m_fAtomIDStartIndex
Start index of atom in shape, using in MPI running enviroment.
double GetRealNumber() const
Get real part.
Definition: Complex.h:24

Here is the call graph for this function:

Here is the caller graph for this function:

void CHamiltonianBuilder::FinalizeMatrixBuffer ( )
static

Release all temporary buffer.

Definition at line 549 of file HamiltonianBuilder.cpp.

References m_mapMatrixIndex, and m_vectMatrixNbr.

Referenced by CSPLoop::executeSPLoop(), and CTBMS_Solver::Launching_TBMS_Solver().

550 {
551  CMatrixOperation::CDMatrix *pMatrix = NULL;
552  int i;
553 
554  for (i = 0; i < m_vectMatrixNbr.size(); ++i)
555  {
556  pMatrix = m_vectMatrixNbr[i];
557  delete pMatrix;
558  pMatrix = NULL;
559  }
560 
561  m_mapMatrixIndex.clear();
562  m_vectMatrixNbr.clear();
563 }
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
static vector< CMatrixOperation::CDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
Data and operation representation of Matrix.

Here is the caller graph for this function:

static unsigned int CHamiltonianBuilder::GetBandSize ( )
inlinestatic

Definition at line 30 of file HamiltonianBuilder.h.

30 { return m_nBandSize; };
static unsigned int m_nBandSize
Band size 5, 10, 20.
void CHamiltonianBuilder::InitMatirxsFor10BandFillMatrix ( CMatrixOperation::CDMatrix pMatrixTransAnion,
CMatrixOperation::CDMatrix pMatrixTransAnionTranspos,
CMatrixOperation::CDMatrix pMatrixTransCation,
CMatrixOperation::CDMatrix pMatrixTransCationTranspos,
CMatrixOperation::CDMatrix pMatrixTempSpinUp,
CMatrixOperation::CDMatrix pMatrixTempSpinUpResult,
CMatrixOperation::CDMatrix pMatrixHonsiteAnion,
CMatrixOperation::CDMatrix pMatrixHonsiteCation 
)
staticprivate

Initializing matrix for 10 band basis Hamiltonian.

Parameters
[out]pMatrixTransAnionMatrix for anion
[out]pMatrixTransAnionTransposTranspos of Matrix for anion
[out]pMatrixTransCationMatrix for cation
[out]pMatrixTransCationTransposTranspos of Matrix for cation
[out]pMatrixTempSpinUpMatrix for spin up
[out]pMatrixTempSpinUpResultMatrix for spin up result
[out]pMatrixHonsiteAnionOnsite matrix for anion
[out]pMatrixHonsiteCationOnsite matrix for cation

Definition at line 517 of file HamiltonianBuilder.cpp.

References CMatrixOperation::CDMatrix::BuildMatrixFirst(), m_mapMatrixIndex, m_nBandSize, m_Trans_anion, m_Trans_cation, m_vectMatrixNbr, and CMatrixOperation::CDMatrix::SetElement().

Referenced by FillMatrixFor10Band().

518 {
519  unsigned int i, j;
520 
521  pMatrixTransAnion->BuildMatrixFirst(4, 4);
522  pMatrixTransAnionTranspos->BuildMatrixFirst(4, 4);
523 
524  pMatrixTransCation->BuildMatrixFirst(4, 4);
525  pMatrixTransCationTranspos->BuildMatrixFirst(4, 4);
526 
527  pMatrixTempSpinUp->BuildMatrixFirst(4, 4);
528  pMatrixTempSpinUpResult->BuildMatrixFirst(4, 4);
529 
530  pMatrixHonsiteAnion->BuildMatrixFirst(m_nBandSize, m_nBandSize);
531  pMatrixHonsiteCation->BuildMatrixFirst(m_nBandSize, m_nBandSize);
532 
533  for (i = 0; i < 4; i++)
534  {
535  for (j = 0; j < 4; j++)
536  {
537  pMatrixTransAnion->SetElement(i, j, m_Trans_anion[i][j], 0);
538  pMatrixTransAnionTranspos->SetElement(j, i, m_Trans_anion[i][j], 0);
539 
540  pMatrixTransCation->SetElement(i, j, m_Trans_cation[i][j], 0);
541  pMatrixTransCationTranspos->SetElement(j, i, m_Trans_cation[i][j], 0);
542  }
543  }
544 
545  m_mapMatrixIndex.clear();
546  m_vectMatrixNbr.clear();
547 }
bool BuildMatrixFirst(unsigned int nRow, unsigned int nColumn)
Building matrix elements.
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
static double m_Trans_cation[4][4]
Trans matrix for cation.
static vector< CMatrixOperation::CDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
static unsigned int m_nBandSize
Band size 5, 10, 20.
bool SetElement(unsigned int nRow, unsigned int nColumn, CComplex element)
Set matrix elements value.
static double m_Trans_anion[4][4]
Trans matrix for anion.

Here is the call graph for this function:

Here is the caller graph for this function:

void CHamiltonianBuilder::InitTransMatrixFor10Band ( )
staticprivate

Initializing Trans matrix for 10 band basis Hamiltonian.

Definition at line 463 of file HamiltonianBuilder.cpp.

References m_Trans_anion, and m_Trans_cation.

Referenced by FillMatrixFor10Band().

464 {
465  m_Trans_anion[0][0] = 1. / 2;
466  m_Trans_anion[0][1] = 1. / 2;
467  m_Trans_anion[0][2] = 1. / 2;
468  m_Trans_anion[0][3] = 1. / 2;
469 
470  m_Trans_anion[1][0] = 1. / 2;
471  m_Trans_anion[1][1] = 1. / 2;
472  m_Trans_anion[1][2] = -1. / 2;
473  m_Trans_anion[1][3] = -1. / 2;
474 
475  m_Trans_anion[2][0] = 1. / 2;
476  m_Trans_anion[2][1] = -1. / 2;
477  m_Trans_anion[2][2] = 1. / 2;
478  m_Trans_anion[2][3] = -1. / 2;
479 
480  m_Trans_anion[3][0] = 1. / 2;
481  m_Trans_anion[3][1] = -1. / 2;
482  m_Trans_anion[3][2] = -1. / 2;
483  m_Trans_anion[3][3] = 1. / 2;
484 
485 
486  m_Trans_cation[0][0] = 1. / 2;
487  m_Trans_cation[0][1] = -1. / 2;
488  m_Trans_cation[0][2] = -1. / 2;
489  m_Trans_cation[0][3] = -1. / 2;
490 
491  m_Trans_cation[1][0] = 1. / 2;
492  m_Trans_cation[1][1] = -1. / 2;
493  m_Trans_cation[1][2] = 1. / 2;
494  m_Trans_cation[1][3] = 1. / 2;
495 
496  m_Trans_cation[2][0] = 1. / 2;
497  m_Trans_cation[2][1] = 1. / 2;
498  m_Trans_cation[2][2] = -1. / 2;
499  m_Trans_cation[2][3] = 1. / 2;
500 
501  m_Trans_cation[3][0] = 1. / 2;
502  m_Trans_cation[3][1] = 1. / 2;
503  m_Trans_cation[3][2] = 1. / 2;
504  m_Trans_cation[3][3] = -1. / 2;
505 }
static double m_Trans_cation[4][4]
Trans matrix for cation.
static double m_Trans_anion[4][4]
Trans matrix for anion.

Here is the caller graph for this function:

void CHamiltonianBuilder::ResetPeriodicBinding ( CMatrixOperation::CCSR pResult,
LPNEIGHBOR_MAP_INFO  lpMapInfo 
)
static

Reset Hamiltonian before applying phase.

Parameters
[out]pResultCSR instance
lpMapInfoAtom map information

Definition at line 400 of file HamiltonianBuilder.cpp.

References ATOM_DEFAULT_INDEX, CGeometricAtom::C, NEIGHBOR_MAP_INFO::fItemCount, CMatrixOperation::CCSR::InsertMatrix(), m_mapMatrixIndex, m_nBandSize, m_vectMatrixNbr, NEIGHBOR_MAP_INFO::pAtomType, NEIGHBOR_MAP_INFO::pbPeriodicCondition, NEIGHBOR_MAP_INFO::pfNeighbor, NEIGHBOR_MAP_INFO::pMaterialNumber, and NEIGHBOR_MAP_INFO::pNeighborMaterial.

401 {
402  int i, j;;
403  double fNeighborIndex[4];
404  bool bPeriodic[4];
405  int mapKey;
406 
407  for (i = 0; i < lpMapInfo->fItemCount; i++)
408  {
409  int nMatrixIndex = 0;
410 
411  for (j = 0; j < 4; ++j)
412  {
413  fNeighborIndex[j] = lpMapInfo->pfNeighbor[j][i];
414  bPeriodic[j] = lpMapInfo->pbPeriodicCondition[j][i];
415  }
416 
417  for (j = 0; j < 4; j++)
418  {
419  if (ATOM_DEFAULT_INDEX != fNeighborIndex[j] && false != bPeriodic[j])
420  {
421  mapKey = lpMapInfo->pMaterialNumber[i] | lpMapInfo->pNeighborMaterial[j][i];
422  if (CGeometricAtom::C == lpMapInfo->pAtomType[i])
423  mapKey *= -1;
424 
425  pResult->InsertMatrix(i * m_nBandSize, (unsigned int)fNeighborIndex[j] * m_nBandSize, 0, 0, m_nBandSize, m_nBandSize, m_vectMatrixNbr[m_mapMatrixIndex[mapKey] + j], true);
426  }
427  }
428  }
429 }
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
bool * pbPeriodicCondition[MAX_NEIGHBOR]
An array of Neighbor no 1 bondary condition.
Definition: AtomMapInfo.h:26
CGeometricAtom::ATOM_TYPE * pAtomType
An array of atom type 0:A, 1:C.
Definition: AtomMapInfo.h:18
MATERIAL_INDEX * pNeighborMaterial[MAX_NEIGHBOR]
Definition: AtomMapInfo.h:27
static vector< CMatrixOperation::CDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
bool InsertMatrix(unsigned int nRow, unsigned int nColumn, unsigned int nRowStart, unsigned int nColumnStart, unsigned int nRowCount, unsigned int nColumnCount, CMatrixOperation::CDMatrix *pMatrix, bool bCopyZero)
Set element by reference matrix.
double fItemCount
Item count at atom map.
Definition: AtomMapInfo.h:16
double * pfNeighbor[MAX_NEIGHBOR]
An array of Neighbor no 1 index.
Definition: AtomMapInfo.h:25
static unsigned int m_nBandSize
Band size 5, 10, 20.
#define ATOM_DEFAULT_INDEX
Atom index default value that empty atom instance.
Definition: Global.h:52
MATERIAL_INDEX * pMaterialNumber
An array of Atom number.
Definition: AtomMapInfo.h:19

Here is the call graph for this function:

void CHamiltonianBuilder::RotateTransMatrixFor10Band ( )
staticprivate

Rotating 10 band basis anion and cation base matrix.

Definition at line 431 of file HamiltonianBuilder.cpp.

References CMatrixOperation::CVector::GetAt(), CComplex::GetRealNumber(), CGeometricShape::m_rotationMatrix, m_Trans_anion, m_Trans_cation, CMatrixOperation::MVMul(), CMatrixOperation::CVector::SetAt(), and CMatrixOperation::CVector::SetSize().

Referenced by FillMatrixFor10Band().

432 {
433  CMatrixOperation::CVector Vector, Result;
434  CMatrixOperation::CDMatrix matrixRotate;
435  int i, j;
436 
437  Vector.SetSize(3);
438  Result.SetSize(3);
439 
440  for (i = 0; i < 4; ++i)
441  {
442  for (j = 0; j < 3; ++j)
443  Vector.SetAt(j, m_Trans_anion[i][j + 1], 0);
444 
446 
447  for (j = 0; j < 3; ++j)
448  m_Trans_anion[i][j + 1] = Result.GetAt(j).GetRealNumber();
449  }
450 
451  for (i = 0; i < 4; ++i)
452  {
453  for (j = 0; j < 3; ++j)
454  Vector.SetAt(j, m_Trans_cation[i][j + 1], 0);
455 
457 
458  for (j = 0; j < 3; ++j)
459  m_Trans_cation[i][j + 1] = Result.GetAt(j).GetRealNumber();
460  }
461 }
static CMatrixOperation::CDMatrix m_rotationMatrix
Rotation matrix for given direction.
static void MVMul(CCSR *pAMatrix, CVector *pVector, CVector *pResult, int nLBIndex)
Matrix and vector multiple operation.
static double m_Trans_cation[4][4]
Trans matrix for cation.
CComplex GetAt(unsigned int nIndex)
Get element value from specific index.
This class for describing vector for Lanczos method.
static double m_Trans_anion[4][4]
Trans matrix for anion.
Data and operation representation of Matrix.
void SetAt(unsigned int nIndex, CComplex value)
Set element value in specific index, Call by value.
void SetSize(unsigned int nSize)
Set Vector elements size.
double GetRealNumber() const
Get real part.
Definition: Complex.h:24

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

unsigned int CHamiltonianBuilder::m_fAtomIDStartIndex = 0
staticprivate

Start index of atom in shape, using in MPI running enviroment.

Definition at line 42 of file HamiltonianBuilder.h.

Referenced by BuildHamiltonian(), and FillMatrixFor10Band().

map< int, unsigned int > CHamiltonianBuilder::m_mapMatrixIndex
staticprivate

Hamiltonian offdiagonal elements mapper.

Definition at line 49 of file HamiltonianBuilder.h.

Referenced by BuildOffsiteMatrixFor10Band(), FillMatrixFor10Band(), FinalizeMatrixBuffer(), InitMatirxsFor10BandFillMatrix(), and ResetPeriodicBinding().

unsigned int CHamiltonianBuilder::m_nBandSize
staticprivate
double CHamiltonianBuilder::m_Trans_anion
staticprivate
Initial value:
= { { 1. / 2, 1. / 2, 1. / 2, 1. / 2 },
{ 1. / 2, 1. / 2, -1. / 2, -1. / 2 },
{ 1. / 2, -1. / 2, 1. / 2, -1. / 2 },
{ 1. / 2, -1. / 2, -1. / 2, 1. / 2 } }

Trans matrix for anion.

Definition at line 44 of file HamiltonianBuilder.h.

Referenced by InitMatirxsFor10BandFillMatrix(), InitTransMatrixFor10Band(), and RotateTransMatrixFor10Band().

double CHamiltonianBuilder::m_Trans_cation
staticprivate
Initial value:
= { { 1. / 2, -1. / 2, -1. / 2, -1. / 2 },
{ 1. / 2, -1. / 2, 1. / 2, 1. / 2 },
{ 1. / 2, 1. / 2, -1. / 2, 1. / 2 },
{ 1. / 2, 1. / 2, 1. / 2, -1. / 2 } }

Trans matrix for cation.

Definition at line 45 of file HamiltonianBuilder.h.

Referenced by InitMatirxsFor10BandFillMatrix(), InitTransMatrixFor10Band(), and RotateTransMatrixFor10Band().

vector< CMatrixOperation::CDMatrix * > CHamiltonianBuilder::m_vectMatrixNbr
staticprivate

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