www.mooseframework.org
TruncatedNormalDistribution.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
13 
15 
16 InputParameters
18 {
19  InputParameters params = NormalDistribution::validParams();
20  params.addClassDescription("Truncated normal distribution");
21  params.addParam<Real>(
22  "lower_bound", -std::numeric_limits<Real>::max(), "Lower bound of the distribution ");
23  params.addParam<Real>(
24  "upper_bound", std::numeric_limits<Real>::max(), "Upper bound of the distribution ");
25  return params;
26 }
27 
29  : NormalDistribution(parameters),
30  _lower_bound(getParam<Real>("lower_bound")),
31  _upper_bound(getParam<Real>("upper_bound"))
32 {
34  mooseError("lower_bound in truncated normal distribution must be less than upper_bound.");
35 }
36 
37 Real
39  const Real & mean,
40  const Real & std_dev,
41  const Real & lower_bound,
42  const Real & upper_bound)
43 {
44  if (x <= lower_bound || x >= upper_bound)
45  return 0.0;
46  else
47  return (NormalDistribution::pdf(x, mean, std_dev)) /
48  (NormalDistribution::cdf(upper_bound, mean, std_dev) -
49  NormalDistribution::cdf(lower_bound, mean, std_dev));
50 }
51 
52 Real
54  const Real & mean,
55  const Real & std_dev,
56  const Real & lower_bound,
57  const Real & upper_bound)
58 {
59 
60  if (x <= lower_bound || x >= upper_bound)
61  return 0.0;
62  else
63  return (NormalDistribution::cdf(x, mean, std_dev) -
64  NormalDistribution::cdf(lower_bound, mean, std_dev)) /
65  (NormalDistribution::cdf(upper_bound, mean, std_dev) -
66  NormalDistribution::cdf(lower_bound, mean, std_dev));
67 }
68 
69 Real
71  const Real & mean,
72  const Real & std_dev,
73  const Real & lower_bound,
74  const Real & upper_bound)
75 {
76  return NormalDistribution::quantile(NormalDistribution::cdf(lower_bound, mean, std_dev) +
77  p * (NormalDistribution::cdf(upper_bound, mean, std_dev) -
78  NormalDistribution::cdf(lower_bound, mean, std_dev)),
79  mean,
80  std_dev);
81 }
82 
83 Real
84 TruncatedNormalDistribution::pdf(const Real & x) const
85 {
86  TIME_SECTION(_perf_pdf);
88 }
89 
90 Real
91 TruncatedNormalDistribution::cdf(const Real & x) const
92 {
93  TIME_SECTION(_perf_cdf);
95 }
96 
97 Real
99 {
100  TIME_SECTION(_perf_quantile);
102 }
TruncatedNormalDistribution.h
TruncatedNormalDistribution::cdf
virtual Real cdf(const Real &x) const override
Definition: TruncatedNormalDistribution.C:91
defineLegacyParams
defineLegacyParams(TruncatedNormalDistribution)
TruncatedNormalDistribution
A class used to generate a truncated normal distribution.
Definition: TruncatedNormalDistribution.h:22
TruncatedNormalDistribution::pdf
virtual Real pdf(const Real &x) const override
Definition: TruncatedNormalDistribution.C:84
NormalDistribution::cdf
virtual Real cdf(const Real &x) const override
Definition: NormalDistribution.C:76
NormalDistribution::_standard_deviation
const Real & _standard_deviation
The standard deviation of the distribution (sigma)
Definition: NormalDistribution.h:48
registerMooseObject
registerMooseObject("StochasticToolsApp", TruncatedNormalDistribution)
TruncatedNormalDistribution::_upper_bound
const Real & _upper_bound
The upper bound for the distribution.
Definition: TruncatedNormalDistribution.h:54
TruncatedNormalDistribution::TruncatedNormalDistribution
TruncatedNormalDistribution(const InputParameters &parameters)
Definition: TruncatedNormalDistribution.C:28
NormalDistribution::validParams
static InputParameters validParams()
Definition: NormalDistribution.C:25
TruncatedNormalDistribution::_lower_bound
const Real & _lower_bound
The lower bound for the distribution.
Definition: TruncatedNormalDistribution.h:51
TruncatedNormalDistribution::quantile
virtual Real quantile(const Real &p) const override
Definition: TruncatedNormalDistribution.C:98
NormalDistribution::quantile
virtual Real quantile(const Real &p) const override
Definition: NormalDistribution.C:83
TruncatedNormalDistribution::validParams
static InputParameters validParams()
Definition: TruncatedNormalDistribution.C:17
NormalDistribution::_mean
const Real & _mean
The mean (or expectation) of the distribution (mu)
Definition: NormalDistribution.h:45
NormalDistribution
A class used to generate a normal distribution.
Definition: NormalDistribution.h:22
NormalDistribution::pdf
virtual Real pdf(const Real &x) const override
Definition: NormalDistribution.C:69