int main() { #include "sph_neumann_data.ipp" add_data(sph_neumann_data); unsigned data_total = data.size(); screen_data([](const std::vector<double>& v){ return boost::math::sph_neumann(static_cast<int>(v[0]), v[1]); }, [](const std::vector<double>& v){ return v[2]; }); #if defined(TEST_LIBSTDCXX) && !defined(COMPILER_COMPARISON_TABLES) screen_data([](const std::vector<double>& v){ return std::tr1::sph_neumann(static_cast<int>(v[0]), v[1]); }, [](const std::vector<double>& v){ return v[2]; }); #endif #if defined(TEST_GSL) && !defined(COMPILER_COMPARISON_TABLES) screen_data([](const std::vector<double>& v){ return gsl_sf_bessel_yl(static_cast<int>(v[0]), v[1]); }, [](const std::vector<double>& v){ return v[2]; }); #endif unsigned data_used = data.size(); std::string function = "sph_neumann[br](" + boost::lexical_cast<std::string>(data_used) + "/" + boost::lexical_cast<std::string>(data_total) + " tests selected)"; std::string function_short = "sph_neumann"; double time; time = exec_timed_test([](const std::vector<double>& v){ return boost::math::sph_neumann(static_cast<int>(v[0]), v[1]); }); std::cout << time << std::endl; #if !defined(COMPILER_COMPARISON_TABLES) && (defined(TEST_GSL) || defined(TEST_RMATH) || defined(TEST_LIBSTDCXX)) report_execution_time(time, std::string("Library Comparison with ") + std::string(compiler_name()) + std::string(" on ") + platform_name(), function, boost_name()); #endif report_execution_time(time, std::string("Compiler Comparison on ") + std::string(platform_name()), function_short, compiler_name() + std::string("[br]") + boost_name()); // // Boost again, but with promotion to long double turned off: // #if !defined(COMPILER_COMPARISON_TABLES) if(sizeof(long double) != sizeof(double)) { time = exec_timed_test([](const std::vector<double>& v){ return boost::math::sph_neumann(static_cast<int>(v[0]), v[1], boost::math::policies::make_policy(boost::math::policies::promote_double<false>())); }); std::cout << time << std::endl; #if !defined(COMPILER_COMPARISON_TABLES) && (defined(TEST_GSL) || defined(TEST_RMATH) || defined(TEST_LIBSTDCXX)) report_execution_time(time, std::string("Library Comparison with ") + std::string(compiler_name()) + std::string(" on ") + platform_name(), function, boost_name() + "[br]promote_double<false>"); #endif report_execution_time(time, std::string("Compiler Comparison on ") + std::string(platform_name()), function_short, compiler_name() + std::string("[br]") + boost_name() + "[br]promote_double<false>"); } #endif #if defined(TEST_LIBSTDCXX) && !defined(COMPILER_COMPARISON_TABLES) time = exec_timed_test([](const std::vector<double>& v){ return std::tr1::sph_neumann(static_cast<int>(v[0]), v[1]); }); std::cout << time << std::endl; report_execution_time(time, std::string("Library Comparison with ") + std::string(compiler_name()) + std::string(" on ") + platform_name(), function, "tr1/cmath"); #endif #if defined(TEST_GSL) && !defined(COMPILER_COMPARISON_TABLES) time = exec_timed_test([](const std::vector<double>& v){ return gsl_sf_bessel_yl(static_cast<int>(v[0]), v[1]); }); std::cout << time << std::endl; report_execution_time(time, std::string("Library Comparison with ") + std::string(compiler_name()) + std::string(" on ") + platform_name(), function, "GSL " GSL_VERSION); #endif return 0; }
void fillArrays( const int nmin, const int nmax ) { { double jp1( gsl_sf_bessel_jl( nmax+1, x ) ); double j( gsl_sf_bessel_jl( nmax, x ) ); sjArray[nmax-nmin] = j; for( int n( nmax ); n >= nmin+1; --n ) { const double jm1( ( n + n + 1.0 ) * x_r * j - jp1 ); sjArray[n-nmin-1] = jm1; jp1 = j; j = jm1; } } { double y( gsl_sf_bessel_yl( nmin+1, x ) ); double ym1( gsl_sf_bessel_yl( nmin, x ) ); syArray[0] = ym1; syArray[1] = y; for( int n( nmin+1 ); n < nmax; ++n ) { const double yp1( ( n + n + 1.0 ) * x_r * y - ym1 ); syArray[n-nmin+1] = yp1; ym1 = y; y = yp1; } } }
static Real _y(UnsignedInteger n, Real z) { return gsl_sf_bessel_yl(n, z); }
/* compile with gcc test_gsl.c -lgsl -lgslcblas -L<location of gsl library> */ int main (void) { double rmin=0.7,rmax=1.; double alpha = 1.,delta_alpha=1.; double falpha,ss,err,oldss; int ell_min=6,ell_max=8; int iter=0,Nzeros=5; int iell; double ERR = 1.e-12; double zeros[Nzeros]; int ell=0,izeros; FILE *in,*out,*fout; /* --------------------- */ in = fopen("alpha_in_tex.dat","w"); fout = fopen("alpha_in.dat","w"); fprintf(in," %d %d %f %f \n",ell_min,ell_max,rmin,rmax); fprintf(fout," %d %d %f %f \n",ell_min,ell_max,rmin,rmax); for(iell=ell_min;iell<ell_max+1;iell++){ ell=iell; printf("Legendrel=%d \n",ell); alpha = 1.; izeros = 0; while(izeros<Nzeros){ falpha = gsl_sf_bessel_jl(ell,alpha*rmin)*gsl_sf_bessel_yl(ell,alpha*rmax)- gsl_sf_bessel_jl(ell,alpha*rmax)*gsl_sf_bessel_yl(ell,alpha*rmin); err = fabs(falpha); oldss = falpha/err; delta_alpha = 1.; while(err>ERR){ alpha = alpha+delta_alpha; falpha = gsl_sf_bessel_jl(ell,alpha*rmin)*gsl_sf_bessel_yl(ell,alpha*rmax)- gsl_sf_bessel_jl(ell,alpha*rmax)*gsl_sf_bessel_yl(ell,alpha*rmin); err = fabs(falpha); ss = falpha/err; if(ss!=oldss) { delta_alpha = -delta_alpha/2.;} else{} iter = iter+1; printf("ell=%d alpha=%le, falpha=%le, delta_alpha=%le, ss=%le, iter=%d, err=%le \n", ell,alpha,falpha,delta_alpha,ss,iter,err); oldss = ss; } printf("convergence achieved \n"); printf("Legendrel=%d alpha=%le, falpha=%le, delta_alpha=%le,ss=%le, iter=%d, err=%le \n", ell,alpha,falpha,delta_alpha,ss,iter,err); zeros[izeros] = alpha; alpha = (double) (ceil(alpha)); izeros = izeros+1; } printf("==========Legendrel = %d ================\n",ell); printf("%d \t",ell); fprintf(in,"%d \t ",ell); for(izeros=0;izeros<Nzeros;izeros++){ printf(" %le ",zeros[izeros]); fprintf(in," & %f ",zeros[izeros]); } printf("\n"); fprintf(in,"\\\\ \n"); /* ---------------------------------------- */ fprintf(fout,"%d ",ell); for(izeros=0;izeros<Nzeros;izeros++){ fprintf(fout," %f ",zeros[izeros]); } fprintf(fout,"\n"); } return 0; }