PowerLaw raises an error if sampling interval contains negative values #3542
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Obtaining a sample$x$ from a power law distribution of degree $n$ , defined over the interval $[a, b]$ , requires evaluating the following:
where the offset$a' = a^{n+1}$ , the span $\Delta = b^{n+1} - a'$ , and $\xi$ is a (pseudo)random number sampled from $U[0, 1]$ . In OpenMC, this operation uses numpy.power() when performed in Python and std::pow() in C++, both of which raise an error if a negative number is raised to a non-integer power.
Currently, there are no warnings against specifying an interval wherein$a' + \xi\times\Delta < 0$ for some value of $\xi$ , and when std::pow() is called in such cases, OpenMC raises the following RuntimeError:
This PR checks the values of$a$ and $b$ when a PowerLaw is created to make sure that the distribution is defined over a nonnegative-valued interval. This makes clear the cause of the above error before it occurs.
Fixes #3541
Checklist