double GetCoulombNormalization(double Z, int l, double k) { double eta = Z / k; gsl_sf_result C; int error = gsl_sf_coulomb_CL_e(l, eta, &C); return C.val; }
void coulomb_CL(double *L, double *eta, int *len, double *val, double *err, int *status) { int i; gsl_sf_result result; gsl_set_error_handler_off(); for(i = 0; i< *len ; i++){ status[i] = gsl_sf_coulomb_CL_e(L[i], eta[i], &result) ; val[i] = result.val; err[i] = result.err; } }
/* cl[0] .. cl[kmax] = C_{lam_min}(eta) .. C_{lam_min+kmax}(eta) */ int gsl_sf_coulomb_CL_array(double lam_min, int kmax, double eta, double * cl) { int k; gsl_sf_result cl_0; gsl_sf_coulomb_CL_e(lam_min, eta, &cl_0); cl[0] = cl_0.val; for(k=1; k<=kmax; k++) { double L = lam_min + k; cl[k] = cl[k-1] * sqrt(L*L + eta*eta)/(L*(2.0*L+1.0)); } return GSL_SUCCESS; }
/** * C++ version of gsl_sf_coulomb_CL_e(). * @param L A real value * @param eta A real value * @param result The result as a @c gsl::sf::result object * @return Error code on failure */ inline int CL_e( double L, double eta, result& result ){ return gsl_sf_coulomb_CL_e( L, eta, &result ); }