HPhi++  3.1.0
expec_cisajs.cpp
Go to the documentation of this file.
1 /* HPhi - Quantum Lattice Model Simulator */
2 /* Copyright (C) 2015 The University of Tokyo */
3 
4 /* This program is free software: you can redistribute it and/or modify */
5 /* it under the terms of the GNU General Public License as published by */
6 /* the Free Software Foundation, either version 3 of the License, or */
7 /* (at your option) any later version. */
8 
9 /* This program is distributed in the hope that it will be useful, */
10 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
11 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
12 /* GNU General Public License for more details. */
13 
14 /* You should have received a copy of the GNU General Public License */
15 /* along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 
17 #include "mltply.hpp"
18 #include "FileIO.hpp"
19 #include "bitcalc.hpp"
20 #include "wrapperMPI.hpp"
21 #include "mltplyHubbard.hpp"
22 #include "mltplyHubbardCore.hpp"
23 #include "mltplySpinCore.hpp"
24 #include "mltplyMPIHubbard.hpp"
25 #include "mltplyMPISpinCore.hpp"
26 #include "common/setmemory.hpp"
27 #include "mltplyCommon.hpp"
28 
50  struct BindStruct *X,
51  int nstate,
52  std::complex<double> **Xvec,
53  std::complex<double> **vec,
54  std::complex<double> **prod
55 ){
56  long int i;
57  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
58  long int i_max;
59  long int ibit;
60  long int is;
61  std::complex<double> tmp_OneGreen = 1.0;
62  int complex_conj, istate;
63 
64  i_max = X->Check.idim_max;
65 
66  for (i = 0; i < X->Def.NCisAjt; i++) {
67  zclear(i_max*nstate, &Xvec[1][0]);
68  complex_conj = 0;
69  org_isite1 = X->Def.CisAjt[i][0] + 1;
70  org_isite2 = X->Def.CisAjt[i][2] + 1;
71  org_sigma1 = X->Def.CisAjt[i][1];
72  org_sigma2 = X->Def.CisAjt[i][3];
73  if (org_isite1 > X->Def.Nsite &&
74  org_isite2 > X->Def.Nsite) {
75  if (org_isite1 == org_isite2 && org_sigma1 == org_sigma2) {
76  if (org_sigma1 == 0) {
77  is = X->Def.Tpow[2 * org_isite1 - 2];
78  }
79  else {
80  is = X->Def.Tpow[2 * org_isite1 - 1];
81  }
82  ibit = (long int)myrank & is;
83  if (ibit == is) {
84  zaxpy_long(i_max*nstate, tmp_OneGreen, &vec[1][0], &Xvec[1][0]);
85  }
86  }
87  else {
88  X_GC_child_general_hopp_MPIdouble(org_isite1 - 1, org_sigma1, org_isite2 - 1, org_sigma2,
89  -tmp_OneGreen, X, nstate, Xvec, vec);
90  }
91  }
92  else if (org_isite2 > X->Def.Nsite || org_isite1 > X->Def.Nsite) {
93  if (org_isite1 < org_isite2) {
94  X_GC_child_general_hopp_MPIsingle(org_isite1 - 1, org_sigma1, org_isite2 - 1, org_sigma2,
95  -tmp_OneGreen, X, nstate, Xvec, vec);
96  }
97  else {
98  X_GC_child_general_hopp_MPIsingle(org_isite2 - 1, org_sigma2, org_isite1 - 1, org_sigma1,
99  -tmp_OneGreen, X, nstate, Xvec, vec);
100  complex_conj = 1;
101  }
102  }
103  else {
104  if (child_general_hopp_GetInfo(X, org_isite1, org_isite2, org_sigma1, org_sigma2) != 0) {
105  return -1;
106  }
107  GC_child_general_hopp(nstate, Xvec, vec, X, tmp_OneGreen);
108  }
109 
110  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
111  if (complex_conj == 1)
112  for (istate = 0; istate < nstate; istate++) prod[i][istate] = conj(prod[i][istate]);
113  }
114  return 0;
115 }
126  struct BindStruct *X,
127  int nstate,
128  std::complex<double> **Xvec,
129  std::complex<double> **vec,
130  std::complex<double> **prod
131 ) {
132  long int i, j;
133  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
134  long int i_max;
135  int num1, one = 1, complex_conj, istate;
136  long int ibit;
137  long int is;
138  std::complex<double> tmp_OneGreen = 1.0, dmv;
139 
140  i_max = X->Check.idim_max;
141  for (i = 0; i < X->Def.NCisAjt; i++) {
142  zclear(i_max*nstate, &Xvec[1][0]);
143  complex_conj = 0;
144  org_isite1 = X->Def.CisAjt[i][0] + 1;
145  org_isite2 = X->Def.CisAjt[i][2] + 1;
146  org_sigma1 = X->Def.CisAjt[i][1];
147  org_sigma2 = X->Def.CisAjt[i][3];
148 
149  if (X->Def.iFlgSzConserved == TRUE) {
150  if (org_sigma1 != org_sigma2) {
151  zclear(nstate, prod[i]);
152  continue;
153  }
154  }
155 
156  if (X->Def.iCalcModel == Kondo || X->Def.iCalcModel == KondoGC) {
157  if ((X->Def.LocSpn[org_isite1 - 1] == 1 && X->Def.LocSpn[org_isite2 - 1] == 0) ||
158  (X->Def.LocSpn[org_isite1 - 1] == 0 && X->Def.LocSpn[org_isite2 - 1] == 1)
159  )
160  {
161  zclear(nstate, prod[i]);
162  continue;
163  }
164  }
165 
166  if (org_isite1 > X->Def.Nsite &&
167  org_isite2 > X->Def.Nsite) {
168  if (org_isite1 == org_isite2 && org_sigma1 == org_sigma2) {//diagonal
169  is = X->Def.Tpow[2 * org_isite1 - 2 + org_sigma1];
170  ibit = (long int)myrank & is;
171  if (ibit == is) {
172  zaxpy_long(i_max*nstate, tmp_OneGreen, &vec[1][0], &Xvec[1][0]);
173  }
174  }
175  else {
176  X_child_general_hopp_MPIdouble(org_isite1 - 1, org_sigma1, org_isite2 - 1, org_sigma2,
177  -tmp_OneGreen, X, nstate, Xvec, vec);
178  }
179  }
180  else if (org_isite2 > X->Def.Nsite || org_isite1 > X->Def.Nsite) {
181  if (org_isite1 < org_isite2) {
182  X_child_general_hopp_MPIsingle(org_isite1 - 1, org_sigma1, org_isite2 - 1, org_sigma2,
183  -tmp_OneGreen, X, nstate, Xvec, vec);
184  }
185  else {
186  X_child_general_hopp_MPIsingle(org_isite2 - 1, org_sigma2, org_isite1 - 1, org_sigma1,
187  -tmp_OneGreen, X, nstate, Xvec, vec);
188  complex_conj = 1;
189  }
190  }
191  else {
192  if (child_general_hopp_GetInfo(X, org_isite1, org_isite2, org_sigma1, org_sigma2) != 0) {
193  return -1;
194  }
195  if (org_isite1 == org_isite2 && org_sigma1 == org_sigma2) {
196  is = X->Def.Tpow[2 * org_isite1 - 2 + org_sigma1];
197 
198 #pragma omp parallel for default(none) shared(list_1, vec,Xvec,nstate,one,tmp_OneGreen) \
199 firstprivate(i_max, is) private(num1, ibit, dmv)
200  for (j = 1; j <= i_max; j++) {
201  ibit = list_1[j] & is;
202  num1 = ibit / is;
203  dmv = (std::complex<double>)num1;
204  zaxpy_(&nstate, &dmv, vec[j], &one, Xvec[j], &one);
205  }
206  }
207  else {
208  child_general_hopp(nstate, Xvec, vec, X, tmp_OneGreen);
209  }
210  }
211  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
212  if (complex_conj == 1)
213  for (istate = 0; istate < nstate; istate++) prod[i][istate] = conj(prod[i][istate]);
214  }
215  return 0;
216 }
227  struct BindStruct *X,
228  int nstate,
229  std::complex<double> **Xvec,
230  std::complex<double> **vec,
231  std::complex<double> **prod
232 ) {
233  long int i, j;
234  long int isite1;
235  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
236  std::complex<double> dmv;
237  long int i_max;
238  long int ibit1;
239  long int is1_up;
240  int one = 1;
241 
242  i_max = X->Check.idim_max;
243 
244  for (i = 0; i < X->Def.NCisAjt; i++) {
245  zclear(i_max*nstate, &Xvec[1][0]);
246  org_isite1 = X->Def.CisAjt[i][0] + 1;
247  org_isite2 = X->Def.CisAjt[i][2] + 1;
248  org_sigma1 = X->Def.CisAjt[i][1];
249  org_sigma2 = X->Def.CisAjt[i][3];
250 
251  if (org_sigma1 == org_sigma2) {
252  if (org_isite1 == org_isite2) {
253  if (org_isite1 > X->Def.Nsite) {
254  is1_up = X->Def.Tpow[org_isite1 - 1];
255  ibit1 = X_SpinGC_CisAis((long int)myrank + 1, is1_up, org_sigma1);
256  if (ibit1 != 0) {
257  zaxpy_long(i_max*nstate, 1.0, &vec[1][0], &Xvec[1][0]);
258  }
259  }// org_isite1 > X->Def.Nsite
260  else {
261  isite1 = X->Def.Tpow[org_isite1 - 1];
262 #pragma omp parallel for default(none) private(j,dmv) \
263  firstprivate(i_max, isite1, org_sigma1, X) shared(vec,Xvec,nstate,one)
264  for (j = 1; j <= i_max; j++) {
265  dmv = X_Spin_CisAis(j, isite1, org_sigma1);
266  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[j][0], &one);
267  }
268  }
269  }
270  }
271  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
272  }
273  return 0;
274 }
285  struct BindStruct *X,
286  int nstate,
287  std::complex<double> **Xvec,
288  std::complex<double> **vec,
289  std::complex<double> **prod
290 ) {
291  long int i, j;
292  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
293  std::complex<double> dmv;
294  long int i_max;
295  int num1, one = 1;
296  i_max = X->Check.idim_max;
297 
298  for (i = 0; i < X->Def.NCisAjt; i++) {
299  zclear(i_max*nstate, &Xvec[1][0]);
300  org_isite1 = X->Def.CisAjt[i][0] + 1;
301  org_isite2 = X->Def.CisAjt[i][2] + 1;
302  org_sigma1 = X->Def.CisAjt[i][1];
303  org_sigma2 = X->Def.CisAjt[i][3];
304 
305  if (org_isite1 == org_isite2) {
306  if (org_isite1 > X->Def.Nsite) {
307  if (org_sigma1 == org_sigma2) {
308  // longitudinal magnetic field
309  num1 = BitCheckGeneral((long int)myrank,
310  org_isite1, org_sigma1, X->Def.SiteToBit, X->Def.Tpow);
311  if (num1 != 0) {
312  zaxpy_long(i_max*nstate, 1.0, &vec[1][0], &Xvec[1][0]);
313  }
314  }
315  }
316  else {//org_isite1 <= X->Def.Nsite
317  if (org_sigma1 == org_sigma2) {
318  // longitudinal magnetic field
319 #pragma omp parallel for default(none) private(j, num1,dmv) \
320  firstprivate(i_max, org_isite1, org_sigma1, X) shared(vec,Xvec, list_1,nstate,one)
321  for (j = 1; j <= i_max; j++) {
322  dmv = BitCheckGeneral(list_1[j], org_isite1, org_sigma1, X->Def.SiteToBit, X->Def.Tpow);
323  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[j][0], &one);
324  }
325  }
326  }
327  }
328  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
329  }
330  return 0;
331 }
342  struct BindStruct *X,
343  int nstate,
344  std::complex<double> **Xvec,
345  std::complex<double> **vec,
346  std::complex<double> **prod
347 ) {
348  long int i, j;
349  long int isite1;
350  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
351  std::complex<double> dmv;
352  long int i_max;
353  int tmp_sgn, one = 1;
354  long int tmp_off = 0;
355 
356  i_max = X->Check.idim_max;
357 
358  for (i = 0; i < X->Def.NCisAjt; i++) {
359  zclear(i_max*nstate, &Xvec[1][0]);
360  org_isite1 = X->Def.CisAjt[i][0] + 1;
361  org_isite2 = X->Def.CisAjt[i][2] + 1;
362  org_sigma1 = X->Def.CisAjt[i][1];
363  org_sigma2 = X->Def.CisAjt[i][3];
364 
365  if (org_isite1 == org_isite2) {
366  if (org_isite1 > X->Def.Nsite) {
367  if (org_sigma1 == org_sigma2) { // longitudinal magnetic field
368  X_GC_child_CisAis_spin_MPIdouble(org_isite1 - 1, org_sigma1, 1.0, X, nstate, Xvec, vec);
369  }
370  else { // transverse magnetic field
371  X_GC_child_CisAit_spin_MPIdouble(org_isite1 - 1, org_sigma1, org_sigma2, 1.0, X, nstate, Xvec, vec);
372  }
373  }
374  else {
375  isite1 = X->Def.Tpow[org_isite1 - 1];
376 
377  if (org_sigma1 == org_sigma2) {
378  // longitudinal magnetic field
379 #pragma omp parallel for default(none) private(j, tmp_sgn,dmv) \
380  firstprivate(i_max, isite1, org_sigma1, X) shared(vec,Xvec,nstate,one)
381  for (j = 1; j <= i_max; j++) {
382  dmv = X_SpinGC_CisAis(j, isite1, org_sigma1);
383  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[j][0], &one);
384  }
385  }
386  else {
387  // transverse magnetic field
388 #pragma omp parallel for default(none) private(j, tmp_sgn, tmp_off,dmv) \
389  firstprivate(i_max, isite1, org_sigma2, X) shared(vec,Xvec,nstate,one)
390  for (j = 1; j <= i_max; j++) {
391  tmp_sgn = X_SpinGC_CisAit(j, isite1, org_sigma2, &tmp_off);
392  if (tmp_sgn != 0) {
393  dmv = (std::complex<double>)tmp_sgn;
394  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[tmp_off + 1][0], &one);
395  }
396  }
397  }
398  }
399  }
400  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
401  }
402  return 0;
403 }
414  struct BindStruct *X,
415  int nstate,
416  std::complex<double> **Xvec,
417  std::complex<double> **vec,
418  std::complex<double> **prod
419 ) {
420  long int i, j;
421  long int org_isite1, org_isite2, org_sigma1, org_sigma2;
422  std::complex<double> dmv;
423  long int i_max;
424  long int tmp_off = 0;
425  int num1, one = 1;
426 
427  i_max = X->Check.idim_max;
428 
429  for (i = 0; i < X->Def.NCisAjt; i++) {
430  zclear(i_max*nstate, &Xvec[1][0]);
431  org_isite1 = X->Def.CisAjt[i][0] + 1;
432  org_isite2 = X->Def.CisAjt[i][2] + 1;
433  org_sigma1 = X->Def.CisAjt[i][1];
434  org_sigma2 = X->Def.CisAjt[i][3];
435  if (org_isite1 == org_isite2) {
436  if (org_isite1 > X->Def.Nsite) {
437  if (org_sigma1 == org_sigma2) {
438  // longitudinal magnetic field
439  X_GC_child_CisAis_GeneralSpin_MPIdouble(org_isite1 - 1, org_sigma1,
440  1.0, X, nstate, Xvec, vec);
441  }
442  else {
443  // transverse magnetic field
445  org_isite1 - 1, org_sigma1, org_sigma2, 1.0, X, nstate, Xvec, vec);
446  }
447  }
448  else {//org_isite1 <= X->Def.Nsite
449  if (org_sigma1 == org_sigma2) {
450  // longitudinal magnetic field
451 #pragma omp parallel for default(none) private(j, num1,dmv) \
452  firstprivate(i_max, org_isite1, org_sigma1, X) shared(vec,Xvec,nstate,one)
453  for (j = 1; j <= i_max; j++) {
454  num1 = BitCheckGeneral(j - 1, org_isite1, org_sigma1, X->Def.SiteToBit, X->Def.Tpow);
455  dmv = (std::complex<double>)num1;
456  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[j][0], &one);
457  }
458  }
459  else {
460  // transverse magnetic field
461 #pragma omp parallel for default(none) private(j, num1,dmv) \
462  firstprivate(i_max, org_isite1, org_sigma1, org_sigma2, X,tmp_off) shared(vec,Xvec,nstate,one)
463  for (j = 1; j <= i_max; j++) {
464  num1 = GetOffCompGeneralSpin(
465  j - 1, org_isite1, org_sigma2, org_sigma1, &tmp_off, X->Def.SiteToBit, X->Def.Tpow);
466  if (num1 != 0) {
467  dmv = (std::complex<double>)num1;
468  zaxpy_(&nstate, &dmv, &vec[j][0], &one, &Xvec[tmp_off + 1][0], &one);
469  }
470  }
471  }
472  }
473  }
474  MultiVecProdMPI(i_max, nstate, vec, Xvec, prod[i]);
475  }
476  return 0;
477 }
488  struct BindStruct *X,
489  int nstate,
490  std::complex<double> **Xvec,
491  std::complex<double> **vec,
492  std::complex<double> **prod
493 ) {
494  int info = 0;
495  if (X->Def.iFlgGeneralSpin == FALSE) {
496  info = expec_cisajs_SpinHalf(X, nstate, Xvec, vec, prod);
497  }
498  else {
499  info = expec_cisajs_SpinGeneral(X, nstate, Xvec, vec, prod);
500  }
501  return info;
502 }
503 
514  struct BindStruct *X,
515  int nstate,
516  std::complex<double> **Xvec,
517  std::complex<double> **vec,
518  std::complex<double> **prod
519 ) {
520  int info = 0;
521  if (X->Def.iFlgGeneralSpin == FALSE) {
522  info = expec_cisajs_SpinGCHalf(X, nstate, Xvec, vec, prod);
523  }
524  else {
525  info = expec_cisajs_SpinGCGeneral(X, nstate, Xvec, vec, prod);
526  }
527  return info;
528 }
545  struct BindStruct *X,
546  int nstate,
547  std::complex<double> **Xvec,
548  std::complex<double> **vec
549 ) {
550  FILE *fp;
551  char sdt[D_FileNameMax];
552  std::complex<double> **prod;
553  long int irght, ilft, ihfbit, ica;
554  long int i_max;
555  //For TPQ
556  int step = 0, rand_i = 0, istate;
557 
558  if (X->Def.NCisAjt < 1) return 0;
559 
560  i_max = X->Check.idim_max;
561  if (GetSplitBitByModel(X->Def.Nsite, X->Def.iCalcModel, &irght, &ilft, &ihfbit) != 0) {
562  return -1;
563  }
564  X->Large.i_max = i_max;
565  X->Large.irght = irght;
566  X->Large.ilft = ilft;
567  X->Large.ihfbit = ihfbit;
568  X->Large.mode = M_CORR;
569 
570  switch (X->Def.iCalcType) {
571  case TPQCalc:
572  step = X->Def.istep;
573  TimeKeeperWithRandAndStep(X, "%s_TimeKeeper.dat", "set %d step %d:expec_cisajs begins: %s", "a", 0, step);
574  break;
575  case TimeEvolution:
576  step = X->Def.istep;
577  TimeKeeperWithStep(X, "%s_TimeKeeper.dat", "step %d:expec_cisajs begins: %s", "a", step);
578  break;
579  case FullDiag:
580  case CG:
581  break;
582  }
583 
584  prod = cd_2d_allocate(X->Def.NCisAjt, nstate);
585  switch (X->Def.iCalcModel) {
586  case HubbardGC:
587  if (expec_cisajs_HubbardGC(X, nstate, Xvec, vec, prod) != 0) {
588  return -1;
589  }
590  break;
591 
592  case KondoGC:
593  case Hubbard:
594  case Kondo:
595  if (expec_cisajs_Hubbard(X, nstate, Xvec, vec, prod) != 0) {
596  return -1;
597  }
598  break;
599 
600  case Spin: // for the Sz-conserved spin system
601  if (expec_cisajs_Spin(X, nstate, Xvec, vec, prod) != 0) {
602  return -1;
603  }
604  break;
605 
606  case SpinGC:
607  if (expec_cisajs_SpinGC(X, nstate, Xvec, vec, prod) != 0) {
608  return -1;
609  }
610  break;
611 
612  default:
613  return -1;
614  }
615 
616  for (istate = 0; istate < nstate; istate++) {
617  switch (X->Def.iCalcType) {
618  case TPQCalc:
619  step = X->Def.istep;
620  sprintf(sdt, "%s_cisajs_set%dstep%d.dat", X->Def.CDataFileHead, istate, step);
621  break;
622  case TimeEvolution:
623  step = X->Def.istep;
624  sprintf(sdt, "%s_cisajs_step%d.dat", X->Def.CDataFileHead, step);
625  break;
626  case FullDiag:
627  case CG:
628  sprintf(sdt, "%s_cisajs_eigen%d.dat", X->Def.CDataFileHead, istate);
629  break;
630  }
631  if (childfopenMPI(sdt, "w", &fp) == 0) {
632  for (ica = 0; ica < X->Def.NCisAjt; ica++) {
633  fprintf(fp, " %4d %4d %4d %4d %.10lf %.10lf\n",
634  X->Def.CisAjt[ica][0], X->Def.CisAjt[ica][1], X->Def.CisAjt[ica][2], X->Def.CisAjt[ica][3],
635  real(prod[ica][istate]), imag(prod[ica][istate]));
636  }
637  fclose(fp);
638  }
639  else return -1;
640  }/*for (istate = 0; istate < nstate; istate++)*/
641 
642  if (X->Def.St == 0) {
643  if (X->Def.iCalcType == TPQCalc) {
644  TimeKeeperWithRandAndStep(X, "%s_TimeKeeper.dat", "set %d step %d:expec_cisajs finishes: %s", "a", rand_i, step);
645  }
646  else if (X->Def.iCalcType == TimeEvolution) {
647  TimeKeeperWithStep(X, "%s_TimeKeeper.dat", "step %d:expec_cisajs finishes: %s", "a", step);
648  }
649  }
650  else if (X->Def.St == 1) {
651  TimeKeeper(X, "%s_TimeKeeper.dat", "CG expec_cisajs finishes: %s", "a");
652  fprintf(stdoutMPI, "%s", " End : Calculate one body Green functions.\n\n");
653  }
654  free_cd_2d_allocate(prod);
655  return 0;
656 }
struct DefineList Def
Definision of system (Hamiltonian) etc.
Definition: struct.hpp:395
int St
0 or 1, but it affects nothing.
Definition: struct.hpp:80
int expec_cisajs_SpinGC(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for SpinGC model.
FILE * stdoutMPI
File pointer to the standard output defined in InitializeMPI()
Definition: global.cpp:75
int GetSplitBitByModel(const int Nsite, const int iCalcModel, long int *irght, long int *ilft, long int *ihfbit)
function of splitting original bit into right and left spaces.
Definition: bitcalc.cpp:78
int BitCheckGeneral(const long int org_bit, const int org_isite, const int target_ispin, const long int *SiteToBit, const long int *Tpow)
bit check function for general spin
Definition: bitcalc.cpp:392
int X_Spin_CisAis(long int j, long int is1_spin, long int sigma1)
Compute the spin state with bit mask is1_spin.
void child_general_hopp(int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1, struct BindStruct *X, std::complex< double > trans)
Compute hopping (canonical)
int iFlgSzConserved
Flag whether Sz is conserved.
Definition: struct.hpp:87
int Nsite
Number of sites in the INTRA process region.
Definition: struct.hpp:56
void zaxpy_long(long int n, std::complex< double > a, std::complex< double > *x, std::complex< double > *y)
Wrapper of zaxpy.
Definition: mltply.cpp:128
int TimeKeeperWithStep(struct BindStruct *X, const char *cFileName, const char *cTimeKeeper_Message, const char *cWriteType, const int istep)
Functions for writing a time log.
Definition: log.cpp:78
int X_SpinGC_CisAis(long int j, long int is1_spin, long int sigma1)
Compute the grandcanonical spin state with bit mask is1_spin.
struct LargeList Large
Variables for Matrix-Vector product.
Definition: struct.hpp:397
int * LocSpn
[DefineList::NLocSpn] Flag (and size) of the local spin. malloc in setmem_def().
Definition: struct.hpp:82
void X_GC_child_CisAis_GeneralSpin_MPIdouble(int org_isite1, int org_ispin1, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Compute term in the grandcanonical general spin system when both site is in the inter process region...
int expec_cisajs_Spin(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for Spin model.
int expec_cisajs_HubbardGC(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for Hubbard GC model.
int mode
multiply or expectation value.
Definition: struct.hpp:331
void X_GC_child_CisAit_GeneralSpin_MPIdouble(int org_isite1, int org_ispin1, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Compute term in the grandcanonical general spin system when both site is in the inter process region...
long int irght
Used for Ogata-Lin ???
Definition: struct.hpp:344
int expec_cisajs_SpinHalf(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for Half-Spin model.
int TimeKeeperWithRandAndStep(struct BindStruct *X, const char *cFileName, const char *cTimeKeeper_Message, const char *cWriteType, const int irand, const int istep)
Functions for writing a time log.
Definition: log.cpp:117
long int ilft
Used for Ogata-Lin ???
Definition: struct.hpp:345
int NCisAjt
Number of indices of two-body correlation function.
Definition: struct.hpp:175
Bind.
Definition: struct.hpp:394
int GetOffCompGeneralSpin(const long int org_ibit, const int org_isite, const int org_ispin, const int off_ispin, long int *_ioffComp, const long int *SiteToBit, const long int *Tpow)
function of getting off-diagonal component for general spin
Definition: bitcalc.cpp:243
void X_child_general_hopp_MPIsingle(int org_isite1, int org_ispin1, int org_isite2, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Hubbard (Kondo) + Canonical ensemble When only site2 is in the inter process region...
int expec_cisajs_SpinGeneral(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for General-Spin model.
void zclear(long int n, std::complex< double > *x)
clear std::complex<double> array.
Definition: mltply.cpp:143
long int ihfbit
Used for Ogata-Lin ???
Definition: struct.hpp:346
void X_GC_child_CisAis_spin_MPIdouble(int org_isite1, int org_ispin1, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Spin + GC When both site1 and site2 are in the inter process region.
long int i_max
Length of eigenvector.
Definition: struct.hpp:318
int myrank
Process ID, defined in InitializeMPI()
Definition: global.cpp:73
int expec_cisajs(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec)
function of calculation for one body green&#39;s function
int iFlgGeneralSpin
Flag for the general (Sz/=1/2) spin.
Definition: struct.hpp:86
void MultiVecProdMPI(long int ndim, int nstate, std::complex< double > **v1, std::complex< double > **v2, std::complex< double > *prod)
Compute conjugate scaler product of process-distributed vector .
Definition: wrapperMPI.cpp:401
void X_GC_child_CisAit_spin_MPIdouble(int org_isite1, int org_ispin1, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Spin + GC When both site1 and site2 are in the inter process region.
long int * SiteToBit
[DefineList::NsiteMPI] Similar to DefineList::Tpow. For general spin.
Definition: struct.hpp:94
int istep
Index of TPQ step ???
Definition: struct.hpp:78
long int * Tpow
[2 * DefineList::NsiteMPI] malloc in setmem_def().
Definition: struct.hpp:90
int ** CisAjt
[DefineList::NCisAjt][4] Indices of one-body correlation function. malloc in setmem_def().
Definition: struct.hpp:174
int expec_cisajs_SpinGCGeneral(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for General SpinGC model.
int child_general_hopp_GetInfo(struct BindStruct *X, long int isite1, long int isite2, long int sigma1, long int sigma2)
Compute mask for bit operation of hopping term.
int X_SpinGC_CisAit(long int j, long int is1_spin, long int sigma2, long int *tmp_off)
Compute index of final wavefunction by term (grandcanonical).
int TimeKeeper(struct BindStruct *X, const char *cFileName, const char *cTimeKeeper_Message, const char *cWriteType)
Functions for writing a time log.
Definition: log.cpp:42
int iCalcModel
Switch for model. 0:Hubbard, 1:Spin, 2:Kondo, 3:HubbardGC, 4:SpinGC, 5:KondoGC, 6:HubbardNConserved.
Definition: struct.hpp:200
void GC_child_general_hopp(int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1, struct BindStruct *X, std::complex< double > trans)
Commpute hopping term (grandcanonical)
struct CheckList Check
Size of the Hilbert space.
Definition: struct.hpp:396
char * CDataFileHead
Read from Calcmod in readdef.h. Header of output file such as Green&#39;s function.
Definition: struct.hpp:42
void X_child_general_hopp_MPIdouble(int org_isite1, int org_ispin1, int org_isite2, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Hubbard (Kondo) + Canonical ensemble When both site1 and site2 are in the inter proce...
void X_GC_child_general_hopp_MPIdouble(int org_isite1, int org_ispin1, int org_isite2, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Hubbard + GC When both site1 and site2 are in the inter process region.
void X_GC_child_general_hopp_MPIsingle(int org_isite1, int org_ispin1, int org_isite2, int org_ispin2, std::complex< double > tmp_trans, struct BindStruct *X, int nstate, std::complex< double > **tmp_v0, std::complex< double > **tmp_v1)
Hopping term in Hubbard + GC When only site2 is in the inter process region.
int expec_cisajs_SpinGCHalf(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for Half-SpinGC model.
long int * list_1
Definition: global.cpp:25
long int idim_max
The dimension of the Hilbert space of this process.
Definition: struct.hpp:305
int expec_cisajs_Hubbard(struct BindStruct *X, int nstate, std::complex< double > **Xvec, std::complex< double > **vec, std::complex< double > **prod)
function of calculation for one body green&#39;s function for Hubbard model.
int iCalcType
Switch for calculation type. 0:Lanczos, 1:TPQCalc, 2:FullDiag.
Definition: struct.hpp:194
int childfopenMPI(const char *_cPathChild, const char *_cmode, FILE **_fp)
Only the root process open file in output/ directory.
Definition: FileIO.cpp:27