Although the O() methods can treat large-scale systems consisting of more than 1000 atoms, a serious problem is that information about wave functions is lost in the O() methods implemented in OpenMX. A simple way of obtaining wave functions and the corresponding eigenvalues for the large-scale systems is firstly to employ the O() methods to obtain a self-consistent charge density, and then is to just once diagonalize using the conventional diagonalization method under the self-consistent charge density to obtain full wave functions. As an illustration of this procedure, we show a large-scale calculation of a multiply connected carbon nanotube (MCCN) consisting of 564 carbon atoms. First, the SCF calculation of a MCCN was performed using the O() Krylov subspace method and 16 CPU cores of a 2.6 GHz Xeon, where C5.0-s2p1 (basis function), 130 Ryd (scf.energycutoff), 1.0e-7 (scf.criterion), 6.5 Å (orderN.HoppingRanges), 'orderN.KrylovH.order=400', and RMM-DIISK (mixing scheme) were used. The input file is 'MCCN.dat' in the directory 'work'. Figure 26 shows the norm of residual charge density in Fourier space as a function of SCF steps. We see that 56 SCF steps is enough to obtain convergent charge density for the system, where the computational time was about seven minutes. After that, the following keywords were set in
scf.maxIter 1 scf.EigenvalueSolver Band scf.Kgrid 1 1 1 scf.restart on MO.fileout on num.HOMOs 2 num.LUMOs 2 MO.Nkpoint 1 <MO.kpoint 0.0 0.0 0.0 MO.kpoint>
|
Then we calculated the same system in order to obtain wave functions using 16 CPU cores of a 2.6 GHz Xeon machine, where the computational time was about 2 minutes. Figure 27 shows isosurface maps of the HOMO and LUMO (-point) of MCCN calculated by the above procedure. Although the difference between the O() method and the conventional diagonalization scheme in the computational time is not significant in this example, the procedure will be useful for larger system including more than several thousands atoms.
|