Stable Inversions
Overview
In DQMC, to obtain the equal-times Green's function we commonly perform the inversion
Similarily, we compute
for the time-displaced Green's function. The following methods are exported to facilitate these tasks.
inv_one_plus
,inv_one_plus!
inv_sum
,inv_sum!
When function names are suffixed with _loh
, i.e. inv_one_plus_loh
, a more sophisticated method is used for numerical stabilization (see the paper linked above for more details).
Details
inv_one_plus
with $U_r = (xX)^{-1}$, $D_r = d^{-1}$, $X_r = (Uu)^{-1}$.
inv_one_plus(::UDT, ::UDT)
with $U=U_Lu$, $D=d$, and $T=tU_R^\dagger$. The remaining computation is then performed as in the single argument version of inv_one_plus
above.
inv_one_plus(::SVD, ::SVD)
with $U=U_Lu$, $D=d$, and $V=v V_R$. The remaining computation is then performed as in the single argument version of inv_one_plus
above.
inv_one_plus_loh
with $D_m = \min(D, 1)$, $D_p = \max(D, 1)$, $U_r = X^{-1}u$, $D_r = d$, and $X_r = x$. [Loh2005, Loh1989]
inv_sum
where $U_r = (x X_R)^{-1}$, $D_r = d^{-1}$, and $X_r = (U_L u)^{-1}$.
inv_sum_loh
with $D_{Rm} = \min(D_R, 1)$, $D_{Rp} = \max(D_R, 1)$, $D_{Lm} = \min(D_L, 1)$, $D_{Lp} = \max(D_L, 1)$, $U_r = X_R^{-1} u$, $D_r = d$, and $X_r = x U_L^\dagger$. [Loh2005]
Resources
[Loh2005]
@article{Loh2005,
author = {Loh, E. Y. and Gubernatis, J. E. and Scalettar, R. T. and White, S. R. and Scalapino, D. J. and Sugar, R. L.},
title = {{Numerical Stability and the Sign Problem in the Determinant Quantum Monte Carlo Method}},
journal = {International Journal of Modern Physics C},
volume = {16},
number = {08},
pages = {1319--1327},
month = {aug},
year = {2005}
issn = {0129-1831},
doi = {10.1142/S0129183105007911},
url = {http://www.worldscientific.com/doi/abs/10.1142/S0129183105007911},
}
[Loh1989]
@incollection{Loh1989,
author = {Loh, E. Y. and Gubernatis, J. E. and Scalettar, R. T. and Sugar, R. L. and White, S. R.},
title = {{Stable Matrix-Multiplication Algorithms for Low-Temperature Numerical Simulations of Fermions}},
year = {1989}
pages = {55--60},
doi = {10.1007/978-1-4613-0565-1_8},
url = {http://link.springer.com/10.1007/978-1-4613-0565-1{\_}8},
}