25char op_sx2_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/op_sx2.C,v 1.4 2015/03/05 08:49:32 j_novak Exp $" ;
81void _sx_1d_r_legp(
int,
double* ,
double *) ;
82void _sx_1d_r_legi(
int,
double* ,
double *) ;
89void _sx2_pas_prevu(Tbl * tb,
int& base) {
90 cout <<
"sx pas prevu..." << endl ;
91 cout <<
"Tbl: " << tb <<
" base: " << base << endl ;
100void _sx2_identite(Tbl* ,
int& ) {
107void _sx2_r_chebp(Tbl* tb,
int&)
110 if (tb->get_etat() == ETATZERO) {
115 int nr = (tb->dim).dim[0] ;
116 int nt = (tb->dim).dim[1] ;
117 int np = (tb->dim).dim[2] ;
121 double* xo =
new double [tb->get_taille()];
124 for (
int i=0; i<tb->get_taille(); i++) {
133 for (
int k=0 ; k<np+1 ; k++)
140 for (
int j=0 ; j<nt ; j++) {
146 somp = 4 * sgn * (nr-1) * xci[nr-1] ;
147 somn = 2 * sgn * xci[nr-1] ;
148 xco[nr-2] = somp - 2*(nr-2)*somn ;
149 for (
int i = nr-3 ; i >= 0 ; i-- ) {
151 somp += 4 * (i+1) * sgn * xci[i+1] ;
152 somn += 2 * sgn * xci[i+1] ;
153 xco[i] = somp - 2*i * somn ;
155 for (
int i=0 ; i<nr ; i+=2) {
177void _sx2_r_chebi(Tbl* tb,
int&)
181 if (tb->get_etat() == ETATZERO) {
186 int nr = (tb->dim).dim[0] ;
187 int nt = (tb->dim).dim[1] ;
188 int np = (tb->dim).dim[2] ;
192 double* xo =
new double [tb->get_taille()];
195 for (
int i=0; i<tb->get_taille(); i++) {
204 for (
int k=0 ; k<np+1 ; k++)
210 for (
int j=0 ; j<nt ; j++) {
216 somp = 2 * sgn * (2*(nr-1)+1) * xci[nr-1] ;
217 somn = 2 * sgn * xci[nr-1] ;
218 xco[nr-2] = somp - (2*(nr-2)+1)*somn ;
219 for (
int i = nr-3 ; i >= 0 ; i-- ) {
221 somp += 2 * (2*(i+1)+1) * sgn * xci[i+1] ;
222 somn += 2 * sgn * xci[i+1] ;
223 xco[i] = somp - (2*i+1) * somn ;
225 for (
int i=0 ; i<nr ; i+=2) {
246void _sx2_r_chebpim_p(Tbl* tb,
int&)
250 if (tb->get_etat() == ETATZERO) {
255 int nr = (tb->dim).dim[0] ;
256 int nt = (tb->dim).dim[1] ;
257 int np = (tb->dim).dim[2] ;
261 double* xo =
new double [tb->get_taille()];
264 for (
int i=0; i<tb->get_taille(); i++) {
277 for (
int k=0 ; k<np+1 ; k += 4) {
278 auxiliaire = (k==np) ? 1 : 2 ;
279 for (
int kmod=0 ; kmod<auxiliaire ; kmod++) {
282 if ((k==0) && (kmod==1)) {
288 for (
int j=0 ; j<nt ; j++) {
294 somp = 4 * sgn * (nr-1) * xci[nr-1] ;
295 somn = 2 * sgn * xci[nr-1] ;
296 xco[nr-2] = somp - 2*(nr-2)*somn ;
297 for (
int i = nr-3 ; i >= 0 ; i-- ) {
299 somp += 4 * (i+1) * sgn * xci[i+1] ;
300 somn += 2 * sgn * xci[i+1] ;
301 xco[i] = somp - 2*i * somn ;
303 for (
int i=0 ; i<nr ; i+=2) {
319 for (
int k=2 ; k<np+1 ; k += 4) {
321 auxiliaire = (k==np) ? 1 : 2 ;
322 for (
int kmod=0 ; kmod<auxiliaire ; kmod++) {
323 for (
int j=0 ; j<nt ; j++) {
329 somp = 2 * sgn * (2*(nr-1)+1) * xci[nr-1] ;
330 somn = 2 * sgn * xci[nr-1] ;
331 xco[nr-2] = somp - (2*(nr-2)+1)*somn ;
332 for (
int i = nr-3 ; i >= 0 ; i-- ) {
334 somp += 2 * (2*(i+1)+1) * sgn * xci[i+1] ;
335 somn += 2 * sgn * xci[i+1] ;
336 xco[i] = somp - (2*i+1) * somn ;
338 for (
int i=0 ; i<nr ; i+=2) {
363void _sx2_r_chebpim_i(Tbl* tb,
int&)
367 if (tb->get_etat() == ETATZERO) {
372 int nr = (tb->dim).dim[0] ;
373 int nt = (tb->dim).dim[1] ;
374 int np = (tb->dim).dim[2] ;
378 double* xo =
new double [tb->get_taille()];
381 for (
int i=0; i<tb->get_taille(); i++) {
394 for (
int k=0 ; k<np+1 ; k += 4) {
396 auxiliaire = (k==np) ? 1 : 2 ;
397 for (
int kmod=0 ; kmod<auxiliaire ; kmod++) {
402 if ((k==0) && (kmod == 1)) {
408 for (
int j=0 ; j<nt ; j++) {
414 somp = 2 * sgn * (2*(nr-1)+1) * xci[nr-1] ;
415 somn = 2 * sgn * xci[nr-1] ;
416 xco[nr-2] = somp - (2*(nr-2)+1)*somn ;
417 for (
int i = nr-3 ; i >= 0 ; i-- ) {
419 somp += 2 * (2*(i+1)+1) * sgn * xci[i+1] ;
420 somn += 2 * sgn * xci[i+1] ;
421 xco[i] = somp - (2*i+1) * somn ;
423 for (
int i=0 ; i<nr ; i+=2) {
438 for (
int k=2 ; k<np+1 ; k += 4) {
440 auxiliaire = (k==np) ? 1 : 2 ;
441 for (
int kmod=0 ; kmod<auxiliaire ; kmod++) {
442 for (
int j=0 ; j<nt ; j++) {
448 somp = 4 * sgn * (nr-1) * xci[nr-1] ;
449 somn = 2 * sgn * xci[nr-1] ;
450 xco[nr-2] = somp - 2*(nr-2)*somn ;
451 for (
int i = nr-3 ; i >= 0 ; i-- ) {
453 somp += 4 * (i+1) * sgn * xci[i+1] ;
454 somn += 2 * sgn * xci[i+1] ;
455 xco[i] = somp - 2*i * somn ;
457 for (
int i=0 ; i<nr ; i+=2) {
482void _sx2_r_chebu(Tbl* tb,
int&)
485 if (tb->get_etat() == ETATZERO) {
490 int nr = (tb->dim).dim[0] ;
491 int nt = (tb->dim).dim[1] ;
492 int np = (tb->dim).dim[2] ;
497 for (
int k=0 ; k<np+1 ; k++) {
499 for (
int j=0 ; j<nt ; j++) {
501 double* cf = tb->t + k*ntnr + j*nr ;
502 sxm1_1d_cheb(nr, cf) ;
503 sxm1_1d_cheb(nr, cf) ;
515void _sx2_r_chebpi_p(Tbl* tb,
int&)
518 if (tb->get_etat() == ETATZERO) {
523 int nr = (tb->dim).dim[0] ;
524 int nt = (tb->dim).dim[1] ;
525 int np = (tb->dim).dim[2] ;
529 double* xo =
new double [tb->get_taille()];
532 for (
int i=0; i<tb->get_taille(); i++) {
541 for (
int k=0 ; k<np+1 ; k++)
548 for (
int j=0 ; j<nt ; j++) {
555 somp = 4 * sgn * (nr-1) * xci[nr-1] ;
556 somn = 2 * sgn * xci[nr-1] ;
557 xco[nr-2] = somp - 2*(nr-2)*somn ;
558 for (
int i = nr-3 ; i >= 0 ; i-- ) {
560 somp += 4 * (i+1) * sgn * xci[i+1] ;
561 somn += 2 * sgn * xci[i+1] ;
562 xco[i] = somp - 2*i * somn ;
564 for (
int i=0 ; i<nr ; i+=2) {
573 somp = 2 * sgn * (2*(nr-1)+1) * xci[nr-1] ;
574 somn = 2 * sgn * xci[nr-1] ;
575 xco[nr-2] = somp - (2*(nr-2)+1)*somn ;
576 for (
int i = nr-3 ; i >= 0 ; i-- ) {
578 somp += 2 * (2*(i+1)+1) * sgn * xci[i+1] ;
579 somn += 2 * sgn * xci[i+1] ;
580 xco[i] = somp - (2*i+1) * somn ;
582 for (
int i=0 ; i<nr ; i+=2) {
603void _sx2_r_chebpi_i(Tbl* tb,
int&)
607 if (tb->get_etat() == ETATZERO) {
612 int nr = (tb->dim).dim[0] ;
613 int nt = (tb->dim).dim[1] ;
614 int np = (tb->dim).dim[2] ;
618 double* xo =
new double [tb->get_taille()];
621 for (
int i=0; i<tb->get_taille(); i++) {
630 for (
int k=0 ; k<np+1 ; k++)
636 for (
int j=0 ; j<nt ; j++) {
643 somp = 4 * sgn * (nr-1) * xci[nr-1] ;
644 somn = 2 * sgn * xci[nr-1] ;
645 xco[nr-2] = somp - 2*(nr-2)*somn ;
646 for (
int i = nr-3 ; i >= 0 ; i-- ) {
648 somp += 4 * (i+1) * sgn * xci[i+1] ;
649 somn += 2 * sgn * xci[i+1] ;
650 xco[i] = somp - 2*i * somn ;
652 for (
int i=0 ; i<nr ; i+=2) {
661 somp = 2 * sgn * (2*(nr-1)+1) * xci[nr-1] ;
662 somn = 2 * sgn * xci[nr-1] ;
663 xco[nr-2] = somp - (2*(nr-2)+1)*somn ;
664 for (
int i = nr-3 ; i >= 0 ; i-- ) {
666 somp += 2 * (2*(i+1)+1) * sgn * xci[i+1] ;
667 somn += 2 * sgn * xci[i+1] ;
668 xco[i] = somp - (2*i+1) * somn ;
670 for (
int i=0 ; i<nr ; i+=2) {
690void _sx2_r_legp(Tbl* tb,
int&)
693 if (tb->get_etat() == ETATZERO) {
698 int nr = (tb->dim).dim[0] ;
699 int nt = (tb->dim).dim[1] ;
700 int np = (tb->dim).dim[2] ;
704 double* xo =
new double [tb->get_taille()];
707 double* interm =
new double[nr] ;
710 for (
int i=0; i<tb->get_taille(); i++) {
719 for (
int k=0 ; k<np+1 ; k++)
726 for (
int j=0 ; j<nt ; j++) {
727 _sx_1d_r_legp(nr, xci, interm) ;
728 _sx_1d_r_legi(nr, interm, xco) ;
748void _sx2_r_legi(Tbl* tb,
int&)
752 if (tb->get_etat() == ETATZERO) {
757 int nr = (tb->dim).dim[0] ;
758 int nt = (tb->dim).dim[1] ;
759 int np = (tb->dim).dim[2] ;
763 double* xo =
new double [tb->get_taille()];
766 double* interm =
new double[nr] ;
769 for (
int i=0; i<tb->get_taille(); i++) {
778 for (
int k=0 ; k<np+1 ; k++)
784 for (
int j=0 ; j<nt ; j++) {
785 _sx_1d_r_legi(nr, xci, interm) ;
786 _sx_1d_r_legp(nr, interm, xco) ;