HΦ  3.1.0
HoneycombLattice.c
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.h"
22 #include "StdFace_ModelUtil.h"
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <math.h>
26 #include <complex.h>
27 #include <string.h>
28 
33 void StdFace_Honeycomb(struct StdIntList *StdI)
34 {
35  int isite, jsite, kCell, ntransMax, nintrMax;
36  int iL, iW;
37  FILE *fp;
38  double complex Cphase;
39  double dR[3];
40 
44  fp = fopen("lattice.gp", "w");
45 
46  StdI->NsiteUC = 2;
47 
48  fprintf(stdout, " @ Lattice Size & Shape\n\n");
49 
50  StdFace_PrintVal_d("a", &StdI->a, 1.0);
51  StdFace_PrintVal_d("Wlength", &StdI->length[0], StdI->a);
52  StdFace_PrintVal_d("Llength", &StdI->length[1], StdI->a);
53  StdFace_PrintVal_d("Wx", &StdI->direct[0][0], StdI->length[0]);
54  StdFace_PrintVal_d("Wy", &StdI->direct[0][1], 0.0);
55  StdFace_PrintVal_d("Lx", &StdI->direct[1][0], StdI->length[1] * 0.5);
56  StdFace_PrintVal_d("Ly", &StdI->direct[1][1], StdI->length[1] * 0.5 * sqrt(3.0));
57 
58  StdFace_PrintVal_d("phase0", &StdI->phase[0], 0.0);
59  StdFace_PrintVal_d("phase1", &StdI->phase[1], 0.0);
60 
61  StdFace_InitSite(StdI, fp, 2);
62  StdI->tau[0][0] = 0.0; StdI->tau[0][1] = 0.0; StdI->tau[0][2] = 0.0;
63  StdI->tau[1][0] = 1.0 / 3.0; StdI->tau[1][1] = 1.0 / 3.0; StdI->tau[1][2] = 0.0;
67  fprintf(stdout, "\n @ Hamiltonian \n\n");
68  StdFace_NotUsed_J("J1'", StdI->J1pAll, StdI->J1p);
69  StdFace_NotUsed_J("J2'", StdI->J2pAll, StdI->J2p);
70  StdFace_NotUsed_d("t1'", StdI->t1p);
71  StdFace_NotUsed_d("t2'", StdI->t2p);
72  StdFace_NotUsed_d("V1'", StdI->V1p);
73  StdFace_NotUsed_d("V2'", StdI->V2p);
74  StdFace_NotUsed_d("K", StdI->K);
75  StdFace_PrintVal_d("h", &StdI->h, 0.0);
76  StdFace_PrintVal_d("Gamma", &StdI->Gamma, 0.0);
77 
78  if (strcmp(StdI->model, "spin") == 0 ) {
79  StdFace_PrintVal_i("2S", &StdI->S2, 1);
80  StdFace_PrintVal_d("D", &StdI->D[2][2], 0.0);
81  StdFace_InputSpinNN(StdI, StdI->J0, StdI->J0All, "J0");
82  StdFace_InputSpinNN(StdI, StdI->J1, StdI->J1All, "J1");
83  StdFace_InputSpinNN(StdI, StdI->J2, StdI->J2All, "J2");
84  StdFace_InputSpin(StdI, StdI->Jp, StdI->JpAll, "J'");
85  StdFace_NotUsed_d("K", StdI->K);
86 
87  StdFace_NotUsed_d("mu", StdI->mu);
88  StdFace_NotUsed_d("U", StdI->U);
89  StdFace_NotUsed_c("t", 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_d("V", StdI->V);
95  StdFace_NotUsed_d("V0", StdI->V0);
96  StdFace_NotUsed_d("V1", StdI->V1);
97  StdFace_NotUsed_d("V2", StdI->V2);
98  StdFace_NotUsed_d("V'", StdI->Vp);
99  }/*if (strcmp(StdI->model, "spin") == 0 )*/
100  else {
101  StdFace_PrintVal_d("mu", &StdI->mu, 0.0);
102  StdFace_PrintVal_d("U", &StdI->U, 0.0);
103  StdFace_InputHopp(StdI, &StdI->t0, "t0");
104  StdFace_InputHopp(StdI, &StdI->t1, "t1");
105  StdFace_InputHopp(StdI, &StdI->t2, "t2");
106  StdFace_PrintVal_c("t'", &StdI->tp, 0.0);
107  StdFace_InputCoulombV(StdI, &StdI->V0, "V0");
108  StdFace_InputCoulombV(StdI, &StdI->V1, "V1");
109  StdFace_InputCoulombV(StdI, &StdI->V2, "V2");
110  StdFace_PrintVal_d("V'", &StdI->Vp, 0.0);
111 
112  StdFace_NotUsed_J("J0", StdI->J0All, StdI->J0);
113  StdFace_NotUsed_J("J1", StdI->J1All, StdI->J1);
114  StdFace_NotUsed_J("J2", StdI->J2All, StdI->J2);
115  StdFace_NotUsed_J("J'", StdI->JpAll, StdI->Jp);
116  StdFace_NotUsed_d("D", StdI->D[2][2]);
117 
118  if (strcmp(StdI->model, "hubbard") == 0 ) {
119  StdFace_NotUsed_i("2S", StdI->S2);
120  StdFace_NotUsed_J("J", StdI->JAll, StdI->J);
121  }/*if (strcmp(StdI->model, "hubbard") == 0 )*/
122  else {
123  StdFace_PrintVal_i("2S", &StdI->S2, 1);
124  StdFace_InputSpin(StdI, StdI->J, StdI->JAll, "J");
125  }/*if (model != "hubbard")*/
126 
127  }/*if (model != "spin")*/
128  fprintf(stdout, "\n @ Numerical conditions\n\n");
133  StdI->nsite = StdI->NsiteUC * StdI->NCell;
134  if (strcmp(StdI->model, "kondo") == 0 ) StdI->nsite *= 2;
135  StdI->locspinflag = (int *)malloc(sizeof(int) * StdI->nsite);
136 
137  if (strcmp(StdI->model, "spin") == 0 )
138  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = StdI->S2;
139  else if (strcmp(StdI->model, "hubbard") == 0 )
140  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = 0;
141  else
142  for (iL = 0; iL < StdI->nsite / 2; iL++) {
143  StdI->locspinflag[iL] = StdI->S2;
144  StdI->locspinflag[iL + StdI->nsite / 2] = 0;
145  }
149  if (strcmp(StdI->model, "spin") == 0 ) {
150  ntransMax = StdI->nsite * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
151  nintrMax = StdI->NCell * (StdI->NsiteUC/*D*/ + 3/*J*/ + 6/*J'*/)
152  * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
153  }
154  else {
155  ntransMax = StdI->NCell * 2/*spin*/ * (2 * StdI->NsiteUC/*mu+h+Gamma*/ + 6/*t*/ + 12/*t'*/);
156  nintrMax = StdI->NCell * (StdI->NsiteUC/*U*/ + 4 * (3/*V*/ + 6/*V'*/));
157 
158  if (strcmp(StdI->model, "kondo") == 0) {
159  ntransMax += StdI->nsite / 2 * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
160  nintrMax += StdI->nsite / 2 * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
161  }/*if (strcmp(StdI->model, "kondo") == 0)*/
162  }
163 
164  StdFace_MallocInteractions(StdI, ntransMax, nintrMax);
168  for (kCell = 0; kCell < StdI->NCell; kCell++) {
169 
170  iW = StdI->Cell[kCell][0];
171  iL = StdI->Cell[kCell][1];
172  /*
173  Local term
174  */
175  isite = StdI->NsiteUC * kCell;
176  if (strcmp(StdI->model, "kondo") == 0 ) isite += 2 * StdI->NCell;
177 
178  if (strcmp(StdI->model, "spin") == 0 ) {
179  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, isite);
180  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, isite + 1);
181  StdFace_GeneralJ(StdI, StdI->D, StdI->S2, StdI->S2, isite, isite);
182  StdFace_GeneralJ(StdI, StdI->D, StdI->S2, StdI->S2, isite + 1, isite + 1);
183  }/*if (strcmp(StdI->model, "spin") == 0 )*/
184  else {
185  StdFace_HubbardLocal(StdI, StdI->mu, -StdI->h, -StdI->Gamma, StdI->U, isite);
186  StdFace_HubbardLocal(StdI, StdI->mu, -StdI->h, -StdI->Gamma, StdI->U, isite + 1);
187 
188  if (strcmp(StdI->model, "kondo") == 0 ) {
189  jsite = StdI->NsiteUC * kCell;
190  StdFace_GeneralJ(StdI, StdI->J, 1, StdI->S2, isite, jsite);
191  StdFace_GeneralJ(StdI, StdI->J, 1, StdI->S2, isite + 1, jsite + 1);
192  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, jsite);
193  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, jsite + 1);
194  }/*if (strcmp(StdI->model, "kondo") == 0 )*/
195  }
196  /*
197  Nearest neighbor intra cell 0 -> 1
198  */
199  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 1, &isite, &jsite, 1, &Cphase, dR);
200 
201  if (strcmp(StdI->model, "spin") == 0 ) {
202  StdFace_GeneralJ(StdI, StdI->J0, StdI->S2, StdI->S2, isite, jsite);
203  }/*if (strcmp(StdI->model, "spin") == 0 )*/
204  else {
205  StdFace_Hopping(StdI, Cphase * StdI->t0, isite, jsite, dR);
206  StdFace_Coulomb(StdI, StdI->V0, isite, jsite);
207  }
208  /*
209  Nearest neighbor along W 1 -> 0
210  */
211  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 0, &isite, &jsite, 1, &Cphase, dR);
212 
213  if (strcmp(StdI->model, "spin") == 0 ) {
214  StdFace_GeneralJ(StdI, StdI->J1, StdI->S2, StdI->S2, isite, jsite);
215  }/*if (strcmp(StdI->model, "spin") == 0 )*/
216  else {
217  StdFace_Hopping(StdI, Cphase * StdI->t1, isite, jsite, dR);
218  StdFace_Coulomb(StdI, StdI->V1, isite, jsite);
219  }
220  /*
221  Nearest neighbor along L 1 -> 0
222  */
223  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 0, &isite, &jsite, 1, &Cphase, dR);
224 
225  if (strcmp(StdI->model, "spin") == 0 ) {
226  StdFace_GeneralJ(StdI, StdI->J2, StdI->S2, StdI->S2, isite, jsite);
227  }
228  else {
229  StdFace_Hopping(StdI, Cphase * StdI->t2, isite, jsite, dR);
230  StdFace_Coulomb(StdI, StdI->V2, isite, jsite);
231  }
232  /*
233  Second nearest neighbor along W 0 -> 0
234  */
235  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 0, 0, &isite, &jsite, 2, &Cphase, dR);
236 
237  if (strcmp(StdI->model, "spin") == 0 ) {
238  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
239  }/*if (strcmp(StdI->model, "spin") == 0 )*/
240  else {
241  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
242  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
243  }
244  /*
245  Second nearest neighbor along W 1 -> 1
246  */
247  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 1, &isite, &jsite, 2, &Cphase, dR);
248 
249  if (strcmp(StdI->model, "spin") == 0 ) {
250  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
251  }/*if (strcmp(StdI->model, "spin") == 0 )*/
252  else {
253  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
254  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
255  }
256  /*
257  Second nearest neighbor along L 0 -> 0
258  */
259  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 0, 0, &isite, &jsite, 2, &Cphase, dR);
260 
261  if (strcmp(StdI->model, "spin") == 0 ) {
262  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
263  }/*if (strcmp(StdI->model, "spin") == 0 )*/
264  else {
265  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
266  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
267  }
268  /*
269  Second nearest neighbor along L 1 -> 1
270  */
271  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 1, &isite, &jsite, 2, &Cphase, dR);
272 
273  if (strcmp(StdI->model, "spin") == 0 ) {
274  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
275  }/*if (strcmp(StdI->model, "spin") == 0 )*/
276  else {
277  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
278  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
279  }
280  /*
281  Second nearest neighbor along W-L 0 -> 0
282  */
283  StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 0, 0, &isite, &jsite, 2, &Cphase, dR);
284 
285  if (strcmp(StdI->model, "spin") == 0 ) {
286  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
287  }/*if (strcmp(StdI->model, "spin") == 0 )*/
288  else {
289  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
290  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
291  }
292  /*
293  Second nearest neighbor along W - L 1 -> 1
294  */
295  StdFace_SetLabel(StdI, fp, iW, iL, 1, -1, 1, 1, &isite, &jsite, 2, &Cphase, dR);
296 
297  if (strcmp(StdI->model, "spin") == 0 ) {
298  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
299  }/*if (strcmp(StdI->model, "spin") == 0 )*/
300  else {
301  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
302  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
303  }
304  }/*for (kCell = 0; kCell < StdI->NCell; kCell++)*/
305 
306  fprintf(fp, "plot \'-\' w d lc 7\n0.0 0.0\nend\npause -1\n");
307  fclose(fp);
308  StdFace_PrintGeometry(StdI);
309 }/*void StdFace_Honeycomb*/
310 
311 #if defined(_HPhi)
312 
319 {
320  int isite, ipivot, i1, i2;
321  int kintr;
322  FILE *fp;
323 
324  if (StdI->box[0][1] != 0 || StdI->box[1][0] != 0) {
325  fprintf(stdout, "\nERROR ! (a0W, a0L, a1W, a1L) can not be used with SpinGCBoost.\n\n");
326  StdFace_exit(-1);
327  }
328  for (i1 = 0; i1 < 3; i1++) {
329  for (i2 = 0; i2 < 3; i2++) {
330  if (fabs(StdI->Jp[i1][i2]) > 1.0e-8) {
331  fprintf(stdout, "\nERROR ! J' can not be used with SpinGCBoost.\n\n");
332  StdFace_exit(-1);
333  }
334  }
335  }
336  /*
337  Magnetic field
338  */
339  fp = fopen("boost.def", "w");
340  fprintf(fp, "# Magnetic field\n");
341  fprintf(fp, "%25.15e %25.15e %25.15e\n",
342  -0.5 * StdI->Gamma, 0.0, -0.5 *StdI->h);
343  /*
344  Interaction
345  */
346  fprintf(fp, "%d # Number of type of J\n", 3);
347  fprintf(fp, "# J 0\n");
348  fprintf(fp, "%25.15e %25.15e %25.15e\n",
349  0.25 * StdI->J0[0][0], 0.25 * StdI->J0[0][1], 0.25 * StdI->J0[0][2]);
350  fprintf(fp, "%25.15e %25.15e %25.15e\n",
351  0.25 * StdI->J0[0][1], 0.25 * StdI->J0[1][1], 0.25 * StdI->J0[1][2]);
352  fprintf(fp, "%25.15e %25.15e %25.15e\n",
353  0.25 * StdI->J0[0][2], 0.25 * StdI->J0[1][2], 0.25 * StdI->J0[2][2]);
354  fprintf(fp, "# J 1\n");
355  fprintf(fp, "%25.15e %25.15e %25.15e\n",
356  0.25 * StdI->J1[0][0], 0.25 * StdI->J1[0][1], 0.25 * StdI->J1[0][2]);
357  fprintf(fp, "%25.15e %25.15e %25.15e\n",
358  0.25 * StdI->J1[0][1], 0.25 * StdI->J1[1][1], 0.25 * StdI->J1[1][2]);
359  fprintf(fp, "%25.15e %25.15e %25.15e\n",
360  0.25 * StdI->J1[0][2], 0.25 * StdI->J1[1][2], 0.25 * StdI->J1[2][2]);
361  fprintf(fp, "# J 2\n");
362  fprintf(fp, "%25.15e %25.15e %25.15e\n",
363  0.25 * StdI->J2[0][0], 0.25 * StdI->J2[0][1], 0.25 * StdI->J2[0][2]);
364  fprintf(fp, "%25.15e %25.15e %25.15e\n",
365  0.25 * StdI->J2[0][1], 0.25 * StdI->J2[1][1], 0.25 * StdI->J2[1][2]);
366  fprintf(fp, "%25.15e %25.15e %25.15e\n",
367  0.25 * StdI->J2[0][2], 0.25 * StdI->J2[1][2], 0.25 * StdI->J2[2][2]);
368  /*
369  Topology
370  */
371  if (StdI->S2 != 1) {
372  fprintf(stdout, "\n ERROR! S2 must be 1 in Boost. \n\n");
373  StdFace_exit(-1);
374  }
375  StdI->ishift_nspin = 3;
376  if (StdI->L < 2) {
377  fprintf(stdout, "\n ERROR! L < 2 \n\n");
378  StdFace_exit(-1);
379  }
380  if (StdI->W % StdI->ishift_nspin != 0) {
381  fprintf(stdout, "\n ERROR! W %% %d != 0 \n\n", StdI->ishift_nspin);
382  StdFace_exit(-1);
383  }
384  StdI->num_pivot = 2;
385  if (StdI->W != 3) {
386  fprintf(stdout, "DEBUG: W != 3\n");
387  StdFace_exit(-1);
388  }
389  StdI->W = 6;
390  fprintf(fp, "# W0 R0 StdI->num_pivot StdI->ishift_nspin\n");
391  fprintf(fp, "%d %d %d %d\n", StdI->W, StdI->L, StdI->num_pivot, StdI->ishift_nspin);
392 
393  StdI->list_6spin_star = (int **)malloc(sizeof(int*) * StdI->num_pivot);
394  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
395  StdI->list_6spin_star[ipivot] = (int *)malloc(sizeof(int) * 7);
396  }
397 
398  StdI->list_6spin_star[0][0] = 5; // num of J
399  StdI->list_6spin_star[0][1] = 1;
400  StdI->list_6spin_star[0][2] = 1;
401  StdI->list_6spin_star[0][3] = 1;
402  StdI->list_6spin_star[0][4] = 2;
403  StdI->list_6spin_star[0][5] = 1;
404  StdI->list_6spin_star[0][6] = 1; // flag
405 
406  StdI->list_6spin_star[1][0] = 4; //(0,2+2*j)=4 ! num of J
407  StdI->list_6spin_star[1][1] = 1; //(1,2+2*j)=1
408  StdI->list_6spin_star[1][2] = 1; //(2,2+2*j)=1
409  StdI->list_6spin_star[1][3] = 1; //(3,2+2*j)=1
410  StdI->list_6spin_star[1][4] = 2; //(4,2+2*j)=2
411  StdI->list_6spin_star[1][5] = 2; //(5,2+2*j)=2
412  StdI->list_6spin_star[1][6] = 1; //(6,2+2*j)=1 ! flag
413 
414  fprintf(fp, "# StdI->list_6spin_star\n");
415  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
416  fprintf(fp, "# pivot %d\n", ipivot);
417  for (isite = 0; isite < 7; isite++) {
418  fprintf(fp, "%d ", StdI->list_6spin_star[ipivot][isite]);
419  }
420  fprintf(fp, "\n");
421  }
422 
423  StdI->list_6spin_pair = (int ***)malloc(sizeof(int**) * StdI->num_pivot);
424  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
425  StdI->list_6spin_pair[ipivot] = (int **)malloc(sizeof(int*) * 7);
426  for (isite = 0; isite < 7; isite++) {
427  StdI->list_6spin_pair[ipivot][isite] = (int *)malloc(sizeof(int) * StdI->list_6spin_star[ipivot][0]);
428  }
429  }
430 
431  StdI->list_6spin_pair[0][0][0] = 0; //(1,1,1+2*j)=0
432  StdI->list_6spin_pair[0][1][0] = 1; //(2,1,1+2*j)=1
433  StdI->list_6spin_pair[0][2][0] = 2; //(3,1,1+2*j)=2
434  StdI->list_6spin_pair[0][3][0] = 3; //(4,1,1+2*j)=3
435  StdI->list_6spin_pair[0][4][0] = 4; //(5,1,1+2*j)=4
436  StdI->list_6spin_pair[0][5][0] = 5; //(6,1,1+2*j)=5
437  StdI->list_6spin_pair[0][6][0] = 1; //(7,1,1+2*j)=3 ! type of J
438  StdI->list_6spin_pair[0][0][1] = 1; //(1,2,1+2*j)=1
439  StdI->list_6spin_pair[0][1][1] = 2; //(2,2,1+2*j)=2
440  StdI->list_6spin_pair[0][2][1] = 0; //(3,2,1+2*j)=0
441  StdI->list_6spin_pair[0][3][1] = 3; //(4,2,1+2*j)=3
442  StdI->list_6spin_pair[0][4][1] = 4; //(5,2,1+2*j)=4
443  StdI->list_6spin_pair[0][5][1] = 5; //(6,2,1+2*j)=5
444  StdI->list_6spin_pair[0][6][1] = 2; //(7,2,1+2*j)=1 ! type of J
445  StdI->list_6spin_pair[0][0][2] = 2; //(1,3,1+2*j)=2
446  StdI->list_6spin_pair[0][1][2] = 3; //(2,3,1+2*j)=3
447  StdI->list_6spin_pair[0][2][2] = 0; //(3,3,1+2*j)=0
448  StdI->list_6spin_pair[0][3][2] = 1; //(4,3,1+2*j)=1
449  StdI->list_6spin_pair[0][4][2] = 4; //(5,3,1+2*j)=4
450  StdI->list_6spin_pair[0][5][2] = 5; //(6,3,1+2*j)=5
451  StdI->list_6spin_pair[0][6][2] = 1; //(7,3,1+2*j)=3 ! type of J
452  StdI->list_6spin_pair[0][0][3] = 0; //(1,4,1+2*j)=0
453  StdI->list_6spin_pair[0][1][3] = 4; //(2,4,1+2*j)=4
454  StdI->list_6spin_pair[0][2][3] = 1; //(3,4,1+2*j)=1
455  StdI->list_6spin_pair[0][3][3] = 2; //(4,4,1+2*j)=2
456  StdI->list_6spin_pair[0][4][3] = 3; //(5,4,1+2*j)=3
457  StdI->list_6spin_pair[0][5][3] = 5; //(6,4,1+2*j)=5
458  StdI->list_6spin_pair[0][6][3] = 2; //(7,4,1+2*j)=1 ! type of J
459  StdI->list_6spin_pair[0][0][4] = 1; //(1,5,1+2*j)=1
460  StdI->list_6spin_pair[0][1][4] = 5; //(2,5,1+2*j)=5
461  StdI->list_6spin_pair[0][2][4] = 0; //(3,5,1+2*j)=0
462  StdI->list_6spin_pair[0][3][4] = 2; //(4,5,1+2*j)=2
463  StdI->list_6spin_pair[0][4][4] = 3; //(5,5,1+2*j)=3
464  StdI->list_6spin_pair[0][5][4] = 4; //(6,5,1+2*j)=4
465  StdI->list_6spin_pair[0][6][4] = 3; //(7,5,1+2*j)=2 ! type of J
466 
467  StdI->list_6spin_pair[1][0][0] = 0; //(1,1,2+2*j)=0
468  StdI->list_6spin_pair[1][1][0] = 1; //(2,1,2+2*j)=1
469  StdI->list_6spin_pair[1][2][0] = 2; //(3,1,2+2*j)=2
470  StdI->list_6spin_pair[1][3][0] = 3; //(4,1,2+2*j)=3
471  StdI->list_6spin_pair[1][4][0] = 4; //(5,1,2+2*j)=4
472  StdI->list_6spin_pair[1][5][0] = 5; //(6,1,2+2*j)=5
473  StdI->list_6spin_pair[1][6][0] = 2; //(7,1,2+2*j)=1 ! type of J
474  StdI->list_6spin_pair[1][0][1] = 1; //(1,2,2+2*j)=1
475  StdI->list_6spin_pair[1][1][1] = 2; //(2,2,2+2*j)=2
476  StdI->list_6spin_pair[1][2][1] = 0; //(3,2,2+2*j)=0
477  StdI->list_6spin_pair[1][3][1] = 3; //(4,2,2+2*j)=3
478  StdI->list_6spin_pair[1][4][1] = 4; //(5,2,2+2*j)=4
479  StdI->list_6spin_pair[1][5][1] = 5; //(6,2,2+2*j)=5
480  StdI->list_6spin_pair[1][6][1] = 1; //(7,2,2+2*j)=3 ! type of J
481  StdI->list_6spin_pair[1][0][2] = 0; //(1,3,2+2*j)=0
482  StdI->list_6spin_pair[1][1][2] = 4; //(2,3,2+2*j)=4
483  StdI->list_6spin_pair[1][2][2] = 1; //(3,3,2+2*j)=1
484  StdI->list_6spin_pair[1][3][2] = 2; //(4,3,2+2*j)=2
485  StdI->list_6spin_pair[1][4][2] = 3; //(5,3,2+2*j)=3
486  StdI->list_6spin_pair[1][5][2] = 5; //(6,3,2+2*j)=5
487  StdI->list_6spin_pair[1][6][2] = 3; //(7,3,2+2*j)=2 ! type of J
488  StdI->list_6spin_pair[1][0][3] = 2; //(1,4,2+2*j)=2
489  StdI->list_6spin_pair[1][1][3] = 5; //(2,4,2+2*j)=5
490  StdI->list_6spin_pair[1][2][3] = 0; //(3,4,2+2*j)=0
491  StdI->list_6spin_pair[1][3][3] = 1; //(4,4,2+2*j)=1
492  StdI->list_6spin_pair[1][4][3] = 3; //(5,4,2+2*j)=3
493  StdI->list_6spin_pair[1][5][3] = 4; //(6,4,2+2*j)=4
494  StdI->list_6spin_pair[1][6][3] = 3; //(7,4,2+2*j)=2 ! type of J
495 
496  fprintf(fp, "# StdI->list_6spin_pair\n");
497  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
498  fprintf(fp, "# pivot %d\n", ipivot);
499  for (kintr = 0; kintr < StdI->list_6spin_star[ipivot][0]; kintr++) {
500  for (isite = 0; isite < 7; isite++) {
501  fprintf(fp, "%d ", StdI->list_6spin_pair[ipivot][isite][kintr]);
502  }
503  fprintf(fp, "\n");
504  }
505  }
506  fclose(fp);
507 
508  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
509  free(StdI->list_6spin_star[ipivot]);
510  }
511  free(StdI->list_6spin_star);
512 
513  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
514  for (isite = 0; isite < 7; isite++) {
515  free(StdI->list_6spin_pair[ipivot][isite]);
516  }
517  free(StdI->list_6spin_pair[ipivot]);
518  }
519  free(StdI->list_6spin_pair);
520 
521 }
522 #endif
void StdFace_PrintVal_i(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...
double V2
Anisotropic Coulomb potential (1st), input parameter.
Definition: StdFace_vals.h:78
double Jp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J&#39;x, J&#39;y, J&#39;z, J&#39;xy, etc.
Definition: StdFace_vals.h:102
int box[3][3]
The shape of the super-cell. Input parameter a0W, a0L, a0H, etc. or defined from StdIntList::W, etc. in StdFace_InitSite().
Definition: StdFace_vals.h:44
double complex t2p
Anisotropic hopping (2nd), input parameter.
Definition: StdFace_vals.h:69
double J[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter Jx, Jy, Jz, Jxy, etc.
Definition: StdFace_vals.h:100
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].
int L
Number of sites along the 2nd axis, input parameter.
Definition: StdFace_vals.h:40
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. ...
double D[3][3]
Coefficient for input parameter D. Only D[2][2] is used.
Definition: StdFace_vals.h:124
double J1p[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J1&#39;x, J1&#39;y...
Definition: StdFace_vals.h:113
void StdFace_PrintGeometry(struct StdIntList *StdI)
Print geometry of sites for the pos-process of correlation function.
double JpAll
Isotropic, diagonal spin coupling (2nd Near), input parameter Jp.
Definition: StdFace_vals.h:84
double J1[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J1x, J1y, J1z, J1xy, etc. or set in StdFace_InputSpinNN().
Definition: StdFace_vals.h:110
double J2p[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J2&#39;x, J2&#39;y...
Definition: StdFace_vals.h:119
int ** list_6spin_star
Definition: StdFace_vals.h:251
void StdFace_Hopping(struct StdIntList *StdI, double complex trans0, int isite, int jsite, double *dR)
Add Hopping for the both spin.
double complex t
Nearest-neighbor hopping, input parameter.
Definition: StdFace_vals.h:62
void StdFace_MallocInteractions(struct StdIntList *StdI, int ntransMax, int nintrMax)
Malloc Arrays for interactions.
double JAll
Isotropic, diagonal spin coupling (1st Near.), input parameter J.
Definition: StdFace_vals.h:82
int S2
Total spin |S| of a local spin, input from file.
Definition: StdFace_vals.h:215
int NsiteUC
Number of sites in the unit cell. Defined in the beginning of each lattice function.
Definition: StdFace_vals.h:53
double J1All
Anisotropic, diagonal spin coupling (1nd Near), input parameter J1.
Definition: StdFace_vals.h:90
void StdFace_InputCoulombV(struct StdIntList *StdI, double *V0, char *V0name)
Input off-site Coulomb interaction from the input file, if it is not specified, use the default value...
void StdFace_InputHopp(struct StdIntList *StdI, double complex *t0, char *t0name)
Input hopping integral from the input file, if it is not specified, use the default value(0 or the is...
void StdFace_InitSite(struct StdIntList *StdI, FILE *fp, int dim)
Initialize the super-cell where simulation is performed.
int W
Number of sites along the 1st axis, input parameter.
Definition: StdFace_vals.h:39
double V2p
Anisotropic Coulomb potential (2nd), input parameter.
Definition: StdFace_vals.h:79
char model[256]
Name of model, input parameter.
Definition: StdFace_vals.h:60
void StdFace_NotUsed_J(char *valname, double JAll, double J[3][3])
Stop HPhi if variables (real) not used is specified in the input file (!=NaN).
double Gamma
Transvars magnetic field, input parameter.
Definition: StdFace_vals.h:127
double V1
Anisotropic Coulomb potential (1st), input parameter.
Definition: StdFace_vals.h:76
double J0All
Anisotropic, diagonal spin coupling (1nd Near), input parameter J0.
Definition: StdFace_vals.h:86
double J0[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J0x, J0y, J0z, J0xy, etc. or set in StdFace_InputSpinNN().
Definition: StdFace_vals.h:104
double U
On-site Coulomb potential, input parameter.
Definition: StdFace_vals.h:71
int ** Cell
[StdIntList][3] The cell position in the fractional coordinate. Malloc and Set in StdFace_InitSite()...
Definition: StdFace_vals.h:51
double phase[3]
Boundary phase, input parameter phase0, etc.
Definition: StdFace_vals.h:133
int ishift_nspin
Definition: StdFace_vals.h:253
double length[3]
Anisotropic lattice constant, input parameter wlength, llength, hlength.
Definition: StdFace_vals.h:37
int * locspinflag
[StdIntList::nsite] LocSpin in Expert mode, malloc and set in each lattice file.
Definition: StdFace_vals.h:141
double complex tp
2nd-nearest hopping, input parameter
Definition: StdFace_vals.h:63
void StdFace_Honeycomb(struct StdIntList *StdI)
Setup a Hamiltonian for the Hubbard model on a Honeycomb lattice.
double complex t1
Anisotropic hopping (1st), input parameter.
Definition: StdFace_vals.h:66
double V
Off-site Coulomb potential (1st), input parameter.
Definition: StdFace_vals.h:72
double complex t0
Anisotropic hopping (1st), input parameter.
Definition: StdFace_vals.h:64
double direct[3][3]
The unit direct lattice vector. Set in StdFace_InitSite().
Definition: StdFace_vals.h:42
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_NotUsed_d(char *valname, double val)
Stop HPhi if a variable (real) not used is specified in the input file (!=NaN).
double V0
Anisotropic Coulomb potential (1st), input parameter.
Definition: StdFace_vals.h:74
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_InputSpin(struct StdIntList *StdI, double Jp[3][3], double JpAll, char *Jpname)
Input spin-spin interaction other than nearest-neighbor.
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, double complex *Cphase, double *dR)
Set Label in the gnuplot display (Only used in 2D system)
double complex t1p
Anisotropic hopping (2nd), input parameter.
Definition: StdFace_vals.h:67
double complex t2
Anisotropic hopping (1st), input parameter.
Definition: StdFace_vals.h:68
void StdFace_Honeycomb_Boost(struct StdIntList *StdI)
double mu
Chemical potential, input parameter.
Definition: StdFace_vals.h:61
void StdFace_PrintVal_d(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_InputSpinNN(struct StdIntList *StdI, double J0[3][3], double J0All, char *J0name)
Input nearest-neighbor spin-spin interaction.
int NCell
The number of the unit cell in the super-cell (determinant of StdIntList::box). Set in StdFace_InitSi...
Definition: StdFace_vals.h:49
double Vp
Off-site Coulomb potential (2nd), input parameter.
Definition: StdFace_vals.h:73
double J1pAll
Anisotropic, diagonal spin coupling (2nd Near), input parameter J1&#39;.
Definition: StdFace_vals.h:92
int *** list_6spin_pair
Definition: StdFace_vals.h:250
void StdFace_NotUsed_c(char *valname, double complex val)
Stop HPhi if a variable (complex) not used is specified in the input file (!=NaN).
void StdFace_PrintVal_c(char *valname, double complex *val, double complex val0)
Print a valiable (complex) read from the input file if it is not specified in the input file (=NaN)...
int nsite
Number of sites, set in the each lattice file.
Definition: StdFace_vals.h:140
double J2All
Anisotropic, diagonal spin coupling (1nd Near), input parameter J2.
Definition: StdFace_vals.h:94
Variables used in the Standard mode. These variables are passed as a pointer of the structure(StdIntL...
void StdFace_NotUsed_i(char *valname, int val)
Stop HPhi if a variable (integer) not used is specified in the input file (!=2147483647, the upper limt of Int).
double h
Longitudinal magnetic field, input parameter.
Definition: StdFace_vals.h:126
double a
The lattice constant. Input parameter.
Definition: StdFace_vals.h:36
double J2[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J2x, J2y, J2z, J2xy, etc. or set in StdFace_InputSpinNN().
Definition: StdFace_vals.h:116
double J2pAll
Anisotropic, diagonal spin coupling (2nd Near), input parameter J2&#39;.
Definition: StdFace_vals.h:96
double ** tau
Cell-internal site position in the fractional coordinate. Defined in the beginning of each lattice fu...
Definition: StdFace_vals.h:55
void StdFace_exit(int errorcode)
MPI Abortation wrapper.
double V1p
Anisotropic Coulomb potential (2nd), input parameter.
Definition: StdFace_vals.h:77
double K
4-spin term. Not used.
Definition: StdFace_vals.h:128