HPhi++  3.1.0
Kagome.cpp
Go to the documentation of this file.
1 /*
2 HPhi-mVMC-StdFace - Common input generator
3 Copyright (C) 2015 The University of Tokyo
4 
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
21 #include "StdFace_vals.hpp"
22 #include "StdFace_ModelUtil.hpp"
23 #include <cstdlib>
24 #include <cstdio>
25 #include <cmath>
26 #include <complex>
27 #include <cstring>
28 
34  struct StdIntList *StdI
35 )
36 {
37  int isite, jsite, isiteUC, kCell, ntransMax, nintrMax;
38  int iL, iW;
39  FILE *fp;
40  std::complex<double> Cphase;
41  double dR[3];
42 
46  fp = fopen("lattice.gp", "w");
47 
48  StdI->NsiteUC = 3;
49 
50  fprintf(stdout, " @ Lattice Size & Shape\n\n");
51 
52  StdFace_PrintVal_d("a", &StdI->a, 1.0);
53  StdFace_PrintVal_d("Wlength", &StdI->length[0], StdI->a);
54  StdFace_PrintVal_d("Llength", &StdI->length[1], StdI->a);
55  StdFace_PrintVal_d("Wx", &StdI->direct[0][0], StdI->length[0]);
56  StdFace_PrintVal_d("Wy", &StdI->direct[0][1], 0.0);
57  StdFace_PrintVal_d("Lx", &StdI->direct[1][0], StdI->length[1] * 0.5);
58  StdFace_PrintVal_d("Ly", &StdI->direct[1][1], StdI->length[1] * 0.5 * sqrt(3.0));
59 
60  StdFace_PrintVal_d("phase0", &StdI->phase[0], 0.0);
61  StdFace_PrintVal_d("phase1", &StdI->phase[1], 0.0);
62 
63  StdFace_InitSite(StdI, fp, 2);
64  StdI->tau[0][0] = 0.0; StdI->tau[0][1] = 0.0; StdI->tau[0][2] = 0.0;
65  StdI->tau[1][0] = 0.5; StdI->tau[1][1] = 0.0; StdI->tau[1][2] = 0.0;
66  StdI->tau[2][0] = 0.0; StdI->tau[2][1] = 0.5; StdI->tau[2][2] = 0.0;
70  fprintf(stdout, "\n @ Hamiltonian \n\n");
71 
72  StdFace_NotUsed_d("K", StdI->K);
73  StdFace_PrintVal_d("h", &StdI->h, 0.0);
74  StdFace_PrintVal_d("Gamma", &StdI->Gamma, 0.0);
75 
76  if (strcmp(StdI->model, "spin") == 0 ) {
77  StdFace_PrintVal_i("2S", &StdI->S2, 1);
78  StdFace_PrintVal_d("D", &StdI->D[2][2], 0.0);
79  StdFace_InputSpinNN(StdI->J, StdI->JAll, StdI->J0, StdI->J0All, "J0");
80  StdFace_InputSpinNN(StdI->J, StdI->JAll, StdI->J1, StdI->J1All, "J1");
81  StdFace_InputSpinNN(StdI->J, StdI->JAll, StdI->J2, StdI->J2All, "J2");
82  StdFace_InputSpinNN(StdI->Jp, StdI->JpAll, StdI->J0p, StdI->J0pAll, "J0'");
83  StdFace_InputSpinNN(StdI->Jp, StdI->JpAll, StdI->J1p, StdI->J1pAll, "J1'");
84  StdFace_InputSpinNN(StdI->Jp, StdI->JpAll, StdI->J2p, StdI->J2pAll, "J2'");
85 
86  StdFace_NotUsed_d("mu", StdI->mu);
87  StdFace_NotUsed_d("U", StdI->U);
88  StdFace_NotUsed_c("t", StdI->t);
89  StdFace_NotUsed_c("t0", StdI->t);
90  StdFace_NotUsed_c("t0", StdI->t0);
91  StdFace_NotUsed_c("t1", StdI->t1);
92  StdFace_NotUsed_c("t2", StdI->t2);
93  StdFace_NotUsed_c("t'", StdI->tp);
94  StdFace_NotUsed_c("t0'", StdI->t0p);
95  StdFace_NotUsed_c("t1'", StdI->t1p);
96  StdFace_NotUsed_c("t2'", StdI->t2p);
97  StdFace_NotUsed_d("V", StdI->V);
98  StdFace_NotUsed_d("V0", StdI->V0);
99  StdFace_NotUsed_d("V1", StdI->V1);
100  StdFace_NotUsed_d("V2", StdI->V2);
101  StdFace_NotUsed_d("V'", StdI->Vp);
102  StdFace_NotUsed_d("V0'", StdI->V0p);
103  StdFace_NotUsed_d("V1'", StdI->V1p);
104  StdFace_NotUsed_d("V2'", StdI->V2p);
105  }/*if (strcmp(StdI->model, "spin") == 0 )*/
106  else {
107  StdFace_PrintVal_d("mu", &StdI->mu, 0.0);
108  StdFace_PrintVal_d("U", &StdI->U, 0.0);
109  StdFace_InputHopp(StdI->t, &StdI->t0, "t0");
110  StdFace_InputHopp(StdI->t, &StdI->t1, "t1");
111  StdFace_InputHopp(StdI->t, &StdI->t2, "t2");
112  StdFace_InputHopp(StdI->tp, &StdI->t0p, "t0'");
113  StdFace_InputHopp(StdI->tp, &StdI->t1p, "t1'");
114  StdFace_InputHopp(StdI->tp, &StdI->t2p, "t2'");
115  StdFace_InputCoulombV(StdI->V, &StdI->V0, "V0");
116  StdFace_InputCoulombV(StdI->V, &StdI->V1, "V1");
117  StdFace_InputCoulombV(StdI->V, &StdI->V2, "V2");
118  StdFace_InputCoulombV(StdI->Vp, &StdI->V0p, "V0'");
119  StdFace_InputCoulombV(StdI->Vp, &StdI->V1p, "V1'");
120  StdFace_InputCoulombV(StdI->Vp, &StdI->V2p, "V2'");
121 
122  StdFace_NotUsed_J("J0", StdI->J0All, StdI->J0);
123  StdFace_NotUsed_J("J1", StdI->J1All, StdI->J1);
124  StdFace_NotUsed_J("J2", StdI->J2All, StdI->J2);
125  StdFace_NotUsed_J("J'", StdI->JpAll, StdI->Jp);
126  StdFace_NotUsed_J("J0'", StdI->J0pAll, StdI->J0p);
127  StdFace_NotUsed_J("J1'", StdI->J1pAll, StdI->J1p);
128  StdFace_NotUsed_J("J2'", StdI->J2pAll, StdI->J2p);
129  StdFace_NotUsed_d("D", StdI->D[2][2]);
130 
131  if (strcmp(StdI->model, "hubbard") == 0 ) {
132  StdFace_NotUsed_i("2S", StdI->S2);
133  StdFace_NotUsed_J("J", StdI->JAll, StdI->J);
134  }/*if (strcmp(StdI->model, "hubbard") == 0 )*/
135  else {
136  StdFace_PrintVal_i("2S", &StdI->S2, 1);
137  StdFace_InputSpin(StdI->J, StdI->JAll, "J");
138  }/*if (model != "hubbard")*/
139 
140  }/*if (model != "spin")@@*/
141  fprintf(stdout, "\n @ Numerical conditions\n\n");
146  StdI->nsite = StdI->NsiteUC * StdI->NCell;
147  if (strcmp(StdI->model, "kondo") == 0 ) StdI->nsite *= 2;
148  StdI->locspinflag = (int *)malloc(sizeof(int) * StdI->nsite);
149 
150  if (strcmp(StdI->model, "spin") == 0 )
151  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = StdI->S2;
152  else if (strcmp(StdI->model, "hubbard") == 0 )
153  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = 0;
154  else
155  for (iL = 0; iL < StdI->nsite / 2; iL++) {
156  StdI->locspinflag[iL] = StdI->S2;
157  StdI->locspinflag[iL + StdI->nsite / 2] = 0;
158  }
162  if (strcmp(StdI->model, "spin") == 0 ) {//>>
163  ntransMax = StdI->nsite * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
164  nintrMax = StdI->NCell * (StdI->NsiteUC/*D*/ + 6/*J*/ + 6/*J'*/)
165  * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
166  }
167  else {
168  ntransMax = StdI->NCell * 2/*spin*/ * (2 * StdI->NsiteUC/*mu+h+Gamma*/ + 12/*t*/ + 12/*t'*/);
169  nintrMax = StdI->NCell * (StdI->NsiteUC/*U*/ + 4 * (6/*V*/ + 6/*V'*/));
170 
171  if (strcmp(StdI->model, "kondo") == 0) {
172  ntransMax += StdI->nsite / 2 * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
173  nintrMax += StdI->nsite / 2 * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
174  }/*if (strcmp(StdI->model, "kondo") == 0)*/
175  }//<<
176 
177  StdFace_MallocInteractions(StdI, ntransMax, nintrMax);
181  for (kCell = 0; kCell < StdI->NCell; kCell++) {
182 
183  iW = StdI->Cell[kCell][0];
184  iL = StdI->Cell[kCell][1];
185  /*>>
186  Local term
187  */
188  isite = StdI->NsiteUC * kCell;
189  if (strcmp(StdI->model, "kondo") == 0 ) isite += StdI->nsite / 2;
190 
191  if (strcmp(StdI->model, "spin") == 0 ) {
192  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++) {
193  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, isite + isiteUC);
194  StdFace_GeneralJ(StdI, StdI->D, StdI->S2, StdI->S2, isite + isiteUC, isite + isiteUC);
195  }/*for (jsite = 0; jsite < StdI->NsiteUC; jsite++)*/
196  }/*if (strcmp(StdI->model, "spin") == 0 )*/
197  else {
198  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++)
199  StdFace_HubbardLocal(StdI, StdI->mu, -StdI->h, -StdI->Gamma, StdI->U, isite + isiteUC);
200 
201  if (strcmp(StdI->model, "kondo") == 0 ) {
202  jsite = StdI->NsiteUC * kCell;
203  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++) {
204  StdFace_GeneralJ(StdI, StdI->J, 1, StdI->S2, isite + isiteUC, jsite + isiteUC);
205  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, jsite + isiteUC);
206  }/*for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++)*/
207  }/*if (strcmp(StdI->model, "kondo") == 0 )*/
208  }/*if (strcmp(StdI->model, "spin") != 0 )<<*/
209  /*>>
210  Nearest neighbor intra cell 0 -> 1
211  */
212  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 1, &isite, &jsite, 1, &Cphase, dR);
213 
214  if (strcmp(StdI->model, "spin") == 0 ) {
215  StdFace_GeneralJ(StdI, StdI->J2, StdI->S2, StdI->S2, isite, jsite);
216  }/*if (strcmp(StdI->model, "spin") == 0 )*/
217  else {
218  StdFace_Hopping(StdI, Cphase * StdI->t2, isite, jsite, dR);
219  StdFace_Coulomb(StdI, StdI->V2, isite, jsite);
220  }//<<
221  /*
222  Nearest neighbor intra cell 0 -> 2
223  */
224  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 2, &isite, &jsite, 1, &Cphase, dR);
225 
226  if (strcmp(StdI->model, "spin") == 0 ) {
227  StdFace_GeneralJ(StdI, StdI->J1, StdI->S2, StdI->S2, isite, jsite);
228  }/*if (strcmp(StdI->model, "spin") == 0 )*/
229  else {
230  StdFace_Hopping(StdI, Cphase * StdI->t1, isite, jsite, dR);
231  StdFace_Coulomb(StdI, StdI->V1, isite, jsite);
232  }
233  /*
234  Nearest neighbor intra cell 1 -> 2
235  */
236  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 1, 2, &isite, &jsite, 1, &Cphase, dR);
237 
238  if (strcmp(StdI->model, "spin") == 0 ) {
239  StdFace_GeneralJ(StdI, StdI->J0, StdI->S2, StdI->S2, isite, jsite);
240  }/*if (strcmp(StdI->model, "spin") == 0 )*/
241  else {
242  StdFace_Hopping(StdI, Cphase * StdI->t0, isite, jsite, dR);
243  StdFace_Coulomb(StdI, StdI->V0, isite, jsite);
244  }
245  /*
246  Nearest neighbor along W 1 -> 0
247  */
248  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 0, &isite, &jsite, 1, &Cphase, dR);
249 
250  if (strcmp(StdI->model, "spin") == 0 ) {
251  StdFace_GeneralJ(StdI, StdI->J2, StdI->S2, StdI->S2, isite, jsite);
252  }/*if (strcmp(StdI->model, "spin") == 0 )*/
253  else {
254  StdFace_Hopping(StdI, Cphase * StdI->t2, isite, jsite, dR);
255  StdFace_Coulomb(StdI, StdI->V2, isite, jsite);
256  }
257  /*
258  Nearest neighbor along L 2 -> 0
259  */
260  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 2, 0, &isite, &jsite, 1, &Cphase, dR);
261 
262  if (strcmp(StdI->model, "spin") == 0 ) {
263  StdFace_GeneralJ(StdI, StdI->J1, StdI->S2, StdI->S2, isite, jsite);
264  }
265  else {
266  StdFace_Hopping(StdI, Cphase * StdI->t1, isite, jsite, dR);
267  StdFace_Coulomb(StdI, StdI->V1, isite, jsite);
268  }
269  /*
270  Nearest neighbor along W-L 1 -> 2
271  */
272  StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 1, 2, &isite, &jsite, 1, &Cphase, dR);
273 
274  if (strcmp(StdI->model, "spin") == 0 ) {
275  StdFace_GeneralJ(StdI, StdI->J0, StdI->S2, StdI->S2, isite, jsite);
276  }/*if (strcmp(StdI->model, "spin") == 0 )*/
277  else {
278  StdFace_Hopping(StdI, Cphase * StdI->t0, isite, jsite, dR);
279  StdFace_Coulomb(StdI, StdI->V0, isite, jsite);
280  }
281  /*
282  Second nearest neighbor along W 2 -> 0
283  */
284  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 2, 0, &isite, &jsite, 2, &Cphase, dR);
285 
286  if (strcmp(StdI->model, "spin") == 0 ) {
287  StdFace_GeneralJ(StdI, StdI->J1p, StdI->S2, StdI->S2, isite, jsite);
288  }/*if (strcmp(StdI->model, "spin") == 0 )*/
289  else {
290  StdFace_Hopping(StdI, Cphase * StdI->t1p, isite, jsite, dR);
291  StdFace_Coulomb(StdI, StdI->V1p, isite, jsite);
292  }
293  /*
294  Second nearest neighbor along W 1 -> 2
295  */
296  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 2, &isite, &jsite, 2, &Cphase, dR);
297 
298  if (strcmp(StdI->model, "spin") == 0 ) {
299  StdFace_GeneralJ(StdI, StdI->J0p, StdI->S2, StdI->S2, isite, jsite);
300  }/*if (strcmp(StdI->model, "spin") == 0 )*/
301  else {
302  StdFace_Hopping(StdI, Cphase * StdI->t0p, isite, jsite, dR);
303  StdFace_Coulomb(StdI, StdI->V0p, isite, jsite);
304  }
305  /*
306  Second nearest neighbor along L 1 -> 0
307  */
308  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 0, &isite, &jsite, 2, &Cphase, dR);
309 
310  if (strcmp(StdI->model, "spin") == 0 ) {
311  StdFace_GeneralJ(StdI, StdI->J2p, StdI->S2, StdI->S2, isite, jsite);
312  }/*if (strcmp(StdI->model, "spin") == 0 )*/
313  else {
314  StdFace_Hopping(StdI, Cphase * StdI->t2p, isite, jsite, dR);
315  StdFace_Coulomb(StdI, StdI->V2p, isite, jsite);
316  }
317  /*
318  Second nearest neighbor along L 2 -> 1
319  */
320  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 2, 1, &isite, &jsite, 2, &Cphase, dR);
321 
322  if (strcmp(StdI->model, "spin") == 0 ) {
323  StdFace_GeneralJ(StdI, StdI->J0p, StdI->S2, StdI->S2, isite, jsite);
324  }/*if (strcmp(StdI->model, "spin") == 0 )*/
325  else {
326  StdFace_Hopping(StdI, Cphase * StdI->t0p, isite, jsite, dR);
327  StdFace_Coulomb(StdI, StdI->V0p, isite, jsite);
328  }
329  /*
330  Second nearest neighbor along W-L 0 -> 2
331  */
332  StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 0, 2, &isite, &jsite, 2, &Cphase, dR);
333 
334  if (strcmp(StdI->model, "spin") == 0 ) {
335  StdFace_GeneralJ(StdI, StdI->J1p, StdI->S2, StdI->S2, isite, jsite);
336  }/*if (strcmp(StdI->model, "spin") == 0 )*/
337  else {
338  StdFace_Hopping(StdI, Cphase * StdI->t1p, isite, jsite, dR);
339  StdFace_Coulomb(StdI, StdI->V1p, isite, jsite);
340  }
341  /*
342  Second nearest neighbor along L-W 0 -> 1
343  */
344  StdFace_SetLabel(StdI, fp, iW, iL, - 1, 1, 0, 1, &isite, &jsite, 2, &Cphase, dR);
345 
346  if (strcmp(StdI->model, "spin") == 0 ) {
347  StdFace_GeneralJ(StdI, StdI->J2p, StdI->S2, StdI->S2, isite, jsite);
348  }/*if (strcmp(StdI->model, "spin") == 0 )*/
349  else {
350  StdFace_Hopping(StdI, Cphase * StdI->t2p, isite, jsite, dR);
351  StdFace_Coulomb(StdI, StdI->V2p, isite, jsite);
352  }
353  }/*for (kCell = 0; kCell < StdI->NCell; kCell++)*/
354 
355  fprintf(fp, "plot \'-\' w d lc 7\n0.0 0.0\nend\npause -1\n");
356  fclose(fp);
357  StdFace_PrintGeometry(StdI);
358 }/*void StdFace_Kagome*/
359 
360 #if defined(_HPhi)
361 
367 void StdFace_Kagome_Boost(struct StdIntList *StdI)
368 {
369  int isite, ipivot, i1, i2;
370  int kintr;
371  FILE *fp;
372 
373  if (StdI->box[0][1] != 0 || StdI->box[1][0] != 0) {
374  fprintf(stdout, "\nERROR ! (a0W, a0L, a1W, a1L) can not be used with SpinGCBoost.\n\n");
375  StdFace_exit(-1);
376  }
377  for (i1 = 0; i1 < 3; i1++) {
378  for (i2 = 0; i2 < 3; i2++) {
379  if (fabs(StdI->Jp[i1][i2]) > 1.0e-8) {
380  fprintf(stdout, "\nERROR ! J' can not be used with SpinGCBoost.\n\n");
381  StdFace_exit(-1);
382  }
383  }
384  }
385  /*
386  Magnetic field
387  */
388  fp = fopen("boost.def", "w");
389  fprintf(fp, "# Magnetic field\n");
390  fprintf(fp, "%25.15e %25.15e %25.15e\n",
391  -0.5 * StdI->Gamma, 0.0, -0.5 * StdI->h);
392  /*
393  Interaction
394  */
395  fprintf(fp, "%d # Number of type of J\n", 3);
396  fprintf(fp, "# J 0\n");
397  fprintf(fp, "%25.15e %25.15e %25.15e\n",
398  0.25 * StdI->J0[0][0], 0.25 * StdI->J0[0][1], 0.25 * StdI->J0[0][2]);
399  fprintf(fp, "%25.15e %25.15e %25.15e\n",
400  0.25 * StdI->J0[0][1], 0.25 * StdI->J0[1][1], 0.25 * StdI->J0[1][2]);
401  fprintf(fp, "%25.15e %25.15e %25.15e\n",
402  0.25 * StdI->J0[0][2], 0.25 * StdI->J0[1][2], 0.25 * StdI->J0[2][2]);
403  fprintf(fp, "# J 1\n");
404  fprintf(fp, "%25.15e %25.15e %25.15e\n",
405  0.25 * StdI->J1[0][0], 0.25 * StdI->J1[0][1], 0.25 * StdI->J1[0][2]);
406  fprintf(fp, "%25.15e %25.15e %25.15e\n",
407  0.25 * StdI->J1[0][1], 0.25 * StdI->J1[1][1], 0.25 * StdI->J1[1][2]);
408  fprintf(fp, "%25.15e %25.15e %25.15e\n",
409  0.25 * StdI->J1[0][2], 0.25 * StdI->J1[1][2], 0.25 * StdI->J1[2][2]);
410  fprintf(fp, "# J 2\n");
411  fprintf(fp, "%25.15e %25.15e %25.15e\n",
412  0.25 * StdI->J2[0][0], 0.25 * StdI->J2[0][1], 0.25 * StdI->J2[0][2]);
413  fprintf(fp, "%25.15e %25.15e %25.15e\n",
414  0.25 * StdI->J2[0][1], 0.25 * StdI->J2[1][1], 0.25 * StdI->J2[1][2]);
415  fprintf(fp, "%25.15e %25.15e %25.15e\n",
416  0.25 * StdI->J2[0][2], 0.25 * StdI->J2[1][2], 0.25 * StdI->J2[2][2]); /*
417  Topology
418  */
419  if (StdI->S2 != 1) {
420  fprintf(stdout, "\n ERROR! S2 must be 1 in Boost. \n\n");
421  StdFace_exit(-1);
422  }
423  StdI->ishift_nspin = 3;
424  if (StdI->L < 2) {
425  fprintf(stdout, "\n ERROR! L < 2 \n\n");
426  StdFace_exit(-1);
427  }
428  if (StdI->W % StdI->ishift_nspin != 0) {
429  fprintf(stdout, "\n ERROR! W %% %d != 0 \n\n", StdI->ishift_nspin);
430  StdFace_exit(-1);
431  }
432  StdI->num_pivot = 4;
433  if (StdI->W != 3) {
434  fprintf(stdout, "DEBUG: W != 3\n");
435  StdFace_exit(-1);
436  }
437  StdI->W = 9;
438  fprintf(fp, "# W0 R0 StdI->num_pivot StdI->ishift_nspin\n");
439  fprintf(fp, "%d %d %d %d\n", StdI->W, StdI->L, StdI->num_pivot, StdI->ishift_nspin);
440 
441  StdI->list_6spin_star = (int **)malloc(sizeof(int*) * StdI->num_pivot);
442  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
443  StdI->list_6spin_star[ipivot] = (int *)malloc(sizeof(int) * 7);
444  }
445 
446  StdI->list_6spin_star[0][0] = 1; // num of J
447  StdI->list_6spin_star[0][1] = 1;
448  StdI->list_6spin_star[0][2] = 1;
449  StdI->list_6spin_star[0][3] = 1;
450  StdI->list_6spin_star[0][4] = 4;
451  StdI->list_6spin_star[0][5] = 2;
452  StdI->list_6spin_star[0][6] = -1; // flag
453 
454  StdI->list_6spin_star[1][0] = 6; // num of J
455  StdI->list_6spin_star[1][1] = 1;
456  StdI->list_6spin_star[1][2] = 1;
457  StdI->list_6spin_star[1][3] = 1;
458  StdI->list_6spin_star[1][4] = 6;
459  StdI->list_6spin_star[1][5] = 7;
460  StdI->list_6spin_star[1][6] = 1; // flag
461 
462  StdI->list_6spin_star[2][0] = 6; // num of J
463  StdI->list_6spin_star[2][1] = 1;
464  StdI->list_6spin_star[2][2] = 1;
465  StdI->list_6spin_star[2][3] = 1;
466  StdI->list_6spin_star[2][4] = 4;
467  StdI->list_6spin_star[2][5] = 2;
468  StdI->list_6spin_star[2][6] = 1; // flag
469 
470  StdI->list_6spin_star[3][0] = 5; // num of J
471  StdI->list_6spin_star[3][1] = 1;
472  StdI->list_6spin_star[3][2] = 1;
473  StdI->list_6spin_star[3][3] = 1;
474  StdI->list_6spin_star[3][4] = 4;
475  StdI->list_6spin_star[3][5] = 2;
476  StdI->list_6spin_star[3][6] = 1; // flag
477 
478  fprintf(fp, "# StdI->list_6spin_star\n");
479  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
480  fprintf(fp, "# pivot %d\n", ipivot);
481  for (isite = 0; isite < 7; isite++) {
482  fprintf(fp, "%d ", StdI->list_6spin_star[ipivot][isite]);
483  }
484  fprintf(fp, "\n");
485  }
486 
487  StdI->list_6spin_pair = (int ***)malloc(sizeof(int**) * StdI->num_pivot);
488  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
489  StdI->list_6spin_pair[ipivot] = (int **)malloc(sizeof(int*) * 7);
490  for (isite = 0; isite < 7; isite++) {
491  StdI->list_6spin_pair[ipivot][isite] = (int *)malloc(sizeof(int) * StdI->list_6spin_star[ipivot][0]);
492  }
493  }
494 
495  StdI->list_6spin_pair[0][0][0] = 0; //(1,1,1+2*j)=0
496  StdI->list_6spin_pair[0][1][0] = 4; //(2,1,1+2*j)=1
497  StdI->list_6spin_pair[0][2][0] = 1; //(3,1,1+2*j)=2
498  StdI->list_6spin_pair[0][3][0] = 2; //(4,1,1+2*j)=3
499  StdI->list_6spin_pair[0][4][0] = 3; //(5,1,1+2*j)=4
500  StdI->list_6spin_pair[0][5][0] = 5; //(6,1,1+2*j)=5
501  StdI->list_6spin_pair[0][6][0] = 3; //(7,1,1+2*j)=3 ! type of J
502 
503  StdI->list_6spin_pair[1][0][0] = 0;
504  StdI->list_6spin_pair[1][1][0] = 1;
505  StdI->list_6spin_pair[1][2][0] = 2;
506  StdI->list_6spin_pair[1][3][0] = 3;
507  StdI->list_6spin_pair[1][4][0] = 4;
508  StdI->list_6spin_pair[1][5][0] = 5;
509  StdI->list_6spin_pair[1][6][0] = 3; // type of J
510  StdI->list_6spin_pair[1][0][1] = 1;
511  StdI->list_6spin_pair[1][1][1] = 2;
512  StdI->list_6spin_pair[1][2][1] = 0;
513  StdI->list_6spin_pair[1][3][1] = 3;
514  StdI->list_6spin_pair[1][4][1] = 4;
515  StdI->list_6spin_pair[1][5][1] = 5;
516  StdI->list_6spin_pair[1][6][1] = 1; // type of J
517  StdI->list_6spin_pair[1][0][2] = 0;
518  StdI->list_6spin_pair[1][1][2] = 2;
519  StdI->list_6spin_pair[1][2][2] = 1;
520  StdI->list_6spin_pair[1][3][2] = 3;
521  StdI->list_6spin_pair[1][4][2] = 4;
522  StdI->list_6spin_pair[1][5][2] = 5;
523  StdI->list_6spin_pair[1][6][2] = 2; // type of J
524  StdI->list_6spin_pair[1][0][3] = 1;
525  StdI->list_6spin_pair[1][1][3] = 3;
526  StdI->list_6spin_pair[1][2][3] = 0;
527  StdI->list_6spin_pair[1][3][3] = 2;
528  StdI->list_6spin_pair[1][4][3] = 4;
529  StdI->list_6spin_pair[1][5][3] = 5;
530  StdI->list_6spin_pair[1][6][3] = 3; // type of J
531  StdI->list_6spin_pair[1][0][4] = 2;
532  StdI->list_6spin_pair[1][1][4] = 4;
533  StdI->list_6spin_pair[1][2][4] = 0;
534  StdI->list_6spin_pair[1][3][4] = 1;
535  StdI->list_6spin_pair[1][4][4] = 3;
536  StdI->list_6spin_pair[1][5][4] = 5;
537  StdI->list_6spin_pair[1][6][4] = 2; // type of J
538  StdI->list_6spin_pair[1][0][5] = 2;
539  StdI->list_6spin_pair[1][1][5] = 5;
540  StdI->list_6spin_pair[1][2][5] = 0;
541  StdI->list_6spin_pair[1][3][5] = 1;
542  StdI->list_6spin_pair[1][4][5] = 3;
543  StdI->list_6spin_pair[1][5][5] = 4;
544  StdI->list_6spin_pair[1][6][5] = 1; // type of J
545 
546  StdI->list_6spin_pair[2][0][0] = 0;
547  StdI->list_6spin_pair[2][1][0] = 1;
548  StdI->list_6spin_pair[2][2][0] = 2;
549  StdI->list_6spin_pair[2][3][0] = 3;
550  StdI->list_6spin_pair[2][4][0] = 4;
551  StdI->list_6spin_pair[2][5][0] = 5;
552  StdI->list_6spin_pair[2][6][0] = 3; // type of J
553  StdI->list_6spin_pair[2][0][1] = 1;
554  StdI->list_6spin_pair[2][1][1] = 2;
555  StdI->list_6spin_pair[2][2][1] = 0;
556  StdI->list_6spin_pair[2][3][1] = 3;
557  StdI->list_6spin_pair[2][4][1] = 4;
558  StdI->list_6spin_pair[2][5][1] = 5;
559  StdI->list_6spin_pair[2][6][1] = 1; // type of J
560  StdI->list_6spin_pair[2][0][2] = 0;
561  StdI->list_6spin_pair[2][1][2] = 2;
562  StdI->list_6spin_pair[2][2][2] = 1;
563  StdI->list_6spin_pair[2][3][2] = 3;
564  StdI->list_6spin_pair[2][4][2] = 4;
565  StdI->list_6spin_pair[2][5][2] = 5;
566  StdI->list_6spin_pair[2][6][2] = 2; // type of J
567  StdI->list_6spin_pair[2][0][3] = 1;
568  StdI->list_6spin_pair[2][1][3] = 3;
569  StdI->list_6spin_pair[2][2][3] = 0;
570  StdI->list_6spin_pair[2][3][3] = 2;
571  StdI->list_6spin_pair[2][4][3] = 4;
572  StdI->list_6spin_pair[2][5][3] = 5;
573  StdI->list_6spin_pair[2][6][3] = 3; // type of J
574  StdI->list_6spin_pair[2][0][4] = 2;
575  StdI->list_6spin_pair[2][1][4] = 5;
576  StdI->list_6spin_pair[2][2][4] = 0;
577  StdI->list_6spin_pair[2][3][4] = 1;
578  StdI->list_6spin_pair[2][4][4] = 3;
579  StdI->list_6spin_pair[2][5][4] = 4;
580  StdI->list_6spin_pair[2][6][4] = 2; // type of J
581  StdI->list_6spin_pair[2][0][5] = 2;
582  StdI->list_6spin_pair[2][1][5] = 4;
583  StdI->list_6spin_pair[2][2][5] = 0;
584  StdI->list_6spin_pair[2][3][5] = 1;
585  StdI->list_6spin_pair[2][4][5] = 3;
586  StdI->list_6spin_pair[2][5][5] = 5;
587  StdI->list_6spin_pair[2][6][5] = 1; // type of J
588 
589  StdI->list_6spin_pair[3][0][0] = 0;
590  StdI->list_6spin_pair[3][1][0] = 1;
591  StdI->list_6spin_pair[3][2][0] = 2;
592  StdI->list_6spin_pair[3][3][0] = 3;
593  StdI->list_6spin_pair[3][4][0] = 4;
594  StdI->list_6spin_pair[3][5][0] = 5;
595  StdI->list_6spin_pair[3][6][0] = 3; // type of J
596  StdI->list_6spin_pair[3][0][1] = 1;
597  StdI->list_6spin_pair[3][1][1] = 2;
598  StdI->list_6spin_pair[3][2][1] = 0;
599  StdI->list_6spin_pair[3][3][1] = 3;
600  StdI->list_6spin_pair[3][4][1] = 4;
601  StdI->list_6spin_pair[3][5][1] = 5;
602  StdI->list_6spin_pair[3][6][1] = 1; // type of J
603  StdI->list_6spin_pair[3][0][2] = 0;
604  StdI->list_6spin_pair[3][1][2] = 2;
605  StdI->list_6spin_pair[3][2][2] = 1;
606  StdI->list_6spin_pair[3][3][2] = 3;
607  StdI->list_6spin_pair[3][4][2] = 4;
608  StdI->list_6spin_pair[3][5][2] = 5;
609  StdI->list_6spin_pair[3][6][2] = 2; // type of J
610  StdI->list_6spin_pair[3][0][3] = 2;
611  StdI->list_6spin_pair[3][1][3] = 5;
612  StdI->list_6spin_pair[3][2][3] = 0;
613  StdI->list_6spin_pair[3][3][3] = 1;
614  StdI->list_6spin_pair[3][4][3] = 3;
615  StdI->list_6spin_pair[3][5][3] = 4;
616  StdI->list_6spin_pair[3][6][3] = 2; // type of J
617  StdI->list_6spin_pair[3][0][4] = 2;
618  StdI->list_6spin_pair[3][1][4] = 4;
619  StdI->list_6spin_pair[3][2][4] = 0;
620  StdI->list_6spin_pair[3][3][4] = 1;
621  StdI->list_6spin_pair[3][4][4] = 3;
622  StdI->list_6spin_pair[3][5][4] = 5;
623  StdI->list_6spin_pair[3][6][4] = 1; // type of J
624 
625  fprintf(fp, "# StdI->list_6spin_pair\n");
626  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
627  fprintf(fp, "# pivot %d\n", ipivot);
628  for (kintr = 0; kintr < StdI->list_6spin_star[ipivot][0]; kintr++) {
629  for (isite = 0; isite < 7; isite++) {
630  fprintf(fp, "%d ", StdI->list_6spin_pair[ipivot][isite][kintr]);
631  }
632  fprintf(fp, "\n");
633  }
634  }
635  fclose(fp);
636 
637  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
638  free(StdI->list_6spin_star[ipivot]);
639  }
640  free(StdI->list_6spin_star);
641 
642  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
643  for (isite = 0; isite < 7; isite++) {
644  free(StdI->list_6spin_pair[ipivot][isite]);
645  }
646  free(StdI->list_6spin_pair[ipivot]);
647  }
648  free(StdI->list_6spin_pair);
649 
650 }
651 #endif
void StdFace_InputHopp(std::complex< double > t, std::complex< double > *t0, const char *t0name)
Input hopping integral from the input file, if it is not specified, use the default value(0 or the is...
void StdFace_SetLabel(struct StdIntList *StdI, FILE *fp, int iW, int iL, int diW, int diL, int isiteUC, int jsiteUC, int *isite, int *jsite, int connect, std::complex< double > *Cphase, double *dR)
Set Label in the gnuplot display (Only used in 2D system)
void StdFace_Coulomb(struct StdIntList *StdI, double V, int isite, int jsite)
Add onsite/offsite Coulomb term to the list StdIntList::Cinter and StdIntList::CinterIndx, and increase the number of them (StdIntList::NCinter).
void StdFace_GeneralJ(struct StdIntList *StdI, double J[3][3], int Si2, int Sj2, int isite, int jsite)
Treat J as a 3*3 matrix [(6S + 1)*(6S&#39; + 1) interactions].
void StdFace_InputSpin(double Jp[3][3], double JpAll, const char *Jpname)
Input spin-spin interaction other than nearest-neighbor.
void StdFace_PrintVal_d(const char *valname, double *val, double val0)
Print a valiable (real) read from the input file if it is not specified in the input file (=NaN)...
void StdFace_exit(int errorcode)
MPI Abortation wrapper.
void StdFace_Kagome_Boost(struct StdIntList *StdI)
Definition: Kagome.cpp:367
void StdFace_Hopping(struct StdIntList *StdI, std::complex< double > trans0, int isite, int jsite, double *dR)
Add Hopping for the both spin.
void StdFace_NotUsed_c(const char *valname, std::complex< double > val)
Stop HPhi if a variable (complex) not used is specified in the input file (!=NaN).
void StdFace_HubbardLocal(struct StdIntList *StdI, double mu0, double h0, double Gamma0, double U0, int isite)
Add intra-Coulomb, magnetic field, chemical potential for the itenerant electron. ...
void StdFace_NotUsed_J(const char *valname, double JAll, double J[3][3])
Stop HPhi if variables (real) not used is specified in the input file (!=NaN).
void StdFace_MagField(struct StdIntList *StdI, int S2, double h, double Gamma, int isite)
Add longitudinal and transvars magnetic field to the list.
void StdFace_Kagome(struct StdIntList *StdI)
Setup a Hamiltonian for the Kagome lattice.
Definition: Kagome.cpp:33
void StdFace_PrintGeometry(struct StdIntList *StdI)
Print geometry of sites for the pos-process of correlation function.
void StdFace_InputCoulombV(double V, double *V0, const char *V0name)
Input off-site Coulomb interaction from the input file, if it is not specified, use the default value...
void StdFace_MallocInteractions(struct StdIntList *StdI, int ntransMax, int nintrMax)
Malloc Arrays for interactions.
void StdFace_NotUsed_i(const char *valname, int val)
Stop HPhi if a variable (integer) not used is specified in the input file (!=2147483647, the upper limt of Int).
void StdFace_PrintVal_i(const char *valname, int *val, int val0)
Print a valiable (integer) read from the input file if it is not specified in the input file (=214748...
void StdFace_InitSite(struct StdIntList *StdI, FILE *fp, int dim)
Initialize the super-cell where simulation is performed.
void StdFace_InputSpinNN(double J[3][3], double JAll, double J0[3][3], double J0All, const char *J0name)
Input nearest-neighbor spin-spin interaction.
void StdFace_NotUsed_d(const char *valname, double val)
Stop HPhi if a variable (real) not used is specified in the input file (!=NaN).