perform_ftlm Subroutine

public subroutine perform_ftlm()

Arguments

None

Contents

Source Code


Source Code

    subroutine perform_ftlm()

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

        call init_ftlm()

        do i = 1, n_init_vecs_ftlm

            write(stdout, '(1x,a28,1x,i3)') "Starting from initial vector", i
            call neci_flush(stdout)

            ftlm_vecs = 0.0_dp
            ftlm_hamil = 0.0_dp

            call gen_init_vec_ftlm()

            do j = 1, n_lanc_vecs_ftlm - 1
                call subspace_expansion_lanczos(j, ftlm_vecs, full_vec_ftlm, &
                                                ftlm_hamil, ndets_ftlm, disps_ftlm)
                write(stdout, '(1x,a19,1x,i3)') "Iteration complete:", j
                call neci_flush(stdout)
            end do

            call calc_final_hamil_elem(ftlm_vecs, full_vec_ftlm, &
                                       ftlm_hamil, ndets_ftlm, disps_ftlm)

            h_sum = sum(ftlm_hamil)

            call subspace_extraction_ftlm()

            call add_in_contribs_to_energy()

            write(stdout, '(1x,a45,/)') "Calculation complete for this initial vector."
            call neci_flush(stdout)

        end do

        write(stdout, '(1x,a48,/)') "FTLM calculation complete. Outputting results..."
        call neci_flush(stdout)

        call output_ftlm()

        if (iProcIndex == root) call write_ftlm_testsuite_data(h_sum)

        call end_ftlm()

    end subroutine perform_ftlm