www.mooseframework.org
WeibullDistribution.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 
10 #include "WeibullDistribution.h"
11 #include "math.h"
12 #include "libmesh/utility.h"
13 
14 registerMooseObject("StochasticToolsApp", WeibullDistribution);
15 
17 
18 InputParameters
20 {
21  InputParameters params = Distribution::validParams();
22  params.addClassDescription("Three-parameter Weibull distribution.");
23  params.addRequiredParam<Real>("location", "Location parameter (a or low)");
24  params.addRequiredRangeCheckedParam<Real>("scale", "scale > 0", "Scale parameter (b or lambda)");
25  params.addRequiredRangeCheckedParam<Real>("shape", "shape > 0", "Shape parameter (c or k)");
26  return params;
27 }
28 
29 WeibullDistribution::WeibullDistribution(const InputParameters & parameters)
30  : Distribution(parameters),
31  _a(getParam<Real>("location")),
32  _b(getParam<Real>("scale")),
33  _c(getParam<Real>("shape"))
34 {
35 }
36 
37 Real
38 WeibullDistribution::pdf(const Real & x,
39  const Real & location,
40  const Real & scale,
41  const Real & shape)
42 {
43  if (x <= location)
44  return 0.0;
45  else
46  {
47  const Real y = (x - location) / scale;
48  return shape / scale * std::pow(y, shape - 1.0) * std::exp(-std::pow(y, shape));
49  }
50 }
51 
52 Real
53 WeibullDistribution::cdf(const Real & x,
54  const Real & location,
55  const Real & scale,
56  const Real & shape)
57 {
58  if (x <= location)
59  return 0.0;
60  else
61  {
62  const Real y = (x - location) / scale;
63  return 1.0 - std::exp(-std::pow(y, shape));
64  }
65 }
66 
67 Real
69  const Real & location,
70  const Real & scale,
71  const Real & shape)
72 {
73  return location + scale * std::pow(-std::log(1 - p), 1.0 / shape);
74 }
75 
76 Real
77 WeibullDistribution::pdf(const Real & x) const
78 {
79  TIME_SECTION(_perf_pdf);
80  return pdf(x, _a, _b, _c);
81 }
82 
83 Real
84 WeibullDistribution::cdf(const Real & x) const
85 {
86  TIME_SECTION(_perf_cdf);
87  return cdf(x, _a, _b, _c);
88 }
89 
90 Real
91 WeibullDistribution::quantile(const Real & p) const
92 {
93  TIME_SECTION(_perf_quantile);
94  return quantile(p, _a, _b, _c);
95 }
WeibullDistribution::_b
const Real & _b
The scale parameter (b or lambda)
Definition: WeibullDistribution.h:43
registerMooseObject
registerMooseObject("StochasticToolsApp", WeibullDistribution)
WeibullDistribution
A class used to generate a three-parameter Weibull distribution.
Definition: WeibullDistribution.h:22
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
WeibullDistribution::validParams
static InputParameters validParams()
Definition: WeibullDistribution.C:19
defineLegacyParams
defineLegacyParams(WeibullDistribution)
WeibullDistribution::WeibullDistribution
WeibullDistribution(const InputParameters &parameters)
Definition: WeibullDistribution.C:29
WeibullDistribution.h
validParams
InputParameters validParams()
WeibullDistribution::quantile
virtual Real quantile(const Real &p) const override
Definition: WeibullDistribution.C:91
WeibullDistribution::_c
const Real & _c
The shape parameter (c or k)
Definition: WeibullDistribution.h:46
WeibullDistribution::cdf
virtual Real cdf(const Real &x) const override
Definition: WeibullDistribution.C:84
WeibullDistribution::_a
const Real & _a
The location parameter (a or low)
Definition: WeibullDistribution.h:40
WeibullDistribution::pdf
virtual Real pdf(const Real &x) const override
Definition: WeibullDistribution.C:77