23char cfrleg_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Coef/cfrleg.C,v 1.5 2014/10/13 08:53:09 j_novak Exp $" ;
57#include "utilitaires.h"
60void get_legendre_data(
int, Tbl*&, Tbl*& ) ;
64void cfrleg(
const int* deg,
const int* dimf,
double* ff,
const int* dimc,
82 cout <<
"cfrleg: nr > n3f : nr = " << nr <<
" , n3f = "
88 cout <<
"cfrleg: nr > n3c : nr = " << nr <<
" , n3c = "
94 cout <<
"cfrleg: n1f > n1c : n1f = " << n1f <<
" , n1c = "
100 cout <<
"cfrleg: n2f > n2c : n2f = " << n2f <<
" , n2c = "
108 get_legendre_data(nr, Pni, wn) ;
109 assert( (Pni != 0x0) && (wn != 0x0) ) ;
110 double* cf_tmp =
new double[nr] ;
114 int n2n3f = n2f * n3f ;
115 int n2n3c = n2c * n3c ;
123 int borne_phi = ( n1f > 1 ) ? n1f-1 : 1 ;
125 for (
int j=0; j< borne_phi; j++) {
129 for (
int k=0; k<n2f; k++) {
131 int i0 = n2n3f * j + n3f * k ;
132 double* ff0 = ff + i0 ;
134 i0 = n2n3c * j + n3c * k ;
135 double* cf0 = cf + i0 ;
137 for (
int ii=0; ii<nr; ii++) {
139 for (
int jj = 0; jj<nr; jj++)
140 cf_tmp[ii] += ff0[jj] * (*wn)(jj) * (*Pni)(ii, jj) ;
141 cf_tmp[ii] /= double(2) / double(2*ii+1) ;
143 cf_tmp[nm1] /= double(nr+nm1) / double(nm1) ;
144 for (
int i=0; i<nr; i++)
153void cfrlegp(
const int* deg,
const int* dimf,
double* ff,
const int* dimc,
171 cout <<
"cfrlegp: nr > n3f : nr = " << nr <<
" , n3f = "
177 cout <<
"cfrlegp: nr > n3c : nr = " << nr <<
" , n3c = "
183 cout <<
"cfrlegp: n1f > n1c : n1f = " << n1f <<
" , n1c = "
189 cout <<
"cfrlegp: n2f > n2c : n2f = " << n2f <<
" , n2c = "
197 int dnm1 = 2*nr - 1 ;
201 get_legendre_data(dnm1, Pni, wn) ;
202 double* cf_tmp =
new double[nr] ;
206 int n2n3f = n2f * n3f ;
207 int n2n3c = n2c * n3c ;
215 int borne_phi = ( n1f > 1 ) ? n1f-1 : 1 ;
217 for (
int j=0; j< borne_phi; j++) {
221 for (
int k=0; k<n2f; k++) {
223 int i0 = n2n3f * j + n3f * k ;
224 double* ff0 = ff + i0 ;
226 i0 = n2n3c * j + n3c * k ;
227 double* cf0 = cf + i0 ;
229 for (
int ii=0; ii<nr; ii++) {
230 cf_tmp[ii] = 0.5*ff0[0]*(*Pni)(2*ii, nm1)
232 for (
int jj=1; jj<nr; jj++) {
233 cf_tmp[ii] += ff0[jj]* (*wn)(nm1+jj) * (*Pni)(2*ii, nm1+jj) ;
235 cf_tmp[ii] *= double(4*ii+1) ;
237 cf_tmp[nm1] /= double(4*nm1+1) / double(2*nm1) ;
238 for (
int i=0; i<nr; i++)
249void cfrlegi(
const int* deg,
const int* dimf,
double* ff,
const int* dimc,
267 cout <<
"cfrlegi: nr > n3f : nr = " << nr <<
" , n3f = "
273 cout <<
"cfrlegi: nr > n3c : nr = " << nr <<
" , n3c = "
279 cout <<
"cfrlegi: n1f > n1c : n1f = " << n1f <<
" , n1c = "
285 cout <<
"cfrlegi: n2f > n2c : n2f = " << n2f <<
" , n2c = "
293 int dnm1 = 2*nr - 1 ;
297 get_legendre_data(dnm1, Pni, wn) ;
298 double* cf_tmp =
new double[nr] ;
299 double* gam_tmp =
new double[nr] ;
303 int n2n3f = n2f * n3f ;
304 int n2n3c = n2c * n3c ;
312 int borne_phi = ( n1f > 1 ) ? n1f-1 : 1 ;
314 for (
int j=0; j< borne_phi; j++) {
318 for (
int k=0; k<n2f; k++) {
320 int i0 = n2n3f * j + n3f * k ;
321 double* ff0 = ff + i0 ;
323 i0 = n2n3c * j + n3c * k ;
324 double* cf0 = cf + i0 ;
326 for (
int ii=0; ii<nr-1; ii++) {
327 cf_tmp[ii] = 0.5*ff0[0]*(*Pni)(2*ii+1, nm1)
330 for (
int jj=1; jj<nr; jj++) {
331 cf_tmp[ii] += ff0[jj]* (*wn)(nm1+jj) * (*Pni)(2*ii+1, nm1+jj) ;
332 gam_tmp[ii] += (*Pni)(2*ii+1, nm1+jj) * (*Pni)(2*ii+1, nm1+jj) * (*wn)(nm1+jj) ;
334 cf_tmp[ii] *= double(4*ii+3) ;
337 for (
int i=0; i<nr; i++)