init_guga_orbital_pickers Subroutine

private subroutine init_guga_orbital_pickers()

Arguments

None

Contents


Source Code

    subroutine init_guga_orbital_pickers()
        character(*), parameter :: this_routine = "init_guga_orbital_pickers"
        ! this routine, depending on the input set the orbital pickers
        ! to differentiate between the different excitation generators


        if (tGen_sym_guga_ueg) then
            calc_orbital_pgen_contrib_start => calc_orbital_pgen_contrib_start_def
            calc_orbital_pgen_contrib_end => calc_orbital_pgen_contrib_end_def
            if (.not. (treal .or. t_new_real_space_hubbard)) then
                pickOrbitals_double => pickOrbs_sym_uniform_ueg_double
                calc_orbital_pgen_contr => calc_orbital_pgen_contr_ueg
            else
                pickOrbitals_single => pickOrbs_real_hubbard_single
            end if

        else if (tGen_sym_guga_mol) then

            pickOrbitals_single => pickOrbs_sym_uniform_mol_single    ! PickOrbitals_t
            pickOrbitals_double => pickOrbs_sym_uniform_mol_double    ! PickOrbitals_t                          in beiden Fällen
            calc_orbital_pgen_contr => calc_orbital_pgen_contr_mol    ! calc_orbital_pgen_contr_t               nur für doubles
            calc_orbital_pgen_contrib_start => calc_orbital_pgen_contrib_start_def  ! CalcOrbitalPgenContr_t    nur für doubles
            calc_orbital_pgen_contrib_end => calc_orbital_pgen_contrib_end_def  ! CalcOrbitalPgenContr_t        nur für doubles

        else if (t_guga_pchb) then

            if (t_guga_pchb_weighted_singles) then
                pickOrbitals_single => pickOrbs_sym_uniform_mol_single
            else
                pickOrbitals_single => pick_orbitals_pure_uniform_singles
            end if

            pickOrbitals_double => pick_orbitals_double_pchb
            ! rest has to be determined what needs a change..
            calc_orbital_pgen_contr => calc_orbital_pgen_contr_pchb
            calc_orbital_pgen_contrib_start => calc_orbital_pgen_contr_start_pchb
            calc_orbital_pgen_contrib_end => calc_orbital_pgen_contr_end_pchb

        else if (t_heisenberg_model) then
            pickOrbitals_double => pick_orbitals_guga_heisenberg
            calc_orbital_pgen_contr => calc_orbital_pgen_contr_heisenberg

            ! No single excitations + pure exchange doubles

        else if (t_tJ_model) then
            pickOrbitals_single => pick_orbitals_guga_tJ
            pickOrbitals_double => pick_orbitals_guga_heisenberg
            calc_orbital_pgen_contr => calc_orbital_pgen_contr_heisenberg

            ! singles + pure exchange doubles

        else ! standardly also use nosymmetry version
            root_print "please specify guga excitation generator explicitly!"
            root_print "options are: "
            root_print "'mol-guga-weighted' ... standard for molecular systems"
            root_print "'ueg-guga' ... standard for UEG and Hubbard/Heisenberg/tJ models"
            root_print "'guga-pchb' ... GUGA version of PCHB excit. gen. for molecular systems"
            call Stop_All(this_routine, &
                "please specify guga excitation generator explicitly!")

        end if

    end subroutine init_guga_orbital_pickers