26template <
template <
typename>
class Updater>
struct Algorithm {
27 template <
typename System,
typename RandomNumberEngine>
32 const std::function<
void(
39 for (
auto &&schedule : schedule_list) {
40 for (std::size_t i = 0; i < schedule.one_mc_step; ++i) {
41 Updater<System>::update(system, random_number_engine,
42 schedule.updater_parameter);
43 callback(system, schedule.updater_parameter);
48 for (
auto &&schedule : schedule_list) {
49 for (std::size_t i = 0; i < schedule.one_mc_step; ++i) {
50 Updater<System>::update(system, random_number_engine,
51 schedule.updater_parameter);
87std::variant<utility::Xorshift, std::mt19937, std::mt19937_64>
93 return std::mt19937();
96 return std::mt19937_64();
99 throw std::runtime_error(
"Unknown RandomNumberEngine");
xorshift random generator for c++11 random
Definition random.hpp:39
std::variant< utility::Xorshift, std::mt19937, std::mt19937_64 > GenerateRandomNumberEngineClass(const RandomNumberEngine random_number_engine)
Definition algorithm.hpp:88
UpdateMethod
Definition algorithm.hpp:63
@ HEAT_BATH
Heat bath update.
@ METROPOLIS
Metropolis update.
RandomNumberEngine
Definition algorithm.hpp:73
@ MT
32-bit Mersenne Twister
@ XORSHIFT
32-bit Xorshift
@ MT_64
64-bit Mersenne Twister
std::vector< Schedule< SystemType > > ScheduleList
schedule list alias
Definition schedule_list.hpp:135
Definition algorithm.hpp:24
Definition algorithm.hpp:26
static void run(System &system, RandomNumberEngine &random_number_engine, const utility::ScheduleList< typename system::get_system_type< System >::type > &schedule_list, const std::function< void(const System &, const utility::UpdaterParameter< typename system::get_system_type< System >::type > &)> &callback=nullptr)
Definition algorithm.hpp:29
typename System::system_type type
Definition system.hpp:77
updater parameter for monte carlo simulation
Definition schedule_list.hpp:32