35 namespace distributions
63 if (values.
first().second() != 0)
66 << typeName <<
": The cumulative distribution function does not "
70 for (
label i = 1; i < values.
size(); ++ i)
72 if (values[i].
first() - values[i - 1].
first() < 0)
75 << typeName <<
": The cumulative distribution function is not "
82 << typeName <<
": The cumulative distribution function is not "
91 x_[i] = values[i].
first();
97 for (
label i = 1; i < values.
size(); ++ i)
102 *(values[i].second() - values[i - 1].second());
112 PDF_[i] = (CDF_[i + 1] - CDF_[i])/(x_[i + 1] - x_[i]);
134 if (
q() == d.
q())
return;
143 *(d.CDF_[i] - d.CDF_[i - 1]);
150 PDF_[i] = (CDF_[i + 1] - CDF_[i])/(x_[i + 1] - x_[i]);
193 const scalar x0 =
min(), x1 =
max(), d = 0.1*(x1 - x0);
198 result[0] =
Foam::max(x0 - d, q() < 0 ? x0/2 : rootVSmall);
202 result[2*i + 1] = result[2*i + 2] = x_[i];
205 result[2*x_.size() + 1] = x1 + d;
217 result[0] = result[1] = 0;
221 result[2*i + 2] = result[2*i + 3] = PDF_[i];
224 result[2*PDF_.size() + 2] = result[2*PDF_.size() + 3] = 0;
#define forAll(list, i)
Loop across all elements in list.
Macros for easy insertion into run-time selection tables.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
void resize(const label)
Alias for setSize(const label)
void size(const label)
Override size to be inconsistent with allocated storage.
T & first()
Return the first element of the list.
T & last()
Return the last element of the list.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Accumulating histogram of values. Specified bin resolution automatic generation of bins.
void report() const
Report.
virtual void validatePositive(const dictionary &dict) const
Validate that the lower bound is positive.
label q() const
Return the effective distribution size exponent.
virtual void validateBounds(const dictionary &dict) const
Validate that the bounds are monotonic.
Distribution in which the cumulative distribution function is given as a table of values.
virtual ~tabulatedCumulative()
Destructor.
virtual scalar min() const
Return the minimum value.
virtual scalar sample() const
Sample the distribution.
virtual tmp< scalarField > PDF(const scalarField &x) const
Return the distribution probability density function.
virtual tmp< scalarField > x(const label n) const
Return coordinates to plot across the range of the distribution.
tabulatedCumulative(const dictionary &dict, Random &rndGen, const label sampleQ)
Construct from a dictionary.
virtual scalar max() const
Return the maximum value.
virtual scalar mean() const
Return the mean value.
scalar sample() const
Sample the distribution.
static tmp< scalarField > integrate(const scalarField &x, const scalarField &y)
Integrate the values y with respect to the coordinates x.
A class for managing temporary objects.
T & ref() const
Return non-const reference or generate a fatal error.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
defineTypeNameAndDebug(exponential, 0)
addToRunTimeSelectionTable(distribution, exponential, dictionary)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
errorManip< error > abort(error &err)
scalar integerPow(const scalar x, const label e)
Compute the power of the number x to the integer e.
labelList second(const UList< labelPair > &p)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
labelList first(const UList< labelPair > &p)
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)