LCOV - code coverage report
Current view: top level - src/distributions - Normal.C (source / functions) Hit Total Coverage
Test: idaholab/moose stochastic_tools: #32971 (54bef8) with base c6cf66 Lines: 31 32 96.9 %
Date: 2026-05-29 20:40:35 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       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 "Normal.h"
      11             : #include "math.h"
      12             : #include "libmesh/utility.h"
      13             : 
      14             : registerMooseObject("StochasticToolsApp", Normal);
      15             : 
      16             : const std::array<Real, 6> Normal::_a = {
      17             :     {-0.322232431088, -1.0, -0.342242088547, -0.0204231210245, -0.0000453642210148}};
      18             : 
      19             : const std::array<Real, 6> Normal::_b = {
      20             :     {0.099348462606, 0.588581570495, 0.531103462366, 0.10353775285, 0.0038560700634}};
      21             : 
      22             : InputParameters
      23        1916 : Normal::validParams()
      24             : {
      25        1916 :   InputParameters params = Distribution::validParams();
      26        1916 :   params.addClassDescription("Normal distribution");
      27        3832 :   params.addRequiredParam<Real>("mean", "Mean (or expectation) of the distribution.");
      28        3832 :   params.addRequiredRangeCheckedParam<Real>(
      29             :       "standard_deviation", "standard_deviation > 0", "Standard deviation of the distribution ");
      30        1916 :   return params;
      31           0 : }
      32             : 
      33         957 : Normal::Normal(const InputParameters & parameters)
      34             :   : Distribution(parameters),
      35         957 :     _mean(getParam<Real>("mean")),
      36        2871 :     _standard_deviation(getParam<Real>("standard_deviation"))
      37             : {
      38         957 : }
      39             : 
      40             : Real
      41       39737 : Normal::pdf(const Real & x, const Real & mean, const Real & std_dev)
      42             : {
      43       39737 :   return 1.0 / (std_dev * std::sqrt(2.0 * M_PI)) *
      44       39737 :          std::exp(-0.5 * Utility::pow<2>((x - mean) / std_dev));
      45             : }
      46             : 
      47             : Real
      48       34895 : Normal::cdf(const Real & x, const Real & mean, const Real & std_dev)
      49             : {
      50       34895 :   return 0.5 * (1.0 + std::erf((x - mean) / (std_dev * std::sqrt(2.0))));
      51             : }
      52             : 
      53             : Real
      54      477495 : Normal::quantile(const Real & p, const Real & mean, const Real & std_dev)
      55             : {
      56      477495 :   const Real x = (p < 0.5 ? p : 1.0 - p);
      57      477495 :   const Real y = std::sqrt(-2.0 * std::log(x));
      58      477495 :   const Real y2 = y * y;
      59      477495 :   const Real y3 = y2 * y;
      60      477495 :   const Real y4 = y3 * y;
      61      477495 :   const Real sgn = (p - 0.5 < 0.0 ? -1.0 : 1.0);
      62      477495 :   const Real Zp = sgn * (y + (_a[0] + _a[1] * y + _a[2] * y2 + _a[3] * y3 + _a[4] * y4) /
      63      477495 :                                  (_b[0] + _b[1] * y + _b[2] * y2 + _b[3] * y3 + _b[4] * y4));
      64      477495 :   return Zp * std_dev + mean;
      65             : }
      66             : 
      67             : Real
      68        6087 : Normal::pdf(const Real & x) const
      69             : {
      70        6087 :   return pdf(x, _mean, _standard_deviation);
      71             : }
      72             : 
      73             : Real
      74        1269 : Normal::cdf(const Real & x) const
      75             : {
      76        1269 :   return cdf(x, _mean, _standard_deviation);
      77             : }
      78             : 
      79             : Real
      80      467529 : Normal::quantile(const Real & p) const
      81             : {
      82      467529 :   return quantile(p, _mean, _standard_deviation);
      83             : }

Generated by: LCOV version 1.14