18static nfu_status nf_Legendre_from_ptwXY_callback(
double mu,
double *f,
void *argList );
27 if( Legendre == NULL )
return( NULL );
32 for( l = 0; l <= Legendre->
maxOrder; l++ ) Legendre->
Cls[l] = Cls[l];
44 if( maxOrder < 0 ) maxOrder = -1;
47 if( initialSize < ( maxOrder + 1 ) ) initialSize = maxOrder + 1;
102 Legendre->
Cls = (
double *)
smr_realloc2( smr, Legendre->
Cls, size *
sizeof(
double ),
"Cls" ); }
105 if( ( Legendre->
allocated > 2 * size ) || forceSmallerResize ) {
106 Legendre->
Cls = (
double *)
nfu_realloc( size *
sizeof(
double ), Legendre->
Cls ); }
111 if( Legendre->
Cls == NULL ) {
119 if( Legendre->
Cls != NULL ) {
120 for( i1 = Legendre->
maxOrder + 1; i1 < size; ++i1 ) Legendre->
Cls[i1] = 0;
123 return( Legendre->
status );
136 return( Legendre->
status );
149 return( Legendre->
status );
162 if( ( l < 0 ) || ( l > Legendre->
maxOrder ) ) {
165 *Cl = Legendre->
Cls[l];
167 return( Legendre->
status );
195 Legendre->
Cls[l] = Cl;
213 if( ( norm = Legendre->
Cls[0] ) == 0 ) {
217 for( l = 0; l <= Legendre->
maxOrder; l++ ) Legendre->
Cls[l] /= norm;
234 if( ( mu >= -1. ) && ( mu <= 1. ) ) {
239 return( Legendre->
status );
247 double Pl_minus1, Pl, Pl_plus1;
278 for( l_ = 0, twoL_plus1 = 1; l_ < l; l_++, twoL_plus1 += 2 ) {
281 Pl_plus1 = ( twoL_plus1 * mu * Pl - l_ * Pl_minus1 ) / ( l_ + 1 );
289 int biSectionMax,
int checkForRoots ) {
293 void *argList = (
void *) Legendre;
304 if( n > 249 ) n = 249;
307 for( i = 1; i < n; i++ ) xs[i] = xs[i-1] + dx;
310 ptwXY =
ptwXY_createFromFunction( smr, n + 1, xs, nf_Legendre_to_ptwXY2, argList, accuracy, checkForRoots, biSectionMax );
328 double mu1, mu2, f1, f2, Cl, Cls[1] = { 0 }, integral;
337 if( ( Legendre =
nf_Legendre_new( smr, maxOrder + 1, -1, Cls ) ) == NULL )
349 if( (
mu1 < -1 ) || (
mu2 > 1 ) ) {
354 if( ( Legendre =
nf_Legendre_new( smr, maxOrder + 1, -1, Cls ) ) == NULL ) {
360 for(
l = 0;
l <= maxOrder;
l++ ) {
363 for( i = 1, Cl = 0; i < n; i++ ) {
387static nfu_status nf_Legendre_from_ptwXY_callback(
double mu,
double *f,
void *argList ) {
391 *f = ( args->f1 * ( args->mu2 - mu ) + args->f2 * ( mu - args->mu1 ) ) / ( args->mu2 - args->mu1 );
ptwXYPoints * nf_Legendre_to_ptwXY(statusMessageReporting *smr, nf_Legendre *Legendre, double accuracy, int biSectionMax, int checkForRoots)
double nf_Legendre_PofL_atMu(int l, double mu)
nf_Legendre * nf_Legendre_new(statusMessageReporting *smr, int initialSize, int maxOrder, double *Cls)
nfu_status nf_Legendre_release(statusMessageReporting *smr, nf_Legendre *Legendre)
nfu_status nf_Legendre_normalize(statusMessageReporting *smr, nf_Legendre *Legendre)
nf_Legendre * nf_Legendre_free(nf_Legendre *Legendre)
nf_Legendre * nf_Legendre_clone(statusMessageReporting *smr, nf_Legendre *nfL)
nfu_status nf_Legendre_getCl(statusMessageReporting *smr, nf_Legendre *Legendre, int l, double *Cl)
nfu_status nf_Legendre_maxOrder(statusMessageReporting *smr, nf_Legendre *Legendre, int *maxOrder)
nfu_status nf_Legendre_allocated(statusMessageReporting *smr, nf_Legendre *Legendre, int *allocated)
nfu_status nf_Legendre_initialize(statusMessageReporting *smr, nf_Legendre *Legendre, int initialSize, int maxOrder)
nf_Legendre * nf_Legendre_from_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY, int maxOrder)
nfu_status nf_Legendre_reallocateCls(statusMessageReporting *smr, nf_Legendre *Legendre, int size, int forceSmallerResize)
nfu_status nf_Legendre_evauluateAtMu(statusMessageReporting *smr, nf_Legendre *Legendre, double mu, double *P)
nfu_status nf_Legendre_setCl(statusMessageReporting *smr, nf_Legendre *Legendre, int l, double Cl)
#define nf_Legendre_maxMaxOrder
#define nf_Legendre_sizeIncrement
#define nf_Legendre_minMaxOrder
struct nf_Legendre_s nf_Legendre
nfu_status nf_Legendre_GaussianQuadrature(int degree, double x1, double x2, nf_Legendre_GaussianQuadrature_callback func, void *argList, double *integral)
enum nfu_status_e nfu_status
void * nfu_realloc(size_t size, void *old)
ptwXYPoints * ptwXY_createFromFunction(statusMessageReporting *smr, int n, double *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax)
struct ptwXYPoints_s ptwXYPoints
nfu_status ptwXY_getXYPairAtIndex(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double *x, double *y)
int64_t ptwXY_length(statusMessageReporting *smr, ptwXYPoints *ptwXY)
#define smr_setReportError2(smr, libraryID, code, fmt,...)
#define smr_setReportError2p(smr, libraryID, code, fmt)
#define smr_realloc2(smr, old, size, forItem)
#define smr_malloc2(smr, size, zero, forItem)