25                                               std::valarray<double>& bl)
 
   29   if (cl.size() != 2 * 
m_Np) {
 
   34   if (bl.size() != 
m_Np) {
 
   39   for (
int i = 0; i < 2 * 
m_Np; ++i) {
 
   43   for (
int i = 0; i < 
m_Np; ++i) {
 
   76   for (
int l = 0; l < 
m_Np; l++) {
 
   77     x2R += 
m_bl[l] / (x * x + 
m_cl[2 * l]);
 
   79   x2R = x2R * (x * x + 
m_cl[2 * m_Np - 1]);
 
   98   double rk   = sqrt(1.0 - 1.0 / (bmax * bmax));
 
   99   double emmc = 1.0 - rk * rk;
 
  108   for (
int i_prec = 0; i_prec < Nprec + 1; i_prec++) {
 
  111     for (
int i = 0; i < 20; i++) {
 
  115       if (cn < 0.0) 
goto succeeded;
 
  131   double FK = UK / (2.0 * 
m_Np + 1.0);
 
  133   for (
int l = 0; l < 2 * 
m_Np; l++) {
 
  136     m_cl[l] = sn * sn / (1.0 - sn * sn);
 
  141   for (
int l = 0; l < 
m_Np; l++) {
 
  142     d0 = d0 * (1.0 + 
m_cl[2 * l]) / (1.0 + 
m_cl[2 * l + 1]);
 
  145   for (
int l = 0; l < 
m_Np; l++) {
 
  147     for (
int i = 0; i < 
m_Np; i++) {
 
  155   double Dx = (bmax - 1.0) / Nj;
 
  160   for (
int jx = 0; jx <= Nj; jx++) {
 
  161     double x    = 1.0 + Dx * jx;
 
  162     double sgnx = 
sign(x);
 
  163     if (fabs(sgnx) > d1) d1 = sgnx;
 
  164     if (fabs(sgnx) < d2) d2 = sgnx;
 
  187   double dmax = d1 - 1.0;
 
  188   if (dmax < 1.0 - d2) dmax = 1.0 - d2;
 
  195                                           double& sn, 
double& cn, 
double& dn)
 
  207   const double epsilon = DBL_EPSILON;
 
  213   if (abs(emmc) > 1.0) {
 
  215     vout.
crucial(
"parameter m = %f must be smaller then 1.\n", emmc);
 
  217   } 
else if (abs(emmc) < 2.0 * epsilon) {
 
  221   } 
else if (abs(emmc - 1) < 2.0 * epsilon) {
 
  232     nu[0] = sqrt(1.0 - emmc);
 
  234     while (abs(mu[n] - nu[n]) > epsilon * abs(mu[n] + nu[n]))
 
  236       mu[n + 1] = 0.5 * (mu[n] + nu[n]);
 
  237       nu[n + 1] = sqrt(mu[n] * nu[n]);
 
  245     double sin_umu = sin(uu * mu[n]);
 
  246     double cos_umu = cos(uu * mu[n]);
 
  250     if (abs(sin_umu < cos_umu)) {
 
  251       double cot = sin_umu / cos_umu;
 
  252       double cs  = mu[n] * cot;
 
  258         double r = cs * cs / mu[n + 1];
 
  260         dn  = (r + nu[n]) / (r + mu[n]);
 
  263       double sqrtm1 = sqrt(1.0 - emmc);
 
  266       cn = dn * (cos_umu > 0 ? 1 : -1) / sqrt(1 + cs * cs);
 
  267       sn = cn * cs / sqrtm1;
 
  269       double cot = cos_umu / sin_umu;
 
  270       double cs  = mu[n] * cot;
 
  276         double r = cs * cs / mu[n + 1];
 
  278         dn  = (r + nu[n]) / (r + mu[n]);
 
  281       sn = (sin_umu > 0 ? 1 : -1) / sqrt(1 + cs * cs);
 
void detailed(const char *format,...)
 
void set_sign_parameters()
 
void general(const char *format,...)
 
void poly_Zolotarev(double bmax, double &UK)
 
void Jacobi_elliptic(double uu, double emmc, double &sn, double &cn, double &dn)
 
std::valarray< double > m_bl
 
Bridge::VerboseLevel m_vl
 
static const std::string class_name
 
void crucial(const char *format,...)
 
void get_sign_parameters(std::valarray< double > &cl, std::valarray< double > &bl)
 
std::valarray< double > m_cl