IPCC  1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IKNGeometricUnitCellInfo.cpp
Go to the documentation of this file.
1 
7 #include "stdafx.h"
9 #include "KNMatrixOperation.h"
10 #include "CKNGlobal.h"
11 
13 {
17 }
18 
20 {
21 }
22 
29 {
31 
32  switch (atomType)
33  {
35  if (nIndex < 0 || nIndex >= m_vectAtomList_1.size())
36  return dumy;
37  return m_vectAtomList_1[nIndex].GetCoordination();
38  break;
40  if (nIndex < 0 || nIndex >= m_vectAtomList_2.size())
41  return dumy;
42  return m_vectAtomList_2[nIndex].GetCoordination();
43  break;
44  }
45 
46  return dumy;
47 }
48 
55 {
57 
58  switch (neighborType)
59  {
61  if (nIndex < 0 || nIndex >= m_vectNeighborRelation1To2.size())
62  return dumy;
63  return m_vectNeighborRelation1To2[nIndex];
64  break;
66  if (nIndex < 0 || nIndex >= m_vectNeighborRelation2To1.size())
67  return dumy;
68  return m_vectNeighborRelation2To1[nIndex];
69  break;
70  }
71 
72  return dumy;
73 }
74 
82 {
83  CKNGeometricAtom atom;
84 
85  atom.SetType(type, ATOM_NUM_BASE);
86  atom.SetCoordination(x, y, z);
87 
88  switch (type)
89  {
91  m_vectAtomList_1.push_back(atom);
92  break;
94  m_vectAtomList_2.push_back(atom);
95  break;
96  }
97 }
98 
106 {
107  CKNGeometricCoordination relationCoordnation;
108 
109  relationCoordnation.SetCoordination(x, y, z);
110 
111  switch (type)
112  {
114  m_vectNeighborRelation1To2.push_back(relationCoordnation);
115  break;
117  m_vectNeighborRelation2To1.push_back(relationCoordnation);
118  break;
119  }
120 }
121 
126 {
127  CKNMatrixOperation::CKNVector Vector, Result;
128  int i;
129  double *fCoordination = NULL;
130 
131  Vector.SetSize(3);
132  Result.SetSize(3);
133 
134  for (i = 0; i < 3; ++i)
135  Vector.SetAt(i, m_UnitCellSize[i], 0);
136 
137  CKNMatrixOperation::MVMul(pRotationMatrix, &Vector, &Result);
138 
139  for (i = 0; i < 3; ++i)
140  m_UnitCellSize[i] = Result.GetAt(i).GetRealNumber();
141 }
142 
147 {
148  CKNMatrixOperation::CKNVector Vector, Result;
149  unsigned int i, j;
150  double *fCoordination = NULL;
151 
152  Vector.SetSize(3);
153  Result.SetSize(3);
154 
155  for (i = 0; i < m_vectNeighborRelation1To2.size() ; ++i)
156  {
157  fCoordination = m_vectNeighborRelation1To2[i].GetCoordinationAll();
158 
159  for (j = 0; j < 3; ++j)
160  Vector.SetAt(j, fCoordination[j], 0);
161 
162  CKNMatrixOperation::MVMul(pRotationMatrix, &Vector, &Result);
163  m_vectNeighborRelation1To2[i].SetCoordination(Result.GetAt(0).GetRealNumber(), Result.GetAt(1).GetRealNumber(), Result.GetAt(2).GetRealNumber());
164  }
165 
166  for (i = 0; i < m_vectNeighborRelation2To1.size(); ++i)
167  {
168  fCoordination = m_vectNeighborRelation2To1[i].GetCoordinationAll();
169 
170  for (j = 0; j < 3; ++j)
171  Vector.SetAt(j, fCoordination[j], 0);
172 
173  CKNMatrixOperation::MVMul(pRotationMatrix, &Vector, &Result);
174  m_vectNeighborRelation2To1[i].SetCoordination(Result.GetAt(0).GetRealNumber(), Result.GetAt(1).GetRealNumber(), Result.GetAt(2).GetRealNumber());
175  }
176 
177 }
178 
180 {
181  m_vectAtomList_1.clear();
182  m_vectAtomList_2.clear();
185 }
void RotateAxis(CKNMatrixOperation::CKNDMatrix *pRotationMatrix)
Rotating axis.
void SetSize(unsigned int nSize)
Set Vector elements size.
Data and operation representation of Matrix.
Class for coordination.
double GetRealNumber() const
Get real part.
Definition: KNComplex.h:26
void SetCoordination(CKNGeometricCoordination coordination)
Get atom coordination.
void SetType(ATOM_TYPE type, MATERIAL_INDEX number)
Set atom information.
virtual void SetAtomCoordination()=0
Atom coordination setting.
virtual void SetNeighborCoordination()=0
Neighbor atom coordiantion setting.
void InitCoordination()
Initial Coordination information.
std::vector< CKNGeometricAtom > m_vectAtomList_2
Atom list in Unitcell for cation.
Common definition for Solver.
CKNComplex GetAt(unsigned int nIndex)
Get element value from specific index.
Collection of vector and matrix operation.
static void MVMul(CKNCSR *pAMatrix, CKNVector *pVector, CKNVector *pResult)
Matrix and vector multiple operation.
std::vector< CKNGeometricCoordination > m_vectNeighborRelation1To2
Neighbor relation list in Unitcell for anion to cation.
Class for Atom.
void RotateNeighbor(CKNMatrixOperation::CKNDMatrix *pRotationMatrix)
Rotating neighbor coordination.
std::vector< CKNGeometricCoordination > m_vectNeighborRelation2To1
Neighbor relation list in Unitcell for cation to anion.
void SetAt(unsigned int nIndex, CKNComplex value)
Set element value in specific index, Call by value.
std::vector< CKNGeometricAtom > m_vectAtomList_1
Atom list in Unitcell for anion.
double m_UnitCellSize[3]
Unitcell size x, y, z direction axis.
void SetCoordination(CKNGeometricCoordination coordination)
Get coordination with double buffer.
CKNGeometricCoordination GetNeighborCoordination(CKNGeometricAtom::NEIGHOR_RELATION neighborType, unsigned int nIndex)
Get neigbhor atom coordination from Unitcell.
CKNGeometricCoordination GetAtomCoordination(CKNGeometricAtom::ATOM_TYPE atomType, unsigned int nIndex)
Get Unitcell size x, y, z direction axis.
Iterface for Unitcell information.
This class for describing vector for Lanczos method.