My Project
All Classes
TailCorrection_Energy_Functions.h
1//Need to consider if we use CBCF//
2
3double TotalTailCorrection(Components& SystemComponents, size_t FFsize, double Volume)
4{
5 double TailE = 0.0;
6 if(!SystemComponents.HasTailCorrection) return TailE;
7 for(size_t i = 0; i < SystemComponents.NumberOfPseudoAtoms.size(); i++)
8 for(size_t j = i; j < SystemComponents.NumberOfPseudoAtoms.size(); j++)
9 {
10 size_t IJ_Forward = i * FFsize + j;
11 if(SystemComponents.TailCorrection[IJ_Forward].UseTail)
12 {
13 size_t Ni = SystemComponents.NumberOfPseudoAtoms[i];
14 size_t Nj = SystemComponents.NumberOfPseudoAtoms[j];
15 double pairE = SystemComponents.TailCorrection[IJ_Forward].Energy * static_cast<double>(Ni * Nj); if(i != j) pairE *= 2.0;
16 TailE += pairE;
17 printf("i: %zu, j: %zu, Ni: %zu, Nj: %zu, E: %.5f\n", i,j,Ni,Nj, pairE / Volume);
18 }
19 }
20 return TailE / Volume;
21}
22
23size_t get_change_in_pseudoAtoms(Components& SystemComponents, size_t SelectedComponent, size_t Type)
24{
25 size_t d = 0;
26 for(size_t i = 0; i < SystemComponents.NumberOfPseudoAtomsForSpecies[SelectedComponent].size(); i++)
27 {
28 if(Type == SystemComponents.NumberOfPseudoAtomsForSpecies[SelectedComponent][i].x)
29 {
30 d = SystemComponents.NumberOfPseudoAtomsForSpecies[SelectedComponent][i].y; break;
31 }
32 }
33 return d;
34}
35
36double TailCorrectionDifference(Components& SystemComponents, size_t SelectedComponent, size_t FFsize, double Volume, int MoveType)
37{
38 double TailE = 0.0;
39 if(!SystemComponents.HasTailCorrection) return TailE;
40 int sign = 1;
41 switch(MoveType)
42 {
43 case INSERTION:
44 {
45 sign = 1;
46 break;
47 }
48 case CBCF_INSERTION:
49 {
50 throw std::runtime_error("TAIL CORRECTIONS NOT READY FOR CBCF MOVES!");
51 }
52 case CBCF_DELETION:
53 {
54 throw std::runtime_error("TAIL CORRECTIONS NOT READY FOR CBCF MOVES!");
55 }
56 case DELETION:
57 {
58 sign = -1;
59 break;
60 }
61 }
62 for(size_t i = 0; i < SystemComponents.NumberOfPseudoAtoms.size(); i++)
63 {
64 int di = get_change_in_pseudoAtoms(SystemComponents, SelectedComponent, i); di *= sign;
65
66 for(size_t j = i; j < SystemComponents.NumberOfPseudoAtoms.size(); j++)
67 {
68 int dj = get_change_in_pseudoAtoms(SystemComponents, SelectedComponent, j); dj *= sign;
69 size_t IJ_Forward = i * FFsize + j;
70 if(SystemComponents.TailCorrection[IJ_Forward].UseTail)
71 {
72 int Ni = SystemComponents.NumberOfPseudoAtoms[i];
73 int Nj = SystemComponents.NumberOfPseudoAtoms[j];
74 double E = SystemComponents.TailCorrection[IJ_Forward].Energy;
75 int dN = Ni * dj + Nj * di + di * dj; //Zhao's note: need to define a temporary variable for this first//
76 double DeltaE = E * static_cast<double>(dN); if(i != j) DeltaE *= 2.0;
77 TailE += DeltaE;
78 }
79 }
80 }
81 return TailE / Volume;
82}
83
84//For moves that simultaneously changes more than one component//
85double TailCorrectionIdentitySwap(Components& SystemComponents, size_t NEWComponent, size_t OLDComponent, size_t FFsize, double Volume)
86{
87 double TailE = 0.0;
88 if(!SystemComponents.HasTailCorrection) return TailE;
89
90 for(size_t i = 0; i < SystemComponents.NumberOfPseudoAtoms.size(); i++)
91 {
92 int di = get_change_in_pseudoAtoms(SystemComponents, NEWComponent, i);
93 di-= get_change_in_pseudoAtoms(SystemComponents, OLDComponent, i);
94
95 for(size_t j = i; j < SystemComponents.NumberOfPseudoAtoms.size(); j++)
96 {
97 int dj = get_change_in_pseudoAtoms(SystemComponents, NEWComponent, j);
98 dj-= get_change_in_pseudoAtoms(SystemComponents, OLDComponent, j);
99
100 size_t IJ_Forward = i * FFsize + j;
101 if(SystemComponents.TailCorrection[IJ_Forward].UseTail)
102 {
103 int Ni = SystemComponents.NumberOfPseudoAtoms[i];
104 int Nj = SystemComponents.NumberOfPseudoAtoms[j];
105 double E = SystemComponents.TailCorrection[IJ_Forward].Energy;
106 int dN = Ni * dj + Nj * di + di * dj; //Zhao's note: need to define a temporary variable for this first//
107 double DeltaE = E * static_cast<double>(dN); if(i != j) DeltaE *= 2.0;
108 TailE += DeltaE;
109 }
110 }
111 }
112 return TailE / Volume;
113}
Definition data_struct.h:843