/usr/include/rheolef/jacobi.icc is in librheolef-dev 6.5-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /// This file is part of Rheolef.
///
/// Copyright (C) 2000-2009 Pierre Saramito
///
/// Rheolef 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 2 of the License, or
/// (at your option) any later version.
///
/// Rheolef 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 Rheolef; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/// lexer for qmg mesh files
/// =========================================================================
#include <cstdlib>
template <class T>
class jacobi {
public:
jacobi (size_t R1, T alpha1, T beta1)
: R(R1), alpha(alpha1), beta(beta1) {}
T operator() (T x) const {
if (R == 0) return 1;
T P_prev = 1;
T P = ((alpha+beta+2)*x + alpha - beta)/2;
for (size_t r = 1; r < R; r++) {
T P_save = P;
T a = (beta*beta - alpha*alpha)/((alpha+beta+T(2*r))*(alpha+beta+T(2*r+2)));
T b = 2*(alpha+T(r))*(beta+T(r))/((alpha+beta+T(2*r))*(alpha+beta+T(2*r+1)));
T c = 2*T(r+1)*(alpha+beta+T(r+1))/((alpha+beta+T(2*r+1))*(alpha+beta+T(2*r+2)));
P = ((x-a)*P - b*P_prev)/c;
P_prev = P_save;
}
return P;
}
protected:
size_t R;
T alpha, beta;
};
|