Skip to content

Commit b2d334e

Browse files
committed
Added minor modification to make Band Lanczos computation of the GF compatible with comlpex wave functions. The normal Lanczos calculation of off-diagonal elements is not appropriate for complex wave functions, though.
1 parent fa2442a commit b2d334e

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

include/macis/gf/gf.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,7 @@ void RunGFCalc(std::vector<std::vector<std::complex<double>>> &GF,
638638
for(int iw = 0; iw < ws.size(); iw++) GF[iw][i * nvecs + i] = tGF[iw];
639639
for(int j = i + 1; j < nvecs; j++) {
640640
// OFF DIAGONAL ELEMENTS
641+
// NOTE: WORKS ONLY FOR REAL-VALUED WAVE FUNCTIONS.
641642
std::cout << "DOING ELEMENT (" << i << ", " << j << ")" << std::endl;
642643
for(size_t iii = 0; iii < nterms; iii++)
643644
twfn(iii) = wfns[i * nterms + iii] + wfns[j * nterms + iii];

src/macis/gf/bandlan.cxx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,32 @@ void BandResolvent(
325325
ofile.close();
326326
}
327327
std::cout << "DONE! COMPUTING RESOLVENT ...";
328+
if( ispart )
329+
{
328330
#pragma omp parallel for
329-
for(int iw = 0; iw < ws.size(); iw++) {
330-
for(int k = 0; k < nvecs; k++) {
331-
for(int l = 0; l < nvecs; l++) {
332-
for(int i_lan = 0; i_lan < nLanIts; i_lan++) {
333-
res[iw][k * nvecs + l] += S[i_lan * nvecs + k] * 1. /
334-
(ws[iw] + eigvals[i_lan]) *
335-
S[i_lan * nvecs + l];
331+
for(int iw = 0; iw < ws.size(); iw++) {
332+
for(int k = 0; k < nvecs; k++) {
333+
for(int l = 0; l < nvecs; l++) {
334+
for(int i_lan = 0; i_lan < nLanIts; i_lan++) {
335+
res[iw][k * nvecs + l] += S[i_lan * nvecs + k] * 1. /
336+
(ws[iw] + eigvals[i_lan]) *
337+
S[i_lan * nvecs + l];
338+
}
339+
}
340+
}
341+
}
342+
}
343+
else
344+
{
345+
#pragma omp parallel for
346+
for(int iw = 0; iw < ws.size(); iw++) {
347+
for(int k = 0; k < nvecs; k++) {
348+
for(int l = 0; l < nvecs; l++) {
349+
for(int i_lan = 0; i_lan < nLanIts; i_lan++) {
350+
res[iw][l * nvecs + k] += S[i_lan * nvecs + k] * 1. /
351+
(ws[iw] + eigvals[i_lan]) *
352+
S[i_lan * nvecs + l];
353+
}
336354
}
337355
}
338356
}

0 commit comments

Comments
 (0)