コード例 #1
0
ファイル: metropolis.cpp プロジェクト: bkrueger/mocasinns
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;
  }
}  
コード例 #2
0
ファイル: metropolis.cpp プロジェクト: SpeckFleck/mocasinns
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;
  }
}
コード例 #3
0
ファイル: metropolis.cpp プロジェクト: bkrueger/mocasinns
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;
  }
}