//
// This file is part of the book "Language C++ et calcul scientifique"
//
// Copyright (C) 2005-2012 Pierre Saramito <Pierre.Saramito@imag.fr>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
#include <valarray>
template <typename T>
std::valarray<T>
interpolate (size_t n, T (*v)(const T&, const T&)) {
  std::valarray<T> pi_h_v ((n+1)*(n+1));
  T h = 2.0/n;
  for (size_t j = 0; j < n+1; j++)
    for (size_t i = 0; i < n+1; i++)
      pi_h_v [i+j*(n+1)] = v (-1+i*h, -1+j*h);
  return pi_h_v;
}
