perform_spectral_lanczos Subroutine

public subroutine perform_spectral_lanczos()

Arguments

None

Contents


Source Code

    subroutine perform_spectral_lanczos()

        integer :: i
        ! Data for the testsuite to use.
        real(dp) :: h_sum, spec_low, spec_high

        call init_spectral_lanczos()

        do i = 1, n_lanc_vecs_sl - 1
            call subspace_expansion_lanczos(i, sl_vecs, full_vec_sl, sl_hamil, ndets_sl, disps_sl)
            write(stdout, '(1x,a19,1x,i3)') "Iteration complete:", i
            call neci_flush(stdout)
        end do

        call calc_final_hamil_elem(sl_vecs, full_vec_sl, sl_hamil, ndets_sl, disps_sl)

        h_sum = sum(sl_hamil)

        call subspace_extraction_sl()

        write(stdout, '(1x,a60,/)') "Spectral Lanczos calculation complete. Outputting results..."
        call neci_flush(stdout)

        call output_spectrum(n_lanc_vecs_sl, sl_h_eigv, spec_low, spec_high)

        if (tPrint_sl_eigenvecs) call print_sl_eigenvecs()

        if (iProcIndex == root) call write_spec_lanc_testsuite_data(h_sum, spec_low, spec_high)

        call end_spectral_lanczos()

    end subroutine perform_spectral_lanczos