1.7. Use eigenvectors¶
In this tutorial, we will study how to read the eigenvectors.
In the standard mode, setting EigenVecIO = "Out"
makes HPhi write the calculated eigenvectors as output/zvo_eigenvec_[index]_rank_[rank].dat
, where [index]
is the index of the states (e.g., the ground state has [index] = 0
) and [rank]
is the rank of the process.
In the MPI parallelization with \(N_{\text{para}}\) processes, HPhi splits the whole Hilbert space into the \(N_{\text{para}}\) blocks and each process treats one of them.
The file format is described in the reference manual .
For example, the following python function (samples/tutorial-1.7/read_gs.py
) reads the vector:
def read_gs(*, index=0, rank=0):
import numpy as np
from os.path import join
from struct import unpack
filename = join("output",
"zvo_eigenvec_{}_rank_{}.dat".format(index,
rank))
with open(filename, "rb") as f:
f.read(4)
nelems = unpack("L", f.read(8))[0]
ret = np.zeros(nelems, dtype=np.complex128)
f.read(16)
for i in range(nelems):
re = unpack("d", f.read(8))[0]
im = unpack("d", f.read(8))[0]
ret[i] = complex(re, im)
return ret
1.7.1. Exercise¶
Check the orthogonality of the eigenvectors calculated by the LOBCG method by calculating the norm and the inner product of some of the eigenvectors.
Hint : In the standard mode, the exct
keyword controls the number of eigenvectors to be calculated.
Solution : See samples/tutorial-1.7/solution.py
.
This script firstly generates the input file for calculating the ground state and the first excited state of the \(L=8\) AFH chain with the LOBCG method, next invokes HPhi
, then reads the vectors, and finally calculates the norms and the inner product.