10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-23 04:43:45 +01:00

Added bug fixes for open-shell.

This commit is contained in:
v1j4y 2022-06-06 17:27:57 +02:00
parent c0178a11ea
commit abe662757e
2 changed files with 47 additions and 25 deletions

View File

@ -68,10 +68,16 @@ void getBFIndexList(int NSOMO, int *BF1, int *IdxListBF1){
break; break;
} }
} }
BFcopy[Iidx] = -1; if(countN1 <= 0){
BFcopy[Jidx] = -1; BFcopy[Iidx] = -1;
IdxListBF1[Jidx] = Iidx; IdxListBF1[Iidx] = Iidx;
IdxListBF1[Iidx] = Jidx; }
else{
BFcopy[Iidx] = -1;
BFcopy[Jidx] = -1;
IdxListBF1[Jidx] = Iidx;
IdxListBF1[Iidx] = Jidx;
}
} }
} }
@ -328,10 +334,21 @@ void convertCSFtoDetBasis(int64_t Isomo, int MS, int rowsmax, int colsmax, doubl
Get Overlap Get Overlap
************************************/ ************************************/
// Fill matrix // Fill matrix
int rowsbftodetI, colsbftodetI;
/***********************************
Get BFtoDeterminant Matrix
************************************/
printf("In convertcsftodet\n");
convertBFtoDetBasis(Isomo, MS, &bftodetmatrixI, &rowsbftodetI, &colsbftodetI);
int rowsI = 0; int rowsI = 0;
int colsI = 0; int colsI = 0;
getOverlapMatrix(Isomo, MS, &overlapMatrixI, &rowsI, &colsI, &NSOMO); //getOverlapMatrix(Isomo, MS, &overlapMatrixI, &rowsI, &colsI, &NSOMO);
getOverlapMatrix_withDet(bftodetmatrixI, rowsbftodetI, colsbftodetI, Isomo, MS, &overlapMatrixI, &rowsI, &colsI, &NSOMO);
/*********************************** /***********************************
@ -342,14 +359,6 @@ void convertCSFtoDetBasis(int64_t Isomo, int MS, int rowsmax, int colsmax, doubl
gramSchmidt(overlapMatrixI, rowsI, colsI, orthoMatrixI); gramSchmidt(overlapMatrixI, rowsI, colsI, orthoMatrixI);
/***********************************
Get BFtoDeterminant Matrix
************************************/
int rowsbftodetI, colsbftodetI;
convertBFtoDetBasis(Isomo, MS, &bftodetmatrixI, &rowsbftodetI, &colsbftodetI);
/*********************************** /***********************************
Get Final CSF to Det Matrix Get Final CSF to Det Matrix
************************************/ ************************************/
@ -1297,12 +1306,16 @@ void getbftodetfunction(Tree *dettree, int NSOMO, int MS, int *BF1, double *rowv
double fac = 1.0; double fac = 1.0;
for(int i = 0; i < NSOMO; i++) for(int i = 0; i < NSOMO; i++)
donepq[i] = 0.0; donepq[i] = 0.0;
for(int i=0;i<npairs;++i){
for(int j=0;j<NSOMO;++j)
detslist[i*NSOMO + j]=0;
}
for(int i = 0; i < NSOMO; i++){ for(int i = 0; i < NSOMO; i++){
idxp = BF1[i]; idxp = BF1[i];
idxq = BF1[idxp]; idxq = BF1[idxp];
// Do one pair only once // Do one pair only once
if(donepq[idxp] > 0.0 || donepq[idxq] > 0.0) continue; if(donepq[idxp] > 0.0 || donepq[idxq] > 0.0 || idxp == idxq) continue;
fac *= 2.0; fac *= 2.0;
donepq[idxp] = 1.0; donepq[idxp] = 1.0;
donepq[idxq] = 1.0; donepq[idxq] = 1.0;
@ -1425,6 +1438,11 @@ void convertBFtoDetBasis(int64_t Isomo, int MS, double **bftodetmatrixptr, int *
for(int k=0;k<ndets;k++) for(int k=0;k<ndets;k++)
rowvec[k]=0.0; rowvec[k]=0.0;
for(int j=0;j<NSOMO;++j){
BF1[j]=0;
IdxListBF1[j]=0;
}
} }
// Garbage collection // Garbage collection

View File

@ -17,27 +17,31 @@ void buildTree(Tree *bftree,
if(isomo > NSOMOMax || icpl < 0 || izeros > zeromax ) return; if(isomo > NSOMOMax || icpl < 0 || izeros > zeromax ) return;
// If we find a valid BF assign its address // If we find a valid BF assign its address
if(isomo == NSOMOMax){ if(isomo == NSOMOMax && icpl == MSmax){
(*inode)->addr = bftree->rootNode->addr; (*inode)->addr = bftree->rootNode->addr;
bftree->rootNode->addr += 1; bftree->rootNode->addr += 1;
return; return;
} }
// Call 0 branch // Call 0 branch
if(((*inode)->C0) == NULL && izeros+1 <= zeromax){ if(izeros+1 <= zeromax){
((*inode)->C0) = malloc(sizeof(Node)); if(((*inode)->C0) == NULL){
(*(*inode)->C0) = (Node){ .C0 = NULL, .C1 = NULL, .PREV = *inode, .addr = -1, .cpl = 0, .iSOMO = isomo }; ((*inode)->C0) = malloc(sizeof(Node));
buildTree(bftree, &(*inode)->C0, isomo+1, izeros+1, icpl+1, NSOMOMax, MSmax); (*(*inode)->C0) = (Node){ .C0 = NULL, .C1 = NULL, .PREV = *inode, .addr = -1, .cpl = 0, .iSOMO = isomo };
buildTree(bftree, &(*inode)->C0, isomo+1, izeros+1, icpl+1, NSOMOMax, MSmax);
}
else buildTree(bftree, &(*inode)->C0, isomo+1, izeros+1, icpl+1, NSOMOMax, MSmax);
} }
else buildTree(bftree, &(*inode)->C0, isomo+1, izeros+1, icpl+1, NSOMOMax, MSmax);
// Call 1 branch // Call 1 branch
if(((*inode)->C1) == NULL && icpl-1 >= 0){ if(icpl-1 >=0){
((*inode)->C1) = malloc(sizeof(Node)); if(((*inode)->C1) == NULL){
(*(*inode)->C1) = (Node){ .C0 = NULL, .C1 = NULL, .PREV = *inode, .addr = -1, .cpl = 1, .iSOMO = isomo }; ((*inode)->C1) = malloc(sizeof(Node));
buildTree(bftree, &(*inode)->C1, isomo+1, izeros+0, icpl-1, NSOMOMax, MSmax); (*(*inode)->C1) = (Node){ .C0 = NULL, .C1 = NULL, .PREV = *inode, .addr = -1, .cpl = 1, .iSOMO = isomo };
buildTree(bftree, &(*inode)->C1, isomo+1, izeros+0, icpl-1, NSOMOMax, MSmax);
}
else buildTree(bftree, &(*inode)->C1, isomo+1, izeros+0, icpl-1, NSOMOMax, MSmax);
} }
else buildTree(bftree, &(*inode)->C1, isomo+1, izeros+0, icpl-1, NSOMOMax, MSmax);
return; return;
} }