33 namespace distributions
78 return a.
first() <
b.first();
83 for (
label i = 1; i < values.
size(); ++ i)
85 if (values[i].
second() < 0)
88 <<
typeName <<
": The probabilities are not all positive "
94 x_.resize(values.
size());
97 x_[i] = values[i].
first();
101 P_.resize(values.
size());
104 P_[i] =
integerPow(x_[i], q())*values[i].second();
112 sumP_[i + 1] = sumP_[i] + P_[i];
117 sumP_ /= sumP_.last();
128 reader_(d.reader_, false),
133 if (
q() == d.
q())
return;
143 sumP_[i + 1] = sumP_[i] + P_[i];
148 sumP_ /= sumP_.
last();
162 const scalar
S = rndGen_.sample01<scalar>();
165 for (; i < sumP_.size() - 1 && sumP_[i + 1] <
S; ++ i);
202 while (i <
x.size() &&
x[i] < x_[0])
208 scalar integral_PDFxPowE_0_j = P_[0]*
integerPow(x_[0],
e);
210 for (
label j = 0; j < x_.size() - 1; ++ j)
212 while (i <
x.size() &&
x[i] < x_[j + 1])
214 result[i] = integral_PDFxPowE_0_j;
218 integral_PDFxPowE_0_j += P_[j + 1]*
integerPow(x_[j + 1],
e);
223 result[i] = integral_PDFxPowE_0_j;
249 values[i].
first() = x_[i];
250 values[i].second() = P[i];
252 reader_->write(os, {units,
units::any}, values,
"values");
264 result[3*i] = result[3*i + 1] = result[3*i + 2] = x_[i];
279 result[3*i] = result[3*i + 2] = 0;
280 result[3*i + 1] = P_[i]/rootVSmall;
#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.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Base class to read table data for tables.
A 2-tuple for storing two objects of different types.
const Type1 & first() const
Return first.
T & first()
Return the first element of the list.
T & last()
Return the last element of the list.
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
Base class for statistical distributions.
label q() const
Return the effective distribution size exponent.
Distribution which comprises a list of fixed values with given probabilities. The probabilities are n...
virtual tmp< scalarField > integralPDFxPow(const scalarField &x, const label e, const bool consistent=false) const
Return the integral of the PDF multiplied by an integer power of x.
virtual scalar min() const
Return the minimum value.
virtual scalar sample() const
Sample the distribution.
virtual tmp< scalarField > plotPDF(const scalarField &x) const
Return values to plot the probability density function.
multiFixedValue(const unitSet &units, const dictionary &dict, const label sampleQ, randomGenerator &&rndGen)
Construct from a dictionary.
virtual ~multiFixedValue()
Destructor.
virtual void write(Ostream &os, const unitSet &units) const
Write to a stream.
virtual scalar max() const
Return the maximum value.
virtual scalar mean() const
Return the mean value.
virtual tmp< scalarField > plotX(const label n) const
Return coordinates to plot across the range of the distribution.
A class for managing temporary objects.
T & ref() const
Return non-const reference or generate a fatal error.
Template function which returns the un-mangled name of a given type. Useful for types which do not ha...
Unit conversion structure. Contains the associated dimensions and the multiplier with which to conver...
A class for handling words, derived from string.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
defineTypeNameAndDebug(exponential, 0)
addToRunTimeSelectionTable(distribution, exponential, dictionary)
tmp< fvMatrix< Type > > S(const Pair< tmp< volScalarField::Internal >> &, const VolField< Type > &)
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
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.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)
randomGenerator rndGen(653213)