44 pdf(typeName, dict, rndGen),
45 xy_(pdfDict_.lookup(
"distribution")),
46 nEntries_(xy_.size()),
48 maxValue_(xy_[nEntries_-1][0]),
56 for (label i=1; i<nEntries_; i++)
59 scalar
k = (xy_[i][1] - xy_[i-1][1])/(xy_[i][0] - xy_[i-1][0]);
60 scalar
d = xy_[i-1][1] - k*xy_[i-1][0];
61 scalar
y1 = xy_[i][0]*(0.5*k*xy_[i][0] +
d);
62 scalar
y0 = xy_[i-1][0]*(0.5*k*xy_[i-1][0] +
d);
63 scalar area = y1 -
y0;
65 integral_[i] = area + integral_[i-1];
68 for (label i=0; i<nEntries_; i++)
70 xy_[i][1] /= integral_[nEntries_-1];
71 integral_[i] /= integral_[nEntries_-1];
87 scalar
y = rndGen_.scalar01();
91 while (integral_[n] <= y)
96 scalar
k = (xy_[n][1] - xy_[n-1][1])/(xy_[n][0] - xy_[n-1][0]);
97 scalar
d = xy_[n-1][1] - k*xy_[n-1][0];
99 scalar alpha = y + xy_[n-1][0]*(0.5*k*xy_[n-1][0] +
d) - integral_[n-1];
106 scalar q = -2.0*alpha/
k;
107 scalar sqrtEr =
sqrt(0.25*p*p - q);
109 scalar x1 = -0.5*p + sqrtEr;
110 scalar x2 = -0.5*p - sqrtEr;
111 if ((x1 >= xy_[n-1][0]) && (x1 <= xy_[n][0]))