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