HΦ  3.1.0
Kagome.c File Reference

Standard mode for the kagome lattice. More...

#include "StdFace_vals.h"
#include "StdFace_ModelUtil.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <complex.h>
#include <string.h>

Go to the source code of this file.

Functions

void StdFace_Kagome (struct StdIntList *StdI)
 Setup a Hamiltonian for the Kagome lattice. More...
 
void StdFace_Kagome_Boost (struct StdIntList *StdI)
 

Detailed Description

Standard mode for the kagome lattice.

Definition in file Kagome.c.

Function Documentation

◆ StdFace_Kagome()

void StdFace_Kagome ( struct StdIntList StdI)

Setup a Hamiltonian for the Kagome lattice.

Author
Mitsuaki Kawamura (The University of Tokyo)

(1) Compute the shape of the super-cell and sites in the super-cell

(2) check & store parameters of Hamiltonian

(3) Set local spin flag (StdIntList::locspinflag) and the number of sites (StdIntList::nsite)

(4) Compute the upper limit of the number of Transfer & Interaction and malloc them.

(5) Set Transfer & Interaction

Parameters
[in,out]StdI

Definition at line 33 of file Kagome.c.

References StdIntList::a, StdIntList::Cell, StdIntList::D, StdIntList::direct, StdIntList::Gamma, StdIntList::h, StdIntList::J, StdIntList::J0, StdIntList::J0All, StdIntList::J1, StdIntList::J1All, StdIntList::J1p, StdIntList::J1pAll, StdIntList::J2, StdIntList::J2All, StdIntList::J2p, StdIntList::J2pAll, StdIntList::JAll, StdIntList::Jp, StdIntList::JpAll, StdIntList::K, StdIntList::length, StdIntList::locspinflag, StdIntList::model, StdIntList::mu, StdIntList::NCell, StdIntList::nsite, StdIntList::NsiteUC, StdIntList::phase, StdIntList::S2, StdFace_Coulomb(), StdFace_GeneralJ(), StdFace_Hopping(), StdFace_HubbardLocal(), StdFace_InitSite(), StdFace_InputCoulombV(), StdFace_InputHopp(), StdFace_InputSpin(), StdFace_InputSpinNN(), StdFace_MagField(), StdFace_MallocInteractions(), StdFace_NotUsed_c(), StdFace_NotUsed_d(), StdFace_NotUsed_i(), StdFace_NotUsed_J(), StdFace_PrintGeometry(), StdFace_PrintVal_c(), StdFace_PrintVal_d(), StdFace_PrintVal_i(), StdFace_SetLabel(), StdIntList::t, StdIntList::t0, StdIntList::t1, StdIntList::t1p, StdIntList::t2, StdIntList::t2p, StdIntList::tau, StdIntList::tp, StdIntList::U, StdIntList::V, StdIntList::V0, StdIntList::V1, StdIntList::V1p, StdIntList::V2, StdIntList::V2p, and StdIntList::Vp.

Referenced by StdFace_main().

36 {
37  int isite, jsite, isiteUC, kCell, ntransMax, nintrMax;
38  int iL, iW;
39  FILE *fp;
40  double complex 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_J("J1'", StdI->J1pAll, StdI->J1p);
73  StdFace_NotUsed_J("J2'", StdI->J2pAll, StdI->J2p);
74  StdFace_NotUsed_d("t1'", StdI->t1p);
75  StdFace_NotUsed_d("t2'", StdI->t2p);
76  StdFace_NotUsed_d("V1'", StdI->V1p);
77  StdFace_NotUsed_d("V2'", StdI->V2p);
78  StdFace_NotUsed_d("K", StdI->K);
79  StdFace_PrintVal_d("h", &StdI->h, 0.0);
80  StdFace_PrintVal_d("Gamma", &StdI->Gamma, 0.0);
81 
82  if (strcmp(StdI->model, "spin") == 0 ) {
83  StdFace_PrintVal_i("2S", &StdI->S2, 1);
84  StdFace_PrintVal_d("D", &StdI->D[2][2], 0.0);
85  StdFace_InputSpinNN(StdI, StdI->J0, StdI->J0All, "J0");
86  StdFace_InputSpinNN(StdI, StdI->J1, StdI->J1All, "J1");
87  StdFace_InputSpinNN(StdI, StdI->J2, StdI->J2All, "J2");
88  StdFace_InputSpin(StdI, StdI->Jp, StdI->JpAll, "J'");
89 
90  StdFace_NotUsed_d("mu", StdI->mu);
91  StdFace_NotUsed_d("U", StdI->U);
92  StdFace_NotUsed_c("t", StdI->t);
93  StdFace_NotUsed_c("t0", StdI->t0);
94  StdFace_NotUsed_c("t1", StdI->t1);
95  StdFace_NotUsed_c("t2", StdI->t2);
96  StdFace_NotUsed_c("t'", StdI->tp);
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  }/*if (strcmp(StdI->model, "spin") == 0 )*/
103  else {
104  StdFace_PrintVal_d("mu", &StdI->mu, 0.0);
105  StdFace_PrintVal_d("U", &StdI->U, 0.0);
106  StdFace_InputHopp(StdI, &StdI->t0, "t0");
107  StdFace_InputHopp(StdI, &StdI->t1, "t1");
108  StdFace_InputHopp(StdI, &StdI->t2, "t2");
109  StdFace_PrintVal_c("t'", &StdI->tp, 0.0);
110  StdFace_InputCoulombV(StdI, &StdI->V0, "V0");
111  StdFace_InputCoulombV(StdI, &StdI->V1, "V1");
112  StdFace_InputCoulombV(StdI, &StdI->V2, "V2");
113  StdFace_PrintVal_d("V'", &StdI->Vp, 0.0);
114 
115  StdFace_NotUsed_J("J0", StdI->J0All, StdI->J0);
116  StdFace_NotUsed_J("J1", StdI->J1All, StdI->J1);
117  StdFace_NotUsed_J("J2", StdI->J2All, StdI->J2);
118  StdFace_NotUsed_J("J'", StdI->JpAll, StdI->Jp);
119  StdFace_NotUsed_d("D", StdI->D[2][2]);
120 
121  if (strcmp(StdI->model, "hubbard") == 0 ) {
122  StdFace_NotUsed_i("2S", StdI->S2);
123  StdFace_NotUsed_J("J", StdI->JAll, StdI->J);
124  }/*if (strcmp(StdI->model, "hubbard") == 0 )*/
125  else {
126  StdFace_PrintVal_i("2S", &StdI->S2, 1);
127  StdFace_InputSpin(StdI, StdI->J, StdI->JAll, "J");
128  }/*if (model != "hubbard")*/
129 
130  }/*if (model != "spin")@@*/
131  fprintf(stdout, "\n @ Numerical conditions\n\n");
136  StdI->nsite = StdI->NsiteUC * StdI->NCell;
137  if (strcmp(StdI->model, "kondo") == 0 ) StdI->nsite *= 2;
138  StdI->locspinflag = (int *)malloc(sizeof(int) * StdI->nsite);
139 
140  if (strcmp(StdI->model, "spin") == 0 )
141  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = StdI->S2;
142  else if (strcmp(StdI->model, "hubbard") == 0 )
143  for (isite = 0; isite < StdI->nsite; isite++) StdI->locspinflag[isite] = 0;
144  else
145  for (iL = 0; iL < StdI->nsite / 2; iL++) {
146  StdI->locspinflag[iL] = StdI->S2;
147  StdI->locspinflag[iL + StdI->nsite / 2] = 0;
148  }
152  if (strcmp(StdI->model, "spin") == 0 ) {//>>
153  ntransMax = StdI->nsite * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
154  nintrMax = StdI->NCell * (StdI->NsiteUC/*D*/ + 6/*J*/ + 6/*J'*/)
155  * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
156  }
157  else {
158  ntransMax = StdI->NCell * 2/*spin*/ * (2 * StdI->NsiteUC/*mu+h+Gamma*/ + 12/*t*/ + 12/*t'*/);
159  nintrMax = StdI->NCell * (StdI->NsiteUC/*U*/ + 4 * (6/*V*/ + 6/*V'*/));
160 
161  if (strcmp(StdI->model, "kondo") == 0) {
162  ntransMax += StdI->nsite / 2 * (StdI->S2 + 1/*h*/ + 2 * StdI->S2/*Gamma*/);
163  nintrMax += StdI->nsite / 2 * (3 * StdI->S2 + 1) * (3 * StdI->S2 + 1);
164  }/*if (strcmp(StdI->model, "kondo") == 0)*/
165  }//<<
166 
167  StdFace_MallocInteractions(StdI, ntransMax, nintrMax);
171  for (kCell = 0; kCell < StdI->NCell; kCell++) {
172 
173  iW = StdI->Cell[kCell][0];
174  iL = StdI->Cell[kCell][1];
175  /*>>
176  Local term
177  */
178  isite = StdI->NsiteUC * kCell;
179  if (strcmp(StdI->model, "kondo") == 0 ) isite += StdI->nsite / 2;
180 
181  if (strcmp(StdI->model, "spin") == 0 ) {
182  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++) {
183  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, isite + isiteUC);
184  StdFace_GeneralJ(StdI, StdI->D, StdI->S2, StdI->S2, isite + isiteUC, isite + isiteUC);
185  }/*for (jsite = 0; jsite < StdI->NsiteUC; jsite++)*/
186  }/*if (strcmp(StdI->model, "spin") == 0 )*/
187  else {
188  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++)
189  StdFace_HubbardLocal(StdI, StdI->mu, -StdI->h, -StdI->Gamma, StdI->U, isite + isiteUC);
190 
191  if (strcmp(StdI->model, "kondo") == 0 ) {
192  jsite = StdI->NsiteUC * kCell;
193  for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++) {
194  StdFace_GeneralJ(StdI, StdI->J, 1, StdI->S2, isite + isiteUC, jsite + isiteUC);
195  StdFace_MagField(StdI, StdI->S2, -StdI->h, -StdI->Gamma, jsite + isiteUC);
196  }/*for (isiteUC = 0; isiteUC < StdI->NsiteUC; isiteUC++)*/
197  }/*if (strcmp(StdI->model, "kondo") == 0 )*/
198  }/*if (strcmp(StdI->model, "spin") != 0 )<<*/
199  /*>>
200  Nearest neighbor intra cell 0 -> 1
201  */
202  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 1, &isite, &jsite, 1, &Cphase, dR);
203 
204  if (strcmp(StdI->model, "spin") == 0 ) {
205  StdFace_GeneralJ(StdI, StdI->J2, StdI->S2, StdI->S2, isite, jsite);
206  }/*if (strcmp(StdI->model, "spin") == 0 )*/
207  else {
208  StdFace_Hopping(StdI, Cphase * StdI->t2, isite, jsite, dR);
209  StdFace_Coulomb(StdI, StdI->V2, isite, jsite);
210  }//<<
211  /*
212  Nearest neighbor intra cell 0 -> 2
213  */
214  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 2, &isite, &jsite, 1, &Cphase, dR);
215 
216  if (strcmp(StdI->model, "spin") == 0 ) {
217  StdFace_GeneralJ(StdI, StdI->J1, StdI->S2, StdI->S2, isite, jsite);
218  }/*if (strcmp(StdI->model, "spin") == 0 )*/
219  else {
220  StdFace_Hopping(StdI, Cphase * StdI->t1, isite, jsite, dR);
221  StdFace_Coulomb(StdI, StdI->V1, isite, jsite);
222  }
223  /*
224  Nearest neighbor intra cell 1 -> 2
225  */
226  StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 1, 2, &isite, &jsite, 1, &Cphase, dR);
227 
228  if (strcmp(StdI->model, "spin") == 0 ) {
229  StdFace_GeneralJ(StdI, StdI->J0, StdI->S2, StdI->S2, isite, jsite);
230  }/*if (strcmp(StdI->model, "spin") == 0 )*/
231  else {
232  StdFace_Hopping(StdI, Cphase * StdI->t0, isite, jsite, dR);
233  StdFace_Coulomb(StdI, StdI->V0, isite, jsite);
234  }
235  /*
236  Nearest neighbor along W 1 -> 0
237  */
238  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 0, &isite, &jsite, 1, &Cphase, dR);
239 
240  if (strcmp(StdI->model, "spin") == 0 ) {
241  StdFace_GeneralJ(StdI, StdI->J2, StdI->S2, StdI->S2, isite, jsite);
242  }/*if (strcmp(StdI->model, "spin") == 0 )*/
243  else {
244  StdFace_Hopping(StdI, Cphase * StdI->t2, isite, jsite, dR);
245  StdFace_Coulomb(StdI, StdI->V2, isite, jsite);
246  }
247  /*
248  Nearest neighbor along L 2 -> 0
249  */
250  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 2, 0, &isite, &jsite, 1, &Cphase, dR);
251 
252  if (strcmp(StdI->model, "spin") == 0 ) {
253  StdFace_GeneralJ(StdI, StdI->J1, StdI->S2, StdI->S2, isite, jsite);
254  }
255  else {
256  StdFace_Hopping(StdI, Cphase * StdI->t1, isite, jsite, dR);
257  StdFace_Coulomb(StdI, StdI->V1, isite, jsite);
258  }
259  /*
260  Nearest neighbor along W-L 1 -> 2
261  */
262  StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 1, 2, &isite, &jsite, 1, &Cphase, dR);
263 
264  if (strcmp(StdI->model, "spin") == 0 ) {
265  StdFace_GeneralJ(StdI, StdI->J0, StdI->S2, StdI->S2, isite, jsite);
266  }/*if (strcmp(StdI->model, "spin") == 0 )*/
267  else {
268  StdFace_Hopping(StdI, Cphase * StdI->t0, isite, jsite, dR);
269  StdFace_Coulomb(StdI, StdI->V0, isite, jsite);
270  }
271  /*
272  Second nearest neighbor along W 2 -> 0
273  */
274  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 2, 0, &isite, &jsite, 2, &Cphase, dR);
275 
276  if (strcmp(StdI->model, "spin") == 0 ) {
277  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
278  }/*if (strcmp(StdI->model, "spin") == 0 )*/
279  else {
280  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
281  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
282  }
283  /*
284  Second nearest neighbor along W 1 -> 2
285  */
286  StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 2, &isite, &jsite, 2, &Cphase, dR);
287 
288  if (strcmp(StdI->model, "spin") == 0 ) {
289  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
290  }/*if (strcmp(StdI->model, "spin") == 0 )*/
291  else {
292  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
293  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
294  }
295  /*
296  Second nearest neighbor along L 1 -> 0
297  */
298  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 0, &isite, &jsite, 2, &Cphase, dR);
299 
300  if (strcmp(StdI->model, "spin") == 0 ) {
301  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
302  }/*if (strcmp(StdI->model, "spin") == 0 )*/
303  else {
304  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
305  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
306  }
307  /*
308  Second nearest neighbor along L 2 -> 1
309  */
310  StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 2, 1, &isite, &jsite, 2, &Cphase, dR);
311 
312  if (strcmp(StdI->model, "spin") == 0 ) {
313  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
314  }/*if (strcmp(StdI->model, "spin") == 0 )*/
315  else {
316  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
317  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
318  }
319  /*
320  Second nearest neighbor along W-L 0 -> 2
321  */
322  StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 0, 2, &isite, &jsite, 2, &Cphase, dR);
323 
324  if (strcmp(StdI->model, "spin") == 0 ) {
325  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
326  }/*if (strcmp(StdI->model, "spin") == 0 )*/
327  else {
328  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
329  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
330  }
331  /*
332  Second nearest neighbor along L-W 0 -> 1
333  */
334  StdFace_SetLabel(StdI, fp, iW, iL, - 1, 1, 0, 1, &isite, &jsite, 2, &Cphase, dR);
335 
336  if (strcmp(StdI->model, "spin") == 0 ) {
337  StdFace_GeneralJ(StdI, StdI->Jp, StdI->S2, StdI->S2, isite, jsite);
338  }/*if (strcmp(StdI->model, "spin") == 0 )*/
339  else {
340  StdFace_Hopping(StdI, Cphase * StdI->tp, isite, jsite, dR);
341  StdFace_Coulomb(StdI, StdI->Vp, isite, jsite);
342  }
343  }/*for (kCell = 0; kCell < StdI->NCell; kCell++)*/
344 
345  fprintf(fp, "plot \'-\' w d lc 7\n0.0 0.0\nend\npause -1\n");
346  fclose(fp);
347  StdFace_PrintGeometry(StdI);
348 }/*void StdFace_Kagome*/
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
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].
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
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.
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
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
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
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
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
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
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

◆ StdFace_Kagome_Boost()

void StdFace_Kagome_Boost ( struct StdIntList StdI)

Setup a Hamiltonian for the generalized Heisenberg model on a Heisenberg lattice

Author
Mitsuaki Kawamura (The University of Tokyo)

Definition at line 357 of file Kagome.c.

References StdIntList::box, StdIntList::Gamma, StdIntList::h, StdIntList::ishift_nspin, StdIntList::J0, StdIntList::J1, StdIntList::J2, StdIntList::Jp, StdIntList::L, StdIntList::list_6spin_pair, StdIntList::list_6spin_star, StdIntList::num_pivot, StdIntList::S2, StdFace_exit(), and StdIntList::W.

Referenced by StdFace_main().

358 {
359  int isite, ipivot, i1, i2;
360  int kintr;
361  FILE *fp;
362 
363  if (StdI->box[0][1] != 0 || StdI->box[1][0] != 0) {
364  fprintf(stdout, "\nERROR ! (a0W, a0L, a1W, a1L) can not be used with SpinGCBoost.\n\n");
365  StdFace_exit(-1);
366  }
367  for (i1 = 0; i1 < 3; i1++) {
368  for (i2 = 0; i2 < 3; i2++) {
369  if (fabs(StdI->Jp[i1][i2]) > 1.0e-8) {
370  fprintf(stdout, "\nERROR ! J' can not be used with SpinGCBoost.\n\n");
371  StdFace_exit(-1);
372  }
373  }
374  }
375  /*
376  Magnetic field
377  */
378  fp = fopen("boost.def", "w");
379  fprintf(fp, "# Magnetic field\n");
380  fprintf(fp, "%25.15e %25.15e %25.15e\n",
381  -0.5 * StdI->Gamma, 0.0, -0.5 * StdI->h);
382  /*
383  Interaction
384  */
385  fprintf(fp, "%d # Number of type of J\n", 3);
386  fprintf(fp, "# J 0\n");
387  fprintf(fp, "%25.15e %25.15e %25.15e\n",
388  0.25 * StdI->J0[0][0], 0.25 * StdI->J0[0][1], 0.25 * StdI->J0[0][2]);
389  fprintf(fp, "%25.15e %25.15e %25.15e\n",
390  0.25 * StdI->J0[0][1], 0.25 * StdI->J0[1][1], 0.25 * StdI->J0[1][2]);
391  fprintf(fp, "%25.15e %25.15e %25.15e\n",
392  0.25 * StdI->J0[0][2], 0.25 * StdI->J0[1][2], 0.25 * StdI->J0[2][2]);
393  fprintf(fp, "# J 1\n");
394  fprintf(fp, "%25.15e %25.15e %25.15e\n",
395  0.25 * StdI->J1[0][0], 0.25 * StdI->J1[0][1], 0.25 * StdI->J1[0][2]);
396  fprintf(fp, "%25.15e %25.15e %25.15e\n",
397  0.25 * StdI->J1[0][1], 0.25 * StdI->J1[1][1], 0.25 * StdI->J1[1][2]);
398  fprintf(fp, "%25.15e %25.15e %25.15e\n",
399  0.25 * StdI->J1[0][2], 0.25 * StdI->J1[1][2], 0.25 * StdI->J1[2][2]);
400  fprintf(fp, "# J 2\n");
401  fprintf(fp, "%25.15e %25.15e %25.15e\n",
402  0.25 * StdI->J2[0][0], 0.25 * StdI->J2[0][1], 0.25 * StdI->J2[0][2]);
403  fprintf(fp, "%25.15e %25.15e %25.15e\n",
404  0.25 * StdI->J2[0][1], 0.25 * StdI->J2[1][1], 0.25 * StdI->J2[1][2]);
405  fprintf(fp, "%25.15e %25.15e %25.15e\n",
406  0.25 * StdI->J2[0][2], 0.25 * StdI->J2[1][2], 0.25 * StdI->J2[2][2]); /*
407  Topology
408  */
409  if (StdI->S2 != 1) {
410  fprintf(stdout, "\n ERROR! S2 must be 1 in Boost. \n\n");
411  StdFace_exit(-1);
412  }
413  StdI->ishift_nspin = 3;
414  if (StdI->L < 2) {
415  fprintf(stdout, "\n ERROR! L < 2 \n\n");
416  StdFace_exit(-1);
417  }
418  if (StdI->W % StdI->ishift_nspin != 0) {
419  fprintf(stdout, "\n ERROR! W %% %d != 0 \n\n", StdI->ishift_nspin);
420  StdFace_exit(-1);
421  }
422  StdI->num_pivot = 4;
423  if (StdI->W != 3) {
424  fprintf(stdout, "DEBUG: W != 3\n");
425  StdFace_exit(-1);
426  }
427  StdI->W = 9;
428  fprintf(fp, "# W0 R0 StdI->num_pivot StdI->ishift_nspin\n");
429  fprintf(fp, "%d %d %d %d\n", StdI->W, StdI->L, StdI->num_pivot, StdI->ishift_nspin);
430 
431  StdI->list_6spin_star = (int **)malloc(sizeof(int*) * StdI->num_pivot);
432  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
433  StdI->list_6spin_star[ipivot] = (int *)malloc(sizeof(int) * 7);
434  }
435 
436  StdI->list_6spin_star[0][0] = 1; // num of J
437  StdI->list_6spin_star[0][1] = 1;
438  StdI->list_6spin_star[0][2] = 1;
439  StdI->list_6spin_star[0][3] = 1;
440  StdI->list_6spin_star[0][4] = 4;
441  StdI->list_6spin_star[0][5] = 2;
442  StdI->list_6spin_star[0][6] = -1; // flag
443 
444  StdI->list_6spin_star[1][0] = 6; // num of J
445  StdI->list_6spin_star[1][1] = 1;
446  StdI->list_6spin_star[1][2] = 1;
447  StdI->list_6spin_star[1][3] = 1;
448  StdI->list_6spin_star[1][4] = 6;
449  StdI->list_6spin_star[1][5] = 7;
450  StdI->list_6spin_star[1][6] = 1; // flag
451 
452  StdI->list_6spin_star[2][0] = 6; // num of J
453  StdI->list_6spin_star[2][1] = 1;
454  StdI->list_6spin_star[2][2] = 1;
455  StdI->list_6spin_star[2][3] = 1;
456  StdI->list_6spin_star[2][4] = 4;
457  StdI->list_6spin_star[2][5] = 2;
458  StdI->list_6spin_star[2][6] = 1; // flag
459 
460  StdI->list_6spin_star[3][0] = 5; // num of J
461  StdI->list_6spin_star[3][1] = 1;
462  StdI->list_6spin_star[3][2] = 1;
463  StdI->list_6spin_star[3][3] = 1;
464  StdI->list_6spin_star[3][4] = 4;
465  StdI->list_6spin_star[3][5] = 2;
466  StdI->list_6spin_star[3][6] = 1; // flag
467 
468  fprintf(fp, "# StdI->list_6spin_star\n");
469  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
470  fprintf(fp, "# pivot %d\n", ipivot);
471  for (isite = 0; isite < 7; isite++) {
472  fprintf(fp, "%d ", StdI->list_6spin_star[ipivot][isite]);
473  }
474  fprintf(fp, "\n");
475  }
476 
477  StdI->list_6spin_pair = (int ***)malloc(sizeof(int**) * StdI->num_pivot);
478  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
479  StdI->list_6spin_pair[ipivot] = (int **)malloc(sizeof(int*) * 7);
480  for (isite = 0; isite < 7; isite++) {
481  StdI->list_6spin_pair[ipivot][isite] = (int *)malloc(sizeof(int) * StdI->list_6spin_star[ipivot][0]);
482  }
483  }
484 
485  StdI->list_6spin_pair[0][0][0] = 0; //(1,1,1+2*j)=0
486  StdI->list_6spin_pair[0][1][0] = 4; //(2,1,1+2*j)=1
487  StdI->list_6spin_pair[0][2][0] = 1; //(3,1,1+2*j)=2
488  StdI->list_6spin_pair[0][3][0] = 2; //(4,1,1+2*j)=3
489  StdI->list_6spin_pair[0][4][0] = 3; //(5,1,1+2*j)=4
490  StdI->list_6spin_pair[0][5][0] = 5; //(6,1,1+2*j)=5
491  StdI->list_6spin_pair[0][6][0] = 3; //(7,1,1+2*j)=3 ! type of J
492 
493  StdI->list_6spin_pair[1][0][0] = 0;
494  StdI->list_6spin_pair[1][1][0] = 1;
495  StdI->list_6spin_pair[1][2][0] = 2;
496  StdI->list_6spin_pair[1][3][0] = 3;
497  StdI->list_6spin_pair[1][4][0] = 4;
498  StdI->list_6spin_pair[1][5][0] = 5;
499  StdI->list_6spin_pair[1][6][0] = 3; // type of J
500  StdI->list_6spin_pair[1][0][1] = 1;
501  StdI->list_6spin_pair[1][1][1] = 2;
502  StdI->list_6spin_pair[1][2][1] = 0;
503  StdI->list_6spin_pair[1][3][1] = 3;
504  StdI->list_6spin_pair[1][4][1] = 4;
505  StdI->list_6spin_pair[1][5][1] = 5;
506  StdI->list_6spin_pair[1][6][1] = 1; // type of J
507  StdI->list_6spin_pair[1][0][2] = 0;
508  StdI->list_6spin_pair[1][1][2] = 2;
509  StdI->list_6spin_pair[1][2][2] = 1;
510  StdI->list_6spin_pair[1][3][2] = 3;
511  StdI->list_6spin_pair[1][4][2] = 4;
512  StdI->list_6spin_pair[1][5][2] = 5;
513  StdI->list_6spin_pair[1][6][2] = 2; // type of J
514  StdI->list_6spin_pair[1][0][3] = 1;
515  StdI->list_6spin_pair[1][1][3] = 3;
516  StdI->list_6spin_pair[1][2][3] = 0;
517  StdI->list_6spin_pair[1][3][3] = 2;
518  StdI->list_6spin_pair[1][4][3] = 4;
519  StdI->list_6spin_pair[1][5][3] = 5;
520  StdI->list_6spin_pair[1][6][3] = 3; // type of J
521  StdI->list_6spin_pair[1][0][4] = 2;
522  StdI->list_6spin_pair[1][1][4] = 4;
523  StdI->list_6spin_pair[1][2][4] = 0;
524  StdI->list_6spin_pair[1][3][4] = 1;
525  StdI->list_6spin_pair[1][4][4] = 3;
526  StdI->list_6spin_pair[1][5][4] = 5;
527  StdI->list_6spin_pair[1][6][4] = 2; // type of J
528  StdI->list_6spin_pair[1][0][5] = 2;
529  StdI->list_6spin_pair[1][1][5] = 5;
530  StdI->list_6spin_pair[1][2][5] = 0;
531  StdI->list_6spin_pair[1][3][5] = 1;
532  StdI->list_6spin_pair[1][4][5] = 3;
533  StdI->list_6spin_pair[1][5][5] = 4;
534  StdI->list_6spin_pair[1][6][5] = 1; // type of J
535 
536  StdI->list_6spin_pair[2][0][0] = 0;
537  StdI->list_6spin_pair[2][1][0] = 1;
538  StdI->list_6spin_pair[2][2][0] = 2;
539  StdI->list_6spin_pair[2][3][0] = 3;
540  StdI->list_6spin_pair[2][4][0] = 4;
541  StdI->list_6spin_pair[2][5][0] = 5;
542  StdI->list_6spin_pair[2][6][0] = 3; // type of J
543  StdI->list_6spin_pair[2][0][1] = 1;
544  StdI->list_6spin_pair[2][1][1] = 2;
545  StdI->list_6spin_pair[2][2][1] = 0;
546  StdI->list_6spin_pair[2][3][1] = 3;
547  StdI->list_6spin_pair[2][4][1] = 4;
548  StdI->list_6spin_pair[2][5][1] = 5;
549  StdI->list_6spin_pair[2][6][1] = 1; // type of J
550  StdI->list_6spin_pair[2][0][2] = 0;
551  StdI->list_6spin_pair[2][1][2] = 2;
552  StdI->list_6spin_pair[2][2][2] = 1;
553  StdI->list_6spin_pair[2][3][2] = 3;
554  StdI->list_6spin_pair[2][4][2] = 4;
555  StdI->list_6spin_pair[2][5][2] = 5;
556  StdI->list_6spin_pair[2][6][2] = 2; // type of J
557  StdI->list_6spin_pair[2][0][3] = 1;
558  StdI->list_6spin_pair[2][1][3] = 3;
559  StdI->list_6spin_pair[2][2][3] = 0;
560  StdI->list_6spin_pair[2][3][3] = 2;
561  StdI->list_6spin_pair[2][4][3] = 4;
562  StdI->list_6spin_pair[2][5][3] = 5;
563  StdI->list_6spin_pair[2][6][3] = 3; // type of J
564  StdI->list_6spin_pair[2][0][4] = 2;
565  StdI->list_6spin_pair[2][1][4] = 5;
566  StdI->list_6spin_pair[2][2][4] = 0;
567  StdI->list_6spin_pair[2][3][4] = 1;
568  StdI->list_6spin_pair[2][4][4] = 3;
569  StdI->list_6spin_pair[2][5][4] = 4;
570  StdI->list_6spin_pair[2][6][4] = 2; // type of J
571  StdI->list_6spin_pair[2][0][5] = 2;
572  StdI->list_6spin_pair[2][1][5] = 4;
573  StdI->list_6spin_pair[2][2][5] = 0;
574  StdI->list_6spin_pair[2][3][5] = 1;
575  StdI->list_6spin_pair[2][4][5] = 3;
576  StdI->list_6spin_pair[2][5][5] = 5;
577  StdI->list_6spin_pair[2][6][5] = 1; // type of J
578 
579  StdI->list_6spin_pair[3][0][0] = 0;
580  StdI->list_6spin_pair[3][1][0] = 1;
581  StdI->list_6spin_pair[3][2][0] = 2;
582  StdI->list_6spin_pair[3][3][0] = 3;
583  StdI->list_6spin_pair[3][4][0] = 4;
584  StdI->list_6spin_pair[3][5][0] = 5;
585  StdI->list_6spin_pair[3][6][0] = 3; // type of J
586  StdI->list_6spin_pair[3][0][1] = 1;
587  StdI->list_6spin_pair[3][1][1] = 2;
588  StdI->list_6spin_pair[3][2][1] = 0;
589  StdI->list_6spin_pair[3][3][1] = 3;
590  StdI->list_6spin_pair[3][4][1] = 4;
591  StdI->list_6spin_pair[3][5][1] = 5;
592  StdI->list_6spin_pair[3][6][1] = 1; // type of J
593  StdI->list_6spin_pair[3][0][2] = 0;
594  StdI->list_6spin_pair[3][1][2] = 2;
595  StdI->list_6spin_pair[3][2][2] = 1;
596  StdI->list_6spin_pair[3][3][2] = 3;
597  StdI->list_6spin_pair[3][4][2] = 4;
598  StdI->list_6spin_pair[3][5][2] = 5;
599  StdI->list_6spin_pair[3][6][2] = 2; // type of J
600  StdI->list_6spin_pair[3][0][3] = 2;
601  StdI->list_6spin_pair[3][1][3] = 5;
602  StdI->list_6spin_pair[3][2][3] = 0;
603  StdI->list_6spin_pair[3][3][3] = 1;
604  StdI->list_6spin_pair[3][4][3] = 3;
605  StdI->list_6spin_pair[3][5][3] = 4;
606  StdI->list_6spin_pair[3][6][3] = 2; // type of J
607  StdI->list_6spin_pair[3][0][4] = 2;
608  StdI->list_6spin_pair[3][1][4] = 4;
609  StdI->list_6spin_pair[3][2][4] = 0;
610  StdI->list_6spin_pair[3][3][4] = 1;
611  StdI->list_6spin_pair[3][4][4] = 3;
612  StdI->list_6spin_pair[3][5][4] = 5;
613  StdI->list_6spin_pair[3][6][4] = 1; // type of J
614 
615  fprintf(fp, "# StdI->list_6spin_pair\n");
616  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
617  fprintf(fp, "# pivot %d\n", ipivot);
618  for (kintr = 0; kintr < StdI->list_6spin_star[ipivot][0]; kintr++) {
619  for (isite = 0; isite < 7; isite++) {
620  fprintf(fp, "%d ", StdI->list_6spin_pair[ipivot][isite][kintr]);
621  }
622  fprintf(fp, "\n");
623  }
624  }
625  fclose(fp);
626 
627  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
628  free(StdI->list_6spin_star[ipivot]);
629  }
630  free(StdI->list_6spin_star);
631 
632  for (ipivot = 0; ipivot < StdI->num_pivot; ipivot++) {
633  for (isite = 0; isite < 7; isite++) {
634  free(StdI->list_6spin_pair[ipivot][isite]);
635  }
636  free(StdI->list_6spin_pair[ipivot]);
637  }
638  free(StdI->list_6spin_pair);
639 
640 }
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
int L
Number of sites along the 2nd axis, input parameter.
Definition: StdFace_vals.h:40
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
int ** list_6spin_star
Definition: StdFace_vals.h:251
int S2
Total spin |S| of a local spin, input from file.
Definition: StdFace_vals.h:215
int W
Number of sites along the 1st axis, input parameter.
Definition: StdFace_vals.h:39
double Gamma
Transvars magnetic field, input parameter.
Definition: StdFace_vals.h:127
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
int ishift_nspin
Definition: StdFace_vals.h:253
int *** list_6spin_pair
Definition: StdFace_vals.h:250
double h
Longitudinal magnetic field, input parameter.
Definition: StdFace_vals.h:126
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
void StdFace_exit(int errorcode)
MPI Abortation wrapper.