CLASS MANUAL
quadrature.h
1 #ifndef __QSS__
2 #define __QSS__
3 
4 #define _MIN_NUMBER_OF_LAGUERRE_POINTS_ 5
5 
6 /******************************************/
7 /* Quadrature Sampling Strategy for CLASS */
8 /* 10/12 2010 */
9 /* Thomas Tram */
10 /******************************************/
11 #include "common.h"
12 
13 /* Structures for QSS */
14 
15 typedef struct adaptive_integration_tree_node{
16  /* binary tree node: */
17  double I; /* Estimate of integral */
18  double err; /* Estimated error */
19  double *x; /* Pointer to the abscissas of node */
20  double *w; /* Pointer to the corresponding weights */
21  int leaf_childs;/* Number of leafs under current node. 1 means that the node is a leaf. */
22  /* Pointer to children: */
23  struct adaptive_integration_tree_node *left, *right; /* Pointer to left child. */
24 } qss_node;
25 
29 #ifdef __cplusplus
30  extern "C" {
31 #endif
32  int get_qsampling(double *x,
33  double *w,
34  int *N,
35  int N_max, double rtol,
36  double *qvec,
37  int qsiz,
38  int (*test)(void * params_for_function, double q, double *psi),
39  int (*function)(void * params_for_function, double q, double *f0),
40  void * params_for_function,
41  ErrorMsg errmsg);
42 
43  int sort_x_and_w(double *x, double *w, double *workx, double *workw, int startidx, int endidx);
44  int get_leaf_x_and_w(qss_node *node, int *ind, double *x, double *w,int isindefinite);
45  int reduce_tree(qss_node *node, int level);
46  int burn_tree(qss_node *node);
47  int leaf_count(qss_node *node);
48  double get_integral(qss_node *node, int level);
49  int gk_adapt(
50  qss_node **node,
51  int (*test)(void * params_for_function, double q, double *psi),
52  int (*function)(void * params_for_function, double q, double *f0),
53  void * params_for_function,
54  double tol,
55  int treemode,
56  double a,
57  double b,
58  int isindefinite,
59  ErrorMsg errmsg);
60  int compute_Hermite(double *x, double *w, int N, int alpha, double *b, double *c);
61  int compute_Laguerre(double *x, double *w, int N, double alpha, double *b, double *c, int totalweight);
62  int gk_quad(int (*test)(void * params_for_function, double q, double *psi),
63  int (*function)(void * params_for_function, double q, double *f0),
64  void * params_for_function,
65  qss_node* node,
66  double a,
67  double b,
68  int isindefinite);
69  double testfun(double x);
70 
71  int quadrature_gauss_legendre(
72  double *mu,
73  double *w8,
74  int n,
75  double tol,
76  ErrorMsg error_message);
77 
78  int quadrature_gauss_legendre_2D(
79  int n,
80  double * x,
81  double * y,
82  double * w,
83  ErrorMsg error_message);
84 
85  int quadrature_in_rectangle(
86  double xl,
87  double xr,
88  double yl,
89  double yr,
90  int *n,
91  double ** x,
92  double ** y,
93  double ** w,
94  ErrorMsg error_message);
95 
96  int cubature_order_eleven(
97  double xl,
98  double xr,
99  double yl,
100  double yr,
101  double *x,
102  double *y,
103  double *w,
104  ErrorMsg error_message);
105 
106 
107 #ifdef __cplusplus
108  }
109 #endif
110 
111 
112 #endif