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

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

#include "KNHamiltonianBuilder.h"

Collaboration diagram for CKNHamiltonianBuilder:
Collaboration graph

Public Member Functions

 CKNHamiltonianBuilder ()
 
 ~CKNHamiltonianBuilder ()
 

Static Public Member Functions

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

Static Private Member Functions

static void BuildHccDiagonalFor10Band (CKNMatrixOperation::CKNVector *pVector, LPGEO_PARAMETER lpParameter)
 Build cation diagonal basic element. More...
 
static void BuildHaaDiagonalFor10Band (CKNMatrixOperation::CKNVector *pVector, LPGEO_PARAMETER lpParameter)
 Build aion diagonal basic element. More...
 
static void BuildHonsiteBasicMatrixFor10Band (CKNMatrixOperation::CKNDMatrix *pMatrixHonsiteAnion, CKNMatrixOperation::CKNDMatrix *pMatrixHonsiteCation, LPGEO_PARAMETER lpParameter)
 Build aion and cation basic element. More...
 
static void BuildOffsiteMatrixFor10Band (GEO_PARAMETER &parameter, CKNMatrixOperation::CKNDMatrix *pMatrixACNbr, MATERIAL_INDEX materialFrom, MATERIAL_INDEX materialDest, CKNGeometricAtom::ATOM_TYPE type)
 Build offdiable elements. More...
 
static bool FillMatrixFor10Band (CKNMatrixOperation::CKNCSR *pResult, CKNCommandFileParser::LPINPUT_CMD_PARAM lpParam, LPNEIGHBOR_MAP_INFO lpMapInfo)
 Fill Hamiltonian matrix. More...
 
static void BuildACCANeighborFor10Band (CKNMatrixOperation::CKNDMatrix *pMatrixACNbr, CKNMatrixOperation::CKNDMatrix *pMatrixCANbr, CKNCommandFileParser::LPINPUT_CMD_PARAM lpParam)
 Build aion to cation, cation to aion direction calculation elements. More...
 
static void InitMatirxsFor10BandFillMatrix (CKNMatrixOperation::CKNDMatrix *pMatrixTransAnion, CKNMatrixOperation::CKNDMatrix *pMatrixTransAnionTranspos, CKNMatrixOperation::CKNDMatrix *pMatrixTransCation, CKNMatrixOperation::CKNDMatrix *pMatrixTransCationTranspos, CKNMatrixOperation::CKNDMatrix *pMatrixTempSpinUp, CKNMatrixOperation::CKNDMatrix *pMatrixTempSpinUpResult, CKNMatrixOperation::CKNDMatrix *pMatrixHonsiteAnion, CKNMatrixOperation::CKNDMatrix *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
< CKNMatrixOperation::CKNDMatrix * > 
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
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 23 of file KNHamiltonianBuilder.h.

Constructor & Destructor Documentation

CKNHamiltonianBuilder::CKNHamiltonianBuilder ( )

Definition at line 25 of file KNHamiltonianBuilder.cpp.

26 {
27 }
CKNHamiltonianBuilder::~CKNHamiltonianBuilder ( )

Definition at line 30 of file KNHamiltonianBuilder.cpp.

31 {
32 }

Member Function Documentation

void CKNHamiltonianBuilder::BuildACCANeighborFor10Band ( CKNMatrixOperation::CKNDMatrix pMatrixACNbr,
CKNMatrixOperation::CKNDMatrix pMatrixCANbr,
CKNCommandFileParser::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 195 of file KNHamiltonianBuilder.cpp.

References CKNCommandFileParser::INPUT_CMD_PARAM::bNeedRotate, CKNMatrixOperation::CKNDMatrix::BuildMatrixFirst(), CKNGeometricShape::m_rotationMatrix, CKNMatrixOperation::MMMul(), CKNMatrixOperation::CKNDMatrix::SetElement(), and CKNMatrixOperation::CKNDMatrix::TrnasPos().

Referenced by FillMatrixFor10Band().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::BuildHaaDiagonalFor10Band ( CKNMatrixOperation::CKNVector pVector,
LPGEO_PARAMETER  lpParameter 
)
staticprivate

Build aion diagonal basic element.

Parameters
[out]pVectorDiagonal elements of Anion
paramterGeometric parameters

Definition at line 58 of file KNHamiltonianBuilder.cpp.

References GEO_PARAMETER::fEda, GEO_PARAMETER::fEpa, GEO_PARAMETER::fEsa, GEO_PARAMETER::fEstara, and CKNMatrixOperation::CKNVector::SetAt().

Referenced by BuildHonsiteBasicMatrixFor10Band().

59 {
60  int i = 0;
61  pVector->SetAt(i++, lpParameter->fEsa, 0);
62  pVector->SetAt(i++, lpParameter->fEpa, 0);
63  pVector->SetAt(i++, lpParameter->fEpa, 0);
64  pVector->SetAt(i++, lpParameter->fEpa, 0);
65  pVector->SetAt(i++, lpParameter->fEstara, 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  pVector->SetAt(i++, lpParameter->fEda, 0);
71 }
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:

bool CKNHamiltonianBuilder::BuildHamiltonian ( CKNCommandFileParser::LPINPUT_CMD_PARAM  lpParam,
LPNEIGHBOR_MAP_INFO  lpMapInfo,
CKNMatrixOperation::CKNCSR pCSRResult,
unsigned int  fAtomStartID 
)
static

Build Hamiltonian matrxi from mapinfo data.

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

Definition at line 245 of file KNHamiltonianBuilder.cpp.

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

Referenced by CKNTBMS_Solver::Launching_TBMS_Solver().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::BuildHccDiagonalFor10Band ( CKNMatrixOperation::CKNVector pVector,
LPGEO_PARAMETER  lpParameter 
)
staticprivate

Build cation diagonal basic element.

Parameters
[out]pVectorDiagonal elements of Cation
paramterGeometric parameters

Definition at line 39 of file KNHamiltonianBuilder.cpp.

References GEO_PARAMETER::fEdc, GEO_PARAMETER::fEpc, GEO_PARAMETER::fEsc, GEO_PARAMETER::fEstarc, and CKNMatrixOperation::CKNVector::SetAt().

Referenced by BuildHonsiteBasicMatrixFor10Band().

40 {
41  int i = 0;
42  pVector->SetAt(i++, lpParameter->fEsc, 0);
43  pVector->SetAt(i++, lpParameter->fEpc, 0);
44  pVector->SetAt(i++, lpParameter->fEpc, 0);
45  pVector->SetAt(i++, lpParameter->fEpc, 0);
46  pVector->SetAt(i++, lpParameter->fEstarc, 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  pVector->SetAt(i++, lpParameter->fEdc, 0);
52 }
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 CKNHamiltonianBuilder::BuildHonsiteBasicMatrixFor10Band ( CKNMatrixOperation::CKNDMatrix pMatrixHonsiteAnion,
CKNMatrixOperation::CKNDMatrix 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 78 of file KNHamiltonianBuilder.cpp.

References BuildHaaDiagonalFor10Band(), BuildHccDiagonalFor10Band(), CKNMatrixOperation::CKNVector::Finalize(), CKNMatrixOperation::CKNDMatrix::SetDiagonal(), and CKNMatrixOperation::CKNVector::SetSize().

Referenced by FillMatrixFor10Band().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::BuildOffsiteMatrixFor10Band ( GEO_PARAMETER parameter,
CKNMatrixOperation::CKNDMatrix pMatrixACNbr,
MATERIAL_INDEX  materialFrom,
MATERIAL_INDEX  materialDest,
CKNGeometricAtom::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 98 of file KNHamiltonianBuilder.cpp.

References CKNGeometricAtom::A, CKNMaterialParam::BuildMaterialParam(), CKNMatrixOperation::CKNDMatrix::BuildMatrixFirst(), CKNTwoCenterl::BuildTwoCenterlParam(), CKNGeometricAtom::C, CKNMatrixOperation::CKNVector::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, CKNMatrixOperation::CKNVector::GetAt(), CKNMatrixOperation::CKNVector::GetNorm(), CKNComplex::GetRealNumber(), CKNMatrixOperation::CKNDMatrix::GetRowByVector(), m_mapMatrixIndex, m_nBandSize, and m_vectMatrixNbr.

Referenced by FillMatrixFor10Band().

99 {
100  CKNTwoCenterl twoCenterl;
102  CKNMatrixOperation::CKNDMatrix *pMatrixNbr[4];
103  double fNormValue, fValueArray[10][10];
104  int i, j, k;
105  GEO_PARAMETER parameterNeighbor;
106  CKNMaterialParam materialParam;
107  int mapKey = materialFrom | materialDest;
108  bool bRtn;
109 
110  if (CKNGeometricAtom::C == type)
111  mapKey *= -1;
112 
113  if (m_mapMatrixIndex.find(mapKey) != m_mapMatrixIndex.end())
114  return;
115 
116  for (i = 0; i < 4; ++i)
117  {
118  pMatrixNbr[i] = new CKNMatrixOperation::CKNDMatrix();
119  pMatrixNbr[i]->BuildMatrixFirst(m_nBandSize, m_nBandSize);
120  }
121 
122  parameterNeighbor = materialParam.BuildMaterialParam(materialFrom, materialDest, bRtn);
123 
124  switch (type)
125  {
126  case CKNGeometricAtom::A:
127  for (i = 0; i < 4; i++)
128  {
129  pMatrixACNbr->GetRowByVector(i, &vectorNbr);
130  fNormValue = vectorNbr.GetNorm();
131  parameterNeighbor.fL = vectorNbr.GetAt(0).GetRealNumber() / fNormValue;
132  parameterNeighbor.fM = vectorNbr.GetAt(1).GetRealNumber() / fNormValue;
133  parameterNeighbor.fN = vectorNbr.GetAt(2).GetRealNumber() / fNormValue;
134  twoCenterl.BuildTwoCenterlParam(parameterNeighbor, CKNGeometricAtom::A);
135 
136  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;
137  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;
138  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;
139  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;
140  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;
141  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;
142  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;
143  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;
144  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;
145  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;
146 
147  for (j = 0; j < 10; j++)
148  for (k = 0; k < 10; k++)
149  pMatrixNbr[i]->SetElement(j, k, fValueArray[j][k], 0);
150  }
151 
152  break;
153  case CKNGeometricAtom::C:
154  for (i = 0; i < 4; i++)
155  {
156  pMatrixACNbr->GetRowByVector(i, &vectorNbr);
157  fNormValue = vectorNbr.GetNorm();
158  parameterNeighbor.fL = vectorNbr.GetAt(0).GetRealNumber() / fNormValue;
159  parameterNeighbor.fM = vectorNbr.GetAt(1).GetRealNumber() / fNormValue;
160  parameterNeighbor.fN = vectorNbr.GetAt(2).GetRealNumber() / fNormValue;
161  twoCenterl.BuildTwoCenterlParam(parameterNeighbor, CKNGeometricAtom::C);
162 
163  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;
164  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;
165  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;
166  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;
167  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;
168  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;
169  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;
170  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;
171  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;
172  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;
173 
174  for (j = 0; j < 10; j++)
175  for (k = 0; k < 10; k++)
176  pMatrixNbr[i]->SetElement(j, k, fValueArray[j][k], 0);
177  }
178 
179  break;
180  }
181 
182  m_mapMatrixIndex[mapKey] = (unsigned int)m_vectMatrixNbr.size();
183  for (i = 0; i < 4; ++i)
184  m_vectMatrixNbr.push_back(pMatrixNbr[i]);
185 
186  vectorNbr.Finalize();
187 }
static unsigned int m_nBandSize
Band size 5, 10, 20.
Data and operation representation of Matrix.
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
Class for calculating parameter.
Definition: KNTwoCenterl.h:17
double fVd5cd5a
--------------------— To this point generated by twoCenterl
static map< int, unsigned int > m_mapMatrixIndex
Hamiltonian offdiagonal elements mapper.
static vector< CKNMatrixOperation::CKNDMatrix * > m_vectMatrixNbr
Hamiltonian offdiagonal elements.
GEO_PARAMETER BuildMaterialParam(char *pszMaterialName, bool &bResult)
Load material parameter.
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
Class for Material Parameter.
void BuildTwoCenterlParam(GEO_PARAMETER &parameter, CKNGeometricAtom::ATOM_TYPE type)
Calculating parameter.
void Finalize()
Free allocated memory for vector elements.
double GetNorm(bool bMPI=false)
Getting norm of vector.
Structure for saving geometric parameter.
bool GetRowByVector(unsigned int nRowIndex, CKNMatrixOperation::CKNVector *pVector)
Get row elements.
bool BuildMatrixFirst(unsigned int nRow, unsigned int nColumn)
Building matrix elements.
This class for describing vector for Lanczos method.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CKNHamiltonianBuilder::FillMatrixFor10Band ( CKNMatrixOperation::CKNCSR pResult,
CKNCommandFileParser::LPINPUT_CMD_PARAM  lpParam,
LPNEIGHBOR_MAP_INFO  lpMapInfo 
)
staticprivate

Fill Hamiltonian matrix.

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

Definition at line 276 of file KNHamiltonianBuilder.cpp.

References CKNGeometricAtom::A, ATOM_DEFAULT_INDEX, CKNCommandFileParser::INPUT_CMD_PARAM::bNeedRotate, BuildACCANeighborFor10Band(), BuildHonsiteBasicMatrixFor10Band(), CKNMaterialParam::BuildMaterialParam(), CKNMatrixOperation::CKNDMatrix::BuildMatrixFirst(), BuildOffsiteMatrixFor10Band(), CKNGeometricAtom::C, NEIGHBOR_MAP_INFO::fItemCount, CKNMatrixOperation::CKNDMatrix::GetElement(), CKNComplex::GetRealNumber(), CKNMatrixOperation::CKNDMatrix::GetSmallMatrix(), InitMatirxsFor10BandFillMatrix(), InitTransMatrixFor10Band(), m_fAtomIDStartIndex, m_mapMatrixIndex, m_vectMatrixNbr, CKNMatrixOperation::MMMul(), CKNMatrixOperation::FILL_MATRIX_DATA::nColumnIndex, NEIGHBOR_MAP_INFO::pAtomType, NEIGHBOR_MAP_INFO::pDomainMaterialNumber, NEIGHBOR_MAP_INFO::pfNeighbor, NEIGHBOR_MAP_INFO::pMaterialNumber, CKNMatrixOperation::FILL_MATRIX_DATA::pMatrix, NEIGHBOR_MAP_INFO::pNeighborMaterial, CKNMatrixOperation::CKNCSR::PushMatrixConcurrent(), RotateTransMatrixFor10Band(), CKNMatrixOperation::CKNDMatrix::ScalarDivision(), CKNMatrixOperation::CKNDMatrix::SetElement(), CKNComplex::SetRealNumber(), and CKNMatrixOperation::CKNDMatrix::TrnasPos().

Referenced by BuildHamiltonian().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::FinalizeMatrixBuffer ( )
static

Release all temporary buffer.

Definition at line 550 of file KNHamiltonianBuilder.cpp.

References m_mapMatrixIndex, and m_vectMatrixNbr.

Referenced by CKNTBMS_Solver::Launching_TBMS_Solver().

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

Here is the caller graph for this function:

void CKNHamiltonianBuilder::InitMatirxsFor10BandFillMatrix ( CKNMatrixOperation::CKNDMatrix pMatrixTransAnion,
CKNMatrixOperation::CKNDMatrix pMatrixTransAnionTranspos,
CKNMatrixOperation::CKNDMatrix pMatrixTransCation,
CKNMatrixOperation::CKNDMatrix pMatrixTransCationTranspos,
CKNMatrixOperation::CKNDMatrix pMatrixTempSpinUp,
CKNMatrixOperation::CKNDMatrix pMatrixTempSpinUpResult,
CKNMatrixOperation::CKNDMatrix pMatrixHonsiteAnion,
CKNMatrixOperation::CKNDMatrix 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 518 of file KNHamiltonianBuilder.cpp.

References CKNMatrixOperation::CKNDMatrix::BuildMatrixFirst(), m_mapMatrixIndex, m_nBandSize, m_Trans_anion, m_Trans_cation, m_vectMatrixNbr, and CKNMatrixOperation::CKNDMatrix::SetElement().

Referenced by FillMatrixFor10Band().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::InitTransMatrixFor10Band ( )
staticprivate

Initializing Trans matrix for 10 band basis Hamiltonian.

Definition at line 464 of file KNHamiltonianBuilder.cpp.

References m_Trans_anion, and m_Trans_cation.

Referenced by FillMatrixFor10Band().

465 {
466  m_Trans_anion[0][0] = 1. / 2;
467  m_Trans_anion[0][1] = 1. / 2;
468  m_Trans_anion[0][2] = 1. / 2;
469  m_Trans_anion[0][3] = 1. / 2;
470 
471  m_Trans_anion[1][0] = 1. / 2;
472  m_Trans_anion[1][1] = 1. / 2;
473  m_Trans_anion[1][2] = -1. / 2;
474  m_Trans_anion[1][3] = -1. / 2;
475 
476  m_Trans_anion[2][0] = 1. / 2;
477  m_Trans_anion[2][1] = -1. / 2;
478  m_Trans_anion[2][2] = 1. / 2;
479  m_Trans_anion[2][3] = -1. / 2;
480 
481  m_Trans_anion[3][0] = 1. / 2;
482  m_Trans_anion[3][1] = -1. / 2;
483  m_Trans_anion[3][2] = -1. / 2;
484  m_Trans_anion[3][3] = 1. / 2;
485 
486 
487  m_Trans_cation[0][0] = 1. / 2;
488  m_Trans_cation[0][1] = -1. / 2;
489  m_Trans_cation[0][2] = -1. / 2;
490  m_Trans_cation[0][3] = -1. / 2;
491 
492  m_Trans_cation[1][0] = 1. / 2;
493  m_Trans_cation[1][1] = -1. / 2;
494  m_Trans_cation[1][2] = 1. / 2;
495  m_Trans_cation[1][3] = 1. / 2;
496 
497  m_Trans_cation[2][0] = 1. / 2;
498  m_Trans_cation[2][1] = 1. / 2;
499  m_Trans_cation[2][2] = -1. / 2;
500  m_Trans_cation[2][3] = 1. / 2;
501 
502  m_Trans_cation[3][0] = 1. / 2;
503  m_Trans_cation[3][1] = 1. / 2;
504  m_Trans_cation[3][2] = 1. / 2;
505  m_Trans_cation[3][3] = -1. / 2;
506 }
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 CKNHamiltonianBuilder::ResetPeriodicBinding ( CKNMatrixOperation::CKNCSR pResult,
LPNEIGHBOR_MAP_INFO  lpMapInfo 
)
static

Reset Hamiltonian before applying phase.

Parameters
[out]CKNMatrixOperationCSR instance
lpMapInfoAtom map information

Definition at line 401 of file KNHamiltonianBuilder.cpp.

References ATOM_DEFAULT_INDEX, CKNGeometricAtom::C, NEIGHBOR_MAP_INFO::fItemCount, CKNMatrixOperation::CKNCSR::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.

Referenced by CKNTBMS_Solver::Launching_TBMS_Solver().

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

Here is the call graph for this function:

Here is the caller graph for this function:

void CKNHamiltonianBuilder::RotateTransMatrixFor10Band ( )
staticprivate

Rotating 10 band basis anion and cation base matrix.

Definition at line 432 of file KNHamiltonianBuilder.cpp.

References CKNMatrixOperation::CKNVector::GetAt(), CKNComplex::GetRealNumber(), CKNGeometricShape::m_rotationMatrix, m_Trans_anion, m_Trans_cation, CKNMatrixOperation::MVMul(), CKNMatrixOperation::CKNVector::SetAt(), and CKNMatrixOperation::CKNVector::SetSize().

Referenced by FillMatrixFor10Band().

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

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

unsigned int CKNHamiltonianBuilder::m_fAtomIDStartIndex = 0
staticprivate

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

Definition at line 43 of file KNHamiltonianBuilder.h.

Referenced by BuildHamiltonian(), and FillMatrixFor10Band().

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

Hamiltonian offdiagonal elements mapper.

Definition at line 50 of file KNHamiltonianBuilder.h.

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

unsigned int CKNHamiltonianBuilder::m_nBandSize
staticprivate
double CKNHamiltonianBuilder::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 45 of file KNHamiltonianBuilder.h.

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

double CKNHamiltonianBuilder::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 46 of file KNHamiltonianBuilder.h.

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

vector< CKNMatrixOperation::CKNDMatrix * > CKNHamiltonianBuilder::m_vectMatrixNbr
staticprivate

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