23char sx_1d_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/sx_1d.C,v 1.4 2015/03/05 08:49:32 j_novak Exp $" ;
51#include "type_parite.h"
75void _sx_1d_pas_prevu(
int ,
double* ,
double *) {
76 cout <<
"sx_1d : base not implemented..." << endl ;
86void _sx_1d_r_chebp (
int nr,
double* tb,
double* res) {
91 som = 2 * sign * tb[nr-1] ;
93 for (
int i=nr-3 ; i>=0 ; i--) {
95 som += 2 * sign * tb[i+1] ;
96 res[i] = (i%2 == 0 ? -1 : 1) * som ;
106void _sx_1d_r_chebi (
int nr,
double* tb,
double* res) {
111 som = 2 * sign * tb[nr-2] ;
113 for (
int i=nr-3 ; i>=0 ; i--) {
115 som += 2 * sign * tb[i] ;
116 res[i] = (i%2 == 0 ? -1 : 1) * som ;
125void _sx_1d_r_chebu (
int nr,
double* tb,
double* res) {
127 for (
int i=0; i<nr; i++)
130 sxm1_1d_cheb(nr, res) ;
138void _sx_1d_r_legp (
int nr,
double* tb,
double* res) {
142 for (
int i=nr-2 ; i>=0 ; i--) {
144 res[i] = double(4*i+3)/double(2*i+2)*term ;
145 term *= -double(2*i+1)/double(2*i+2) ;
155void _sx_1d_r_legi (
int nr,
double* tb,
double* res) {
159 for (
int i=nr-2; i>=0; i--) {
161 res[i] = double(4*i+1)/double(2*i+1)*term ;
162 term *= -double(2*i)/double(2*i+1) ;
172void sx_1d(
int nr,
double **tb,
int base_r)
175 static void (*sx_1d[
MAX_BASE])(int,
double *,
double *) ;
182 sx_1d[i] = _sx_1d_pas_prevu ;
193 double *result =
new double[nr] ;
194 sx_1d[base_r](nr, *tb, result) ;
#define R_LEGP
base de Legendre paire (rare) seulement
#define MAX_BASE
Nombre max. de bases differentes.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define R_LEGI
base de Legendre impaire (rare) seulement
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEBP
base de Cheb. paire (rare) seulement