init_mol_tc_biases Subroutine

public subroutine init_mol_tc_biases()

Uses

Arguments

None

Contents

Source Code


Source Code

    subroutine init_mol_tc_biases()
        use SystemData, only: tSmallBasisForThreeBody
        ! reference determinant for initializing the biases
        real(dp) :: normalization
        ! if we read in a value, use that one
        if (abs(pTriples) < eps) then
            pTriples = 0.1
        end if
        ! for 2 electrons, there are obviously no
        ! triple excitations
        if (nel == 2 .or. .not. tSmallBasisForThreeBody) t_exclude_3_body_excits = .true.
        ! For contact interaction we also exclude the too small basis-sets

        if (t_exclude_3_body_excits) then
            pTriples = 0.0_dp
            return
        end if
        write(stdout, *) "pTriples set to ", pTriples
        ! pSingles and pDoubles add to 1, and pTriples is an additional bias not to do
        ! a two-body excitation
        if (tContact) then
!       We do not have those kind of excitations for triples, where all the
!       fermions are up or down.
            p0A = 0.0_dp
            p0B = 0.0_dp
!       We determine the rate uniformly between all the possible exciations
            p2B = choose_i64(nOccBeta, 2) * nOccAlpha
            normalization = p2B + choose_i64(nOccAlpha, 2) * nOccBeta
            p2B = p2B / normalization
        else
            ! scale the probabilities with the number of possible picks
            normalization = choose_i64(nel, 3)
            p0A = choose_i64(nOccBeta, 3) / normalization
            p0B = choose_i64(noccAlpha, 3) / normalization
            p2B = choose_i64(nOccBeta, 2) * nOccAlpha / normalization
        end if
        p1B = 1.0_dp - p0A - p0B - p2B
    end subroutine init_mol_tc_biases