Skip to content

Commit

Permalink
Update virtual move counters and loggables
Browse files Browse the repository at this point in the history
  • Loading branch information
tcmoore3 committed Dec 16, 2024
1 parent 4fe5cd1 commit ff3733e
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 89 deletions.
93 changes: 48 additions & 45 deletions hoomd/hpmc/HPMCCounters.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,29 +353,40 @@ struct hpmc_virtual_moves_counters_t
{
unsigned long long int translate_accept_count;
unsigned long long int translate_reject_count;
unsigned long long int translate_total_num_particles_in_moved_clusters;
unsigned long long int translate_reject_inactive_region;
unsigned long long int translate_reject_oversized_cluster;
unsigned long long int translate_reject_p_reverse_link_zero;
unsigned long long int translate_reject_q_reverse_link_zero;


unsigned long long int rotate_accept_count;
unsigned long long int rotate_reject_count;
unsigned long long int total_num_particles_in_clusters;
unsigned long long int total_num_moves_attempted;
unsigned long long int reject_count_inactive_seed;
unsigned long long int early_abort_no_reverse_link;
unsigned long long int early_abort_forced_reverse_link;
unsigned long long int total_num_particles_in_accepted_cluster_moves;
unsigned long long int rotate_total_num_particles_in_moved_clusters;
unsigned long long int rotate_reject_inactive_region;
unsigned long long int rotate_reject_oversized_cluster;
unsigned long long int rotate_reject_p_reverse_link_zero;
unsigned long long int rotate_reject_q_reverse_link_zero;


//! Construct a zero set of counters
DEVICE hpmc_virtual_moves_counters_t()
{
translate_accept_count = 0;
translate_reject_count = 0;
translate_total_num_particles_in_moved_clusters = 0;
translate_reject_inactive_region = 0;
translate_reject_oversized_cluster = 0;
translate_reject_p_reverse_link_zero = 0;
translate_reject_q_reverse_link_zero = 0;

rotate_accept_count = 0;
rotate_reject_count = 0;
total_num_particles_in_clusters = 0;
total_num_moves_attempted = 0;
reject_count_inactive_seed = 0;
early_abort_no_reverse_link = 0;
early_abort_forced_reverse_link = 0;
total_num_particles_in_accepted_cluster_moves = 0;
rotate_total_num_particles_in_moved_clusters = 0;
rotate_reject_inactive_region = 0;
rotate_reject_oversized_cluster = 0;
rotate_reject_p_reverse_link_zero = 0;
rotate_reject_q_reverse_link_zero = 0;
}

std::pair<unsigned long long int, unsigned long long int> getTranslateCounts()
Expand All @@ -388,58 +399,50 @@ struct hpmc_virtual_moves_counters_t
return std::make_pair(rotate_accept_count, translate_reject_count);
}

DEVICE double getAverageClusterSize()
{
if (translate_accept_count + translate_reject_count + rotate_accept_count + rotate_reject_count)
{
return (double)total_num_particles_in_clusters / ((double)translate_accept_count + (double)translate_reject_count + (double)rotate_accept_count + (double)rotate_reject_count);
}
else
{
return 0.0;
}
}

DEVICE double getAverageAcceptedClusterSize()
{
if (translate_accept_count + rotate_accept_count)
std::array<unsigned long long int, 4> getRotateRejectCounts()
{
return (double)total_num_particles_in_accepted_cluster_moves / ((double)translate_accept_count + (double)rotate_accept_count);
std::array<unsigned long long int, 4> counts = {rotate_reject_inactive_region, rotate_reject_oversized_cluster, rotate_reject_p_reverse_link_zero, rotate_reject_q_reverse_link_zero};
return counts;
}
else

std::array<unsigned long long int, 4> getTranslateRejectCounts()
{
return 0.0;
std::array<unsigned long long int, 4> counts = {translate_reject_inactive_region, translate_reject_oversized_cluster, translate_reject_p_reverse_link_zero, translate_reject_q_reverse_link_zero};
return counts;
}
}

DEVICE unsigned long long int getTotalNumParticlesInClusters()
DEVICE unsigned long long int getTotalNumParticlesInClustersRotate()
{
return total_num_particles_in_clusters;
return rotate_total_num_particles_in_moved_clusters;
}

DEVICE unsigned long long int getTotalNumMovesAttempted()
DEVICE unsigned long long int getTotalNumParticlesInClustersTranslate()
{
return total_num_moves_attempted;
return translate_total_num_particles_in_moved_clusters;
}

DEVICE std::pair<unsigned long long int, unsigned long long int> getEarlyAbortCounts()
{
return std::make_pair(early_abort_no_reverse_link, early_abort_forced_reverse_link);
}
};

DEVICE inline hpmc_virtual_moves_counters_t operator-(const hpmc_virtual_moves_counters_t& a, hpmc_virtual_moves_counters_t& b)
{
hpmc_virtual_moves_counters_t result;
result.translate_accept_count = a.translate_accept_count - b.translate_accept_count;
result.translate_reject_count = a.translate_reject_count - b.translate_reject_count;
result.rotate_accept_count = a.rotate_accept_count - b.rotate_accept_count;
result.rotate_reject_count = a.rotate_reject_count - b.rotate_reject_count;
result.total_num_particles_in_clusters = a.total_num_particles_in_clusters - b.total_num_particles_in_clusters;
result.total_num_moves_attempted = a.total_num_moves_attempted - b.total_num_moves_attempted;
result.early_abort_no_reverse_link = a.early_abort_no_reverse_link - b.early_abort_no_reverse_link;
result.early_abort_forced_reverse_link = a.early_abort_forced_reverse_link - b.early_abort_forced_reverse_link;
result.total_num_particles_in_accepted_cluster_moves = a.total_num_particles_in_accepted_cluster_moves - b.total_num_particles_in_accepted_cluster_moves;
result.rotate_total_num_particles_in_moved_clusters = a.rotate_total_num_particles_in_moved_clusters + b.rotate_total_num_particles_in_moved_clusters;
result.rotate_reject_inactive_region = a.rotate_reject_inactive_region + b.rotate_reject_inactive_region;
result.rotate_reject_oversized_cluster = a.rotate_reject_oversized_cluster + b.rotate_reject_oversized_cluster;
result.rotate_reject_p_reverse_link_zero = a.rotate_reject_p_reverse_link_zero + b.rotate_reject_p_reverse_link_zero;
result.rotate_reject_q_reverse_link_zero = a.rotate_reject_q_reverse_link_zero + b.rotate_reject_q_reverse_link_zero;

result.translate_accept_count = a.translate_accept_count - b.translate_accept_count;
result.translate_reject_count = a.translate_reject_count - b.translate_reject_count;
result.translate_total_num_particles_in_moved_clusters = a.translate_total_num_particles_in_moved_clusters + b.translate_total_num_particles_in_moved_clusters;
result.translate_reject_inactive_region = a.translate_reject_inactive_region + b.translate_reject_inactive_region;
result.translate_reject_oversized_cluster = a.translate_reject_oversized_cluster + b.translate_reject_oversized_cluster;
result.translate_reject_p_reverse_link_zero = a.translate_reject_p_reverse_link_zero + b.translate_reject_p_reverse_link_zero;
result.translate_reject_q_reverse_link_zero = a.translate_reject_q_reverse_link_zero + b.translate_reject_q_reverse_link_zero;

return result;
}

Expand Down
66 changes: 54 additions & 12 deletions hoomd/hpmc/UpdaterVirtualMoveMonteCarlo.h
Original file line number Diff line number Diff line change
Expand Up @@ -459,14 +459,15 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)

)
{
m_count_total.reject_count_inactive_seed++;
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_inactive_region++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_inactive_region++;
}
skip_to_next_seed = true;
break;
Expand Down Expand Up @@ -571,13 +572,33 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
&& m_cluster_data.current_cluster_size() == maximum_allowed_cluster_size)
{
// abort the move.
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_oversized_cluster++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_oversized_cluster++;
}
skip_to_next_seed = true;
break;
}
else if (m_cluster_size_limit_mode == "probabilistic"
&& hoomd::UniformDistribution<Scalar>()(rng_i) > m_cluster_size_distribution_prefactor / ((LongReal)m_cluster_data.current_cluster_size() + 1))
{
// abort the move.
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_oversized_cluster++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_oversized_cluster++;
}
skip_to_next_seed = true;
break;
}
Expand Down Expand Up @@ -631,14 +652,15 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
}
if (p_ij_reverse == 0.0)
{
m_count_total.early_abort_no_reverse_link++;
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_p_reverse_link_zero++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_p_reverse_link_zero++;
}
skip_to_next_seed = true;
break; // break loop over linkees
Expand Down Expand Up @@ -690,13 +712,33 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
&& m_cluster_data.current_cluster_size() == maximum_allowed_cluster_size)
{
// abort the move.
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_oversized_cluster++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_oversized_cluster++;
}
skip_to_next_seed = true;
break;
}
else if (m_cluster_size_limit_mode == "probabilistic"
&& hoomd::UniformDistribution<Scalar>()(rng_i) > m_cluster_size_distribution_prefactor / ((LongReal)m_cluster_data.current_cluster_size() + 1))
{
// abort the move.
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_oversized_cluster++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_oversized_cluster++;
}
skip_to_next_seed = true;
break;
}
Expand Down Expand Up @@ -732,15 +774,16 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
p_ij_reverse = std::max(0.0, 1.0 - exp(-(u_ij_after_reverse_move - u_ij) / kT));
if (p_ij_reverse == 0.0)
{
m_count_total.early_abort_no_reverse_link++;
m_exec_conf->msg->notice(5) << " p_ij_reverse = 0; aborting move." << std::endl;
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_p_reverse_link_zero++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_p_reverse_link_zero++;
}
skip_to_next_seed = true;
break;
Expand Down Expand Up @@ -775,16 +818,17 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
Scalar q_ij_reverse = std::min(1.0, fast::exp(-(u_ij - u_ij_after_move) / kT));
if (q_ij_reverse == 0.0)
{
m_count_total.early_abort_forced_reverse_link++;
m_exec_conf->msg->notice(5) << " q_ij_reverse = 0; aborting move." << std::endl;
skip_to_next_seed = true;
if (move_type_translate)
{
m_count_total.translate_reject_count++;
m_count_total.translate_reject_q_reverse_link_zero++;
}
else
{
m_count_total.rotate_reject_count++;
m_count_total.rotate_reject_q_reverse_link_zero++;
}
break;
}
Expand Down Expand Up @@ -837,7 +881,6 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)


// now we can accept or reject the move
m_count_total.total_num_moves_attempted++;
m_exec_conf->msg->notice(5) << " failed_link_probability_ratio = " << p_failed_link_probability_ratio << std::endl;
m_exec_conf->msg->notice(5) << " p_link_probability_ratio = " << p_link_probability_ratio << std::endl;
m_exec_conf->msg->notice(5) << " beta*dU = " << deltaU / kT << std::endl;
Expand All @@ -848,18 +891,18 @@ void UpdaterVMMC<Shape>::update(uint64_t timestep)
bool accept_cluster_move = r <= p_acc;
m_exec_conf->msg->notice(4) << " VMMC p_acc: " << p_acc << std::endl;
size_t cluster_size = m_cluster_data.m_linkers_added.size();
m_count_total.total_num_particles_in_clusters += (unsigned long long int)cluster_size;
if(accept_cluster_move)
{
m_count_total.total_num_particles_in_accepted_cluster_moves += (unsigned long long int)cluster_size;
m_exec_conf->msg->notice(4) << " VMMC move accepted, moving " << cluster_size << " particles as a cluster" << std::endl;
if (move_type_translate)
{
m_count_total.translate_accept_count++;
m_count_total.translate_total_num_particles_in_moved_clusters += (unsigned long long int)cluster_size;
}
else
{
m_count_total.rotate_accept_count++;
m_count_total.rotate_total_num_particles_in_moved_clusters += (unsigned long long int)cluster_size;
}

// move the particles that are in the cluster
Expand Down Expand Up @@ -959,12 +1002,11 @@ inline void export_hpmc_virtual_moves_counters(pybind11::module &m)
{
pybind11::class_<hpmc_virtual_moves_counters_t>(m, "hpmc_virtual_moves_counters_t")
.def_property_readonly("translate_counts", &hpmc_virtual_moves_counters_t::getTranslateCounts)
.def_property_readonly("translate_rejection_counts", &hpmc_virtual_moves_counters_t::getTranslateRejectCounts)
.def_property_readonly("translate_num_particles_in_moved_clusters", &hpmc_virtual_moves_counters_t::getTotalNumParticlesInClustersTranslate)
.def_property_readonly("rotate_counts", &hpmc_virtual_moves_counters_t::getRotateCounts)
.def_property_readonly("average_cluster_size", &hpmc_virtual_moves_counters_t::getAverageClusterSize)
.def_property_readonly("total_num_particles_in_clusters", &hpmc_virtual_moves_counters_t::getTotalNumParticlesInClusters)
.def_property_readonly("total_num_moves_attempted", &hpmc_virtual_moves_counters_t::getTotalNumMovesAttempted)
.def_property_readonly("early_abort_counts", &hpmc_virtual_moves_counters_t::getEarlyAbortCounts)
.def_property_readonly("average_cluster_size_accepted", &hpmc_virtual_moves_counters_t::getAverageAcceptedClusterSize)
.def_property_readonly("rotate_rejection_counts", &hpmc_virtual_moves_counters_t::getRotateRejectCounts)
.def_property_readonly("rotate_num_particles_in_moved_clusters", &hpmc_virtual_moves_counters_t::getTotalNumParticlesInClustersRotate)
;
}

Expand Down
Loading

0 comments on commit ff3733e

Please sign in to comment.