// SpaFEDTe, a Template based C++ library for creating 
// Discontinuous Finite Element Spaces,
// Copyright (C) 2012 Lorenzo Alessio Botti

/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Lesser General Public */ 
/* License as published by the Free Software Foundation either */ 
/* version 3.0 of the License, or (at your option) any later version. */

/* This software is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */
/* Lesser General Public License for more details. */

/* You should have received a copy of the GNU Lesser General Public */
/* License along with this software; if not, a copy of the full */
/* GNU Lesser General Public License can be found at */
/* http://www.gnu.org/licenses/. */

#ifndef __jacoby_poly_h
#define __jacoby_poly_h

#include "Quadrature.hpp"
#include <math.h>
#include <cassert>
#include <iostream>
#include <cassert>
#include <iomanip>

struct JacobiPoly
{
  typedef Quadrature::RealVector RealVector;

  static double evalJacobi(double a, double b, unsigned int n, double x);
  
  static double evalJacobiDeriv(double a, double b, unsigned int n, double x); 
  
  static double evalJacobiSecondDeriv(double a, double b, unsigned int n, double x); 
  
  static void jacobiGaussQpoints (double a, double b, unsigned int n, RealVector& qPoints);
  
  static void legendreGaussQpointsWeights (unsigned int n, RealVector& qPoints, RealVector& qWeights);
};

#endif
