std::vector<std::vector<typename Observator::observable_type> > Mocasinns::Metropolis<ConfigurationType, Step, RandomNumberGenerator, rejection_free>::do_metropolis_simulation(InputIterator first_beta, InputIterator last_beta) { // Check the concept of the observator BOOST_CONCEPT_ASSERT((Concepts::ObservatorConcept<Observator,ConfigurationType>)); // Check the concept of the observable BOOST_CONCEPT_ASSERT((Concepts::ObservableConcept<typename Observator::observable_type>)); std::vector<std::vector<typename Observator::observable_type> > results; for (InputIterator beta = first_beta; beta != last_beta; ++beta) { results.push_back(do_metropolis_simulation(*beta)); if (this->is_terminating) break; } }
void Metropolis<ConfigurationType,Step,RandomNumberGenerator>::do_metropolis_simulation(InverseTemperatureIterator beta_begin, InverseTemperatureIterator beta_end, AccumulatorIterator measurement_accumulator_begin, AccumulatorIterator measurement_accumulator_end) { // Check the concept of the observator BOOST_CONCEPT_ASSERT((Concepts::ObservatorConcept<Observator,ConfigurationType>)); // Check the concept of the observable BOOST_CONCEPT_ASSERT((Concepts::ObservableConcept<typename Observator::observable_type>)); // Check the concept of the accumulator BOOST_CONCEPT_ASSERT((Concepts::AccumulatorConcept<typename std::iterator_traits<AccumulatorIterator>::value_type, typename Observator::observable_type>)); InverseTemperatureIterator beta_iterator = beta_begin; AccumulatorIterator measurement_accumulator_iterator = measurement_accumulator_begin; for (; beta_iterator != beta_end; ++beta_iterator, ++measurement_accumulator_iterator) { do_metropolis_simulation(*beta_iterator, *measurement_accumulator_iterator); if (this->is_terminating) break; } }
void Mocasinns::Metropolis<ConfigurationType,Step,RandomNumberGenerator,rejection_free>::do_metropolis_simulation(InverseTemperatureIterator beta_begin, InverseTemperatureIterator beta_end, AccumulatorIterator measurement_accumulator_begin, AccumulatorIterator measurement_accumulator_end) { // Check the concept of the observator BOOST_CONCEPT_ASSERT((Concepts::ObservatorConcept<Observator,ConfigurationType>)); // Check the concept of the observable BOOST_CONCEPT_ASSERT((Concepts::ObservableConcept<typename Observator::observable_type>)); // Check the concept of the accumulator BOOST_CONCEPT_ASSERT((Concepts::AccumulatorConcept<typename std::iterator_traits<AccumulatorIterator>::value_type, typename Observator::observable_type>)); // Check that the number of inverse temperatures and the number of accumulators matches if (std::distance(beta_begin, beta_end) != std::distance(measurement_accumulator_begin, measurement_accumulator_end)) throw Exceptions::IteratorRangeException("The range of given inverse temperatures and accumulators must have the same size."); InverseTemperatureIterator beta_iterator = beta_begin; AccumulatorIterator measurement_accumulator_iterator = measurement_accumulator_begin; for (; beta_iterator != beta_end; ++beta_iterator, ++measurement_accumulator_iterator) { do_metropolis_simulation(*beta_iterator, *measurement_accumulator_iterator); if (this->is_terminating) break; } }