LCOV - code coverage report
Current view: top level - src/functions - PiecewiseLinearBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 26 45 57.8 %
Date: 2025-07-17 01:28:37 Functions: 8 13 61.5 %
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 "PiecewiseLinearBase.h"
      11             : 
      12             : InputParameters
      13       60037 : PiecewiseLinearBase::validParams()
      14             : {
      15       60037 :   InputParameters params = PiecewiseTabularBase::validParams();
      16       60037 :   params.addClassDescription("Linearly interpolates between pairs of x-y data");
      17       60037 :   return params;
      18           0 : }
      19             : 
      20        1579 : PiecewiseLinearBase::PiecewiseLinearBase(const InputParameters & parameters)
      21        1579 :   : PiecewiseTabularBase(parameters), _linear_interp(nullptr), _interpolation_created(false)
      22             : {
      23        1515 : }
      24             : 
      25             : void
      26          13 : PiecewiseLinearBase::initialSetup()
      27             : {
      28          13 :   if (!_linear_interp)
      29           0 :     mooseError("Classes derived from PiecewiseLinearBase need to call buildInterpolation()");
      30          13 : }
      31             : 
      32             : void
      33        1515 : PiecewiseLinearBase::buildInterpolation(const bool extrap)
      34             : {
      35             :   // try building a linear interpolation object
      36             :   try
      37             :   {
      38        1515 :     _linear_interp = std::make_unique<LinearInterpolation>(_raw_x, _raw_y, extrap);
      39             :   }
      40           0 :   catch (std::domain_error & e)
      41             :   {
      42           0 :     mooseError("In PiecewiseLinearBase ", _name, ": ", e.what());
      43           0 :   }
      44        1515 : }
      45             : 
      46             : Real
      47      638179 : PiecewiseLinearBase::value(Real t, const Point & p) const
      48             : {
      49      638179 :   const auto x = _has_axis ? p(_axis) : t;
      50      638179 :   return _scale_factor * _linear_interp->sample(x);
      51             : }
      52             : 
      53             : ADReal
      54           0 : PiecewiseLinearBase::value(const ADReal & t, const ADPoint & p) const
      55             : {
      56           0 :   const auto x = _has_axis ? p(_axis) : t;
      57           0 :   return _scale_factor * _linear_interp->sample(x);
      58           0 : }
      59             : 
      60             : Real
      61         576 : PiecewiseLinearBase::timeDerivative(Real t, const Point &) const
      62             : {
      63         576 :   return _has_axis ? 0.0 : _scale_factor * _linear_interp->sampleDerivative(t);
      64             : }
      65             : 
      66             : RealGradient
      67           0 : PiecewiseLinearBase::gradient(Real, const Point & p) const
      68             : {
      69           0 :   RealGradient ret;
      70           0 :   if (_has_axis)
      71           0 :     ret(_axis) = _scale_factor * _linear_interp->sampleDerivative(p(_axis));
      72           0 :   return ret;
      73             : }
      74             : 
      75             : Real
      76           0 : PiecewiseLinearBase::integral() const
      77             : {
      78           0 :   return _scale_factor * _linear_interp->integrate();
      79             : }
      80             : 
      81             : Real
      82           0 : PiecewiseLinearBase::average() const
      83             : {
      84           0 :   return integral() /
      85           0 :          (_linear_interp->domain(_linear_interp->getSampleSize() - 1) - _linear_interp->domain(0));
      86             : }
      87             : 
      88             : Real
      89           6 : PiecewiseLinearBase::timeIntegral(Real t1, Real t2, const Point & p) const
      90             : {
      91           6 :   if (_has_axis)
      92             :     // function is constant in time; evaluate at arbitrary point in time
      93             :     // and multiply by time integral domain width
      94           1 :     return value(t1, p) * (t2 - t1);
      95             :   else
      96             :     // function is piecewise linear in time
      97           5 :     return _scale_factor * _linear_interp->integratePartial(t1, t2);
      98             : }
      99             : 
     100             : void
     101          13 : PiecewiseLinearBase::setData(const std::vector<Real> & x, const std::vector<Real> & y)
     102             : {
     103          13 :   PiecewiseTabularBase::setData(x, y);
     104          13 :   buildInterpolation();
     105          13 : }

Generated by: LCOV version 1.14