38 #include "LogMessage.h" 39 #include "wrapperMPI.h" 87 int isite1,
int isigma1,
88 int isite2,
int isigma2,
89 int isite3,
int isigma3,
90 int isite4,
int isigma4
96 double complex *cInterAllValue,
97 int isite1,
int isigma1,
98 int isite2,
int isigma2,
99 int isite3,
int isigma3,
100 int isite4,
int isigma4,
101 double re_value,
double im_value
131 const int icheckValue,
132 const int ilowestValue,
133 const int iHighestValue
136 if(icheckValue < ilowestValue || icheckValue > iHighestValue){
156 char cKWList[][D_CharTmpReadDef],
163 for(itmpKWidx=0; itmpKWidx<iSizeOfKWidx; itmpKWidx++){
164 if(strcmp(cKW,
"")==0){
167 else if(
CheckWords(cKW, cKWList[itmpKWidx])==0){
195 char csplit[] =
" ,.\t\n";
196 if(*ctmpLine==
'\n')
return 1;
197 ctmpRead = strtok(ctmpLine, csplit);
198 if(strncmp(ctmpRead,
"=", 1)==0 || strncmp(ctmpRead,
"#", 1)==0 || ctmpRead==NULL){
201 strcpy(ctmp, ctmpRead);
203 ctmpRead = strtok( NULL, csplit );
204 *itmp = strtol(ctmpRead, &cerror, 0);
211 ctmpRead = strtok( NULL, csplit );
212 if(ctmpRead != NULL){
237 char ctmpLine[D_CharTmpReadDef+D_CharKWDMAX];
238 char ctmp[D_CharKWDMAX];
240 X->iFlgFiniteTemperature=0;
244 X->iInitialVecType=0;
245 X->iOutputEigenVec=0;
262 while(
fgetsMPI(ctmpLine, D_CharTmpReadDef+D_CharKWDMAX, fp)!=NULL ){
264 if(iret==1)
continue;
270 else if(
CheckWords(ctmp,
"FlgFiniteTemperature")==0){
271 X->iFlgFiniteTemperature = itmp;
280 X->iCalcEigenVec=itmp;
282 else if(
CheckWords(ctmp,
"InitialVecType")==0){
283 X->iInitialVecType=itmp;
286 X->iOutputEigenVec=itmp;
289 X->iInputEigenVec=itmp;
298 X->iFlgCalcSpec=itmp;
308 X->iFlgScaLAPACK=itmp;
350 if(
X->iInputHam == 1 &&
X->iOutputHam==1){
373 if(
X->iCalcType !=2 &&
X->iOutputHam ==
TRUE) {
392 const char* cFileListNameFile,
393 char cFileNameList[][D_CharTmpReadDef]
398 char ctmpFileName[D_FileNameMaxReadDef];
399 char ctmpKW[D_CharTmpReadDef], ctmp2[256];
402 strcpy(cFileNameList[i],
"");
405 fplist =
fopenMPI(cFileListNameFile,
"r");
408 while(
fgetsMPI(ctmp2, 256, fplist) != NULL){
409 memset(ctmpKW,
'\0', strlen(ctmpKW));
410 memset(ctmpFileName,
'\0', strlen(ctmpFileName));
411 sscanf(ctmp2,
"%s %s\n", ctmpKW, ctmpFileName);
413 if(strncmp(ctmpKW,
"#", 1)==0 || *ctmp2==
'\n' || (strcmp(ctmpKW,
"")&&strcmp(ctmpFileName,
""))==0){
416 else if(strcmp(ctmpKW,
"")*strcmp(ctmpFileName,
"")==0){
432 if(strcmp(cFileNameList[itmpKWidx],
"") !=0){
439 strcpy(cFileNameList[itmpKWidx], ctmpFileName);
463 char defname[D_FileNameMaxReadDef];
464 char ctmp[D_CharTmpReadDef], ctmp2[256];
466 unsigned int iline=0;
468 X->iFlgSpecOmegaMax=
FALSE;
469 X->iFlgSpecOmegaMin=
FALSE;
470 X->iFlgSpecOmegaOrg=
FALSE;
475 int iReadNCond=
FALSE;
479 X->Param.ExpecInterval=1;
495 if(strcmp(defname,
"")==0){
512 if (strcmp(defname,
"") == 0)
continue;
513 if(iKWidx==KWSpectrumVec){
532 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
534 sscanf(ctmp2,
"%s %d\n", ctmp, &itmp);
535 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
536 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
537 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
540 sscanf(ctmp2,
"%s %s\n", ctmp,
X->CDataFileHead);
543 sscanf(ctmp2,
"%s %s\n", ctmp,
X->CParaFileHead);
545 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
549 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
550 if (*ctmp2 ==
'\n')
continue;
551 sscanf(ctmp2,
"%s %lf %lf\n", ctmp, &dtmp, &dtmp2);
553 X->Nsite = (int) dtmp;
559 X->Ndown = (int) dtmp;
560 X->Total2Sz =
X->Nup -
X->Ndown;
563 X->Total2Sz = (int) dtmp;
564 X->iFlgSzConserved =
TRUE;
571 X->NCond = (int) dtmp;
574 else if (
CheckWords(ctmp,
"Lanczos_max") == 0) {
575 X->Lanczos_max = (int) dtmp;
577 else if (
CheckWords(ctmp,
"initial_iv") == 0) {
578 X->initial_iv = (int) dtmp;
581 X->nvec = (int) dtmp;
584 X->k_exct = (int) dtmp;
586 else if (
CheckWords(ctmp,
"LanczosEps") == 0) {
587 X->LanczosEps = (int) dtmp;
589 else if (
CheckWords(ctmp,
"LanczosTarget") == 0) {
590 X->LanczosTarget = (int) dtmp;
592 else if (
CheckWords(ctmp,
"LargeValue") == 0) {
598 else if(strcmp(ctmp,
"TimeSlice")==0){
599 X->Param.TimeSlice=dtmp;
601 else if(strcmp(ctmp,
"ExpandCoef")==0){
602 X->Param.ExpandCoef=(int)dtmp;
604 else if(strcmp(ctmp,
"OutputInterval")==0){
605 X->Param.OutputInterval=(int)dtmp;
607 else if (
CheckWords(ctmp,
"ExpecInterval") == 0) {
608 X->Param.ExpecInterval = (int) dtmp;
610 else if(strcmp(ctmp,
"Tinit")==0){
614 X->read_hacker = (int) dtmp;
617 X->dcOmegaMax=dtmp+dtmp2*I;
618 X->iFlgSpecOmegaMax=
TRUE;
621 X->dcOmegaMin =dtmp+dtmp2*I;
622 X->iFlgSpecOmegaMin=
TRUE;
625 X->dcOmegaOrg +=dtmp*I;
626 X->iFlgSpecOmegaOrg=
TRUE;
629 X->dcOmegaOrg +=dtmp+dtmp2*I;
630 X->iFlgSpecOmegaOrg=
TRUE;
633 X->iNOmega=(int)dtmp;
635 else if(
CheckWords(ctmp,
"TargetTPQRand")==0) {
646 X->iFlgGeneralSpin =
FALSE;
647 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
649 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NLocSpn));
653 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
655 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NTransfer));
659 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
661 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NCoulombIntra));
665 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
667 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NCoulombInter));
671 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
673 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NHundCoupling));
677 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
679 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NPairHopping));
684 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
686 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NExchangeCoupling));
690 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
692 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NIsingCoupling));
696 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
698 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NPairLiftCoupling));
702 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
704 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NInterAll));
708 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
710 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NCisAjt));
714 fgetsMPI(ctmp,
sizeof(ctmp) /
sizeof(
char), fp);
716 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NCisAjtCkuAlvDC));
720 fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
722 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NLaser));
726 if(
X->iCalcType != TimeEvolution)
break;
728 fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
730 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NTETimeSteps));
735 if(
X->NTETimeSteps>0) {
736 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
737 sscanf(ctmp2,
"%lf %d \n", &dtmp, &itmp);
738 for (i = 0; i < itmp; ++i) {
741 if(iTETransMax < itmp) iTETransMax=itmp;
744 X->NTETransferMax=iTETransMax;
748 if(
X->iCalcType != TimeEvolution)
break;
750 fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
752 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NTETimeSteps));
756 int iTEInterAllMax=0;
757 if(
X->NTETimeSteps>0) {
758 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
759 sscanf(ctmp2,
"%lf %d \n", &dtmp, &itmp);
760 for (i = 0; i < itmp; ++i) {
763 if(iTEInterAllMax < itmp) iTEInterAllMax=itmp;
766 X->NTEInterAllMax=iTEInterAllMax;
782 sscanf(ctmp2,
"%d\n", &(xBoost->
NumarrayJ));
784 for (iline = 0; iline < xBoost->
NumarrayJ * 3; iline++) {
789 sscanf(ctmp2,
"%ld %ld %ld %ld\n", &(xBoost->
W0), &(xBoost->
R0), &(xBoost->
num_pivot),
794 case KWSingleExcitation:
796 fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
798 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NSingleExcitationOperator));
801 case KWPairExcitation:
803 fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
805 sscanf(ctmp2,
"%s %d\n", ctmp, &(
X->NPairExcitationOperator));
818 switch(
X->iCalcModel){
822 case SpinlessFermion:
824 if(iReadNCond==
TRUE){
825 if(
X->iCalcModel==Spin){
826 fprintf(
stdoutMPI,
"For Spin, Ncond should not be defined.\n");
830 if(
X->iFlgSzConserved==
TRUE){
831 if(
X->iCalcModel==SpinlessFermion){
832 fprintf(
stdoutMPI,
" Warning: For Spinless fermion, 2Sz should not be defined.\n");
838 X->Nup=
X->NLocSpn+
X->NCond+
X->Total2Sz;
839 X->Ndown=
X->NLocSpn+
X->NCond-
X->Total2Sz;
844 if(
X->iCalcModel == Hubbard){
847 fprintf(
stdoutMPI,
"Ncond is incorrect.\n");
850 X->iCalcModel=HubbardNConserved;
852 else if(
X->iCalcModel ==SpinlessFermion){
858 fprintf(
stdoutMPI,
" 2Sz is not defined.\n");
864 else if(iReadNCond ==
FALSE &&
X->iFlgSzConserved==
TRUE){
865 if(
X->iCalcModel != Spin){
866 fprintf(
stdoutMPI,
" NCond is not defined.\n");
869 X->Nup=
X->NLocSpn+
X->Total2Sz;
870 X->Ndown=
X->NLocSpn-
X->Total2Sz;
875 if(
X->Nup==0 &&
X->Ndown==0){
876 if(
X->iCalcModel == Spin){
877 fprintf(
stdoutMPI,
" 2Sz is not defined.\n");
881 fprintf(
stdoutMPI,
" NCond is not defined.\n");
887 if(
X->iCalcModel == Spin){
892 X->Ne =
X->Nup +
X->Ndown;
894 if(
X->NLocSpn>
X->Ne){
896 fprintf(
stdoutMPI,
"NLocalSpin=%d, Ne=%d\n",
X->NLocSpn,
X->Ne);
904 case SpinlessFermionGC:
905 if(iReadNCond ==
TRUE ||
X->iFlgSzConserved ==
TRUE){
906 fprintf(
stdoutMPI,
"\n Warning: For GC, both Ncond and 2Sz should not be defined.\n");
919 if(
X->Lanczos_max<=0) {
923 if(
X->LanczosEps<=0) {
931 if(
X->Param.ExpecInterval<=0){
936 X->nvec=
X->Lanczos_max;
939 if(
X->nvec <
X->k_exct){
942 if (
X->LanczosTarget <
X->k_exct)
X->LanczosTarget =
X->k_exct;
949 if(
X->k_exct>
X->LanczosTarget ){
958 X->NdownMPI=
X->Ndown;
960 X->NdownOrg=
X->Ndown;
982 char defname[D_FileNameMaxReadDef];
983 char ctmp[D_CharTmpReadDef], ctmp2[256];
985 unsigned int i,j, idx, itype;
989 int isite1, isite2, isite3, isite4;
990 int isigma1, isigma2, isigma3, isigma4;
991 double dvalue_re, dvalue_im;
992 double dArrayValue_re[3];
994 int ieps_CheckImag0=-12;
996 unsigned int iline=0;
1002 int icnt_interall=0;
1003 int iflg_interall=0;
1005 unsigned int iloop=0;
1007 for(iKWidx=KWLocSpin; iKWidx<
D_iKWNumDef; iKWidx++){
1009 if(strcmp(defname,
"")==0 || iKWidx==KWSpectrumVec)
continue;
1013 if(iKWidx != KWBoost){
1014 for(i=0;i<IgnoreLinesInDef;i++)
fgetsMPI(ctmp,
sizeof(ctmp)/
sizeof(
char), fp);
1022 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1028 sscanf(ctmp2,
"%d %d\n", &(xitmp[0]), &(xitmp[1]) );
1029 X->LocSpn[xitmp[0]] = xitmp[1];
1030 X->SiteToBit[xitmp[0]]=(
X->LocSpn[xitmp[0]]+1);
1048 while(
fgetsMPI(ctmp2, 256, fp) != NULL )
1050 if(idx==
X->NTransfer){
1055 sscanf(ctmp2,
"%d %d %d %d %lf %lf\n",
1069 if(isite1==isite2 && isigma1==isigma2){
1078 if(
X->iCalcModel==Spin){
1079 if(isite1 != isite2){
1084 else if(
X->iCalcModel==Kondo){
1086 if(isite1 != isite2){
1092 else if(
X->iCalcModel==SpinlessFermion ||
X->iCalcModel==SpinlessFermionGC){
1093 if(isigma1 != 0 || isigma2 !=0){
1095 fprintf(stderr,
cErrNonHermiteTrans, isite1, isigma1, isite2, isigma2, dvalue_re, dvalue_im);
1102 for( i=0; i < icnt_trans; i++){
1103 if(isite1 ==
X->GeneralTransfer[i][0] && isite2 ==
X->GeneralTransfer[i][2]
1104 && isigma1 ==
X->GeneralTransfer[i][1] && isigma2 ==
X->GeneralTransfer[i][3])
1106 X->ParaGeneralTransfer[i] += dvalue_re+dvalue_im*I;
1112 if(iflg_trans == 0){
1113 X->GeneralTransfer[icnt_trans][0]=isite1;
1114 X->GeneralTransfer[icnt_trans][1]=isigma1;
1115 X->GeneralTransfer[icnt_trans][2]=isite2;
1116 X->GeneralTransfer[icnt_trans][3]=isigma2;
1117 X->ParaGeneralTransfer[icnt_trans] = dvalue_re+dvalue_im*I;
1129 X->NTransfer = icnt_trans;
1143 case KWCoulombIntra:
1145 if(
X->NCoulombIntra>0){
1146 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1147 if(idx==
X->NCoulombIntra){
1151 sscanf(ctmp2,
"%d %lf\n",
1152 &(
X->CoulombIntra[idx][0]),
1153 &(
X->ParaCoulombIntra[idx])
1156 if(
CheckSite(
X->CoulombIntra[idx][0],
X->Nsite) !=0){
1165 case KWCoulombInter:
1167 if(
X->NCoulombInter>0){
1168 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1169 if(idx==
X->NCoulombInter){
1174 sscanf(ctmp2,
"%d %d %lf\n",
1175 &(
X->CoulombInter[idx][0]),
1176 &(
X->CoulombInter[idx][1]),
1177 &(
X->ParaCoulombInter[idx])
1180 if(
CheckPairSite(
X->CoulombInter[idx][0],
X->CoulombInter[idx][1],
X->Nsite) !=0){
1192 if(
X->NHundCoupling>0){
1193 while(
fgetsMPI(ctmp2,256,fp) != NULL)
1195 if(idx==
X->NHundCoupling){
1200 sscanf(ctmp2,
"%d %d %lf\n",
1201 &(
X->HundCoupling[idx][0]),
1202 &(
X->HundCoupling[idx][1]),
1203 &(
X->ParaHundCoupling[idx])
1206 if(
CheckPairSite(
X->HundCoupling[idx][0],
X->HundCoupling[idx][1],
X->Nsite) !=0){
1217 if(
X->iCalcModel == Spin ||
X->iCalcModel == SpinGC){
1218 fprintf(
stdoutMPI,
"PairHop is not active in Spin and SpinGC.\n");
1222 if(
X->NPairHopping>0){
1223 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1224 if(idx==
X->NPairHopping/2){
1228 sscanf(ctmp2,
"%d %d %lf\n",
1229 &(
X->PairHopping[2*idx][0]),
1230 &(
X->PairHopping[2*idx][1]),
1231 &(
X->ParaPairHopping[2*idx])
1234 if(
CheckPairSite(
X->PairHopping[2*idx][0],
X->PairHopping[2*idx][1],
X->Nsite) !=0){
1238 X->PairHopping[2*idx+1][0]=
X->PairHopping[2*idx][1];
1239 X->PairHopping[2*idx+1][1]=
X->PairHopping[2*idx][0];
1240 X->ParaPairHopping[2*idx+1]=
X->ParaPairHopping[2*idx];
1248 if(
X->NExchangeCoupling>0){
1249 while(
fgetsMPI(ctmp2,256,fp) != NULL){
1250 if(idx==
X->NExchangeCoupling){
1255 sscanf(ctmp2,
"%d %d %lf\n",
1256 &(
X->ExchangeCoupling[idx][0]),
1257 &(
X->ExchangeCoupling[idx][1]),
1258 &(
X->ParaExchangeCoupling[idx])
1261 if(
CheckPairSite(
X->ExchangeCoupling[idx][0],
X->ExchangeCoupling[idx][1],
X->Nsite) !=0){
1273 if(
X->NIsingCoupling>0){
1274 while(
fgetsMPI(ctmp2,256,fp) != NULL){
1275 if(idx==
X->NIsingCoupling){
1280 sscanf(ctmp2,
"%d %d %lf\n",
1292 X->HundCoupling[
X->NHundCoupling+idx][0]=isite1;
1293 X->HundCoupling[
X->NHundCoupling+idx][1]=isite2;
1294 X->ParaHundCoupling[
X->NHundCoupling+idx]= -dvalue_re/2.0;
1296 X->CoulombInter[
X->NCoulombInter+idx][0]=isite1;
1297 X->CoulombInter[
X->NCoulombInter+idx][1]=isite2;
1298 X->ParaCoulombInter[
X->NCoulombInter+idx]=-dvalue_re/4.0;
1306 if(
X->NPairLiftCoupling>0){
1307 if(
X->iCalcModel != SpinGC){
1308 fprintf(
stdoutMPI,
"PairLift is active only in SpinGC.\n");
1311 while(
fgetsMPI(ctmp2,256,fp) != NULL)
1313 if(idx==
X->NPairLiftCoupling){
1318 sscanf(ctmp2,
"%d %d %lf\n",
1319 &(
X->PairLiftCoupling[idx][0]),
1320 &(
X->PairLiftCoupling[idx][1]),
1321 &(
X->ParaPairLiftCoupling[idx])
1324 if(
CheckPairSite(
X->PairLiftCoupling[idx][0],
X->PairLiftCoupling[idx][1],
X->Nsite) !=0){
1336 X->NInterAll_Diagonal=0;
1337 X->NInterAll_OffDiagonal=0;
1338 if(
X->NInterAll>0) {
1341 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
1342 if (idx ==
X->NInterAll) {
1346 sscanf(ctmp2,
"%d %d %d %d %d %d %d %d %lf %lf\n",
1360 isite1, isigma1, isite2, isigma2,
1361 isite3, isigma3, isite4, isigma4) != 0) {
1373 dvalue_re, dvalue_im
1381 X->NInterAll = icnt_interall;
1382 X->NInterAll_Diagonal=icnt_diagonal;
1383 X->NInterAll_OffDiagonal =
X->NInterAll-
X->NInterAll_Diagonal;
1391 X->InterAll,
X->ParaInterAll,
X->NInterAll,
1392 X->InterAll_Diagonal,
X->ParaInterAll_Diagonal,
1393 X->InterAll_OffDiagonal,
X->ParaInterAll_OffDiagonal,
1394 X->EDChemi,
X->EDSpinChemi,
X->EDParaChemi, &
X->EDNChemi,
1402 X->InterAll,
X->ParaInterAll,
1403 X->InterAll_OffDiagonal,
X->ParaInterAll_OffDiagonal,
1404 X->NInterAll_OffDiagonal,
X->iCalcModel
1415 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1416 if(idx==
X->NCisAjt){
1420 sscanf(ctmp2,
"%d %d %d %d\n",
1426 if(
X->iCalcModel == Spin){
1427 if(isite1 != isite2){
1434 X->CisAjt[ idx ][0] = isite1;
1435 X->CisAjt[ idx ][1] = isigma1;
1436 X->CisAjt[ idx ][2] = isite2;
1437 X->CisAjt[ idx ][3] = isigma2;
1451 if(
X->NCisAjtCkuAlvDC>0){
1452 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1453 if(idx==
X->NCisAjtCkuAlvDC){
1458 sscanf(ctmp2,
"%d %d %d %d %d %d %d %d\n",
1469 if(
X->iCalcModel == Spin ||
X->iCalcModel == SpinGC){
1478 X->CisAjtCkuAlvDC[idx][0] = isite1;
1479 X->CisAjtCkuAlvDC[idx][1] = isigma1;
1480 X->CisAjtCkuAlvDC[idx][2] = isite2;
1481 X->CisAjtCkuAlvDC[idx][3] = isigma2;
1482 X->CisAjtCkuAlvDC[idx][4] = isite3;
1483 X->CisAjtCkuAlvDC[idx][5] = isigma3;
1484 X->CisAjtCkuAlvDC[idx][6] = isite4;
1485 X->CisAjtCkuAlvDC[idx][7] = isigma4;
1501 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1502 sscanf(ctmp2,
"%s %lf\n", &(ctmp), &(
X->ParaLaser[idx]));
1514 if(
X->NTETimeSteps>0){
1516 while(
fgetsMPI(ctmp2, 256, fp) != NULL){
1517 sscanf(ctmp2,
"%lf %d\n", &(
X->TETime[idx]), &(
X->NTETransfer[idx]));
1518 for(i=0; i<
X->NTETransfer[idx]; ++i ){
1520 sscanf(ctmp2,
"%d %d %d %d %lf %lf\n",
1528 X->TETransfer[idx][i][0]= isite1;
1529 X->TETransfer[idx][i][1]= isigma1;
1530 X->TETransfer[idx][i][2]= isite2;
1531 X->TETransfer[idx][i][3] = isigma2;
1532 X->ParaTETransfer[idx][i]=dvalue_re+dvalue_im*I;
1541 if(idx!=
X->NTETimeSteps){
1549 if(
X->NTETimeSteps>0){
1551 while(
fgetsMPI(ctmp2, 256, fp) != NULL) {
1552 sscanf(ctmp2,
"%lf %d\n", &(
X->TETime[idx]), &(
X->NTEInterAll[idx]));
1555 for (i = 0; i <
X->NTEInterAll[idx]; ++i) {
1557 sscanf(ctmp2,
"%d %d %d %d %d %d %d %d %lf %lf\n",
1570 isite1, isigma1, isite2, isigma2,
1571 isite3, isigma3, isite4, isigma4) != 0) {
1577 X->ParaTEInterAll[idx],
1582 dvalue_re, dvalue_im
1588 X->NTEInterAll[idx] = icnt_interall;
1589 X->NTEInterAllDiagonal[idx] = icnt_diagonal;
1590 X->NTEInterAllOffDiagonal[idx] = icnt_interall - icnt_diagonal;
1592 if (
GetDiagonalInterAll(
X->TEInterAll[idx],
X->ParaTEInterAll[idx],
X->NTEInterAll[idx],
X->TEInterAllDiagonal[idx],
X->ParaTEInterAllDiagonal[idx],
1593 X->TEInterAllOffDiagonal[idx],
X->ParaTEInterAllOffDiagonal[idx],
X->TEChemi[idx],
X->SpinTEChemi[idx],
X->ParaTEChemi[idx], &
X->NTEChemi[idx],
X->iCalcModel) != 0)
1600 X->TEInterAll[idx],
X->ParaTEInterAll[idx],
1601 X->TEInterAllOffDiagonal[idx],
X->ParaTEInterAllOffDiagonal[idx],
1602 X->NTEInterAllOffDiagonal[idx],
X->iCalcModel
1611 if(idx!=
X->NTETimeSteps){
1622 sscanf(ctmp2,
"%lf %lf %lf\n",
1625 &dArrayValue_re[2]);
1626 for(iline=0; iline<3; iline++){
1627 xBoost->
vecB[iline]= dArrayValue_re[iline];
1635 for(iline=0; iline<xBoost->
NumarrayJ; iline++){
1636 for(ilineIn=0; ilineIn<3; ilineIn++){
1638 sscanf(ctmp2,
"%lf %lf %lf\n",
1641 &dArrayValue_re[2]);
1642 for(ilineIn2=0; ilineIn2<3; ilineIn2++){
1643 xBoost->
arrayJ[iline][ilineIn][ilineIn2]= dArrayValue_re[ilineIn2];
1654 for(iline=0; iline<xBoost->
num_pivot; iline++){
1657 sscanf(ctmp2,
"%d %d %d %d %d %d %d\n",
1667 for(iloop=0; iloop<xBoost->
R0; iloop++){
1668 for(itmp=0; itmp<7; itmp++){
1677 for(iline=0; iline<xBoost->
num_pivot; iline++){
1679 for(ilineIn2=0; ilineIn2<xBoost->
list_6spin_star[iline][0]; ilineIn2++){
1681 sscanf(ctmp2,
"%d %d %d %d %d %d %d\n",
1692 for(iloop=0; iloop<xBoost->
R0; iloop++){
1693 for(itmp=0; itmp<7; itmp++){
1704 case KWSingleExcitation:
1706 if(
X->NSingleExcitationOperator>0) {
1707 if(
X->iCalcModel == Spin ||
X->iCalcModel == SpinGC) {
1708 fprintf(stderr,
"SingleExcitation is not allowed for spin system.\n");
1712 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
1713 sscanf(ctmp2,
"%d %d %d %lf %lf\n",
1726 X->SingleExcitationOperator[idx][0] = isite1;
1727 X->SingleExcitationOperator[idx][1] = isigma1;
1728 X->SingleExcitationOperator[idx][2] = itype;
1729 X->ParaSingleExcitationOperator[idx] = dvalue_re + I * dvalue_im;
1732 if (idx !=
X->NSingleExcitationOperator) {
1739 case KWPairExcitation:
1741 if(
X->NPairExcitationOperator>0) {
1742 while (
fgetsMPI(ctmp2, 256, fp) != NULL) {
1743 sscanf(ctmp2,
"%d %d %d %d %d %lf %lf\n",
1758 X->PairExcitationOperator[idx][0] = isite1;
1759 X->PairExcitationOperator[idx][1] = isigma1;
1760 X->PairExcitationOperator[idx][2] = isite2;
1761 X->PairExcitationOperator[idx][3] = isigma2;
1762 X->PairExcitationOperator[idx][4] = itype;
1763 X->ParaPairExcitationOperator[idx] = dvalue_re + I * dvalue_im;
1766 X->PairExcitationOperator[idx][0] = isite2;
1767 X->PairExcitationOperator[idx][1] = isigma2;
1768 X->PairExcitationOperator[idx][2] = isite1;
1769 X->PairExcitationOperator[idx][3] = isigma1;
1770 X->PairExcitationOperator[idx][4] = itype;
1771 X->ParaPairExcitationOperator[idx] = -(dvalue_re + I * dvalue_im);
1776 if (idx !=
X->NPairExcitationOperator) {
1789 case KWCoulombIntra:
1790 case KWCoulombInter:
1796 if(
X->iFlgGeneralSpin==
TRUE){
1826 if(iSite>=iMaxNum)
return(-1);
1904 int isigma1, isigma2;
1905 int itmpsite1, itmpsite2;
1906 int itmpsigma1, itmpsigma2;
1907 int itmperrsite1, itmperrsite2;
1908 int itmperrsigma1, itmperrsigma2;
1909 double complex dcerrTrans;
1910 int icheckHermiteCount=
FALSE;
1913 double complex ddiff_trans;
1914 unsigned int itmpIdx, icntHermite, icntchemi;
1918 for(i=0; i<
X->NTransfer; i++){
1919 isite1=
X->GeneralTransfer[i][0];
1920 isigma1=
X->GeneralTransfer[i][1];
1921 isite2=
X->GeneralTransfer[i][2];
1922 isigma2=
X->GeneralTransfer[i][3];
1923 icheckHermiteCount=
FALSE;
1926 for(j=0; j<
X->NTransfer; j++){
1927 itmpsite1=
X->GeneralTransfer[j][0];
1928 itmpsigma1=
X->GeneralTransfer[j][1];
1929 itmpsite2=
X->GeneralTransfer[j][2];
1930 itmpsigma2=
X->GeneralTransfer[j][3];
1931 if(isite1 == itmpsite2 && isite2 == itmpsite1){
1932 if(isigma1 == itmpsigma2 && isigma2 == itmpsigma1){
1934 ddiff_trans =
X->ParaGeneralTransfer[i]-conj(
X->ParaGeneralTransfer[j]);
1936 itmperrsite1=itmpsite1;
1937 itmperrsigma1=itmpsigma1;
1938 itmperrsite2=itmpsite2;
1939 itmperrsigma2=itmpsigma2;
1940 dcerrTrans=
X->ParaGeneralTransfer[j];
1942 fprintf(
stdoutMPI,
cErrNonHermiteTrans, itmperrsite1, itmperrsigma1, itmperrsite2, itmperrsigma2, creal(dcerrTrans), cimag(dcerrTrans));
1946 if (icheckHermiteCount ==
FALSE) {
1948 if(2*icntHermite >=
X->NTransfer){
1949 fprintf(stderr,
"Elements of Transfers are incorrect.\n");
1952 if(isite1 !=isite2 || isigma1 !=isigma2){
1953 for(itmpIdx=0; itmpIdx<4; itmpIdx++){
1954 X->EDGeneralTransfer[2*icntHermite][itmpIdx]=
X->GeneralTransfer[i][itmpIdx];
1955 X->EDGeneralTransfer[2*icntHermite+1][itmpIdx]=
X->GeneralTransfer[j][itmpIdx];
1957 X->EDParaGeneralTransfer[2*icntHermite]=
X->ParaGeneralTransfer[i];
1958 X->EDParaGeneralTransfer[2*icntHermite+1]=
X->ParaGeneralTransfer[j];
1962 X->EDChemi[icntchemi] =
X->GeneralTransfer[i][0];
1963 X->EDSpinChemi[icntchemi] =
X->GeneralTransfer[i][1];
1964 X->EDParaChemi[icntchemi] = creal(
X->ParaGeneralTransfer[i]);
1968 icheckHermiteCount =
TRUE;
1977 if(icheckHermiteCount ==
FALSE){
1986 X->EDNTransfer=2*icntHermite;
1987 X->EDNChemi=icntchemi;
1990 for(i=0; i<
X->EDNTransfer; i++){
1991 for(itmpIdx=0; itmpIdx<4; itmpIdx++){
1992 X->GeneralTransfer[i][itmpIdx]=
X->EDGeneralTransfer[i][itmpIdx];
1994 X->ParaGeneralTransfer[i]=
X->EDParaGeneralTransfer[i];
2021 double complex* ParaInterAll,
2022 int **InterAllOffDiagonal,
2023 double complex*ParaInterAllOffDiagonal,
2024 const int NInterAllOffDiagonal,
2025 const int iCalcModel
2027 unsigned int i, j, icntincorrect, itmpret;
2028 int isite1, isite2, isite3, isite4;
2029 int isigma1, isigma2, isigma3, isigma4;
2030 int itmpsite1, itmpsite2, itmpsite3, itmpsite4;
2031 int itmpsigma1, itmpsigma2, itmpsigma3, itmpsigma4;
2032 unsigned int itmpIdx, icntHermite;
2033 int icheckHermiteCount =
FALSE;
2034 double complex ddiff_intall;
2037 for (i = 0; i < NInterAllOffDiagonal; i++) {
2039 isite1 = InterAllOffDiagonal[i][0];
2040 isigma1 = InterAllOffDiagonal[i][1];
2041 isite2 = InterAllOffDiagonal[i][2];
2042 isigma2 = InterAllOffDiagonal[i][3];
2043 isite3 = InterAllOffDiagonal[i][4];
2044 isigma3 = InterAllOffDiagonal[i][5];
2045 isite4 = InterAllOffDiagonal[i][6];
2046 isigma4 = InterAllOffDiagonal[i][7];
2047 icheckHermiteCount =
FALSE;
2049 for (j = 0; j < NInterAllOffDiagonal; j++) {
2050 itmpsite1 = InterAllOffDiagonal[j][0];
2051 itmpsigma1 = InterAllOffDiagonal[j][1];
2052 itmpsite2 = InterAllOffDiagonal[j][2];
2053 itmpsigma2 = InterAllOffDiagonal[j][3];
2054 itmpsite3 = InterAllOffDiagonal[j][4];
2055 itmpsigma3 = InterAllOffDiagonal[j][5];
2056 itmpsite4 = InterAllOffDiagonal[j][6];
2057 itmpsigma4 = InterAllOffDiagonal[j][7];
2059 if (isite1 == itmpsite4 && isite2 == itmpsite3 && isite3 == itmpsite2 && isite4 == itmpsite1) {
2060 if (isigma1 == itmpsigma4 && isigma2 == itmpsigma3 && isigma3 == itmpsigma2 && isigma4 == itmpsigma1) {
2061 ddiff_intall = cabs(ParaInterAllOffDiagonal[i] - conj(ParaInterAllOffDiagonal[j]));
2065 if (icheckHermiteCount ==
FALSE) {
2066 icheckHermiteCount =
TRUE;
2068 if (2 * icntHermite >= NInterAllOffDiagonal) {
2069 fprintf(
stdoutMPI,
"Elements of InterAll are incorrect.\n");
2073 for (itmpIdx = 0; itmpIdx < 8; itmpIdx++) {
2074 InterAll[2 * icntHermite][itmpIdx] = InterAllOffDiagonal[i][itmpIdx];
2075 InterAll[2 * icntHermite + 1][itmpIdx] = InterAllOffDiagonal[j][itmpIdx];
2078 ParaInterAll[2 * icntHermite] = ParaInterAllOffDiagonal[i];
2079 ParaInterAll[2 * icntHermite + 1] = ParaInterAllOffDiagonal[j];
2086 }
else if (isite1 == itmpsite2 && isite2 == itmpsite1 && isite3 == itmpsite4 &&
2087 isite4 == itmpsite3) {
2088 if (iCalcModel == Kondo || iCalcModel == KondoGC || iCalcModel == Spin || iCalcModel == SpinGC) {
2089 if (isigma1 == itmpsigma2 && isigma2 == itmpsigma1 && isigma3 == itmpsigma4 && isigma4 == itmpsigma3) {
2090 ddiff_intall = ParaInterAllOffDiagonal[i] - conj(ParaInterAllOffDiagonal[j]);
2093 if (icheckHermiteCount ==
FALSE) {
2094 icheckHermiteCount =
TRUE;
2096 if (2 * icntHermite >= NInterAllOffDiagonal) {
2097 fprintf(
stdoutMPI,
"Elements of InterAll are incorrect.\n");
2100 for (itmpIdx = 0; itmpIdx < 8; itmpIdx++) {
2101 InterAll[2 * icntHermite][itmpIdx] = InterAllOffDiagonal[i][itmpIdx];
2103 for (itmpIdx = 0; itmpIdx < 4; itmpIdx++) {
2104 InterAll[2 * icntHermite + 1][2 * itmpIdx] = InterAllOffDiagonal[i][6 -
2107 InterAll[2 * icntHermite + 1][2 * itmpIdx + 1] = InterAllOffDiagonal[i][7 - 2 *
2111 ParaInterAll[2 * icntHermite] = ParaInterAllOffDiagonal[i];
2112 ParaInterAll[2 * icntHermite + 1] = ParaInterAllOffDiagonal[j];
2124 fprintf(
stdoutMPI,
cErrNonHermiteInterAll, isite1, isigma1, isite2, isigma2, isite3, isigma3, isite4, isigma4,
2125 creal(ParaInterAllOffDiagonal[i]), cimag(ParaInterAllOffDiagonal[i]));
2130 if (icntincorrect != 0) {
2134 for (i = 0; i < NInterAllOffDiagonal; i++) {
2135 for (itmpIdx = 0; itmpIdx < 8; itmpIdx++) {
2136 InterAllOffDiagonal[i][itmpIdx] = InterAll[i][itmpIdx];
2138 ParaInterAllOffDiagonal[i] = ParaInterAll[i];
2164 complex
double *ParaInterAll,
2165 const int NInterAll,
2166 int **InterAllDiagonal,
2167 double *ParaInterAllDiagonal,
2168 int **InterAllOffDiagonal,
2169 complex
double *ParaInterAllOffDiagonal,
2173 unsigned int *NChemi,
2174 const int iCalcModel
2177 unsigned int i,icnt_diagonal, icnt_offdiagonal, tmp_i;
2178 int isite1, isite2, isite3, isite4;
2179 int isigma1, isigma2, isigma3, isigma4;
2184 for(i=0; i<NInterAll; i++){
2185 isite1=InterAll[i][0];
2186 isigma1=InterAll[i][1];
2187 isite2=InterAll[i][2];
2188 isigma2=InterAll[i][3];
2189 isite3=InterAll[i][4];
2190 isigma3=InterAll[i][5];
2191 isite4=InterAll[i][6];
2192 isigma4=InterAll[i][7];
2195 if(isite1 == isite2 && isite3 == isite4 &&
2196 isigma1 == isigma2 && isigma3 == isigma4)
2198 InterAllDiagonal[icnt_diagonal][0]=isite1;
2199 InterAllDiagonal[icnt_diagonal][1]=isigma1;
2200 InterAllDiagonal[icnt_diagonal][2]=isite3;
2201 InterAllDiagonal[icnt_diagonal][3]=isigma3;
2202 ParaInterAllDiagonal[icnt_diagonal] = creal(ParaInterAll[i]);
2206 else if(isite1 == isite4 && isite2 ==isite3 &&
2207 isigma1 == isigma4 && isigma2 ==isigma3)
2209 InterAllDiagonal[icnt_diagonal][0]=isite1;
2210 InterAllDiagonal[icnt_diagonal][1]=isigma1;
2211 InterAllDiagonal[icnt_diagonal][2]=isite2;
2212 InterAllDiagonal[icnt_diagonal][3]=isigma2;
2213 ParaInterAllDiagonal[icnt_diagonal] = -creal(ParaInterAll[i]);
2214 Chemi[*NChemi] = isite1;
2215 SpinChemi[*NChemi] = isigma1;
2217 ParaChemi[*NChemi] = -creal(ParaInterAll[i]);
2226 case HubbardNConserved:
2230 if(isigma1 == isigma2 && isigma3 == isigma4){
2231 for(tmp_i=0; tmp_i<8; tmp_i++){
2232 InterAllOffDiagonal[icnt_offdiagonal][tmp_i]=InterAll[i][tmp_i];
2234 ParaInterAllOffDiagonal[icnt_offdiagonal] = ParaInterAll[i];
2236 else if(isigma1==isigma4 && isigma2 == isigma3){
2237 InterAllOffDiagonal[icnt_offdiagonal][0]=isite1;
2238 InterAllOffDiagonal[icnt_offdiagonal][1]=isigma1;
2239 InterAllOffDiagonal[icnt_offdiagonal][2]=isite4;
2240 InterAllOffDiagonal[icnt_offdiagonal][3]=isigma1;
2241 InterAllOffDiagonal[icnt_offdiagonal][4]=isite3;
2242 InterAllOffDiagonal[icnt_offdiagonal][5]=isigma2;
2243 InterAllOffDiagonal[icnt_offdiagonal][6]=isite2;
2244 InterAllOffDiagonal[icnt_offdiagonal][7]=isigma2;
2245 ParaInterAllOffDiagonal[icnt_offdiagonal] = -ParaInterAll[i];
2249 if(iCalcModel==Hubbard || iCalcModel==Kondo){
2259 creal(ParaInterAll[i]),
2260 cimag(ParaInterAll[i])
2265 for(tmp_i=0; tmp_i<8; tmp_i++){
2266 InterAllOffDiagonal[icnt_offdiagonal][tmp_i]=InterAll[i][tmp_i];
2268 ParaInterAllOffDiagonal[icnt_offdiagonal] = ParaInterAll[i];
2274 if(isite1 == isite2 && isite3 == isite4){
2275 for(tmp_i=0; tmp_i<8; tmp_i++){
2276 InterAllOffDiagonal[icnt_offdiagonal][tmp_i]=InterAll[i][tmp_i];
2278 ParaInterAllOffDiagonal[icnt_offdiagonal] =ParaInterAll[i];
2319 #include "version_major.h" 2322 #include "version_miner.h" 2325 #include "version_patch.h" 2333 else if (argc == 3 &&
2336 *mode=STANDARD_MODE;
2338 else if (argc == 3 &&
2342 *mode = STANDARD_DRY_MODE;
2344 else if (argc >= 2 &&
2348 fprintf(
stdoutMPI,
"\nHPhi version %d.%d.%d \n\n", ver_maj, ver_min, ver_pat);
2355 fprintf(
stdoutMPI,
" $ HPhi -e {namelist_file} \n");
2356 fprintf(
stdoutMPI,
"* Standard mode \n");
2357 fprintf(
stdoutMPI,
" $ HPhi -s {input_file} \n");
2358 fprintf(
stdoutMPI,
"* Standard DRY mode \n");
2359 fprintf(
stdoutMPI,
" $ HPhi -sdry {input_file} \n");
2360 fprintf(
stdoutMPI,
" In this mode, Hphi stops after it generats expert input files. \n");
2361 fprintf(
stdoutMPI,
"* Print the version \n");
2390 if(site1==site2 && site3==site4){
2413 const int isite1,
const int isite2,
2414 const int isite3,
const int isite4,
2419 if (isite1 != isite2) {
2425 if (isite3 != isite4) {
2453 eps=pow(10.0, neps);
2454 eps_CG=pow(10.0, nepsCG);
2477 switch(
X->iCalcModel){
2479 case HubbardNConserved:
2481 case SpinlessFermion:
2482 case SpinlessFermionGC:
2483 for(i=0; i<
X->Nsite; i++){
2492 for(i=0; i<
X->Nsite; i++){
2494 X->iFlgGeneralSpin=
TRUE;
2504 for(i=0; i<
X->Nsite; i++){
2506 X->iFlgGeneralSpin=
TRUE;
2539 X->NHundCoupling +=
X->NIsingCoupling;
2540 X->NCoulombInter +=
X->NIsingCoupling;
2559 X->NIsingCoupling=0;
2560 X->NPairLiftCoupling=0;
2563 X->NCisAjtCkuAlvDC=0;
2564 X->NSingleExcitationOperator=0;
2565 X->NPairExcitationOperator=0;
2594 const int isite1,
const int isigma1,
2595 const int isite2,
const int isigma2,
2596 const int isite3,
const int isigma3,
2597 const int isite4,
const int isigma4,
2601 if( isigma1 > iLocInfo[isite1] || isigma2 >iLocInfo[isite2]
2602 ||isigma3 > iLocInfo[isite3] || isigma4 >iLocInfo[isite4]){
2626 int isigma1, isigma2;
2627 if(
X->iFlgGeneralSpin==
TRUE){
2628 for(i=0; i<
X->NTransfer; i++){
2629 isite1 =
X->GeneralTransfer[i][0];
2630 isigma1=
X->GeneralTransfer[i][1];
2631 isite2 =
X->GeneralTransfer[i][2];
2632 isigma2=
X->GeneralTransfer[i][3];
2633 if(isigma1 >
X->LocSpn[isite1] || isigma2 >
X->LocSpn[isite2]){
2657 if(
X->iFlgSzConserved==
TRUE &&
X->iFlgGeneralSpin==
FALSE){
2658 int tmp_Nup=
X->NLocSpn+
X->NCond+
X->Total2Sz;
2659 int tmp_Ndown=
X->NLocSpn+
X->NCond-
X->Total2Sz;
2660 if(tmp_Nup%2 != 0 && tmp_Ndown%2 !=0){
2661 printf(
"Nup=%d, Ndown=%d\n",
X->Nup,
X->Ndown);
2662 fprintf(
stdoutMPI,
"2Sz is incorrect.\n");
2682 const char* cKeyWord
2687 char ctmp_small[256]={0};
2688 char cKW_small[256]={0};
2691 strncpy(cKW_small, cKeyWord, n);
2694 cKW_small[i]=tolower(cKW_small[i]);
2697 strncpy(ctmp_small, ctmp, n);
2699 ctmp_small[i]=tolower(ctmp_small[i]);
2701 if(n<strlen(cKW_small)) n=strlen(cKW_small);
2702 return(strncmp(ctmp_small, cKW_small, n));
2745 int iFlgGeneralSpin,
2747 int isite1,
int isigma1,
2748 int isite2,
int isigma2,
2749 int isite3,
int isigma3,
2750 int isite4,
int isigma4
2752 if(
CheckQuadSite(isite1, isite2, isite3, isite4, Nsite) !=0){
2753 fprintf(stderr,
"%s",
"Error: Site index of InterAll is incorrect.\n");
2757 if(iCalcModel == Spin || iCalcModel ==SpinGC){
2759 fprintf(stderr,
"%s",
"Error: Spin index of InterAll is incorrect.\n");
2763 else if(iCalcModel == SpinlessFermion || iCalcModel==SpinlessFermionGC){
2764 if(isigma1 !=0 || isigma2 != 0 || isigma3 != 0 || isigma4 !=0){
2765 fprintf(stderr,
"%s",
"Error: Spin index of InterAll is incorrect.\n");
2769 else if(iCalcModel == Kondo){
2775 if(iFlgGeneralSpin ==
TRUE) {
2802 int **iInterAllInfo,
2803 double complex *cInterAllValue,
2804 int isite1,
int isigma1,
2805 int isite2,
int isigma2,
2806 int isite3,
int isigma3,
2807 int isite4,
int isigma4,
2808 double dvalue_re,
double dvalue_im
2811 int iflg_interall = 0;
2813 for (i = 0; i < *icnt_interall; i++) {
2814 if (isite1 == iInterAllInfo[i][0] && isite2 == iInterAllInfo[i][2] &&
2815 isite3 == iInterAllInfo[i][4] && isite4 == iInterAllInfo[i][6] &&
2816 isigma1 == iInterAllInfo[i][1] && isigma2 == iInterAllInfo[i][3] &&
2817 isigma3 == iInterAllInfo[i][5] && isigma4 == iInterAllInfo[i][7]) {
2818 cInterAllValue[i] += dvalue_re + dvalue_im * I;
2825 if (iflg_interall == 0) {
2826 iInterAllInfo[*icnt_interall][0] = isite1;
2827 iInterAllInfo[*icnt_interall][1] = isigma1;
2828 iInterAllInfo[*icnt_interall][2] = isite2;
2829 iInterAllInfo[*icnt_interall][3] = isigma2;
2830 iInterAllInfo[*icnt_interall][4] = isite3;
2831 iInterAllInfo[*icnt_interall][5] = isigma3;
2832 iInterAllInfo[*icnt_interall][6] = isite4;
2833 iInterAllInfo[*icnt_interall][7] = isigma4;
2834 cInterAllValue[*icnt_interall] = dvalue_re + I * dvalue_im;
2837 if (isite1 == isite2 && isite3 == isite4 &&
2838 isigma1 == isigma2 && isigma3 == isigma4) {
2840 }
else if (isite1 == isite4 && isite2 == isite3 &&
2841 isigma1 == isigma4 && isigma2 == isigma3) {
2861 const int NTETransfer,
2867 int isigma1, isigma2;
2868 int itmpsite1, itmpsite2;
2869 int itmpsigma1, itmpsigma2;
2870 int itmperrsite1, itmperrsite2;
2871 int itmperrsigma1, itmperrsigma2;
2872 double complex dcerrTrans;
2873 int icheckHermiteCount;
2876 double complex ddiff_trans;
2877 unsigned int itmpIdx, icntHermite, icntchemi;
2881 int** tmp_TETransfer = (
int**)malloc((NTETransfer)*
sizeof(
int*));
2882 for(i =0; i<NTETransfer; i++ ){
2883 tmp_TETransfer[i] = (
int*)malloc((4*
sizeof(
int)));
2885 double complex*tmp_paraTETransfer = (
double complex*)malloc((NTETransfer)*
sizeof(
double complex));
2888 for(i=0; i<NTETransfer; i++){
2890 tmp_TETransfer[i][j]=
X->TETransfer[idx][i][j];
2891 X->TETransfer[idx][i][j]=0;
2893 tmp_paraTETransfer[i] =
X->ParaTETransfer[idx][i];
2894 X->ParaTETransfer[idx][i]=0.0;
2897 for(i=0; i<NTETransfer; i++){
2898 isite1=tmp_TETransfer[i][0];
2899 isigma1=tmp_TETransfer[i][1];
2900 isite2=tmp_TETransfer[i][2];
2901 isigma2=tmp_TETransfer[i][3];
2902 icheckHermiteCount=
FALSE;
2903 for(j=0; j<NTETransfer; j++){
2904 itmpsite1=tmp_TETransfer[j][0];
2905 itmpsigma1=tmp_TETransfer[j][1];
2906 itmpsite2=tmp_TETransfer[j][2];
2907 itmpsigma2=tmp_TETransfer[j][3];
2908 if(isite1 == itmpsite2 && isite2 == itmpsite1){
2909 if(isigma1 == itmpsigma2 && isigma2 == itmpsigma1){
2911 ddiff_trans = tmp_paraTETransfer[i]-conj(tmp_paraTETransfer[j]);
2913 itmperrsite1=itmpsite1;
2914 itmperrsigma1=itmpsigma1;
2915 itmperrsite2=itmpsite2;
2916 itmperrsigma2=itmpsigma2;
2917 dcerrTrans=tmp_paraTETransfer[j];
2919 fprintf(
stdoutMPI,
cErrNonHermiteTrans, itmperrsite1, itmperrsigma1, itmperrsite2, itmperrsigma2, creal(dcerrTrans), cimag(dcerrTrans));
2923 if (icheckHermiteCount ==
FALSE) {
2925 if(2*icntHermite >= NTETransfer){
2926 fprintf(stderr,
"Elements of Transfers are incorrect.\n");
2929 if(isite1 !=isite2 || isigma1 !=isigma2){
2930 for(itmpIdx=0; itmpIdx<4; itmpIdx++){
2931 X->TETransfer[idx][2*icntHermite][itmpIdx]=tmp_TETransfer[i][itmpIdx];
2932 X->TETransfer[idx][2*icntHermite+1][itmpIdx]=tmp_TETransfer[j][itmpIdx];
2934 X->ParaTETransfer[idx][2*icntHermite]=tmp_paraTETransfer[i];
2935 X->ParaTETransfer[idx][2*icntHermite+1]=tmp_paraTETransfer[j];
2939 X->TETransferDiagonal[idx][icntchemi][0] = tmp_TETransfer[i][0];
2940 X->TETransferDiagonal[idx][icntchemi][1] = tmp_TETransfer[i][1];
2941 X->ParaTETransferDiagonal[idx][icntchemi] = creal(tmp_paraTETransfer[i]);
2945 icheckHermiteCount =
TRUE;
2953 if(icheckHermiteCount ==
FALSE){
2965 X->NTETransfer[idx]=2*icntHermite;
2966 X->NTETransferDiagonal[idx]=icntchemi;
2968 free(tmp_TETransfer);
2969 free(tmp_paraTETransfer);
void exitMPI(int errorcode)
MPI Abortation wrapper.
int CheckFormatForKondoInt(const int isite1, const int isite2, const int isite3, const int isite4, int *iLocInfo)
function of checking format of Kondo interactions
char * cErrIncorrectFormatForKondoTrans
char * cErrIncorrectSpinIndexForInter
int CheckInterAllHermite(int **InterAll, double complex *ParaInterAll, int **InterAllOffDiagonal, double complex *ParaInterAllOffDiagonal, const int NInterAllOffDiagonal, const int iCalcModel)
function of checking hermite conditions about interall interactions
int JudgeDefType(const int argc, char *argv[], int *mode)
function of judging a type of define files.
void SetConvergenceFactor(struct DefineList *X)
function to set convergence factors
char * cErrReadDefFile
Error Message in readdef.c.
int GetKWWithIdx(char *ctmpLine, char *ctmp, int *itmp)
Function of Getting keyword and it's variable from characters.
int GetFileName(const char *cFileListNameFile, char cFileNameList[][D_CharTmpReadDef])
Function of Fitting FileName.
void InitializeInteractionNum(struct DefineList *X)
function of initializing interactions
int CheckLocSpin(struct DefineList *X)
function of checking indexies of localized spin
int CheckInterAllCondition(int iCalcModel, int Nsite, int iFlgGeneralSpin, int *iLocSpin, int isite1, int isigma1, int isite2, int isigma2, int isite3, int isigma3, int isite4, int isigma4)
Check InterAll condition.
long unsigned int num_pivot
int ReadDefFileIdxPara(struct DefineList *X, struct BoostList *xBoost)
function of reading def files to get keyword index
int ReadDefFileError(const char *defname)
Error Function of reading def files.
char * cErrIncorrectFormatInter
int ReadDefFileNInt(char *xNameListFile, struct DefineList *X, struct BoostList *xBoost)
Function of reading information about "ModPara" file and total number of parameters from other def fi...
int ValidateValue(const int icheckValue, const int ilowestValue, const int iHighestValue)
Function of Validating value.
int InputInterAllInfo(int *icnt_interall, int **iInterAllInfo, double complex *cInterAllValue, int isite1, int isigma1, int isite2, int isigma2, int isite3, int isigma3, int isite4, int isigma4, double re_value, double im_value)
Input InterAll Interactions (Operators of the same kinds are grouped together).
int CheckKW(const char *cKW, char cKWList[][D_CharTmpReadDef], int iSizeOfKWidx, int *iKWidx)
Function of Checking keyword in NameList file.
static char(* cFileNameListFile)[D_CharTmpReadDef]
int CheckQuadSite(const int iSite1, const int iSite2, const int iSite3, const int iSite4, const int iMaxNum)
Check Site Number for a quad -> (siteA, siteB, siteC, siteD).
char * cWarningIncorrectFormatForSpin
int CheckTransferHermite(struct DefineList *X)
Check Hermite for Transfer integrals.
int CheckFormatForSpinInt(const int site1, const int site2, const int site3, const int site4)
function of checking format of spin interactions
int CheckSpinIndexForTrans(struct DefineList *X)
function of checking spin index for transfers
int CheckWords(const char *ctmp, const char *cKeyWord)
function of checking whether ctmp is same as cKeyWord or not
double complex *** arrayJ
char * cErrNonConservedInterAll
int ReadcalcmodFile(const char *defname, struct DefineList *X)
Function of Reading calcmod file.
char * cErrOutputHamForFullDiag
char * cErrIncorrectFormatForKondoInt
char * cErrNonHermiteInterAll
char * cErrNonHermiteTrans
long unsigned int ishift_nspin
char * cErrIncorrectSpinIndexForTrans
int CheckTETransferHermite(struct DefineList *X, const int NTETrans, const int idx)
Check Hermite for TETransfer integrals.
char * cWarningIncorrectFormatForSpin2
char * cErrInputOutputHam
int GetDiagonalInterAll(int **InterAll, complex double *ParaInterAll, const int NInterAll, int **InterAllDiagonal, double *ParaInterAllDiagonal, int **InterAllOffDiagonal, complex double *ParaInterAllOffDiagonal, int *Chemi, int *SpinChemi, double *ParaChemi, unsigned int *NChemi, const int iCalcModel)
function of getting diagonal components
char * cErrNonHermiteInterAllForAll
char * cErrNonHermiteTransForAll
int CheckSite(const int iSite, const int iMaxNum)
Check Site Number.
static char cKWListOfFileNameList[][D_CharTmpReadDef]
int CheckGeneralSpinIndexForInterAll(const int isite1, const int isigma1, const int isite2, const int isigma2, const int isite3, const int isigma3, const int isite4, const int isigma4, int *iLocInfo)
function of checking spin index for all interactions
int flgBoost
Flag whether use CMA algorithm.
void ResetInteractionNum(struct DefineList *X)
function of resetting number of interactions
const char * cReadFileNamelist
int GetFileNameByKW(int iKWidx, char **FileName)
function of getting file name labeled by the keyword
int CheckPairSite(const int iSite1, const int iSite2, const int iMaxNum)
Check Site Number for a pair -> (siteA, siteB).
char * fgetsMPI(char *InputString, int maxcount, FILE *fp)
MPI file I/O (get a line, fgets) wrapper. Only the root node (myrank = 0) reads and broadcast string...
FILE * fopenMPI(const char *FileName, const char *mode)
MPI file I/O (open) wrapper. Only the root node (myrank = 0) should be open/read/write (small) parame...
int CheckTotal2Sz(struct DefineList *X)
function of checking an input data of total2Sz
Definision of system (Hamiltonian) etc.
FILE * stdoutMPI
File pointer to the standard output defined in InitializeMPI()