41template <
typename FloatType>
46 using CutPoint = std::pair<TimeType, graph::Spin>;
68 const GraphType &init_interaction,
const double gamma)
69 : spin_config(init_spin_config), num_spins(init_spin_config.size() + 1),
71 utility::gen_matrix_from_graph<Eigen::RowMajor>(init_interaction)),
74 assert(init_spin_config.size() == init_interaction.
get_num_spins());
80 for (
typename SparseMatrixXx::InnerIterator it(
83 std::size_t j = it.index();
86 diag.insert(j, j) = v;
88 diag.insert(j, j) = -1;
94 spin_config.push_back(std::vector<CutPoint>{
CutPoint(0.0, 1)});
109 const GraphType &init_interaction,
const double gamma)
111 init_interaction, gamma) {
124 spin_config.reserve(spins.size());
128 for (
auto spin : spins) {
129 spin_config.push_back(std::vector<CutPoint>{
145 assert(init_spin_config.size() == this->num_spins - 1);
147 this->spin_config = init_spin_config;
148 this->spin_config.push_back(std::vector<CutPoint>{
CutPoint(
TimeType(), 1)});
158 assert(classical_spins.size() == this->num_spins - 1);
160 for (
size_t i = 0; i < this->num_spins - 1; i++) {
161 this->spin_config[i] = std::vector<CutPoint>{
166 this->spin_config[this->num_spins - 1] =
181 return x.first < y.first;
185 const auto &timeline = this->spin_config[site_index];
186 const auto dummy_cut =
189 std::upper_bound(timeline.begin(), timeline.end(), dummy_cut, first_lt);
193 found_itr = timeline.end() - 1;
198 return std::distance(timeline.begin(), found_itr);
210 for (
graph::Index i = 0; i < this->spin_config.size() - 1; i++) {
211 auto temporal_index = get_temporal_spin_index(i, slice_time);
212 slice.push_back(this->spin_config[i][temporal_index].second);
224 auto last_index = this->spin_config.size() - 1;
225 auto temporal_index = get_temporal_spin_index(last_index, slice_time);
226 return this->spin_config[last_index][temporal_index].second;
259template <
typename FloatType>
286 const GraphType &init_interaction,
const double gamma)
287 : spin_config(init_spin_config), num_spins(init_spin_config.size() + 1),
288 interaction(init_interaction.get_interactions()),
291 assert(init_spin_config.size() == init_interaction.
get_num_spins());
297 for (
typename SparseMatrixXx::InnerIterator it(
300 std::size_t j = it.index();
303 diag.insert(j, j) = v;
305 diag.insert(j, j) = -1;
311 spin_config.push_back(std::vector<CutPoint>{
CutPoint(0.0, 1)});
326 const GraphType &init_interaction,
const double gamma)
328 init_interaction, gamma) {
341 spin_config.reserve(spins.size());
345 for (
auto spin : spins) {
346 spin_config.push_back(std::vector<CutPoint>{
362 assert(init_spin_config.size() == this->num_spins - 1);
364 this->spin_config = init_spin_config;
365 this->spin_config.push_back(std::vector<CutPoint>{
CutPoint(
TimeType(), 1)});
375 assert(classical_spins.size() == this->num_spins - 1);
377 for (
size_t i = 0; i < this->num_spins - 1; i++) {
378 this->spin_config[i] = std::vector<CutPoint>{
383 this->spin_config[this->num_spins - 1] =
398 return x.first < y.first;
402 const auto &timeline = this->spin_config[site_index];
403 const auto dummy_cut =
406 std::upper_bound(timeline.begin(), timeline.end(), dummy_cut, first_lt);
410 found_itr = timeline.end() - 1;
415 return std::distance(timeline.begin(), found_itr);
427 for (
graph::Index i = 0; i < this->spin_config.size() - 1; i++) {
428 auto temporal_index = get_temporal_spin_index(i, slice_time);
429 slice.push_back(this->spin_config[i][temporal_index].second);
441 auto last_index = this->spin_config.size() - 1;
442 auto temporal_index = get_temporal_spin_index(last_index, slice_time);
443 return this->spin_config[last_index][temporal_index].second;
481template <
typename GraphType>
484 const GraphType &init_interaction,
double gamma) {
CSRSparse graph: just store CSR Sparse Matrix (Eigen::Sparse) The Hamiltonian is like.
Definition csr_sparse.hpp:42
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
int Spin
Definition graph.hpp:26
std::size_t Index
Definition graph.hpp:30
ContinuousTimeIsing< GraphType > make_continuous_time_ising(const graph::Spins &init_spins, const GraphType &init_interaction, double gamma)
helper function for ContinuousTimeIsing constructor
Definition continuous_time_ising.hpp:483
Definition algorithm.hpp:24
double FloatType
Note:
Definition compile_config.hpp:37
std::pair< TimeType, graph::Spin > CutPoint
Definition continuous_time_ising.hpp:264
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Interaction type (Eigen sparse matrix)
Definition continuous_time_ising.hpp:269
graph::Spin get_auxiliary_spin(TimeType slice_time) const
Definition continuous_time_ising.hpp:440
void reset_spins(const graph::Spins &classical_spins)
reset spins with given spin configuration
Definition continuous_time_ising.hpp:374
size_t get_temporal_spin_index(graph::Index site_index, TimeType time_point) const
return time-direction index which exists just before time_point at "site_index"th site.
Definition continuous_time_ising.hpp:395
const std::size_t num_spins
number of spins, including auxiliary spin for longitudinal magnetic field
Definition continuous_time_ising.hpp:457
SpinConfiguration spin_config
spin configuration
Definition continuous_time_ising.hpp:451
const FloatType gamma
coefficient of transverse field term, actual field would be gamma * s, where s = [0:1]
Definition continuous_time_ising.hpp:468
FloatType TimeType
Definition continuous_time_ising.hpp:263
std::vector< std::vector< CutPoint > > SpinConfiguration
spin configuration in real and continuous time space spin_config[i][j] -> at i th site,...
Definition continuous_time_ising.hpp:276
graph::Spins get_slice_at(TimeType slice_time) const
Definition continuous_time_ising.hpp:424
void reset_spins(const SpinConfiguration &init_spin_config)
reset spins with given spin configuration
Definition continuous_time_ising.hpp:361
SparseMatrixXx interaction
interaction
Definition continuous_time_ising.hpp:462
static SpinConfiguration convert_to_spin_config(const graph::Spins &spins)
convert classical spins to spin configuration; each site has only one cut with given spin state at ti...
Definition continuous_time_ising.hpp:339
ContinuousTimeIsing(const SpinConfiguration &init_spin_config, const GraphType &init_interaction, const double gamma)
ContinuousTimeIsing constructor.
Definition continuous_time_ising.hpp:285
ContinuousTimeIsing(const graph::Spins &init_spins, const GraphType &init_interaction, const double gamma)
ContinuousTimeIsing constructor.
Definition continuous_time_ising.hpp:325
FloatType TimeType
Definition continuous_time_ising.hpp:45
size_t get_temporal_spin_index(graph::Index site_index, TimeType time_point) const
return time-direction index which exists just before time_point at "site_index"th site.
Definition continuous_time_ising.hpp:178
ContinuousTimeIsing(const SpinConfiguration &init_spin_config, const GraphType &init_interaction, const double gamma)
ContinuousTimeIsing constructor.
Definition continuous_time_ising.hpp:67
SpinConfiguration spin_config
spin configuration
Definition continuous_time_ising.hpp:234
void reset_spins(const graph::Spins &classical_spins)
reset spins with given spin configuration
Definition continuous_time_ising.hpp:157
std::vector< std::vector< CutPoint > > SpinConfiguration
spin configuration in real and continuous time space spin_config[i][j] -> at i th site,...
Definition continuous_time_ising.hpp:58
graph::Spins get_slice_at(TimeType slice_time) const
Definition continuous_time_ising.hpp:207
const std::size_t num_spins
number of spins, including auxiliary spin for longitudinal magnetic field
Definition continuous_time_ising.hpp:240
const FloatType gamma
coefficient of transverse field term, actual field would be gamma * s, where s = [0:1]
Definition continuous_time_ising.hpp:251
std::pair< TimeType, graph::Spin > CutPoint
Definition continuous_time_ising.hpp:46
void reset_spins(const SpinConfiguration &init_spin_config)
reset spins with given spin configuration
Definition continuous_time_ising.hpp:144
static SpinConfiguration convert_to_spin_config(const graph::Spins &spins)
convert classical spins to spin configuration; each site has only one cut with given spin state at ti...
Definition continuous_time_ising.hpp:122
SparseMatrixXx interaction
interaction
Definition continuous_time_ising.hpp:245
graph::Spin get_auxiliary_spin(TimeType slice_time) const
Definition continuous_time_ising.hpp:223
ContinuousTimeIsing(const graph::Spins &init_spins, const GraphType &init_interaction, const double gamma)
ContinuousTimeIsing constructor.
Definition continuous_time_ising.hpp:108
Eigen::SparseMatrix< FloatType, Eigen::RowMajor > SparseMatrixXx
Interaction type (Eigen sparse matrix)
Definition continuous_time_ising.hpp:51
Continuous Time Quantum Ising system.
Definition continuous_time_ising.hpp:34
ordinary homogeneous transverse field system (using beta and annealing schedule (s) for annealing par...
Definition system.hpp:48