1
// Copyright (C) 2003-2005 Anders Logg.
2
// Licensed under the GNU LGPL Version 2.1.
4
// First added: 2003-06-03
8
#include <dolfin/dolfin_log.h>
9
#include <dolfin/Legendre.h>
11
using namespace dolfin;
13
//-----------------------------------------------------------------------------
14
Legendre::Legendre(int n)
17
error("Degree for Legendre polynomial must be non-negative.");
21
//-----------------------------------------------------------------------------
22
real Legendre::operator() (real x)
26
//-----------------------------------------------------------------------------
27
real Legendre::ddx(real x)
31
//-----------------------------------------------------------------------------
32
real Legendre::d2dx(real x)
36
//-----------------------------------------------------------------------------
37
real Legendre::eval(int n, real x)
47
// Recurrence, BETA page 254
49
return ( (2.0*nn-1.0)*x*eval(n-1, x) - (nn-1.0)*eval(n-2, x) ) / nn;
51
//-----------------------------------------------------------------------------
52
real Legendre::ddx(int n, real x)
62
// Avoid division by zero
63
if ( fabs(x - 1.0) < DOLFIN_EPS )
65
if ( fabs(x + 1.0) < DOLFIN_EPS )
68
// Formula, BETA page 254
70
return nn * (x*eval(n, x) - eval(n-1, x)) / (x*x - 1.0);
72
//-----------------------------------------------------------------------------
73
real Legendre::d2dx(int, real x)
83
// Avoid division by zero
84
if ( fabs(x - 1.0) < DOLFIN_EPS )
86
if ( fabs(x + 1.0) < DOLFIN_EPS )
89
// Formula, BETA page 254
91
return ( 2.0*x*ddx(n, x) - nn*(nn+1)*eval(n, x) ) / (1.0-x*x);
93
//-----------------------------------------------------------------------------