LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
LSSTDataManagementBasePackage
IntGKPData10.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008, 2009, 2010 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
25 #if !defined(LSST_AFW_MATH_INTGKPDATA10_H)
26 #define LSST_AFW_MATH_INTGKPDATA10_H 1
27 
37 #include <vector>
38 
39 namespace lsst { namespace afw { namespace math {
40 
41 namespace details {
42 
43  static const int NGKPLEVELS = 5;
44 
45  inline int gkp_n(int level) {
46  assert(level >= 0 && level < NGKPLEVELS);
47  static const int ngkp[NGKPLEVELS] = {5, 5, 11, 22, 44};
48  return ngkp[level];
49  }
50 
51  template <class T>
52  inline const std::vector<T>& gkp_x(int level) {
53 
54  // x10, abscissae common to the 10-, 21-, 43- and 87-point rule
55  static const T ax10[5] = {
56  0.973906528517171720077964012084452,
57  0.865063366688984510732096688423493,
58  0.679409568299024406234327365114874,
59  0.433395394129247190799265943165784,
60  0.148874338981631210884826001129720
61  };
62  static const std::vector<T> vx10(ax10, ax10 + 5);
63 
64  // x21, abscissae common to the 21-, 43- and 87-point rule
65  static const T ax21[5] = {
66  0.995657163025808080735527280689003,
67  0.930157491355708226001207180059508,
68  0.780817726586416897063717578345042,
69  0.562757134668604683339000099272694,
70  0.294392862701460198131126603103866
71  };
72  static const std::vector<T> vx21(ax21, ax21 + 5);
73 
74  // x43, abscissae common to the 43- and 87-point rule
75  static const T ax43[11] = {
76  0.999333360901932081394099323919911,
77  0.987433402908088869795961478381209,
78  0.954807934814266299257919200290473,
79  0.900148695748328293625099494069092,
80  0.825198314983114150847066732588520,
81  0.732148388989304982612354848755461,
82  0.622847970537725238641159120344323,
83  0.499479574071056499952214885499755,
84  0.364901661346580768043989548502644,
85  0.222254919776601296498260928066212,
86  0.074650617461383322043914435796506
87  };
88  static const std::vector<T> vx43(ax43, ax43 + 11);
89 
90  // x87, abscissae of the 87-point rule
91  static const T ax87[22] = {
92  0.999902977262729234490529830591582,
93  0.997989895986678745427496322365960,
94  0.992175497860687222808523352251425,
95  0.981358163572712773571916941623894,
96  0.965057623858384619128284110607926,
97  0.943167613133670596816416634507426,
98  0.915806414685507209591826430720050,
99  0.883221657771316501372117548744163,
100  0.845710748462415666605902011504855,
101  0.803557658035230982788739474980964,
102  0.757005730685495558328942793432020,
103  0.706273209787321819824094274740840,
104  0.651589466501177922534422205016736,
105  0.593223374057961088875273770349144,
106  0.531493605970831932285268948562671,
107  0.466763623042022844871966781659270,
108  0.399424847859218804732101665817923,
109  0.329874877106188288265053371824597,
110  0.258503559202161551802280975429025,
111  0.185695396568346652015917141167606,
112  0.111842213179907468172398359241362,
113  0.037352123394619870814998165437704
114  };
115  static const std::vector<T> vx87(ax87, ax87 + 22);
116 
117  // x175, new abscissae of the 175-point rule
118  static const T ax175[44] = {
119  0.9999863601049729677997719,
120  0.9996988005421428623760900,
121  0.9987732473138838303043008,
122  0.9969583851613681945576954,
123  0.9940679446543307664316419,
124  0.9899673391741082769960501,
125  0.9845657252243253759726856,
126  0.9778061574856414566055911,
127  0.9696573134362640567828241,
128  0.9601075259508299668299148,
129  0.9491605191933640559839528,
130  0.9368321320434676982049391,
131  0.9231475266471484946315312,
132  0.9081385954543932335481458,
133  0.8918414554201179766275301,
134  0.8742940658668577971868106,
135  0.8555341249920432726468181,
136  0.8355974653331171075829366,
137  0.8145171513255796294567278,
138  0.7923233739697216224661771,
139  0.7690440708082055924983192,
140  0.7447060413364141221086362,
141  0.7193362474393392286563226,
142  0.6929630148748741413274435,
143  0.6656169582351898081906710,
144  0.6373315753624730450361940,
145  0.6081435407529742253347887,
146  0.5780927509986774074337714,
147  0.5472221576559162873479056,
148  0.5155774001694817879753989,
149  0.4832062516695473663839323,
150  0.4501579202236101928554315,
151  0.4164822936334372150371142,
152  0.3822292525735955063074986,
153  0.3474481818229070516859048,
154  0.3121877718977455143765043,
155  0.2764961311348905899785770,
156  0.2404211453027010909070665,
157  0.2040109589145005126324680,
158  0.1673144327616352753945014,
159  0.1303814601095591675431696,
160  0.09326308333660176874846400,
161  0.05601141598806823374241435,
162  0.01867941779948308845140053
163  };
164  static const std::vector<T> vx175(ax175, ax175 + 44);
165 
166  static const std::vector<T>* x[NGKPLEVELS] = {&vx10, &vx21, &vx43, &vx87, &vx175};
167 
168  assert(level >= 0 && level < NGKPLEVELS);
169  return *x[level];
170  }
171 
172  template <class T>
173  inline const std::vector<T>& gkp_wa(int level) {
174 
175  // w21a, weights of the 21-point formula for abscissae x10
176  static const T aw21a[5] = {
177  0.032558162307964727478818972459390,
178  0.075039674810919952767043140916190,
179  0.109387158802297641899210590325805,
180  0.134709217311473325928054001771707,
181  0.147739104901338491374841515972068
182  };
183  static const std::vector<T> vw21a(aw21a, aw21a + 5);
184 
185  // w43a, weights of the 43-point formula for abscissae x10,x21
186  static const T aw43a[10] = {
187  0.016296734289666564924281974617663,
188  0.037522876120869501461613795898115,
189  0.054694902058255442147212685465005,
190  0.067355414609478086075553166302174,
191  0.073870199632393953432140695251367,
192  0.005768556059769796184184327908655,
193  0.027371890593248842081276069289151,
194  0.046560826910428830743339154433824,
195  0.061744995201442564496240336030883,
196  0.071387267268693397768559114425516
197  };
198  static const std::vector<T> vw43a(aw43a, aw43a + 10);
199 
200  // w87a, weights of the 87-point formula for abscissae x10..x43
201  static const T aw87a[21] = {
202  0.008148377384149172900002878448190,
203  0.018761438201562822243935059003794,
204  0.027347451050052286161582829741283,
205  0.033677707311637930046581056957588,
206  0.036935099820427907614589586742499,
207  0.002884872430211530501334156248695,
208  0.013685946022712701888950035273128,
209  0.023280413502888311123409291030404,
210  0.030872497611713358675466394126442,
211  0.035693633639418770719351355457044,
212  0.000915283345202241360843392549948,
213  0.005399280219300471367738743391053,
214  0.010947679601118931134327826856808,
215  0.016298731696787335262665703223280,
216  0.021081568889203835112433060188190,
217  0.025370969769253827243467999831710,
218  0.029189697756475752501446154084920,
219  0.032373202467202789685788194889595,
220  0.034783098950365142750781997949596,
221  0.036412220731351787562801163687577,
222  0.037253875503047708539592001191226
223  };
224  static const std::vector<T> vw87a(aw87a, aw87a + 21);
225 
226  // w175a, weights of the 175-point formula for abscissae x10..x87
227  static const T aw175a[43] = {
228  0.004074188692082600103872341,
229  0.009380719100781411819741177,
230  0.01367372552502614309257226,
231  0.01683885365581896502443513,
232  0.01846754991021395380770806,
233  0.001442436294030254510518689,
234  0.006842973011356375224430623,
235  0.01164020675144415562952859,
236  0.01543624880585667934076834,
237  0.01784681681970938536027839,
238  0.0004576754584154192941064591,
239  0.002699640110136963534043642,
240  0.005473839800559775445647306,
241  0.008149365848393670964180954,
242  0.01054078444460191775302900,
243  0.01268548488462691364854167,
244  0.01459484887823787625642303,
245  0.01618660123360139484467359,
246  0.01739154947518257137619173,
247  0.01820611036567589378188459,
248  0.01862693775152385427017140,
249  0.0001363171844264931156688042,
250  0.0009035606060432074452289352,
251  0.002048434635928091782250346,
252  0.003379145025868061092978424,
253  0.004774978836099393880602724,
254  0.006164723826122346701274159,
255  0.007505223673194467726814647,
256  0.008774483993121594091281642,
257  0.009969018893220443741650500,
258  0.01109746798050614328494604,
259  0.01216957356300040269315573,
260  0.01318725270741960360319771,
261  0.01414345539438560032188640,
262  0.01502629056404634765715107,
263  0.01582337568571996469999659,
264  0.01652520670998925164398162,
265  0.01712754985211303089259342,
266  0.01763120633007834051620255,
267  0.01803849481144435059221422,
268  0.01834930224922804724856518,
269  0.01856027463491628805666919,
270  0.01866711437596752016025132
271  };
272  static const std::vector<T> vw175a(aw175a, aw175a + 43);
273 
274  static const std::vector<T>* wa[NGKPLEVELS] = {0, &vw21a, &vw43a, &vw87a, &vw175a};
275 
276  assert(level >= 1 && level < NGKPLEVELS);
277  return *wa[level];
278  }
279 
280  template <class T>
281  inline const std::vector<T>& gkp_wb(int level) {
282 
283  // w10, weights of the 10-point formula
284  static const T aw10b[6] = {
285  0.066671344308688137593568809893332,
286  0.149451349150580593145776339657697,
287  0.219086362515982043995534934228163,
288  0.269266719309996355091226921569469,
289  0.295524224714752870173892994651338,
290  0.0
291  };
292  static const std::vector<T> vw10b(aw10b, aw10b + 6);
293 
294  // w21b, weights of the 21-point formula for abscissae x21
295  static const T aw21b[6] = {
296  0.011694638867371874278064396062192,
297  0.054755896574351996031381300244580,
298  0.093125454583697605535065465083366,
299  0.123491976262065851077958109831074,
300  0.142775938577060080797094273138717,
301  0.149445554002916905664936468389821
302  };
303  static const std::vector<T> vw21b(aw21b, aw21b + 6);
304 
305  // w43b, weights of the 43-point formula for abscissae x43
306  static const T aw43b[12] = {
307  0.001844477640212414100389106552965,
308  0.010798689585891651740465406741293,
309  0.021895363867795428102523123075149,
310  0.032597463975345689443882222526137,
311  0.042163137935191811847627924327955,
312  0.050741939600184577780189020092084,
313  0.058379395542619248375475369330206,
314  0.064746404951445885544689259517511,
315  0.069566197912356484528633315038405,
316  0.072824441471833208150939535192842,
317  0.074507751014175118273571813842889,
318  0.074722147517403005594425168280423
319  };
320  static const std::vector<T> vw43b(aw43b, aw43b + 12);
321 
322  // w87b, weights of the 87-point formula for abscissae x87
323  static const T aw87b[23] = {
324  0.000274145563762072350016527092881,
325  0.001807124155057942948341311753254,
326  0.004096869282759164864458070683480,
327  0.006758290051847378699816577897424,
328  0.009549957672201646536053581325377,
329  0.012329447652244853694626639963780,
330  0.015010447346388952376697286041943,
331  0.017548967986243191099665352925900,
332  0.019938037786440888202278192730714,
333  0.022194935961012286796332102959499,
334  0.024339147126000805470360647041454,
335  0.026374505414839207241503786552615,
336  0.028286910788771200659968002987960,
337  0.030052581128092695322521110347341,
338  0.031646751371439929404586051078883,
339  0.033050413419978503290785944862689,
340  0.034255099704226061787082821046821,
341  0.035262412660156681033782717998428,
342  0.036076989622888701185500318003895,
343  0.036698604498456094498018047441094,
344  0.037120549269832576114119958413599,
345  0.037334228751935040321235449094698,
346  0.037361073762679023410321241766599
347  };
348  static const std::vector<T> vw87b(aw87b, aw87b + 23);
349 
350  // w175b, weights of the 175-point formula for abscissae x175
351  static const T aw175b[45] = {
352  0.00003901440664395060055484226,
353  0.0002787312407993348139961464,
354  0.0006672934146291138823512275,
355  0.001163051749910003055308177,
356  0.001738533916888715565420637,
357  0.002369555040550195269486165,
358  0.003036735036032612976379865,
359  0.003725394125884235586678819,
360  0.004424387541776355951933433,
361  0.005125062882078508655875582,
362  0.005820601038952832388647054,
363  0.006505667785357412495794539,
364  0.007176258976795165213169074,
365  0.007829642423806550517967042,
366  0.008464316525043036555640657,
367  0.009079917879101951192512711,
368  0.009677029304308397008134699,
369  0.01025687419430508685393322,
370  0.01082092935368957685380896,
371  0.01137052956179654620079332,
372  0.01190655150082017425918844,
373  0.01242924137407215963971061,
374  0.01293819980598456566872951,
375  0.01343248644726851711632966,
376  0.01391078107864287587682982,
377  0.01437154592198526807352501,
378  0.01481316256915705351874381,
379  0.01523404482122031244940129,
380  0.01563274056894636856297717,
381  0.01600802989372176552081826,
382  0.01635901148521841710605397,
383  0.01668515675646806540972517,
384  0.01698630892029276765404134,
385  0.01726261506199017604299177,
386  0.01751439915887340284018269,
387  0.01774200489411242260549908,
388  0.01794564958245060930824294,
389  0.01812532816637054898168673,
390  0.01828078919412312732671357,
391  0.01841158014800801587767163,
392  0.01851713825962505903167768,
393  0.01859689376712028821908313,
394  0.01865035760791320287947920,
395  0.01867717982648033250824110,
396  0.01868053688133951170552407
397  };
398  static const std::vector<T> vw175b(aw175b, aw175b + 45);
399 
400  static const std::vector<T>* wb[NGKPLEVELS] = {&vw10b, &vw21b, &vw43b, &vw87b, &vw175b};
401 
402  assert(level >= 0 && level < NGKPLEVELS);
403  return *wb[level];
404  }
405 
406 #ifdef EXTRA_PREC_H
407 
408  template<>
409  inline const std::vector<Quad>& gkp_x<Quad>(int level) {
410 
411  // x10, abscissae common to the 10-, 21-, 43- and 87-point rule
412  static const Quad ax10[5] = {
413  "0.973906528517171720077964012084452",
414  "0.865063366688984510732096688423493",
415  "0.679409568299024406234327365114874",
416  "0.433395394129247190799265943165784",
417  "0.148874338981631210884826001129720"
418  };
419  static const std::vector<Quad> vx10(ax10, ax10 + 5);
420 
421  // x21, abscissae common to the 21-, 43- and 87-point rule
422  static const Quad ax21[5] = {
423  "0.995657163025808080735527280689003",
424  "0.930157491355708226001207180059508",
425  "0.780817726586416897063717578345042",
426  "0.562757134668604683339000099272694",
427  "0.294392862701460198131126603103866"
428  };
429  static const std::vector<Quad> vx21(ax21, ax21 + 5);
430 
431  // x43, abscissae common to the 43- and 87-point rule
432  static const Quad ax43[11] = {
433  "0.999333360901932081394099323919911",
434  "0.987433402908088869795961478381209",
435  "0.954807934814266299257919200290473",
436  "0.900148695748328293625099494069092",
437  "0.825198314983114150847066732588520",
438  "0.732148388989304982612354848755461",
439  "0.622847970537725238641159120344323",
440  "0.499479574071056499952214885499755",
441  "0.364901661346580768043989548502644",
442  "0.222254919776601296498260928066212",
443  "0.074650617461383322043914435796506"
444  };
445  static const std::vector<Quad> vx43(ax43, ax43 + 11);
446 
447  // x87, abscissae of the 87-point rule
448  static const Quad ax87[22] = {
449  "0.999902977262729234490529830591582",
450  "0.997989895986678745427496322365960",
451  "0.992175497860687222808523352251425",
452  "0.981358163572712773571916941623894",
453  "0.965057623858384619128284110607926",
454  "0.943167613133670596816416634507426",
455  "0.915806414685507209591826430720050",
456  "0.883221657771316501372117548744163",
457  "0.845710748462415666605902011504855",
458  "0.803557658035230982788739474980964",
459  "0.757005730685495558328942793432020",
460  "0.706273209787321819824094274740840",
461  "0.651589466501177922534422205016736",
462  "0.593223374057961088875273770349144",
463  "0.531493605970831932285268948562671",
464  "0.466763623042022844871966781659270",
465  "0.399424847859218804732101665817923",
466  "0.329874877106188288265053371824597",
467  "0.258503559202161551802280975429025",
468  "0.185695396568346652015917141167606",
469  "0.111842213179907468172398359241362",
470  "0.037352123394619870814998165437704"
471  };
472  static const std::vector<Quad> vx87(ax87, ax87 + 22);
473 
474  // x175, new abscissae of the 175-point rule
475  static const Quad ax175[44] = {
476  "0.9999863601049729677997719",
477  "0.9996988005421428623760900",
478  "0.9987732473138838303043008",
479  "0.9969583851613681945576954",
480  "0.9940679446543307664316419",
481  "0.9899673391741082769960501",
482  "0.9845657252243253759726856",
483  "0.9778061574856414566055911",
484  "0.9696573134362640567828241",
485  "0.9601075259508299668299148",
486  "0.9491605191933640559839528",
487  "0.9368321320434676982049391",
488  "0.9231475266471484946315312",
489  "0.9081385954543932335481458",
490  "0.8918414554201179766275301",
491  "0.8742940658668577971868106",
492  "0.8555341249920432726468181",
493  "0.8355974653331171075829366",
494  "0.8145171513255796294567278",
495  "0.7923233739697216224661771",
496  "0.7690440708082055924983192",
497  "0.7447060413364141221086362",
498  "0.7193362474393392286563226",
499  "0.6929630148748741413274435",
500  "0.6656169582351898081906710",
501  "0.6373315753624730450361940",
502  "0.6081435407529742253347887",
503  "0.5780927509986774074337714",
504  "0.5472221576559162873479056",
505  "0.5155774001694817879753989",
506  "0.4832062516695473663839323",
507  "0.4501579202236101928554315",
508  "0.4164822936334372150371142",
509  "0.3822292525735955063074986",
510  "0.3474481818229070516859048",
511  "0.3121877718977455143765043",
512  "0.2764961311348905899785770",
513  "0.2404211453027010909070665",
514  "0.2040109589145005126324680",
515  "0.1673144327616352753945014",
516  "0.1303814601095591675431696",
517  "0.09326308333660176874846400",
518  "0.05601141598806823374241435",
519  "0.01867941779948308845140053"
520  };
521  static const std::vector<Quad> vx175(ax175, ax175 + 44);
522 
523  static const std::vector<Quad>* x[NGKPLEVELS] = {&vx10, &vx21, &vx43, &vx87, &vx175};
524 
525  assert(level >= 0 && level < NGKPLEVELS);
526  return *x[level];
527  }
528 
529  template<>
530  inline const std::vector<Quad>& gkp_wa<Quad>(int level) {
531 
532  // w21a, weights of the 21-point formula for abscissae x10
533  static const Quad aw21a[5] = {
534  "0.032558162307964727478818972459390",
535  "0.075039674810919952767043140916190",
536  "0.109387158802297641899210590325805",
537  "0.134709217311473325928054001771707",
538  "0.147739104901338491374841515972068"
539  };
540  static const std::vector<Quad> vw21a(aw21a, aw21a + 5);
541 
542  // w43a, weights of the 43-point formula for abscissae x10,x21
543  static const Quad aw43a[10] = {
544  "0.016296734289666564924281974617663",
545  "0.037522876120869501461613795898115",
546  "0.054694902058255442147212685465005",
547  "0.067355414609478086075553166302174",
548  "0.073870199632393953432140695251367",
549  "0.005768556059769796184184327908655",
550  "0.027371890593248842081276069289151",
551  "0.046560826910428830743339154433824",
552  "0.061744995201442564496240336030883",
553  "0.071387267268693397768559114425516"
554  };
555  static const std::vector<Quad> vw43a(aw43a, aw43a + 10);
556 
557  // w87a, weights of the 87-point formula for abscissae x10..x43
558  static const Quad aw87a[21] = {
559  "0.008148377384149172900002878448190",
560  "0.018761438201562822243935059003794",
561  "0.027347451050052286161582829741283",
562  "0.033677707311637930046581056957588",
563  "0.036935099820427907614589586742499",
564  "0.002884872430211530501334156248695",
565  "0.013685946022712701888950035273128",
566  "0.023280413502888311123409291030404",
567  "0.030872497611713358675466394126442",
568  "0.035693633639418770719351355457044",
569  "0.000915283345202241360843392549948",
570  "0.005399280219300471367738743391053",
571  "0.010947679601118931134327826856808",
572  "0.016298731696787335262665703223280",
573  "0.021081568889203835112433060188190",
574  "0.025370969769253827243467999831710",
575  "0.029189697756475752501446154084920",
576  "0.032373202467202789685788194889595",
577  "0.034783098950365142750781997949596",
578  "0.036412220731351787562801163687577",
579  "0.037253875503047708539592001191226"
580  };
581  static const std::vector<Quad> vw87a(aw87a, aw87a + 21);
582 
583  // w175a, weights of the 175-point formula for abscissae x10..x87
584  static const Quad aw175a[43] = {
585  "0.004074188692082600103872341",
586  "0.009380719100781411819741177",
587  "0.01367372552502614309257226",
588  "0.01683885365581896502443513",
589  "0.01846754991021395380770806",
590  "0.001442436294030254510518689",
591  "0.006842973011356375224430623",
592  "0.01164020675144415562952859",
593  "0.01543624880585667934076834",
594  "0.01784681681970938536027839",
595  "0.0004576754584154192941064591",
596  "0.002699640110136963534043642",
597  "0.005473839800559775445647306",
598  "0.008149365848393670964180954",
599  "0.01054078444460191775302900",
600  "0.01268548488462691364854167",
601  "0.01459484887823787625642303",
602  "0.01618660123360139484467359",
603  "0.01739154947518257137619173",
604  "0.01820611036567589378188459",
605  "0.01862693775152385427017140",
606  "0.0001363171844264931156688042",
607  "0.0009035606060432074452289352",
608  "0.002048434635928091782250346",
609  "0.003379145025868061092978424",
610  "0.004774978836099393880602724",
611  "0.006164723826122346701274159",
612  "0.007505223673194467726814647",
613  "0.008774483993121594091281642",
614  "0.009969018893220443741650500",
615  "0.01109746798050614328494604",
616  "0.01216957356300040269315573",
617  "0.01318725270741960360319771",
618  "0.01414345539438560032188640",
619  "0.01502629056404634765715107",
620  "0.01582337568571996469999659",
621  "0.01652520670998925164398162",
622  "0.01712754985211303089259342",
623  "0.01763120633007834051620255",
624  "0.01803849481144435059221422",
625  "0.01834930224922804724856518",
626  "0.01856027463491628805666919",
627  "0.01866711437596752016025132"
628  };
629  static const std::vector<Quad> vw175a(aw175a, aw175a + 43);
630 
631  static const std::vector<Quad>* wa[NGKPLEVELS] = {0, &vw21a, &vw43a, &vw87a, &vw175a};
632 
633  assert(level >= 1 && level < NGKPLEVELS);
634  return *wa[level];
635  }
636 
637  template<>
638  inline const std::vector<Quad>& gkp_wb<Quad>(int level) {
639 
640  // w10, weights of the 10-point formula
641  static const Quad aw10b[6] = {
642  "0.066671344308688137593568809893332",
643  "0.149451349150580593145776339657697",
644  "0.219086362515982043995534934228163",
645  "0.269266719309996355091226921569469",
646  "0.295524224714752870173892994651338",
647  "0.0"
648  };
649  static const std::vector<Quad> vw10b(aw10b, aw10b + 6);
650 
651  // w21b, weights of the 21-point formula for abscissae x21
652  static const Quad aw21b[6] = {
653  "0.011694638867371874278064396062192",
654  "0.054755896574351996031381300244580",
655  "0.093125454583697605535065465083366",
656  "0.123491976262065851077958109831074",
657  "0.142775938577060080797094273138717",
658  "0.149445554002916905664936468389821"
659  };
660  static const std::vector<Quad> vw21b(aw21b, aw21b + 6);
661 
662  // w43b, weights of the 43-point formula for abscissae x43
663  static const Quad aw43b[12] = {
664  "0.001844477640212414100389106552965",
665  "0.010798689585891651740465406741293",
666  "0.021895363867795428102523123075149",
667  "0.032597463975345689443882222526137",
668  "0.042163137935191811847627924327955",
669  "0.050741939600184577780189020092084",
670  "0.058379395542619248375475369330206",
671  "0.064746404951445885544689259517511",
672  "0.069566197912356484528633315038405",
673  "0.072824441471833208150939535192842",
674  "0.074507751014175118273571813842889",
675  "0.074722147517403005594425168280423"
676  };
677  static const std::vector<Quad> vw43b(aw43b, aw43b + 12);
678 
679  // w87b, weights of the 87-point formula for abscissae x87
680  static const Quad aw87b[23] = {
681  "0.000274145563762072350016527092881",
682  "0.001807124155057942948341311753254",
683  "0.004096869282759164864458070683480",
684  "0.006758290051847378699816577897424",
685  "0.009549957672201646536053581325377",
686  "0.012329447652244853694626639963780",
687  "0.015010447346388952376697286041943",
688  "0.017548967986243191099665352925900",
689  "0.019938037786440888202278192730714",
690  "0.022194935961012286796332102959499",
691  "0.024339147126000805470360647041454",
692  "0.026374505414839207241503786552615",
693  "0.028286910788771200659968002987960",
694  "0.030052581128092695322521110347341",
695  "0.031646751371439929404586051078883",
696  "0.033050413419978503290785944862689",
697  "0.034255099704226061787082821046821",
698  "0.035262412660156681033782717998428",
699  "0.036076989622888701185500318003895",
700  "0.036698604498456094498018047441094",
701  "0.037120549269832576114119958413599",
702  "0.037334228751935040321235449094698",
703  "0.037361073762679023410321241766599"
704  };
705  static const std::vector<Quad> vw87b(aw87b, aw87b + 23);
706 
707  // w175b, weights of the 175-point formula for abscissae x175
708  static const Quad aw175b[45] = {
709  "0.00003901440664395060055484226",
710  "0.0002787312407993348139961464",
711  "0.0006672934146291138823512275",
712  "0.001163051749910003055308177",
713  "0.001738533916888715565420637",
714  "0.002369555040550195269486165",
715  "0.003036735036032612976379865",
716  "0.003725394125884235586678819",
717  "0.004424387541776355951933433",
718  "0.005125062882078508655875582",
719  "0.005820601038952832388647054",
720  "0.006505667785357412495794539",
721  "0.007176258976795165213169074",
722  "0.007829642423806550517967042",
723  "0.008464316525043036555640657",
724  "0.009079917879101951192512711",
725  "0.009677029304308397008134699",
726  "0.01025687419430508685393322",
727  "0.01082092935368957685380896",
728  "0.01137052956179654620079332",
729  "0.01190655150082017425918844",
730  "0.01242924137407215963971061",
731  "0.01293819980598456566872951",
732  "0.01343248644726851711632966",
733  "0.01391078107864287587682982",
734  "0.01437154592198526807352501",
735  "0.01481316256915705351874381",
736  "0.01523404482122031244940129",
737  "0.01563274056894636856297717",
738  "0.01600802989372176552081826",
739  "0.01635901148521841710605397",
740  "0.01668515675646806540972517",
741  "0.01698630892029276765404134",
742  "0.01726261506199017604299177",
743  "0.01751439915887340284018269",
744  "0.01774200489411242260549908",
745  "0.01794564958245060930824294",
746  "0.01812532816637054898168673",
747  "0.01828078919412312732671357",
748  "0.01841158014800801587767163",
749  "0.01851713825962505903167768",
750  "0.01859689376712028821908313",
751  "0.01865035760791320287947920",
752  "0.01867717982648033250824110",
753  "0.01868053688133951170552407"
754  };
755  static const std::vector<Quad> vw175b(aw175b, aw175b + 45);
756 
757  static const std::vector<Quad>* wb[NGKPLEVELS] = {&vw10b, &vw21b, &vw43b, &vw87b, &vw175b};
758 
759  assert(level >= 0 && level < NGKPLEVELS);
760  return *wb[level];
761  }
762 
763 #endif
764 
765 } // end of namespace details
766 
767 }}} // of namespaces lsst/afw/math
768 
769 #endif
const std::vector< T > & gkp_wb(int level)
Definition: IntGKPData10.h:281
double x
const std::vector< T > & gkp_wa(int level)
Definition: IntGKPData10.h:173
int gkp_n(int level)
Definition: IntGKPData10.h:45
const std::vector< T > & gkp_x(int level)
Definition: IntGKPData10.h:52