23char multx2_1d_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/multx2_1d.C,v 1.5 2015/03/05 08:49:32 j_novak Exp $" ;
57#include "type_parite.h"
65void _multx2_1d_pas_prevu(
int nr,
double* tb,
double *res) {
66 cout <<
"multx2 pas prevu..." << tb <<
" " << res << endl ;
67 cout <<
"nr : " << nr << endl ;
76void _multx2_1d_r_chebp(
int nr,
double* tb,
double *xo) {
80 xo[0] = (2*tb[0]+tb[1])/4 ;
81 xo[1] = (2*tb[0]+2*tb[1]+tb[2])/4 ;
83 for (
int i=2 ; i<nr-1 ; i++)
84 xo[i] = (tb[i-1]+2*tb[i]+tb[i+1])/4 ;
86 xo[nr-1] = (tb[nr-2]+2*tb[nr-1])/4 ;
94void _multx2_1d_r_chebi(
int nr,
double* tb,
double *xo){
98 xo[0] = (3*tb[0]+tb[1])/4 ;
100 for (
int i=1 ; i<nr-1 ; i++)
101 xo[i] = (tb[i-1]+2*tb[i]+tb[i+1])/4 ;
110void _multx2_1d_r_cheb(
int nr,
double* tb,
double *xo){
114 xo[0] = (2*tb[0]+tb[2])/4 ;
115 xo[1] = (3*tb[1]+tb[3])/4 ;
116 xo[2] = (2*tb[0]+2*tb[2]+tb[4])/4 ;
118 for (
int i=3 ; i<nr-2 ; i++)
119 xo[i] = (tb[i-2]+2*tb[i]+tb[i+2])/4 ;
121 for (
int i=nr-2 ; i<nr ; i++)
122 xo[i] = (tb[i-2]+2*tb[i])/4 ;
130void _multx2_1d_r_legp(
int nr,
double* tb,
double *xo) {
134 xo[0] = tb[0]/3. + 2.*tb[1]/15. ;
136 for (
int i=1 ; i<nr-1 ; i++)
137 xo[i] =
double(2*i*(2*i-1))*tb[i-1]/double((4*i-1)*(4*i-3))
138 + (double(4*i*i)/double((4*i-1)*(4*i+1))
139 + double((2*i+1)*(2*i+1))/double((4*i+1)*(4*i+3)))*tb[i]
140 +
double((2*i+1)*(2*i+2))*tb[i+1]/double((4*i+3)*(4*i+5)) ;
141 xo[nr-1] = double((2*nr-2)*(2*nr-3))*tb[nr-2]/double((4*nr-5)*(4*nr-7))
142 + (double(4*(nr-1)*(nr-1))/double((4*nr-5)*(4*nr-3))
143 + double((2*nr-1)*(2*nr-1))/double((4*nr-3)*(4*nr-1)))*tb[nr-1] ;
151void _multx2_1d_r_legi(
int nr,
double* tb,
double *xo){
155 xo[0] = 0.6*tb[0] + 6.*tb[1]/35. ;
157 for (
int i=1 ; i<nr-1 ; i++)
158 xo[i] =
double(2*i*(2*i+1))*tb[i-1]/double((4*i+1)*(4*i-1))
159 + (double((2*i+1)*(2*i+1))/double((4*i+1)*(4*i+3))
160 + double((2*i+2)*(2*i+2))/double((4*i+3)*(4*i+5)) )*tb[i]
161 +
double((2*i+2)*(2*i+3))*tb[i+1]/double((4*i+7)*(4*i+5)) ;
169void _multx2_1d_r_leg(
int nr,
double* tb,
double *xo){
173 xo[0] = tb[0]/3. + 2.*tb[2]/15. ;
174 xo[1] = 0.6*tb[1] + 6.*tb[3]/35. ;
175 for (
int i=2 ; i<nr-2 ; i++)
176 xo[i] =
double(i*(i-1))*tb[i-2]/double((2*i-1)*(2*i-3))
177 + (double(i*i)/double((2*i-1)*(2*i+1))
178 + double((i+1)*(i+1))/double((2*i+1)*(2*i+3)))*tb[i]
179 +
double((i+1)*(i+2))*tb[i+2]/double((2*i+3)*(2*i+5)) ;
180 for (
int i=nr-2 ; i<nr ; i++)
181 xo[i] =
double(i*(i-1))*tb[i-2]/double((2*i-1)*(2*i-3))
182 + (double(i*i)/double((2*i-1)*(2*i+1))
183 + double((i+1)*(i+1))/double((2*i+1)*(2*i+3)))*tb[i] ;
193void multx2_1d(
int nr,
double **tb,
int base_r)
197static void (*multx2_1d[
MAX_BASE])(int,
double *,
double*) ;
204 multx2_1d[i] = _multx2_1d_pas_prevu ;
210 multx2_1d[
R_LEG >>
TRA_R] = _multx2_1d_r_leg ;
215 double *result =
new double[nr] ;
216 multx2_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_LEGI
base de Legendre impaire (rare) seulement
#define R_CHEBI
base de Cheb. impaire (rare) seulement
#define R_LEG
base de Legendre ordinaire (fin)
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
#define R_CHEB
base de Chebychev ordinaire (fin)
#define R_CHEBP
base de Cheb. paire (rare) seulement