22#include <Eigen/Sparse>
24#include <cimod/utilities.hpp>
45template <
typename FloatType>
struct ClassicalIsing<graph::Dense<FloatType>> {
50 Eigen::Matrix<FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
52 using VectorXx = Eigen::Matrix<FloatType, Eigen::Dynamic, 1, Eigen::ColMajor>;
62 : spin(utility::gen_vector_from_std_vector<
FloatType, Eigen::ColMajor>(
64 interaction(init_interaction.get_interactions()),
65 num_spins(init_interaction.get_num_spins()) {
66 cimod::CheckVariables(init_spin, cimod::Vartype::SPIN);
78 utility::gen_vector_from_std_vector<FloatType, Eigen::ColMajor>(
89 -2.0 * this->spin.array() * (this->interaction * this->spin).array();
124 using VectorXx = Eigen::Matrix<FloatType, Eigen::Dynamic, 1, Eigen::ColMajor>;
134 : spin(utility::gen_vector_from_std_vector<
FloatType, Eigen::ColMajor>(
137 utility::gen_matrix_from_graph<Eigen::RowMajor>(init_interaction)),
138 num_spins(init_interaction.get_num_spins()) {
139 assert(init_spin.size() == init_interaction.
get_num_spins());
150 utility::gen_vector_from_std_vector<FloatType, Eigen::ColMajor>(
161 -2.0 * this->spin.array() * (this->interaction * this->spin).array();
190template <
typename FloatType>
struct ClassicalIsing<graph::CSRSparse<FloatType>> {
196 using VectorXx = Eigen::Matrix<FloatType, Eigen::Dynamic, 1, Eigen::ColMajor>;
206 : spin(utility::gen_vector_from_std_vector<
FloatType, Eigen::ColMajor>(
208 interaction(init_interaction.get_interactions()),
209 num_spins(init_interaction.get_num_spins()) {
210 assert(init_spin.size() == init_interaction.
get_num_spins());
221 utility::gen_vector_from_std_vector<FloatType, Eigen::ColMajor>(
232 -2.0 * this->spin.array() * (this->interaction * this->spin).array();
265template <
typename GraphType>
267 const GraphType &init_interaction) {
CSRSparse graph: just store CSR Sparse Matrix (Eigen::Sparse) The Hamiltonian is like.
Definition csr_sparse.hpp:42
two-body all-to-all interactions The Hamiltonian is like
Definition dense.hpp:44
std::size_t get_num_spins() const noexcept
get number of spins
Definition graph.hpp:89
Sparse graph: two-body intereactions with O(1) connectivity The Hamiltonian is like.
Definition sparse.hpp:40
std::vector< Spin > Spins
Definition graph.hpp:27
auto make_classical_ising(const graph::Spins &init_spin, const GraphType &init_interaction)
helper function for ClassicalIsing constructor
Definition classical_ising.hpp:266
Definition algorithm.hpp:24
double FloatType
Note:
Definition compile_config.hpp:37
VectorXx spin
spins (Eigen Vector)
Definition classical_ising.hpp:238
const std::size_t num_spins
number of real spins (dummy spin excluded)
Definition classical_ising.hpp:248
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Definition classical_ising.hpp:194
void reset_dE()
reset dE
Definition classical_ising.hpp:230
ClassicalIsing(const graph::Spins &init_spin, const graph::CSRSparse< FloatType > &init_interaction)
Constructor to initialize spin and interaction.
Definition classical_ising.hpp:204
VectorXx dE
delta E for updater
Definition classical_ising.hpp:253
const SparseMatrixXx interaction
interaction (Eigen SparseMatrix)
Definition classical_ising.hpp:243
void reset_spins(const graph::Spins &init_spin)
reset spins
Definition classical_ising.hpp:219
Eigen::Matrix< FloatType, Eigen::Dynamic, 1, Eigen::ColMajor > VectorXx
Definition classical_ising.hpp:196
const std::size_t num_spins
number of real spins (dummy spin excluded)
Definition classical_ising.hpp:105
void reset_dE()
reset dE
Definition classical_ising.hpp:87
Eigen::Matrix< FloatType, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXx
Definition classical_ising.hpp:50
void reset_spins(const graph::Spins &init_spin)
reset spins
Definition classical_ising.hpp:76
VectorXx dE
delta E for updater
Definition classical_ising.hpp:110
Eigen::Matrix< FloatType, Eigen::Dynamic, 1, Eigen::ColMajor > VectorXx
Definition classical_ising.hpp:52
ClassicalIsing(const graph::Spins &init_spin, const graph::Dense< FloatType > &init_interaction)
Constructor to initialize spin and interaction.
Definition classical_ising.hpp:60
const MatrixXx interaction
interactions (Eigen Matrix)
Definition classical_ising.hpp:100
VectorXx spin
spins (Eigen Vector)
Definition classical_ising.hpp:95
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Definition classical_ising.hpp:122
const std::size_t num_spins
number of real spins (dummy spin excluded)
Definition classical_ising.hpp:177
ClassicalIsing(const graph::Spins &init_spin, const graph::Sparse< FloatType > &init_interaction)
Constructor to initialize spin and interaction.
Definition classical_ising.hpp:132
VectorXx spin
spins (Eigen Vector)
Definition classical_ising.hpp:167
const SparseMatrixXx interaction
interaction (Eigen SparseMatrix)
Definition classical_ising.hpp:172
void reset_spins(const graph::Spins &init_spin)
reset spins
Definition classical_ising.hpp:148
void reset_dE()
reset dE
Definition classical_ising.hpp:159
VectorXx dE
delta E for updater
Definition classical_ising.hpp:182
Eigen::Matrix< FloatType, Eigen::Dynamic, 1, Eigen::ColMajor > VectorXx
Definition classical_ising.hpp:124
ClassicalIsing structure (system for classical Ising model)
Definition classical_ising.hpp:38
classical monte carlo system (using beta (inverse temperature) for annealing parameter)
Definition system.hpp:31