From c797967170c76b8366f6cd357c51f5cdb1777d30 Mon Sep 17 00:00:00 2001 From: Pierre-Francois Loos Date: Mon, 13 Mar 2023 10:14:26 +0100 Subject: [PATCH] optimize memory in diagonalizations --- src/utils/wrap_lapack.f90 | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/utils/wrap_lapack.f90 b/src/utils/wrap_lapack.f90 index 9df820d..7aa870c 100644 --- a/src/utils/wrap_lapack.f90 +++ b/src/utils/wrap_lapack.f90 @@ -19,8 +19,15 @@ subroutine diagonalize_general_matrix(N,A,WR,VR) ! Memory allocation - lwork = 4*N - allocate(WI(N),VL(N,N),work(lwork)) + allocate(work(1),WI(N),VL(N,N)) + + lwork = -1 + call dgeev('V','V',N,A,N,WR,WI,VL,N,VR,N,work,lwork,info) + lwork = int(work(1)) + + deallocate(work) + + allocate(work(lwork)) call dgeev('V','V',N,A,N,WR,WI,VL,N,VR,N,work,lwork,info) @@ -49,8 +56,15 @@ subroutine diagonalize_matrix(N,A,e) ! Memory allocation - allocate(work(3*N)) - lwork = size(work) + allocate(work(1)) + + lwork = -1 + call dsyev('V','U',N,A,N,e,work,lwork,info) + lwork = int(work(1)) + + deallocate(work) + + allocate(work(lwork)) call dsyev('V','U',N,A,N,e,work,lwork,info)