242void i4_sobol(
int dim_num,
int *seed,
float quasi[ ])
327# define DIM_MAX2 1111
331 static int dim_num_save = 0;
334 static bool initialized =
false;
344 1, 3, 7, 11, 13, 19, 25, 37, 59, 47,
345 61, 55, 41, 67, 97, 91, 109, 103, 115, 131,
346 193, 137, 145, 143, 241, 157, 185, 167, 229, 171,
347 213, 191, 253, 203, 211, 239, 247, 285, 369, 299,
348 301, 333, 351, 355, 357, 361, 391, 397, 425, 451,
349 463, 487, 501, 529, 539, 545, 557, 563, 601, 607,
350 617, 623, 631, 637, 647, 661, 675, 677, 687, 695,
351 701, 719, 721, 731, 757, 761, 787, 789, 799, 803,
352 817, 827, 847, 859, 865, 875, 877, 883, 895, 901,
353 911, 949, 953, 967, 971, 973, 981, 985, 995, 1001,
354 1019, 1033, 1051, 1063, 1069, 1125, 1135, 1153, 1163, 1221,
355 1239, 1255, 1267, 1279, 1293, 1305, 1315, 1329, 1341, 1347,
356 1367, 1387, 1413, 1423, 1431, 1441, 1479, 1509, 1527, 1531,
357 1555, 1557, 1573, 1591, 1603, 1615, 1627, 1657, 1663, 1673,
358 1717, 1729, 1747, 1759, 1789, 1815, 1821, 1825, 1849, 1863,
359 1869, 1877, 1881, 1891, 1917, 1933, 1939, 1969, 2011, 2035,
360 2041, 2053, 2071, 2091, 2093, 2119, 2147, 2149, 2161, 2171,
361 2189, 2197, 2207, 2217, 2225, 2255, 2257, 2273, 2279, 2283,
362 2293, 2317, 2323, 2341, 2345, 2363, 2365, 2373, 2377, 2385,
363 2395, 2419, 2421, 2431, 2435, 2447, 2475, 2477, 2489, 2503,
364 2521, 2533, 2551, 2561, 2567, 2579, 2581, 2601, 2633, 2657,
365 2669, 2681, 2687, 2693, 2705, 2717, 2727, 2731, 2739, 2741,
366 2773, 2783, 2793, 2799, 2801, 2811, 2819, 2825, 2833, 2867,
367 2879, 2881, 2891, 2905, 2911, 2917, 2927, 2941, 2951, 2955,
368 2963, 2965, 2991, 2999, 3005, 3017, 3035, 3037, 3047, 3053,
369 3083, 3085, 3097, 3103, 3159, 3169, 3179, 3187, 3205, 3209,
370 3223, 3227, 3229, 3251, 3263, 3271, 3277, 3283, 3285, 3299,
371 3305, 3319, 3331, 3343, 3357, 3367, 3373, 3393, 3399, 3413,
372 3417, 3427, 3439, 3441, 3475, 3487, 3497, 3515, 3517, 3529,
373 3543, 3547, 3553, 3559, 3573, 3589, 3613, 3617, 3623, 3627,
374 3635, 3641, 3655, 3659, 3669, 3679, 3697, 3707, 3709, 3713,
375 3731, 3743, 3747, 3771, 3791, 3805, 3827, 3833, 3851, 3865,
376 3889, 3895, 3933, 3947, 3949, 3957, 3971, 3985, 3991, 3995,
377 4007, 4013, 4021, 4045, 4051, 4069, 4073, 4179, 4201, 4219,
378 4221, 4249, 4305, 4331, 4359, 4383, 4387, 4411, 4431, 4439,
379 4449, 4459, 4485, 4531, 4569, 4575, 4621, 4663, 4669, 4711,
380 4723, 4735, 4793, 4801, 4811, 4879, 4893, 4897, 4921, 4927,
381 4941, 4977, 5017, 5027, 5033, 5127, 5169, 5175, 5199, 5213,
382 5223, 5237, 5287, 5293, 5331, 5391, 5405, 5453, 5523, 5573,
383 5591, 5597, 5611, 5641, 5703, 5717, 5721, 5797, 5821, 5909,
384 5913, 5955, 5957, 6005, 6025, 6061, 6067, 6079, 6081, 6231,
385 6237, 6289, 6295, 6329, 6383, 6427, 6453, 6465, 6501, 6523,
386 6539, 6577, 6589, 6601, 6607, 6631, 6683, 6699, 6707, 6761,
387 6795, 6865, 6881, 6901, 6923, 6931, 6943, 6999, 7057, 7079,
388 7103, 7105, 7123, 7173, 7185, 7191, 7207, 7245, 7303, 7327,
389 7333, 7355, 7365, 7369, 7375, 7411, 7431, 7459, 7491, 7505,
390 7515, 7541, 7557, 7561, 7701, 7705, 7727, 7749, 7761, 7783,
391 7795, 7823, 7907, 7953, 7963, 7975, 8049, 8089, 8123, 8125,
392 8137, 8219, 8231, 8245, 8275, 8293, 8303, 8331, 8333, 8351,
393 8357, 8367, 8379, 8381, 8387, 8393, 8417, 8435, 8461, 8469,
394 8489, 8495, 8507, 8515, 8551, 8555, 8569, 8585, 8599, 8605,
395 8639, 8641, 8647, 8653, 8671, 8675, 8689, 8699, 8729, 8741,
396 8759, 8765, 8771, 8795, 8797, 8825, 8831, 8841, 8855, 8859,
397 8883, 8895, 8909, 8943, 8951, 8955, 8965, 8999, 9003, 9031,
398 9045, 9049, 9071, 9073, 9085, 9095, 9101, 9109, 9123, 9129,
399 9137, 9143, 9147, 9185, 9197, 9209, 9227, 9235, 9247, 9253,
400 9257, 9277, 9297, 9303, 9313, 9325, 9343, 9347, 9371, 9373,
401 9397, 9407, 9409, 9415, 9419, 9443, 9481, 9495, 9501, 9505,
402 9517, 9529, 9555, 9557, 9571, 9585, 9591, 9607, 9611, 9621,
403 9625, 9631, 9647, 9661, 9669, 9679, 9687, 9707, 9731, 9733,
404 9745, 9773, 9791, 9803, 9811, 9817, 9833, 9847, 9851, 9863,
405 9875, 9881, 9905, 9911, 9917, 9923, 9963, 9973,10003,10025,
406 10043,10063,10071,10077,10091,10099,10105,10115,10129,10145,
407 10169,10183,10187,10207,10223,10225,10247,10265,10271,10275,
408 10289,10299,10301,10309,10343,10357,10373,10411,10413,10431,
409 10445,10453,10463,10467,10473,10491,10505,10511,10513,10523,
410 10539,10549,10559,10561,10571,10581,10615,10621,10625,10643,
411 10655,10671,10679,10685,10691,10711,10739,10741,10755,10767,
412 10781,10785,10803,10805,10829,10857,10863,10865,10875,10877,
413 10917,10921,10929,10949,10967,10971,10987,10995,11009,11029,
414 11043,11045,11055,11063,11075,11081,11117,11135,11141,11159,
415 11163,11181,11187,11225,11237,11261,11279,11297,11307,11309,
416 11327,11329,11341,11377,11403,11405,11413,11427,11439,11453,
417 11461,11473,11479,11489,11495,11499,11533,11545,11561,11567,
418 11575,11579,11589,11611,11623,11637,11657,11663,11687,11691,
419 11701,11747,11761,11773,11783,11795,11797,11817,11849,11855,
420 11867,11869,11873,11883,11919,11921,11927,11933,11947,11955,
421 11961,11999,12027,12029,12037,12041,12049,12055,12095,12097,
422 12107,12109,12121,12127,12133,12137,12181,12197,12207,12209,
423 12239,12253,12263,12269,12277,12287,12295,12309,12313,12335,
424 12361,12367,12391,12409,12415,12433,12449,12469,12479,12481,
425 12499,12505,12517,12527,12549,12559,12597,12615,12621,12639,
426 12643,12657,12667,12707,12713,12727,12741,12745,12763,12769,
427 12779,12781,12787,12799,12809,12815,12829,12839,12857,12875,
428 12883,12889,12901,12929,12947,12953,12959,12969,12983,12987,
429 12995,13015,13019,13031,13063,13077,13103,13137,13149,13173,
430 13207,13211,13227,13241,13249,13255,13269,13283,13285,13303,
431 13307,13321,13339,13351,13377,13389,13407,13417,13431,13435,
432 13447,13459,13465,13477,13501,13513,13531,13543,13561,13581,
433 13599,13605,13617,13623,13637,13647,13661,13677,13683,13695,
434 13725,13729,13753,13773,13781,13785,13795,13801,13807,13825,
435 13835,13855,13861,13871,13883,13897,13905,13915,13939,13941,
436 13969,13979,13981,13997,14027,14035,14037,14051,14063,14085,
437 14095,14107,14113,14125,14137,14145,14151,14163,14193,14199,
438 14219,14229,14233,14243,14277,14287,14289,14295,14301,14305,
439 14323,14339,14341,14359,14365,14375,14387,14411,14425,14441,
440 14449,14499,14513,14523,14537,14543,14561,14579,14585,14593,
441 14599,14603,14611,14641,14671,14695,14701,14723,14725,14743,
442 14753,14759,14765,14795,14797,14803,14831,14839,14845,14855,
443 14889,14895,14909,14929,14941,14945,14951,14963,14965,14985,
444 15033,15039,15053,15059,15061,15071,15077,15081,15099,15121,
445 15147,15149,15157,15167,15187,15193,15203,15205,15215,15217,
446 15223,15243,15257,15269,15273,15287,15291,15313,15335,15347,
447 15359,15373,15379,15381,15391,15395,15397,15419,15439,15453,
448 15469,15491,15503,15517,15527,15531,15545,15559,15593,15611,
449 15613,15619,15639,15643,15649,15661,15667,15669,15681,15693,
450 15717,15721,15741,15745,15765,15793,15799,15811,15825,15835,
451 15847,15851,15865,15877,15881,15887,15899,15915,15935,15937,
452 15955,15973,15977,16011,16035,16061,16069,16087,16093,16097,
453 16121,16141,16153,16159,16165,16183,16189,16195,16197,16201,
454 16209,16215,16225,16259,16265,16273,16299,16309,16355,16375,
458 static int seed_save = - 1;
462 if (!initialized || dim_num != dim_num_save) {
465 for (j = 0; j <
LOG_MAX; j++) {
12191 v[1000][10] = 1051;
12192 v[1001][10] = 1261;
12194 v[1003][10] = 1555;
12195 v[1004][10] = 1757;
12196 v[1005][10] = 1777;
12198 v[1007][10] = 1583;
12199 v[1008][10] = 1957;
12202 v[1011][10] = 1163;
12205 v[1014][10] = 1963;
12207 v[1016][10] = 1905;
12209 v[1018][10] = 1677;
12213 v[1022][10] = 1723;
12215 v[1024][10] = 1885;
12216 v[1025][10] = 1249;
12218 v[1027][10] = 1803;
12223 v[1032][10] = 1767;
12226 v[1035][10] = 1035;
12228 v[1037][10] = 1263;
12229 v[1038][10] = 1881;
12230 v[1039][10] = 1779;
12231 v[1040][10] = 1565;
12236 v[1045][10] = 1419;
12238 v[1047][10] = 1889;
12240 v[1049][10] = 1871;
12241 v[1050][10] = 1869;
12244 v[1053][10] = 1547;
12245 v[1054][10] = 1799;
12247 v[1056][10] = 1441;
12249 v[1058][10] = 2021;
12250 v[1059][10] = 1303;
12251 v[1060][10] = 1505;
12252 v[1061][10] = 1735;
12253 v[1062][10] = 1619;
12254 v[1063][10] = 1065;
12255 v[1064][10] = 1161;
12256 v[1065][10] = 2047;
12260 v[1069][10] = 1447;
12263 v[1072][10] = 1065;
12267 v[1076][10] = 1257;
12268 v[1077][10] = 1833;
12270 v[1079][10] = 1841;
12271 v[1080][10] = 1733;
12272 v[1081][10] = 1179;
12273 v[1082][10] = 1191;
12274 v[1083][10] = 1025;
12275 v[1084][10] = 1639;
12276 v[1085][10] = 1955;
12277 v[1086][10] = 1423;
12278 v[1087][10] = 1685;
12279 v[1088][10] = 1711;
12283 v[1092][10] = 1653;
12288 v[1097][10] = 1505;
12290 v[1099][10] = 1449;
12291 v[1100][10] = 1573;
12292 v[1101][10] = 1297;
12293 v[1102][10] = 1821;
12294 v[1103][10] = 1691;
12297 v[1106][10] = 1187;
12299 v[1108][10] = 1535;
12966 v[1000][11] = 2977;
12967 v[1001][11] = 1979;
12968 v[1002][11] = 2271;
12969 v[1003][11] = 3247;
12970 v[1004][11] = 1267;
12971 v[1005][11] = 1747;
12975 v[1009][11] = 2001;
12976 v[1010][11] = 1195;
12977 v[1011][11] = 3065;
12979 v[1013][11] = 1499;
12980 v[1014][11] = 3529;
12981 v[1015][11] = 1081;
12982 v[1016][11] = 2877;
12983 v[1017][11] = 3077;
12985 v[1019][11] = 1793;
12986 v[1020][11] = 2409;
12987 v[1021][11] = 3995;
12988 v[1022][11] = 2559;
12989 v[1023][11] = 4081;
12990 v[1024][11] = 1195;
12991 v[1025][11] = 2955;
12992 v[1026][11] = 1117;
12993 v[1027][11] = 1409;
12996 v[1030][11] = 1521;
12997 v[1031][11] = 1607;
12999 v[1033][11] = 3055;
13000 v[1034][11] = 3123;
13001 v[1035][11] = 2533;
13002 v[1036][11] = 2329;
13003 v[1037][11] = 3477;
13005 v[1039][11] = 3683;
13006 v[1040][11] = 3715;
13008 v[1042][11] = 3139;
13009 v[1043][11] = 3311;
13011 v[1045][11] = 3511;
13012 v[1046][11] = 2299;
13014 v[1048][11] = 2941;
13015 v[1049][11] = 3067;
13016 v[1050][11] = 1331;
13017 v[1051][11] = 1081;
13018 v[1052][11] = 1097;
13019 v[1053][11] = 2853;
13020 v[1054][11] = 2299;
13022 v[1056][11] = 1745;
13024 v[1058][11] = 3819;
13026 v[1060][11] = 1059;
13027 v[1061][11] = 3559;
13029 v[1063][11] = 3743;
13032 v[1066][11] = 3501;
13034 v[1068][11] = 2599;
13035 v[1069][11] = 3983;
13036 v[1070][11] = 3961;
13038 v[1072][11] = 1899;
13040 v[1074][11] = 2493;
13041 v[1075][11] = 1795;
13045 v[1079][11] = 2361;
13046 v[1080][11] = 3093;
13047 v[1081][11] = 3119;
13048 v[1082][11] = 3679;
13049 v[1083][11] = 2367;
13050 v[1084][11] = 1701;
13051 v[1085][11] = 1445;
13052 v[1086][11] = 1321;
13053 v[1087][11] = 2397;
13054 v[1088][11] = 1241;
13055 v[1089][11] = 3305;
13056 v[1090][11] = 3985;
13057 v[1091][11] = 2349;
13058 v[1092][11] = 4067;
13059 v[1093][11] = 3805;
13060 v[1094][11] = 3073;
13061 v[1095][11] = 2837;
13062 v[1096][11] = 1567;
13063 v[1097][11] = 3783;
13065 v[1099][11] = 2441;
13066 v[1100][11] = 1181;
13069 v[1103][11] = 1201;
13070 v[1104][11] = 3735;
13071 v[1105][11] = 2517;
13073 v[1107][11] = 1535;
13074 v[1108][11] = 2175;
13075 v[1109][11] = 3613;
13076 v[1110][11] = 3019;
13597 v[1000][12] = 4939;
13598 v[1001][12] = 7671;
13599 v[1002][12] = 6059;
13600 v[1003][12] = 6275;
13601 v[1004][12] = 6517;
13602 v[1005][12] = 1931;
13603 v[1006][12] = 4583;
13604 v[1007][12] = 7301;
13605 v[1008][12] = 1267;
13606 v[1009][12] = 7509;
13607 v[1010][12] = 1435;
13608 v[1011][12] = 2169;
13609 v[1012][12] = 6939;
13610 v[1013][12] = 3515;
13611 v[1014][12] = 2985;
13612 v[1015][12] = 2787;
13613 v[1016][12] = 2123;
13614 v[1017][12] = 1969;
13615 v[1018][12] = 3307;
13617 v[1020][12] = 4359;
13618 v[1021][12] = 7059;
13619 v[1022][12] = 5273;
13620 v[1023][12] = 5873;
13621 v[1024][12] = 6657;
13622 v[1025][12] = 6765;
13623 v[1026][12] = 6229;
13624 v[1027][12] = 3179;
13625 v[1028][12] = 1583;
13626 v[1029][12] = 6237;
13627 v[1030][12] = 2155;
13630 v[1033][12] = 7491;
13631 v[1034][12] = 3309;
13632 v[1035][12] = 6805;
13633 v[1036][12] = 3015;
13634 v[1037][12] = 6831;
13635 v[1038][12] = 7819;
13637 v[1040][12] = 4747;
13638 v[1041][12] = 3935;
13639 v[1042][12] = 4109;
13640 v[1043][12] = 1311;
13642 v[1045][12] = 3089;
13643 v[1046][12] = 7059;
13644 v[1047][12] = 4247;
13645 v[1048][12] = 2989;
13646 v[1049][12] = 1509;
13647 v[1050][12] = 4919;
13648 v[1051][12] = 1841;
13649 v[1052][12] = 3045;
13650 v[1053][12] = 3821;
13651 v[1054][12] = 6929;
13652 v[1055][12] = 4655;
13653 v[1056][12] = 1333;
13654 v[1057][12] = 6429;
13655 v[1058][12] = 6649;
13656 v[1059][12] = 2131;
13657 v[1060][12] = 5265;
13658 v[1061][12] = 1051;
13660 v[1063][12] = 8057;
13661 v[1064][12] = 3379;
13662 v[1065][12] = 2179;
13663 v[1066][12] = 1993;
13664 v[1067][12] = 5655;
13665 v[1068][12] = 3063;
13666 v[1069][12] = 6381;
13667 v[1070][12] = 3587;
13668 v[1071][12] = 7417;
13669 v[1072][12] = 1579;
13670 v[1073][12] = 1541;
13671 v[1074][12] = 2107;
13672 v[1075][12] = 5085;
13673 v[1076][12] = 2873;
13674 v[1077][12] = 6141;
13676 v[1079][12] = 3537;
13677 v[1080][12] = 2157;
13679 v[1082][12] = 1999;
13680 v[1083][12] = 1465;
13681 v[1084][12] = 5171;
13682 v[1085][12] = 5651;
13683 v[1086][12] = 1535;
13684 v[1087][12] = 7235;
13685 v[1088][12] = 4349;
13686 v[1089][12] = 1263;
13687 v[1090][12] = 1453;
13688 v[1091][12] = 1005;
13689 v[1092][12] = 6893;
13690 v[1093][12] = 2919;
13691 v[1094][12] = 1947;
13692 v[1095][12] = 1635;
13693 v[1096][12] = 3963;
13696 v[1099][12] = 4569;
13698 v[1101][12] = 6737;
13699 v[1102][12] = 2995;
13700 v[1103][12] = 7235;
13701 v[1104][12] = 7713;
13703 v[1106][12] = 4821;
13704 v[1107][12] = 2377;
13705 v[1108][12] = 1673;
13707 v[1110][12] = 6541;
13711 if (dim_num < 1 ||
DIM_MAX2 < dim_num) {
13713 cout <<
"I4_SOBOL - Fatal error!\n";
13714 cout <<
" The spatial dimension DIM_NUM should satisfy:\n";
13715 cout <<
" 1 <= DIM_NUM <= " <<
DIM_MAX2 <<
"\n";
13716 cout <<
" But this input value is DIM_NUM = " << dim_num <<
"\n";
13720 dim_num_save = dim_num;
13725 for (i = 1; i <=
LOG_MAX; i++) {
13726 atmost = 2 * atmost + 1;
13735 for (j = 0; j < maxcol; j++) {
13741 for (i = 1; i < dim_num; i++) {
13763 for (k = m-1; 0 <= k; k--) {
13765 includ[k] = (j != (2 * j2));
13774 for (j = m; j < maxcol; j++) {
13778 for (k = 0; k < m; k++) {
13782 newv = (newv ^ (l * v[i][j-k-1]));
13792 for (j = maxcol-2; 0 <= j; j--) {
13794 for (i = 0; i < dim_num; i++) {
13795 v[i][j] = v[i][j] * l;
13801 recipd = 1.0E+00 / ((float)(2 * l));
13810 for (i = 0; i < dim_num; i++) {
13814 else if (*seed == seed_save + 1) {
13817 else if (*seed <= seed_save) {
13820 for (i = 0; i < dim_num; i++) {
13824 for (seed_temp = seed_save; seed_temp <= (*seed)-1; seed_temp++) {
13828 for (i = 0; i < dim_num; i++) {
13829 lastq[i] = (lastq[i] ^ v[i][l-1]);
13834 else if (seed_save+1 < *seed) {
13835 for (seed_temp = seed_save+1; seed_temp <= (*seed)-1; seed_temp++) {
13839 for (i = 0; i < dim_num; i++) {
13840 lastq[i] = (lastq[i] ^ v[i][l-1]);
13851 cout <<
"I4_SOBOL - Fatal error!\n";
13852 cout <<
" The value of SEED seems to be too large!\n";
13853 cout <<
" SEED = " << *seed <<
"\n";
13854 cout <<
" MAXCOL = " << maxcol <<
"\n";
13862 for (i = 0; i < dim_num; i++) {
13863 quasi[i] = ((float) lastq[i]) * recipd;
13865 lastq[i] = (lastq[i] ^ v[i][l-1]);
14163void i8_sobol(
int dim_num,
long long int *seed,
double quasi[ ])
14249# define DIM_MAX2 1111
14261 static int dim_num_save = 0;
14264 static bool initialized =
false;
14268 long long int l = 0;
14269 static long long int lastq[
DIM_MAX2];
14271 static long long int maxcol;
14272 long long int newv;
14273 static long long int poly[
DIM_MAX2] = {
14274 1, 3, 7, 11, 13, 19, 25, 37, 59, 47,
14275 61, 55, 41, 67, 97, 91, 109, 103, 115, 131,
14276 193, 137, 145, 143, 241, 157, 185, 167, 229, 171,
14277 213, 191, 253, 203, 211, 239, 247, 285, 369, 299,
14278 301, 333, 351, 355, 357, 361, 391, 397, 425, 451,
14279 463, 487, 501, 529, 539, 545, 557, 563, 601, 607,
14280 617, 623, 631, 637, 647, 661, 675, 677, 687, 695,
14281 701, 719, 721, 731, 757, 761, 787, 789, 799, 803,
14282 817, 827, 847, 859, 865, 875, 877, 883, 895, 901,
14283 911, 949, 953, 967, 971, 973, 981, 985, 995, 1001,
14284 1019, 1033, 1051, 1063, 1069, 1125, 1135, 1153, 1163, 1221,
14285 1239, 1255, 1267, 1279, 1293, 1305, 1315, 1329, 1341, 1347,
14286 1367, 1387, 1413, 1423, 1431, 1441, 1479, 1509, 1527, 1531,
14287 1555, 1557, 1573, 1591, 1603, 1615, 1627, 1657, 1663, 1673,
14288 1717, 1729, 1747, 1759, 1789, 1815, 1821, 1825, 1849, 1863,
14289 1869, 1877, 1881, 1891, 1917, 1933, 1939, 1969, 2011, 2035,
14290 2041, 2053, 2071, 2091, 2093, 2119, 2147, 2149, 2161, 2171,
14291 2189, 2197, 2207, 2217, 2225, 2255, 2257, 2273, 2279, 2283,
14292 2293, 2317, 2323, 2341, 2345, 2363, 2365, 2373, 2377, 2385,
14293 2395, 2419, 2421, 2431, 2435, 2447, 2475, 2477, 2489, 2503,
14294 2521, 2533, 2551, 2561, 2567, 2579, 2581, 2601, 2633, 2657,
14295 2669, 2681, 2687, 2693, 2705, 2717, 2727, 2731, 2739, 2741,
14296 2773, 2783, 2793, 2799, 2801, 2811, 2819, 2825, 2833, 2867,
14297 2879, 2881, 2891, 2905, 2911, 2917, 2927, 2941, 2951, 2955,
14298 2963, 2965, 2991, 2999, 3005, 3017, 3035, 3037, 3047, 3053,
14299 3083, 3085, 3097, 3103, 3159, 3169, 3179, 3187, 3205, 3209,
14300 3223, 3227, 3229, 3251, 3263, 3271, 3277, 3283, 3285, 3299,
14301 3305, 3319, 3331, 3343, 3357, 3367, 3373, 3393, 3399, 3413,
14302 3417, 3427, 3439, 3441, 3475, 3487, 3497, 3515, 3517, 3529,
14303 3543, 3547, 3553, 3559, 3573, 3589, 3613, 3617, 3623, 3627,
14304 3635, 3641, 3655, 3659, 3669, 3679, 3697, 3707, 3709, 3713,
14305 3731, 3743, 3747, 3771, 3791, 3805, 3827, 3833, 3851, 3865,
14306 3889, 3895, 3933, 3947, 3949, 3957, 3971, 3985, 3991, 3995,
14307 4007, 4013, 4021, 4045, 4051, 4069, 4073, 4179, 4201, 4219,
14308 4221, 4249, 4305, 4331, 4359, 4383, 4387, 4411, 4431, 4439,
14309 4449, 4459, 4485, 4531, 4569, 4575, 4621, 4663, 4669, 4711,
14310 4723, 4735, 4793, 4801, 4811, 4879, 4893, 4897, 4921, 4927,
14311 4941, 4977, 5017, 5027, 5033, 5127, 5169, 5175, 5199, 5213,
14312 5223, 5237, 5287, 5293, 5331, 5391, 5405, 5453, 5523, 5573,
14313 5591, 5597, 5611, 5641, 5703, 5717, 5721, 5797, 5821, 5909,
14314 5913, 5955, 5957, 6005, 6025, 6061, 6067, 6079, 6081, 6231,
14315 6237, 6289, 6295, 6329, 6383, 6427, 6453, 6465, 6501, 6523,
14316 6539, 6577, 6589, 6601, 6607, 6631, 6683, 6699, 6707, 6761,
14317 6795, 6865, 6881, 6901, 6923, 6931, 6943, 6999, 7057, 7079,
14318 7103, 7105, 7123, 7173, 7185, 7191, 7207, 7245, 7303, 7327,
14319 7333, 7355, 7365, 7369, 7375, 7411, 7431, 7459, 7491, 7505,
14320 7515, 7541, 7557, 7561, 7701, 7705, 7727, 7749, 7761, 7783,
14321 7795, 7823, 7907, 7953, 7963, 7975, 8049, 8089, 8123, 8125,
14322 8137, 8219, 8231, 8245, 8275, 8293, 8303, 8331, 8333, 8351,
14323 8357, 8367, 8379, 8381, 8387, 8393, 8417, 8435, 8461, 8469,
14324 8489, 8495, 8507, 8515, 8551, 8555, 8569, 8585, 8599, 8605,
14325 8639, 8641, 8647, 8653, 8671, 8675, 8689, 8699, 8729, 8741,
14326 8759, 8765, 8771, 8795, 8797, 8825, 8831, 8841, 8855, 8859,
14327 8883, 8895, 8909, 8943, 8951, 8955, 8965, 8999, 9003, 9031,
14328 9045, 9049, 9071, 9073, 9085, 9095, 9101, 9109, 9123, 9129,
14329 9137, 9143, 9147, 9185, 9197, 9209, 9227, 9235, 9247, 9253,
14330 9257, 9277, 9297, 9303, 9313, 9325, 9343, 9347, 9371, 9373,
14331 9397, 9407, 9409, 9415, 9419, 9443, 9481, 9495, 9501, 9505,
14332 9517, 9529, 9555, 9557, 9571, 9585, 9591, 9607, 9611, 9621,
14333 9625, 9631, 9647, 9661, 9669, 9679, 9687, 9707, 9731, 9733,
14334 9745, 9773, 9791, 9803, 9811, 9817, 9833, 9847, 9851, 9863,
14335 9875, 9881, 9905, 9911, 9917, 9923, 9963, 9973,10003,10025,
14336 10043,10063,10071,10077,10091,10099,10105,10115,10129,10145,
14337 10169,10183,10187,10207,10223,10225,10247,10265,10271,10275,
14338 10289,10299,10301,10309,10343,10357,10373,10411,10413,10431,
14339 10445,10453,10463,10467,10473,10491,10505,10511,10513,10523,
14340 10539,10549,10559,10561,10571,10581,10615,10621,10625,10643,
14341 10655,10671,10679,10685,10691,10711,10739,10741,10755,10767,
14342 10781,10785,10803,10805,10829,10857,10863,10865,10875,10877,
14343 10917,10921,10929,10949,10967,10971,10987,10995,11009,11029,
14344 11043,11045,11055,11063,11075,11081,11117,11135,11141,11159,
14345 11163,11181,11187,11225,11237,11261,11279,11297,11307,11309,
14346 11327,11329,11341,11377,11403,11405,11413,11427,11439,11453,
14347 11461,11473,11479,11489,11495,11499,11533,11545,11561,11567,
14348 11575,11579,11589,11611,11623,11637,11657,11663,11687,11691,
14349 11701,11747,11761,11773,11783,11795,11797,11817,11849,11855,
14350 11867,11869,11873,11883,11919,11921,11927,11933,11947,11955,
14351 11961,11999,12027,12029,12037,12041,12049,12055,12095,12097,
14352 12107,12109,12121,12127,12133,12137,12181,12197,12207,12209,
14353 12239,12253,12263,12269,12277,12287,12295,12309,12313,12335,
14354 12361,12367,12391,12409,12415,12433,12449,12469,12479,12481,
14355 12499,12505,12517,12527,12549,12559,12597,12615,12621,12639,
14356 12643,12657,12667,12707,12713,12727,12741,12745,12763,12769,
14357 12779,12781,12787,12799,12809,12815,12829,12839,12857,12875,
14358 12883,12889,12901,12929,12947,12953,12959,12969,12983,12987,
14359 12995,13015,13019,13031,13063,13077,13103,13137,13149,13173,
14360 13207,13211,13227,13241,13249,13255,13269,13283,13285,13303,
14361 13307,13321,13339,13351,13377,13389,13407,13417,13431,13435,
14362 13447,13459,13465,13477,13501,13513,13531,13543,13561,13581,
14363 13599,13605,13617,13623,13637,13647,13661,13677,13683,13695,
14364 13725,13729,13753,13773,13781,13785,13795,13801,13807,13825,
14365 13835,13855,13861,13871,13883,13897,13905,13915,13939,13941,
14366 13969,13979,13981,13997,14027,14035,14037,14051,14063,14085,
14367 14095,14107,14113,14125,14137,14145,14151,14163,14193,14199,
14368 14219,14229,14233,14243,14277,14287,14289,14295,14301,14305,
14369 14323,14339,14341,14359,14365,14375,14387,14411,14425,14441,
14370 14449,14499,14513,14523,14537,14543,14561,14579,14585,14593,
14371 14599,14603,14611,14641,14671,14695,14701,14723,14725,14743,
14372 14753,14759,14765,14795,14797,14803,14831,14839,14845,14855,
14373 14889,14895,14909,14929,14941,14945,14951,14963,14965,14985,
14374 15033,15039,15053,15059,15061,15071,15077,15081,15099,15121,
14375 15147,15149,15157,15167,15187,15193,15203,15205,15215,15217,
14376 15223,15243,15257,15269,15273,15287,15291,15313,15335,15347,
14377 15359,15373,15379,15381,15391,15395,15397,15419,15439,15453,
14378 15469,15491,15503,15517,15527,15531,15545,15559,15593,15611,
14379 15613,15619,15639,15643,15649,15661,15667,15669,15681,15693,
14380 15717,15721,15741,15745,15765,15793,15799,15811,15825,15835,
14381 15847,15851,15865,15877,15881,15887,15899,15915,15935,15937,
14382 15955,15973,15977,16011,16035,16061,16069,16087,16093,16097,
14383 16121,16141,16153,16159,16165,16183,16189,16195,16197,16201,
14384 16209,16215,16225,16259,16265,16273,16299,16309,16355,16375,
14387 static double recipd;
14388 static long long int seed_save = - 1;
14389 long long int seed_temp;
14392 if (!initialized || dim_num != dim_num_save) {
14393 initialized =
true;
14395 for (j = 0; j <
LOG_MAX; j++) {
26121 v[1000][10] = 1051;
26122 v[1001][10] = 1261;
26124 v[1003][10] = 1555;
26125 v[1004][10] = 1757;
26126 v[1005][10] = 1777;
26128 v[1007][10] = 1583;
26129 v[1008][10] = 1957;
26132 v[1011][10] = 1163;
26135 v[1014][10] = 1963;
26137 v[1016][10] = 1905;
26139 v[1018][10] = 1677;
26143 v[1022][10] = 1723;
26145 v[1024][10] = 1885;
26146 v[1025][10] = 1249;
26148 v[1027][10] = 1803;
26153 v[1032][10] = 1767;
26156 v[1035][10] = 1035;
26158 v[1037][10] = 1263;
26159 v[1038][10] = 1881;
26160 v[1039][10] = 1779;
26161 v[1040][10] = 1565;
26166 v[1045][10] = 1419;
26168 v[1047][10] = 1889;
26170 v[1049][10] = 1871;
26171 v[1050][10] = 1869;
26174 v[1053][10] = 1547;
26175 v[1054][10] = 1799;
26177 v[1056][10] = 1441;
26179 v[1058][10] = 2021;
26180 v[1059][10] = 1303;
26181 v[1060][10] = 1505;
26182 v[1061][10] = 1735;
26183 v[1062][10] = 1619;
26184 v[1063][10] = 1065;
26185 v[1064][10] = 1161;
26186 v[1065][10] = 2047;
26190 v[1069][10] = 1447;
26193 v[1072][10] = 1065;
26197 v[1076][10] = 1257;
26198 v[1077][10] = 1833;
26200 v[1079][10] = 1841;
26201 v[1080][10] = 1733;
26202 v[1081][10] = 1179;
26203 v[1082][10] = 1191;
26204 v[1083][10] = 1025;
26205 v[1084][10] = 1639;
26206 v[1085][10] = 1955;
26207 v[1086][10] = 1423;
26208 v[1087][10] = 1685;
26209 v[1088][10] = 1711;
26213 v[1092][10] = 1653;
26218 v[1097][10] = 1505;
26220 v[1099][10] = 1449;
26221 v[1100][10] = 1573;
26222 v[1101][10] = 1297;
26223 v[1102][10] = 1821;
26224 v[1103][10] = 1691;
26227 v[1106][10] = 1187;
26229 v[1108][10] = 1535;
26896 v[1000][11] = 2977;
26897 v[1001][11] = 1979;
26898 v[1002][11] = 2271;
26899 v[1003][11] = 3247;
26900 v[1004][11] = 1267;
26901 v[1005][11] = 1747;
26905 v[1009][11] = 2001;
26906 v[1010][11] = 1195;
26907 v[1011][11] = 3065;
26909 v[1013][11] = 1499;
26910 v[1014][11] = 3529;
26911 v[1015][11] = 1081;
26912 v[1016][11] = 2877;
26913 v[1017][11] = 3077;
26915 v[1019][11] = 1793;
26916 v[1020][11] = 2409;
26917 v[1021][11] = 3995;
26918 v[1022][11] = 2559;
26919 v[1023][11] = 4081;
26920 v[1024][11] = 1195;
26921 v[1025][11] = 2955;
26922 v[1026][11] = 1117;
26923 v[1027][11] = 1409;
26926 v[1030][11] = 1521;
26927 v[1031][11] = 1607;
26929 v[1033][11] = 3055;
26930 v[1034][11] = 3123;
26931 v[1035][11] = 2533;
26932 v[1036][11] = 2329;
26933 v[1037][11] = 3477;
26935 v[1039][11] = 3683;
26936 v[1040][11] = 3715;
26938 v[1042][11] = 3139;
26939 v[1043][11] = 3311;
26941 v[1045][11] = 3511;
26942 v[1046][11] = 2299;
26944 v[1048][11] = 2941;
26945 v[1049][11] = 3067;
26946 v[1050][11] = 1331;
26947 v[1051][11] = 1081;
26948 v[1052][11] = 1097;
26949 v[1053][11] = 2853;
26950 v[1054][11] = 2299;
26952 v[1056][11] = 1745;
26954 v[1058][11] = 3819;
26956 v[1060][11] = 1059;
26957 v[1061][11] = 3559;
26959 v[1063][11] = 3743;
26962 v[1066][11] = 3501;
26964 v[1068][11] = 2599;
26965 v[1069][11] = 3983;
26966 v[1070][11] = 3961;
26968 v[1072][11] = 1899;
26970 v[1074][11] = 2493;
26971 v[1075][11] = 1795;
26975 v[1079][11] = 2361;
26976 v[1080][11] = 3093;
26977 v[1081][11] = 3119;
26978 v[1082][11] = 3679;
26979 v[1083][11] = 2367;
26980 v[1084][11] = 1701;
26981 v[1085][11] = 1445;
26982 v[1086][11] = 1321;
26983 v[1087][11] = 2397;
26984 v[1088][11] = 1241;
26985 v[1089][11] = 3305;
26986 v[1090][11] = 3985;
26987 v[1091][11] = 2349;
26988 v[1092][11] = 4067;
26989 v[1093][11] = 3805;
26990 v[1094][11] = 3073;
26991 v[1095][11] = 2837;
26992 v[1096][11] = 1567;
26993 v[1097][11] = 3783;
26995 v[1099][11] = 2441;
26996 v[1100][11] = 1181;
26999 v[1103][11] = 1201;
27000 v[1104][11] = 3735;
27001 v[1105][11] = 2517;
27003 v[1107][11] = 1535;
27004 v[1108][11] = 2175;
27005 v[1109][11] = 3613;
27006 v[1110][11] = 3019;
27527 v[1000][12] = 4939;
27528 v[1001][12] = 7671;
27529 v[1002][12] = 6059;
27530 v[1003][12] = 6275;
27531 v[1004][12] = 6517;
27532 v[1005][12] = 1931;
27533 v[1006][12] = 4583;
27534 v[1007][12] = 7301;
27535 v[1008][12] = 1267;
27536 v[1009][12] = 7509;
27537 v[1010][12] = 1435;
27538 v[1011][12] = 2169;
27539 v[1012][12] = 6939;
27540 v[1013][12] = 3515;
27541 v[1014][12] = 2985;
27542 v[1015][12] = 2787;
27543 v[1016][12] = 2123;
27544 v[1017][12] = 1969;
27545 v[1018][12] = 3307;
27547 v[1020][12] = 4359;
27548 v[1021][12] = 7059;
27549 v[1022][12] = 5273;
27550 v[1023][12] = 5873;
27551 v[1024][12] = 6657;
27552 v[1025][12] = 6765;
27553 v[1026][12] = 6229;
27554 v[1027][12] = 3179;
27555 v[1028][12] = 1583;
27556 v[1029][12] = 6237;
27557 v[1030][12] = 2155;
27560 v[1033][12] = 7491;
27561 v[1034][12] = 3309;
27562 v[1035][12] = 6805;
27563 v[1036][12] = 3015;
27564 v[1037][12] = 6831;
27565 v[1038][12] = 7819;
27567 v[1040][12] = 4747;
27568 v[1041][12] = 3935;
27569 v[1042][12] = 4109;
27570 v[1043][12] = 1311;
27572 v[1045][12] = 3089;
27573 v[1046][12] = 7059;
27574 v[1047][12] = 4247;
27575 v[1048][12] = 2989;
27576 v[1049][12] = 1509;
27577 v[1050][12] = 4919;
27578 v[1051][12] = 1841;
27579 v[1052][12] = 3045;
27580 v[1053][12] = 3821;
27581 v[1054][12] = 6929;
27582 v[1055][12] = 4655;
27583 v[1056][12] = 1333;
27584 v[1057][12] = 6429;
27585 v[1058][12] = 6649;
27586 v[1059][12] = 2131;
27587 v[1060][12] = 5265;
27588 v[1061][12] = 1051;
27590 v[1063][12] = 8057;
27591 v[1064][12] = 3379;
27592 v[1065][12] = 2179;
27593 v[1066][12] = 1993;
27594 v[1067][12] = 5655;
27595 v[1068][12] = 3063;
27596 v[1069][12] = 6381;
27597 v[1070][12] = 3587;
27598 v[1071][12] = 7417;
27599 v[1072][12] = 1579;
27600 v[1073][12] = 1541;
27601 v[1074][12] = 2107;
27602 v[1075][12] = 5085;
27603 v[1076][12] = 2873;
27604 v[1077][12] = 6141;
27606 v[1079][12] = 3537;
27607 v[1080][12] = 2157;
27609 v[1082][12] = 1999;
27610 v[1083][12] = 1465;
27611 v[1084][12] = 5171;
27612 v[1085][12] = 5651;
27613 v[1086][12] = 1535;
27614 v[1087][12] = 7235;
27615 v[1088][12] = 4349;
27616 v[1089][12] = 1263;
27617 v[1090][12] = 1453;
27618 v[1091][12] = 1005;
27619 v[1092][12] = 6893;
27620 v[1093][12] = 2919;
27621 v[1094][12] = 1947;
27622 v[1095][12] = 1635;
27623 v[1096][12] = 3963;
27626 v[1099][12] = 4569;
27628 v[1101][12] = 6737;
27629 v[1102][12] = 2995;
27630 v[1103][12] = 7235;
27631 v[1104][12] = 7713;
27633 v[1106][12] = 4821;
27634 v[1107][12] = 2377;
27635 v[1108][12] = 1673;
27637 v[1110][12] = 6541;
27641 if (dim_num < 1 ||
DIM_MAX2 < dim_num) {
27643 cout <<
"I8_SOBOL - Fatal error!\n";
27644 cout <<
" The spatial dimension DIM_NUM should satisfy:\n";
27645 cout <<
" 1 <= DIM_NUM <= " <<
DIM_MAX2 <<
"\n";
27646 cout <<
" But this input value is DIM_NUM = " << dim_num <<
"\n";
27650 dim_num_save = dim_num;
27666 for (j = 0; j < maxcol; j++) {
27672 for (i = 1; i < dim_num; i++) {
27694 for (k = m-1; 0 <= k; k--) {
27696 includ[k] = (j != (2 * j2));
27705 for (j = m; j < maxcol; j++) {
27709 for (k = 0; k < m; k++) {
27713 newv = (newv ^ (l * v[i][j-k-1]));
27723 for (j = maxcol - 2; 0 <= j; j--) {
27725 for (i = 0; i < dim_num; i++) {
27726 v[i][j] = v[i][j] * l;
27732 recipd = 1.0E+00 / ((double)(2 * l));
27741 for (i = 0; i < dim_num; i++) {
27745 else if (*seed == seed_save + 1) {
27748 else if (*seed <= seed_save) {
27751 for (i = 0; i < dim_num; i++) {
27755 for (seed_temp = seed_save; seed_temp <= (*seed)-1; seed_temp++) {
27759 for (i = 0; i < dim_num; i++) {
27760 lastq[i] = (lastq[i] ^ v[i][l-1]);
27765 else if (seed_save+1 < *seed) {
27766 for (seed_temp = seed_save+1; seed_temp <= (*seed)-1; seed_temp++) {
27770 for (i = 0; i < dim_num; i++) {
27771 lastq[i] = (lastq[i] ^ v[i][l-1]);
27781 cout <<
"I8_SOBOL - Fatal error!\n";
27782 cout <<
" The value of SEED seems to be too large!\n";
27783 cout <<
" SEED = " << *seed <<
"\n";
27784 cout <<
" MAXCOL = " << maxcol <<
"\n";
27785 cout <<
" L = " << l <<
"\n";
27792 for (i = 0; i < dim_num; i++) {
27793 quasi[i] = ((double) lastq[i]) * recipd;
27795 lastq[i] = (lastq[i] ^ v[i][l-1]);