├── image ├── m2m.png ├── cell_class.png ├── multipole.png ├── quad_tree.png ├── split_cell.png ├── division_tree.png └── potential_eval.png ├── .gitignore ├── test ├── cube_gen.py ├── ellipsoid_gen.py ├── cube100_result ├── ellipsoid100_result ├── cube100 ├── ellipsoid100 ├── cube1000_result ├── ellipsoid1000_result ├── ellipsoid1000 └── cube1000 ├── README.md ├── direct_sum.py ├── treecode.py ├── style └── fmmstyle.css ├── 05_upward_sweep.ipynb ├── treecode_helper.py └── 04_tree_construction.ipynb /image/m2m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/m2m.png -------------------------------------------------------------------------------- /image/cell_class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/cell_class.png -------------------------------------------------------------------------------- /image/multipole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/multipole.png -------------------------------------------------------------------------------- /image/quad_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/quad_tree.png -------------------------------------------------------------------------------- /image/split_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/split_cell.png -------------------------------------------------------------------------------- /image/division_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/division_tree.png -------------------------------------------------------------------------------- /image/potential_eval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barbagroup/FMM_tutorial/master/image/potential_eval.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .ipynb_checkpoints 3 | *.pyc 4 | 5 | # backup files generated by text editors # 6 | *~ 7 | -------------------------------------------------------------------------------- /test/cube_gen.py: -------------------------------------------------------------------------------- 1 | from numpy import random 2 | 3 | n = 10000 4 | 5 | coords = random.rand(n,3) 6 | m = 1./n 7 | 8 | fid = open('cube'+str(n),'w') 9 | for idx in range(n): 10 | fid.write(str(idx) + str(coords[idx,:])[1:-1] + ' ' + str(m) + '\n') 11 | 12 | fid.close() 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #FMM tutorial 2 | ============ 3 | This short tutorial is meant to provide an introduction to treecode in iPython Notebook. 4 | ##List of Notebook: 5 | * Direct Summation 6 | * Multipole Expansion 7 | * Multi-level Multipole Expansion 8 | * Tree Construction 9 | * Upward Sweep 10 | * Treecode 11 | -------------------------------------------------------------------------------- /test/ellipsoid_gen.py: -------------------------------------------------------------------------------- 1 | from numpy import random 2 | 3 | n = 10000 4 | 5 | m = 1./n 6 | 7 | idx = 0 8 | fid = open('ellipsoid'+str(n),'w') 9 | while idx < n: 10 | coords = random.rand(3) 11 | if (coords[0]-0.5)**2/0.25 + (coords[1]-0.5)**2/0.09 + (coords[2]-0.5)**2/0.04 <= 1: 12 | fid.write(str(idx) + str(coords[:])[1:-1] + ' ' + str(m) + '\n') 13 | idx += 1 14 | 15 | fid.close() -------------------------------------------------------------------------------- /direct_sum.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # direct summation: serial 3 | import sys 4 | import numpy 5 | import time 6 | from treecode_helper import * 7 | 8 | assert (len(sys.argv) == 2), "The format should be \n [script.py] [filename]" 9 | 10 | filename = sys.argv[1] 11 | particles = read_particle(filename) 12 | 13 | tic = time.time() 14 | direct_sum(particles) 15 | toc = time.time() 16 | t_direct = toc - tic 17 | 18 | # print info 19 | print(filename + '-serial' + '-direct-summation') 20 | print(len(filename + '-serial' + '-direct-summation')*'-') 21 | print("N = %i" % len(particles)) 22 | print(28*'-') 23 | print("time elapsed: %f s" % t_direct) 24 | 25 | # option to write the result 26 | #phi_direct = numpy.asarray([particle.phi for particle in particles]) 27 | #write_result(phi_direct, filename + '_result') -------------------------------------------------------------------------------- /treecode.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # treecode: non-vectorized, serial 3 | import sys 4 | import numpy 5 | import time 6 | from treecode_helper import * 7 | 8 | assert (len(sys.argv) == 4), "The format should be \n [script.py] [filename] [n_crit] [theta]" 9 | 10 | filename = sys.argv[1] 11 | particles = read_particle(filename) 12 | 13 | n_crit = int(sys.argv[2]) 14 | theta = float(sys.argv[3]) 15 | 16 | # build tree 17 | tic = time.time() 18 | root = Cell(n_crit) 19 | root.x, root.y, root.z = 0.5, 0.5, 0.5 20 | root.r = 0.5 21 | cells = build_tree(particles, root, n_crit) 22 | toc = time.time() 23 | t_src = toc - tic 24 | 25 | # P2M: particle to multipole 26 | tic = time.time() 27 | leaves = [] 28 | get_multipole(particles, 0, cells, leaves, n_crit) 29 | toc = time.time() 30 | t_P2M = toc - tic 31 | 32 | # M2M 33 | tic = time.time() 34 | upward_sweep(cells) 35 | toc = time.time() 36 | t_M2M = toc - tic 37 | 38 | # evaluate the potentials 39 | tic = time.time() 40 | eval_potential(particles, cells, n_crit, theta) 41 | toc = time.time() 42 | t_eval = toc -tic 43 | 44 | # print info 45 | print(filename + '-serial' + '-non-vectorized-treecode') 46 | print(len(filename + '-serial' + '-non-vectorized-treecode')*'-') 47 | print(" N = %i" % len(particles)) 48 | print("n_crit = %i" % n_crit) 49 | print(" theta = %.2f" % theta) 50 | 51 | # calculate the error 52 | phi_direct = numpy.loadtxt('test/'+filename+'_result') 53 | phi_tree = numpy.asarray([particle.phi for particle in particles]) 54 | l2_err(phi_direct, phi_tree) 55 | 56 | # print benchmark 57 | t_tree = t_src + t_P2M + t_M2M + t_eval 58 | print(28*'-') 59 | print("time elapsed: %f s" % t_tree) 60 | print("build tree: %f, %.2f %%" % (t_src, t_src/t_tree)) 61 | print("P2M : %f, %.2f %%" % (t_P2M, t_P2M/t_tree)) 62 | print("M2M : %f, %.2f %%" % (t_M2M, t_M2M/t_tree)) 63 | print("eval phi : %f. %.2f %%" % (t_eval, t_eval/t_tree)) 64 | -------------------------------------------------------------------------------- /test/cube100_result: -------------------------------------------------------------------------------- 1 | 1.8197833543 2 | 1.72112752741 3 | 2.09969539021 4 | 2.40756734537 5 | 1.48119673812 6 | 2.33056344116 7 | 1.90986598191 8 | 1.74928008378 9 | 2.80824650266 10 | 1.82403152555 11 | 2.02524157208 12 | 1.92627135214 13 | 1.61541259941 14 | 1.62233047528 15 | 1.86074820681 16 | 2.36164857523 17 | 1.42276980116 18 | 2.18826769439 19 | 1.59371924517 20 | 1.57763150062 21 | 1.69407207141 22 | 2.26195829776 23 | 1.72724095714 24 | 1.83231144142 25 | 2.08523443333 26 | 2.15575499049 27 | 1.79738103257 28 | 2.24778327082 29 | 1.57641831337 30 | 1.94559741028 31 | 1.97170484316 32 | 1.57613166326 33 | 1.6510049718 34 | 1.6000307768 35 | 2.06479657771 36 | 1.56299397383 37 | 1.61795852061 38 | 2.05756787123 39 | 1.66699439106 40 | 2.00038120356 41 | 1.93167529172 42 | 2.04882521192 43 | 1.779888206 44 | 1.89732211855 45 | 1.84308240467 46 | 1.93000624638 47 | 1.88336404231 48 | 1.57035888087 49 | 1.86067928575 50 | 2.0339604115 51 | 2.80047554748 52 | 1.88789136911 53 | 1.7316441537 54 | 1.51493082182 55 | 1.62781352765 56 | 1.76645079074 57 | 1.62192983663 58 | 2.11964098608 59 | 1.87337412073 60 | 2.01613217447 61 | 1.85652442588 62 | 1.66490001651 63 | 1.34085093024 64 | 1.40659362683 65 | 1.9108627965 66 | 2.0896307823 67 | 1.88766954391 68 | 2.09085092099 69 | 1.95751784648 70 | 1.37714347469 71 | 1.76611899707 72 | 1.69176558415 73 | 2.03827160599 74 | 1.80194309572 75 | 1.85330993402 76 | 2.0856490515 77 | 1.91663536014 78 | 2.01390371664 79 | 1.7874648683 80 | 2.3035631048 81 | 1.76952372741 82 | 1.45940500381 83 | 2.22587569198 84 | 1.73857269343 85 | 1.8432447046 86 | 2.15937728414 87 | 1.96426074294 88 | 1.66044528679 89 | 2.02998682673 90 | 2.05300484165 91 | 1.50013496801 92 | 2.34602105895 93 | 1.41259549213 94 | 1.96098432581 95 | 1.69778363803 96 | 2.10389918781 97 | 1.84321147551 98 | 1.54712026596 99 | 1.88044266765 100 | 1.80488109701 101 | -------------------------------------------------------------------------------- /test/ellipsoid100_result: -------------------------------------------------------------------------------- 1 | 3.94749267861 2 | 3.71550591057 3 | 3.72669757135 4 | 3.80772658526 5 | 2.97786832662 6 | 3.42539738134 7 | 2.47425580902 8 | 2.86085024221 9 | 3.92548961839 10 | 3.08648694744 11 | 3.63645427 12 | 2.95008288447 13 | 3.36432746053 14 | 3.43771873438 15 | 3.45701266615 16 | 3.4287117654 17 | 3.7993742558 18 | 4.3088630719 19 | 3.74219955713 20 | 3.82157398546 21 | 4.40650635036 22 | 3.83209557859 23 | 3.30128703691 24 | 3.95361354438 25 | 4.13004976436 26 | 3.67128289068 27 | 3.44970531623 28 | 3.30098595341 29 | 3.61214097628 30 | 3.3890017362 31 | 3.51283257092 32 | 4.03177441636 33 | 3.72655564509 34 | 3.15656569263 35 | 4.09383469141 36 | 3.5941624236 37 | 2.95640221489 38 | 4.07395264107 39 | 4.27309757755 40 | 3.84511790236 41 | 3.13424755006 42 | 4.25986831338 43 | 2.25948115727 44 | 4.13623175884 45 | 3.37682887796 46 | 3.74377834051 47 | 3.29162666598 48 | 3.73582594201 49 | 3.36305020902 50 | 3.44748186196 51 | 3.45269809889 52 | 3.73963376763 53 | 3.43299193716 54 | 3.29828851315 55 | 4.24967274746 56 | 3.60163523032 57 | 3.44789590886 58 | 3.78869187113 59 | 3.33262566651 60 | 3.25441105118 61 | 2.91919498253 62 | 4.16161472593 63 | 3.58608025308 64 | 4.30966581877 65 | 3.38704593955 66 | 3.80394309991 67 | 3.60699592492 68 | 4.24752751975 69 | 3.47121066689 70 | 3.52128471218 71 | 2.91542916794 72 | 3.38804039238 73 | 3.26224458558 74 | 3.31443029025 75 | 3.54527755867 76 | 3.37264283041 77 | 4.40751565977 78 | 3.90997604837 79 | 3.7421882373 80 | 4.27018883909 81 | 3.23393786691 82 | 2.48249701927 83 | 4.09612952335 84 | 3.72395401617 85 | 4.01610398105 86 | 3.60709107255 87 | 3.81582810473 88 | 4.23119062188 89 | 2.82807140385 90 | 3.76554140889 91 | 2.83152762142 92 | 3.27814574969 93 | 3.49460061103 94 | 3.33954009862 95 | 3.62968789985 96 | 4.18558557087 97 | 4.52418429828 98 | 4.12131448114 99 | 4.57590154822 100 | 2.78258210011 101 | -------------------------------------------------------------------------------- /style/fmmstyle.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 126 | 142 | -------------------------------------------------------------------------------- /test/cube100: -------------------------------------------------------------------------------- 1 | 0 0.98782317 0.43985511 0.33558325 0.01 2 | 1 0.15537761 0.48168315 0.8282953 0.01 3 | 2 0.8401262 0.49750876 0.76629318 0.01 4 | 3 0.56620139 0.56404501 0.46881772 0.01 5 | 4 0.05879826 0.49287288 0.92110722 0.01 6 | 5 0.58222111 0.66835813 0.44298797 0.01 7 | 6 0.12973305 0.80663983 0.16645675 0.01 8 | 7 0.89345666 0.512043 0.0752255 0.01 9 | 8 0.52250058 0.56465872 0.61357095 0.01 10 | 9 0.75859566 0.22227138 0.08501434 0.01 11 | 10 0.78276542 0.2246069 0.32770285 0.01 12 | 11 0.71445948 0.1056327 0.41115427 0.01 13 | 12 0.07294997 0.83575005 0.72183253 0.01 14 | 13 0.65491899 0.01933997 0.81869957 0.01 15 | 14 0.91951137 0.35204823 0.70429283 0.01 16 | 15 0.49816801 0.45486467 0.6316797 0.01 17 | 16 0.75460931 0.8741499 0.97549176 0.01 18 | 17 0.35456943 0.74155103 0.24054792 0.01 19 | 18 0.95398518 0.96993057 0.39956033 0.01 20 | 19 0.1638418 0.2470534 0.15003857 0.01 21 | 20 0.05198914 0.61431045 0.6946389 0.01 22 | 21 0.38183918 0.49067082 0.45625394 0.01 23 | 22 0.18152127 0.18958781 0.63872531 0.01 24 | 23 0.97604824 0.57042179 0.25664155 0.01 25 | 24 0.2442437 0.69791776 0.21940404 0.01 26 | 25 0.61919945 0.60770839 0.76430429 0.01 27 | 26 0.70911238 0.89707009 0.28004573 0.01 28 | 27 0.48733492 0.70623777 0.3952576 0.01 29 | 28 0.7144847 0.06987997 0.9139936 0.01 30 | 29 0.46444316 0.95695279 0.66046536 0.01 31 | 30 0.9376866 0.64109811 0.45052342 0.01 32 | 31 0.123291 0.10818699 0.61364969 0.01 33 | 32 0.94341748 0.81030042 0.67446217 0.01 34 | 33 0.26090564 0.16415376 0.14370682 0.01 35 | 34 0.26964046 0.57420118 0.27014566 0.01 36 | 35 0.96627924 0.7974545 0.13480468 0.01 37 | 36 0.77368689 0.02565169 0.20115632 0.01 38 | 37 0.40791449 0.80928136 0.28173582 0.01 39 | 38 0.50067215 0.77221877 0.03346901 0.01 40 | 39 0.93471434 0.68996864 0.36673554 0.01 41 | 40 0.41887868 0.26944355 0.23874694 0.01 42 | 41 0.45082674 0.77956577 0.71928039 0.01 43 | 42 0.81585306 0.66252358 0.0926738 0.01 44 | 43 0.83376576 0.2382722 0.10604466 0.01 45 | 44 0.13626777 0.85491763 0.16467888 0.01 46 | 45 0.01054672 0.81082917 0.43619401 0.01 47 | 46 0.34619247 0.83668242 0.73385567 0.01 48 | 47 0.7394572 0.81022057 0.02107235 0.01 49 | 48 0.95879133 0.45160304 0.82418019 0.01 50 | 49 0.8552231 0.54758427 0.79189171 0.01 51 | 50 0.52573285 0.57227282 0.59245134 0.01 52 | 51 0.97425846 0.48050331 0.77957572 0.01 53 | 52 0.58792822 0.00529377 0.24821563 0.01 54 | 53 0.00905285 0.79116054 0.78306247 0.01 55 | 54 0.96260402 0.94140913 0.50653964 0.01 56 | 55 0.84431022 0.42586818 0.06288718 0.01 57 | 56 0.05128055 0.75285618 0.10692644 0.01 58 | 57 0.52232681 0.27334444 0.60796041 0.01 59 | 58 0.65308874 0.16105841 0.81311449 0.01 60 | 59 0.49855026 0.38921318 0.84526703 0.01 61 | 60 0.46984701 0.28487638 0.87270786 0.01 62 | 61 0.12284948 0.62581638 0.07313297 0.01 63 | 62 0.01571764 0.07168415 0.84953304 0.01 64 | 63 0.45106849 0.01010983 0.03938355 0.01 65 | 64 0.25516003 0.68384921 0.74362983 0.01 66 | 65 0.30452109 0.50732594 0.66277331 0.01 67 | 66 0.54337851 0.12960409 0.6593999 0.01 68 | 67 0.6805268 0.64416787 0.25676783 0.01 69 | 68 0.0322832 0.82653493 0.44795971 0.01 70 | 69 0.58880254 0.98861625 0.96034172 0.01 71 | 70 0.86106131 0.19076773 0.0850121 0.01 72 | 71 0.98661288 0.26092864 0.27479857 0.01 73 | 72 0.45760862 0.91710637 0.66293825 0.01 74 | 73 0.88964309 0.17596344 0.47367717 0.01 75 | 74 0.54136979 0.20830741 0.16753239 0.01 76 | 75 0.7599811 0.2439629 0.42193307 0.01 77 | 76 0.14898984 0.65472227 0.48121411 0.01 78 | 77 0.58857068 0.8358265 0.60977902 0.01 79 | 78 0.77628805 0.16248952 0.81009143 0.01 80 | 79 0.647736 0.58774026 0.66250893 0.01 81 | 80 0.49949439 0.43506594 0.95999382 0.01 82 | 81 0.98276979 0.14516344 0.81896746 0.01 83 | 82 0.44002417 0.41455367 0.40163944 0.01 84 | 83 0.77131243 0.55603433 0.93304302 0.01 85 | 84 0.53503972 0.02607582 0.34060125 0.01 86 | 85 0.72356601 0.48660069 0.35398127 0.01 87 | 86 0.22921957 0.6415103 0.14859524 0.01 88 | 87 0.08372155 0.40996481 0.26837356 0.01 89 | 88 0.78164484 0.76747909 0.33936622 0.01 90 | 89 0.68080011 0.30758745 0.74085651 0.01 91 | 90 0.05617788 0.19278956 0.80789368 0.01 92 | 91 0.48554011 0.57034702 0.69849042 0.01 93 | 92 0.14122542 0.06096133 0.8677643 0.01 94 | 93 0.58745382 0.07981409 0.35964395 0.01 95 | 94 0.14481903 0.92199488 0.27529092 0.01 96 | 95 0.39584597 0.73286544 0.1889417 0.01 97 | 96 0.83619341 0.88510386 0.47268287 0.01 98 | 97 0.02742662 0.95227048 0.40337773 0.01 99 | 98 0.2983945 0.23580072 0.41370066 0.01 100 | 99 0.99084728 0.77345483 0.36104382 0.01 101 | -------------------------------------------------------------------------------- /test/ellipsoid100: -------------------------------------------------------------------------------- 1 | 0 0.48589256 0.52038173 0.59489221 0.01 2 | 1 0.66500613 0.67200403 0.48724188 0.01 3 | 2 0.23969776 0.57652463 0.40310905 0.01 4 | 3 0.59472853 0.70314577 0.46079042 0.01 5 | 4 0.8338696 0.47135217 0.6393612 0.01 6 | 5 0.19676255 0.39677055 0.37789309 0.01 7 | 6 0.01724345 0.45295874 0.47440021 0.01 8 | 7 0.86821593 0.56638291 0.56157723 0.01 9 | 8 0.36868586 0.63349336 0.52064938 0.01 10 | 9 0.13714913 0.55843438 0.62095618 0.01 11 | 10 0.67467888 0.54151992 0.37126779 0.01 12 | 11 0.7957231 0.32692333 0.4321231 0.01 13 | 12 0.53787176 0.23593862 0.59329089 0.01 14 | 13 0.29239467 0.46909843 0.33655227 0.01 15 | 14 0.36687105 0.41973549 0.33301345 0.01 16 | 15 0.61287645 0.27709661 0.39907346 0.01 17 | 16 0.56833172 0.39690714 0.37113625 0.01 18 | 17 0.68703272 0.41352274 0.48571938 0.01 19 | 18 0.57472867 0.29395102 0.42328994 0.01 20 | 19 0.1614552 0.55713642 0.53397049 0.01 21 | 20 0.60800459 0.40224501 0.47883458 0.01 22 | 21 0.65044827 0.6476428 0.44913406 0.01 23 | 22 0.49958544 0.73933062 0.43790806 0.01 24 | 23 0.18568255 0.53523178 0.47885717 0.01 25 | 24 0.43044623 0.37825805 0.53842133 0.01 26 | 25 0.26282625 0.60734424 0.40991982 0.01 27 | 26 0.43963642 0.31947661 0.37315154 0.01 28 | 27 0.3574559 0.68423259 0.60048999 0.01 29 | 28 0.5734155 0.43849582 0.66145063 0.01 30 | 29 0.44094422 0.53392031 0.31306432 0.01 31 | 30 0.19081485 0.33903471 0.45796082 0.01 32 | 31 0.65327814 0.38777222 0.40698004 0.01 33 | 32 0.59266941 0.70195023 0.4234066 0.01 34 | 33 0.12341757 0.42209963 0.40328028 0.01 35 | 34 0.51776205 0.54563342 0.40848648 0.01 36 | 35 0.39202087 0.37758797 0.63055396 0.01 37 | 36 0.27129598 0.72568507 0.46214237 0.01 38 | 37 0.28859307 0.51951199 0.42894414 0.01 39 | 38 0.48831014 0.38837069 0.49568511 0.01 40 | 39 0.48197181 0.34134833 0.59478001 0.01 41 | 40 0.63035374 0.74915619 0.40878305 0.01 42 | 41 0.47331886 0.48651831 0.43813263 0.01 43 | 42 0.96039257 0.56835464 0.48937363 0.01 44 | 43 0.19506413 0.54558414 0.53544086 0.01 45 | 44 0.15801128 0.37527491 0.40395416 0.01 46 | 45 0.56353122 0.26430479 0.49720983 0.01 47 | 46 0.81188209 0.37823481 0.54476836 0.01 48 | 47 0.21209028 0.43016744 0.53915785 0.01 49 | 48 0.80915844 0.44273375 0.57424789 0.01 50 | 49 0.17848267 0.56683205 0.6043343 0.01 51 | 50 0.55974511 0.6495139 0.6310375 0.01 52 | 51 0.60633716 0.62843055 0.60548713 0.01 53 | 52 0.38292735 0.27749775 0.42529715 0.01 54 | 53 0.14415768 0.61738798 0.50257225 0.01 55 | 54 0.40699259 0.50140481 0.46521866 0.01 56 | 55 0.59502066 0.62002246 0.36242336 0.01 57 | 56 0.36438565 0.25500598 0.52353505 0.01 58 | 57 0.6295217 0.60191422 0.59143778 0.01 59 | 58 0.74334825 0.36212597 0.61566869 0.01 60 | 59 0.7129088 0.40673186 0.6601204 0.01 61 | 60 0.15585783 0.30903647 0.55944913 0.01 62 | 61 0.6664651 0.42497688 0.42097126 0.01 63 | 62 0.55254164 0.37786776 0.65153286 0.01 64 | 63 0.51024133 0.43593488 0.53444563 0.01 65 | 64 0.50546411 0.22939104 0.57773966 0.01 66 | 65 0.26572897 0.35580399 0.52747823 0.01 67 | 66 0.29787361 0.51314982 0.62762997 0.01 68 | 67 0.72585712 0.39972324 0.513128 0.01 69 | 68 0.70882549 0.30361949 0.52179161 0.01 70 | 69 0.26072906 0.32015924 0.55722569 0.01 71 | 70 0.82640123 0.53728667 0.64369079 0.01 72 | 71 0.60440931 0.57150947 0.31565742 0.01 73 | 72 0.70808781 0.68528328 0.53156864 0.01 74 | 73 0.55142474 0.75329862 0.49372514 0.01 75 | 74 0.23669776 0.32695919 0.44049884 0.01 76 | 75 0.34709088 0.56306182 0.66102786 0.01 77 | 76 0.60008105 0.43245675 0.44765922 0.01 78 | 77 0.58689331 0.29282641 0.50612746 0.01 79 | 78 0.35293526 0.66461557 0.53423786 0.01 80 | 79 0.55024475 0.5165877 0.44462715 0.01 81 | 80 0.73621347 0.53467971 0.35542541 0.01 82 | 81 0.91103847 0.35541774 0.55333123 0.01 83 | 82 0.74350644 0.41481144 0.52441805 0.01 84 | 83 0.51664184 0.67433375 0.53198885 0.01 85 | 84 0.23854221 0.46463374 0.45339769 0.01 86 | 85 0.38874019 0.30085298 0.58016123 0.01 87 | 86 0.57208227 0.50255495 0.62384421 0.01 88 | 87 0.34800776 0.47918808 0.47699082 0.01 89 | 88 0.09970129 0.32874898 0.47336799 0.01 90 | 89 0.72115931 0.51487301 0.46885866 0.01 91 | 90 0.11381796 0.65099278 0.46458424 0.01 92 | 91 0.31970397 0.24522682 0.47884041 0.01 93 | 92 0.72896767 0.60869634 0.46708619 0.01 94 | 93 0.4227874 0.67370952 0.38897264 0.01 95 | 94 0.45257819 0.6580473 0.57751062 0.01 96 | 95 0.22606117 0.56372058 0.50030459 0.01 97 | 96 0.26734385 0.53192422 0.53433605 0.01 98 | 97 0.68409197 0.36334653 0.48805176 0.01 99 | 98 0.26365485 0.51698028 0.52253395 0.01 100 | 99 0.84403589 0.62056714 0.58438425 0.01 101 | -------------------------------------------------------------------------------- /05_upward_sweep.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Step 5: Upward Sweep" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import numpy\n", 19 | "from treecode_helper import Particle, Cell, build_tree" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "In the previous notebook, we define the class `Cell`, and build the octree by adding particles into cells and splitting cells recursively. So far, we have covered how to use multipole expansion to accelerate the potential evaluation, and how to construct the hierarchical tree to group the particles in different cells. In this notebook, we will exploit the advantage of tree structure to calculate the multipole for each cell. Before we start, we added the class definition of `Cell` and `build_tree` function into the helper script `treecode_helper.py`. Now we can reuse the code to generate the tree (the list of cells) as follows. " 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 2, 32 | "metadata": { 33 | "collapsed": false 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "n = 100 # number of particles\n", 38 | "particles = [ Particle(m=1.0/n) for i in range(n) ]\n", 39 | "\n", 40 | "n_crit = 10 # max number of particles in a single cell" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 3, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [], 50 | "source": [ 51 | "root = Cell(n_crit)\n", 52 | "root.x, root.y, root.z = 0.5, 0.5, 0.5\n", 53 | "root.r = 0.5" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 4, 59 | "metadata": { 60 | "collapsed": false 61 | }, 62 | "outputs": [], 63 | "source": [ 64 | "cells = build_tree(particles, root, n_crit)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "In order to evaluate the potential at each target, we need to calculate the multipole of each cell on the tree (traverse the tree). Since we can obtain a cell's multipole by shifting all its children's multipoles (**M2M**), a natural way to traverse the tree is to start with calculating the multipoles of all leaf cells (**P2M**), and then sweep upward (from leaf cell to root cell) to implement **M2M**." 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 5, 77 | "metadata": { 78 | "collapsed": false 79 | }, 80 | "outputs": [], 81 | "source": [ 82 | "def get_multipole(particles, p, cells, n_crit):\n", 83 | " \"\"\"Calculate multipole arrays for all leaf cells under cell p.\n", 84 | " If leaf number of cell p is equal or bigger than n_crit (non-leaf),\n", 85 | " traverse down recursively. Otherwise (leaf), calculate the multipole\n", 86 | " arrays for leaf cell p.\n", 87 | " \n", 88 | " Arguments:\n", 89 | " p: current cell's index\n", 90 | " cells: the list of cells\n", 91 | " particles: the array of all particles\n", 92 | " n_crit: maximum number of leaves in a single cell\n", 93 | " \n", 94 | " \"\"\"\n", 95 | " # if the current cell p is not a leaf cell, then recursively traverse down\n", 96 | " if cells[p].nleaf >= n_crit:\n", 97 | " for c in range(8):\n", 98 | " if cells[p].nchild & (1 << c):\n", 99 | " get_multipole(particles, cells[p].child[c], cells, n_crit)\n", 100 | " # otherwise cell p is a leaf cell\n", 101 | " else:\n", 102 | " # loop in leaf particles, do P2M\n", 103 | " for i in range(cells[p].nleaf):\n", 104 | " l = cells[p].leaf[i]\n", 105 | " dx, dy, dz = cells[p].x-particles[l].x, \\\n", 106 | " cells[p].y-particles[l].y, \\\n", 107 | " cells[p].z-particles[l].z\n", 108 | " cells[p].multipole += particles[l].m * \\\n", 109 | " numpy.array((1, dx, dy, dz,\\\n", 110 | " dx**2/2, dy**2/2, dz**2/2,\\\n", 111 | " dx*dy/2, dy*dz/2, dz*dx/2)) " 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "In `get_multipole`, we first recursively traverse down from $p$-th cell to find the leaf cells among its descendants, and then do the P2M in the same way as we did in [step 03](https://github.com/barbagroup/FMM_tutorial/blob/759d54e9aaf18b1b6ebef47b591fe0885b430761/03_shift_the_expansion_M2M.ipynb). Knowing that the $1st$ element in `cells` is the root cell, we can calculate each leaf cell's multipole by setting $p=0$." 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 6, 124 | "metadata": { 125 | "collapsed": false 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "root = 0 # index of the root cell\n", 130 | "get_multipole(particles, root, cells, n_crit)" 131 | ] 132 | }, 133 | { 134 | "cell_type": "markdown", 135 | "metadata": {}, 136 | "source": [ 137 | "The rest of work should be very straightforward: go over each pair of parent and child to perform **M2M**." 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 7, 143 | "metadata": { 144 | "collapsed": true 145 | }, 146 | "outputs": [], 147 | "source": [ 148 | "def M2M(p, c, cells):\n", 149 | " \"\"\"Calculate parent cell p's multipole array based on child cell c's \n", 150 | " multipoles\n", 151 | " \n", 152 | " Arguments:\n", 153 | " p: parent cell index in cells list\n", 154 | " c: child cell index in cells list\n", 155 | " cells: the list of cells\n", 156 | " \"\"\"\n", 157 | " dx, dy, dz = cells[p].x-cells[c].x, cells[p].y-cells[c].y, cells[p].z-cells[c].z\n", 158 | " \n", 159 | " Dxyz = numpy.array((dx, dy, dz))\n", 160 | " Dyzx = numpy.roll(Dxyz,-1) #It permutes the array (dx,dy,dz) to (dy,dz,dx) \n", 161 | " \n", 162 | " cells[p].multipole += cells[c].multipole\n", 163 | " \n", 164 | " cells[p].multipole[1:4] += cells[c].multipole[0] * Dxyz\n", 165 | " \n", 166 | " cells[p].multipole[4:7] += cells[c].multipole[1:4] * Dxyz\\\n", 167 | " + 0.5*cells[c].multipole[0] * Dxyz**2\n", 168 | " \n", 169 | " cells[p].multipole[7:] += 0.5*numpy.roll(cells[c].multipole[1:4], -1) * Dxyz \\\n", 170 | " + 0.5*cells[c].multipole[1:4] * Dxyz \\\n", 171 | " + 0.5*cells[c].multipole[0] * Dxyz * Dyzx " 172 | ] 173 | }, 174 | { 175 | "cell_type": "markdown", 176 | "metadata": {}, 177 | "source": [ 178 | "Recall that we contructed the tree in such fashion that the child of the $p$-th cell will be always located at the right side of $p$ in the list `cells`. Therefore, each leaf cell will be on the right side of its parents. Thus, one way to traverse the tree is looping from the tail to the head of the list `cells`." 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 8, 184 | "metadata": { 185 | "collapsed": true 186 | }, 187 | "outputs": [], 188 | "source": [ 189 | "def upward_sweep(cells):\n", 190 | " \"\"\"Traverse from leaves to root, in order to calculate multipoles\n", 191 | " of all the cells.\n", 192 | " \n", 193 | " Arguments:\n", 194 | " cells: the list of cells\n", 195 | " \n", 196 | " \"\"\"\n", 197 | " for c in range(len(cells)-1, 0, -1):\n", 198 | " p = cells[c].parent\n", 199 | " M2M(p, c, cells)\n", 200 | " \n", 201 | " " 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 9, 207 | "metadata": { 208 | "collapsed": true 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "upward_sweep(cells)" 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": {}, 218 | "source": [ 219 | "##### Reference" 220 | ] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": {}, 225 | "source": [ 226 | "1. R. Yokota, 12 Steps to a Fast Multipole Method on GPUs, Pan-American Advanced Studies Institute, Valparaiso, Chile, 3-14 January, 2011.\n", 227 | "2. Raykar, V. C., \"[A short primer on the fast multipole method: FMM tutorial](http://www.umiacs.umd.edu/labs/cvl/pirl/vikas/publications/FMM_tutorial.pdf),\", University of Maryland, College Park, Apr. 8, 2006." 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 10, 233 | "metadata": { 234 | "collapsed": false 235 | }, 236 | "outputs": [ 237 | { 238 | "data": { 239 | "text/html": [ 240 | "\n", 241 | "\n", 242 | "\n", 243 | "\n", 244 | "\n", 245 | "\n", 365 | "\n" 381 | ], 382 | "text/plain": [ 383 | "" 384 | ] 385 | }, 386 | "execution_count": 10, 387 | "metadata": {}, 388 | "output_type": "execute_result" 389 | } 390 | ], 391 | "source": [ 392 | "from IPython.core.display import HTML\n", 393 | "def css_styling():\n", 394 | " styles = open('./style/fmmstyle.css', 'r').read()\n", 395 | " return HTML(styles)\n", 396 | "css_styling()" 397 | ] 398 | } 399 | ], 400 | "metadata": { 401 | "kernelspec": { 402 | "display_name": "Python 3", 403 | "language": "python", 404 | "name": "python3" 405 | }, 406 | "language_info": { 407 | "codemirror_mode": { 408 | "name": "ipython", 409 | "version": 3 410 | }, 411 | "file_extension": ".py", 412 | "mimetype": "text/x-python", 413 | "name": "python", 414 | "nbconvert_exporter": "python", 415 | "pygments_lexer": "ipython3", 416 | "version": "3.4.3" 417 | } 418 | }, 419 | "nbformat": 4, 420 | "nbformat_minor": 0 421 | } 422 | -------------------------------------------------------------------------------- /treecode_helper.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import numpy 3 | from matplotlib import pyplot, rcParams 4 | from mpl_toolkits.mplot3d import Axes3D 5 | from numba import autojit 6 | 7 | 8 | #----- class Point definition-----# 9 | class Point(): 10 | 11 | """The class for a point. 12 | 13 | Arguments: 14 | coords: a three-element list, containing the 3d coordinates of the point. 15 | domain: the domain of random generated coordinates x,y,z, default=1.0. 16 | 17 | Attributes: 18 | x, y, z: coordinates of the point. 19 | """ 20 | 21 | def __init__(self, coords=[], domain=1.0): 22 | if coords: 23 | assert len(coords) == 3, "the size of coords should be 3." 24 | self.x = coords[0] 25 | self.y = coords[1] 26 | self.z = coords[2] 27 | else: 28 | self.x = domain * numpy.random.random() 29 | self.y = domain * numpy.random.random() 30 | self.z = domain * numpy.random.random() 31 | 32 | def distance(self, other): 33 | return numpy.sqrt((self.x-other.x)**2 + (self.y-other.y)**2 34 | + (self.z-other.z)**2) 35 | 36 | 37 | class Particle(Point): 38 | 39 | """The derived class for a particle, inheriting the base class "Point". 40 | 41 | Attributes: 42 | m: mass of the particle. 43 | phi: the gravitational potential of the particle. 44 | """ 45 | 46 | def __init__(self, coords=[], domain=1.0, m=1.0): 47 | Point.__init__(self, coords, domain) 48 | self.m = m 49 | self.phi = 0. 50 | 51 | class Cell(): 52 | 53 | """The class for a cell. 54 | 55 | Arguments: 56 | n_crit: maximum number of particles in a leaf cell. 57 | 58 | Attributes: 59 | nleaf (int): number of leaves in the cell 60 | leaf (array of int): array of leaf index 61 | nchild (int): an integer whose last 8 bits is used to keep track 62 | of the empty child cells 63 | child (array of int): array of child index 64 | parent (int): index of parent cell 65 | x, y, z (float): coordinates of the cell's center 66 | r (float): radius of the cell (half of the side length for cubic cell) 67 | multipole (array of float): multipole array of the cell 68 | 69 | """ 70 | 71 | def __init__(self, n_crit): 72 | self.nleaf = 0 # number of leaves 73 | self.leaf = numpy.zeros(n_crit, dtype=numpy.int) # array of leaf index 74 | self.nchild = 0 # binary counter to keep track of empty cells 75 | self.child = numpy.zeros(8, dtype=numpy.int) # array of child index 76 | self.parent = 0 # index of parent cell 77 | self.x = self.y = self.z = 0. # center of the cell 78 | self.r = 0. # radius of the cell 79 | self.multipole = numpy.zeros(10, dtype=numpy.float) # multipole array 80 | 81 | def distance(self, other): 82 | return numpy.sqrt((self.x-other.x)**2 + (self.y-other.y)**2 + (self.z-other.z)**2) 83 | 84 | 85 | def add_child(octant, p, cells, n_crit): 86 | 87 | """Add a cell to the end of cells list as a child of p, initialize the 88 | center and radius of the child cell c, and establish mutual reference 89 | between child c and parent p. 90 | 91 | Arguments: 92 | octant: reference to one of the eight divisions in three dimensions. 93 | p: parent cell index in cells list. 94 | cells: the list of cells. 95 | n_crit: maximum number of particles in a leaf cell. 96 | """ 97 | 98 | # create a new cell instance 99 | cells.append(Cell(n_crit)) 100 | 101 | # the last element of the cells list is the new child c 102 | c = len(cells) - 1 103 | 104 | # geometry relationship between parent and child 105 | cells[c].r = cells[p].r / 2 106 | cells[c].x = cells[p].x + cells[c].r * ((octant & 1) * 2 - 1) 107 | cells[c].y = cells[p].y + cells[c].r * ((octant & 2) - 1 ) 108 | cells[c].z = cells[p].z + cells[c].r * ((octant & 4) / 2 - 1) 109 | 110 | # establish mutual reference in the cells list 111 | cells[c].parent = p 112 | cells[p].child[octant] = c 113 | cells[p].nchild = (cells[p].nchild | (1 << octant)) 114 | 115 | 116 | def split_cell(particles, p, cells, n_crit): 117 | 118 | """Loop in parent p's leafs and reallocate the particles to subcells. 119 | If a subcell has not been created in that octant, create one using add_child. 120 | If the subcell c's leaf number exceeds n_crit, split the subcell c recursively. 121 | 122 | Arguments: 123 | particles: the list of particles. 124 | p: parent cell index in cells list. 125 | cells: the list of cells. 126 | n_crit: maximum number of particles in a leaf cell. 127 | """ 128 | 129 | # loop in the particles stored in the parent cell that you want to split 130 | for l in cells[p].leaf: 131 | 132 | octant = (particles[l].x > cells[p].x) + ((particles[l].y > cells[p].y) << 1) \ 133 | + ((particles[l].z > cells[p].z) << 2) # finds the particle's octant 134 | 135 | # if there is not a child cell in the particles octant, then create one 136 | if not cells[p].nchild & (1 << octant): 137 | add_child(octant, p, cells, n_crit) 138 | 139 | # reallocate the particle in the child cell 140 | c = cells[p].child[octant] 141 | cells[c].leaf[cells[c].nleaf] = l 142 | cells[c].nleaf += 1 143 | 144 | # check if the child reach n_crit 145 | if cells[c].nleaf >= n_crit: 146 | split_cell(particles, c, cells, n_crit) 147 | 148 | 149 | def build_tree(particles, root, n_crit): 150 | 151 | """Construct a hierarchical octree to store the particles and return 152 | the tree (list) of cells. 153 | 154 | Arguments: 155 | particles: the list of particles. 156 | root: the root cell. 157 | n_crit: maximum number of particles in a single cell. 158 | 159 | Returns: 160 | cells: the list of cells. 161 | 162 | """ 163 | # set root cell 164 | cells = [root] # initialize the cells list 165 | 166 | # build tree 167 | n = len(particles) 168 | 169 | for i in range(n): 170 | 171 | # traverse from the root down to a leaf cell 172 | curr = 0 173 | 174 | while cells[curr].nleaf >= n_crit: 175 | cells[curr].nleaf += 1 176 | octant = (particles[i].x > cells[curr].x) + ((particles[i].y > cells[curr].y) << 1) \ 177 | + ((particles[i].z > cells[curr].z) << 2) 178 | 179 | # if there is no child cell in the particles octant, then create one 180 | if not cells[curr].nchild & (1 << octant): 181 | add_child(octant, curr, cells, n_crit) 182 | 183 | curr = cells[curr].child[octant] 184 | 185 | # allocate the particle in the leaf cell 186 | cells[curr].leaf[cells[curr].nleaf] = i 187 | cells[curr].nleaf += 1 188 | 189 | # check whether to split or not 190 | if cells[curr].nleaf >= n_crit: 191 | split_cell(particles, curr, cells, n_crit) 192 | 193 | return cells 194 | 195 | 196 | def get_multipole(particles, p, cells, leaves, n_crit): 197 | 198 | """Calculate multipole arrays for all leaf cells under cell p. If leaf 199 | number of cell p is equal or bigger than n_crit (non-leaf), traverse down 200 | recursively. Otherwise (leaf), calculate the multipole arrays for leaf cell p. 201 | 202 | Arguments: 203 | p: current cell's index. 204 | cells: the list of cells. 205 | leaves: the array of all leaf cells. 206 | n_crit: maximum number of particles in a leaf cell. 207 | """ 208 | 209 | # if the current cell p is not a leaf cell, then recursively traverse down 210 | if cells[p].nleaf >= n_crit: 211 | for c in range(8): 212 | if cells[p].nchild & (1 << c): 213 | get_multipole(particles, cells[p].child[c], cells, leaves, n_crit) 214 | 215 | # otherwise cell p is a leaf cell 216 | else: 217 | # loop in leaf particles, do P2M 218 | for i in range(cells[p].nleaf): 219 | l = cells[p].leaf[i] 220 | dx, dy, dz = cells[p].x-particles[l].x, \ 221 | cells[p].y-particles[l].y, \ 222 | cells[p].z-particles[l].z 223 | 224 | cells[p].multipole += particles[l].m * \ 225 | numpy.array((1, dx, dy, dz,\ 226 | dx**2/2, dy**2/2, dz**2/2,\ 227 | dx*dy/2, dy*dz/2, dz*dx/2)) 228 | leaves.append(p) 229 | 230 | 231 | def M2M(p, c, cells): 232 | 233 | """Calculate parent cell p's multipole array based on child cell c's 234 | multipoles. 235 | 236 | Arguments: 237 | p: parent cell index in cells list. 238 | c: child cell index in cells list. 239 | cells: the list of cells. 240 | """ 241 | 242 | dx, dy, dz = cells[p].x-cells[c].x, cells[p].y-cells[c].y, cells[p].z-cells[c].z 243 | 244 | Dxyz = numpy.array((dx, dy, dz)) 245 | Dyzx = numpy.roll(Dxyz,-1) #It permutes the array (dx,dy,dz) to (dy,dz,dx) 246 | 247 | cells[p].multipole += cells[c].multipole 248 | 249 | cells[p].multipole[1:4] += cells[c].multipole[0] * Dxyz 250 | 251 | cells[p].multipole[4:7] += cells[c].multipole[1:4] * Dxyz\ 252 | + 0.5*cells[c].multipole[0] * Dxyz**2 253 | 254 | cells[p].multipole[7:] += 0.5*numpy.roll(cells[c].multipole[1:4], -1) * Dxyz \ 255 | + 0.5*cells[c].multipole[1:4] * Dxyz \ 256 | + 0.5*cells[c].multipole[0] * Dxyz * Dyzx 257 | 258 | def upward_sweep(cells): 259 | 260 | """Traverse from leaves to root, in order to calculate multipoles of all the cells. 261 | 262 | Arguments: 263 | cells: the list of cells. 264 | """ 265 | 266 | for c in range(len(cells)-1, 0, -1): 267 | p = cells[c].parent 268 | M2M(p, c, cells) 269 | 270 | 271 | def direct_sum(particles): 272 | 273 | """Calculate the gravitational potential at each particle 274 | using direct summation method. 275 | 276 | Arguments: 277 | particles: the list of particles. 278 | """ 279 | 280 | for i, target in enumerate(particles): 281 | for source in (particles[:i] + particles[i+1:]): 282 | r = target.distance(source) 283 | target.phi += source.m/r 284 | 285 | 286 | def distance(array, point): 287 | 288 | """Return the distance array between each element in the array and 289 | the point. 290 | 291 | Arguments: 292 | array: an array of n points' xyz coordinates with a shape of (3, n). 293 | point: a xyz-coordinate triplet of the point. 294 | 295 | Returns: 296 | the distance array. 297 | 298 | """ 299 | return numpy.sqrt((array[0]-point.x)**2 + (array[1]-point.y)**2 300 | + (array[2]-point.z)**2) 301 | 302 | 303 | #----------potential evaluation: particle-particle-----# 304 | 305 | def evaluate(particles, p, i, cells, n_crit, theta): 306 | 307 | """Evaluate the gravitational potential at a target point i, 308 | caused by source particles cell p. If nleaf of cell p is less 309 | than n_crit (leaf), use direct summation. Otherwise (non-leaf), loop 310 | in p's child cells. If child cell c is in far-field of target particle i, 311 | use multipole expansion. Otherwise (near-field), call the function 312 | recursively. 313 | 314 | Arguments: 315 | particles: the list of particles 316 | p: cell index in cells list 317 | i: target particle index 318 | cells: the list of cells 319 | n_crit: maximum number of leaves in a single cell 320 | theta: tolerance parameter 321 | """ 322 | 323 | # non-leaf cell 324 | if cells[p].nleaf >= n_crit: 325 | 326 | # loop in p's child cells (8 octants) 327 | for octant in range(8): 328 | if cells[p].nchild & (1 << octant): 329 | c = cells[p].child[octant] 330 | r = particles[i].distance(cells[c]) 331 | 332 | # near-field child cell 333 | if cells[c].r > theta*r: 334 | evaluate(particles, c, i, cells, n_crit, theta) 335 | 336 | # far-field child cell 337 | else: 338 | dx = particles[i].x - cells[c].x 339 | dy = particles[i].y - cells[c].y 340 | dz = particles[i].z - cells[c].z 341 | r3 = r**3 342 | r5 = r3*r**2 343 | 344 | # calculate the weight for each multipole 345 | weight = [1/r, -dx/r3, -dy/r3, -dz/r3, 3*dx**2/r5 - 1/r3, \ 346 | 3*dy**2/r5 - 1/r3, 3*dz**2/r5 - 1/r3, 3*dx*dy/r5, \ 347 | 3*dy*dz/r5, 3*dz*dx/r5] 348 | 349 | particles[i].phi += numpy.dot(cells[c].multipole, weight) 350 | 351 | # leaf cell 352 | else: 353 | # loop in twig cell's particles 354 | for l in range(cells[p].nleaf): 355 | source = particles[cells[p].leaf[l]] 356 | r = particles[i].distance(source) 357 | if r != 0: 358 | particles[i].phi += source.m / r 359 | 360 | 361 | def eval_potential(particles, cells, n_crit, theta): 362 | 363 | """Evaluate the gravitational potential at all target points 364 | 365 | Arguments: 366 | particles: the list of particles. 367 | cells: the list of cells. 368 | n_crit: maximum number of particles in a single cell. 369 | theta: tolerance parameter. 370 | """ 371 | 372 | for i in range(len(particles)): 373 | evaluate(particles, 0, i, cells, n_crit, theta) 374 | 375 | 376 | 377 | def l2_err(phi_direct, phi_tree): 378 | 379 | """Print out the relative err in l2 norm. 380 | 381 | Arguments: 382 | phi_direct: potential calculated by direct summation. 383 | phi_tree: potential calculated by using treecode. 384 | """ 385 | err = numpy.sqrt(sum((phi_direct-phi_tree)**2)/sum(phi_direct**2)) 386 | print('L2 Norm error: {}'.format(err)) 387 | 388 | 389 | def plot_err(phi_direct, phi_tree): 390 | 391 | """Plot the relative error band. 392 | 393 | Arguments: 394 | phi_direct: potential calculated by direct summation. 395 | phi_tree: potential calculated by using treecode. 396 | """ 397 | 398 | # plotting the relative error band 399 | n = len(phi_direct) 400 | err_rel = abs((phi_tree - phi_direct) / phi_direct) 401 | 402 | pyplot.figure(figsize=(10,4)) 403 | ax = pyplot.gca() 404 | pyplot.plot(range(n), err_rel, 'bo', alpha=0.5) 405 | pyplot.xlim(0,n-1) 406 | pyplot.ylim(1e-6, 1e-1) 407 | ax.yaxis.grid() 408 | pyplot.xlabel('target particle index') 409 | pyplot.ylabel(r'$e_{\phi rel}$') 410 | ax.set_yscale('log') 411 | 412 | 413 | def plot_dist(particles): 414 | 415 | '''Plot spatial particle distribution 416 | 417 | Arguments: 418 | particles: the list of particles. 419 | ''' 420 | 421 | # plot spatial particle distribution 422 | fig = pyplot.figure(figsize=(10,4.5)) 423 | 424 | # left plot 425 | ax = fig.add_subplot(1,2,1, projection='3d') 426 | ax.scatter([particle.x for particle in particles], 427 | [particle.y for particle in particles], 428 | [particle.z for particle in particles], s=30, c='b') 429 | ax.set_xlim3d(0,1) 430 | ax.set_ylim3d(0,1) 431 | ax.set_zlim3d(0,1) 432 | ax.set_xlabel(r'$x$') 433 | ax.set_ylabel(r'$y$') 434 | ax.set_zlabel(r'$z$') 435 | ax.set_title('Particle Distribution') 436 | 437 | # right plot 438 | ax = fig.add_subplot(1,2,2, projection='3d') 439 | scale = 50 # scale for dot size in scatter plot 440 | ax.scatter([particle.x for particle in particles], 441 | [particle.y for particle in particles], 442 | [particle.z for particle in particles], 443 | s=numpy.array([particle.phi for particle in particles])*scale, c='b') 444 | ax.set_xlim3d(0,1) 445 | ax.set_ylim3d(0,1) 446 | ax.set_zlim3d(0,1) 447 | ax.set_xlabel(r'$x$') 448 | ax.set_ylabel(r'$y$') 449 | ax.set_zlabel(r'$z$') 450 | ax.set_title('Particle Distribution (radius implies potential)'); 451 | 452 | 453 | def read_particle(filename): 454 | 455 | """Read the particle information from the file, and return the list of particles. 456 | 457 | Arguments: 458 | filename: name of the file we want to read. 459 | 460 | Returns: 461 | particles: the list of particles. 462 | """ 463 | 464 | file = open('test/' + filename, 'r') 465 | particles = [] 466 | for line in file: 467 | line = [float(x) for x in line.split()] 468 | coords, m = line[1:4], line[-1] 469 | particle = Particle(coords=coords, m=m) 470 | particles.append(particle) 471 | file.close() 472 | 473 | return particles 474 | 475 | def write_result(phi, filename): 476 | 477 | """Write the potential values into a result file. 478 | 479 | Arguments: 480 | phi: potential. 481 | filename: name of the file we want to read. 482 | """ 483 | 484 | file = open('test/' + filename, 'w') 485 | for i in phi: 486 | file.write(str(i) + '\n') 487 | file.close() 488 | 489 | 490 | 491 | -------------------------------------------------------------------------------- /test/cube1000_result: -------------------------------------------------------------------------------- 1 | 2.06800770911 2 | 1.70714302807 3 | 2.37625268559 4 | 1.70754348775 5 | 2.0015241304 6 | 1.79873731532 7 | 1.92167342371 8 | 1.65901171264 9 | 1.8569379292 10 | 2.09301794384 11 | 1.8838040216 12 | 1.75601738447 13 | 2.09027569303 14 | 1.56241478574 15 | 2.16697438531 16 | 1.6657165132 17 | 1.89060512632 18 | 1.79163738916 19 | 2.19473610262 20 | 2.06132473513 21 | 2.13021276911 22 | 2.12987829596 23 | 1.40750786149 24 | 1.78659386986 25 | 1.92826585146 26 | 1.52650212652 27 | 2.02489216831 28 | 1.94206591584 29 | 1.8772038635 30 | 1.49975080468 31 | 2.40409629676 32 | 2.03662202803 33 | 1.83421491011 34 | 1.9068894913 35 | 2.064351557 36 | 2.2601004738 37 | 1.8678583494 38 | 1.81811045325 39 | 2.10872553762 40 | 1.76423437481 41 | 1.68819066399 42 | 1.59756089303 43 | 1.58417004466 44 | 1.74672475872 45 | 1.46469510127 46 | 1.99779007619 47 | 1.91779557588 48 | 1.58134215235 49 | 2.0993022335 50 | 1.59331804368 51 | 1.75313585398 52 | 1.9961874273 53 | 1.6504411582 54 | 2.13179633872 55 | 1.6542148276 56 | 2.11634762442 57 | 2.12201569609 58 | 1.44495524092 59 | 1.79410669859 60 | 2.09677285886 61 | 1.86057692602 62 | 1.62496386056 63 | 1.89085762769 64 | 2.1862306286 65 | 2.13967230067 66 | 1.58892068449 67 | 1.94566072832 68 | 1.72563881682 69 | 2.11821049978 70 | 1.86224934637 71 | 1.82116119413 72 | 2.19900565323 73 | 1.82179315127 74 | 2.14730829446 75 | 1.4644921712 76 | 2.02112688212 77 | 1.89050508118 78 | 2.28559485442 79 | 2.13000967849 80 | 2.13892906329 81 | 2.13351256518 82 | 2.31247551852 83 | 1.34345763264 84 | 1.89881354838 85 | 2.10962230814 86 | 1.99384938766 87 | 1.65516721174 88 | 2.02590761647 89 | 1.61518629177 90 | 2.07837239839 91 | 1.58819440946 92 | 1.7664050219 93 | 1.88519774461 94 | 1.88336440179 95 | 1.36512277357 96 | 1.69091022192 97 | 2.13203960965 98 | 2.03960376892 99 | 2.08070869303 100 | 1.98638375711 101 | 1.47380387623 102 | 1.72639074917 103 | 1.40297842318 104 | 1.795501008 105 | 1.93960902983 106 | 1.87873468452 107 | 1.81385394064 108 | 1.67738839743 109 | 1.56347370239 110 | 1.61196130481 111 | 2.05433905415 112 | 1.88249858534 113 | 1.74063201418 114 | 2.03134704653 115 | 1.67114176043 116 | 1.63189449772 117 | 1.58438511761 118 | 1.78224264004 119 | 1.77353705686 120 | 1.95463156997 121 | 1.94892132807 122 | 1.98191510804 123 | 2.01494178425 124 | 1.66166771354 125 | 2.11595858682 126 | 2.05725672571 127 | 2.29690045868 128 | 1.39510330588 129 | 1.94666100817 130 | 1.81344330725 131 | 1.49823475059 132 | 1.7620369427 133 | 2.12161261499 134 | 2.3676973906 135 | 1.94576162746 136 | 2.186831168 137 | 2.15723710344 138 | 1.74578249827 139 | 2.0632573845 140 | 2.03677879623 141 | 2.01342993669 142 | 2.10770321542 143 | 1.92698426387 144 | 1.41570056854 145 | 2.07343352643 146 | 1.73421774309 147 | 2.00295856349 148 | 2.09273838583 149 | 1.97743694846 150 | 1.97394437717 151 | 2.12360816022 152 | 1.73754905796 153 | 1.99623183751 154 | 2.07568727166 155 | 1.86722404118 156 | 2.10482523668 157 | 1.43874553581 158 | 1.35683508164 159 | 1.97791383635 160 | 2.01718572404 161 | 2.20837592561 162 | 1.6028660952 163 | 1.82604107168 164 | 1.7946891865 165 | 2.1014786934 166 | 1.81201269191 167 | 1.77209079644 168 | 2.29720045091 169 | 1.85833818604 170 | 2.29198778269 171 | 2.061137936 172 | 2.36168340384 173 | 1.59383529655 174 | 1.70363232801 175 | 2.15157124012 176 | 1.85342147447 177 | 2.18199353977 178 | 1.78636809391 179 | 1.84694776748 180 | 1.67955613912 181 | 1.94082788184 182 | 1.76104783588 183 | 1.67731462236 184 | 1.90190134994 185 | 2.04994574457 186 | 2.24306446374 187 | 2.11026460652 188 | 1.51251047665 189 | 1.66376204913 190 | 2.01707812722 191 | 1.75635142985 192 | 2.27913422638 193 | 1.8433854811 194 | 1.88139908558 195 | 2.06770925509 196 | 1.80432484679 197 | 1.99023631624 198 | 1.92377865865 199 | 1.86681683292 200 | 1.54795407343 201 | 1.90941157192 202 | 1.8205405612 203 | 1.79705771785 204 | 1.98997468688 205 | 1.61907520973 206 | 1.9527511718 207 | 2.24440244094 208 | 2.01964664047 209 | 2.39796130144 210 | 1.83955630861 211 | 2.28599225763 212 | 1.79000042742 213 | 1.67220298372 214 | 2.03883175339 215 | 2.05036498336 216 | 1.85462869405 217 | 1.8958763379 218 | 2.14739806495 219 | 2.05017073451 220 | 2.36734999446 221 | 1.63639268089 222 | 1.76466564542 223 | 1.92509227943 224 | 1.83044604454 225 | 2.02284367903 226 | 2.31021495452 227 | 2.12350976355 228 | 2.18594642986 229 | 1.99451180384 230 | 1.56359500343 231 | 1.75579945321 232 | 1.88957561658 233 | 1.69506580839 234 | 1.6195389556 235 | 1.3551258473 236 | 2.02949582897 237 | 2.023246366 238 | 1.90274352893 239 | 1.90419457006 240 | 2.28411491714 241 | 2.04523705565 242 | 1.84386462294 243 | 1.73433476499 244 | 1.63708775368 245 | 2.08461346522 246 | 1.71901845251 247 | 1.90385300466 248 | 1.86442741598 249 | 1.44196165456 250 | 1.83780617494 251 | 1.68300227233 252 | 1.92116770756 253 | 1.71971482132 254 | 2.1231726568 255 | 2.02900770466 256 | 2.00821536225 257 | 2.17867534369 258 | 1.89014293534 259 | 2.01969807242 260 | 1.69854765483 261 | 2.06470079672 262 | 2.18377270371 263 | 1.78312519951 264 | 1.91229599189 265 | 1.66485448918 266 | 1.70981858731 267 | 1.67483594505 268 | 1.82933817561 269 | 1.81236341686 270 | 1.220221513 271 | 2.07253549797 272 | 1.49317485749 273 | 1.99189984253 274 | 1.96920544577 275 | 2.24152324345 276 | 1.62635378495 277 | 2.24647405544 278 | 1.3925389027 279 | 2.0636419261 280 | 2.23021739218 281 | 2.27749695378 282 | 1.49228501513 283 | 1.75270429121 284 | 1.53253793091 285 | 1.51683259056 286 | 1.81239955929 287 | 1.65848740641 288 | 1.84559368934 289 | 2.12156523055 290 | 2.08566304257 291 | 1.99084789063 292 | 2.17476339168 293 | 1.55570406213 294 | 2.28635117399 295 | 1.61956814842 296 | 2.19956410931 297 | 1.69081368936 298 | 1.71937624594 299 | 2.16735988805 300 | 1.82151869779 301 | 1.92861580163 302 | 2.15458548138 303 | 2.07895003951 304 | 1.64945744687 305 | 1.55155867047 306 | 2.21664020004 307 | 1.69055226362 308 | 1.79221575408 309 | 1.74334510401 310 | 1.75355320349 311 | 1.41081608574 312 | 1.54786631242 313 | 1.5812632541 314 | 1.97340776256 315 | 2.19879668408 316 | 1.82482098765 317 | 1.8165995224 318 | 2.17381534995 319 | 1.9212997 320 | 2.29390925487 321 | 2.29702653187 322 | 1.50236552858 323 | 2.4039893136 324 | 1.86083475592 325 | 2.20857186282 326 | 1.59925408909 327 | 1.8300082367 328 | 1.77111177233 329 | 2.31110680009 330 | 1.95531215201 331 | 1.47497809573 332 | 1.52118209957 333 | 2.13680228248 334 | 1.89496561318 335 | 1.87549605044 336 | 1.92516687487 337 | 1.47606964701 338 | 1.96925854371 339 | 1.84087643544 340 | 1.43493855915 341 | 1.89325275338 342 | 2.10397827362 343 | 1.55135330326 344 | 1.90063242973 345 | 1.36660153827 346 | 1.88634123934 347 | 1.74638304672 348 | 1.86854714789 349 | 2.08523148283 350 | 2.36040170556 351 | 1.9904805486 352 | 1.39006330105 353 | 1.70611987807 354 | 1.76774081487 355 | 1.83172561406 356 | 1.9296655068 357 | 2.11903327217 358 | 2.05316569875 359 | 1.71185830416 360 | 1.8528646386 361 | 1.73550868602 362 | 1.49408052244 363 | 1.78196735452 364 | 1.25810065509 365 | 1.34415990283 366 | 1.82972565342 367 | 1.65813581468 368 | 2.09652352315 369 | 1.53067545066 370 | 2.04400327488 371 | 1.57341988435 372 | 1.92636590805 373 | 2.10766913806 374 | 1.65739275969 375 | 1.5060710645 376 | 1.45313506189 377 | 2.09843184524 378 | 2.1592681767 379 | 2.20268188771 380 | 1.94500527315 381 | 1.69982377136 382 | 1.56878511883 383 | 1.8740118761 384 | 1.69053342333 385 | 2.17700478297 386 | 1.76328834836 387 | 1.34930458841 388 | 1.70668434841 389 | 1.87232836764 390 | 2.2420607549 391 | 2.25558171521 392 | 1.94721040259 393 | 1.84460256429 394 | 1.88759215943 395 | 1.57990312312 396 | 1.59886515786 397 | 1.97364296123 398 | 1.93844488892 399 | 1.72047286046 400 | 1.72266382483 401 | 1.96594557219 402 | 1.9052375092 403 | 1.80110984938 404 | 2.02888613307 405 | 1.69201136361 406 | 1.69031213815 407 | 1.69629084822 408 | 2.02760923175 409 | 2.00622981548 410 | 1.88222426081 411 | 1.64886876193 412 | 1.70491714795 413 | 2.09429601068 414 | 1.8681439915 415 | 1.73553578643 416 | 2.11753342402 417 | 2.36308750202 418 | 1.47825040284 419 | 1.76614166316 420 | 1.73267133426 421 | 1.48118328898 422 | 1.54252266334 423 | 2.03176901411 424 | 1.90744697091 425 | 1.77655362813 426 | 2.11472748528 427 | 1.30210363402 428 | 1.97923668699 429 | 1.73502880492 430 | 1.88174318782 431 | 1.61296876914 432 | 1.95252903728 433 | 1.48413724994 434 | 2.14590260257 435 | 2.10214645495 436 | 1.66138698147 437 | 1.87560741656 438 | 2.08384028297 439 | 2.3251457579 440 | 1.73450124469 441 | 1.60668850809 442 | 2.1351672345 443 | 1.65462562264 444 | 1.95844170904 445 | 1.39439891834 446 | 1.8317677337 447 | 1.47076017781 448 | 1.70497647126 449 | 2.337887222 450 | 1.45485444031 451 | 2.23332842513 452 | 2.06375503993 453 | 2.27119556234 454 | 1.58098342402 455 | 2.09206321913 456 | 1.95530839731 457 | 2.13220024577 458 | 2.02616761571 459 | 2.03226165767 460 | 2.0514277282 461 | 1.99441875308 462 | 2.0726539065 463 | 1.72164759147 464 | 1.67569498071 465 | 1.70305951191 466 | 2.04031444397 467 | 1.9063905058 468 | 1.91090522022 469 | 2.33065879142 470 | 2.05271311859 471 | 1.62806178854 472 | 2.04494494924 473 | 1.45030104839 474 | 2.27179409114 475 | 1.91810591406 476 | 1.44161016122 477 | 1.52483267188 478 | 2.22162384075 479 | 2.15745083884 480 | 1.7824377898 481 | 1.90995401465 482 | 1.57631585169 483 | 1.49607192148 484 | 1.88247971261 485 | 2.18362605617 486 | 2.11212723037 487 | 1.83490525338 488 | 1.69049765812 489 | 2.04350122717 490 | 2.32767686858 491 | 2.13233900804 492 | 1.77872585223 493 | 1.65255253928 494 | 1.69354018222 495 | 2.10686399285 496 | 1.86754853168 497 | 1.60140061237 498 | 1.56175190027 499 | 2.26070526974 500 | 1.9417074335 501 | 1.59446726375 502 | 1.48412852609 503 | 1.77403863249 504 | 1.76326489183 505 | 1.90525729015 506 | 1.61563192654 507 | 1.55194551009 508 | 1.89090769463 509 | 1.80072899093 510 | 1.41226624804 511 | 1.50334556136 512 | 2.24463153277 513 | 2.12776005183 514 | 1.91167542479 515 | 1.80431706903 516 | 1.79444118733 517 | 1.83908400099 518 | 2.13987461112 519 | 1.54288784091 520 | 1.84663878807 521 | 1.42929634463 522 | 1.97725285598 523 | 1.751329629 524 | 1.72132777717 525 | 1.63015159574 526 | 1.79599468135 527 | 1.81796588797 528 | 1.30691019946 529 | 1.73715425504 530 | 1.83315782004 531 | 2.13249909025 532 | 1.69484700668 533 | 1.60584037093 534 | 1.75103722439 535 | 1.44816202081 536 | 2.37594340982 537 | 1.53506371815 538 | 2.06991511373 539 | 1.82968671481 540 | 2.2532457201 541 | 2.03474042172 542 | 1.76731493828 543 | 2.19201745642 544 | 1.60148443615 545 | 1.97571317714 546 | 2.04831031577 547 | 1.73387862371 548 | 1.7536206004 549 | 1.84519890275 550 | 2.27901482929 551 | 1.7856044745 552 | 1.77369341141 553 | 1.64165969781 554 | 1.63239608506 555 | 2.37808941017 556 | 1.57661034697 557 | 1.9177093393 558 | 2.0350593098 559 | 1.51257134486 560 | 1.89099333743 561 | 2.22854112564 562 | 1.65421578472 563 | 1.78184946755 564 | 1.99257700314 565 | 1.69537871171 566 | 2.25114836081 567 | 1.91575893183 568 | 1.55541020278 569 | 2.00967935554 570 | 2.0402238852 571 | 1.69166040576 572 | 2.03449150785 573 | 2.06429909389 574 | 1.77693814723 575 | 2.08936476815 576 | 2.13181502208 577 | 2.34156627929 578 | 1.82205221293 579 | 1.4185490631 580 | 1.74081569539 581 | 1.8510174244 582 | 1.81088809724 583 | 1.55371801156 584 | 2.04193056141 585 | 2.08352292627 586 | 1.63140832857 587 | 2.21733119938 588 | 1.86911243557 589 | 2.28155906831 590 | 2.24352616369 591 | 1.8896766587 592 | 2.02920283153 593 | 1.84315599241 594 | 2.08762429481 595 | 2.07580181699 596 | 1.9653888672 597 | 2.20164081398 598 | 1.59016051072 599 | 2.16553618134 600 | 1.70113793652 601 | 2.3166689624 602 | 1.72442385192 603 | 1.89957740802 604 | 1.48244795814 605 | 1.71910257341 606 | 2.20047382244 607 | 1.93511924045 608 | 1.76286957987 609 | 2.02842686046 610 | 2.08021748908 611 | 1.92290993818 612 | 2.04336395141 613 | 1.56398808585 614 | 1.67155954431 615 | 1.90389327886 616 | 2.32412582133 617 | 1.87851977784 618 | 1.80363953336 619 | 1.88712960473 620 | 1.40353303323 621 | 1.68641939085 622 | 1.86264424012 623 | 2.37455824457 624 | 1.63570997957 625 | 1.97480947745 626 | 1.62049937071 627 | 1.81814294929 628 | 1.84197335669 629 | 1.55210461237 630 | 1.69497583671 631 | 1.67700756487 632 | 1.80946844322 633 | 1.56239860247 634 | 2.38764327219 635 | 1.83525117671 636 | 1.83651777546 637 | 1.98221388725 638 | 1.74617279452 639 | 2.20830396769 640 | 1.83545494436 641 | 2.30030701349 642 | 1.52571248816 643 | 1.58654997854 644 | 1.45538370232 645 | 1.86330630844 646 | 1.86042959796 647 | 1.98756954382 648 | 1.89841495747 649 | 1.90543566171 650 | 1.66070372087 651 | 1.78807791761 652 | 1.7745431876 653 | 2.03854375234 654 | 2.24664097351 655 | 1.70142318843 656 | 1.95761847038 657 | 1.74950718682 658 | 1.83717225462 659 | 1.94235158676 660 | 2.16225877386 661 | 1.42248437542 662 | 1.93093988832 663 | 2.02119312592 664 | 1.87655008618 665 | 1.96263171755 666 | 2.25207182353 667 | 1.70933595427 668 | 1.8539197032 669 | 2.08068085675 670 | 1.68314282552 671 | 1.88247971232 672 | 2.25843683436 673 | 2.13030734199 674 | 1.62467760555 675 | 2.26953166325 676 | 2.17175319382 677 | 2.33720923269 678 | 2.32298714469 679 | 1.581124855 680 | 1.96725805729 681 | 1.55466529834 682 | 2.23466940795 683 | 2.06964148699 684 | 2.14280781597 685 | 1.83561043018 686 | 1.4075501292 687 | 1.72312886412 688 | 2.04208879628 689 | 1.94771339885 690 | 1.91038236557 691 | 1.49848410291 692 | 2.14326029956 693 | 2.05893507624 694 | 1.88822882314 695 | 2.01712097198 696 | 1.86132940565 697 | 2.25358416914 698 | 1.73729686016 699 | 1.95420793255 700 | 2.15039695105 701 | 1.40294507505 702 | 1.95665509238 703 | 2.04745322198 704 | 1.62698306496 705 | 1.5879779622 706 | 1.77389301908 707 | 1.75682505743 708 | 2.17717455418 709 | 2.01254962579 710 | 1.84902425896 711 | 1.86776512407 712 | 1.81054922158 713 | 1.55704144428 714 | 2.20216593027 715 | 1.58359880379 716 | 1.92663949254 717 | 1.80127325644 718 | 1.85819808045 719 | 2.15181988231 720 | 2.16953109104 721 | 1.95201444726 722 | 1.84793239566 723 | 2.10698839334 724 | 1.85607285748 725 | 1.49732176487 726 | 1.6699646735 727 | 1.82341081459 728 | 1.79295640316 729 | 1.83677043582 730 | 2.22086667769 731 | 1.67742709676 732 | 2.28054470597 733 | 1.77394871442 734 | 2.1319817074 735 | 2.23933146499 736 | 1.91126563657 737 | 1.87813744817 738 | 1.95844106417 739 | 1.86650434506 740 | 1.48496092081 741 | 1.5597841033 742 | 2.1349613257 743 | 2.22239218062 744 | 1.76712735932 745 | 2.00819274752 746 | 1.72592455625 747 | 1.64498246504 748 | 2.26854097605 749 | 2.14063172125 750 | 1.87364451266 751 | 2.04992258099 752 | 1.84952660935 753 | 1.83033246659 754 | 1.83008098595 755 | 1.44530567258 756 | 1.63634851978 757 | 1.91392550534 758 | 1.67699959865 759 | 2.2159184458 760 | 1.6736616783 761 | 2.14243319402 762 | 1.66941666928 763 | 1.70315957754 764 | 1.81001685415 765 | 2.0342699754 766 | 2.23706643941 767 | 1.7503815758 768 | 2.23743651 769 | 1.92586001551 770 | 1.63911015344 771 | 2.24857507867 772 | 2.32113382274 773 | 2.11956403521 774 | 2.28305206464 775 | 2.05259643931 776 | 2.24866161833 777 | 2.22999139596 778 | 1.79483003368 779 | 2.22553037274 780 | 1.49296299313 781 | 1.81506228411 782 | 1.7823180511 783 | 2.200855213 784 | 2.14171390056 785 | 1.94448060324 786 | 1.92015066893 787 | 1.81675391586 788 | 1.58259544445 789 | 1.79083162414 790 | 2.2170425305 791 | 1.80254769338 792 | 1.7971857445 793 | 1.50976919251 794 | 2.09062592679 795 | 2.36595825029 796 | 2.31820354285 797 | 2.2027932885 798 | 2.27531086468 799 | 2.30247403231 800 | 1.90344071566 801 | 1.54096608388 802 | 1.73550665363 803 | 2.03922948894 804 | 2.22384639787 805 | 2.00475467311 806 | 1.85329872061 807 | 2.18980798121 808 | 1.83726438837 809 | 1.94177510477 810 | 2.03846692919 811 | 1.99834985579 812 | 1.73424815992 813 | 2.16203530111 814 | 2.17853819393 815 | 1.80664053816 816 | 1.86774862726 817 | 1.97532111746 818 | 2.0597256107 819 | 1.94948621199 820 | 2.09463696119 821 | 1.85179520827 822 | 1.88809378102 823 | 2.19422037878 824 | 1.90750548568 825 | 1.7445766538 826 | 2.0525431267 827 | 1.5902349344 828 | 1.98722275573 829 | 1.60967236035 830 | 2.17032362537 831 | 1.84412092865 832 | 1.75474512372 833 | 2.14226707704 834 | 1.95596862865 835 | 2.11281835283 836 | 1.76738635194 837 | 1.56476993236 838 | 1.82480069162 839 | 1.77178220801 840 | 1.86207210956 841 | 2.07418124154 842 | 1.62706943565 843 | 1.61171594851 844 | 1.81449771033 845 | 2.25036430193 846 | 1.43287628006 847 | 1.8926105056 848 | 1.70845697629 849 | 1.69099100616 850 | 1.68233782538 851 | 1.81382145841 852 | 1.68793697129 853 | 1.97870700971 854 | 2.03122084717 855 | 2.06848552789 856 | 1.73168135899 857 | 1.63027182898 858 | 1.6107697485 859 | 1.75250812997 860 | 2.1612309802 861 | 1.48277700878 862 | 1.81343218073 863 | 1.74913818517 864 | 1.86523694087 865 | 1.84044028752 866 | 1.7996722856 867 | 2.33769110042 868 | 2.19863086372 869 | 1.86695857472 870 | 1.8607687394 871 | 1.95258944795 872 | 2.10138495903 873 | 2.17839320727 874 | 2.189345359 875 | 1.67998379735 876 | 1.92194644546 877 | 1.48906293223 878 | 2.03678999437 879 | 1.89517345005 880 | 2.01780780113 881 | 1.31996699345 882 | 1.47106813561 883 | 1.9927871495 884 | 1.80032133558 885 | 1.97245771157 886 | 1.6453034323 887 | 1.79826848442 888 | 1.99031789305 889 | 1.74764528501 890 | 1.79786726946 891 | 1.88703180588 892 | 2.18703321284 893 | 1.86473832143 894 | 1.92648792187 895 | 1.92872892068 896 | 2.33405983362 897 | 1.51697149672 898 | 2.05707233793 899 | 1.82363170854 900 | 1.96911616907 901 | 2.23917572779 902 | 2.15061951409 903 | 2.21176043481 904 | 2.38134858927 905 | 2.15211071951 906 | 1.89188905685 907 | 2.09365843725 908 | 2.32963991327 909 | 2.02850295894 910 | 2.15846603916 911 | 2.27391312611 912 | 1.73816232656 913 | 1.93807916823 914 | 1.65696185677 915 | 1.64032972665 916 | 1.84960575523 917 | 1.58984171865 918 | 2.18115334698 919 | 2.25168193114 920 | 2.05378063371 921 | 2.11546032094 922 | 1.97211563557 923 | 1.54320108104 924 | 2.34027607795 925 | 1.83492881161 926 | 1.95646983692 927 | 1.74578542342 928 | 1.53104180855 929 | 2.27475639484 930 | 2.04132855093 931 | 2.39409706507 932 | 1.8703986256 933 | 2.15263929001 934 | 1.65196852728 935 | 1.56420961535 936 | 1.33402489224 937 | 2.0499363463 938 | 2.14932067027 939 | 1.7494951176 940 | 1.91644787969 941 | 2.10235939563 942 | 1.64026937856 943 | 1.95127622755 944 | 2.08075594942 945 | 1.80287760698 946 | 2.13865951777 947 | 1.53839610942 948 | 1.68477309444 949 | 1.65150011951 950 | 1.63961356466 951 | 1.59931189186 952 | 1.71268617399 953 | 2.06875028004 954 | 1.75304445747 955 | 1.88514432651 956 | 1.78658977997 957 | 1.69756929931 958 | 1.61044283693 959 | 1.48339868946 960 | 2.18061111903 961 | 1.74891063433 962 | 1.97140689272 963 | 1.64008102077 964 | 2.24577324328 965 | 2.01994632811 966 | 1.64633783063 967 | 1.45607360741 968 | 1.76411373311 969 | 1.79734752203 970 | 1.66888261196 971 | 1.99681626684 972 | 1.74973726001 973 | 1.92379321312 974 | 1.89242329254 975 | 1.96901840015 976 | 1.81715920028 977 | 1.70806159269 978 | 1.85910835943 979 | 1.94982399687 980 | 1.70543519745 981 | 2.06895805961 982 | 1.34290065222 983 | 1.7755658466 984 | 1.56334993275 985 | 1.7833787033 986 | 2.39156536605 987 | 2.08537384421 988 | 2.10276122603 989 | 1.80004228129 990 | 1.3491232344 991 | 1.97772025989 992 | 1.96954052816 993 | 2.09093887692 994 | 1.52169334492 995 | 1.72505080099 996 | 1.89890175418 997 | 2.10663246345 998 | 2.26249127516 999 | 1.69349569023 1000 | 1.70941048445 1001 | -------------------------------------------------------------------------------- /test/ellipsoid1000_result: -------------------------------------------------------------------------------- 1 | 3.36821001238 2 | 3.3185188453 3 | 3.68062962074 4 | 3.12116404057 5 | 4.4665891643 6 | 4.40407351011 7 | 3.90382358556 8 | 4.09495679037 9 | 2.72765674093 10 | 3.41577046469 11 | 3.47582020794 12 | 3.89847460415 13 | 4.13728146355 14 | 3.3584420334 15 | 3.96748111024 16 | 2.907843504 17 | 2.69119261532 18 | 3.79163388421 19 | 3.32419065454 20 | 4.40318838679 21 | 3.38086350954 22 | 3.0416126635 23 | 4.35911782038 24 | 3.3049303874 25 | 3.93207076299 26 | 4.34615026558 27 | 3.78921309265 28 | 3.26361099221 29 | 4.03082790782 30 | 4.12616311143 31 | 3.84103181746 32 | 3.96163171302 33 | 3.72461495379 34 | 3.88647462924 35 | 3.46019587734 36 | 4.14597683771 37 | 4.32417783638 38 | 2.65378905225 39 | 2.97897426298 40 | 3.86965375373 41 | 4.33108126303 42 | 3.69716357753 43 | 3.7336294707 44 | 3.03814912701 45 | 3.30353198353 46 | 3.82095666757 47 | 3.64878446607 48 | 4.33236337671 49 | 3.38812369957 50 | 4.27586960333 51 | 3.99457230868 52 | 3.10328731562 53 | 3.90623645283 54 | 2.9494159061 55 | 3.93954001975 56 | 3.84556247644 57 | 2.72105690884 58 | 3.62168524593 59 | 4.17432618386 60 | 4.14665931 61 | 3.3396935544 62 | 3.03897344577 63 | 3.66467000598 64 | 4.33809703271 65 | 4.09236503949 66 | 4.32022880754 67 | 2.68061246273 68 | 4.09806523864 69 | 3.66027554365 70 | 3.20746302485 71 | 3.11382593141 72 | 4.05745812629 73 | 4.1500222256 74 | 4.24608745949 75 | 2.96186838493 76 | 3.47195705341 77 | 3.958562811 78 | 3.81068261662 79 | 4.16592645704 80 | 3.11758690648 81 | 3.63406782096 82 | 3.54619380678 83 | 4.25927341223 84 | 2.88529965135 85 | 4.14311690904 86 | 3.17353866613 87 | 2.66210243716 88 | 4.26935699892 89 | 3.65052266946 90 | 3.49123394699 91 | 3.50822432419 92 | 3.79138220785 93 | 3.85382137653 94 | 3.29739227386 95 | 3.52407330736 96 | 3.7483965531 97 | 3.524686602 98 | 3.59491402006 99 | 3.65125993448 100 | 3.00077588183 101 | 3.8556978368 102 | 3.82570650294 103 | 3.98310700629 104 | 3.84892272968 105 | 4.11276548122 106 | 3.95102257066 107 | 3.15466680759 108 | 4.34358754923 109 | 3.87645849225 110 | 3.1859691258 111 | 4.00684664902 112 | 2.81493128854 113 | 3.97349700338 114 | 3.56493173463 115 | 3.10275068839 116 | 4.135564224 117 | 3.35800510686 118 | 2.77471882998 119 | 4.23697653565 120 | 3.69540779516 121 | 3.86344102971 122 | 3.99723044585 123 | 3.3500705268 124 | 2.96598312893 125 | 4.04436888925 126 | 3.07543370952 127 | 2.73370886074 128 | 3.75123395126 129 | 4.16305984254 130 | 3.77094432463 131 | 3.99133668612 132 | 3.66468282756 133 | 3.15278938936 134 | 4.31237168235 135 | 3.43432447421 136 | 3.61956810005 137 | 3.39051539234 138 | 3.15109841393 139 | 3.34099382999 140 | 4.11876560191 141 | 3.45940531928 142 | 3.77392685237 143 | 4.14340559105 144 | 4.4977291262 145 | 2.68462364067 146 | 4.29993499971 147 | 2.6284619318 148 | 3.51906978091 149 | 3.5872520607 150 | 3.81215130456 151 | 3.30057366499 152 | 3.14137182812 153 | 3.99403467095 154 | 3.60557299589 155 | 2.87386363064 156 | 4.42614501122 157 | 4.13657699435 158 | 3.73510434186 159 | 3.60352343842 160 | 4.41541853921 161 | 3.34664721822 162 | 4.12031279998 163 | 3.88324625801 164 | 3.48473364324 165 | 3.31684789628 166 | 3.95136798038 167 | 3.60181594838 168 | 3.36448344668 169 | 4.10288359387 170 | 4.36694660815 171 | 3.11327279774 172 | 3.75490719942 173 | 3.25019765938 174 | 3.30756847047 175 | 3.60377331269 176 | 3.06697471318 177 | 3.69116954058 178 | 3.29411542164 179 | 3.88743033093 180 | 3.66574290185 181 | 3.37533346673 182 | 2.66206353037 183 | 4.07971697233 184 | 3.89970340712 185 | 3.25411968456 186 | 3.56977663867 187 | 3.094587694 188 | 4.08577344039 189 | 4.15206488636 190 | 4.06769250311 191 | 3.7067413853 192 | 3.39614380431 193 | 3.54603990925 194 | 3.57858754814 195 | 2.47713025096 196 | 4.51626732324 197 | 3.72584291168 198 | 3.48770354135 199 | 3.59621647774 200 | 3.45563794456 201 | 4.27462481127 202 | 3.37683276669 203 | 2.45585495525 204 | 4.43801697406 205 | 4.48856380801 206 | 3.55944981124 207 | 2.96315091791 208 | 4.32267734354 209 | 3.03108079722 210 | 3.91664960287 211 | 3.0744473096 212 | 3.73439957819 213 | 4.05062120931 214 | 3.35730894366 215 | 3.95098204631 216 | 3.02852864278 217 | 4.03864011706 218 | 4.21611521922 219 | 3.53226763496 220 | 3.90076088728 221 | 3.34994429719 222 | 3.46988485549 223 | 2.89616322073 224 | 3.62238984569 225 | 3.96872583419 226 | 3.46344931524 227 | 3.98554960703 228 | 3.80758171605 229 | 2.77435640959 230 | 3.89133161174 231 | 3.34526139993 232 | 3.76997601838 233 | 3.77073922308 234 | 4.09137302737 235 | 3.04607994406 236 | 3.51137535664 237 | 4.05258269115 238 | 3.36813912073 239 | 4.48155411655 240 | 4.29050150523 241 | 3.90347954059 242 | 4.11673828318 243 | 3.57046700996 244 | 3.55875682472 245 | 3.24028433154 246 | 3.43649148089 247 | 3.80724035411 248 | 3.21936627134 249 | 3.09393232374 250 | 4.08782079969 251 | 3.84379906306 252 | 4.33557446215 253 | 3.07006023943 254 | 2.9701005125 255 | 3.44028870607 256 | 3.55353889883 257 | 3.58424391801 258 | 3.58774780876 259 | 4.37685992393 260 | 3.75617945843 261 | 3.35580181837 262 | 3.62365432053 263 | 4.30356641804 264 | 3.29269161236 265 | 3.48629163397 266 | 3.78756675958 267 | 3.85687604235 268 | 3.78047433579 269 | 3.18352915565 270 | 3.65191596396 271 | 3.53043282408 272 | 3.49822814546 273 | 3.73652230603 274 | 3.63666001237 275 | 2.75149836575 276 | 4.04479534392 277 | 3.22027580195 278 | 4.01136488834 279 | 3.90140091198 280 | 3.41647351071 281 | 3.61821412459 282 | 4.31177665438 283 | 3.23934507044 284 | 3.53360926044 285 | 4.52543367997 286 | 3.30991961818 287 | 4.26705193837 288 | 3.90465848728 289 | 3.75182038888 290 | 2.85504544509 291 | 3.13435608096 292 | 3.226120432 293 | 3.70166011692 294 | 3.45850338332 295 | 3.23988547116 296 | 3.81868883198 297 | 3.10702192487 298 | 4.13387037017 299 | 3.58675827944 300 | 2.97830718447 301 | 4.11730407295 302 | 4.34721720556 303 | 3.87651182606 304 | 4.41502798116 305 | 3.76350988302 306 | 4.11667348663 307 | 3.06448504 308 | 3.72472736773 309 | 4.12516726907 310 | 3.97225669944 311 | 3.20273270012 312 | 3.78302090903 313 | 3.46520579595 314 | 3.49512908234 315 | 3.29343107898 316 | 3.64642769205 317 | 3.91149752431 318 | 2.5485259829 319 | 3.94696425829 320 | 3.04152684804 321 | 4.41993404815 322 | 4.01222182731 323 | 3.44453465714 324 | 3.0141265986 325 | 4.40114947546 326 | 3.80570655258 327 | 3.80191779337 328 | 3.33332799981 329 | 3.4035496582 330 | 4.15303037083 331 | 3.88344700596 332 | 4.32037710831 333 | 3.87549175026 334 | 3.64795588923 335 | 3.89320741201 336 | 3.03793812136 337 | 3.80976872005 338 | 3.60572129927 339 | 3.50840770003 340 | 4.42041785094 341 | 3.24244956044 342 | 3.44804977366 343 | 3.65829943204 344 | 3.54938906453 345 | 3.58537766007 346 | 3.78834808618 347 | 4.41623566133 348 | 3.25835630965 349 | 3.98443246937 350 | 3.40617970797 351 | 3.96949138528 352 | 3.56758911615 353 | 3.70512265685 354 | 4.01383230406 355 | 3.24810423903 356 | 4.19711554575 357 | 3.90200692363 358 | 2.8684896325 359 | 3.46105140059 360 | 3.36911926222 361 | 3.11128759834 362 | 3.74566193332 363 | 4.03543199647 364 | 3.43106882763 365 | 2.82712673764 366 | 3.72238218982 367 | 3.79307579037 368 | 3.42971448319 369 | 3.92404531837 370 | 4.29753573506 371 | 4.01882310085 372 | 4.17902736941 373 | 3.02481194163 374 | 2.92262140505 375 | 3.49269554712 376 | 3.8021835441 377 | 4.37260822942 378 | 3.62570582602 379 | 3.00424725755 380 | 4.424311287 381 | 3.30875940546 382 | 3.7970378516 383 | 3.58178667053 384 | 3.83251789132 385 | 3.66734237125 386 | 4.27369583669 387 | 3.65180624908 388 | 2.91498302906 389 | 2.88189797379 390 | 3.87034326274 391 | 3.81639898233 392 | 3.03082826032 393 | 3.49375153741 394 | 3.47697414292 395 | 2.70052751836 396 | 3.98807792133 397 | 3.45591436177 398 | 3.472894792 399 | 4.38871302383 400 | 3.12835967807 401 | 3.79772661246 402 | 4.43075406012 403 | 3.20073136302 404 | 3.36903688364 405 | 3.36275533596 406 | 3.21238990062 407 | 3.52841700944 408 | 3.60950854797 409 | 3.53943148019 410 | 3.86091637085 411 | 4.0626276702 412 | 3.07139050174 413 | 4.40948578852 414 | 3.84508477937 415 | 3.92096314687 416 | 3.61378687126 417 | 4.50830965414 418 | 3.8390789748 419 | 3.54672473601 420 | 3.71805659911 421 | 3.28617017026 422 | 3.81271096437 423 | 3.80908034001 424 | 3.02498373723 425 | 3.46624866721 426 | 3.47626214599 427 | 3.84068620096 428 | 3.25179602021 429 | 3.60617153673 430 | 3.70631392367 431 | 3.82532546876 432 | 3.84796392307 433 | 3.37267359093 434 | 3.65406655739 435 | 3.57223058231 436 | 4.00152473392 437 | 3.861226722 438 | 4.44590270214 439 | 3.30237657696 440 | 3.65707821676 441 | 2.96843271196 442 | 3.79159981397 443 | 3.99902802076 444 | 2.89170145746 445 | 3.38281929595 446 | 3.23031806612 447 | 3.56380735543 448 | 3.45478663093 449 | 3.39995841137 450 | 3.07718318355 451 | 3.50856911643 452 | 3.12125790823 453 | 3.77926099607 454 | 3.61483570091 455 | 3.11485991067 456 | 3.66479568032 457 | 4.42255034723 458 | 3.49943621469 459 | 3.05074819581 460 | 3.81040918953 461 | 3.60443693193 462 | 3.59987719209 463 | 3.74382504695 464 | 3.79853101511 465 | 3.47455814803 466 | 4.07385482017 467 | 3.79535709374 468 | 3.72059382586 469 | 3.81190458461 470 | 3.56991703675 471 | 3.5942249059 472 | 3.51609142201 473 | 3.99656146197 474 | 4.47918949334 475 | 4.3013810017 476 | 3.30657447563 477 | 3.66799024391 478 | 3.72605150574 479 | 3.41892906179 480 | 3.9761651643 481 | 4.1314731005 482 | 3.600712714 483 | 3.18592114219 484 | 3.40294077966 485 | 3.37246703318 486 | 3.16757406677 487 | 3.82187015247 488 | 2.92138970422 489 | 4.40426136918 490 | 3.3880727809 491 | 4.12129890336 492 | 3.90217804518 493 | 3.93010687514 494 | 3.97462592969 495 | 3.83840937062 496 | 3.94625602279 497 | 4.0137742634 498 | 3.04620286954 499 | 3.51067560734 500 | 3.34019178058 501 | 3.23494786239 502 | 4.39546082104 503 | 3.93305213204 504 | 3.79253556861 505 | 3.44789694333 506 | 3.97357569727 507 | 3.84844709691 508 | 4.31195481623 509 | 3.56809263966 510 | 2.69558715802 511 | 4.11389117593 512 | 3.38458473906 513 | 3.64373512321 514 | 4.26987923648 515 | 3.43454738374 516 | 3.34979921091 517 | 3.56489772782 518 | 3.97313508173 519 | 3.93386265024 520 | 3.34414880693 521 | 3.66559932983 522 | 3.80168714708 523 | 4.47570468788 524 | 2.86041976363 525 | 3.14154959454 526 | 4.0495546181 527 | 3.51159201576 528 | 3.42847069483 529 | 3.80501150788 530 | 4.32112504257 531 | 3.86667718366 532 | 3.91664459485 533 | 3.53726446094 534 | 3.70959113151 535 | 4.26053156371 536 | 3.96599340191 537 | 3.6358893823 538 | 3.81777439337 539 | 3.12467728328 540 | 3.3036588775 541 | 3.80532022366 542 | 3.48696954928 543 | 3.89732435654 544 | 2.50297082758 545 | 4.04423573387 546 | 3.42522807173 547 | 4.41138137256 548 | 3.34262120245 549 | 3.04116742937 550 | 3.96505609043 551 | 2.99563436335 552 | 3.74895101396 553 | 3.41579094771 554 | 3.84259012087 555 | 2.96805054669 556 | 4.08350025788 557 | 4.05007216299 558 | 3.99708676028 559 | 3.27376943932 560 | 3.64354134039 561 | 3.21279318119 562 | 4.51401055882 563 | 4.33983048529 564 | 4.06226997628 565 | 2.99546204612 566 | 3.29913982067 567 | 3.47596751072 568 | 4.12115659001 569 | 4.13372941188 570 | 2.96605307566 571 | 3.90548024798 572 | 4.03438964184 573 | 4.28574837513 574 | 3.24024189985 575 | 4.26717313207 576 | 4.04662533994 577 | 3.8567812776 578 | 3.74508393606 579 | 3.92834841472 580 | 3.26400694964 581 | 3.10389649405 582 | 3.12577447986 583 | 3.4358888833 584 | 3.50392071775 585 | 3.79666579755 586 | 3.75043007582 587 | 4.25968512812 588 | 3.07417249913 589 | 3.90107424323 590 | 3.3996553665 591 | 3.48106930435 592 | 3.61702085683 593 | 3.20447840897 594 | 4.34619074214 595 | 3.74049007356 596 | 3.73819328289 597 | 3.56645610192 598 | 4.13815644474 599 | 4.0468457565 600 | 3.49428267604 601 | 4.46861587214 602 | 3.6143907404 603 | 3.73290944706 604 | 3.94037857141 605 | 3.32122524489 606 | 4.28336797015 607 | 4.35413711614 608 | 3.3111633261 609 | 4.23760627256 610 | 3.4950791035 611 | 3.30251041017 612 | 4.08949292666 613 | 3.77335786962 614 | 3.97537972089 615 | 3.10151801747 616 | 3.33139009608 617 | 3.5570623335 618 | 3.41605872038 619 | 3.43010430841 620 | 3.64243395928 621 | 3.76857714749 622 | 3.77599956281 623 | 3.95495005106 624 | 3.97787408628 625 | 3.86381250519 626 | 3.36148883972 627 | 4.14388036237 628 | 3.99824220979 629 | 3.30034341858 630 | 3.34009141914 631 | 3.22893866686 632 | 3.0036251225 633 | 3.64265508969 634 | 3.68762837817 635 | 3.0262137265 636 | 4.14118012064 637 | 3.37589942001 638 | 3.5708210846 639 | 3.30634785675 640 | 3.99525758062 641 | 3.78503552909 642 | 3.56500925645 643 | 3.34570018073 644 | 3.20814692814 645 | 3.95632678653 646 | 3.92031022652 647 | 3.35013091745 648 | 3.61655696052 649 | 2.99005684195 650 | 4.20968243883 651 | 3.70257544485 652 | 4.39201043621 653 | 3.17011312327 654 | 3.828154927 655 | 4.21908078847 656 | 2.9644506292 657 | 4.04774734717 658 | 3.56433656878 659 | 3.31668527871 660 | 3.96363420843 661 | 2.98927683672 662 | 4.42566598238 663 | 3.90360716618 664 | 4.43238390806 665 | 3.71627069046 666 | 3.630876637 667 | 4.37687362649 668 | 3.61671260868 669 | 3.10090804551 670 | 3.52072235269 671 | 3.81884862525 672 | 4.39567663537 673 | 3.84492077476 674 | 3.08426887166 675 | 3.44211635777 676 | 3.92344668049 677 | 4.18707365842 678 | 3.97284297275 679 | 3.95344121916 680 | 3.54602873986 681 | 3.28448099122 682 | 3.51447011451 683 | 4.25769529959 684 | 3.77529470366 685 | 4.3774518271 686 | 3.9166883335 687 | 4.19229771456 688 | 3.89904339296 689 | 3.11495686431 690 | 3.72574713363 691 | 3.56199533039 692 | 3.51608150327 693 | 3.74700318877 694 | 3.83358967885 695 | 3.97456657016 696 | 4.32757023233 697 | 3.29560608843 698 | 2.92179571312 699 | 3.5204481309 700 | 3.92469385919 701 | 3.91364118534 702 | 3.6125321719 703 | 3.52410202782 704 | 3.69150509924 705 | 3.38050690123 706 | 3.65575964834 707 | 3.85749620679 708 | 3.42720774556 709 | 3.73348888341 710 | 3.33305710042 711 | 3.89443375227 712 | 3.0871544346 713 | 4.14006316379 714 | 3.94470680326 715 | 2.98490566401 716 | 3.02874854695 717 | 4.15838437866 718 | 3.34568316557 719 | 3.99077795226 720 | 4.52151626477 721 | 3.06696350958 722 | 3.63233408025 723 | 3.65586016036 724 | 2.85468999284 725 | 4.02224624332 726 | 4.01663374276 727 | 3.65244987015 728 | 3.88034121132 729 | 3.00378759929 730 | 4.01136946495 731 | 4.23669114369 732 | 4.11432304492 733 | 4.52040118519 734 | 2.99595602716 735 | 3.08515839423 736 | 3.67232094175 737 | 3.85743674849 738 | 3.38812766969 739 | 3.13715042279 740 | 3.95923654303 741 | 3.30002875351 742 | 3.41400664968 743 | 4.29227438279 744 | 4.27649346885 745 | 3.44566038632 746 | 4.42779565791 747 | 3.50362164633 748 | 4.14877081509 749 | 4.02358793681 750 | 3.23542798914 751 | 3.74830695875 752 | 3.53861046216 753 | 3.39379625637 754 | 3.72226146357 755 | 3.44640274505 756 | 4.01528031864 757 | 3.66083351785 758 | 4.02312571037 759 | 3.13817701173 760 | 3.5992912673 761 | 3.09522313598 762 | 3.47103090888 763 | 4.13433474293 764 | 2.93775889253 765 | 3.97199722899 766 | 3.58542233778 767 | 3.63185426929 768 | 3.0532714803 769 | 3.23230085847 770 | 3.24062367118 771 | 2.70793197053 772 | 4.01277103423 773 | 3.17373915854 774 | 3.35467794623 775 | 3.45580066627 776 | 3.1869954781 777 | 3.75181322104 778 | 4.20644483337 779 | 4.40683549778 780 | 3.82531581832 781 | 4.32938194728 782 | 3.07768214832 783 | 4.47495512686 784 | 2.57870050579 785 | 3.68623051817 786 | 3.06690382755 787 | 3.30992892449 788 | 3.16325605009 789 | 3.23215701212 790 | 3.33067399346 791 | 3.6416145103 792 | 3.72174419833 793 | 3.72571064705 794 | 3.6015623268 795 | 3.00819531482 796 | 3.07724973694 797 | 3.35158734489 798 | 4.10444654337 799 | 3.53954864528 800 | 2.90379760673 801 | 2.92722583497 802 | 3.41818474235 803 | 3.76880706732 804 | 2.88231180525 805 | 4.3158348488 806 | 3.88919222199 807 | 3.04918515359 808 | 3.61274684113 809 | 3.1446623118 810 | 4.26739458366 811 | 3.95037750919 812 | 3.57264737137 813 | 3.16753620833 814 | 3.5256278644 815 | 4.50872625946 816 | 4.07084657488 817 | 3.05813921538 818 | 3.55954075878 819 | 3.80964554274 820 | 4.20188829897 821 | 3.72037985966 822 | 4.110141287 823 | 3.19824730014 824 | 3.89844429076 825 | 3.38673993102 826 | 2.95314718343 827 | 3.15978802342 828 | 3.13207463952 829 | 3.13537612905 830 | 4.1740885449 831 | 3.96707114805 832 | 3.61242081476 833 | 3.80154908725 834 | 3.51254837238 835 | 3.37312565851 836 | 3.15029699914 837 | 3.55868538338 838 | 3.75433108 839 | 3.71486603622 840 | 2.7429872007 841 | 3.95313970794 842 | 4.11773930051 843 | 3.39246341468 844 | 4.19245681447 845 | 3.62214980961 846 | 2.61367170534 847 | 2.87835913675 848 | 3.25577712753 849 | 4.29591929629 850 | 4.06907263356 851 | 4.09849772993 852 | 3.54181942616 853 | 4.06724548158 854 | 4.06262307255 855 | 3.41977765372 856 | 4.31428056045 857 | 3.7864286114 858 | 3.05088639282 859 | 3.60546356285 860 | 2.80753827144 861 | 3.62779720408 862 | 3.61817888121 863 | 3.4196115312 864 | 2.47902394349 865 | 3.52316641952 866 | 3.53066988394 867 | 4.46840133675 868 | 2.97553092232 869 | 4.12895895622 870 | 3.91376177751 871 | 4.47188144317 872 | 3.61735564975 873 | 3.55476353321 874 | 3.87364653774 875 | 4.06369528174 876 | 3.97157300494 877 | 3.69032691665 878 | 3.85941204541 879 | 3.98562008821 880 | 3.45265525509 881 | 3.47992816994 882 | 4.0019635901 883 | 3.01012634583 884 | 3.69296551873 885 | 2.94210200898 886 | 3.33169282262 887 | 3.73314897645 888 | 3.71688867835 889 | 2.61860291755 890 | 3.11752571756 891 | 3.52905505823 892 | 3.83372502073 893 | 3.97446006992 894 | 3.57539281037 895 | 4.22658152228 896 | 3.32872652923 897 | 2.56236089594 898 | 4.04989280716 899 | 3.62196948057 900 | 3.08889742936 901 | 3.64037291418 902 | 3.20273897597 903 | 3.53528407895 904 | 2.81228875321 905 | 3.89567823037 906 | 4.1523267223 907 | 3.95963805549 908 | 3.63596626325 909 | 3.5304232193 910 | 3.94920651837 911 | 2.57552874387 912 | 3.57313859247 913 | 4.42176808865 914 | 3.2361397605 915 | 3.55193627847 916 | 2.89758900513 917 | 3.42757287551 918 | 2.71753520809 919 | 4.00228688646 920 | 4.32548516753 921 | 3.76575616083 922 | 3.81463867213 923 | 4.04240589878 924 | 3.76979074038 925 | 3.37392029 926 | 3.88297441617 927 | 4.11880914046 928 | 3.36398268556 929 | 4.52334309215 930 | 4.06181692242 931 | 2.99909875529 932 | 4.0379433915 933 | 3.56767284395 934 | 3.48959636629 935 | 3.3908059001 936 | 3.61439329593 937 | 4.23476430838 938 | 3.49007243545 939 | 3.18437803633 940 | 3.26002849106 941 | 3.78817709757 942 | 3.48954306702 943 | 3.23781422157 944 | 3.1764149912 945 | 4.06695365731 946 | 3.78230702554 947 | 3.41151966325 948 | 3.77236660567 949 | 3.35721063176 950 | 3.4431938173 951 | 4.04705162948 952 | 3.63058282586 953 | 3.84282912363 954 | 2.64615249016 955 | 3.32052909653 956 | 4.06793753232 957 | 3.44993047092 958 | 4.09416243169 959 | 4.25937879873 960 | 3.49428197348 961 | 3.76802189636 962 | 4.47873728749 963 | 3.84519257803 964 | 4.00977629119 965 | 4.17211829839 966 | 3.69977523047 967 | 3.9757044156 968 | 3.2687434252 969 | 4.35422597728 970 | 4.28177912131 971 | 4.27524563814 972 | 3.20210578473 973 | 4.40514044192 974 | 3.82942251396 975 | 4.39802473373 976 | 3.68880043327 977 | 3.83326442665 978 | 3.49697003112 979 | 2.93540693318 980 | 4.00917899565 981 | 3.392042043 982 | 3.22998264529 983 | 3.53361793288 984 | 3.99561266167 985 | 2.91191804695 986 | 3.69109976929 987 | 2.97495903527 988 | 4.42144052694 989 | 3.95501658437 990 | 3.03719180776 991 | 3.26797163971 992 | 4.03378350319 993 | 4.00848811971 994 | 3.59268137045 995 | 3.37107446534 996 | 3.98689513675 997 | 4.4172960878 998 | 3.50815357466 999 | 3.84801869237 1000 | 3.16579858341 1001 | -------------------------------------------------------------------------------- /04_tree_construction.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Step 4: Tree Construction" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import numpy\n", 19 | "from treecode_helper import Point, Particle" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "In the previous notebook, we discussed how to use multi-level multipole expansion to calculate the potential field at target points, when the sources and targets are well separated. So in this notebook, we will think about how to build a hierarchical tree to store the particles in order to achieve a multi-level multipole expansion.\n", 27 | "\n", 28 | "In 1986, Barnes and Hut observed that the particles might work in the same way that humans interact with neighboring individuals, more distant villages and larger countries. They came up with an algorithm that the potential on an individual particle from other particles close by is evaluated by direct summation (particle-particle interaction), whereas the potential due to more distant particles is calculated by multipole expansion (particle-cluster interaction). To apply this algorithm, they proposed a tree structure to group the particles in a smart way to facilitate the tree algorithm. Let's follow their idea to construct a tree of particles!\n", 29 | "\n", 30 | "Here we demonstrate the idea with a 2d quadtree where each cell can be subdivided into $4$ child cells. We begin with a **root** cell which is big enough to contain all the particles in space. We follow several rules to build this quadtree:\n", 31 | "* If there is more than one particles in the cell, we need to split this **parent** cell into 4 **child** cells.\n", 32 | "* If there is only one particle in the cell, which means this cell cannot be split, then we call this a **leaf** cell.\n", 33 | "* If there is no particles in a cell, we can ignore the cell (do not store the cell in memory).\n", 34 | "\n", 35 | "\n", 36 | "\n", 37 | "The figure above illustrates the recursive procedure to build a quadtree based on these rules. In this example, we use the number \"1\" to determine whether the cell needs to be split. We call this number a critical number $n_{crit}$, which implies the maximum number of particles that a **leaf** cell can contain. If a cell accommodates more than $n_{crit}$ number of particles, it has to be split and is no longer a leaf cell. This parameter tells about the granularity of the problem, which has a tremendous effect on the efficiency of treecode.\n", 38 | "\n", 39 | "Now let's start to define the problem and our rules to build the tree. Consider there are $n=100$ particles randomly scatterd in the domain $x$, $y$, $z$ $\\in$ $\\left[ 0, 1 \\right]$, each of them is a source and target. To contain all the particles, we define a **root** cubic cell centered at $(0.5,0.5, 0.5)$ with a side length of $1$. For a cubic cell, the radius is the half of side length, thus the root cell's radius $r$ is $0.5$. Then we choose $n_{crit}=10$ as the threshold to split a cell." 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "n = 100 # number of particles\n", 51 | "particles = [ Particle(m=1.0/n) for i in range(n) ]\n", 52 | "\n", 53 | "n_crit = 10 # max number of particles in a single cell" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "##### Defining the class: `Cell`" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "Since each non-empty cell is an instance which has some same properties (eg. cell's center coordinates, its parent, its children, its multipole, particles inside if it's a leaf), we first need to define a class for a cell, and we call this class `Cell`. Every cell is an instance of class `Cell`, and all the instances are stored in a list called `cells`. Therefore, the root cell is `cells[0]`. For those who have not been exposed to object-oriented programming in python, check [this](http://www.tutorialspoint.com/python/python_classes_objects.htm) out as a quick guide.\n", 68 | "\n", 69 | "\n", 70 | "\n", 71 | "The figure above shows the \"content\" of a cell element:\n", 72 | "* $x_c$, $y_c$, $z_c$, $r_c$: center coordinates and radius give the geometry of the cell.\n", 73 | "* A leaf of a cell is a particle stored in the cell, each leaf corresponds to a particle index from $0$ to $n-1$, and $n_{leaf}$ is number of leaves in the cell\n", 74 | "* **parent** is the index (in the cells list) of the corresponding parent. \n", 75 | "* **child** is the array that contains the indices (in the cells list) of the corresponding children.\n", 76 | "* **nchild** is an 8-bit binary number, each digit represents one of the eight child octants. $1$ denotes non-empty child cell, and $0$ denotes empty child cell in that octant. For example: nchild=00010100 means the current cell only has non-empty child in the fourth and sixth octant.\n", 77 | "* **multipole**: array of $10$ multipole terms of the cell." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": null, 83 | "metadata": { 84 | "collapsed": false 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "class Cell():\n", 89 | " \"\"\"The class for a cell.\n", 90 | " \n", 91 | " Arguments:\n", 92 | " n_crit: maximum number of particles in a leaf cell\n", 93 | " \n", 94 | " Attributes:\n", 95 | " nleaf (int): number of particles in the cell.\n", 96 | " leaf (array of int): array of leaves indices.\n", 97 | " nchild (int): 8-bit binary number, used to keep track of the empty child cells\n", 98 | " child (array of int): array of children indices.\n", 99 | " parent (int): index of parent cell.\n", 100 | " x, y, z (float): coordinates of the cell's center.\n", 101 | " r (float): radius of the cell (half of the length for cubic cell).\n", 102 | " multipole (array of float): array of multipoles' cell.\n", 103 | " \n", 104 | " \"\"\"\n", 105 | " def __init__(self, n_crit):\n", 106 | " self.nleaf = 0 # number of particles\n", 107 | " self.leaf = numpy.zeros(n_crit, dtype=numpy.int) # array of leaf index\n", 108 | " self.nchild = 0 # binary counter to keep track of empty cells\n", 109 | " self.child = numpy.zeros(8, dtype=numpy.int) # array of child index\n", 110 | " self.parent = 0 # index of parent cell\n", 111 | " self.x = self.y = self.z = 0. # center of the cell\n", 112 | " self.r = 0. # radius of the cell\n", 113 | " self.multipole = numpy.zeros(10, dtype=numpy.float) # multipole array" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": null, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [], 123 | "source": [ 124 | "root = Cell(n_crit)\n", 125 | "root.x, root.y, root.z = 0.5, 0.5, 0.5\n", 126 | "root.r = 0.5" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "##### Adding a child" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "Assuming that we create the root cell, then we add the particles into this root cell. After we put the 10th particle into the root, $n_{crit} = 10$ for the root. If there is a 11th particle coming, we have to split the root cell. So what is the first step if you want to do a split? The answer is to create a new cell instance which is the child of the root cell in the cells list. Thus `add_child` is a dependency of `split_cell`. Now let's think about how to add a child.\n", 141 | "\n", 142 | "To begin with, we need to append a new element to the cells list, so now the last element of the cells list should be the new child. First let's find the geometrical relationship between a parent $p$ and its child $c$:\n", 143 | "* $r_{child}$ = $\\frac{1}{2}r_{parent}$ for a cubic cell\n", 144 | "* $x_{c_{c}}$, $y_{c_{c}}$, $z_{c_{c}}$ can be determined by its $octant$ and its parent's coordinates $x_{c_{p}}$, $y_{c_{p}}$, $z_{c_{p}}$, refer to the code below and reflect how it works.\n", 145 | "\n", 146 | "Then we need to establish a mutual reference between the parent and the child in the cells list. Consider a new child is created in the parent's $5th$ octant. We assign the new child's index to the parent by `parent.child[4]=index_child`, and assign the parent's index to the new child by \"child.parent=index_parent\". Don't forget the 8-bit binary marker `nchild`. Since the new child is at $5th$ octant, the fifth digit from the right should be changed from \"0\" to \"1\". Recall that we always manipulate the binary number with bit shift." 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": null, 152 | "metadata": { 153 | "collapsed": false 154 | }, 155 | "outputs": [], 156 | "source": [ 157 | "def add_child(octant, p, cells, n_crit):\n", 158 | " \"\"\"Add a cell to the end of cells list as a child of p,\n", 159 | " initialize the center and radius of the child cell c, \n", 160 | " and establish mutual reference between child c and parent p.\n", 161 | " \n", 162 | " Arguments:\n", 163 | " octant: reference to the corresponding octant in 3D structure.\n", 164 | " p: is the index (in the cells list) of the corresponding parent.\n", 165 | " cells: the list of cells.\n", 166 | " n_crit: maximum number of particles in a leaf cell.\n", 167 | " \n", 168 | " \"\"\"\n", 169 | " # create a new cell instance and append it to cells list\n", 170 | " cells.append(Cell(n_crit))\n", 171 | " # the last element of the cells list is the new child c\n", 172 | " c = len(cells) - 1\n", 173 | " # geometric relationship between parent and child\n", 174 | " cells[c].r = cells[p].r / 2\n", 175 | " cells[c].x = cells[p].x + cells[c].r * ((octant & 1) * 2 - 1)\n", 176 | " cells[c].y = cells[p].y + cells[c].r * ((octant & 2) - 1 )\n", 177 | " cells[c].z = cells[p].z + cells[c].r * ((octant & 4) / 2 - 1)\n", 178 | " # establish mutual reference in the cells list\n", 179 | " cells[c].parent = p\n", 180 | " cells[p].child[octant] = c\n", 181 | " cells[p].nchild = (cells[p].nchild | (1 << octant))\n", 182 | " print('+++cell {} is created as a child of cell {}'.format(c, p))" 183 | ] 184 | }, 185 | { 186 | "cell_type": "markdown", 187 | "metadata": {}, 188 | "source": [ 189 | "##### Splitting a cell" 190 | ] 191 | }, 192 | { 193 | "cell_type": "markdown", 194 | "metadata": {}, 195 | "source": [ 196 | "Now Let's focus on splitting a cell. First we need to realize that the `split_cell` function should be recursive because after splitting a cell there is a probability that all the particles are reallocated to the same child. In this scenario, we have to recursively split the child cell again until all the cells satisfy the rule $n_{crit}=10$.\n", 197 | "\n", 198 | "Consider now we put $>$10 particles in the root cell. So it is time to split the root. In addition to create new child cells, we have also to \"settle\" down these particles. We loop over the them, and each particle is located in a certain octant from 0 to 7. If there is not a child cell in that octant, then we create one. If there is a child cell already created, we just put this particle in that child. Finally, we check if the number of particles in that child reaches $n_{crit}$, if yes, we split it recursively. \n", 199 | "\n", 200 | "" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": null, 206 | "metadata": { 207 | "collapsed": false 208 | }, 209 | "outputs": [], 210 | "source": [ 211 | "def split_cell(particles, p, cells, n_crit):\n", 212 | " \"\"\"Loop in parent p's leaves and reallocate the particles to subcells. \n", 213 | " If a subcell has not been created in that octant, it creates one using\n", 214 | " add_child. If the subcell nleaf exceeds n_crit, split the\n", 215 | " subcell c recursively.\n", 216 | " \n", 217 | " Arguments: \n", 218 | " particles: the list of particles.\n", 219 | " p: is the index (in the cells list) of the corresponding parent.\n", 220 | " cells: the list of cells.\n", 221 | " n_crit: maximum number of particles in a leaf cell.\n", 222 | " \n", 223 | " \"\"\"\n", 224 | " print('======start the split of cell {}======'.format(p))\n", 225 | " # loop over the particles in the parent cell that you want to split\n", 226 | " for l in cells[p].leaf:\n", 227 | " octant = (particles[l].x > cells[p].x) + ((particles[l].y > cells[p].y) << 1) \\\n", 228 | " + ((particles[l].z > cells[p].z) << 2) # finding the particle's octant\n", 229 | " # if there is not a child cell in the particle's octant, then create one\n", 230 | " if not cells[p].nchild & (1 << octant):\n", 231 | " add_child(octant, p, cells, n_crit)\n", 232 | " # reallocate the particle in the child cell\n", 233 | " c = cells[p].child[octant]\n", 234 | " cells[c].leaf[cells[c].nleaf] = l \n", 235 | " cells[c].nleaf += 1\n", 236 | " print('>>>particle {} is reallocated in cell {}'.format(l, c))\n", 237 | " # check if the child reach n_crit\n", 238 | " if cells[c].nleaf >= n_crit:\n", 239 | " split_cell(particles, c, cells, n_crit)\n", 240 | " print('======end split cell {}======'.format(p))" 241 | ] 242 | }, 243 | { 244 | "cell_type": "markdown", 245 | "metadata": {}, 246 | "source": [ 247 | "##### Constructing the tree" 248 | ] 249 | }, 250 | { 251 | "cell_type": "markdown", 252 | "metadata": {}, 253 | "source": [ 254 | "Based on adding and splitting a cell, we can easily form our code to build the tree. We loop over the particles, and find a cell for each particle from top (root cell) to bottom (leaf cell). If the current cell where the particle lives is not a leaf cell ($n_{leaf}=10$), then we recursively split it traverse down (find the octant and go to its child) until we find or create the leaf cell ($n_{leaf}<10$). Finally we can put every particle in a certain leaf cell where $n_{leaf}<10$. After we allocate every particle, we perform a check to determine whether the cell need to be splitted or not." 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": { 261 | "collapsed": false 262 | }, 263 | "outputs": [], 264 | "source": [ 265 | "def build_tree(particles, root, n_crit):\n", 266 | " \"\"\"Construct a hierarchical octree to store the particles and\n", 267 | " return the tree (list) of cells.\n", 268 | " \n", 269 | " Arguments:\n", 270 | " particles: the list of particles.\n", 271 | " root: the root cell.\n", 272 | " n_crit: maximum number of leaves in a single cell.\n", 273 | " \n", 274 | " Returns:\n", 275 | " cells: the list of cells\n", 276 | " \n", 277 | " \"\"\"\n", 278 | " # set root cell\n", 279 | " cells = [root] # initialize the cells list\n", 280 | "\n", 281 | " # build tree\n", 282 | " n = len(particles)\n", 283 | " for i in range(n):\n", 284 | " # traverse from the root down to a leaf cell\n", 285 | " curr = 0\n", 286 | " while cells[curr].nleaf >= n_crit:\n", 287 | " cells[curr].nleaf += 1\n", 288 | " octant = (particles[i].x > cells[curr].x) + ((particles[i].y > cells[curr].y) << 1) \\\n", 289 | " + ((particles[i].z > cells[curr].z) << 2)\n", 290 | " # if there is no child cell in the particles octant, then create one\n", 291 | " if not cells[curr].nchild & (1 << octant):\n", 292 | " add_child(octant, curr, cells, n_crit)\n", 293 | " curr = cells[curr].child[octant]\n", 294 | " # allocate the particle in the leaf cell\n", 295 | " cells[curr].leaf[cells[curr].nleaf] = i\n", 296 | " cells[curr].nleaf += 1\n", 297 | " print('particle {} is stored in cell {}'.format(i, curr))\n", 298 | " # check whether to split or not\n", 299 | " if cells[curr].nleaf >= n_crit:\n", 300 | " split_cell(particles, curr, cells, n_crit)\n", 301 | " \n", 302 | " return cells" 303 | ] 304 | }, 305 | { 306 | "cell_type": "markdown", 307 | "metadata": {}, 308 | "source": [ 309 | "Now let's build our tree!" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": null, 315 | "metadata": { 316 | "collapsed": false 317 | }, 318 | "outputs": [], 319 | "source": [ 320 | "cells = build_tree(particles, root, n_crit)" 321 | ] 322 | }, 323 | { 324 | "cell_type": "markdown", 325 | "metadata": {}, 326 | "source": [ 327 | "Eventually, we build the hierarchical octree based on the random particle distribution and our rule that $n_{crit}=10$. By constructing the tree, we put all the cells in a single list, and for each cell element, we can tell its geometry/location parameter ($x_c$, $y_c$, $z_c$, $r$). In addition, we know every parent-child relationship according to the mutual reference, and we know which particles are located in which cell. After we build the tree, we can find there are two types of cell:\n", 328 | "* non-leaf cell: $n_{leaf} >= n_{crit}=10$, they have child cells, and they are parents of leaf cells.\n", 329 | "* leaf cell: $n_{leaf} < n_{crit}=10$, they don't have child cells, and they are the cells where particles live in. And they are the bottom of each branch.\n", 330 | "\n", 331 | "In the next notebook, we will discuss how to make full use of this hierarchical tree structure to read the source information and evaluate the multipoles for different cells." 332 | ] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "metadata": {}, 337 | "source": [ 338 | "##### Reference" 339 | ] 340 | }, 341 | { 342 | "cell_type": "markdown", 343 | "metadata": {}, 344 | "source": [ 345 | "1. R. Yokota, 12 Steps to a Fast Multipole Method on GPUs, Pan-American Advanced Studies Institute, Valparaiso, Chile, 3-14 January, 2011.\n", 346 | "2. Raykar, V. C., \"[A short primer on the fast multipole method: FMM tutorial](http://www.umiacs.umd.edu/labs/cvl/pirl/vikas/publications/FMM_tutorial.pdf),\", University of Maryland, College Park, Apr. 8, 2006." 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": { 353 | "collapsed": false 354 | }, 355 | "outputs": [], 356 | "source": [ 357 | "from IPython.core.display import HTML\n", 358 | "def css_styling():\n", 359 | " styles = open('./style/fmmstyle.css', 'r').read()\n", 360 | " return HTML(styles)\n", 361 | "css_styling()" 362 | ] 363 | } 364 | ], 365 | "metadata": { 366 | "kernelspec": { 367 | "display_name": "Python 3", 368 | "language": "python", 369 | "name": "python3" 370 | }, 371 | "language_info": { 372 | "codemirror_mode": { 373 | "name": "ipython", 374 | "version": 3 375 | }, 376 | "file_extension": ".py", 377 | "mimetype": "text/x-python", 378 | "name": "python", 379 | "nbconvert_exporter": "python", 380 | "pygments_lexer": "ipython3", 381 | "version": "3.4.3" 382 | } 383 | }, 384 | "nbformat": 4, 385 | "nbformat_minor": 0 386 | } 387 | -------------------------------------------------------------------------------- /test/ellipsoid1000: -------------------------------------------------------------------------------- 1 | 0 0.18005396 0.44053289 0.42094629 0.001 2 | 1 0.5960332 0.21987776 0.48445063 0.001 3 | 2 0.49229594 0.64326396 0.63317109 0.001 4 | 3 0.46375718 0.79421724 0.50647509 0.001 5 | 4 0.55913402 0.42381248 0.52558573 0.001 6 | 5 0.59785058 0.51000377 0.55133227 0.001 7 | 6 0.29955247 0.59524493 0.47896129 0.001 8 | 7 0.71582072 0.37037598 0.53078457 0.001 9 | 8 0.08016052 0.6009498 0.52020167 0.001 10 | 9 0.26075085 0.41497186 0.35407502 0.001 11 | 10 0.3821599 0.7349122 0.50412953 0.001 12 | 11 0.47273596 0.43961828 0.33645946 0.001 13 | 12 0.73246196 0.39838826 0.49200567 0.001 14 | 13 0.81848391 0.32830989 0.4709918 0.001 15 | 14 0.63752073 0.46257204 0.61937108 0.001 16 | 15 0.21719672 0.70904144 0.41841478 0.001 17 | 16 0.95363295 0.46745458 0.43102153 0.001 18 | 17 0.76830516 0.51324274 0.57218278 0.001 19 | 18 0.16839553 0.32642405 0.52793481 0.001 20 | 19 0.51412265 0.57495718 0.47682782 0.001 21 | 20 0.83059433 0.4086766 0.58396784 0.001 22 | 21 0.70211078 0.74250844 0.56858339 0.001 23 | 22 0.40329056 0.57806241 0.51030803 0.001 24 | 23 0.89374401 0.53276213 0.47671697 0.001 25 | 24 0.32276626 0.33077768 0.4855461 0.001 26 | 25 0.58588025 0.42930199 0.55110374 0.001 27 | 26 0.62794263 0.53123335 0.33969191 0.001 28 | 27 0.28399205 0.6629498 0.39650285 0.001 29 | 28 0.25262974 0.47825801 0.48661644 0.001 30 | 29 0.61375589 0.51455592 0.38200898 0.001 31 | 30 0.47201878 0.29331227 0.56441264 0.001 32 | 31 0.46523171 0.67246482 0.48444896 0.001 33 | 32 0.61117703 0.66817389 0.57728423 0.001 34 | 33 0.40280954 0.40231565 0.36996299 0.001 35 | 34 0.36219193 0.6386894 0.64047014 0.001 36 | 35 0.48761517 0.33501698 0.49730677 0.001 37 | 36 0.4928919 0.54820491 0.57780677 0.001 38 | 37 0.0312969 0.50142854 0.48164449 0.001 39 | 38 0.80018765 0.71764455 0.51868514 0.001 40 | 39 0.52787294 0.28754308 0.56590209 0.001 41 | 40 0.63330369 0.53698837 0.51497004 0.001 42 | 41 0.40273136 0.70332661 0.52971964 0.001 43 | 42 0.41673695 0.26931417 0.51799883 0.001 44 | 43 0.72264438 0.74592474 0.43999566 0.001 45 | 44 0.67774425 0.6947134 0.59684362 0.001 46 | 45 0.36632904 0.29922379 0.51793306 0.001 47 | 46 0.24126176 0.56976063 0.56798235 0.001 48 | 47 0.43531929 0.38649426 0.55096259 0.001 49 | 48 0.78840821 0.29691844 0.51179307 0.001 50 | 49 0.48445054 0.36686747 0.48953107 0.001 51 | 50 0.71428631 0.3431166 0.51925664 0.001 52 | 51 0.86995425 0.36951375 0.56938011 0.001 53 | 52 0.33910187 0.33998219 0.5489647 0.001 54 | 53 0.0699384 0.47921847 0.49716383 0.001 55 | 54 0.55477341 0.45012399 0.33696646 0.001 56 | 55 0.64982443 0.51918996 0.64622925 0.001 57 | 56 0.12261393 0.66028057 0.51993974 0.001 58 | 57 0.33492047 0.55966667 0.35898796 0.001 59 | 58 0.43573402 0.35482502 0.47997129 0.001 60 | 59 0.38877831 0.57220584 0.58721628 0.001 61 | 60 0.8440158 0.35619005 0.49669403 0.001 62 | 61 0.1772001 0.5370679 0.64228203 0.001 63 | 62 0.62070927 0.60281942 0.35488307 0.001 64 | 63 0.65978557 0.47192912 0.5162981 0.001 65 | 64 0.37069952 0.37391138 0.55458335 0.001 66 | 65 0.54126404 0.44053977 0.40048732 0.001 67 | 66 0.97100369 0.54492647 0.49635876 0.001 68 | 67 0.66548594 0.58714764 0.46420176 0.001 69 | 68 0.34852188 0.29431856 0.55374364 0.001 70 | 69 0.37153795 0.22398237 0.50590357 0.001 71 | 70 0.29633873 0.23301218 0.4934924 0.001 72 | 71 0.62397773 0.54716802 0.38466841 0.001 73 | 72 0.64267851 0.442564 0.39348357 0.001 74 | 73 0.43849299 0.36234677 0.54486113 0.001 75 | 74 0.90931709 0.47941066 0.60676809 0.001 76 | 75 0.86656375 0.55007531 0.52423597 0.001 77 | 76 0.36709816 0.53126465 0.38391888 0.001 78 | 77 0.51362595 0.61459073 0.36920111 0.001 79 | 78 0.5035262 0.4598323 0.61907931 0.001 80 | 79 0.10019825 0.47191076 0.54514336 0.001 81 | 80 0.28730345 0.40592906 0.37376814 0.001 82 | 81 0.51267984 0.30690829 0.6379963 0.001 83 | 82 0.49818316 0.52797258 0.59775991 0.001 84 | 83 0.79975488 0.7279122 0.46999435 0.001 85 | 84 0.45371359 0.58695691 0.58476764 0.001 86 | 85 0.72177623 0.72739878 0.487237 0.001 87 | 86 0.07296331 0.35617258 0.49265228 0.001 88 | 87 0.6443639 0.52210094 0.43674589 0.001 89 | 88 0.39905427 0.40129424 0.3338425 0.001 90 | 89 0.60926971 0.28743188 0.61816352 0.001 91 | 90 0.61433427 0.21762783 0.53088361 0.001 92 | 91 0.29311083 0.62360876 0.54604966 0.001 93 | 92 0.75541263 0.36046912 0.54670392 0.001 94 | 93 0.50884851 0.23365856 0.41896745 0.001 95 | 94 0.80032125 0.61864693 0.52122098 0.001 96 | 95 0.74889087 0.60964368 0.53629167 0.001 97 | 96 0.66582107 0.47278731 0.31750883 0.001 98 | 97 0.70289889 0.33154462 0.61811802 0.001 99 | 98 0.69451651 0.32662755 0.61277894 0.001 100 | 99 0.1947716 0.27792975 0.55302959 0.001 101 | 100 0.2673799 0.46980793 0.41291498 0.001 102 | 101 0.22471819 0.51026885 0.48633949 0.001 103 | 102 0.72041732 0.39129444 0.57122306 0.001 104 | 103 0.45343715 0.69274403 0.48266612 0.001 105 | 104 0.72422552 0.41009244 0.54279119 0.001 106 | 105 0.43492578 0.37911507 0.37351961 0.001 107 | 106 0.81298068 0.41159573 0.35882461 0.001 108 | 107 0.43060574 0.42235285 0.46533158 0.001 109 | 108 0.42071095 0.63295064 0.5970298 0.001 110 | 109 0.84895525 0.59842145 0.57315527 0.001 111 | 110 0.30297865 0.47307779 0.4331598 0.001 112 | 111 0.91101736 0.52698769 0.39489105 0.001 113 | 112 0.48337722 0.39879335 0.64515561 0.001 114 | 113 0.2603293 0.31997796 0.46076138 0.001 115 | 114 0.14336264 0.6024282 0.49581399 0.001 116 | 115 0.41709827 0.38365489 0.43227256 0.001 117 | 116 0.6295305 0.22765529 0.49186422 0.001 118 | 117 0.13206926 0.65117377 0.45042124 0.001 119 | 118 0.57834858 0.56689498 0.40402321 0.001 120 | 119 0.52992889 0.62362758 0.6384317 0.001 121 | 120 0.28989706 0.49544739 0.61415436 0.001 122 | 121 0.38562969 0.39775094 0.60584741 0.001 123 | 122 0.14487699 0.4826773 0.56763726 0.001 124 | 123 0.25138729 0.733819 0.45516882 0.001 125 | 124 0.64407231 0.48724335 0.37565021 0.001 126 | 125 0.77481739 0.25811387 0.54110066 0.001 127 | 126 0.98379828 0.50495887 0.53586344 0.001 128 | 127 0.31420103 0.57798738 0.61598657 0.001 129 | 128 0.52713667 0.53716045 0.60932116 0.001 130 | 129 0.25249519 0.49261088 0.41508099 0.001 131 | 130 0.66738897 0.38436292 0.57645215 0.001 132 | 131 0.39952658 0.38284593 0.65962567 0.001 133 | 132 0.83829067 0.29621916 0.51761639 0.001 134 | 133 0.46434089 0.5726818 0.56265099 0.001 135 | 134 0.23518854 0.62155794 0.45248324 0.001 136 | 135 0.57615293 0.30918996 0.37369766 0.001 137 | 136 0.21758663 0.39421836 0.39584374 0.001 138 | 137 0.66850797 0.70934085 0.38136304 0.001 139 | 138 0.75792667 0.39501134 0.35070996 0.001 140 | 139 0.71930565 0.49019495 0.52263675 0.001 141 | 140 0.80130904 0.45275456 0.61862273 0.001 142 | 141 0.79594141 0.46884325 0.45300452 0.001 143 | 142 0.52872919 0.62961111 0.48281109 0.001 144 | 143 0.55594691 0.51508859 0.52086832 0.001 145 | 144 0.94666101 0.40447754 0.44659998 0.001 146 | 145 0.60485203 0.5386049 0.57227099 0.001 147 | 146 0.96755547 0.41384654 0.53128605 0.001 148 | 147 0.54617487 0.7181138 0.58028621 0.001 149 | 148 0.3824727 0.33393678 0.37450555 0.001 150 | 149 0.28328467 0.41221443 0.5934274 0.001 151 | 150 0.81526062 0.42579965 0.38171782 0.001 152 | 151 0.1310603 0.34635278 0.53885067 0.001 153 | 152 0.36396532 0.34001037 0.54898061 0.001 154 | 153 0.4162106 0.58549123 0.33565782 0.001 155 | 154 0.08793293 0.42522894 0.56202157 0.001 156 | 155 0.53386564 0.4578877 0.42195846 0.001 157 | 156 0.50118369 0.3747717 0.38548712 0.001 158 | 157 0.27850926 0.46617116 0.3870663 0.001 159 | 158 0.25638375 0.35053703 0.56756457 0.001 160 | 159 0.57777037 0.53470919 0.53308596 0.001 161 | 160 0.88394357 0.54221587 0.48166648 0.001 162 | 161 0.39117749 0.34290699 0.51608178 0.001 163 | 162 0.3352534 0.54182508 0.62159714 0.001 164 | 163 0.67687023 0.62877062 0.62964652 0.001 165 | 164 0.84901122 0.55962762 0.43439319 0.001 166 | 165 0.7492027 0.58334915 0.48627073 0.001 167 | 166 0.23604628 0.39963807 0.41241101 0.001 168 | 167 0.6265653 0.23093417 0.54757491 0.001 169 | 168 0.29903968 0.49595205 0.50510747 0.001 170 | 169 0.62166774 0.44227411 0.43628155 0.001 171 | 170 0.111991 0.5106145 0.44299585 0.001 172 | 171 0.44904318 0.66463508 0.40737562 0.001 173 | 172 0.59542558 0.23012773 0.42979074 0.001 174 | 173 0.2630127 0.34381336 0.62680982 0.001 175 | 174 0.64827435 0.30455693 0.38955374 0.001 176 | 175 0.89171583 0.47589834 0.42428757 0.001 177 | 176 0.31908809 0.52923913 0.64970602 0.001 178 | 177 0.16881759 0.34697097 0.46401559 0.001 179 | 178 0.48930263 0.60307778 0.62190394 0.001 180 | 179 0.62094251 0.53703843 0.32488644 0.001 181 | 180 0.49712222 0.70289997 0.36554815 0.001 182 | 181 0.05502706 0.55602042 0.44792223 0.001 183 | 182 0.72348413 0.3903925 0.42547768 0.001 184 | 183 0.68688841 0.53789549 0.60509376 0.001 185 | 184 0.243527 0.47035718 0.33556634 0.001 186 | 185 0.82036722 0.50962276 0.44489751 0.001 187 | 186 0.13700707 0.54311428 0.59983035 0.001 188 | 187 0.37960883 0.37368131 0.45232832 0.001 189 | 188 0.68289098 0.56770863 0.46756378 0.001 190 | 189 0.73367398 0.36520887 0.50693108 0.001 191 | 190 0.50609775 0.73363838 0.51205303 0.001 192 | 191 0.14406667 0.48375263 0.52843914 0.001 193 | 192 0.66180556 0.49447634 0.67995218 0.001 194 | 193 0.72983437 0.6649226 0.49495357 0.001 195 | 194 0.01928766 0.54520076 0.50519927 0.001 196 | 195 0.52967913 0.44776193 0.49066859 0.001 197 | 196 0.49205187 0.70682616 0.54552747 0.001 198 | 197 0.29806195 0.39077331 0.3439984 0.001 199 | 198 0.59327316 0.66836913 0.61835665 0.001 200 | 199 0.1761115 0.38286189 0.47437895 0.001 201 | 200 0.36097644 0.51695606 0.48643835 0.001 202 | 201 0.30986894 0.69278555 0.56902687 0.001 203 | 202 0.00974484 0.44309926 0.49105134 0.001 204 | 203 0.46053285 0.42482104 0.48855407 0.001 205 | 204 0.48889228 0.55699146 0.52247168 0.001 206 | 205 0.53000897 0.2666086 0.42233091 0.001 207 | 206 0.85840226 0.67223945 0.56587444 0.001 208 | 207 0.53359735 0.38120124 0.45196246 0.001 209 | 208 0.22288783 0.61748359 0.3601163 0.001 210 | 209 0.29844069 0.49839377 0.61090044 0.001 211 | 210 0.21673947 0.67277614 0.41165742 0.001 212 | 211 0.70644511 0.34333862 0.38969634 0.001 213 | 212 0.25839349 0.42852841 0.5091148 0.001 214 | 213 0.81746343 0.63725102 0.52791332 0.001 215 | 214 0.249485 0.41722087 0.50923755 0.001 216 | 215 0.16924822 0.43094367 0.36667522 0.001 217 | 216 0.65889763 0.3230465 0.49655407 0.001 218 | 217 0.48109425 0.5306696 0.39552005 0.001 219 | 218 0.81107735 0.46562319 0.58983305 0.001 220 | 219 0.53652249 0.51362794 0.6509035 0.001 221 | 220 0.67476305 0.70864127 0.5684292 0.001 222 | 221 0.61341177 0.21365277 0.53139376 0.001 223 | 222 0.22487767 0.70044248 0.59005404 0.001 224 | 223 0.67424977 0.64972598 0.41263328 0.001 225 | 224 0.29738498 0.51795403 0.5730648 0.001 226 | 225 0.77355259 0.35149475 0.39626178 0.001 227 | 226 0.25305892 0.51170835 0.48495937 0.001 228 | 227 0.58789978 0.28404421 0.52595055 0.001 229 | 228 0.04887494 0.45803959 0.49465849 0.001 230 | 229 0.54333478 0.31406102 0.58766198 0.001 231 | 230 0.56805678 0.71209468 0.62018514 0.001 232 | 231 0.39445656 0.48315134 0.33455258 0.001 233 | 232 0.71516412 0.45649864 0.62073509 0.001 234 | 233 0.60870738 0.5797049 0.40961612 0.001 235 | 234 0.26859915 0.71308385 0.41288583 0.001 236 | 235 0.29488304 0.53389885 0.65882824 0.001 237 | 236 0.75234303 0.43273217 0.52584114 0.001 238 | 237 0.34786566 0.69587685 0.40334595 0.001 239 | 238 0.47526391 0.46073939 0.5539665 0.001 240 | 239 0.34982817 0.57341414 0.50569667 0.001 241 | 240 0.76186633 0.57664409 0.48012054 0.001 242 | 241 0.67461568 0.57201952 0.53123392 0.001 243 | 242 0.73701607 0.6609239 0.52512086 0.001 244 | 243 0.38595253 0.56430964 0.32855786 0.001 245 | 244 0.57178024 0.72342535 0.37477187 0.001 246 | 245 0.46283194 0.2278813 0.53092027 0.001 247 | 246 0.43195304 0.66368925 0.58417552 0.001 248 | 247 0.52594363 0.74851013 0.60261197 0.001 249 | 248 0.18532633 0.28529843 0.51197251 0.001 250 | 249 0.54446455 0.44807135 0.35475249 0.001 251 | 250 0.4945455 0.69344504 0.45918097 0.001 252 | 251 0.40086179 0.52593186 0.53647397 0.001 253 | 252 0.22263399 0.69448992 0.52793478 0.001 254 | 253 0.08377744 0.45053931 0.46331078 0.001 255 | 254 0.24162172 0.61784502 0.58405306 0.001 256 | 255 0.30042102 0.30071826 0.44991078 0.001 257 | 256 0.27597645 0.38239963 0.61549708 0.001 258 | 257 0.26713119 0.30842476 0.48180111 0.001 259 | 258 0.63537724 0.41925881 0.4995334 0.001 260 | 259 0.71978418 0.57567966 0.40416794 0.001 261 | 260 0.60200532 0.64414694 0.6686982 0.001 262 | 261 0.21800597 0.41855911 0.57283592 0.001 263 | 262 0.35299552 0.56447386 0.50232361 0.001 264 | 263 0.14565766 0.48079143 0.58310159 0.001 265 | 264 0.42134269 0.72076063 0.43510332 0.001 266 | 265 0.63396586 0.63673684 0.58529112 0.001 267 | 266 0.30749879 0.34914125 0.4549413 0.001 268 | 267 0.25236437 0.43025296 0.41645191 0.001 269 | 268 0.2266038 0.29400229 0.56535861 0.001 270 | 269 0.57342675 0.6732635 0.61054918 0.001 271 | 270 0.73903798 0.36555582 0.61785555 0.001 272 | 271 0.20990727 0.57329938 0.45185661 0.001 273 | 272 0.48565608 0.49125434 0.68139758 0.001 274 | 273 0.26422042 0.60068738 0.5817921 0.001 275 | 274 0.88442195 0.67404779 0.5175611 0.001 276 | 275 0.64939811 0.54418649 0.60250332 0.001 277 | 276 0.15524767 0.5333584 0.59647259 0.001 278 | 277 0.65795861 0.3407801 0.42957455 0.001 279 | 278 0.49864967 0.67786564 0.41580594 0.001 280 | 279 0.78614359 0.58944457 0.59827589 0.001 281 | 280 0.51726866 0.27797199 0.59818132 0.001 282 | 281 0.58856861 0.52301957 0.58809021 0.001 283 | 282 0.32733076 0.7429316 0.48120056 0.001 284 | 283 0.55629726 0.2741901 0.60464738 0.001 285 | 284 0.51954563 0.52718427 0.49556124 0.001 286 | 285 0.73517707 0.64588273 0.61039612 0.001 287 | 286 0.40626316 0.40755623 0.55896639 0.001 288 | 287 0.46041606 0.42409361 0.3431492 0.001 289 | 288 0.33597106 0.61519178 0.41551981 0.001 290 | 289 0.05561198 0.5013401 0.48189418 0.001 291 | 290 0.21234837 0.61223303 0.62132258 0.001 292 | 291 0.19252813 0.45818448 0.37106656 0.001 293 | 292 0.29154587 0.60306225 0.58999536 0.001 294 | 293 0.65673255 0.26356846 0.42370141 0.001 295 | 294 0.41949538 0.70682989 0.36835996 0.001 296 | 295 0.44917356 0.60899418 0.36964859 0.001 297 | 296 0.10298236 0.5523365 0.46303464 0.001 298 | 297 0.68114483 0.43474341 0.56384446 0.001 299 | 298 0.68102328 0.26917445 0.53118565 0.001 300 | 299 0.89499076 0.60374699 0.52441617 0.001 301 | 300 0.48290173 0.40726157 0.61845193 0.001 302 | 301 0.38944736 0.57805905 0.51755226 0.001 303 | 302 0.58054131 0.65329195 0.58389842 0.001 304 | 303 0.48445102 0.52081157 0.41935721 0.001 305 | 304 0.33642547 0.32616426 0.43933171 0.001 306 | 305 0.43176069 0.4501023 0.62158686 0.001 307 | 306 0.85794483 0.47259597 0.63572231 0.001 308 | 307 0.24443294 0.43313928 0.58637892 0.001 309 | 308 0.32406589 0.49030024 0.45524891 0.001 310 | 309 0.66064683 0.59943134 0.55777737 0.001 311 | 310 0.25020975 0.60487984 0.36496516 0.001 312 | 311 0.8027321 0.44881777 0.50844347 0.001 313 | 312 0.75723721 0.2851434 0.50232634 0.001 314 | 313 0.18932907 0.46568321 0.58492782 0.001 315 | 314 0.19761151 0.60055651 0.58235785 0.001 316 | 315 0.69330562 0.44621605 0.65364364 0.001 317 | 316 0.76622672 0.38992448 0.45335258 0.001 318 | 317 0.05645784 0.58347361 0.56661572 0.001 319 | 318 0.3252655 0.59630561 0.45245245 0.001 320 | 319 0.848341 0.64493949 0.45499958 0.001 321 | 320 0.41126103 0.52907965 0.47118492 0.001 322 | 321 0.54870555 0.52832651 0.35321227 0.001 323 | 322 0.8528712 0.44800819 0.54406424 0.001 324 | 323 0.62778441 0.77257089 0.43989923 0.001 325 | 324 0.37553539 0.43779432 0.45430076 0.001 326 | 325 0.56844995 0.69087905 0.53637672 0.001 327 | 326 0.58046355 0.363129 0.35273159 0.001 328 | 327 0.15453812 0.39588688 0.5524061 0.001 329 | 328 0.76439442 0.57852796 0.37899634 0.001 330 | 329 0.39597516 0.58880317 0.57217468 0.001 331 | 330 0.43847168 0.29061703 0.43936976 0.001 332 | 331 0.58135038 0.52233298 0.42314415 0.001 333 | 332 0.48930137 0.67921201 0.41421917 0.001 334 | 333 0.61717146 0.51306672 0.67313842 0.001 335 | 334 0.58684782 0.32796678 0.40775515 0.001 336 | 335 0.24911173 0.65668218 0.36899204 0.001 337 | 336 0.4354023 0.62599664 0.37847892 0.001 338 | 337 0.29424874 0.40410678 0.6320454 0.001 339 | 338 0.48239094 0.69208891 0.61894608 0.001 340 | 339 0.47889849 0.43958837 0.57195129 0.001 341 | 340 0.60036855 0.70671697 0.36310608 0.001 342 | 341 0.20470311 0.59659801 0.47077179 0.001 343 | 342 0.35807857 0.69668047 0.49680408 0.001 344 | 343 0.30163034 0.43769354 0.65549508 0.001 345 | 344 0.69987125 0.31635873 0.60834847 0.001 346 | 345 0.57172692 0.68957951 0.54988597 0.001 347 | 346 0.60042325 0.44105953 0.44626619 0.001 348 | 347 0.19479465 0.30879665 0.45830968 0.001 349 | 348 0.76754101 0.48591615 0.48920467 0.001 350 | 349 0.71651207 0.54969741 0.33815713 0.001 351 | 350 0.48275789 0.65538986 0.56350465 0.001 352 | 351 0.77237887 0.33272566 0.43982742 0.001 353 | 352 0.71197983 0.42372409 0.36493303 0.001 354 | 353 0.3189745 0.37121636 0.49850124 0.001 355 | 354 0.18545611 0.50866661 0.38527008 0.001 356 | 355 0.52338949 0.6171392 0.53931387 0.001 357 | 356 0.70604408 0.48394161 0.38474127 0.001 358 | 357 0.94803942 0.45766848 0.5496975 0.001 359 | 358 0.30072571 0.27998028 0.52960267 0.001 360 | 359 0.85577795 0.38835887 0.49986094 0.001 361 | 360 0.12513061 0.56332027 0.5785178 0.001 362 | 361 0.41399369 0.35138349 0.6314848 0.001 363 | 362 0.77022845 0.44005697 0.50105557 0.001 364 | 363 0.70062802 0.51941012 0.32502741 0.001 365 | 364 0.09914527 0.56279069 0.41930668 0.001 366 | 365 0.53933144 0.31568645 0.37794195 0.001 367 | 366 0.62869048 0.66422894 0.52588343 0.001 368 | 367 0.81269583 0.37141642 0.4310398 0.001 369 | 368 0.74483546 0.39176577 0.56396297 0.001 370 | 369 0.37702562 0.44501747 0.49768443 0.001 371 | 370 0.45709416 0.48139088 0.6426083 0.001 372 | 371 0.72555426 0.41315569 0.51010463 0.001 373 | 372 0.11444911 0.35611943 0.54570615 0.001 374 | 373 0.09766147 0.51306207 0.42000301 0.001 375 | 374 0.32063452 0.32061092 0.39936917 0.001 376 | 375 0.67527149 0.59015547 0.6074806 0.001 377 | 376 0.49436148 0.45097052 0.41722388 0.001 378 | 377 0.38913476 0.49511331 0.31922299 0.001 379 | 378 0.31405917 0.73907793 0.58611532 0.001 380 | 379 0.62075905 0.41196352 0.4251311 0.001 381 | 380 0.88077769 0.44869615 0.52984976 0.001 382 | 381 0.64734072 0.30908443 0.56146029 0.001 383 | 382 0.74623003 0.3140225 0.44147094 0.001 384 | 383 0.67165002 0.61299404 0.41876995 0.001 385 | 384 0.76322712 0.32310413 0.52108696 0.001 386 | 385 0.55773704 0.3812907 0.53857767 0.001 387 | 386 0.27844372 0.3746772 0.40356082 0.001 388 | 387 0.12568503 0.3808407 0.41532793 0.001 389 | 388 0.90072655 0.50679139 0.39244247 0.001 390 | 389 0.25692292 0.44970569 0.57154194 0.001 391 | 390 0.7899496 0.51644978 0.51635264 0.001 392 | 391 0.76252518 0.73302561 0.52839876 0.001 393 | 392 0.84024328 0.55577871 0.45567778 0.001 394 | 393 0.41447276 0.70733548 0.5894174 0.001 395 | 394 0.97503362 0.52430669 0.54113808 0.001 396 | 395 0.33347067 0.36249739 0.46043276 0.001 397 | 396 0.37974774 0.48935644 0.69074008 0.001 398 | 397 0.7475397 0.5187377 0.64555887 0.001 399 | 398 0.41773382 0.55200942 0.47104244 0.001 400 | 399 0.89716497 0.40529943 0.52791696 0.001 401 | 400 0.29973019 0.62789293 0.50455969 0.001 402 | 401 0.50311219 0.51859947 0.56507266 0.001 403 | 402 0.25009507 0.53012949 0.33451224 0.001 404 | 403 0.19550033 0.49192349 0.61631962 0.001 405 | 404 0.85482427 0.45836811 0.44150843 0.001 406 | 405 0.83184852 0.6525999 0.51479677 0.001 407 | 406 0.77270563 0.60000721 0.42122993 0.001 408 | 407 0.4852142 0.37564403 0.67648769 0.001 409 | 408 0.30431716 0.38828265 0.34983149 0.001 410 | 409 0.55521347 0.35141424 0.36180627 0.001 411 | 410 0.4393798 0.63609072 0.55249328 0.001 412 | 411 0.19067586 0.28589007 0.45884982 0.001 413 | 412 0.42699639 0.44628219 0.50570291 0.001 414 | 413 0.65788426 0.29549722 0.42692188 0.001 415 | 414 0.42395919 0.49910782 0.64123865 0.001 416 | 415 0.56021087 0.50226542 0.30647962 0.001 417 | 416 0.53801933 0.50560441 0.53611068 0.001 418 | 417 0.40473522 0.28555881 0.52403691 0.001 419 | 418 0.37833513 0.71228102 0.5454224 0.001 420 | 419 0.64381162 0.44207954 0.32838015 0.001 421 | 420 0.13148928 0.52534416 0.50253362 0.001 422 | 421 0.75144034 0.36161074 0.42461697 0.001 423 | 422 0.76631727 0.56694549 0.45454345 0.001 424 | 423 0.08563084 0.53727181 0.48247592 0.001 425 | 424 0.50639519 0.76335539 0.51574438 0.001 426 | 425 0.17230313 0.54194534 0.52733792 0.001 427 | 426 0.52183525 0.69367073 0.46828938 0.001 428 | 427 0.79754696 0.4100215 0.63844656 0.001 429 | 428 0.59759071 0.27102626 0.57675603 0.001 430 | 429 0.23032484 0.35559799 0.52973178 0.001 431 | 430 0.47183575 0.25330125 0.49972695 0.001 432 | 431 0.42698346 0.40450151 0.6539057 0.001 433 | 432 0.77313305 0.46140317 0.65237378 0.001 434 | 433 0.40589102 0.48310232 0.31664593 0.001 435 | 434 0.36359288 0.69207688 0.42285009 0.001 436 | 435 0.7202196 0.49519207 0.41654237 0.001 437 | 436 0.46602725 0.32863937 0.60281409 0.001 438 | 437 0.44449767 0.48327273 0.49068486 0.001 439 | 438 0.40183992 0.23593867 0.56020753 0.001 440 | 439 0.65471813 0.2779494 0.43498656 0.001 441 | 440 0.92375225 0.55783541 0.48740081 0.001 442 | 441 0.50197458 0.51205609 0.32412888 0.001 443 | 442 0.4470904 0.4366602 0.6462882 0.001 444 | 443 0.29110066 0.76968083 0.49116184 0.001 445 | 444 0.3564478 0.58489644 0.32484223 0.001 446 | 445 0.39284486 0.70110837 0.63376046 0.001 447 | 446 0.63727829 0.3235304 0.36731246 0.001 448 | 447 0.20915159 0.47700159 0.63280888 0.001 449 | 448 0.60348913 0.70943782 0.40093799 0.001 450 | 449 0.15960466 0.31001035 0.46807571 0.001 451 | 450 0.70580012 0.63046279 0.38461592 0.001 452 | 451 0.81411069 0.36305448 0.37839372 0.001 453 | 452 0.46952387 0.48520641 0.68194917 0.001 454 | 453 0.76213311 0.37561909 0.59521372 0.001 455 | 454 0.10413794 0.55650722 0.47178589 0.001 456 | 455 0.36376532 0.29730912 0.56968225 0.001 457 | 456 0.55766019 0.47301752 0.42628023 0.001 458 | 457 0.32659502 0.53691851 0.67088327 0.001 459 | 458 0.13716306 0.60297474 0.54726191 0.001 460 | 459 0.57079432 0.42185327 0.65290726 0.001 461 | 460 0.71318595 0.32431528 0.3941128 0.001 462 | 461 0.80260602 0.36334152 0.47186519 0.001 463 | 462 0.64609717 0.2806593 0.49358472 0.001 464 | 463 0.49551448 0.46937623 0.31952804 0.001 465 | 464 0.20334541 0.59351949 0.50670927 0.001 466 | 465 0.28555276 0.47379651 0.47788104 0.001 467 | 466 0.46233523 0.47267354 0.68167788 0.001 468 | 467 0.78056617 0.47038332 0.41931636 0.001 469 | 468 0.65561959 0.59763463 0.61471015 0.001 470 | 469 0.81391258 0.58652614 0.49928002 0.001 471 | 470 0.7618074 0.54588202 0.60501558 0.001 472 | 471 0.52374672 0.69588548 0.62746707 0.001 473 | 472 0.65713691 0.32282949 0.45230691 0.001 474 | 473 0.50104426 0.44807554 0.45496006 0.001 475 | 474 0.56547254 0.38090604 0.4566452 0.001 476 | 475 0.29255197 0.71324104 0.48714128 0.001 477 | 476 0.38225351 0.63069089 0.62361343 0.001 478 | 477 0.30049167 0.5428315 0.63024783 0.001 479 | 478 0.50263676 0.21859682 0.49524912 0.001 480 | 479 0.59015288 0.64596482 0.52193431 0.001 481 | 480 0.56278212 0.53175464 0.37352581 0.001 482 | 481 0.73362492 0.33566726 0.5973881 0.001 483 | 482 0.13677014 0.53008235 0.43837452 0.001 484 | 483 0.27727593 0.52735713 0.3488041 0.001 485 | 484 0.79654348 0.32615147 0.55696777 0.001 486 | 485 0.78717347 0.69741752 0.47914456 0.001 487 | 486 0.52423395 0.32913438 0.61402172 0.001 488 | 487 0.8426986 0.64560958 0.60366081 0.001 489 | 488 0.4906528 0.47198684 0.424614 0.001 490 | 489 0.86146954 0.39841596 0.5512842 0.001 491 | 490 0.61605285 0.34221045 0.53913853 0.001 492 | 491 0.49580692 0.41670208 0.65976329 0.001 493 | 492 0.63033713 0.58012835 0.61209483 0.001 494 | 493 0.60618849 0.40851939 0.36384804 0.001 495 | 494 0.35031235 0.6497838 0.54710326 0.001 496 | 495 0.31908065 0.44253164 0.61051113 0.001 497 | 496 0.75340991 0.38958624 0.52732492 0.001 498 | 497 0.6741245 0.76116291 0.47842672 0.001 499 | 498 0.20529598 0.34309692 0.48277657 0.001 500 | 499 0.14813243 0.42315931 0.54786486 0.001 501 | 500 0.75046089 0.70917059 0.52858299 0.001 502 | 501 0.53090411 0.4867639 0.5748007 0.001 503 | 502 0.46705298 0.45506871 0.66239875 0.001 504 | 503 0.69768719 0.33116565 0.40713514 0.001 505 | 504 0.54424961 0.22924734 0.52398852 0.001 506 | 505 0.32651859 0.5890565 0.56534962 0.001 507 | 506 0.52729393 0.53103374 0.33469194 0.001 508 | 507 0.41059504 0.50958869 0.55264484 0.001 509 | 508 0.76171947 0.34217658 0.58462746 0.001 510 | 509 0.92860333 0.3786446 0.43818342 0.001 511 | 510 0.54960441 0.32930526 0.4786246 0.001 512 | 511 0.67401146 0.65828262 0.37288995 0.001 513 | 512 0.58144794 0.62935371 0.64486483 0.001 514 | 513 0.66818824 0.55304151 0.4847613 0.001 515 | 514 0.24418777 0.30313975 0.47328515 0.001 516 | 515 0.86288547 0.39926845 0.56077998 0.001 517 | 516 0.37573729 0.31544926 0.6112309 0.001 518 | 517 0.57049026 0.48681642 0.34529013 0.001 519 | 518 0.43583781 0.2982739 0.54743278 0.001 520 | 519 0.51307937 0.21176838 0.4889078 0.001 521 | 520 0.75226643 0.59039655 0.57466794 0.001 522 | 521 0.76778516 0.41612515 0.42072609 0.001 523 | 522 0.56012214 0.47529781 0.45724204 0.001 524 | 523 0.06406896 0.47573958 0.4592335 0.001 525 | 524 0.86803128 0.34331065 0.52902326 0.001 526 | 525 0.28780796 0.55595646 0.51934248 0.001 527 | 526 0.28302478 0.42884931 0.35113836 0.001 528 | 527 0.78406973 0.65200445 0.47296988 0.001 529 | 528 0.71678329 0.35383163 0.39795304 0.001 530 | 529 0.63259866 0.51942383 0.55277254 0.001 531 | 530 0.68802986 0.47179459 0.62107428 0.001 532 | 531 0.48728851 0.63099028 0.60296394 0.001 533 | 532 0.43003201 0.28430097 0.60092304 0.001 534 | 533 0.36356775 0.67871191 0.55436403 0.001 535 | 534 0.42545116 0.57821553 0.44739366 0.001 536 | 535 0.56692699 0.36273177 0.37024485 0.001 537 | 536 0.52739073 0.69653323 0.4015834 0.001 538 | 537 0.23138598 0.46994773 0.44019812 0.001 539 | 538 0.1809389 0.3315824 0.58191957 0.001 540 | 539 0.72837235 0.70075846 0.55585824 0.001 541 | 540 0.51360219 0.67167679 0.40325457 0.001 542 | 541 0.78540746 0.44197089 0.62482815 0.001 543 | 542 0.41950671 0.35117246 0.39122103 0.001 544 | 543 0.01171473 0.46730484 0.49738381 0.001 545 | 544 0.53750582 0.31682747 0.4740062 0.001 546 | 545 0.1857543 0.33461673 0.50709302 0.001 547 | 546 0.5316416 0.39971588 0.50535459 0.001 548 | 547 0.19866336 0.57474524 0.59296618 0.001 549 | 548 0.92964641 0.49962286 0.48306881 0.001 550 | 549 0.39393264 0.55093417 0.3755086 0.001 551 | 550 0.64755369 0.77631752 0.52682148 0.001 552 | 551 0.48572273 0.30553222 0.39893048 0.001 553 | 552 0.5285959 0.65576166 0.33765738 0.001 554 | 553 0.77550154 0.50340771 0.5519963 0.001 555 | 554 0.92948342 0.51517208 0.6001863 0.001 556 | 555 0.57140381 0.49037921 0.62898157 0.001 557 | 556 0.3313904 0.60470099 0.50992954 0.001 558 | 557 0.27489086 0.5567035 0.51428005 0.001 559 | 558 0.24823568 0.34354402 0.3835076 0.001 560 | 559 0.2038063 0.54228086 0.51905685 0.001 561 | 560 0.87554118 0.40922859 0.46808759 0.001 562 | 561 0.55868017 0.4305324 0.49229604 0.001 563 | 562 0.51642402 0.38743959 0.4273413 0.001 564 | 563 0.74637149 0.37723671 0.50982349 0.001 565 | 564 0.92603968 0.51101619 0.60090829 0.001 566 | 565 0.80960565 0.5279644 0.62379481 0.001 567 | 566 0.38585358 0.38560101 0.67765531 0.001 568 | 567 0.64756187 0.3378972 0.49475137 0.001 569 | 568 0.50694939 0.36630736 0.3934357 0.001 570 | 569 0.20072793 0.69129284 0.53960672 0.001 571 | 570 0.75028718 0.57457404 0.51581272 0.001 572 | 571 0.41138172 0.31459607 0.51911143 0.001 573 | 572 0.37393641 0.47419993 0.46164443 0.001 574 | 573 0.26710082 0.32463092 0.62345289 0.001 575 | 574 0.38230427 0.42050426 0.5162875 0.001 576 | 575 0.72652022 0.51919467 0.45167441 0.001 577 | 576 0.66669295 0.30663138 0.53510748 0.001 578 | 577 0.68077155 0.51553208 0.35509738 0.001 579 | 578 0.60499907 0.64265893 0.45064318 0.001 580 | 579 0.48845612 0.21470895 0.55332542 0.001 581 | 580 0.87300252 0.57649229 0.57467994 0.001 582 | 581 0.14712006 0.32746346 0.48268001 0.001 583 | 582 0.34988662 0.36716796 0.34029433 0.001 584 | 583 0.5305265 0.70150501 0.62402113 0.001 585 | 584 0.75712054 0.61111872 0.47538847 0.001 586 | 585 0.53340117 0.43869674 0.31865098 0.001 587 | 586 0.58596771 0.56239924 0.40805621 0.001 588 | 587 0.15019491 0.4195608 0.61620414 0.001 589 | 588 0.43066198 0.56465933 0.36716513 0.001 590 | 589 0.2014134 0.3195604 0.47383958 0.001 591 | 590 0.85844658 0.53431954 0.48431261 0.001 592 | 591 0.63348616 0.59020193 0.65402953 0.001 593 | 592 0.18971619 0.29511282 0.48101809 0.001 594 | 593 0.52117435 0.39537085 0.4200077 0.001 595 | 594 0.36300687 0.53469448 0.64994616 0.001 596 | 595 0.52449432 0.35079986 0.63977837 0.001 597 | 596 0.30412087 0.3735352 0.6258725 0.001 598 | 597 0.41419606 0.41098734 0.60183542 0.001 599 | 598 0.51254799 0.4509235 0.35253402 0.001 600 | 599 0.26499155 0.35661521 0.39525041 0.001 601 | 600 0.50037459 0.57521979 0.52308893 0.001 602 | 601 0.31300135 0.66337874 0.55967044 0.001 603 | 602 0.45221963 0.70937833 0.51471213 0.001 604 | 603 0.27188719 0.45289468 0.56436558 0.001 605 | 604 0.29706599 0.7129172 0.46659014 0.001 606 | 605 0.66275454 0.52532352 0.53798799 0.001 607 | 606 0.46136512 0.57780703 0.46800474 0.001 608 | 607 0.28705329 0.26564701 0.52829015 0.001 609 | 608 0.40973863 0.56923535 0.43907214 0.001 610 | 609 0.58681721 0.71932823 0.43659384 0.001 611 | 610 0.254342 0.67814224 0.47129927 0.001 612 | 611 0.46980796 0.63975195 0.54882372 0.001 613 | 612 0.74738348 0.34684333 0.56230699 0.001 614 | 613 0.3382223 0.4638913 0.60837189 0.001 615 | 614 0.18957531 0.65868675 0.47858683 0.001 616 | 615 0.63654328 0.72114627 0.42845186 0.001 617 | 616 0.5879041 0.62528044 0.65896363 0.001 618 | 617 0.16037213 0.40110647 0.51242609 0.001 619 | 618 0.52422711 0.76144366 0.49676809 0.001 620 | 619 0.31667024 0.64603033 0.58017923 0.001 621 | 620 0.49667755 0.42721958 0.67545764 0.001 622 | 621 0.80104813 0.43960868 0.46933803 0.001 623 | 622 0.54789227 0.3020713 0.54509811 0.001 624 | 623 0.5823089 0.63140726 0.43484933 0.001 625 | 624 0.46414343 0.28084849 0.48478698 0.001 626 | 625 0.17267755 0.46228561 0.59769258 0.001 627 | 626 0.62833433 0.45727358 0.38196035 0.001 628 | 627 0.32286072 0.44182465 0.59757574 0.001 629 | 628 0.50224493 0.77952566 0.51908333 0.001 630 | 629 0.13501302 0.46886021 0.54146205 0.001 631 | 630 0.36164214 0.77409833 0.48292426 0.001 632 | 631 0.11844538 0.3448584 0.55260626 0.001 633 | 632 0.5082011 0.74362289 0.51668514 0.001 634 | 633 0.45469587 0.63825371 0.36706408 0.001 635 | 634 0.83792153 0.67843884 0.50557324 0.001 636 | 635 0.69573801 0.33064882 0.45613005 0.001 637 | 636 0.25149835 0.48981935 0.34886674 0.001 638 | 637 0.48182024 0.73622927 0.46855206 0.001 639 | 638 0.38128136 0.7557836 0.46229041 0.001 640 | 639 0.71303056 0.45087931 0.40133984 0.001 641 | 640 0.67751297 0.29173453 0.51187466 0.001 642 | 641 0.35811414 0.69976905 0.43106675 0.001 643 | 642 0.36416321 0.74416676 0.45603021 0.001 644 | 643 0.82486893 0.31959476 0.45341527 0.001 645 | 644 0.57485519 0.43998678 0.63717406 0.001 646 | 645 0.60626665 0.31447048 0.4446269 0.001 647 | 646 0.86843788 0.40670834 0.52015677 0.001 648 | 647 0.44822313 0.63170139 0.64130601 0.001 649 | 648 0.87766289 0.59012048 0.42615496 0.001 650 | 649 0.61692766 0.36523388 0.53325047 0.001 651 | 650 0.47043426 0.33125102 0.36301968 0.001 652 | 651 0.39801415 0.51556789 0.4795148 0.001 653 | 652 0.1104856 0.512459 0.52266163 0.001 654 | 653 0.25354094 0.5445483 0.46636134 0.001 655 | 654 0.53843354 0.51584909 0.38549275 0.001 656 | 655 0.92964921 0.43218773 0.53030859 0.001 657 | 656 0.2656782 0.42219984 0.50508766 0.001 658 | 657 0.6551155 0.5998214 0.65001103 0.001 659 | 658 0.44744409 0.76214171 0.46881834 0.001 660 | 659 0.53146996 0.36921475 0.3652698 0.001 661 | 660 0.84918716 0.34195973 0.59594862 0.001 662 | 661 0.49742247 0.52176685 0.42433045 0.001 663 | 662 0.34717225 0.57636833 0.40590847 0.001 664 | 663 0.47471163 0.5538565 0.54442489 0.001 665 | 664 0.76706013 0.3342776 0.48452543 0.001 666 | 665 0.76345675 0.63566218 0.4641527 0.001 667 | 666 0.63595172 0.49954644 0.48143131 0.001 668 | 667 0.2070362 0.36189708 0.54287654 0.001 669 | 668 0.79824543 0.26714762 0.50648544 0.001 670 | 669 0.18921892 0.54436504 0.54894799 0.001 671 | 670 0.72826633 0.61563478 0.46565964 0.001 672 | 671 0.63493318 0.44221027 0.51091513 0.001 673 | 672 0.47134981 0.256282 0.49395052 0.001 674 | 673 0.85767492 0.52453742 0.62162346 0.001 675 | 674 0.87411336 0.54719485 0.52210765 0.001 676 | 675 0.32195537 0.33080363 0.50101498 0.001 677 | 676 0.67896203 0.53552296 0.54649841 0.001 678 | 677 0.58054621 0.39046807 0.36132025 0.001 679 | 678 0.75042518 0.37640249 0.44676617 0.001 680 | 679 0.69278059 0.44044889 0.66474461 0.001 681 | 680 0.85581289 0.35581919 0.52179615 0.001 682 | 681 0.38935926 0.36533855 0.33619851 0.001 683 | 682 0.5738227 0.53478713 0.5975592 0.001 684 | 683 0.4493223 0.50279615 0.32708685 0.001 685 | 684 0.48695536 0.40352045 0.53087057 0.001 686 | 685 0.25397837 0.46598269 0.4382881 0.001 687 | 686 0.39795237 0.57534827 0.58242177 0.001 688 | 687 0.65642979 0.30288054 0.42755933 0.001 689 | 688 0.87503985 0.45089372 0.60532928 0.001 690 | 689 0.79725869 0.52944878 0.54499711 0.001 691 | 690 0.72409219 0.6117603 0.39034106 0.001 692 | 691 0.68562558 0.25918597 0.51546868 0.001 693 | 692 0.37236483 0.51324859 0.65492606 0.001 694 | 693 0.35266023 0.49210958 0.63773129 0.001 695 | 694 0.44591941 0.39587504 0.64297166 0.001 696 | 695 0.57562254 0.54016047 0.57998641 0.001 697 | 696 0.73394936 0.25821041 0.48227874 0.001 698 | 697 0.06951442 0.53012707 0.48889953 0.001 699 | 698 0.58411223 0.55005956 0.68581454 0.001 700 | 699 0.24609149 0.45156518 0.51781772 0.001 701 | 700 0.5835248 0.63645493 0.58923603 0.001 702 | 701 0.75807105 0.55736734 0.39974058 0.001 703 | 702 0.18222122 0.49762353 0.46280263 0.001 704 | 703 0.43040924 0.44088395 0.32148945 0.001 705 | 704 0.77535221 0.44142688 0.35219112 0.001 706 | 705 0.73567891 0.46772009 0.36692915 0.001 707 | 706 0.23671671 0.48604019 0.44525023 0.001 708 | 707 0.30863921 0.43160533 0.67104358 0.001 709 | 708 0.58644116 0.28061454 0.56552608 0.001 710 | 709 0.54786415 0.67851401 0.34293677 0.001 711 | 710 0.65085637 0.63091893 0.45908373 0.001 712 | 711 0.90944482 0.43913372 0.48285974 0.001 713 | 712 0.57631681 0.4174009 0.37670466 0.001 714 | 713 0.41000221 0.47625921 0.36159208 0.001 715 | 714 0.14775082 0.58769543 0.60376625 0.001 716 | 715 0.84411485 0.63281242 0.42796741 0.001 717 | 716 0.64649672 0.54232403 0.41400859 0.001 718 | 717 0.75788817 0.27715333 0.47215636 0.001 719 | 718 0.39042373 0.31729435 0.49477985 0.001 720 | 719 0.58691825 0.41536097 0.50110019 0.001 721 | 720 0.27742062 0.23507611 0.49080364 0.001 722 | 721 0.22559839 0.34343843 0.52872058 0.001 723 | 722 0.44914779 0.40865831 0.32058191 0.001 724 | 723 0.81874162 0.70556069 0.57001174 0.001 725 | 724 0.54186473 0.64169616 0.55488434 0.001 726 | 725 0.35109171 0.59048949 0.44185755 0.001 727 | 726 0.77436326 0.62532 0.46825588 0.001 728 | 727 0.51737632 0.28371996 0.52140709 0.001 729 | 728 0.91255248 0.47060774 0.58608657 0.001 730 | 729 0.71994201 0.58303412 0.49875279 0.001 731 | 730 0.67924193 0.48844422 0.44475648 0.001 732 | 731 0.51191448 0.39441991 0.37608045 0.001 733 | 732 0.58850008 0.41669576 0.51272092 0.001 734 | 733 0.85876262 0.66492665 0.56673313 0.001 735 | 734 0.72687404 0.73717112 0.44095898 0.001 736 | 735 0.45810152 0.25919929 0.54911691 0.001 737 | 736 0.42379595 0.30172829 0.42904884 0.001 738 | 737 0.68435184 0.27401085 0.58655821 0.001 739 | 738 0.12318901 0.55865717 0.56945072 0.001 740 | 739 0.25216447 0.51648224 0.50526884 0.001 741 | 740 0.83981281 0.46814459 0.61121478 0.001 742 | 741 0.73497162 0.48709896 0.66322549 0.001 743 | 742 0.4167 0.37914052 0.55648091 0.001 744 | 743 0.67209176 0.52268582 0.46390218 0.001 745 | 744 0.833409 0.46107246 0.42669772 0.001 746 | 745 0.50236918 0.5824119 0.54050065 0.001 747 | 746 0.54589383 0.601685 0.32255251 0.001 748 | 747 0.38272171 0.43038851 0.42411735 0.001 749 | 748 0.36476415 0.33339897 0.50331369 0.001 750 | 749 0.80552785 0.50114312 0.36543325 0.001 751 | 750 0.46925422 0.36987614 0.65914438 0.001 752 | 751 0.59300061 0.29525683 0.62262666 0.001 753 | 752 0.35374935 0.72135906 0.43332838 0.001 754 | 753 0.47406989 0.52796137 0.32304237 0.001 755 | 754 0.43077853 0.26138992 0.4061585 0.001 756 | 755 0.35049006 0.52750193 0.40609694 0.001 757 | 756 0.55843325 0.29278043 0.40117404 0.001 758 | 757 0.43791947 0.30730692 0.53333787 0.001 759 | 758 0.83208831 0.37123115 0.60879763 0.001 760 | 759 0.47120308 0.66767493 0.62658307 0.001 761 | 760 0.1971748 0.3017112 0.57373494 0.001 762 | 761 0.37960759 0.2577978 0.54957038 0.001 763 | 762 0.43223084 0.36025501 0.59089002 0.001 764 | 763 0.77699257 0.72985234 0.55484131 0.001 765 | 764 0.73500703 0.39063463 0.41475391 0.001 766 | 765 0.69623052 0.54151099 0.64857984 0.001 767 | 766 0.20209168 0.37416077 0.53653071 0.001 768 | 767 0.09167914 0.46109663 0.54163651 0.001 769 | 768 0.17906455 0.49126647 0.38402519 0.001 770 | 769 0.1592359 0.32271697 0.5333401 0.001 771 | 770 0.98781151 0.51134009 0.53077127 0.001 772 | 771 0.66719148 0.44320258 0.59775692 0.001 773 | 772 0.25258303 0.61009301 0.64425077 0.001 774 | 773 0.21520146 0.39725616 0.61123114 0.001 775 | 774 0.70719626 0.66961759 0.42849508 0.001 776 | 775 0.7119457 0.23527425 0.51874217 0.001 777 | 776 0.31064567 0.30717261 0.48224535 0.001 778 | 777 0.64457659 0.37140991 0.4671461 0.001 779 | 778 0.51471096 0.58551252 0.53585501 0.001 780 | 779 0.39560502 0.68388059 0.50358842 0.001 781 | 780 0.60888235 0.39193742 0.52396196 0.001 782 | 781 0.10335832 0.42860239 0.4814225 0.001 783 | 782 0.46549782 0.45135028 0.53528679 0.001 784 | 783 0.93734457 0.63448254 0.48316029 0.001 785 | 784 0.58461549 0.39110719 0.6538488 0.001 786 | 785 0.72020306 0.69057236 0.37555169 0.001 787 | 786 0.65311014 0.22864783 0.53396036 0.001 788 | 787 0.83040437 0.63401561 0.57559015 0.001 789 | 788 0.77845278 0.6252247 0.61418227 0.001 790 | 789 0.74678593 0.53873676 0.66056546 0.001 791 | 790 0.61695743 0.6972255 0.50207532 0.001 792 | 791 0.41953071 0.63879722 0.38317403 0.001 793 | 792 0.29241575 0.3123968 0.48619735 0.001 794 | 793 0.52425362 0.24950563 0.54272036 0.001 795 | 794 0.20945765 0.26237559 0.51311487 0.001 796 | 795 0.13406408 0.4300174 0.6010109 0.001 797 | 796 0.66799011 0.33632617 0.65160333 0.001 798 | 797 0.75694846 0.43629702 0.50017018 0.001 799 | 798 0.47162899 0.31735473 0.64428242 0.001 800 | 799 0.08535671 0.40430665 0.49158227 0.001 801 | 800 0.17722467 0.67807383 0.45421699 0.001 802 | 801 0.2947673 0.33090743 0.38881079 0.001 803 | 802 0.24644003 0.41793955 0.42765539 0.001 804 | 803 0.22018336 0.72733397 0.4825324 0.001 805 | 804 0.67324336 0.4661858 0.49440455 0.001 806 | 805 0.3243043 0.56285336 0.60863567 0.001 807 | 806 0.80588436 0.70399861 0.48003302 0.001 808 | 807 0.61797024 0.58309192 0.33563745 0.001 809 | 808 0.23467548 0.65825344 0.59671397 0.001 810 | 809 0.43675282 0.59535577 0.53051429 0.001 811 | 810 0.45931218 0.38584684 0.64440756 0.001 812 | 811 0.27606612 0.34847516 0.58932979 0.001 813 | 812 0.15033845 0.40666015 0.59370161 0.001 814 | 813 0.43393724 0.23913618 0.42517304 0.001 815 | 814 0.58882218 0.43865935 0.50831237 0.001 816 | 815 0.40701413 0.44274982 0.61704308 0.001 817 | 816 0.53229334 0.7961865 0.47310168 0.001 818 | 817 0.55229031 0.55959398 0.6805413 0.001 819 | 818 0.43499328 0.30399417 0.41219952 0.001 820 | 819 0.5892917 0.46131547 0.38192159 0.001 821 | 820 0.30878663 0.43372217 0.37404219 0.001 822 | 821 0.69929172 0.32814741 0.45502859 0.001 823 | 822 0.66366781 0.21793247 0.49651839 0.001 824 | 823 0.30597793 0.38654655 0.44036654 0.001 825 | 824 0.84036309 0.59564448 0.50894774 0.001 826 | 825 0.91397305 0.53840832 0.57941088 0.001 827 | 826 0.48186807 0.79310729 0.51574002 0.001 828 | 827 0.47706662 0.76419558 0.5899756 0.001 829 | 828 0.159414 0.38515455 0.41667031 0.001 830 | 829 0.64929696 0.54230693 0.5748944 0.001 831 | 830 0.69844511 0.6051395 0.49725802 0.001 832 | 831 0.28339683 0.52106708 0.63989156 0.001 833 | 832 0.30012308 0.57929637 0.4282611 0.001 834 | 833 0.84256016 0.54147967 0.45640244 0.001 835 | 834 0.1612683 0.37024945 0.48034344 0.001 836 | 835 0.13788597 0.39083296 0.44852203 0.001 837 | 836 0.38774671 0.61537649 0.6470107 0.001 838 | 837 0.58054501 0.56955453 0.34110547 0.001 839 | 838 0.45935076 0.25675809 0.53052744 0.001 840 | 839 0.09199023 0.52136682 0.61079284 0.001 841 | 840 0.54734616 0.40551812 0.35020169 0.001 842 | 841 0.69255669 0.47403051 0.41430484 0.001 843 | 842 0.61036005 0.73425873 0.52690654 0.001 844 | 843 0.48124067 0.61517427 0.45779052 0.001 845 | 844 0.53660856 0.71887046 0.44265566 0.001 846 | 845 0.93769465 0.5968085 0.42953357 0.001 847 | 846 0.96175721 0.49726294 0.50362991 0.001 848 | 847 0.83456054 0.30087072 0.5048636 0.001 849 | 848 0.39016688 0.5905405 0.50890706 0.001 850 | 849 0.34942514 0.54992267 0.58291674 0.001 851 | 850 0.3302105 0.52660554 0.56370586 0.001 852 | 851 0.66176547 0.47891661 0.67950716 0.001 853 | 852 0.75484498 0.4702724 0.49510676 0.001 854 | 853 0.55762159 0.45826417 0.62854226 0.001 855 | 854 0.7671839 0.45534688 0.35131432 0.001 856 | 855 0.47119606 0.59679719 0.4742486 0.001 857 | 856 0.31480987 0.45242548 0.63171095 0.001 858 | 857 0.21365262 0.68757922 0.42487621 0.001 859 | 858 0.77027417 0.36981456 0.4013025 0.001 860 | 859 0.083472 0.42544744 0.43081309 0.001 861 | 860 0.65573479 0.60053255 0.36200556 0.001 862 | 861 0.71111531 0.66617206 0.51622677 0.001 863 | 862 0.29985392 0.27287137 0.47712748 0.001 864 | 863 0.04736956 0.60937277 0.46741891 0.001 865 | 864 0.34233142 0.46456788 0.33119051 0.001 866 | 865 0.48968118 0.30386609 0.36039721 0.001 867 | 866 0.50473585 0.45519496 0.5552045 0.001 868 | 867 0.87325958 0.32286682 0.53091437 0.001 869 | 868 0.43365621 0.35206027 0.58350766 0.001 870 | 869 0.27620798 0.57459116 0.53377464 0.001 871 | 870 0.48272145 0.43559104 0.47252474 0.001 872 | 871 0.51605265 0.32896746 0.34899873 0.001 873 | 872 0.50573768 0.72496251 0.56467166 0.001 874 | 873 0.77733735 0.41636287 0.45372007 0.001 875 | 874 0.54796073 0.57783265 0.38583438 0.001 876 | 875 0.29542553 0.38806483 0.50597751 0.001 877 | 876 0.39171859 0.68642804 0.56852946 0.001 878 | 877 0.45258244 0.30081487 0.42392197 0.001 879 | 878 0.24209453 0.48448019 0.48273993 0.001 880 | 879 0.23538068 0.45198388 0.37083426 0.001 881 | 880 0.86229081 0.53178125 0.51368522 0.001 882 | 881 0.49508633 0.50923484 0.63970908 0.001 883 | 882 0.13312862 0.32144244 0.53559217 0.001 884 | 883 0.47640377 0.47222167 0.30950475 0.001 885 | 884 0.18779164 0.58762914 0.36106147 0.001 886 | 885 0.53894901 0.75958642 0.45204048 0.001 887 | 886 0.49205539 0.25619539 0.49141756 0.001 888 | 887 0.78023832 0.54748726 0.56271513 0.001 889 | 888 0.97167929 0.53458377 0.45183927 0.001 890 | 889 0.13228287 0.34556632 0.50315246 0.001 891 | 890 0.58974162 0.35944226 0.65943544 0.001 892 | 891 0.63543294 0.32108191 0.40716331 0.001 893 | 892 0.33312916 0.62005261 0.53028838 0.001 894 | 893 0.31518376 0.59530106 0.38109333 0.001 895 | 894 0.35041703 0.57465106 0.52435835 0.001 896 | 895 0.15920661 0.36303041 0.5415568 0.001 897 | 896 0.9888809 0.45335474 0.47798697 0.001 898 | 897 0.5916189 0.62935858 0.47467717 0.001 899 | 898 0.76000322 0.30713767 0.499025 0.001 900 | 899 0.27527169 0.69610016 0.60049557 0.001 901 | 900 0.56572037 0.31935964 0.62760782 0.001 902 | 901 0.90379903 0.50318831 0.52002473 0.001 903 | 902 0.47131971 0.34857113 0.33038947 0.001 904 | 903 0.08101531 0.46899278 0.42004416 0.001 905 | 904 0.52735548 0.29760228 0.57809157 0.001 906 | 905 0.39481852 0.48487556 0.41159302 0.001 907 | 906 0.46947252 0.37388515 0.37175996 0.001 908 | 907 0.35720204 0.69739483 0.4732723 0.001 909 | 908 0.69080236 0.29649909 0.58893763 0.001 910 | 909 0.42669775 0.36534109 0.38197782 0.001 911 | 910 0.99098476 0.51171786 0.47799199 0.001 912 | 911 0.37476393 0.36182583 0.64811326 0.001 913 | 912 0.56870305 0.49130916 0.55842205 0.001 914 | 913 0.36537657 0.77417482 0.48838155 0.001 915 | 914 0.43805345 0.24108017 0.42583439 0.001 916 | 915 0.15005385 0.64135122 0.56398203 0.001 917 | 916 0.72208882 0.60818195 0.36613033 0.001 918 | 917 0.962465 0.43341656 0.47749732 0.001 919 | 918 0.66720695 0.55224215 0.40136559 0.001 920 | 919 0.40805057 0.53924984 0.44645875 0.001 921 | 920 0.65061479 0.44916797 0.33447872 0.001 922 | 921 0.2768631 0.39480301 0.57444711 0.001 923 | 922 0.52562902 0.5985864 0.39426088 0.001 924 | 923 0.34503086 0.33502142 0.57970005 0.001 925 | 924 0.62586484 0.30126523 0.63968465 0.001 926 | 925 0.38207788 0.54866875 0.36488933 0.001 927 | 926 0.68943065 0.36830478 0.44337055 0.001 928 | 927 0.7056117 0.70165548 0.55625238 0.001 929 | 928 0.50341677 0.53017499 0.49353037 0.001 930 | 929 0.71217371 0.43570434 0.4180831 0.001 931 | 930 0.88915196 0.48518161 0.62047928 0.001 932 | 931 0.52012337 0.31833726 0.54904826 0.001 933 | 932 0.50501519 0.70376652 0.39139991 0.001 934 | 933 0.38093719 0.73559065 0.48072923 0.001 935 | 934 0.78610189 0.62751356 0.57544049 0.001 936 | 935 0.73872867 0.63003284 0.56077297 0.001 937 | 936 0.669328 0.3976242 0.5155089 0.001 938 | 937 0.37455798 0.40167294 0.32228891 0.001 939 | 938 0.89237806 0.53004044 0.55411412 0.001 940 | 939 0.13757717 0.48585608 0.45091287 0.001 941 | 940 0.52627786 0.40776327 0.66082251 0.001 942 | 941 0.38707105 0.61000285 0.34092343 0.001 943 | 942 0.63098848 0.68787097 0.35635898 0.001 944 | 943 0.5583644 0.76183143 0.57649655 0.001 945 | 944 0.70923389 0.38887901 0.41817801 0.001 946 | 945 0.37655661 0.32055096 0.43104111 0.001 947 | 946 0.74927926 0.32716475 0.60806948 0.001 948 | 947 0.27815909 0.61522304 0.53630557 0.001 949 | 948 0.76677503 0.44458035 0.65580595 0.001 950 | 949 0.34928789 0.68514451 0.59652813 0.001 951 | 950 0.33687929 0.54634227 0.43207941 0.001 952 | 951 0.48543121 0.70493736 0.40938319 0.001 953 | 952 0.42964727 0.28678288 0.44679307 0.001 954 | 953 0.10046214 0.61420642 0.41270193 0.001 955 | 954 0.47152387 0.75138897 0.43075777 0.001 956 | 955 0.70383916 0.38522422 0.55784387 0.001 957 | 956 0.21236767 0.48144794 0.63532596 0.001 958 | 957 0.60642045 0.33218058 0.53067879 0.001 959 | 958 0.42540699 0.37784599 0.5725539 0.001 960 | 959 0.59434599 0.7261167 0.47145871 0.001 961 | 960 0.45111713 0.45735415 0.67952781 0.001 962 | 961 0.49331549 0.4890271 0.55306346 0.001 963 | 962 0.4093669 0.67991534 0.4836802 0.001 964 | 963 0.70564001 0.45482876 0.57981384 0.001 965 | 964 0.53026561 0.59546586 0.42013369 0.001 966 | 965 0.52077128 0.72495465 0.49492015 0.001 967 | 966 0.60407962 0.46900515 0.35132584 0.001 968 | 967 0.82989677 0.2961515 0.50921312 0.001 969 | 968 0.53604932 0.58235322 0.48000926 0.001 970 | 969 0.52981033 0.58707898 0.44576363 0.001 971 | 970 0.67851418 0.53850858 0.48829882 0.001 972 | 971 0.9000572 0.52535957 0.46366903 0.001 973 | 972 0.37700092 0.4417869 0.45117056 0.001 974 | 973 0.66171162 0.41235586 0.36380131 0.001 975 | 974 0.48700786 0.44760664 0.58124493 0.001 976 | 975 0.22451572 0.37783835 0.54757926 0.001 977 | 976 0.71971589 0.38599625 0.39116582 0.001 978 | 977 0.63207398 0.38361782 0.32455021 0.001 979 | 978 0.19047254 0.67528779 0.41498249 0.001 980 | 979 0.69342716 0.33588725 0.51363457 0.001 981 | 980 0.56014671 0.22427313 0.49303368 0.001 982 | 981 0.64610767 0.73946097 0.55451093 0.001 983 | 982 0.55217075 0.73472457 0.46039489 0.001 984 | 983 0.74122833 0.49320329 0.44100043 0.001 985 | 984 0.94894586 0.4648785 0.53249582 0.001 986 | 985 0.38955089 0.66628137 0.59262976 0.001 987 | 986 0.94801675 0.49169675 0.50020748 0.001 988 | 987 0.47981566 0.52727029 0.43416104 0.001 989 | 988 0.60932447 0.53726336 0.63170557 0.001 990 | 989 0.11658793 0.57909511 0.53842577 0.001 991 | 990 0.35223349 0.23948117 0.47747623 0.001 992 | 991 0.70088222 0.35449572 0.43399327 0.001 993 | 992 0.58502517 0.50081965 0.63691975 0.001 994 | 993 0.79181624 0.58846067 0.44764518 0.001 995 | 994 0.44930971 0.75663251 0.523817 0.001 996 | 995 0.45942516 0.48050938 0.35250833 0.001 997 | 996 0.62593025 0.4125095 0.42549858 0.001 998 | 997 0.19247207 0.56443551 0.48026945 0.001 999 | 998 0.64707956 0.50698586 0.64853213 0.001 1000 | 999 0.2956931 0.72200476 0.43272189 0.001 1001 | -------------------------------------------------------------------------------- /test/cube1000: -------------------------------------------------------------------------------- 1 | 0 0.38449766 0.85263587 0.54649331 0.001 2 | 1 0.25906857 0.10799384 0.14485738 0.001 3 | 2 0.5252497 0.56445148 0.63877908 0.001 4 | 3 0.47533667 0.17106636 0.95437596 0.001 5 | 4 0.13153822 0.67183707 0.64737273 0.001 6 | 5 0.16359502 0.91946675 0.47764642 0.001 7 | 6 0.93959609 0.75454549 0.48263747 0.001 8 | 7 0.75134837 0.3332677 0.02483063 0.001 9 | 8 0.72148159 0.06804353 0.52708269 0.001 10 | 9 0.80006047 0.18828708 0.53840975 0.001 11 | 10 0.78342447 0.92973095 0.52594664 0.001 12 | 11 0.15079703 0.50702601 0.08691083 0.001 13 | 12 0.66660276 0.51829819 0.85835455 0.001 14 | 13 0.54570754 0.06763792 0.05317646 0.001 15 | 14 0.69960351 0.25521259 0.65633024 0.001 16 | 15 0.81199637 0.75559263 0.04383064 0.001 17 | 16 0.58207666 0.96166376 0.61855993 0.001 18 | 17 0.85091271 0.97077714 0.46412255 0.001 19 | 18 0.47406205 0.54846671 0.22914696 0.001 20 | 19 0.3932567 0.75684821 0.20241984 0.001 21 | 20 0.51295721 0.78596092 0.70662644 0.001 22 | 21 0.6440123 0.68539261 0.26924704 0.001 23 | 22 0.13207062 0.9224842 0.95514284 0.001 24 | 23 0.78193441 0.38504477 0.09390421 0.001 25 | 24 0.16686935 0.16686154 0.49410167 0.001 26 | 25 0.89347399 0.70178471 0.99289759 0.001 27 | 26 0.10351216 0.46367007 0.43006749 0.001 28 | 27 0.68244408 0.50234326 0.13492126 0.001 29 | 28 0.80057383 0.74820245 0.1703539 0.001 30 | 29 0.00674852 0.07188758 0.38141394 0.001 31 | 30 0.5998875 0.58967904 0.63716598 0.001 32 | 31 0.89380183 0.40000061 0.6677794 0.001 33 | 32 0.95952252 0.4895977 0.30224628 0.001 34 | 33 0.55205653 0.63046291 0.93325195 0.001 35 | 34 0.20533884 0.70629343 0.67239229 0.001 36 | 35 0.37098606 0.43288055 0.65029527 0.001 37 | 36 0.72219348 0.17760873 0.22399751 0.001 38 | 37 0.4073325 0.84013284 0.10792068 0.001 39 | 38 0.34509854 0.18160606 0.52065122 0.001 40 | 39 0.87851801 0.78692525 0.19246099 0.001 41 | 40 0.4725315 0.96649012 0.83992712 0.001 42 | 41 0.04409085 0.64300673 0.06818398 0.001 43 | 42 0.15324988 0.8890401 0.10774084 0.001 44 | 43 0.70469462 0.04019081 0.70064713 0.001 45 | 44 0.14916948 0.15428336 0.98270312 0.001 46 | 45 0.77278599 0.14049528 0.57001356 0.001 47 | 46 0.8987078 0.76188797 0.39318607 0.001 48 | 47 0.04051663 0.56562733 0.8912499 0.001 49 | 48 0.47199081 0.4437297 0.20354619 0.001 50 | 49 0.93419193 0.08096251 0.73534929 0.001 51 | 50 0.00302686 0.69094337 0.47801339 0.001 52 | 51 0.4967197 0.19661917 0.80532036 0.001 53 | 52 0.11960045 0.09104678 0.22425063 0.001 54 | 53 0.65131086 0.51124663 0.84159532 0.001 55 | 54 0.01511336 0.19125559 0.56165333 0.001 56 | 55 0.76854234 0.22226716 0.5942798 0.001 57 | 56 0.57899019 0.16765196 0.50688219 0.001 58 | 57 0.0523398 0.99467972 0.7291911 0.001 59 | 58 0.00361678 0.53076042 0.4248278 0.001 60 | 59 0.60743002 0.74882725 0.25799217 0.001 61 | 60 0.31464385 0.86749392 0.77083768 0.001 62 | 61 0.89061434 0.61637998 0.04468142 0.001 63 | 62 0.54284668 0.64942197 0.08225157 0.001 64 | 63 0.81104255 0.43281298 0.54250906 0.001 65 | 64 0.47436894 0.7978155 0.69048775 0.001 66 | 65 0.97979749 0.59453396 0.91273226 0.001 67 | 66 0.94508207 0.71617184 0.46806469 0.001 68 | 67 0.33783002 0.76221889 0.95979958 0.001 69 | 68 0.5172841 0.15268063 0.44956928 0.001 70 | 69 0.37321438 0.03425741 0.56714052 0.001 71 | 70 0.44720319 0.96521005 0.64261357 0.001 72 | 71 0.28435024 0.58718865 0.34188977 0.001 73 | 72 0.05744103 0.49932227 0.23075926 0.001 74 | 73 0.29095751 0.6511911 0.69993898 0.001 75 | 74 0.60675801 0.03032013 0.99906011 0.001 76 | 75 0.32968223 0.1275838 0.4951241 0.001 77 | 76 0.52030239 0.87358946 0.16850136 0.001 78 | 77 0.52715977 0.66190349 0.32475651 0.001 79 | 78 0.85116383 0.42278114 0.62501043 0.001 80 | 79 0.66915512 0.32598616 0.7700513 0.001 81 | 80 0.82575453 0.65420343 0.66292466 0.001 82 | 81 0.56489639 0.62678688 0.41730487 0.001 83 | 82 0.99904421 0.921547 0.0712959 0.001 84 | 83 0.67489258 0.08175206 0.62268958 0.001 85 | 84 0.3188267 0.3556207 0.28781343 0.001 86 | 85 0.83887533 0.81063232 0.62686207 0.001 87 | 86 0.3210222 0.98962799 0.24301692 0.001 88 | 87 0.43603237 0.38136715 0.86180233 0.001 89 | 88 0.99151374 0.69314159 0.15165184 0.001 90 | 89 0.16834673 0.66485369 0.64372373 0.001 91 | 90 0.8934789 0.85586579 0.88738447 0.001 92 | 91 0.42119322 0.72361165 0.02494294 0.001 93 | 92 0.30026783 0.66491552 0.09763006 0.001 94 | 93 0.29441349 0.61205899 0.09020584 0.001 95 | 94 0.01569579 0.13996519 0.03501728 0.001 96 | 95 0.88717761 0.52795646 0.9539477 0.001 97 | 96 0.86235628 0.38396825 0.54940078 0.001 98 | 97 0.79946068 0.84388053 0.58188772 0.001 99 | 98 0.44513485 0.64475562 0.81912856 0.001 100 | 99 0.18689595 0.35018421 0.23771793 0.001 101 | 100 0.02353022 0.75666434 0.03389061 0.001 102 | 101 0.96312627 0.71754795 0.26991346 0.001 103 | 102 0.98170084 0.0666016 0.13900527 0.001 104 | 103 0.03179188 0.46592647 0.26442737 0.001 105 | 104 0.71713699 0.46070188 0.90751503 0.001 106 | 105 0.44442154 0.03911177 0.58286093 0.001 107 | 106 0.07123021 0.22290769 0.53209147 0.001 108 | 107 0.02959115 0.47596394 0.7883327 0.001 109 | 108 0.45734382 0.99252868 0.89900353 0.001 110 | 109 0.33766422 0.19794285 0.02069535 0.001 111 | 110 0.72615945 0.44154114 0.24096739 0.001 112 | 111 0.11281253 0.23828441 0.42325509 0.001 113 | 112 0.58714305 0.05240562 0.80153794 0.001 114 | 113 0.34711657 0.78503139 0.20481828 0.001 115 | 114 0.82237822 0.64520654 0.02629044 0.001 116 | 115 0.88485184 0.17977479 0.91247161 0.001 117 | 116 0.94978246 0.05195196 0.57269637 0.001 118 | 117 0.85019642 0.94727112 0.39121003 0.001 119 | 118 0.70902615 0.71979394 0.0298243 0.001 120 | 119 0.8818113 0.32805633 0.7395778 0.001 121 | 120 0.27239313 0.88571064 0.45103142 0.001 122 | 121 0.48365054 0.71634635 0.10719633 0.001 123 | 122 0.91367092 0.65911754 0.62723605 0.001 124 | 123 0.02977366 0.18585507 0.35184191 0.001 125 | 124 0.14691758 0.53078292 0.39059177 0.001 126 | 125 0.27980237 0.53391328 0.20703458 0.001 127 | 126 0.56044515 0.341872 0.42115054 0.001 128 | 127 0.9983369 0.08742507 0.86647845 0.001 129 | 128 0.93836912 0.36168727 0.49056939 0.001 130 | 129 0.61284418 0.02772372 0.59773485 0.001 131 | 130 0.96420984 0.82363585 0.90337593 0.001 132 | 131 0.7388112 0.73547666 0.93514832 0.001 133 | 132 0.87369431 0.64211677 0.5225765 0.001 134 | 133 0.51243227 0.43658614 0.69883061 0.001 135 | 134 0.08539924 0.35921266 0.49010793 0.001 136 | 135 0.49621776 0.26438476 0.72909599 0.001 137 | 136 0.64573108 0.80858482 0.60975241 0.001 138 | 137 0.41931626 0.07551135 0.19021702 0.001 139 | 138 0.23531027 0.48647692 0.25607146 0.001 140 | 139 0.32645716 0.7716604 0.77373629 0.001 141 | 140 0.47102396 0.24269043 0.23940594 0.001 142 | 141 0.17944122 0.57102738 0.64987218 0.001 143 | 142 0.84359861 0.17215648 0.64505875 0.001 144 | 143 0.90151446 0.92651577 0.04218936 0.001 145 | 144 0.38171703 0.39422644 0.21857655 0.001 146 | 145 0.14086875 0.75342354 0.10477201 0.001 147 | 146 0.32999645 0.43042152 0.86047682 0.001 148 | 147 0.70403811 0.85035613 0.56490117 0.001 149 | 148 0.65363148 0.81857941 0.24063875 0.001 150 | 149 0.945917 0.517982 0.47686872 0.001 151 | 150 0.84518298 0.35229656 0.64543183 0.001 152 | 151 0.8035462 0.26671495 0.07426287 0.001 153 | 152 0.8547424 0.80822224 0.49357597 0.001 154 | 153 0.26742277 0.23851426 0.58128416 0.001 155 | 154 0.40971163 0.07142322 0.32019979 0.001 156 | 155 0.86582315 0.66363784 0.64112249 0.001 157 | 156 0.90423652 0.94225505 0.94661303 0.001 158 | 157 0.07465321 0.88521033 0.98213896 0.001 159 | 158 0.8252041 0.63091561 0.80111302 0.001 160 | 159 0.26820493 0.16701131 0.41335988 0.001 161 | 160 0.20693454 0.61215655 0.53557599 0.001 162 | 161 0.13051879 0.31531921 0.97022588 0.001 163 | 162 0.83136781 0.89577866 0.27875343 0.001 164 | 163 0.92719242 0.18249075 0.65432011 0.001 165 | 164 0.49739743 0.14309583 0.45653961 0.001 166 | 165 0.82654833 0.77442694 0.15329542 0.001 167 | 166 0.57226421 0.0043738 0.57853448 0.001 168 | 167 0.59141988 0.32048764 0.57964322 0.001 169 | 168 0.90561399 0.74259956 0.74733412 0.001 170 | 169 0.46320037 0.31237212 0.50231821 0.001 171 | 170 0.9076683 0.51120944 0.42481366 0.001 172 | 171 0.51354572 0.53402707 0.49718424 0.001 173 | 172 0.24183276 0.03273162 0.17309681 0.001 174 | 173 0.97291451 0.49019101 0.88481513 0.001 175 | 174 0.39866915 0.38917033 0.77522698 0.001 176 | 175 0.89011067 0.48501781 0.8741453 0.001 177 | 176 0.55513883 0.66706147 0.25592818 0.001 178 | 177 0.01179567 0.59821449 0.5767061 0.001 179 | 178 0.43378386 0.2769243 0.92248646 0.001 180 | 179 0.87965409 0.94486714 0.29212544 0.001 181 | 180 0.9505521 0.44202646 0.4413193 0.001 182 | 181 0.86369553 0.12190102 0.34178094 0.001 183 | 182 0.91290518 0.95318879 0.60521229 0.001 184 | 183 0.12618604 0.39108108 0.24855225 0.001 185 | 184 0.54695289 0.5554274 0.15461547 0.001 186 | 185 0.41112527 0.28544578 0.44491504 0.001 187 | 186 0.24870763 0.53191833 0.72654278 0.001 188 | 187 0.88379364 0.17261473 0.03643725 0.001 189 | 188 0.16547891 0.80100642 0.88978778 0.001 190 | 189 0.26019001 0.29905529 0.24008095 0.001 191 | 190 0.50087196 0.05020099 0.80469026 0.001 192 | 191 0.46434589 0.50984813 0.34333805 0.001 193 | 192 0.11582512 0.84410367 0.39265256 0.001 194 | 193 0.91400693 0.83736436 0.48866751 0.001 195 | 194 0.36541084 0.7162274 0.19339521 0.001 196 | 195 0.40535847 0.53932734 0.98102136 0.001 197 | 196 0.84447299 0.61001395 0.30261182 0.001 198 | 197 0.41362234 0.08770509 0.6726533 0.001 199 | 198 0.96907982 0.51655865 0.72654058 0.001 200 | 199 0.92835398 0.27816424 0.07426109 0.001 201 | 200 0.77797173 0.90981879 0.61106502 0.001 202 | 201 0.12843249 0.59113419 0.82705365 0.001 203 | 202 0.94319226 0.34396891 0.78431458 0.001 204 | 203 0.69989347 0.20536355 0.29220235 0.001 205 | 204 0.07900759 0.90703966 0.21806863 0.001 206 | 205 0.2913988 0.78679534 0.19065921 0.001 207 | 206 0.49716135 0.46445474 0.74959526 0.001 208 | 207 0.1562926 0.44016191 0.65301764 0.001 209 | 208 0.5729841 0.60151238 0.61904688 0.001 210 | 209 0.7842097 0.455562 0.93527057 0.001 211 | 210 0.62796501 0.49957143 0.72069541 0.001 212 | 211 0.05427084 0.81247577 0.45255448 0.001 213 | 212 0.62181568 0.19964721 0.04652491 0.001 214 | 213 0.34047211 0.47891425 0.17111353 0.001 215 | 214 0.33326565 0.32174582 0.8163955 0.001 216 | 215 0.058451 0.47622977 0.25674591 0.001 217 | 216 0.12114224 0.80328963 0.58473717 0.001 218 | 217 0.39438408 0.19900116 0.39917016 0.001 219 | 218 0.41373154 0.17428577 0.2905908 0.001 220 | 219 0.36507056 0.51397264 0.55304809 0.001 221 | 220 0.71505951 0.86042433 0.03366449 0.001 222 | 221 0.37496324 0.99933675 0.387431 0.001 223 | 222 0.94734643 0.5875014 0.41713124 0.001 224 | 223 0.98630662 0.39880625 0.39099072 0.001 225 | 224 0.65925011 0.89502726 0.62847967 0.001 226 | 225 0.38281575 0.56380846 0.63454702 0.001 227 | 226 0.76778244 0.79625766 0.60130283 0.001 228 | 227 0.50692196 0.78440812 0.49397678 0.001 229 | 228 0.21032273 0.35502064 0.21997381 0.001 230 | 229 0.15911783 0.06517986 0.83856798 0.001 231 | 230 0.63208884 0.43339722 0.03279961 0.001 232 | 231 0.87298787 0.21405367 0.71399137 0.001 233 | 232 0.73090173 0.25153744 0.97251849 0.001 234 | 233 0.18053528 0.60044114 0.00500502 0.001 235 | 234 0.99578069 0.03227909 0.15648163 0.001 236 | 235 0.21891314 0.3023175 0.29698535 0.001 237 | 236 0.63079589 0.84981315 0.71922811 0.001 238 | 237 0.87968274 0.1726818 0.51609126 0.001 239 | 238 0.93410075 0.58400435 0.73004845 0.001 240 | 239 0.41524123 0.37874675 0.43178099 0.001 241 | 240 0.12159691 0.43218415 0.49176754 0.001 242 | 241 0.84775177 0.84548236 0.27790203 0.001 243 | 242 0.5073431 0.07197743 0.86405079 0.001 244 | 243 0.04270889 0.75417114 0.13673862 0.001 245 | 244 0.245667 0.76410222 0.63039402 0.001 246 | 245 0.0822103 0.58442375 0.11257283 0.001 247 | 246 0.95717975 0.54305147 0.69589241 0.001 248 | 247 0.28163489 0.13976513 0.72448033 0.001 249 | 248 0.05171907 0.1777131 0.03611366 0.001 250 | 249 0.14793395 0.20231082 0.29415384 0.001 251 | 250 0.99041865 0.85520512 0.50209401 0.001 252 | 251 0.69726461 0.77002853 0.85130216 0.001 253 | 252 0.85913886 0.08680475 0.35720521 0.001 254 | 253 0.87809756 0.65347467 0.55791442 0.001 255 | 254 0.31514143 0.8640202 0.49962205 0.001 256 | 255 0.89216063 0.69925204 0.66829923 0.001 257 | 256 0.56776467 0.26721111 0.72613401 0.001 258 | 257 0.43760453 0.40334363 0.93761001 0.001 259 | 258 0.68033724 0.24548354 0.26896539 0.001 260 | 259 0.25163007 0.17645759 0.07352269 0.001 261 | 260 0.28604778 0.31983378 0.74764202 0.001 262 | 261 0.17373901 0.63791244 0.44957095 0.001 263 | 262 0.24358239 0.75257968 0.89857495 0.001 264 | 263 0.68122676 0.82133298 0.83252053 0.001 265 | 264 0.84462537 0.53048569 0.98980575 0.001 266 | 265 0.96293342 0.47240009 0.89296322 0.001 267 | 266 0.14703876 0.43914771 0.94122053 0.001 268 | 267 0.79446749 0.11798075 0.75041963 0.001 269 | 268 0.73478929 0.49847494 0.96365522 0.001 270 | 269 0.0286822 0.00445185 0.97998962 0.001 271 | 270 0.2815393 0.37087703 0.75540799 0.001 272 | 271 0.07517256 0.0027035 0.33992038 0.001 273 | 272 0.37537952 0.4456758 0.89328873 0.001 274 | 273 0.8777003 0.84355925 0.44995226 0.001 275 | 274 0.63923127 0.38747785 0.37073054 0.001 276 | 275 0.13954742 0.98361437 0.60200594 0.001 277 | 276 0.64849357 0.32474567 0.66633515 0.001 278 | 277 0.29209033 0.00662482 0.97796921 0.001 279 | 278 0.31938944 0.32054092 0.80214928 0.001 280 | 279 0.74779089 0.52076546 0.44070484 0.001 281 | 280 0.65519173 0.43203807 0.42861673 0.001 282 | 281 0.9468409 0.74824105 0.01980845 0.001 283 | 282 0.34505503 0.45380048 0.99323597 0.001 284 | 283 0.0131254 0.74043546 0.0743267 0.001 285 | 284 0.01177814 0.44464647 0.06528826 0.001 286 | 285 0.84509177 0.78665041 0.81601159 0.001 287 | 286 0.14622821 0.05731955 0.31255032 0.001 288 | 287 0.57144693 0.14789671 0.86879301 0.001 289 | 288 0.22246153 0.3400431 0.57636795 0.001 290 | 289 0.18285057 0.75164724 0.5453883 0.001 291 | 290 0.36606752 0.85074321 0.70990612 0.001 292 | 291 0.73605612 0.76642227 0.54834594 0.001 293 | 292 0.8000463 0.15968279 0.03288916 0.001 294 | 293 0.59268831 0.25455094 0.54893169 0.001 295 | 294 0.9947016 0.31708421 0.84077101 0.001 296 | 295 0.77889873 0.37056963 0.533403 0.001 297 | 296 0.81308306 0.06118913 0.74922357 0.001 298 | 297 0.45747159 0.02873956 0.78226969 0.001 299 | 298 0.52214017 0.40203814 0.78665652 0.001 300 | 299 0.41044734 0.7073007 0.04602357 0.001 301 | 300 0.38017339 0.16690777 0.80983649 0.001 302 | 301 0.38231431 0.2490488 0.36704569 0.001 303 | 302 0.89441207 0.72474735 0.57609871 0.001 304 | 303 0.91065838 0.32742222 0.94755659 0.001 305 | 304 0.69648662 0.89700548 0.00603091 0.001 306 | 305 0.58170526 0.68155051 0.69681342 0.001 307 | 306 0.89874798 0.13852359 0.9162364 0.001 308 | 307 0.10867376 0.26212463 0.73084114 0.001 309 | 308 0.98473149 0.56701224 0.796408 0.001 310 | 309 0.67343563 0.63880054 0.02978892 0.001 311 | 310 0.70054832 0.01822312 0.02079068 0.001 312 | 311 0.3820538 0.09731858 0.97248537 0.001 313 | 312 0.07537937 0.49877576 0.93963801 0.001 314 | 313 0.53938255 0.21034867 0.83669919 0.001 315 | 314 0.21946548 0.43124399 0.45876616 0.001 316 | 315 0.16104005 0.72426748 0.82004599 0.001 317 | 316 0.68682047 0.9745036 0.46879061 0.001 318 | 317 0.6942336 0.50491544 0.76854782 0.001 319 | 318 0.06975517 0.65844651 0.38277679 0.001 320 | 319 0.68161492 0.60063882 0.66269541 0.001 321 | 320 0.52976175 0.61997098 0.31890296 0.001 322 | 321 0.15163903 0.06861051 0.08850483 0.001 323 | 322 0.59810467 0.57150612 0.653239 0.001 324 | 323 0.62743239 0.18125161 0.88376142 0.001 325 | 324 0.46340773 0.75604435 0.5878197 0.001 326 | 325 0.55143022 0.96159456 0.08712151 0.001 327 | 326 0.63446637 0.95824066 0.69343541 0.001 328 | 327 0.64508967 0.20674367 0.10155171 0.001 329 | 328 0.53269 0.46704331 0.3974169 0.001 330 | 329 0.08136655 0.46457768 0.57762826 0.001 331 | 330 0.12456325 0.01193392 0.14648926 0.001 332 | 331 0.99854523 0.0659603 0.46914554 0.001 333 | 332 0.53084985 0.3863857 0.25401315 0.001 334 | 333 0.72683083 0.81375796 0.17143165 0.001 335 | 334 0.0390242 0.37651237 0.5532785 0.001 336 | 335 0.21328543 0.27227094 0.20012047 0.001 337 | 336 0.73028811 0.9774326 0.04873524 0.001 338 | 337 0.73038204 0.3830585 0.17785626 0.001 339 | 338 0.3750737 0.95880058 0.55613345 0.001 340 | 339 0.07164526 0.02175928 0.14026206 0.001 341 | 340 0.6178754 0.21370283 0.8859702 0.001 342 | 341 0.63185247 0.78461838 0.72543445 0.001 343 | 342 0.041796 0.94731816 0.37086676 0.001 344 | 343 0.84846365 0.23413785 0.75572217 0.001 345 | 344 0.95381053 0.05920432 0.92037582 0.001 346 | 345 0.08656953 0.267222 0.50423903 0.001 347 | 346 0.04315163 0.29033254 0.69658404 0.001 348 | 347 0.68133544 0.27073547 0.1418195 0.001 349 | 348 0.30450676 0.78390479 0.6733135 0.001 350 | 349 0.42881745 0.46550885 0.56608466 0.001 351 | 350 0.92820866 0.6945063 0.47252063 0.001 352 | 351 0.98808937 0.10733575 0.1007926 0.001 353 | 352 0.52569022 0.81214992 0.96834551 0.001 354 | 353 0.93705932 0.50933048 0.20189564 0.001 355 | 354 0.35208091 0.42236108 0.07031971 0.001 356 | 355 0.80880809 0.33232548 0.2396633 0.001 357 | 356 0.46684073 0.83229473 0.54368397 0.001 358 | 357 0.14295692 0.44695114 0.35576865 0.001 359 | 358 0.06087586 0.83545629 0.32205166 0.001 360 | 359 0.91704488 0.56612803 0.2500071 0.001 361 | 360 0.09822328 0.75104079 0.14766198 0.001 362 | 361 0.9759313 0.27161534 0.95254822 0.001 363 | 362 0.21851734 0.47554702 0.93631954 0.001 364 | 363 0.01094465 0.91004705 0.98935016 0.001 365 | 364 0.03929802 0.11010172 0.95840417 0.001 366 | 365 0.3105628 0.5912829 0.94580962 0.001 367 | 366 0.22783429 0.24912489 0.94854222 0.001 368 | 367 0.78689996 0.2682566 0.44193837 0.001 369 | 368 0.13270006 0.26751466 0.00749131 0.001 370 | 369 0.82345309 0.61897929 0.75383735 0.001 371 | 370 0.00079479 0.19374678 0.26599629 0.001 372 | 371 0.72335267 0.3927237 0.13716684 0.001 373 | 372 0.18109123 0.39215118 0.55385341 0.001 374 | 373 0.90826738 0.64129698 0.92605633 0.001 375 | 374 0.04031029 0.05041184 0.28902066 0.001 376 | 375 0.08835341 0.206511 0.98675513 0.001 377 | 376 0.5582056 0.2902652 0.27303755 0.001 378 | 377 0.28338787 0.56982763 0.29141599 0.001 379 | 378 0.56073246 0.73512054 0.33439518 0.001 380 | 379 0.36150802 0.08749229 0.63226726 0.001 381 | 380 0.59150682 0.98690825 0.20494458 0.001 382 | 381 0.0256408 0.8515872 0.15446694 0.001 383 | 382 0.98321982 0.58733198 0.49385459 0.001 384 | 383 0.13238989 0.74215834 0.07832766 0.001 385 | 384 0.35813842 0.74290884 0.62366908 0.001 386 | 385 0.58648828 0.5723234 0.99992594 0.001 387 | 386 0.92505652 0.02345436 0.05003532 0.001 388 | 387 0.29920488 0.80466064 0.9345886 0.001 389 | 388 0.78034621 0.23607195 0.19005758 0.001 390 | 389 0.50581216 0.57809541 0.27310137 0.001 391 | 390 0.26471419 0.428417 0.46876248 0.001 392 | 391 0.85729849 0.48156955 0.83122492 0.001 393 | 392 0.81349304 0.11803114 0.69841973 0.001 394 | 393 0.04430333 0.46400927 0.55503934 0.001 395 | 394 0.96611058 0.93651545 0.35807341 0.001 396 | 395 0.08944112 0.3402886 0.93355706 0.001 397 | 396 0.29533664 0.14834002 0.60751002 0.001 398 | 397 0.1346858 0.80292157 0.41531162 0.001 399 | 398 0.27942913 0.21127879 0.06753541 0.001 400 | 399 0.83871731 0.87967259 0.80647559 0.001 401 | 400 0.90801675 0.32240006 0.46064189 0.001 402 | 401 0.5316071 0.74762297 0.91098461 0.001 403 | 402 0.73451076 0.84487484 0.13177493 0.001 404 | 403 0.53705337 0.87529949 0.65576719 0.001 405 | 404 0.78869187 0.99666287 0.36024047 0.001 406 | 405 0.14764318 0.0869332 0.61468342 0.001 407 | 406 0.43853005 0.01750881 0.24754951 0.001 408 | 407 0.29968517 0.75006416 0.20270472 0.001 409 | 408 0.16621434 0.71343028 0.34980802 0.001 410 | 409 0.46871883 0.82408132 0.86787978 0.001 411 | 410 0.85592245 0.28017635 0.96005482 0.001 412 | 411 0.58699501 0.97229795 0.17723424 0.001 413 | 412 0.59159827 0.18125048 0.39369068 0.001 414 | 413 0.03342931 0.58560244 0.44135261 0.001 415 | 414 0.46749858 0.97569339 0.24878585 0.001 416 | 415 0.72396767 0.82552387 0.60710924 0.001 417 | 416 0.57851376 0.46501463 0.64857478 0.001 418 | 417 0.02477667 0.22570108 0.07223348 0.001 419 | 418 0.86935525 0.07125094 0.49407895 0.001 420 | 419 0.65705554 0.2473543 0.9682721 0.001 421 | 420 0.92360297 0.02887283 0.24739407 0.001 422 | 421 0.09828551 0.03461304 0.20045616 0.001 423 | 422 0.47243216 0.77277066 0.19473493 0.001 424 | 423 0.62208689 0.37234252 0.9390726 0.001 425 | 424 0.88454816 0.09181535 0.57520814 0.001 426 | 425 0.15641682 0.45882077 0.39594597 0.001 427 | 426 0.96178173 0.96968689 0.9684519 0.001 428 | 427 0.70855452 0.25867293 0.8190761 0.001 429 | 428 0.98946368 0.24150972 0.48311381 0.001 430 | 429 0.11094896 0.81818716 0.5236179 0.001 431 | 430 0.12655669 0.0556857 0.21019459 0.001 432 | 431 0.76718459 0.72972968 0.21128019 0.001 433 | 432 0.91735369 0.20378769 0.02895927 0.001 434 | 433 0.70168139 0.39236512 0.77646504 0.001 435 | 434 0.66002685 0.80102452 0.69904358 0.001 436 | 435 0.79586004 0.23943566 0.96208795 0.001 437 | 436 0.29245342 0.10418905 0.33396816 0.001 438 | 437 0.84045529 0.46091509 0.38395191 0.001 439 | 438 0.41220792 0.56700941 0.40581664 0.001 440 | 439 0.96188041 0.25104101 0.32818973 0.001 441 | 440 0.94427375 0.96534519 0.62719139 0.001 442 | 441 0.23168249 0.74996594 0.52666768 0.001 443 | 442 0.73361299 0.99198348 0.25585362 0.001 444 | 443 0.35099147 0.59996368 0.10739567 0.001 445 | 444 0.94471642 0.99179951 0.15970004 0.001 446 | 445 0.19232796 0.31484045 0.137833 0.001 447 | 446 0.00775426 0.14652373 0.77302396 0.001 448 | 447 0.95303829 0.78027925 0.77905226 0.001 449 | 448 0.55532098 0.37237125 0.4618964 0.001 450 | 449 0.0327119 0.06944288 0.14612992 0.001 451 | 450 0.25289962 0.64362998 0.55572519 0.001 452 | 451 0.2800695 0.21763366 0.38101847 0.001 453 | 452 0.60851545 0.2364309 0.56025031 0.001 454 | 453 0.59096528 0.01910959 0.90343147 0.001 455 | 454 0.81358492 0.3926078 0.72629371 0.001 456 | 455 0.48446658 0.72545501 0.09610078 0.001 457 | 456 0.66990625 0.340784 0.30221669 0.001 458 | 457 0.57478554 0.83715776 0.74191345 0.001 459 | 458 0.80966959 0.21524952 0.46723806 0.001 460 | 459 0.14180901 0.70958367 0.45734824 0.001 461 | 460 0.19623604 0.21765534 0.57451325 0.001 462 | 461 0.71418083 0.57178411 0.81804744 0.001 463 | 462 0.17869628 0.96949237 0.48398722 0.001 464 | 463 0.44950294 0.94652652 0.88005621 0.001 465 | 464 0.05142991 0.27587044 0.20667845 0.001 466 | 465 0.11852714 0.6227432 0.53814748 0.001 467 | 466 0.49607363 0.42795179 0.08745828 0.001 468 | 467 0.44150084 0.84998247 0.81742191 0.001 469 | 468 0.34764063 0.54446307 0.58738714 0.001 470 | 469 0.83630963 0.69511421 0.70579921 0.001 471 | 470 0.03854918 0.48370641 0.86006589 0.001 472 | 471 0.14539733 0.52450991 0.63198874 0.001 473 | 472 0.98939669 0.00251842 0.50493271 0.001 474 | 473 0.70872666 0.61441004 0.6449859 0.001 475 | 474 0.30009793 0.77925625 0.82272926 0.001 476 | 475 0.25086109 0.05417161 0.97132948 0.001 477 | 476 0.997736 0.60860548 0.0763658 0.001 478 | 477 0.57406236 0.25819877 0.6477242 0.001 479 | 478 0.75238065 0.30197218 0.44549667 0.001 480 | 479 0.97428869 0.33856936 0.33855391 0.001 481 | 480 0.96635721 0.4680451 0.63910503 0.001 482 | 481 0.27752415 0.81835892 0.00724025 0.001 483 | 482 0.99695403 0.70176711 0.06488723 0.001 484 | 483 0.38914116 0.84412073 0.1538657 0.001 485 | 484 0.50541505 0.54669689 0.22086303 0.001 486 | 485 0.86771365 0.56351107 0.60923098 0.001 487 | 486 0.83287292 0.5623824 0.14986284 0.001 488 | 487 0.89648054 0.31285362 0.93140853 0.001 489 | 488 0.60640759 0.88456658 0.54664571 0.001 490 | 489 0.61871268 0.4190169 0.67617008 0.001 491 | 490 0.22588295 0.38259523 0.6097449 0.001 492 | 491 0.01718358 0.38551304 0.41032259 0.001 493 | 492 0.70152329 0.08401484 0.1428361 0.001 494 | 493 0.95790495 0.32563707 0.19209528 0.001 495 | 494 0.72043553 0.19145053 0.6083574 0.001 496 | 495 0.88901166 0.79423793 0.71510995 0.001 497 | 496 0.86553656 0.80592296 0.0583635 0.001 498 | 497 0.14277301 0.08054991 0.85884567 0.001 499 | 498 0.71934283 0.5010384 0.45167891 0.001 500 | 499 0.113157 0.58128077 0.29347183 0.001 501 | 500 8.47377331e-01 6.86829536e-01 7.76304778e-04 0.001 502 | 501 7.78939880e-04 3.88104909e-01 9.13878605e-01 0.001 503 | 502 0.34237697 0.99316055 0.39762959 0.001 504 | 503 0.33392755 0.07085588 0.21465689 0.001 505 | 504 0.22599209 0.59347107 0.85524974 0.001 506 | 505 0.12068192 0.29231009 0.9531458 0.001 507 | 506 0.0448658 0.95904467 0.50632455 0.001 508 | 507 0.49211652 0.45842617 0.07372846 0.001 509 | 508 0.97420889 0.50704912 0.78136693 0.001 510 | 509 0.79291978 0.0270373 0.05341695 0.001 511 | 510 0.99749308 0.22618444 0.8914914 0.001 512 | 511 0.37791633 0.33915398 0.57405302 0.001 513 | 512 0.58064366 0.23494918 0.74050342 0.001 514 | 513 0.96682281 0.37830337 0.598412 0.001 515 | 514 0.51850535 0.11336217 0.19821889 0.001 516 | 515 0.29809693 0.94718651 0.32970215 0.001 517 | 516 0.33073224 0.1987713 0.11459134 0.001 518 | 517 0.15516542 0.50467178 0.4164118 0.001 519 | 518 0.03643502 0.92934805 0.67242264 0.001 520 | 519 0.87760734 0.12376336 0.57271165 0.001 521 | 520 0.03445127 0.26236152 0.97572156 0.001 522 | 521 0.21955012 0.7972347 0.34807342 0.001 523 | 522 4.25411942e-01 4.33934347e-04 4.60957690e-01 0.001 524 | 523 0.04995727 0.30123032 0.21839508 0.001 525 | 524 0.12077675 0.96490552 0.3448724 0.001 526 | 525 0.55465542 0.95416321 0.25915679 0.001 527 | 526 0.99466037 0.45762684 0.69641506 0.001 528 | 527 0.11009709 0.02282579 0.9816118 0.001 529 | 528 0.26301411 0.02731765 0.5002658 0.001 530 | 529 0.38488779 0.22538957 0.89650385 0.001 531 | 530 0.63593743 0.27802273 0.3322418 0.001 532 | 531 0.7246823 0.06166908 0.79834049 0.001 533 | 532 0.13374391 0.02023422 0.42472379 0.001 534 | 533 0.31012842 0.34443021 0.96408885 0.001 535 | 534 0.64357339 0.03082048 0.02136972 0.001 536 | 535 0.39594859 0.50633487 0.54210222 0.001 537 | 536 0.00393069 0.23863056 0.15420887 0.001 538 | 537 0.39143706 0.47405611 0.85133174 0.001 539 | 538 0.40807511 0.07003528 0.25999272 0.001 540 | 539 0.75199887 0.58133305 0.58094817 0.001 541 | 540 0.70557911 0.32971552 0.82755786 0.001 542 | 541 0.93134854 0.37572502 0.19634078 0.001 543 | 542 0.71645004 0.44549607 0.36729507 0.001 544 | 543 0.6018198 0.07303858 0.07887907 0.001 545 | 544 0.25853069 0.84636298 0.62707075 0.001 546 | 545 0.58860516 0.13614056 0.6030542 0.001 547 | 546 0.88220167 0.06826142 0.47220693 0.001 548 | 547 0.12195793 0.83134148 0.71363476 0.001 549 | 548 0.10018224 0.3018802 0.69422976 0.001 550 | 549 0.47912096 0.5452082 0.70996494 0.001 551 | 550 0.45236827 0.12212867 0.88364389 0.001 552 | 551 0.1049827 0.77522419 0.21253432 0.001 553 | 552 0.15168259 0.23980791 0.07412155 0.001 554 | 553 0.03967617 0.88607269 0.60507849 0.001 555 | 554 0.52127725 0.4423225 0.69355456 0.001 556 | 555 0.75303553 0.85991695 0.96444286 0.001 557 | 556 0.40559711 0.46845718 0.9337892 0.001 558 | 557 0.13154057 0.50237601 0.33822012 0.001 559 | 558 0.01461315 0.8631225 0.12556934 0.001 560 | 559 0.92755239 0.25942299 0.49755461 0.001 561 | 560 0.58069251 0.38975391 0.32580363 0.001 562 | 561 0.78556451 0.09386398 0.19032265 0.001 563 | 562 0.52481803 0.35121002 0.05521883 0.001 564 | 563 0.46662019 0.0969014 0.5086084 0.001 565 | 564 0.98262228 0.87481497 0.71001491 0.001 566 | 565 0.68682671 0.64945237 0.45329329 0.001 567 | 566 0.19217713 0.24443764 0.21852695 0.001 568 | 567 0.16915965 0.91113321 0.87592328 0.001 569 | 568 0.52409446 0.84334241 0.25754266 0.001 570 | 569 0.34769246 0.82845092 0.68856867 0.001 571 | 570 0.67236858 0.793528 0.0217739 0.001 572 | 571 0.34836573 0.62106277 0.15301048 0.001 573 | 572 0.91245024 0.50475901 0.44252411 0.001 574 | 573 0.16604823 0.85312264 0.24257105 0.001 575 | 574 0.89732285 0.71070424 0.57668232 0.001 576 | 575 0.32684263 0.20269097 0.47439086 0.001 577 | 576 0.62037653 0.46976632 0.58342804 0.001 578 | 577 0.90217424 0.60246504 0.2067811 0.001 579 | 578 0.9036569 0.96791423 0.93963015 0.001 580 | 579 0.6187897 0.59242888 0.01458569 0.001 581 | 580 0.36153793 0.33455676 0.92858503 0.001 582 | 581 0.05085378 0.71662227 0.6093502 0.001 583 | 582 0.18300526 0.84356215 0.94696323 0.001 584 | 583 0.37245708 0.84952266 0.42488642 0.001 585 | 584 0.62843462 0.50093552 0.86215291 0.001 586 | 585 0.07965065 0.55781353 0.0521288 0.001 587 | 586 0.66969202 0.74027844 0.59783576 0.001 588 | 587 0.63084433 0.97739689 0.59192528 0.001 589 | 588 0.29133466 0.52179604 0.573954 0.001 590 | 589 0.42157118 0.67687772 0.29082102 0.001 591 | 590 0.87883324 0.42316789 0.23070993 0.001 592 | 591 0.60484493 0.73137097 0.82048601 0.001 593 | 592 0.35166757 0.08209555 0.27137301 0.001 594 | 593 0.61693662 0.86447584 0.61087835 0.001 595 | 594 0.28111614 0.28372635 0.67569579 0.001 596 | 595 0.46322903 0.70713333 0.8810698 0.001 597 | 596 0.4545673 0.25654847 0.38092226 0.001 598 | 597 0.60968931 0.90548024 0.02538426 0.001 599 | 598 0.23819878 0.57372027 0.66218158 0.001 600 | 599 0.17432352 0.95132941 0.63552519 0.001 601 | 600 0.53304037 0.60084338 0.35873176 0.001 602 | 601 0.16423406 0.67822864 0.07325635 0.001 603 | 602 0.10952534 0.24542656 0.6042115 0.001 604 | 603 0.11771984 0.94550105 0.112517 0.001 605 | 604 0.2899124 0.01547863 0.69517307 0.001 606 | 605 0.50996085 0.24382542 0.3665247 0.001 607 | 606 0.20047717 0.13732703 0.44947673 0.001 608 | 607 0.6407277 0.09919931 0.21095528 0.001 609 | 608 0.8586901 0.60498752 0.37016085 0.001 610 | 609 0.48624173 0.57356422 0.1637405 0.001 611 | 610 0.17994674 0.16386759 0.53227651 0.001 612 | 611 0.90481703 0.64649856 0.48630065 0.001 613 | 612 0.22911647 0.78274382 0.99292319 0.001 614 | 613 0.09507251 0.93010056 0.59686088 0.001 615 | 614 0.7682448 0.84872934 0.27743564 0.001 616 | 615 0.62789416 0.60385205 0.50523077 0.001 617 | 616 0.71183871 0.13954747 0.3055629 0.001 618 | 617 0.78300236 0.23714647 0.13542181 0.001 619 | 618 0.20074031 0.7499115 0.79226781 0.001 620 | 619 0.96112281 0.18630063 0.02409559 0.001 621 | 620 0.80542335 0.02380648 0.61621088 0.001 622 | 621 0.76150057 0.22010721 0.17613081 0.001 623 | 622 0.47796777 0.48274235 0.57606067 0.001 624 | 623 0.4219975 0.90972341 0.06617039 0.001 625 | 624 0.76972101 0.13147497 0.5031914 0.001 626 | 625 0.0833224 0.91924222 0.25754116 0.001 627 | 626 0.75674854 0.58077365 0.94497596 0.001 628 | 627 0.11402184 0.7310162 0.71965812 0.001 629 | 628 0.06221168 0.9673547 0.63467068 0.001 630 | 629 0.98260762 0.3104908 0.26910854 0.001 631 | 630 0.17146342 0.85168988 0.84349433 0.001 632 | 631 0.64597622 0.89583568 0.8149815 0.001 633 | 632 0.01221636 0.68376512 0.08632724 0.001 634 | 633 0.59289529 0.54144018 0.65140964 0.001 635 | 634 0.50436561 0.20847126 0.91312739 0.001 636 | 635 0.49353105 0.90540224 0.81526266 0.001 637 | 636 0.14833882 0.75967404 0.6195811 0.001 638 | 637 0.02082503 0.43119055 0.67031783 0.001 639 | 638 0.26938198 0.69689464 0.47334667 0.001 640 | 639 0.82046667 0.51926735 0.92029224 0.001 641 | 640 0.61386877 0.65796623 0.48405647 0.001 642 | 641 0.37159231 0.9906184 0.90332929 0.001 643 | 642 0.71963341 0.19548067 0.01738388 0.001 644 | 643 0.57774264 0.01039334 0.99111692 0.001 645 | 644 0.1782188 0.22456975 0.21023701 0.001 646 | 645 0.17374473 0.36379659 0.15769861 0.001 647 | 646 0.92152067 0.31403482 0.62007395 0.001 648 | 647 0.78589877 0.88486929 0.35410819 0.001 649 | 648 0.73658883 0.42891218 0.1276641 0.001 650 | 649 0.66791558 0.77493991 0.98770449 0.001 651 | 650 0.22935863 0.20275762 0.82286777 0.001 652 | 651 0.35044905 0.97584579 0.33485239 0.001 653 | 652 0.80216654 0.36610276 0.79095419 0.001 654 | 653 0.4740539 0.2767268 0.56830745 0.001 655 | 654 0.18723969 0.11468253 0.75256804 0.001 656 | 655 0.91210838 0.30970024 0.67435237 0.001 657 | 656 0.30201273 0.14925765 0.11338318 0.001 658 | 657 0.32887469 0.06932975 0.70421294 0.001 659 | 658 0.42766392 0.0655063 0.55494052 0.001 660 | 659 0.72316984 0.70718688 0.67669254 0.001 661 | 660 0.98237213 0.8554417 0.0635995 0.001 662 | 661 0.35911538 0.92188199 0.46046486 0.001 663 | 662 0.83800266 0.18678128 0.54372532 0.001 664 | 663 0.07546281 0.76827547 0.44273931 0.001 665 | 664 0.42347681 0.17374464 0.79905615 0.001 666 | 665 0.58104702 0.5754707 0.3158489 0.001 667 | 666 0.82499567 0.86909671 0.146824 0.001 668 | 667 0.881294 0.44624461 0.19939121 0.001 669 | 668 0.61965743 0.35941271 0.23611606 0.001 670 | 669 0.77041028 0.98607509 0.70805463 0.001 671 | 670 0.55219696 0.58983722 0.95038816 0.001 672 | 671 0.2547718 0.47875808 0.50082485 0.001 673 | 672 0.2420536 0.62368475 0.32389163 0.001 674 | 673 0.87393585 0.06689217 0.29057693 0.001 675 | 674 0.41645315 0.65643029 0.3515074 0.001 676 | 675 0.83503148 0.57027369 0.58657059 0.001 677 | 676 0.52883027 0.3713497 0.44217144 0.001 678 | 677 0.31803683 0.51308941 0.52661896 0.001 679 | 678 0.98119314 0.78863977 0.17078878 0.001 680 | 679 0.38772187 0.1707212 0.78858724 0.001 681 | 680 0.83720808 0.90691857 0.07400089 0.001 682 | 681 0.65892215 0.6908227 0.4263941 0.001 683 | 682 0.62941212 0.23593411 0.76779424 0.001 684 | 683 0.6528099 0.64001589 0.76648168 0.001 685 | 684 0.73119904 0.95935138 0.64278155 0.001 686 | 685 0.03473552 0.98618734 0.7657711 0.001 687 | 686 0.25880276 0.52299905 0.98836709 0.001 688 | 687 0.41241262 0.14457696 0.30702175 0.001 689 | 688 0.12283938 0.26010171 0.58748924 0.001 690 | 689 0.52074265 0.71133104 0.9215275 0.001 691 | 690 0.67803991 0.97405901 0.98628419 0.001 692 | 691 0.55400616 0.78739452 0.39540127 0.001 693 | 692 0.21044854 0.77770947 0.4473449 0.001 694 | 693 0.77700156 0.14313497 0.7411585 0.001 695 | 694 0.20169121 0.51989378 0.75862694 0.001 696 | 695 0.17122642 0.49818438 0.85002301 0.001 697 | 696 0.26863944 0.42270603 0.50376636 0.001 698 | 697 0.65519315 0.99874302 0.36874103 0.001 699 | 698 0.48202102 0.87636386 0.26453501 0.001 700 | 699 0.81319813 0.4624966 0.43129043 0.001 701 | 700 0.00316186 0.97799701 0.24654452 0.001 702 | 701 0.4916182 0.83770882 0.80888801 0.001 703 | 702 0.10764706 0.52791187 0.40694463 0.001 704 | 703 0.97661101 0.91709681 0.67774602 0.001 705 | 704 0.88192683 0.00227135 0.49737004 0.001 706 | 705 0.33889364 0.69356037 0.95854648 0.001 707 | 706 0.33277368 0.02337783 0.70259615 0.001 708 | 707 0.83334445 0.64649259 0.56400068 0.001 709 | 708 0.80467205 0.85710993 0.55593059 0.001 710 | 709 0.11186251 0.60254219 0.77577753 0.001 711 | 710 0.80507396 0.85827931 0.72584443 0.001 712 | 711 0.49891197 0.87619764 0.87149094 0.001 713 | 712 0.84018877 0.16304037 0.04456378 0.001 714 | 713 0.33389529 0.71044513 0.43416826 0.001 715 | 714 0.8837706 0.1882814 0.94571693 0.001 716 | 715 0.08090372 0.33794851 0.53983265 0.001 717 | 716 0.28647876 0.37121602 0.07905663 0.001 718 | 717 0.9833607 0.66202408 0.57119144 0.001 719 | 718 0.19321121 0.59743945 0.61984229 0.001 720 | 719 0.52399791 0.23218531 0.6726658 0.001 721 | 720 0.1527639 0.20669067 0.48438868 0.001 722 | 721 0.91630052 0.46542547 0.84590787 0.001 723 | 722 0.87850797 0.36630046 0.57191013 0.001 724 | 723 0.27277151 0.65881617 0.8990745 0.001 725 | 724 0.04282851 0.69194529 0.01591222 0.001 726 | 725 0.94093143 0.12742225 0.36452883 0.001 727 | 726 0.60271765 0.87932262 0.15021074 0.001 728 | 727 0.95481048 0.76952456 0.37045345 0.001 729 | 728 0.36071638 0.33864191 0.09309529 0.001 730 | 729 0.38036189 0.69715593 0.34246569 0.001 731 | 730 0.24295584 0.9111908 0.81860071 0.001 732 | 731 0.68879647 0.64418314 0.5516132 0.001 733 | 732 0.61276694 0.99870215 0.43467065 0.001 734 | 733 0.82004536 0.32145975 0.64003159 0.001 735 | 734 0.51507858 0.24813807 0.52975325 0.001 736 | 735 0.14714645 0.84113422 0.45374492 0.001 737 | 736 0.25897988 0.72393611 0.86179479 0.001 738 | 737 0.54972696 0.10326093 0.40424495 0.001 739 | 738 0.21392019 0.12902107 0.34189569 0.001 740 | 739 0.97358383 0.92540941 0.811887 0.001 741 | 740 0.10917448 0.91043971 0.79952038 0.001 742 | 741 0.4176767 0.81801118 0.55755191 0.001 743 | 742 0.53742511 0.75464539 0.49945791 0.001 744 | 743 0.81970596 0.37618444 0.93923092 0.001 745 | 744 0.9310437 0.39104546 0.57864498 0.001 746 | 745 0.86800948 0.95273404 0.34081297 0.001 747 | 746 0.16802659 0.18448507 0.87742572 0.001 748 | 747 0.41761296 0.68463976 0.56916378 0.001 749 | 748 0.45164481 0.71109167 0.2350656 0.001 750 | 749 0.22694981 0.50013888 0.12028362 0.001 751 | 750 0.85248374 0.74452998 0.64313362 0.001 752 | 751 0.3463207 0.54474139 0.95369531 0.001 753 | 752 0.06807413 0.70281213 0.30745956 0.001 754 | 753 0.87905971 0.84915275 0.3277544 0.001 755 | 754 0.49826064 0.01841721 0.0293249 0.001 756 | 755 0.26336727 0.01731915 0.75038885 0.001 757 | 756 0.58727749 0.76618229 0.8838635 0.001 758 | 757 0.00133263 0.51487151 0.21368506 0.001 759 | 758 0.20636059 0.67499492 0.50138942 0.001 760 | 759 0.88993096 0.09343287 0.75853194 0.001 761 | 760 0.34049985 0.69692946 0.26790465 0.001 762 | 761 0.07901844 0.50707813 0.082153 0.001 763 | 762 0.52138265 0.84660458 0.04773974 0.001 764 | 763 0.53509461 0.98731576 0.48164959 0.001 765 | 764 0.89556637 0.30722694 0.62451715 0.001 766 | 765 0.72171674 0.37579164 0.62989239 0.001 767 | 766 0.26338562 0.16755592 0.10157742 0.001 768 | 767 0.43357763 0.69701895 0.29746166 0.001 769 | 768 0.7061196 0.81195354 0.82047523 0.001 770 | 769 0.0254236 0.15780304 0.40046351 0.001 771 | 770 0.37374936 0.32108314 0.47434499 0.001 772 | 771 0.46481605 0.36452421 0.4708567 0.001 773 | 772 0.79336793 0.25693252 0.51286047 0.001 774 | 773 0.62604846 0.26128891 0.56299936 0.001 775 | 774 0.57921419 0.44295915 0.86342745 0.001 776 | 775 0.538094 0.25736111 0.39703204 0.001 777 | 776 0.53894122 0.24541475 0.37948899 0.001 778 | 777 0.31923957 0.87364224 0.1595466 0.001 779 | 778 0.62286077 0.69477993 0.35123231 0.001 780 | 779 0.12634764 0.05947612 0.87686805 0.001 781 | 780 0.9971437 0.40378075 0.66419762 0.001 782 | 781 0.2072694 0.54742202 0.93749816 0.001 783 | 782 0.24796662 0.45203326 0.40513321 0.001 784 | 783 0.65987688 0.17879871 0.58898981 0.001 785 | 784 0.20227053 0.1425966 0.42314729 0.001 786 | 785 0.69758079 0.59950864 0.90939403 0.001 787 | 786 0.60128299 0.99905947 0.59143951 0.001 788 | 787 0.15590017 0.9987852 0.31325581 0.001 789 | 788 0.12954323 0.64753414 0.129327 0.001 790 | 789 0.78543492 0.59736749 0.52855369 0.001 791 | 790 0.0479553 0.74021297 0.3610702 0.001 792 | 791 0.24849434 0.96129944 0.44628497 0.001 793 | 792 0.03472278 0.09926761 0.17459638 0.001 794 | 793 0.60183348 0.16576738 0.43204847 0.001 795 | 794 0.44816355 0.54506776 0.61377264 0.001 796 | 795 0.45250422 0.62136464 0.42645552 0.001 797 | 796 0.39806739 0.49123183 0.2887499 0.001 798 | 797 0.28670453 0.5232804 0.46519857 0.001 799 | 798 0.61271319 0.3925499 0.68894076 0.001 800 | 799 0.36812012 0.05209018 0.59187101 0.001 801 | 800 0.91047355 0.48596453 0.02546621 0.001 802 | 801 0.16118563 0.06755347 0.42291794 0.001 803 | 802 0.11332209 0.61701387 0.42483198 0.001 804 | 803 0.23170102 0.65274099 0.46771411 0.001 805 | 804 0.63964585 0.91445032 0.58182428 0.001 806 | 805 0.13969607 0.60577515 0.16477159 0.001 807 | 806 0.34225841 0.68971221 0.66635826 0.001 808 | 807 0.04652458 0.63167146 0.6219192 0.001 809 | 808 0.88745175 0.85401669 0.45002379 0.001 810 | 809 0.34620882 0.87019696 0.4796704 0.001 811 | 810 0.44630771 0.6453833 0.87551877 0.001 812 | 811 0.03644468 0.81957864 0.50950005 0.001 813 | 812 0.3330506 0.32462027 0.6707041 0.001 814 | 813 0.40303106 0.30438203 0.68035219 0.001 815 | 814 0.50576423 0.07843912 0.25042113 0.001 816 | 815 0.03112852 0.39598314 0.54182336 0.001 817 | 816 0.74942088 0.22221796 0.31037711 0.001 818 | 817 0.2106903 0.33543289 0.34436995 0.001 819 | 818 0.21152201 0.56710212 0.17557643 0.001 820 | 819 0.770769 0.26523619 0.69139031 0.001 821 | 820 0.18459238 0.11627125 0.38792804 0.001 822 | 821 0.56110666 0.25122818 0.15410109 0.001 823 | 822 0.64813678 0.2107363 0.59796821 0.001 824 | 823 0.8362276 0.42844763 0.86468544 0.001 825 | 824 0.11590052 0.73833333 0.81301818 0.001 826 | 825 0.35326056 0.13538348 0.51685585 0.001 827 | 826 0.01544077 0.14819083 0.59288027 0.001 828 | 827 0.57548019 0.85236674 0.27122658 0.001 829 | 828 0.78834775 0.90796245 0.08402436 0.001 830 | 829 0.70133174 0.7994712 0.56549736 0.001 831 | 830 0.5903745 0.83164767 0.11040119 0.001 832 | 831 0.963743 0.22075908 0.66566576 0.001 833 | 832 0.4040865 0.18753183 0.42541733 0.001 834 | 833 0.20646619 0.4913867 0.81383497 0.001 835 | 834 0.29398624 0.21352417 0.45240822 0.001 836 | 835 0.53377115 0.74025895 0.97507193 0.001 837 | 836 0.9981822 0.9348863 0.66137993 0.001 838 | 837 0.95522804 0.80020301 0.44792423 0.001 839 | 838 0.83750644 0.9164242 0.26558639 0.001 840 | 839 0.05028933 0.6492607 0.34947626 0.001 841 | 840 0.17415924 0.73652511 0.59028421 0.001 842 | 841 0.98348552 0.72522385 0.16290524 0.001 843 | 842 0.91102342 0.99211087 0.55243454 0.001 844 | 843 0.99093631 0.42197993 0.34829422 0.001 845 | 844 0.52406703 0.70279007 0.33260485 0.001 846 | 845 0.9690492 0.79120415 0.01555398 0.001 847 | 846 0.69581371 0.94736649 0.63847468 0.001 848 | 847 0.91089862 0.73380523 0.85495807 0.001 849 | 848 0.88993297 0.96566849 0.37995362 0.001 850 | 849 0.90972834 0.11831897 0.7585456 0.001 851 | 850 0.24826962 0.9284114 0.61149528 0.001 852 | 851 0.42570804 0.7522349 0.99759165 0.001 853 | 852 0.45435891 0.10513976 0.63979563 0.001 854 | 853 0.19423773 0.25128462 0.45978976 0.001 855 | 854 0.35653011 0.51343763 0.83493097 0.001 856 | 855 0.941235 0.34965882 0.18050268 0.001 857 | 856 0.20564579 0.09416389 0.12725391 0.001 858 | 857 0.09255051 0.84868579 0.12577775 0.001 859 | 858 0.12953635 0.3300403 0.84641942 0.001 860 | 859 0.33114694 0.52807596 0.7485218 0.001 861 | 860 0.68801382 0.97495966 0.99493534 0.001 862 | 861 0.68898933 0.47657815 0.06595846 0.001 863 | 862 0.81732111 0.27107539 0.08677917 0.001 864 | 863 0.96006963 0.43598715 0.33020086 0.001 865 | 864 0.73162447 0.65509189 0.92519067 0.001 866 | 865 0.12876977 0.35260608 0.81094637 0.001 867 | 866 0.41627467 0.60549975 0.54703933 0.001 868 | 867 0.76769472 0.70166295 0.55886846 0.001 869 | 868 0.97428476 0.71391968 0.53260258 0.001 870 | 869 0.68652133 0.36931107 0.94961509 0.001 871 | 870 0.80557474 0.83139517 0.36381736 0.001 872 | 871 0.67116061 0.16642256 0.54167544 0.001 873 | 872 0.19701594 0.70211927 0.49915254 0.001 874 | 873 0.38524802 0.42824341 0.74948465 0.001 875 | 874 0.55682757 0.15139048 0.0742116 0.001 876 | 875 0.49913883 0.90424433 0.71688803 0.001 877 | 876 0.03289238 0.55387677 0.00959149 0.001 878 | 877 0.39736043 0.14217416 0.3207638 0.001 879 | 878 0.56322849 0.82930147 0.85246316 0.001 880 | 879 0.71536104 0.51362988 0.20273967 0.001 881 | 880 0.92229571 0.01296825 0.0316103 0.001 882 | 881 0.17506912 0.98057234 0.11567383 0.001 883 | 882 0.40341444 0.49977157 0.12531649 0.001 884 | 883 0.1564789 0.78502027 0.18312752 0.001 885 | 884 0.77673186 0.66676265 0.224202 0.001 886 | 885 0.93776018 0.12540382 0.31380656 0.001 887 | 886 0.46224449 0.10352539 0.86047264 0.001 888 | 887 0.53198109 0.51275183 0.1233216 0.001 889 | 888 0.29082077 0.2479571 0.9230179 0.001 890 | 889 0.70215977 0.36271127 0.97242912 0.001 891 | 890 0.70030924 0.83785896 0.17761147 0.001 892 | 891 0.17429664 0.61910447 0.44997502 0.001 893 | 892 0.83658098 0.92095438 0.49608658 0.001 894 | 893 0.497453 0.863967 0.18105627 0.001 895 | 894 0.52849295 0.07455274 0.60816846 0.001 896 | 895 0.63375626 0.59816006 0.66371332 0.001 897 | 896 0.61872605 0.00546136 0.93165823 0.001 898 | 897 0.44059175 0.19100511 0.29058016 0.001 899 | 898 0.8193377 0.95388002 0.45346661 0.001 900 | 899 0.36108067 0.64831649 0.11456688 0.001 901 | 900 0.39149828 0.55100504 0.71558784 0.001 902 | 901 0.79115688 0.74114343 0.59960358 0.001 903 | 902 0.65536631 0.43348189 0.75794799 0.001 904 | 903 0.49974581 0.59790269 0.59652341 0.001 905 | 904 0.48313958 0.80118331 0.66575319 0.001 906 | 905 0.89571828 0.51867025 0.83055804 0.001 907 | 906 0.75464779 0.31022211 0.75388918 0.001 908 | 907 0.3946372 0.573419 0.43620119 0.001 909 | 908 0.27955298 0.73029172 0.22003342 0.001 910 | 909 0.40025066 0.58521953 0.77184521 0.001 911 | 910 0.67714603 0.37004694 0.5148452 0.001 912 | 911 0.79721346 0.80234815 0.88722531 0.001 913 | 912 0.6072394 0.38464555 0.92619316 0.001 914 | 913 0.78913202 0.59393455 0.01190222 0.001 915 | 914 0.5541932 0.07182676 0.10668997 0.001 916 | 915 0.13630109 0.64357218 0.8016987 0.001 917 | 916 0.99417583 0.60507654 0.12632391 0.001 918 | 917 0.47856781 0.26192401 0.72344604 0.001 919 | 918 0.62140171 0.64602267 0.35231109 0.001 920 | 919 0.28654692 0.28436082 0.27931306 0.001 921 | 920 0.66036399 0.78043417 0.39034525 0.001 922 | 921 0.82246679 0.34858914 0.81281495 0.001 923 | 922 0.0202783 0.82976126 0.11862735 0.001 924 | 923 0.59853508 0.47977779 0.69018658 0.001 925 | 924 0.42399162 0.71109505 0.94349328 0.001 926 | 925 0.55542101 0.15133002 0.7769657 0.001 927 | 926 0.6768597 0.13752636 0.14317116 0.001 928 | 927 0.0986118 0.25945104 0.97445366 0.001 929 | 928 0.69682606 0.49779334 0.65352798 0.001 930 | 929 0.38837364 0.47092118 0.15661113 0.001 931 | 930 0.55539343 0.59916533 0.59545287 0.001 932 | 931 0.33750758 0.05732906 0.64322506 0.001 933 | 932 0.34353431 0.58335706 0.2493405 0.001 934 | 933 0.87700019 0.68137313 0.05152371 0.001 935 | 934 0.91241794 0.09454352 0.21870118 0.001 936 | 935 0.06032799 0.01725977 0.89670742 0.001 937 | 936 0.34843831 0.76973764 0.77093264 0.001 938 | 937 0.72058963 0.29536943 0.7179822 0.001 939 | 938 0.9352415 0.208383 0.33882925 0.001 940 | 939 0.67742378 0.7124112 0.8837767 0.001 941 | 940 0.75789098 0.36582238 0.33765111 0.001 942 | 941 0.8387995 0.94133319 0.79242484 0.001 943 | 942 0.66987175 0.12034285 0.43038336 0.001 944 | 943 0.28401 0.73002457 0.71667496 0.001 945 | 944 0.11621704 0.47313175 0.15238265 0.001 946 | 945 0.3319546 0.73138217 0.32158694 0.001 947 | 946 0.78320253 0.99132272 0.84480434 0.001 948 | 947 0.15410628 0.32544579 0.06986684 0.001 949 | 948 0.63728143 0.82761442 0.00944331 0.001 950 | 949 0.33042281 0.93050453 0.87319868 0.001 951 | 950 0.11171867 0.37989575 0.03860911 0.001 952 | 951 0.37766416 0.6394561 0.00112228 0.001 953 | 952 0.55253919 0.67162612 0.18525835 0.001 954 | 953 0.3678324 0.87983726 0.11150709 0.001 955 | 954 0.72170784 0.70298973 0.12934774 0.001 956 | 955 0.72002797 0.71348839 0.03824021 0.001 957 | 956 0.73369761 0.1743207 0.92240903 0.001 958 | 957 0.27234255 0.91678727 0.09902396 0.001 959 | 958 0.08055323 0.30905867 0.00086762 0.001 960 | 959 0.19636763 0.65441305 0.56109458 0.001 961 | 960 0.85697545 0.98363663 0.47688617 0.001 962 | 961 0.82987733 0.51832037 0.25201317 0.001 963 | 962 0.99185402 0.87840738 0.73015492 0.001 964 | 963 0.66600035 0.29525486 0.5143199 0.001 965 | 964 0.3390571 0.8001838 0.22842453 0.001 966 | 965 0.28939837 0.85352376 0.05831651 0.001 967 | 966 0.84283725 0.95858776 0.93708709 0.001 968 | 967 0.5782529 0.2094126 0.94793476 0.001 969 | 968 0.58810963 0.82140196 0.07631648 0.001 970 | 969 0.2497136 0.01123584 0.67373321 0.001 971 | 970 0.29660398 0.27657181 0.78246513 0.001 972 | 971 0.77883776 0.88639183 0.16484835 0.001 973 | 972 0.80309351 0.11541154 0.51595536 0.001 974 | 973 0.484887 0.94974472 0.56504993 0.001 975 | 974 0.2579718 0.83243772 0.67716692 0.001 976 | 975 0.32723421 0.10925459 0.21018918 0.001 977 | 976 0.23119493 0.99819467 0.46376276 0.001 978 | 977 0.32121043 0.20734171 0.12444217 0.001 979 | 978 0.45724552 0.85470765 0.20909943 0.001 980 | 979 0.97748105 0.85610268 0.71419141 0.001 981 | 980 0.8956506 0.46287581 0.57008228 0.001 982 | 981 0.01192596 0.77858154 0.98153025 0.001 983 | 982 0.64308433 0.126799 0.8719549 0.001 984 | 983 0.05316357 0.90492864 0.19021328 0.001 985 | 984 0.15413621 0.90674185 0.38217544 0.001 986 | 985 0.49170798 0.57625415 0.56805084 0.001 987 | 986 0.75611236 0.66014476 0.32567621 0.001 988 | 987 0.65559058 0.76447648 0.31621959 0.001 989 | 988 0.23284425 0.53476836 0.94793933 0.001 990 | 989 0.17973427 0.00776669 0.02782074 0.001 991 | 990 0.82548667 0.6753512 0.78338845 0.001 992 | 991 0.17255987 0.24169668 0.61259232 0.001 993 | 992 0.79676918 0.33450707 0.39513143 0.001 994 | 993 0.0720089 0.1302031 0.11215154 0.001 995 | 994 0.0469973 0.26974783 0.71517303 0.001 996 | 995 0.96164228 0.50115606 0.38383565 0.001 997 | 996 0.80444318 0.20345848 0.55305738 0.001 998 | 997 0.57326697 0.44233846 0.34384189 0.001 999 | 998 0.90272227 0.13988908 0.91163352 0.001 1000 | 999 0.82642614 0.2254418 0.10422599 0.001 1001 | --------------------------------------------------------------------------------