LCOV - code coverage report
Current view: top level - include/solution_transfer - radial_basis_functions.h (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4229 (6a9aeb) with base 727f46 Lines: 7 19 36.8 %
Date: 2025-08-19 19:27:09 Functions: 2 8 25.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // The libMesh Finite Element Library.
       2             : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
       3             : 
       4             : // This library is free software; you can redistribute it and/or
       5             : // modify it under the terms of the GNU Lesser General Public
       6             : // License as published by the Free Software Foundation; either
       7             : // version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             : // This library is distributed in the hope that it will be useful,
      10             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             : // Lesser General Public License for more details.
      13             : 
      14             : // You should have received a copy of the GNU Lesser General Public
      15             : // License along with this library; if not, write to the Free Software
      16             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      17             : 
      18             : 
      19             : 
      20             : #ifndef LIBMESH_RADIAL_BASIS_FUNCTIONS_H
      21             : #define LIBMESH_RADIAL_BASIS_FUNCTIONS_H
      22             : 
      23             : // C++ includes
      24             : #include <limits>
      25             : 
      26             : // Local includes
      27             : #include "libmesh/libmesh_common.h"
      28             : #include "libmesh/utility.h"
      29             : 
      30             : 
      31             : 
      32             : namespace libMesh
      33             : {
      34             : 
      35             : // /**
      36             : //  * Simple radial basis function.
      37             : //  */
      38             : // class SimpleRBF
      39             : // {
      40             : // private:
      41             : //   const Real _rcut;
      42             : 
      43             : // public:
      44             : 
      45             : //   /**
      46             : //    * Constructor.
      47             : //    */
      48             : //   SimpleRBF (const Real r_cut = 1.) :
      49             : //     _rcut (r_cut)
      50             : //   {}
      51             : 
      52             : //   /**
      53             : //    * Evaluate the radial basis function at the requested location.
      54             : //    */
      55             : //   Real operator()(Real rad) const
      56             : //   {
      57             : //     if (rad > _rcut) return 0.;
      58             : 
      59             : //     rad /= _rcut;
      60             : 
      61             : //     return std::sqrt( 1+ rad*rad );
      62             : //   }
      63             : // };
      64             : 
      65             : 
      66             : 
      67             : /**
      68             :  * Wendland's compactly supported Radial Basis Functions.
      69             :  *
      70             :  * \author Benjamin S. Kirk
      71             :  * \date 2013
      72             :  * \brief Interface for evaluating Wendland's radial basis functions.
      73             :  */
      74             : template <unsigned int SpaceDim, unsigned int Continuity>
      75             : class WendlandRBF
      76             : {
      77             : private:
      78             :   const Real _rcut;
      79             : 
      80             : public:
      81             : 
      82             :   /**
      83             :    * Constructor.
      84             :    */
      85        2954 :   WendlandRBF (const Real r_cut = 1.) :
      86        2954 :     _rcut (r_cut)
      87        2954 :   { libmesh_experimental(); }
      88             : 
      89             :   /**
      90             :    * Evaluate the radial basis function at the requested location.
      91             :    */
      92             :   Real operator()(Real /* rad */) const { libmesh_not_implemented(); return 0.; }
      93             : };
      94             : 
      95             : 
      96             : 
      97             : //-------------------------------------------------------
      98             : // Explicit specializations
      99             : template<>
     100             : inline
     101           0 : Real WendlandRBF<3,0>::operator()(Real rad) const
     102             : {
     103           0 :   if (rad > _rcut) return 0.;
     104             : 
     105           0 :   rad /= _rcut;
     106             : 
     107           0 :   return Utility::pow<2>(1.-rad);
     108             : }
     109             : 
     110             : template<>
     111             : inline
     112    20186300 : Real WendlandRBF<3,2>::operator()(Real rad) const
     113             : {
     114   496186097 :   if (rad > _rcut) return 0.;
     115             : 
     116   496186066 :   rad /= _rcut;
     117             : 
     118   516372366 :   return Utility::pow<4>(1.-rad)*(4.*rad + 1.);
     119             : }
     120             : 
     121             : template<>
     122             : inline
     123           0 : Real WendlandRBF<3,4>::operator()(Real rad) const
     124             : {
     125           0 :   if (rad > _rcut) return 0.;
     126             : 
     127           0 :   rad /= _rcut;
     128             : 
     129           0 :   return Utility::pow<6>(1.-rad)*((35.*rad + 18.)*rad + 3.);
     130             : }
     131             : 
     132             : template<>
     133             : inline
     134           0 : Real WendlandRBF<3,8>::operator()(Real rad) const
     135             : {
     136           0 :   if (rad > _rcut) return 0.;
     137             : 
     138           0 :   rad /= _rcut;
     139             : 
     140           0 :   return Utility::pow<8>(1.-rad)*(((32.*rad + 25.)*rad + 8.)*rad + 1.);
     141             : }
     142             : 
     143             : 
     144             : } // namespace libMesh
     145             : 
     146             : 
     147             : #endif // #define LIBMESH_RADIAL_BASIS_FUNCTIONS_H

Generated by: LCOV version 1.14