8namespace triqs_ctint::moves {
16 if (
qmc_config->perturbation_order() == 0)
return 0.0;
19 auto single_remove = [&](
int p) {
25 double insert_proposition_proba = v.proposition_proba /
vertex_factories.size();
28 return insert_proposition_proba / v.amplitude;
36 if (std::find(
vpos.begin(),
vpos.end(), this_vpos) ==
vpos.end()) {
37 vpos.emplace_back(this_vpos);
39 ratio *= single_remove(this_vpos);
47 g_tau_scalar_t det_ratio =
lazy_op.execute_try_remove();
49 double remove_proposition_proba = 0.0;
55 return mc_weight_t{det_ratio} * ratio / remove_proposition_proba;
61 for (
auto &d :
qmc_config->dets) d.complete_operation();
64 std::sort(
vpos.begin(),
vpos.end(), std::greater<>());
73 for (
auto &d :
qmc_config->dets) d.reject_last_try();
qmc_config_t * qmc_config
The Monte-Carlo configuration.
int max_order
Maximum perturbation order (<0 : unlimited).
triqs::mc_tools::random_generator & rng
The random number generator.
lazy_det_operation_t lazy_op
Object that allows to delay determinant operations, necessary for multi-inserts/removes.
int n_removals
Switch for double vertex removals.
mc_weight_t attempt()
Attempt vertex removal.
std::vector< vertex_factory_t > const & vertex_factories
Factory that randomly generates vertices.
mc_weight_t accept()
Accept vertex removal.
std::vector< int > vpos
Positions at which to remove vertices.
void reject()
Reject vertex removal.