22 #include "StdFace_ModelUtil.h" 35 int isite, jsite, kCell, ntransMax, nintrMax;
38 double complex Cphase;
44 fp = fopen(
"lattice.gp",
"w");
48 fprintf(stdout,
" @ Lattice Size & Shape\n\n");
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");
72 if (strcmp(StdI->
model,
"spin") == 0 ) {
133 if (strcmp(StdI->
model,
"hubbard") == 0 ) {
143 fprintf(stdout,
"\n @ Numerical conditions\n\n");
149 if (strcmp(StdI->
model,
"kondo") == 0 ) StdI->
nsite *= 2;
152 if (strcmp(StdI->
model,
"spin") == 0 )
154 else if (strcmp(StdI->
model,
"hubbard") == 0 )
157 for (iL = 0; iL < StdI->
nsite / 2; iL++) {
164 if (strcmp(StdI->
model,
"spin") == 0 ) {
165 ntransMax = StdI->
nsite * (StdI->
S2 + 1 + 2 * StdI->
S2);
167 * (3 * StdI->
S2 + 1) * (3 * StdI->
S2 + 1);
170 ntransMax = StdI->
NCell * 2 * (
171 2 * StdI->
NsiteUC + 6 + 12 + 6);
172 nintrMax = StdI->
NCell * (StdI->
NsiteUC + 4 * (3 + 6 + 3));
174 if (strcmp(StdI->
model,
"kondo") == 0) {
175 ntransMax += StdI->
nsite / 2 * (StdI->
S2 + 1 + 2 * StdI->
S2);
176 nintrMax += StdI->
nsite / 2 * (3 * StdI->
S2 + 1) * (3 * StdI->
S2 + 1);
184 for (kCell = 0; kCell < StdI->
NCell; kCell++) {
186 iW = StdI->
Cell[kCell][0];
187 iL = StdI->
Cell[kCell][1];
192 if (strcmp(StdI->
model,
"kondo") == 0 ) isite += 2 * StdI->
NCell;
194 if (strcmp(StdI->
model,
"spin") == 0 ) {
204 if (strcmp(StdI->
model,
"kondo") == 0 ) {
215 StdFace_SetLabel(StdI, fp, iW, iL, 0, 0, 0, 1, &isite, &jsite, 1, &Cphase, dR);
217 if (strcmp(StdI->
model,
"spin") == 0 ) {
227 StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 0, &isite, &jsite, 1, &Cphase, dR);
229 if (strcmp(StdI->
model,
"spin") == 0 ) {
239 StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 0, &isite, &jsite, 1, &Cphase, dR);
241 if (strcmp(StdI->
model,
"spin") == 0 ) {
251 StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 0, 0, &isite, &jsite, 2, &Cphase, dR);
253 if (strcmp(StdI->
model,
"spin") == 0 ) {
263 StdFace_SetLabel(StdI, fp, iW, iL, 1, 0, 1, 1, &isite, &jsite, 2, &Cphase, dR);
265 if (strcmp(StdI->
model,
"spin") == 0 ) {
275 StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 0, 0, &isite, &jsite, 2, &Cphase, dR);
277 if (strcmp(StdI->
model,
"spin") == 0 ) {
287 StdFace_SetLabel(StdI, fp, iW, iL, 0, 1, 1, 1, &isite, &jsite, 2, &Cphase, dR);
289 if (strcmp(StdI->
model,
"spin") == 0 ) {
299 StdFace_SetLabel(StdI, fp, iW, iL, 1, - 1, 0, 0, &isite, &jsite, 2, &Cphase, dR);
301 if (strcmp(StdI->
model,
"spin") == 0 ) {
311 StdFace_SetLabel(StdI, fp, iW, iL, 1, -1, 1, 1, &isite, &jsite, 2, &Cphase, dR);
313 if (strcmp(StdI->
model,
"spin") == 0 ) {
323 StdFace_SetLabel(StdI, fp, iW, iL, 1, -1, 0, 1, &isite, &jsite, 3, &Cphase, dR);
325 if (strcmp(StdI->
model,
"spin") == 0) {
335 StdFace_SetLabel(StdI, fp, iW, iL, -1, -1, 0, 1, &isite, &jsite, 3, &Cphase, dR);
337 if (strcmp(StdI->
model,
"spin") == 0) {
347 StdFace_SetLabel(StdI, fp, iW, iL, -1, 1, 0, 1, &isite, &jsite, 3, &Cphase, dR);
349 if (strcmp(StdI->
model,
"spin") == 0) {
358 fprintf(fp,
"plot \'-\' w d lc 7\n0.0 0.0\nend\npause -1\n");
372 int isite, ipivot, i1, i2;
376 if (StdI->
box[0][1] != 0 || StdI->
box[1][0] != 0) {
377 fprintf(stdout,
"\nERROR ! (a0W, a0L, a1W, a1L) can not be used with SpinGCBoost.\n\n");
380 for (i1 = 0; i1 < 3; i1++) {
381 for (i2 = 0; i2 < 3; i2++) {
382 if (fabs(StdI->
Jp[i1][i2]) > 1.0e-8) {
383 fprintf(stdout,
"\nERROR ! J' can not be used with SpinGCBoost.\n\n");
391 fp = fopen(
"boost.def",
"w");
392 fprintf(fp,
"# Magnetic field\n");
393 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
394 -0.5 * StdI->
Gamma, 0.0, -0.5 *StdI->
h);
398 fprintf(fp,
"%d # Number of type of J\n", 3);
399 fprintf(fp,
"# J 0\n");
400 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
401 0.25 * StdI->
J0[0][0], 0.25 * StdI->
J0[0][1], 0.25 * StdI->
J0[0][2]);
402 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
403 0.25 * StdI->
J0[0][1], 0.25 * StdI->
J0[1][1], 0.25 * StdI->
J0[1][2]);
404 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
405 0.25 * StdI->
J0[0][2], 0.25 * StdI->
J0[1][2], 0.25 * StdI->
J0[2][2]);
406 fprintf(fp,
"# J 1\n");
407 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
408 0.25 * StdI->
J1[0][0], 0.25 * StdI->
J1[0][1], 0.25 * StdI->
J1[0][2]);
409 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
410 0.25 * StdI->
J1[0][1], 0.25 * StdI->
J1[1][1], 0.25 * StdI->
J1[1][2]);
411 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
412 0.25 * StdI->
J1[0][2], 0.25 * StdI->
J1[1][2], 0.25 * StdI->
J1[2][2]);
413 fprintf(fp,
"# J 2\n");
414 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
415 0.25 * StdI->
J2[0][0], 0.25 * StdI->
J2[0][1], 0.25 * StdI->
J2[0][2]);
416 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
417 0.25 * StdI->
J2[0][1], 0.25 * StdI->
J2[1][1], 0.25 * StdI->
J2[1][2]);
418 fprintf(fp,
"%25.15e %25.15e %25.15e\n",
419 0.25 * StdI->
J2[0][2], 0.25 * StdI->
J2[1][2], 0.25 * StdI->
J2[2][2]);
424 fprintf(stdout,
"\n ERROR! S2 must be 1 in Boost. \n\n");
429 fprintf(stdout,
"\n ERROR! L < 2 \n\n");
433 fprintf(stdout,
"\n ERROR! W %% %d != 0 \n\n", StdI->
ishift_nspin);
438 fprintf(stdout,
"DEBUG: W != 3\n");
442 fprintf(fp,
"# W0 R0 StdI->num_pivot StdI->ishift_nspin\n");
446 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
466 fprintf(fp,
"# StdI->list_6spin_star\n");
467 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
468 fprintf(fp,
"# pivot %d\n", ipivot);
469 for (isite = 0; isite < 7; isite++) {
476 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
478 for (isite = 0; isite < 7; isite++) {
548 fprintf(fp,
"# StdI->list_6spin_pair\n");
549 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
550 fprintf(fp,
"# pivot %d\n", ipivot);
552 for (isite = 0; isite < 7; isite++) {
560 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
565 for (ipivot = 0; ipivot < StdI->
num_pivot; ipivot++) {
566 for (isite = 0; isite < 7; isite++) {
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.
double J0pp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (3rd Near.), input parameter J0''x, J0''y, J0''z, J0''xy, etc. or set in StdFace_InputSpin().
double Jp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J'x, J'y, J'z, J'xy, etc.
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().
double complex t2p
Anisotropic hopping (2nd), input parameter.
double J[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter Jx, Jy, Jz, Jxy, etc.
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' + 1) interactions].
int L
Number of sites along the 2nd axis, input parameter.
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.
double J1p[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J1'x, J1'y...
void StdFace_PrintGeometry(struct StdIntList *StdI)
Print geometry of sites for the pos-process of correlation function.
double J1ppAll
Anisotropic, diagonal spin coupling (3rd Near), input parameter J1''.
double J2pp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (3rd Near.), input parameter J2''x, J2''y, J2''z, J2''xy, etc. or set in StdFace_InputSpin().
double JpAll
Isotropic, diagonal spin coupling (2nd Near), input parameter Jp.
void StdFace_InputHopp(double complex t, 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...
double J1[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J1x, J1y, J1z, J1xy, etc. or set in StdFace_InputSpinNN().
double J2p[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J2'x, J2'y...
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.
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.
int S2
Total spin |S| of a local spin, input from file.
int NsiteUC
Number of sites in the unit cell. Defined in the beginning of each lattice function.
void StdFace_InputSpin(double Jp[3][3], double JpAll, char *Jpname)
Input spin-spin interaction other than nearest-neighbor.
double J1All
Anisotropic, diagonal spin coupling (1st Near), input parameter J1.
double V0p
Anisotropic Coulomb potential (2nd), input parameter.
double J1pp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (3rd Near.), input parameter J1''x, J1''y, J1''z, J1''xy, etc. or set in StdFace_InputSpin().
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.
double V2p
Anisotropic Coulomb potential (2nd), input parameter.
double V2pp
Anisotropic Coulomb potential (3rd), input parameter.
double J2ppAll
Anisotropic, diagonal spin coupling (3rd Near), input parameter J2''.
double complex tpp
3rd-nearest hopping, input parameter
char model[256]
Name of model, input parameter.
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.
double JppAll
Isotropic, diagonal spin coupling (3rd Near), input parameter J''.
double complex t1pp
Anisotropic hopping (3rd), input parameter.
double V1
Anisotropic Coulomb potential (1st), input parameter.
double J0All
Anisotropic, diagonal spin coupling (1st Near), input parameter J0.
double J0[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J0x, J0y, J0z, J0xy, etc. or set in StdFace_InputSpinNN().
double J0ppAll
Anisotropic, diagonal spin coupling (3rd Near), input parameter J0''.
double U
On-site Coulomb potential, input parameter.
double complex t0p
Anisotropic hopping (2nd), input parameter.
int ** Cell
[StdIntList][3] The cell position in the fractional coordinate. Malloc and Set in StdFace_InitSite()...
double complex t2pp
Anisotropic hopping (3rd), input parameter.
double phase[3]
Boundary phase, input parameter phase0, etc.
double V1pp
Anisotropic Coulomb potential (3rd), input parameter.
double J0pAll
Anisotropic, diagonal spin coupling (2nd Near), input parameter J0'.
double length[3]
Anisotropic lattice constant, input parameter wlength, llength, hlength.
int * locspinflag
[StdIntList::nsite] LocSpin in Expert mode, malloc and set in each lattice file.
double complex tp
2nd-nearest hopping, input parameter
void StdFace_Honeycomb(struct StdIntList *StdI)
Setup a Hamiltonian for the Hubbard model on a Honeycomb lattice.
double Jpp[3][3]
Isotropic, diagonal/off-diagonal spin coupling (3rd Near.), input parameter J''x, J''y...
double complex t1
Anisotropic hopping (1st), input parameter.
double V
Off-site Coulomb potential (1st), input parameter.
double complex t0
Anisotropic hopping (1st), input parameter.
double direct[3][3]
The unit direct lattice vector. Set in StdFace_InitSite().
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 complex t0pp
Anisotropic hopping (3rd), input parameter.
double V0
Anisotropic Coulomb potential (1st), input parameter.
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_InputCoulombV(double V, double *V0, char *V0name)
Input off-site Coulomb interaction from the input file, if it is not specified, use the default value...
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 Vpp
Off-site Coulomb potential (3rd), input parameter.
double complex t1p
Anisotropic hopping (2nd), input parameter.
double complex t2
Anisotropic hopping (1st), input parameter.
void StdFace_Honeycomb_Boost(struct StdIntList *StdI)
double mu
Chemical potential, input parameter.
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)...
int NCell
The number of the unit cell in the super-cell (determinant of StdIntList::box). Set in StdFace_InitSi...
double Vp
Off-site Coulomb potential (2nd), input parameter.
double J1pAll
Anisotropic, diagonal spin coupling (2nd Near), input parameter J1'.
void StdFace_NotUsed_c(char *valname, double complex val)
Stop HPhi if a variable (complex) not used is specified in the input file (!=NaN).
int nsite
Number of sites, set in the each lattice file.
double J2All
Anisotropic, diagonal spin coupling (1st Near), input parameter J2.
Variables used in the Standard mode. These variables are passed as a pointer of the structure(StdIntL...
double V0pp
Anisotropic Coulomb potential (3rd), input parameter.
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.
double a
The lattice constant. Input parameter.
double J2[3][3]
Isotropic, diagonal/off-diagonal spin coupling (1st Near.), input parameter J2x, J2y, J2z, J2xy, etc. or set in StdFace_InputSpinNN().
double J2pAll
Anisotropic, diagonal spin coupling (2nd Near), input parameter J2'.
double ** tau
Cell-internal site position in the fractional coordinate. Defined in the beginning of each lattice fu...
double J0p[3][3]
Isotropic, diagonal/off-diagonal spin coupling (2nd Near.), input parameter J0'x, J0'y...
void StdFace_exit(int errorcode)
MPI Abortation wrapper.
void StdFace_InputSpinNN(double J[3][3], double JAll, double J0[3][3], double J0All, char *J0name)
Input nearest-neighbor spin-spin interaction.
double V1p
Anisotropic Coulomb potential (2nd), input parameter.
double K
4-spin term. Not used.