diff --git a/kwant/solvers/sparse.py b/kwant/solvers/sparse.py index 559d17c958ea16537086be8f795e5aa055245b9e..c0568011ffe7a6d04d8ff8c5ae44ba6ac66e1fdb 100644 --- a/kwant/solvers/sparse.py +++ b/kwant/solvers/sparse.py @@ -8,6 +8,20 @@ import scipy.sparse as sp import scipy.sparse.linalg as spl from kwant import physics, system +# This patches a memory leak in scipy: +# http://projects.scipy.org/scipy/ticket/1597 +# +# TODO: Remove this code once it is likely that the official bug fix has +# reached all of our users. +def del_for_umfpackcontext(self): + self.free() +try: + if not hasattr(spl.dsolve.umfpack.UmfpackContext, '__del__'): + spl.dsolve.umfpack.UmfpackContext.__del__ = del_for_umfpackcontext +except: + pass +del del_for_umfpackcontext + def make_linear_sys(sys, out_leads, in_leads, energy=0, force_realspace=False): """