init_cc_amplitudes Subroutine

public subroutine init_cc_amplitudes()

Arguments

None

Contents

Source Code


Source Code

    subroutine init_cc_amplitudes

        integer :: n_excits(cc_order)

        root_print "------ test on the cc ------- "

        n_excits = calc_number_of_excitations(nOccAlpha, nOccBeta, cc_order, &
                                              nbasis / 2)

        root_print "total number of possible excitations: "
        root_print n_excits

        call setup_ind_matrix_singles()
        call setup_ind_matrix_doubles()

        ! should i do this on each processors independently and then gather
        ! or should i gather first?
        ! if i want to calculate the T_2^2 i would need all of the
        ! doubles i guess.. so i can fill them independently, but should
        ! then communicat..
        call fill_cc_amplitudes(n_excits)
        ! to calculate all the possible cc-amps i need to communicate the
        ! operators.
        call communicate_cc_amps(n_excits)
        call calc_n_triples()
        if (t_store_hash_quadrupels) then
            quad_hash_size = n_doubles * (n_doubles - 1) / 2
            call init_cc_hash(quad_hash, quad_hash_size)
        end if
        call calc_n_quads()
        call calc_cc_quad_norm(quad_hash, quad_hash_size)

        print *, "number of hash clashes: ", n_clashes, "on proc: ", iProcIndex

        ! now i have to gather the information..
        call MPISumAll(n_singles, all_n_singles)
        call MPISumAll(n_doubles, all_n_doubles)
        call MPISumAll(est_triples, all_est_triples)
        ! can it do matrices:
        call MPISumAll(cc_amp_norm, all_cc_amp_norm)

        if (iProcIndex == root) then
            print *, " ---------- Singles -----------------"
            print *, "sampled singles in FCIQMC wavefunction: ", all_n_singles
            print *, "L0 Norm of singles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(0, 1, 1)
            print *, "L1 Norm of singles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(1, 1, 1)
            print *, "L2 Norm of singles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(2, 1, 1)

            print *, "L0 Norm of singles in CC-wavefunction: ", all_cc_amp_norm(0, 1)
            print *, "L1 Norm of singles in CC-wavefunction: ", all_cc_amp_norm(1, 1)
            print *, "L2 Norm of singles in CC-wavefunction: ", all_cc_amp_norm(2, 1)

            print *, ""
            print *, " ------------ Doubles -----------------"
            print *, "sampled doubles in FCIQMC wavefunction: ", all_n_doubles
            print *, "L0 Norm of doubles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(0, 2, 1)
            print *, "L1 Norm of doubles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(1, 2, 1)
            print *, "L2 Norm of doubles in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(2, 2, 1)

            print *, "L0 Norm of doubles in CC-wavefunction: ", all_cc_amp_norm(0, 2)
            print *, "L1 Norm of doubles in CC-wavefunction: ", all_cc_amp_norm(1, 2)
            print *, "L2 Norm of doubles in CC-wavefunction: ", all_cc_amp_norm(2, 2)

            print *, ""
            print *, " ------------ Triples ------------------ "
            print *, "est. triples from T1^2 and T1*T2 ", all_est_triples
            print *, "L0 Norm of triples in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(0, 3, 1)
            print *, "L1 Norm of triples in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(1, 3, 1)
            print *, "L2 Norm of triples in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(2, 3, 1)

            print *, "L0 Norm of triples in CC-wavefunction: ", all_cc_amp_norm(0, 3)
            print *, "L1 Norm of triples in CC-wavefunction: ", all_cc_amp_norm(1, 3)
            print *, "L2 Norm of triples in CC-wavefunction: ", all_cc_amp_norm(2, 3)

            print *, ""
            print *, " ----------- Quadruples ----------------- "
            print *, "L0 Norm of quadrupels in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(0, 4, 1)
            print *, "L1 Norm of quadrupels in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(1, 4, 1)
            print *, "L2 Norm of quadrupels in FCIQMC wavefunction: ", AllEXLEVEL_WNorm(2, 4, 1)

            print *, "estimated quadrupels from T2^2: "
            print *, "L0 Norm of quadrupels in CC-wavefunction: ", &
                all_cc_amp_norm(0, 4)
            print *, "L1 Norm of quadrupels in CC-wavefunction: ", &
                all_cc_amp_norm(1, 4)
            print *, "L2 Norm of quadrupels in CC-wavefunction: ", &
                all_cc_amp_norm(2, 4)

            print *, ""
        end if

    end subroutine init_cc_amplitudes