initSltCndPtr Subroutine

public subroutine initSltCndPtr()

Uses

Arguments

None

Contents

Source Code


Source Code

    subroutine initSltCndPtr()
        use SystemData, only: tSmallBasisForThreeBody
        character(*), parameter :: this_routine = 'initSltCndPtr'

        if (TContact) then

            if (t_mol_3_body &
                .or. t_ueg_3_body .and. nel > 2 .and. tSmallBasisForThreeBody) then
                sltcnd_0 => sltcnd_0_tc_ua
                sltcnd_1 => sltcnd_1_tc_ua
                sltcnd_2 => sltcnd_2_tc_ua
                sltcnd_3 => sltcnd_3_tc_ua
            else
                sltcnd_0 => sltcnd_0_base_ua
                sltcnd_1 => sltcnd_1_base_ua
                sltcnd_2 => sltcnd_2_base_ua
                nI_invariant_sltcnd_3 => nI_invariant_sltcnd_3_base
                sltcnd_3 => sltcnd_3_use_nI_invariant
            end if
        else
            ! six-index integrals are only used for three and more
            ! electrons
            if (t_mol_3_body .or. t_ueg_3_body .and. nel >= 2) then
                sltcnd_0 => sltcnd_0_tc
                sltcnd_1 => sltcnd_1_tc
                sltcnd_2 => sltcnd_2_tc
                sltcnd_3 => sltcnd_3_tc
            else if (allocated(SD_spin_purification)) then
                if (SD_spin_purification == possible_purification_methods%TRUNCATED_LADDER) then
                    sltcnd_0 => sltcnd_0_base
                else if (SD_spin_purification == possible_purification_methods%ONLY_LADDER) then
                    sltcnd_0 => sltcnd_0_purify_spin_only_ladder
                else if (SD_spin_purification == possible_purification_methods%FULL_S2) then
                    sltcnd_0 => sltcnd_0_purify_spin_full_s2
                else
                    call stop_all(this_routine, 'Invalid options for SD_spin_purification')
                end if

                sltcnd_1 => sltcnd_1_base
                nI_invariant_sltcnd_2 => nI_invariant_sltcnd_2_purify_spin
                sltcnd_2 => sltcnd_2_use_nI_invariant
                nI_invariant_sltcnd_3 => nI_invariant_sltcnd_3_base
                sltcnd_3 => sltcnd_3_use_nI_invariant

            else
                sltcnd_0 => sltcnd_0_base
                    diagH_after_exc_1 => diagH_after_exc_1_base
                    diagH_after_exc_2 => diagH_after_exc_2_base
                    diagH_after_exc_3 => diagH_after_exc_3_base
                sltcnd_1 => sltcnd_1_base
                nI_invariant_sltcnd_2 => nI_invariant_sltcnd_2_base
                sltcnd_2 => sltcnd_2_use_nI_invariant
                nI_invariant_sltcnd_3 => nI_invariant_sltcnd_3_base
                sltcnd_3 => sltcnd_3_use_nI_invariant
            end if

        end if

        if (t_calc_adjoint) then ! invert all matrix element calls
                nonadjoint_sltcnd_0 => sltcnd_0
                sltcnd_0 => adjoint_sltcnd_0
                nonadjoint_sltcnd_1 => sltcnd_1
                sltcnd_1 => adjoint_sltcnd_1
                nonadjoint_sltcnd_2 => sltcnd_2
                sltcnd_2 => adjoint_sltcnd_2
                nonadjoint_sltcnd_3 => sltcnd_3
                sltcnd_3 => adjoint_sltcnd_3
        end if
    end subroutine initSltCndPtr