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()