From fad32de9c3df04a8fb032f9c604c79c89d062154 Mon Sep 17 00:00:00 2001
From: siddhu8990
Date: Tue, 20 Jun 2017 15:26:40 +0530
Subject: Bug fixed for GSL library

---
 thirdparty/includes/GSL/gsl/gsl_sum.h | 162 ++++++++++++++++++++++++++++++++++
 1 file changed, 162 insertions(+)
 create mode 100644 thirdparty/includes/GSL/gsl/gsl_sum.h

(limited to 'thirdparty/includes/GSL/gsl/gsl_sum.h')

diff --git a/thirdparty/includes/GSL/gsl/gsl_sum.h b/thirdparty/includes/GSL/gsl/gsl_sum.h
new file mode 100644
index 00000000..d9c4da81
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_sum.h
@@ -0,0 +1,162 @@
+/* sum/gsl_sum.h
+ * 
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author:  G. Jungman */
+
+
+#ifndef __GSL_SUM_H__
+#define __GSL_SUM_H__
+
+#include <stdlib.h>
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS          /* empty */
+# define __END_DECLS            /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/*  Workspace for Levin U Transform with error estimation,
+ *   
+ *   size        = number of terms the workspace can handle
+ *   sum_plain   = simple sum of series
+ *   q_num       = backward diagonal of numerator; length = size
+ *   q_den       = backward diagonal of denominator; length = size
+ *   dq_num      = table of numerator derivatives; length = size**2
+ *   dq_den      = table of denominator derivatives; length = size**2
+ *   dsum        = derivative of sum wrt term i; length = size
+ */
+
+typedef struct
+{
+  size_t size;
+  size_t i;                     /* position in array */
+  size_t terms_used;            /* number of calls */
+  double sum_plain;
+  double *q_num;
+  double *q_den;
+  double *dq_num;
+  double *dq_den;
+  double *dsum;
+}
+gsl_sum_levin_u_workspace;
+
+gsl_sum_levin_u_workspace *gsl_sum_levin_u_alloc (size_t n);
+void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * w);
+
+/* Basic Levin-u acceleration method.
+ *
+ *   array       = array of series elements
+ *   n           = size of array
+ *   sum_accel   = result of summation acceleration
+ *   err         = estimated error   
+ *
+ * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602]
+ */
+
+int gsl_sum_levin_u_accel (const double *array,
+                           const size_t n,
+                           gsl_sum_levin_u_workspace * w,
+                           double *sum_accel, double *abserr);
+
+/* Basic Levin-u acceleration method with constraints on the terms
+ * used,
+ *
+ *   array       = array of series elements
+ *   n           = size of array
+ *   min_terms   = minimum number of terms to sum
+ *   max_terms   = maximum number of terms to sum
+ *   sum_accel   = result of summation acceleration
+ *   err         = estimated error   
+ *
+ * See [Fessler et al., ACM TOMS 9, 346 (1983) and TOMS-602] 
+ */
+
+int gsl_sum_levin_u_minmax (const double *array,
+                            const size_t n,
+                            const size_t min_terms,
+                            const size_t max_terms,
+                            gsl_sum_levin_u_workspace * w,
+                            double *sum_accel, double *abserr);
+
+/* Basic Levin-u step w/o reference to the array of terms.
+ * We only need to specify the value of the current term
+ * to execute the step. See TOMS-745.
+ *
+ * sum = t0 + ... + t_{n-1} + term;  term = t_{n}
+ *
+ *   term   = value of the series term to be added
+ *   n      = position of term in series (starting from 0)
+ *   sum_accel = result of summation acceleration
+ *   sum_plain = simple sum of series
+ */
+
+int
+gsl_sum_levin_u_step (const double term,
+                      const size_t n,
+                      const size_t nmax,
+                      gsl_sum_levin_u_workspace * w, 
+                      double *sum_accel);
+
+/* The following functions perform the same calculation without
+   estimating the errors. They require O(N) storage instead of O(N^2).
+   This may be useful for summing many similar series where the size
+   of the error has already been estimated reliably and is not
+   expected to change.  */
+
+typedef struct
+{
+  size_t size;
+  size_t i;                     /* position in array */
+  size_t terms_used;            /* number of calls */
+  double sum_plain;
+  double *q_num;
+  double *q_den;
+  double *dsum;
+}
+gsl_sum_levin_utrunc_workspace;
+
+gsl_sum_levin_utrunc_workspace *gsl_sum_levin_utrunc_alloc (size_t n);
+void gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * w);
+
+int gsl_sum_levin_utrunc_accel (const double *array,
+                                const size_t n,
+                                gsl_sum_levin_utrunc_workspace * w,
+                                double *sum_accel, double *abserr_trunc);
+
+int gsl_sum_levin_utrunc_minmax (const double *array,
+                                 const size_t n,
+                                 const size_t min_terms,
+                                 const size_t max_terms,
+                                 gsl_sum_levin_utrunc_workspace * w,
+                                 double *sum_accel, double *abserr_trunc);
+
+int gsl_sum_levin_utrunc_step (const double term,
+                               const size_t n,
+                               gsl_sum_levin_utrunc_workspace * w, 
+                               double *sum_accel);
+
+__END_DECLS
+
+#endif /* __GSL_SUM_H__ */
-- 
cgit