Mantid
Loading...
Searching...
No Matches
SobolSequence.cpp
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7//-------------------------------------------------------------------
8// Includes
9//-------------------------------------------------------------------
11#include <stdexcept>
12
13namespace Mantid::Kernel {
17SobolSequence::SobolSequence(const unsigned int ndims)
18 : QuasiRandomNumberSequence(ndims), m_gslGenerator(nullptr), m_savedGenerator(nullptr) {
20}
21
26
33 std::vector<double> &point = getNextPointCache();
34 gsl_qrng_get(m_gslGenerator, point.data());
35}
36
40void SobolSequence::restart() { gsl_qrng_init(m_gslGenerator); }
41
44
48 if (m_savedGenerator) {
49 gsl_qrng_memcpy(m_gslGenerator, m_savedGenerator);
50 } else {
51 restart();
52 }
53}
54
59void SobolSequence::setNumberOfDimensions(const unsigned int ndims) {
60 gsl_qrng *generator = gsl_qrng_alloc(gsl_qrng_sobol, static_cast<unsigned int>(ndims));
61 if (generator) {
63 m_gslGenerator = generator;
64 } else {
65 throw std::invalid_argument("SobolSequence::setNumberOfDimensions - "
66 "Error initializing sequence, insufficient memory.");
67 }
68}
69
74 gsl_qrng_free(m_gslGenerator);
75 if (m_savedGenerator) {
76 gsl_qrng_free(m_savedGenerator);
77 }
78}
79} // namespace Mantid::Kernel
std::vector< double > & getNextPointCache()
Some generators need direct access to the cache.
Defines an interface to a quasi-random number sequence.
SobolSequence()=delete
Disable default constructor.
void setNumberOfDimensions(const unsigned int ndims)
Set the number of dimensions.
void generateNextPoint() override
Generates the next value in the sequence.
void save() override
Saves the current state of the generator.
void deleteCurrentGenerator()
Frees resources allocated by current generator.
void restore() override
Restores the generator to the last saved point, or the beginning if nothing has been saved.
gsl_qrng * m_gslGenerator
GSL quasi-random number state generator.
Definition: SobolSequence.h:59
~SobolSequence() override
Destructor.
void restart() override
Reset the sequence.
gsl_qrng * m_savedGenerator
Allocated object for save state calls.
Definition: SobolSequence.h:61