From fca3a9ea1dbfd318456b0cf31bdd383dbedbe19f Mon Sep 17 00:00:00 2001 From: James E McClure Date: Mon, 26 Jul 2021 08:20:53 -0400 Subject: [PATCH 01/40] update examples --- example/Bubble/input.db | 6 +- example/MicroModel/BlobSize.in | 2 - example/MicroModel/Color.in | 6 - example/MicroModel/DiscPack.in | 144 - example/MicroModel/Domain.in | 3 - example/MicroModel/FullMicromodel.discs | 5466 +++++++++++++++++++++++ example/MicroModel/GenerateCases.sh | 47 + example/MicroModel/ReadDiscPack.R | 21 + example/Piston/input.db | 6 +- example/Plates/input.db | 6 +- 10 files changed, 5549 insertions(+), 158 deletions(-) delete mode 100644 example/MicroModel/BlobSize.in delete mode 100644 example/MicroModel/Color.in delete mode 100644 example/MicroModel/DiscPack.in delete mode 100644 example/MicroModel/Domain.in create mode 100644 example/MicroModel/FullMicromodel.discs create mode 100755 example/MicroModel/GenerateCases.sh create mode 100644 example/MicroModel/ReadDiscPack.R diff --git a/example/Bubble/input.db b/example/Bubble/input.db index dd6d956b..727cca04 100644 --- a/example/Bubble/input.db +++ b/example/Bubble/input.db @@ -47,4 +47,8 @@ Analysis { } Visualization { -} \ No newline at end of file +} + +FlowAdaptor { + +} diff --git a/example/MicroModel/BlobSize.in b/example/MicroModel/BlobSize.in deleted file mode 100644 index f3317704..00000000 --- a/example/MicroModel/BlobSize.in +++ /dev/null @@ -1,2 +0,0 @@ -1 -32 32 32 diff --git a/example/MicroModel/Color.in b/example/MicroModel/Color.in deleted file mode 100644 index c306a33b..00000000 --- a/example/MicroModel/Color.in +++ /dev/null @@ -1,6 +0,0 @@ -0.7 -1.0e-2 0.95 -1.0 -0.7 -0.0 0.0 0.0 -0 1 1.04 0.96 -900000 20000 1e-5 diff --git a/example/MicroModel/DiscPack.in b/example/MicroModel/DiscPack.in deleted file mode 100644 index 8ffc38d4..00000000 --- a/example/MicroModel/DiscPack.in +++ /dev/null @@ -1,144 +0,0 @@ -33.13248649 29.93643243 15.41628378 -75.07072973 26.66563068 16.99835135 -118.9166622 26.51018919 13.54747297 -155.9032432 26.54839365 18.37214865 -194.4647297 25.64848784 13.23047838 -236.4466216 27.04415726 18.86951351 -276.9660811 27.18572081 18.66178378 -316.6336486 27.16016042 17.04760811 -360.6031081 29.63283514 14.62525676 -400.4937838 26.33180541 15.91213514 -436.6832432 29.38145946 15.30281081 -479.5852703 27.09887028 18.76375676 -15.17307297 69.60128378 14.82944595 -53.0137973 64.87014865 16.21706757 -94.52747297 68.84901351 17.6057027 -135.5813919 65.70918919 16.92474324 -173.2494595 69.96463514 14.05135135 -215.6589189 68.16136486 17.94732432 -259.9767568 70.38693243 14.80982432 -297.0702703 67.83155405 14.68744595 -336.5431081 67.57271622 17.27831081 -378.3740541 67.72916216 18.13277027 -419.2805405 66.79117568 17.42808108 -455.1844595 72.06137838 13.27178784 -33.72422973 108.8409189 17.24389189 -74.43232432 108.0137838 18.75 -114.1253784 106.4523919 17.1622027 -153.882027 112.3773514 13.02102703 -199.0522973 111.1353243 15.15556757 -241.1697297 107.2128378 13.80640541 -277.315 108.4926486 18.42555405 -320.4716216 106.1688919 15.76947297 -354.8572973 105.7547973 13.44669865 -400.797973 110.3642297 16.28766216 -439.5955405 107.9637838 18.33110811 -482.8833784 107.3503784 13.76293243 -10.30476351 149.3496351 15.64486486 -55.28555405 147.8185946 16.92521622 -95.24567568 149.0092432 17.58089189 -131.8110405 150.626527 13.8865 -179.3263514 146.4626757 14.22206757 -216.0708108 152.3747568 14.82614865 -261.7548649 147.6711757 13.01481622 -299.3959459 147.4904324 13.76047297 -339.8782432 149.7220541 16.66758108 -373.3464865 152.5632297 13.45467297 -417.9712162 147.855973 17.36840541 -458.4025676 144.5771622 14.61705405 -33.32618919 191.2175676 12.4216527 -74.30910811 189.2091892 18.52312162 -114.6439054 190.2966216 16.95763514 -158.2144595 191.8867568 15.55116216 -194.6536486 189.0091892 15.71814865 -237.9637838 189.242027 17.27986486 -271.4318919 186.4898649 13.0739527 -317.7631081 188.4841892 16.13393243 -358.1116216 191.2745946 14.83137838 -398.7190541 189.4286486 18.13921622 -439.5593243 189.8759459 16.8382973 -482.1985135 194.4328378 12.19701081 -13.90195446 229.4845946 18.36889189 -55.69509459 226.9613514 16.02147297 -96.98522973 232.4032432 14.46966216 -137.4593243 227.1902703 13.4368527 -174.2690541 228.4505405 16.73159459 -216.2844595 229.237027 18.25581081 -259.6358108 233.6717568 12.89051757 -298.1172973 229.1837838 15.79105405 -338.9263514 229.9989189 16.83474324 -378.4617568 230.0036486 18.49422973 -418.9406757 228.4566216 13.19394865 -459.3066216 230.6732432 17.26921622 -35.56972973 273.1122973 15.46828378 -72.91724324 272.0410811 16.95751351 -114.3243243 273.7995946 15.17266216 -158.1804054 267.382973 13.8992027 -194.7917568 269.7763514 17.70321622 -236.57 271.7548649 12.18126081 -272.412973 266.6922973 13.18252973 -317.5945946 270.2414865 18.8062027 -359.0810811 268.9272973 17.10451351 -401.6145946 268.1164865 13.57114865 -434.9897297 265.9721622 12.38897297 -479.9452703 270.4847297 12.98088378 -13.27824108 310.6754054 18.66364865 -53.25386486 312.0385135 14.46228378 -92.49813514 308.3451351 15.20474324 -136.1003514 309.7871622 17.76025676 -174.5641892 311.4295946 13.06244865 -219.4805405 310.8893243 14.40940541 -258.0839189 310.0159459 17.41775676 -297.6322973 310.9914865 18.51806757 -337.9448649 310.7555405 17.73358108 -374.9710811 312.2205405 14.25995946 -422.8451351 314.0112162 14.40621622 -459.8067568 311.2154054 13.47336486 -34.99885135 351.7381081 17.47081081 -75.33945946 351.677027 15.52572973 -114.8586486 351.3459459 18.89374324 -155.7139189 350.8706757 18.07736486 -191.6158108 352.282973 12.90032838 -234.2532432 350.5644595 14.65478378 -275.127027 350.5708108 16.79345946 -317.652973 352.3060811 16.43624324 -363.8067568 347.8472973 12.7394473 -401.5713514 349.2537838 14.74306757 -436.0778378 349.6571622 14.30860811 -482.565 353.0252703 15.15274324 -10.92297703 391.8589189 15.69475676 -52.44290541 394.7612162 15.2132027 -93.64185135 390.0597297 15.0062027 -139.127527 389.3374324 14.73910811 -175.5394595 391.7282432 18.06841892 -216.4606757 392.4894595 17.91210811 -251.7971622 390.4447297 12.52764324 -298.7958108 393.1183784 16.58391892 -336.7648649 392.7705405 16.06710811 -379.9774324 392.8135135 16.87058108 -417.1693243 392.1031081 16.41077027 -459.4625676 391.9014865 18.88939189 -32.60527027 431.387973 13.79572973 -73.08481081 428.7002703 14.2487973 -114.5770541 432.5933784 17.63783784 -156.0283784 432.7117568 17.82533784 -198.9813514 432.5832432 14.1537027 -237.5352703 434.3167568 15.54622973 -277.7677027 433.0071622 15.02437838 -316.0105405 434.197973 16.34566216 -359.23 437.6654054 13.07579189 -401.887027 430.8952703 15.38594595 -442.0587838 434.6848649 12.87081892 -481.2160811 438.0641892 13.1349027 -13.43983284 473.0802703 17.79305405 -58.56352703 468.0102703 12.698 -95.47004054 472.9767568 16.32575676 -134.9401622 472.807027 18.70305405 -173.3897297 469.9112162 15.53236486 -216.2163514 473.1051351 18.61358108 -256.3348649 474.0559459 14.83377027 -294.8790541 471.1768919 14.53377027 -339.6306757 472.1563514 16.27194595 -377.4156757 471.6939189 17.32056757 -423.6267568 474.1678378 12.76715541 -459.5241892 471.4267568 16.65775676 diff --git a/example/MicroModel/Domain.in b/example/MicroModel/Domain.in deleted file mode 100644 index 36cf8427..00000000 --- a/example/MicroModel/Domain.in +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1 -10 400 400 -20.0 500.0 500.0 diff --git a/example/MicroModel/FullMicromodel.discs b/example/MicroModel/FullMicromodel.discs new file mode 100644 index 00000000..20c9e23b --- /dev/null +++ b/example/MicroModel/FullMicromodel.discs @@ -0,0 +1,5466 @@ +1.0117 0.4188 0.0097215 +0.53094 0.56203 0.0086965 +1.3888 0.78624 0.0087372 +0.42508 1.05073 0.0083217 +1.21914 1.28088 0.0089188 +0.75246 1.40254 0.0090588 +1.52686 1.10526 0.0078406 +1.35902 0.43932 0.0090721 +0.70487 0.267 0.008467 +0.25124 0.76173 0.0075149 +0.27846 1.27713 0.010879 +1.21688 1.55486 0.0096255 +1.18083 0.990544 0.011038 +1.10387 0.69657 0.0088069 +0.61633 0.837374 0.0078989 +0.8143 0.62165 0.0096243 +1.10751 0.18104 0.0085139 +0.37674 0.36168 0.0082786 +1.63965 0.76709 0.0079679 +0.939193 1.61296 0.010503 +0.48125 1.48725 0.0089262 +0.950715 1.18551 0.0091055 +1.46735 1.36446 0.0094886 +0.17015 1.00443 0.0089028 +1.50254 0.60588 0.010014 +0.915123 0.23421 0.0095171 +0.32698 0.56472 0.0078616 +1.68341 0.973576 0.0093506 +1.31753 0.23661 0.0084448 +0.51289 0.20563 0.0091211 +0.70392 0.46173 0.010408 +0.42051 0.857279 0.0087251 +1.37417 0.97669 0.0093866 +1.52489 0.37482 0.0069661 +1.18125 0.51445 0.0081372 +0.75345 0.09273 0.0093295 +0.12474 0.62666 0.0089533 +1.21643 0.82832 0.0082621 +0.980837 0.58242 0.0085934 +1.36309 1.60408 0.011024 +0.77822 0.78404 0.0067642 +0.13351 1.26682 0.011883 +1.03104 0.05603 0.008075 +0.22815 0.36602 0.0098351 +1.23377 1.69908 0.0086085 +1.72501 0.66183 0.0083359 +0.68858 1.09507 0.0093281 +0.6779 1.6247 0.01025 +1.02468 1.40312 0.0092536 +1.62833 1.25743 0.0071396 +1.37932 1.2049 0.0099728 +0.08313 0.840261 0.0086278 +1.26946 0.65248 0.0087438 +0.54586 0.3802 0.008591 +1.17796 0.34521 0.0080609 +1.53239 0.8973312 0.0073021 +0.65713 0.67188 0.0074436 +1.63433 0.50868 0.010096 +0.935249 0.73778 0.0079128 +1.05224 0.875757 0.010019 +0.31252 1.46235 0.0095498 +1.33396 1.45116 0.0071065 +0.42937 0.69698 0.0099506 +0.865867 0.47547 0.01199 +1.06524 1.72257 0.010275 +0.21859 1.15346 0.0089904 +1.11932 1.15047 0.0086585 +0.30403 0.952701 0.0081525 +0.887514 1.75321 0.008186 +1.48482 1.51469 0.011746 +0.42972 1.61526 0.010207 +0.0598500000000001 1.09424 0.0078134 +0.36855 0.22777 0.0088364 +1.23903 0.11416 0.0092462 +1.75968 0.847472 0.0096538 +0.19627 0.51329 0.0082513 +0.8933499 0.09973 0.0081653 +0.63879 0.15365 0.00876 +1.41449 0.3246 0.0094673 +1.74455 1.09484 0.0091279 +1.31783 0.884207 0.0072101 +1.06559 0.51366 0.0086203 +0.24244 0.64493 0.0093116 +0.79883 0.20309 0.0086613 +0.56997 1.28419 0.0087177 +1.00113 1.03299 0.010076 +0.73492 0.943413 0.0092064 +0.79169 1.23344 0.0086517 +1.26453 1.12214 0.0089056 +0.57091 0.993107 0.011899 +1.06588 1.54094 0.0087362 +0.801978 1.54525 0.0083872 +0.34975 1.16545 0.0106 +1.15984 1.41608 0.0087865 +1.60275 1.39265 0.010303 +1.08452 1.28391 0.0098995 +0.55096 1.68756 0.0082961 +0.02879 0.962205 0.0087601 +0.74785 1.74771 0.0087156 +1.50084 1.22363 0.0077321 +0.823353 0.3401 0.0078514 +0.20599 0.869578 0.010128 +1.06108 0.29422 0.0089895 +1.5104 0.77815 0.0083275 +0.45823 0.46431 0.010462 +1.33554 1.3247 0.0077454 +0.51628 0.77956 0.0092929 +1.37155 0.56761 0.0094606 +1.60559 0.65142 0.0081956 +1.41003 1.09698 0.0069944 +1.52651 0.48797 0.0088206 +1.63177 1.06865 0.0074151 +0.64765 0.56473 0.0089471 +0.0997400000000001 0.72723 0.0088314 +1.30574 0.33829 0.0076561 +1.21212 0.23598 0.0077796 +0.29032 0.45998 0.0084863 +0.981969 0.15384 0.0086375 +1.42543 0.884631 0.0065785 +1.72565 1.20479 0.009232 +0.2567 1.05033 0.0073056 +1.63643 0.88022 0.007941 +0.58911 0.07075 0.010412 +0.42756 0.58558 0.0075154 +0.32327 1.57072 0.0082885 +1.11338 0.41628 0.0075087 +0.47226 0.30654 0.0085843 +0.60326 0.25581 0.00912 +1.63235 0.40024 0.0082426 +0.77663 0.52724 0.0073145 +0.65814 0.36012 0.0077988 +0.40923 0.957666 0.0084795 +0.36141 0.77218 0.009984 +1.27086 0.962884 0.0091237 +0.34197 0.66245 0.0068949 +1.17903 0.61867 0.0078513 +1.11549 0.79593 0.007176 +0.978368 0.829276 0.0081773 +0.1114 1.17947 0.0077298 +1.06729 0.60382 0.011165 +1.32107 0.14597 0.0080649 +1.44826 0.40151 0.0086346 +1.28388 0.75302 0.0078003 +1.73142 0.75489 0.0097395 +1.16094 0.8965193 0.0074238 +0.71645 0.18194 0.0101 +0.960337 0.4905 0.0082319 +0.9010818 0.65157 0.007536 +0.68072 0.76977 0.0074504 +0.43984 0.16511 0.0087093 +1.46092 0.24309 0.00858 +0.869791 0.810026 0.008931 +0.75001 0.6936 0.007632 +0.20279 1.31279 0.0072073 +1.38758 1.51541 0.0095295 +0.29739 0.32912 0.010266 +1.09948 0.0930300000000001 0.0096896 +0.15079 1.09491 0.010698 +1.28356 1.62219 0.011496 +0.21284 1.23195 0.0095249 +0.19135 0.58265 0.0096957 +0.826946 0.13153 0.0094295 +0.74635 0.04069 0.0080377 +0.07565 0.60628 0.0089472 +0.847842 1.06424 0.0085888 +0.54744 1.13392 0.0102 +0.42379 1.29423 0.0099499 +0.901067 1.32013 0.0066672 +0.60941 1.41702 0.009411 +0.915783 1.48215 0.0095044 +0.56956 1.56403 0.0089286 +0.831398 1.65997 0.0086634 +1.13814 1.63554 0.006989 +0.54407 0.67287 0.0078718 +1.38024 0.68411 0.0066582 +1.24032 0.42809 0.010027 +0.63925 1.74909 0.0076187 +0.959894 0.32109 0.0092821 +0.59248 0.47324 0.0092913 +1.27896 0.55513 0.0094684 +0.50516 0.921837 0.0081533 +1.55544 1.00576 0.0079203 +1.25949 1.38771 0.0079815 +1.02928 0.74573 0.0095635 +1.1999 0.71679 0.0079803 +0.30164 0.85438 0.010052 +0.841855 0.71591 0.0074593 +1.6471 1.17039 0.0092161 +1.5501 1.31712 0.011603 +0.809002 0.883112 0.012794 +0.72183 0.852773 0.0079941 +0.16311 0.78879 0.010229 +0.1215 0.917685 0.010514 +0.39723 1.52956 0.0094426 +0.875791 0.55756 0.0086403 +1.3003 1.5375 0.0082403 +0.72746 0.60313 0.009267 +0.982781 1.70225 0.0094002 +1.10249 1.04828 0.0057072 +0.26902 1.37152 0.0086224 +1.31809 1.04709 0.0077356 +1.43679 1.28093 0.0099608 +1.30296 1.24325 0.0092584 +1.53108 0.68622 0.0089324 +1.4364 1.44094 0.009305 +0.74161 0.38785 0.0068083 +0.64796 0.928919 0.011276 +1.20033 1.18673 0.0081906 +1.434 0.48945 0.0092253 +1.03386 1.20137 0.011804 +1.54656 1.4605 0.010167 +0.17052 0.6936 0.0096899 +0.38776 0.5097 0.0082318 +1.46299 1.15696 0.0086633 +0.98604 0.935661 0.0081461 +1.5807 0.57625 0.0076183 +0.3392 1.07885 0.0088034 +1.03885 0.21652 0.0098815 +1.14959 1.33297 0.01078 +1.14127 0.27189 0.0076611 +1.15063 1.50368 0.0079189 +1.6657 0.60094 0.0091728 +1.5728 0.840269 0.0085226 +0.28265 1.19494 0.0098426 +0.46958 0.38902 0.0089432 +0.43702 0.76813 0.0080425 +0.55634 0.13142 0.0087458 +1.22515 0.9018643 0.0084837 +1.75462 1.01381 0.010911 +1.34116 1.13131 0.009747 +0.23782 0.98285 0.0089155 +1.26371 0.28324 0.0080234 +1.57967 0.44841 0.0086463 +0.68663 0.09502 0.0072851 +0.94393 0.04493 0.0085173 +0.1763 0.43885 0.0085545 +1.13262 0.56221 0.0082399 +0.54111 0.29924 0.0068434 +1.38825 0.23722 0.010261 +1.26005 0.18149 0.0096997 +1.18379 0.16347 0.0093356 +0.44637 0.23611 0.0092014 +1.68686 0.822118 0.0091133 +1.72614 0.9089071 0.0076659 +0.39883 0.2923 0.010696 +1.67071 0.70206 0.00776 +0.13245 0.53238 0.0093548 +0.842853 0.05137 0.0095587 +0.09139 1.0246 0.01129 +0.785 0.27837 0.011441 +0.26999 0.51948 0.0086015 +0.911499 0.16409 0.0075615 +1.44649 0.819018 0.0092582 +1.47939 0.31015 0.0085615 +1.06672 0.36818 0.0085201 +0.66537 0.21804 0.010178 +1.3777 0.37838 0.010366 +1.03961 0.11943 0.0087193 +0.32069 0.40342 0.0081779 +0.2853 0.69533 0.0083731 +1.42782 1.57668 0.010355 +1.31982 0.8154 0.008697 +0.64832 0.30378 0.0070783 +0.03222 0.73096 0.0077633 +1.56658 0.33079 0.0083896 +1.17887 1.72875 0.0098728 +0.2018 1.06114 0.0098714 +1.49591 0.43033 0.009363 +0.36965 0.60872 0.010341 +0.15628 1.14989 0.0078631 +0.15714 1.2098 0.0083218 +0.76277 0.14468 0.0088799 +0.29439 0.61542 0.0069999 +1.01457 0.46897 0.0088964 +1.3765 0.916472 0.0081322 +0.37229 0.70836 0.0085178 +1.12328 0.48331 0.0098502 +1.03612 0.55953 0.0093299 +0.29535 0.27641 0.0080247 +1.12 0.849519 0.010094 +1.13762 0.06487 0.0057074 +0.09006 0.67187 0.0075063 +0.927667 0.80464 0.0090102 +0.49028 0.16354 0.0093354 +0.12624 1.3218 0.0084572 +1.37792 1.64848 0.0097066 +0.73761 0.74843 0.0092535 +1.33248 1.6446 0.011682 +1.27877 1.68298 0.0084408 +0.0652900000000001 1.14591 0.0088143 +0.10379 1.23589 0.0092989 +1.75211 0.70748 0.0084304 +1.07872 0.05842 0.0088846 +0.25127 0.33105 0.0090183 +0.38621 0.17767 0.0098825 +0.23092 1.27564 0.01245 +0.18194 1.26638 0.0098089 +0.69859 1.50105 0.0087467 +0.68496 1.30505 0.0084746 +0.50814 1.37627 0.0081957 +0.37853 1.38869 0.0081799 +0.46231 1.19394 0.0090277 +0.911902 0.994979 0.0088875 +0.856514 1.40669 0.0083514 +0.991135 1.27936 0.007907 +0.850111 1.15917 0.011144 +1.46701 0.96651 0.010968 +1.00615 0.66527 0.009932 +1.02996 1.62844 0.0082943 +1.2388 1.46748 0.012373 +1.06916 0.962026 0.0095489 +0.90042898 0.38253 0.0086472 +1.00328 1.12012 0.0086249 +0.65406 1.01858 0.0099746 +1.17669 1.07863 0.010717 +0.6021 0.74971 0.0092767 +1.45508 0.72905 0.010915 +0.76625 1.03151 0.0095823 +1.09105 1.45237 0.010459 +0.5126 1.05767 0.010149 +0.75533 1.61616 0.00971 +1.01019 1.48942 0.0087714 +1.58558 1.1999 0.0085849 +1.37945 1.38903 0.0086007 +0.50991 1.61688 0.0095658 +0.55776 1.48567 0.0086764 +0.882291 1.55548 0.0098041 +0.59442 0.60782 0.0091552 +1.59055 0.942464 0.0089511 +0.38457 0.43427 0.0084095 +0.9049393 1.67917 0.0094509 +1.14676 1.24911 0.010073 +0.781 0.44789 0.0090136 +0.36972 0.8946551 0.0089606 +0.35664 1.25215 0.0092127 +1.07787 1.36113 0.0085101 +1.33063 0.51076 0.009144 +0.3642 1.00936 0.0084644 +0.47275 0.63657 0.0090657 +0.57068 0.920201 0.0091477 +0.5412 0.850188 0.0080016 +0.69288 1.7001 0.0085395 +0.812862 1.72664 0.009568 +1.42903 0.61596 0.0095562 +0.71081 0.53579 0.0097616 +1.20453 1.63082 0.0089508 +0.60127 1.63827 0.0079304 +1.53612 1.38957 0.0094258 +1.57362 0.73942 0.0093789 +0.28776 1.12143 0.0095152 +0.851036 0.27462 0.009017 +1.61873 1.32756 0.0091038 +1.70223 1.27636 0.0080237 +0.20758 1.39285 0.0085539 +0.23361 0.824207 0.0084342 +1.69655 1.04481 0.0079243 +1.24345 0.49332 0.0067815 +1.35234 0.29748 0.0084382 +0.51745 0.49909 0.0083767 +1.33921 0.62699 0.0072973 +1.1772 0.44178 0.0061674 +0.46064 0.53055 0.0076215 +0.61242 0.40836 0.0092306 +1.00989 0.27363 0.010256 +1.47809 0.53952 0.0099905 +1.03869 0.819042 0.010479 +1.26253 1.1821 0.0072394 +1.44512 1.21088 0.008265 +0.15084 0.865061 0.010494 +0.18802 0.939767 0.0080279 +0.26153 0.89989699 0.0093774 +0.58438 0.19251 0.0088515 +1.49323 1.29511 0.0084913 +1.15319 1.56109 0.0072922 +1.24488 0.35642 0.006568 +0.70854 0.33193 0.0087604 +0.59673 0.33496 0.010236 +1.35003 1.26893 0.0085381 +1.27423 1.31665 0.009557 +1.37353 0.848277 0.0085127 +0.0700500000000001 0.89924004 0.0065637 +1.30553 0.40498 0.0092972 +0.859237 0.18182 0.0065343 +1.3524 0.73486 0.0084337 +0.48549 0.73243 0.0072962 +0.47016 0.825225 0.009724 +0.06396 0.78041 0.010321 +0.34813 1.51157 0.0097405 +1.54169 0.64112 0.0090405 +1.11449 0.32679 0.0083844 +0.24364 0.44102 0.0097628 +0.977358 0.09668 0.0097107 +1.37761 1.04591 0.007615 +1.45941 1.10133 0.010342 +1.39824 1.15063 0.0074391 +1.12765 1.69676 0.0082964 +1.50991 0.838313 0.0084406 +1.20508 1.34214 0.0086029 +1.49678 1.45437 0.0078464 +1.01076 0.35182 0.0084162 +1.71577 1.15153 0.0080637 +1.27328 0.86021 0.0070692 +1.06342 0.43909 0.0094892 +0.64431 0.4962 0.0093659 +1.08746 0.24949 0.010136 +1.58249 0.50993 0.0074165 +0.980326 0.77165 0.0091432 +0.38128 1.58184 0.0085246 +1.24456 0.60517 0.0093901 +0.19009 0.64145 0.0095512 +0.75246 0.22622 0.0067018 +1.57251 1.0608 0.0079757 +0.5907 0.53377 0.0083598 +0.66336 0.6114 0.0089861 +1.35104 0.18843 0.0091316 +1.18806 0.77598 0.00803 +1.17693 0.10276 0.0075893 +0.34638 0.27337 0.0095447 +0.69509 0.71118 0.008708 +0.25245 1.43303 0.0083585 +1.2103 0.28423 0.0092428 +1.15384 0.21819 0.0078105 +0.33588 0.50019 0.0090644 +1.12492 0.62053 0.0093025 +0.24504 0.57657 0.010415 +0.30267 0.79832 0.0080695 +1.61993 0.827264 0.0076877 +1.67307 0.913974 0.011899 +0.72447 0.80302 0.0077159 +1.32243 0.946948 0.0059186 +0.32564 0.73125 0.010961 +1.58449 0.39702 0.0079631 +1.64694 0.45549 0.010158 +1.19299 0.939316 0.0094952 +0.42611 0.35464 0.0089195 +0.4899 0.26209 0.010352 +0.51311 0.33634 0.0096873 +0.70421 0.4104 0.0083667 +0.957404 0.2006 0.0077171 +0.9057299 0.848287 0.0091769 +0.39754 0.800251 0.0062722 +0.953478 0.882958 0.0076539 +0.996792 0.51673 0.0082779 +1.01811 1.73427 0.010032 +0.937393 1.78306 0.0088631 +0.22642 0.71359 0.0099938 +0.28499 1.00065 0.0095147 +0.60834 0.10974 0.0074909 +0.38959 0.64958 0.010932 +0.09182 0.972071 0.0082602 +1.16929 0.855417 0.0093466 +0.812757 0.55979 0.0081034 +1.16215 0.67683 0.007769 +1.18333 0.55888 0.0090066 +0.91231 0.51233 0.0082073 +1.66186 0.55469 0.0087514 +0.55322 0.24548 0.0083921 +1.47838 0.36508 0.0082294 +0.10201 1.11387 0.010053 +1.77847 0.8975081 0.008306 +0.71423 0.12905 0.0084341 +1.08727 0.75306 0.0068353 +0.919274 0.59754 0.0077865 +1.65896 0.65084 0.010503 +1.74185 0.962876 0.0079608 +0.65861 0.869914 0.0090765 +1.25957 0.70714 0.0095026 +1.26565 0.23351 0.0082725 +0.44714 0.915485 0.010142 +0.76411 0.841319 0.0067402 +1.74821 0.79742 0.0091686 +0.15669 0.48906 0.0085746 +0.8968825 0.04962 0.0078879 +0.879744 0.75402 0.00721 +1.7122 0.866925 0.0096504 +0.78944 0.7315 0.0071621 +0.0496300000000001 1.05053 0.0075057 +0.36884 0.55542 0.007406 +1.0569 0.16771 0.010583 +0.66887 0.820538 0.010224 +0.86292 0.66685 0.0086796 +0.8946742 0.69883 0.0087105 +0.76465 0.64027 0.0092661 +0.53775 0.08978 0.0096835 +0.78823 0.0589500000000001 0.0095079 +0.11248 0.58263 0.0093699 +1.08298 0.5503 0.010284 +0.976841 0.443 0.008873 +0.25707 1.23495 0.011608 +1.34065 1.4974 0.0085097 +0.19582 1.19149 0.010975 +0.1331 0.67083 0.010276 +0.1463 0.74249 0.0083049 +1.62231 0.60541 0.010901 +1.38766 1.56407 0.0074557 +1.43079 1.49665 0.0096628 +1.31031 1.09643 0.0099831 +1.68739 0.77977 0.010391 +1.31721 1.58097 0.0083942 +1.09288 1.75826 0.0096546 +0.25022 1.32907 0.0085758 +0.19584 1.10743 0.010393 +0.27701 0.37041 0.011043 +0.13399 1.04663 0.010934 +1.27651 0.13366 0.010143 +1.45061 0.4494 0.01046 +1.40986 0.42181 0.0094278 +1.43751 0.28362 0.0086394 +1.41946 0.21301 0.0090865 +0.10145 0.51183 0.0085144 +0.845168 0.0137 0.0085898 +1.5383 0.45021 0.0095868 +1.52921 0.31112 0.011834 +1.70886 0.61931 0.0073362 +0.4088 0.73688 0.0096308 +1.76675 1.05622 0.0085478 +0.71021 0.06059 0.0075325 +0.67525 0.17233 0.0084996 +0.21271 1.01225 0.0098426 +1.52924 1.50331 0.011237 +0.46811 0.19334 0.0077778 +0.1794 0.39901 0.010144 +0.981085 0.02711 0.0087401 +0.33167 0.36111 0.011047 +0.41991 0.20691 0.0097262 +1.22678 0.15602 0.0097541 +0.29641 0.66037 0.0083502 +0.64006 0.26076 0.0092415 +1.14387 0.52144 0.0090214 +1.40531 1.61526 0.010702 +0.8531 0.09584 0.011149 +0.17407 0.54472 0.010205 +0.03928 1.12071 0.0072781 +1.05526 0.08696 0.0081051 +0.52013 0.12909 0.0080486 +0.40627 0.24977 0.011289 +0.78896 0.12268 0.0077023 +1.71037 0.71138 0.0094486 +0.33296 0.59664 0.0086848 +0.07193 1.18985 0.0083242 +0.44316 0.27692 0.010227 +0.16264 1.30413 0.0089098 +1.11395 0.0557 0.0057182 +0.26933 0.30201 0.007032 +0.14518 1.18067 0.0070328 +0.15771 1.24894 0.010225 +0.0650000000000001 0.64602 0.0095361 +1.30083 1.65048 0.010002 +1.25388 1.71057 0.0084129 +1.35756 1.6308 0.010162 +0.20807 1.25786 0.011855 +0.64355 1.19287 0.0081096 +0.827788 0.969183 0.010933 +0.75989 1.15276 0.008509 +0.930405 1.08312 0.010818 +0.885078 1.23934 0.0071305 +0.812646 1.33423 0.0094998 +0.937148 1.40658 0.0096821 +0.61763 1.08361 0.0098251 +0.75841 1.47913 0.010389 +0.47298 1.11908 0.0098182 +0.96093 1.54307 0.0087886 +1.24257 1.03582 0.010412 +0.49635 1.25804 0.0087983 +0.47332 0.993162 0.0086451 +0.843413 1.48767 0.010814 +0.57843 1.35183 0.0095812 +0.67906 1.37856 0.0082402 +0.40728 1.45533 0.009927 +0.64804 1.55254 0.010327 +0.34389 1.32252 0.0092994 +1.58955 1.13215 0.0084322 +0.46558 1.55605 0.0075159 +1.61817 0.998928 0.0089385 +0.4425 1.36525 0.0076172 +1.43865 1.03319 0.010049 +0.75418 1.67566 0.0096975 +0.63077 1.49087 0.010747 +0.7378 1.55262 0.0084166 +0.837475 0.40418 0.0086629 +1.31609 1.38278 0.0074626 +0.5286 1.43876 0.0076364 +1.52616 1.16621 0.0092755 +1.10456 1.22432 0.0075039 +1.02039 1.34507 0.0095804 +0.62093 1.68676 0.0094316 +0.8948198 0.32504 0.0084365 +0.53496 0.43751 0.009624 +1.461 0.66653 0.010526 +1.56913 1.26119 0.0090341 +0.962566 0.38803 0.0072405 +0.40811 1.21456 0.0093441 +0.923333 0.44109 0.0086795 +1.40198 1.32375 0.007821 +0.873976 1.61883 0.0061647 +0.810629 1.5977 0.0097173 +1.04152 1.07564 0.0076835 +1.21904 0.66065 0.0066524 +1.20049 1.13858 0.0092233 +0.949652 0.67953 0.0094239 +1.66942 1.21837 0.010104 +0.56158 0.800039 0.0079034 +1.68483 1.10175 0.0098459 +1.33006 1.19005 0.0075452 +1.23521 0.75965 0.0089314 +1.05661 1.14671 0.010225 +0.70836 0.65322 0.0082395 +0.52839 0.62076 0.0087403 +0.54657 0.71995 0.0089169 +0.59564 0.66324 0.0076357 +1.14251 0.7345 0.0083002 +0.7775 0.33272 0.011639 +0.70975 0.994837 0.0098604 +1.24433 1.23385 0.0094564 +1.41658 0.944622 0.0074004 +1.08104 1.65968 0.0085291 +1.09737 1.5864 0.010558 +1.12404 1.00032 0.0067763 +0.82658 0.76675 0.0084407 +1.4265 0.5539 0.0068434 +1.32927 0.6754 0.0080093 +1.11125 0.917791 0.0085608 +0.816984 0.82713 0.0091527 +0.34716 0.832654 0.0070034 +1.58019 0.888924 0.0085467 +0.79975 0.67345 0.0077579 +1.12101 1.40206 0.010267 +0.66092 0.44481 0.010319 +0.985113 1.22733 0.0073625 +0.42254 0.39897 0.0073587 +0.11877 0.78105 0.0092545 +1.05425 0.70343 0.0071433 +1.60839 0.70953 0.0085196 +1.52826 0.54267 0.0084193 +1.01559 0.889921 0.0098117 +0.4819 0.57874 0.0085904 +0.74648 0.8906129 0.0069095 +0.47493 0.868497 0.0083112 +1.29152 1.48173 0.013038 +1.48341 0.886735 0.0075134 +0.69717 0.919053 0.011091 +0.850701 0.52137 0.01098 +1.19903 0.38793 0.0062554 +0.859573 0.871221 0.0087148 +0.942013 0.55182 0.0074323 +0.865753 0.59711 0.0099268 +1.2626 1.56816 0.010937 +0.93303 1.73812 0.0068896 +0.32182 1.403 0.0077375 +1.29328 0.46897 0.0086328 +1.3827 1.44155 0.0101 +0.943437 0.26992 0.0086506 +1.13148 0.37357 0.0070825 +0.77656 0.59207 0.011429 +1.16665 1.67307 0.0082382 +0.69507 1.7497 0.0079825 +1.13746 0.13453 0.011423 +1.51495 1.04341 0.0085142 +1.51868 0.960126 0.010686 +1.27401 0.800955 0.0080627 +1.37792 0.48875 0.008299 +0.21399 0.75971 0.0080682 +1.1998 1.50146 0.011286 +1.32705 0.55986 0.0091268 +0.74054 0.49085 0.0090822 +1.35638 1.08399 0.01072 +0.841233 1.77307 0.011016 +0.63789 0.72743 0.0080896 +0.31713 1.03585 0.0087826 +1.28977 0.6056 0.011478 +1.12455 1.09333 0.011863 +1.28785 0.913299 0.0074951 +1.22085 1.42287 0.0090586 +1.39923 0.72399 0.0080465 +0.30846 1.23654 0.012128 +0.36093 0.960235 0.0094709 +1.05949 1.49568 0.0087662 +1.32742 0.988502 0.010911 +0.62924 0.79744 0.0091396 +0.26813 1.48239 0.012442 +0.937761 0.94536 0.0060902 +0.31623 0.904925 0.010167 +0.04706 0.823549 0.010562 +0.61703 0.8960122 0.0093034 +1.49196 1.40412 0.0077481 +1.22209 0.53619 0.0078096 +0.25242 0.858337 0.0094116 +1.65933 1.29595 0.0075711 +0.61736 0.978426 0.0090371 +1.01999 0.980252 0.009386 +1.58572 0.7898 0.0088796 +0.5532 1.63729 0.0091457 +0.29633 1.53195 0.0084909 +1.0385 1.25319 0.007522 +1.62151 0.56159 0.0087064 +0.854186 1.69688 0.0073867 +0.858707 0.22638 0.0083679 +0.18395 0.83 0.011035 +1.52112 1.3526 0.0092454 +1.58862 1.35668 0.0086446 +1.0857 0.64929 0.0098138 +1.02077 0.61084 0.0094613 +0.951812 0.12809 0.0089434 +0.2521 0.48146 0.0095126 +1.43198 1.39747 0.010364 +0.24716 1.09498 0.012082 +0.15265 0.96188 0.0098182 +0.996497 1.16794 0.010172 +1.46378 0.77216 0.0093537 +1.30401 0.19192 0.011044 +1.02783 1.6929 0.0098403 +0.94872 1.6597 0.0095463 +0.69673 0.57763 0.0087062 +0.871247 0.14045 0.011259 +0.09504 1.07037 0.0099533 +1.38245 0.61682 0.011414 +1.30922 0.29859 0.01045 +1.43139 0.36605 0.0090664 +1.47331 1.56053 0.0094098 +0.817784 0.24913 0.009258 +1.47557 0.49112 0.011059 +0.35754 0.31574 0.0080754 +0.33486 0.46238 0.007937 +0.73928 0.43532 0.0093454 +1.53156 0.73626 0.0089785 +1.5692 0.67264 0.0098209 +1.39089 1.25084 0.0099821 +1.4642 1.31629 0.0076821 +1.46974 1.25214 0.0093941 +0.54246 0.17127 0.010584 +0.43257 0.63135 0.007608 +1.31295 1.28285 0.0091247 +0.16723 0.9090361 0.0086704 +0.02906 0.913605 0.011604 +1.07622 0.79038 0.0089285 +1.24656 1.65462 0.01081 +1.36866 0.33228 0.009506 +0.28233 0.41882 0.010329 +0.21367 0.54875 0.0089274 +1.17127 1.37382 0.010167 +0.47226 0.68129 0.011187 +0.22994 0.937012 0.009711 +0.37526 1.05304 0.008884 +0.33157 1.1278 0.01052 +1.33442 0.37608 0.0087227 +1.13953 1.45493 0.011369 +0.996466 0.22948 0.010309 +0.70803 0.22369 0.0099605 +0.23796 1.18493 0.0083465 +1.17742 1.29095 0.010457 +1.104 1.32161 0.0084902 +1.56938 1.41673 0.010446 +0.7937 1.76775 0.009472 +0.17875 1.34887 0.011584 +0.04852 1.00642 0.01077 +1.63431 1.36263 0.0092301 +0.67456 0.13531 0.0089277 +1.40008 0.27855 0.0094038 +0.41466 0.54634 0.011095 +0.41399 0.47102 0.0088227 +1.67318 0.49155 0.0096007 +1.235 0.946154 0.0098814 +1.42452 1.12597 0.0076013 +0.40254 0.913456 0.0094288 +1.07733 0.13037 0.0092174 +0.0995200000000001 0.871882 0.0098583 +1.21531 0.46204 0.010257 +1.04907 1.76475 0.0098364 +1.62732 0.925198 0.0088585 +0.21179 0.67717 0.0076703 +1.33925 1.5536 0.0074738 +1.35167 0.77395 0.0102 +1.01489 0.18651 0.0073169 +1.04796 0.25928 0.0083421 +0.60602 0.29494 0.010301 +0.63349 0.19398 0.007827 +1.21017 0.866755 0.0093364 +0.998469 0.31698 0.0085734 +1.29858 1.1375 0.0085298 +0.51193 1.66434 0.011942 +1.23518 0.31752 0.009872 +0.06462 0.71089 0.0097095 +0.54502 0.52408 0.0088135 +1.08314 0.20336 0.0070887 +1.40767 0.820198 0.0095144 +0.44343 1.65387 0.0082161 +0.63107 0.60004 0.0088785 +0.75846 0.18996 0.0093736 +1.18913 1.58945 0.011272 +1.17247 0.25289 0.0075902 +1.17064 0.30339 0.011159 +1.09929 0.28836 0.0087554 +0.35623 1.55326 0.0089954 +1.20841 0.19854 0.0096083 +1.1396 1.72841 0.0078595 +0.26351 0.79586 0.0096684 +1.74965 1.13659 0.0097424 +0.51646 0.821987 0.0084541 +1.53436 0.811057 0.0085606 +1.6081 1.43501 0.0090558 +1.50209 0.27053 0.0090209 +0.70085 0.3717 0.0098229 +1.66673 0.862211 0.0088618 +1.70005 0.5758 0.0083959 +0.5339 0.8949604 0.010088 +1.27162 0.09561 0.0083187 +0.50661 0.38241 0.0069153 +0.47485 0.34687 0.0081647 +0.18413 1.42045 0.0073002 +0.29088 0.57418 0.010459 +0.31542 0.24494 0.008771 +1.26833 0.39723 0.0099661 +1.71151 1.00442 0.010353 +1.41965 1.18201 0.009688 +0.15641 0.57787 0.0085212 +0.47701 0.76935 0.009424 +0.39881 0.77301 0.0060098 +1.04725 0.3317 0.0097307 +0.0803 0.926767 0.0079663 +0.62033 0.36959 0.0091298 +0.2192 0.61459 0.0086717 +0.812821 0.16849 0.0087404 +0.60016 0.14468 0.0086591 +0.55674 0.34094 0.0097138 +0.50693 0.29874 0.0079784 +0.74149 0.26534 0.0085535 +0.823011 0.30771 0.006786 +0.5723 0.57348 0.0090466 +0.33764 0.69176 0.0081261 +0.25045 1.01808 0.0082622 +0.27521 0.966204 0.0061717 +1.03014 0.51784 0.0067375 +0.64502 0.0885400000000001 0.011003 +0.35875 0.40939 0.0086599 +1.58379 0.62321 0.0082842 +0.20114 0.975148 0.008485 +1.15866 0.80821 0.011294 +1.61187 0.47466 0.0079167 +1.60919 0.42759 0.0083378 +1.2362 0.25365 0.006573 +1.051 0.39915 0.0085188 +1.72351 0.828326 0.0087832 +1.65137 0.802906 0.009028 +1.10248 0.45299 0.0081824 +0.8947855 1.78693 0.0073469 +1.49908 0.39166 0.0069328 +1.54548 0.41089 0.0093649 +0.23153 1.36293 0.0094177 +0.68845 0.50068 0.009056 +0.47977 0.49877 0.0098578 +1.34981 0.25859 0.0095224 +0.919712 0.07769 0.0078306 +0.19156 0.47811 0.0082693 +1.10229 0.58323 0.0079658 +1.15701 0.5904 0.0087617 +1.01752 0.78278 0.0086741 +1.10358 0.51561 0.008358 +1.38372 0.20013 0.0076455 +1.74674 0.884365 0.006795 +1.75903 0.9297 0.0075987 +1.71136 0.943961 0.008257 +0.27414 0.74076 0.007644 +1.20612 0.59052 0.0088964 +1.6661 0.73767 0.0081019 +1.69238 0.67607 0.0074841 +0.7171 0.09479 0.0071605 +1.12853 0.24076 0.0074672 +0.67249 0.32989 0.0083133 +0.45058 0.73204 0.0084797 +0.0968 0.54805 0.0076859 +0.81094 0.0277500000000001 0.0077597 +0.60905 0.50546 0.0078172 +1.39325 0.881371 0.0094471 +1.17438 0.0694600000000001 0.0091639 +1.20876 0.08877 0.007302 +0.30578 0.53365 0.00961 +0.922518 0.19759 0.0076566 +1.56774 0.36832 0.0069905 +1.05515 0.47596 0.0075329 +1.19941 0.1265 0.0095103 +0.48283 0.22491 0.0074866 +1.56164 0.48181 0.0091849 +0.813886 0.0965 0.0088456 +0.43502 0.804473 0.0083406 +1.44785 0.31877 0.0067056 +0.14357 0.45464 0.0084304 +0.914098 0.02173 0.0068679 +0.13229 0.71152 0.0069956 +1.72948 1.05909 0.0085954 +0.43204 0.31871 0.0088703 +1.40766 1.54233 0.0062868 +0.21436 0.41388 0.0090855 +0.99379 0.06191 0.0084135 +1.16571 0.4788 0.0093202 +1.23171 1.31375 0.008034 +1.15404 0.64229 0.0077668 +0.947558 0.850447 0.0088299 +0.34529 0.53664 0.0061588 +0.26196 0.66849 0.005993 +0.67961 0.0640700000000001 0.0068299 +1.33748 0.848742 0.0094572 +1.51023 0.34819 0.0072458 +1.68203 0.63925 0.0084365 +0.17699 1.03639 0.0067746 +0.02857 0.76459 0.0074377 +1.46937 1.47011 0.0083086 +0.67106 0.27872 0.0087868 +1.01762 0.0915400000000001 0.0096742 +1.63992 0.62966 0.0094422 +0.57784 0.09265 0.0078462 +0.11498 1.30277 0.0073547 +0.11643 0.49626 0.0089203 +0.866358 0.01884 0.0089926 +0.36861 0.26569 0.0097307 +0.58015 0.22604 0.0085485 +0.879874 0.06519 0.0095937 +0.16168 0.50843 0.0089906 +0.32473 0.77222 0.0081531 +1.35546 0.943361 0.0081957 +0.1287 1.23818 0.010275 +1.70029 0.893812 0.011347 +1.71273 0.77978 0.0097448 +1.46963 0.42233 0.010747 +0.09866 0.64514 0.006135 +1.42991 0.43409 0.0076186 +1.00579 0.44331 0.0087713 +0.988068 0.48771 0.01157 +1.39217 1.58156 0.0077177 +0.46736 0.26898 0.0089065 +0.36628 0.634 0.011193 +0.39639 0.58279 0.0080161 +1.50283 1.49204 0.010463 +1.33287 1.60987 0.01237 +0.9094635 0.76827 0.0087124 +0.39232 0.6851 0.0071806 +0.34945 0.73637 0.0090962 +0.17995 1.08076 0.0089186 +0.35614 0.57332 0.0083338 +0.14659 1.12726 0.0096321 +1.69772 0.52695 0.00994 +0.32508 0.6329 0.0096595 +1.14908 0.869337 0.0075555 +0.30478 0.36796 0.0090983 +0.77449 0.0365300000000001 0.0099042 +0.08656 0.58312 0.009626 +0.18519 1.13344 0.0084622 +1.745 0.63888 0.0088931 +0.75515 0.12028 0.0083116 +0.17918 1.21313 0.008614 +1.75533 0.73429 0.0084642 +0.14542 0.64614 0.011185 +1.16734 0.53697 0.0081764 +1.05416 0.57975 0.0075298 +1.00224 0.56224 0.0091227 +0.7322 0.834815 0.007834 +0.90089232 0.81663 0.0088025 +0.966533 0.808253 0.0093192 +0.70284 0.74355 0.0077258 +0.6903 0.801791 0.008228 +1.75581 0.77157 0.0084283 +0.09473 1.14073 0.0095727 +0.90020663 0.72581 0.0090273 +0.76435 0.75392 0.0090269 +1.34396 0.16168 0.0082523 +0.68035 0.850318 0.010468 +1.12047 0.0750500000000001 0.0071252 +0.29034 0.30234 0.0094528 +0.76096 0.0634100000000001 0.007718 +0.10283 0.60918 0.010562 +0.20257 1.28746 0.01035 +0.7308 0.72239 0.0089434 +0.868037 0.69232 0.0092721 +0.47277 0.12814 0.0096312 +0.23008 1.30817 0.009374 +1.29986 1.67756 0.0091306 +0.23335 1.24761 0.011526 +0.51781 0.23121 0.0091497 +0.71759 0.03384 0.0096122 +0.21838 0.34374 0.0080988 +1.04869 0.03001 0.006766 +0.46485 0.1707 0.0096504 +0.50126 0.18476 0.0086051 +1.24903 0.13873 0.01083 +1.76195 0.983522 0.009564 +0.13212 1.34736 0.0072989 +1.1314 0.04547 0.0070695 +0.09485 1.19692 0.0089834 +0.06067 1.11891 0.0070118 +0.3965 0.22368 0.011458 +0.1678 1.17266 0.0097823 +0.256 1.2626 0.012037 +0.53747 0.11535 0.0086509 +1.55621 0.31204 0.0085384 +0.2527 0.35641 0.0088162 +0.15839 1.27825 0.0099308 +1.38532 0.1585 0.0096352 +1.42776 1.60444 0.01078 +1.05373 0.06311 0.0090996 +1.08436 0.0777 0.0067659 +1.08525 0.03254 0.0095696 +0.23615 0.31007 0.0091453 +1.38214 1.62338 0.010921 +0.44443 0.19254 0.010663 +0.41657 0.17922 0.010558 +0.95818 0.0267700000000001 0.010283 +0.16754 0.4185 0.0098709 +0.41565 0.27306 0.011092 +1.27189 1.7019 0.0089963 +1.35691 1.65338 0.0091211 +0.7127 1.20582 0.0093295 +0.57378 1.20839 0.0082777 +0.40711 1.12512 0.010053 +0.74319 1.33375 0.0084637 +0.67889 1.44384 0.0081641 +0.813288 1.11217 0.0097657 +0.63187 1.33159 0.0072378 +0.63438 1.26577 0.0077946 +0.51632 1.52354 0.0093206 +0.961644 1.33424 0.009093 +0.63442 1.14019 0.0084081 +0.74741 1.0873 0.0077728 +0.936667 1.25795 0.0084856 +0.47233 1.31749 0.0092834 +0.833417 1.27488 0.0099564 +0.46766 1.42406 0.0074495 +0.9005582 1.1387 0.0082504 +0.3575 1.4604 0.0097958 +0.79712 1.42845 0.0071422 +0.879374 0.949326 0.0095628 +0.958995 0.6319 0.0090433 +1.05555 1.01955 0.0066026 +1.27885 1.43099 0.0092252 +0.50386 1.16469 0.010529 +0.44317 1.245 0.010274 +0.963274 0.983886 0.011113 +0.988097 0.71764 0.0072999 +1.14296 1.19215 0.0096264 +0.97346 1.43654 0.0070346 +0.59685 1.52036 0.0090103 +1.01334 1.56739 0.010041 +0.3895 1.33581 0.0097501 +0.69807 1.04879 0.00856 +1.2517 1.51923 0.013147 +0.55654 1.08439 0.0082685 +1.15757 1.03581 0.010413 +0.60511 1.03438 0.0086677 +0.859144 1.35288 0.0081573 +0.898101 1.43836 0.0072621 +1.04964 0.92241 0.010343 +0.54102 0.949804 0.010213 +0.836158 1.20828 0.011854 +0.42843 0.999759 0.010134 +0.55108 1.39667 0.0067724 +0.6876 1.57801 0.0086513 +1.62481 1.20772 0.0080308 +0.7174 1.64461 0.0091105 +0.52229 1.0052 0.0090816 +1.03911 1.44918 0.012126 +1.63753 1.11835 0.008427 +0.815538 1.02316 0.0075243 +0.67955 0.960519 0.0064953 +0.8943735 1.04069 0.01179 +1.1479 0.955093 0.0094906 +1.46079 0.58155 0.0082202 +0.79289 0.93253 0.00958 +1.07197 1.40399 0.011455 +0.75568 0.981983 0.010876 +1.42529 0.988733 0.010696 +0.43459 1.49776 0.012635 +1.23415 0.991278 0.010803 +1.18626 1.45842 0.0073929 +0.4283 1.57289 0.0075739 +1.15381 1.13022 0.0096075 +0.981174 1.62381 0.0097227 +1.27306 1.07056 0.011106 +0.79068 0.40625 0.0084525 +1.26311 1.27156 0.010428 +1.2818 1.00884 0.011628 +1.07964 1.10694 0.0098448 +1.47668 1.0162 0.0091585 +0.879827 0.41868 0.01063 +0.861186 0.36661 0.0088412 +1.48931 0.923488 0.0089843 +0.932003 0.3525 0.011025 +0.29346 1.33734 0.010427 +0.808241 0.48884 0.0080521 +0.981569 1.08093 0.0085216 +0.8911473 0.27467 0.0090379 +1.08255 0.828585 0.0085124 +1.11261 1.5429 0.01003 +1.10764 1.49388 0.0090735 +1.50343 0.65131 0.0095132 +1.66725 1.01543 0.0095414 +0.46197 1.07642 0.0094709 +0.60782 0.70444 0.0094983 +0.63939 1.60166 0.010406 +1.28848 0.50738 0.0095454 +0.4919 0.42455 0.0091021 +1.19431 1.25049 0.0094396 +0.2994 1.08215 0.0091742 +1.22583 1.08523 0.011662 +0.33654 1.36658 0.010012 +1.03895 1.29818 0.011295 +1.04578 0.64809 0.0092605 +1.41944 0.66286 0.0082941 +1.54318 0.59132 0.0097342 +0.74348 0.55863 0.0091285 +0.49905 0.53671 0.0095094 +0.30667 1.16338 0.0096483 +0.957763 1.49691 0.01047 +1.60485 1.28189 0.0084216 +0.44824 0.958539 0.0084646 +0.13209 0.819311 0.0089307 +0.79786 1.63882 0.0089854 +0.77134 1.56914 0.0091487 +1.08819 1.18387 0.011376 +1.49731 1.13325 0.01045 +1.4915 1.18485 0.0062965 +0.57813 0.87242 0.010377 +1.24063 1.60889 0.0090839 +1.12877 1.28937 0.010448 +0.51341 0.70011 0.0094435 +1.4878 0.70228 0.0095816 +1.64016 0.967078 0.0092114 +0.85085 1.57987 0.0086271 +0.3482 1.21414 0.0083146 +0.32416 1.28574 0.0099818 +0.59532 1.46199 0.010763 +0.881383 1.50914 0.01057 +1.36727 0.52859 0.0091936 +1.36148 1.16697 0.0093757 +0.73317 1.51557 0.0089006 +0.37965 0.858984 0.008614 +0.58504 1.69753 0.0080734 +0.928806 1.57186 0.011177 +1.06424 1.61573 0.0082058 +1.52551 1.27064 0.0089625 +1.30041 0.71516 0.0090349 +0.802288 1.68909 0.0075247 +1.42576 0.75795 0.0098135 +1.37004 1.48005 0.0068496 +1.18265 1.54199 0.0076838 +1.15793 0.40836 0.011023 +0.12723 0.999615 0.010877 +1.29201 1.35456 0.0094327 +0.80669 1.50525 0.0090791 +0.4696 1.62708 0.0092217 +0.54426 1.59225 0.0091715 +0.971924 1.7409 0.0076966 +1.54663 0.86979 0.0077058 +1.51954 1.42622 0.0073981 +1.23657 1.15903 0.0093448 +1.59881 1.03688 0.0085528 +1.43049 1.35338 0.0087039 +1.38021 1.12343 0.0078607 +1.54258 1.22363 0.01148 +1.35135 1.40783 0.0074496 +1.3493 1.3599 0.010333 +1.60441 0.856829 0.0077868 +0.823454 0.44373 0.01066 +0.6388 0.64024 0.010255 +0.66898 1.66768 0.0092279 +1.3871 1.29215 0.0089188 +1.34843 1.22775 0.0075278 +0.65629 0.39946 0.010507 +1.21636 1.38089 0.010105 +0.66231 1.51468 0.0086991 +0.25564 1.14662 0.0090167 +0.859742 0.31725 0.0090632 +1.68781 1.17774 0.0097422 +1.54908 0.930657 0.010033 +0.57334 0.27529 0.0089919 +1.19082 0.9012169 0.0081921 +0.56429 0.64097 0.0092642 +0.32644 0.999587 0.008094 +0.58475 0.95368 0.0077944 +1.10734 1.72453 0.0076624 +1.00882 0.843264 0.0077103 +1.41116 0.45981 0.0081492 +1.33933 0.47507 0.0082381 +1.14039 0.44715 0.009771 +0.9061364 1.63826 0.009858 +0.901979 1.71642 0.0086853 +0.869028 1.65619 0.009064 +1.58835 0.98103 0.0077679 +0.34097 0.931456 0.0073618 +0.55934 0.76569 0.009022 +0.66757 1.72781 0.0078492 +0.7307 1.70783 0.0092823 +1.28835 0.25981 0.0072041 +1.14578 0.17927 0.0093889 +1.41389 0.5808 0.0065807 +0.3942 0.33112 0.0082477 +1.55227 0.77413 0.0077436 +0.05798 0.860799 0.0078803 +1.11464 1.3601 0.0085827 +0.60849 0.57089 0.0082614 +0.85602 1.72864 0.0069308 +0.37308 0.4779 0.007541 +1.50047 1.07641 0.0087527 +1.54666 1.13196 0.0079852 +0.33956 0.869108 0.0088073 +0.50959 0.65409 0.0092896 +0.45803 0.60529 0.0075645 +0.66607 0.53322 0.0087168 +1.66573 1.2653 0.0065181 +1.10234 0.36482 0.0066158 +0.2933 1.4219 0.0081368 +1.44617 1.53341 0.0083736 +0.56988 0.41108 0.0097778 +1.47372 0.849876 0.0091937 +1.30073 0.847328 0.0065821 +0.54793 0.21223 0.0079134 +1.43128 0.853428 0.0083825 +1.48595 0.807366 0.0093331 +1.16784 1.62595 0.0083612 +1.20371 1.6702 0.0089078 +0.61739 0.44729 0.0081066 +1.32004 0.917143 0.0076464 +1.49473 0.74536 0.008574 +0.24365 1.39994 0.0094818 +0.73387 0.30327 0.0090216 +1.26847 0.33709 0.0071582 +0.29767 0.49336 0.0080715 +1.08713 0.39933 0.0065739 +0.77934 0.23828 0.0072048 +0.31034 1.49878 0.005912 +1.5564 0.70812 0.0083306 +1.61256 0.74555 0.0081028 +1.00511 0.1262 0.0081144 +0.55205 0.47416 0.0094466 +0.21933 1.4277 0.0093449 +1.07116 1.23232 0.0079498 +0.912708 0.13222 0.0068244 +0.27357 0.830252 0.0069613 +0.23236 0.51603 0.0094753 +0.945565 0.16583 0.0070575 +0.940913 1.69898 0.0084956 +0.955387 0.23411 0.0077877 +0.41948 0.43529 0.0078907 +0.22822 0.78814 0.0073416 +1.34039 0.59427 0.0081517 +1.42349 0.24993 0.0087052 +0.44124 0.50319 0.0084949 +1.24105 0.21299 0.0061464 +1.24036 0.56631 0.0080795 +0.926349 0.47976 0.0079859 +0.16782 0.61068 0.0082356 +1.12336 0.66058 0.0091421 +0.63655 0.33227 0.0079004 +1.59606 0.53643 0.0074879 +0.3282 0.30445 0.0061926 +1.04187 1.65747 0.0084011 +0.830865 0.20694 0.0066344 +1.08192 0.32572 0.0070444 +0.314 0.43392 0.0067188 +0.51141 0.58894 0.0065856 +1.35924 0.65174 0.0076166 +1.30945 0.64826 0.0078135 +1.3352 0.33527 0.0064208 +0.4074 0.61359 0.0062555 +0.17051 1.39221 0.0074328 +1.35562 0.883683 0.0098737 +1.65713 1.33359 0.0077467 +1.2148 0.50442 0.0074112 +1.25192 0.46158 0.0084168 +0.932077 0.40284 0.0088125 +1.33943 0.40978 0.0069697 +1.15833 1.70287 0.0064423 +1.14901 0.09183 0.0067044 +0.69627 0.30195 0.008592 +1.1505 0.33174 0.0064554 +1.40858 1.05746 0.0094995 +1.56964 1.38074 0.0080111 +1.66739 1.06688 0.0087186 +0.19988 0.806819 0.008563 +0.22566 0.848889 0.01027 +0.985656 0.18986 0.0063705 +1.62888 0.67965 0.0086098 +1.50962 0.56927 0.0068506 +1.11965 0.88553 0.0070096 +1.35978 0.815745 0.0084805 +1.30314 0.78508 0.0068651 +1.2459 1.34965 0.010384 +0.58331 0.3711 0.0082835 +1.51141 1.37865 0.011023 +1.54765 1.34913 0.010805 +1.27919 0.43505 0.010105 +1.3507 0.21525 0.0092893 +1.41219 1.4141 0.0081837 +0.953338 0.77001 0.0095624 +0.62402 0.226 0.0081427 +0.64245 0.11324 0.0078745 +1.44824 0.51933 0.0072449 +1.49269 0.51494 0.011522 +0.05793 0.74462 0.0058762 +1.1165 1.66461 0.0084926 +0.45081 0.56279 0.0078608 +0.63069 0.75372 0.011281 +1.20074 0.42635 0.0064988 +0.59375 0.809547 0.008355 +1.69641 1.23658 0.010801 +1.13988 0.70016 0.0080003 +0.24725 0.4025 0.0092308 +1.29556 0.37278 0.0084537 +1.29059 1.20265 0.0087965 +1.23575 1.1979 0.0076001 +0.02707 1.02107 0.0085893 +0.36599 0.67876 0.0071482 +1.23172 0.39189 0.0078642 +1.20689 0.36127 0.0071948 +1.08872 0.48607 0.0082447 +0.883672 0.20032 0.0073539 +1.24043 0.800486 0.0070194 +0.23726 0.8978815 0.0097872 +0.27643 0.875254 0.011515 +0.29635 0.926663 0.011366 +0.910813 0.55042 0.0066286 +0.38261 0.93745 0.011846 +1.47295 1.42837 0.0062658 +1.48948 1.32216 0.0087384 +1.14021 1.6027 0.0086241 +0.974234 0.28964 0.0081573 +1.03789 0.28187 0.0099599 +1.14926 1.39331 0.0099917 +0.5291 0.2709 0.0081678 +0.43912 0.65639 0.0089596 +0.65239 0.844819 0.0088444 +1.03404 0.38615 0.0085621 +1.01369 0.24826 0.0089129 +1.465 1.29245 0.0086194 +1.3832 0.75207 0.0065034 +1.35708 0.70116 0.0063096 +1.32147 0.75292 0.0087338 +0.75606 0.72829 0.0090118 +1.29968 1.31051 0.010246 +0.13999 0.8936216 0.011946 +0.17923 0.861348 0.011384 +0.67624 0.46396 0.0097 +1.41582 1.21995 0.0082026 +1.4415 1.25133 0.011451 +0.23076 1.04015 0.0060468 +1.03212 0.15627 0.00899 +0.1946 0.915201 0.0087569 +0.50668 0.85213 0.0069097 +0.978685 0.41161 0.0061946 +1.64691 0.848598 0.0076764 +0.73541 0.35192 0.0089388 +1.68764 0.74266 0.0090561 +1.38151 0.31372 0.0073979 +1.02243 1.14462 0.0059202 +1.4121 0.913853 0.0066002 +0.888262 0.67166 0.0086361 +1.12628 1.42835 0.0090478 +1.36806 1.52815 0.0089756 +1.46547 1.58058 0.0081819 +1.27057 0.884984 0.0084342 +1.7044 1.09072 0.009669 +0.36884 1.52887 0.010216 +1.19533 1.30888 0.0082137 +0.28749 0.76076 0.0091823 +0.57643 0.50382 0.0081454 +1.35864 1.01798 0.0097329 +1.51711 0.46597 0.010235 +1.11635 0.76076 0.0075856 +0.19744 0.72448 0.009527 +0.875506 0.71908 0.0089445 +0.74738 0.77347 0.0088577 +1.64527 0.59043 0.0088598 +0.2638 0.61279 0.0078397 +1.71972 1.12028 0.0077777 +1.72517 1.1693 0.0079906 +0.50842 0.887882 0.00877 +1.42235 0.39441 0.0086967 +1.01923 0.58464 0.0084323 +0.16242 0.936096 0.0085235 +1.21406 0.62923 0.0092339 +0.975602 0.35588 0.0082761 +0.833802 0.68469 0.0076254 +0.33736 0.24078 0.0067513 +0.56546 0.16492 0.0068414 +0.12672 1.20242 0.0060266 +1.18159 0.21221 0.010051 +1.14981 0.78248 0.0095074 +1.17879 0.74358 0.0078312 +1.18823 0.800972 0.010333 +0.713 0.8954433 0.0089937 +0.39793 0.39433 0.0093306 +0.75067 0.4714 0.0082864 +0.889155 0.59057 0.0075332 +1.67355 0.51827 0.0093598 +0.804038 0.32199 0.0079434 +0.22356 1.07611 0.0090107 +0.51162 0.74503 0.0061891 +0.889651 0.78737 0.0088376 +0.31984 1.53876 0.0090837 +0.66979 0.73594 0.0084727 +0.0607 0.67776 0.0064314 +0.33773 0.802367 0.0089428 +0.69608 0.16562 0.0086579 +1.33825 1.28881 0.0069021 +1.58353 1.43975 0.0097423 +0.61583 0.0835 0.010681 +1.26301 0.62485 0.011102 +1.28565 0.21314 0.0093503 +0.20685 1.35541 0.0090224 +0.74702 0.852449 0.0091783 +1.41065 0.34673 0.010107 +0.04249 0.79718 0.0087808 +1.53742 1.06951 0.0095449 +1.5499 1.03169 0.0093161 +0.23048 0.46524 0.010567 +0.950592 0.10192 0.0098516 +0.34591 1.05147 0.012633 +0.75866 0.810675 0.0090047 +1.20999 0.32249 0.0092455 +1.46355 1.39241 0.0098962 +1.34152 1.05811 0.0087154 +0.69786 0.826539 0.0088559 +0.79299 0.55325 0.0079006 +0.27051 0.44411 0.010606 +0.31282 0.830218 0.0080765 +1.3339 0.28042 0.010521 +0.971462 0.55244 0.010792 +0.992622 0.81076 0.0092326 +0.844914 0.14663 0.0093868 +1.13384 0.826234 0.0098014 +0.67309 0.24244 0.0088378 +1.59966 0.913274 0.010404 +0.25519 0.72712 0.0085402 +0.839753 0.59138 0.0090127 +1.31892 1.16288 0.006097 +1.1956 1.71107 0.0097796 +1.47755 0.28163 0.010013 +0.09929 0.69107 0.0095863 +1.17832 1.34506 0.010315 +0.47903 0.79877 0.010739 +0.4582 0.85007 0.0096845 +0.78105 0.877934 0.010553 +1.0792 0.713 0.010982 +1.23332 0.857996 0.0084182 +1.05307 0.77836 0.009152 +0.09028 0.808188 0.0072968 +1.6488 0.71762 0.0087332 +0.5594 0.59475 0.008559 +0.21799 0.63695 0.010075 +1.10394 0.20538 0.0093507 +1.714 0.6862 0.0079742 +0.42573 0.888739 0.012596 +0.79145 0.16777 0.0081066 +0.74266 0.16701 0.01099 +0.930228 0.831217 0.010521 +1.25189 0.67557 0.01034 +0.16983 1.11619 0.0076643 +0.70133 0.60294 0.007675 +0.67622 0.64584 0.0081394 +0.65183 0.59117 0.010159 +1.43232 1.10211 0.0076479 +1.19088 0.68594 0.0073025 +0.872252 0.50442 0.0098942 +1.05957 0.53817 0.0093809 +1.72651 1.03989 0.0067909 +0.810465 0.800029 0.0080265 +0.09362 0.9010233 0.0057217 +0.872122 0.837016 0.0074059 +1.28614 0.17338 0.0094444 +0.25411 0.940475 0.0082227 +1.17486 0.36706 0.0081465 +0.24929 0.55129 0.0086778 +0.21605 0.5746 0.010114 +0.980429 0.9089707 0.0078668 +1.00245 1.25939 0.0092817 +1.19734 0.53493 0.0093214 +0.11749 1.08845 0.010443 +1.16281 0.13258 0.0090978 +1.23624 0.72958 0.010146 +0.851437 0.74588 0.0071 +1.53937 0.34907 0.0076853 +0.60801 0.16663 0.00774 +1.54952 0.51304 0.0082146 +1.60507 0.49922 0.0099532 +0.66493 0.78166 0.0073365 +1.00485 1.19864 0.0095165 +0.28082 1.25007 0.012226 +0.68796 0.2089 0.0085467 +0.53536 0.80127 0.010578 +0.810895 0.70841 0.0082732 +0.0549500000000001 0.930069 0.009504 +1.03258 0.43416 0.0087421 +1.37729 0.2624 0.011148 +0.47244 0.9044264 0.0087052 +0.13546 1.15034 0.0082564 +1.10439 0.12468 0.011397 +0.854046 0.54802 0.010687 +0.872306 1.77615 0.0091376 +1.19225 0.47507 0.0092917 +0.77455 0.66697 0.0091881 +1.57841 0.34911 0.0096361 +0.28781 0.5508 0.0086166 +1.34575 1.57891 0.008788 +0.38523 0.74281 0.008085 +1.06073 0.23709 0.010441 +1.0801 0.277 0.0096945 +0.878674 0.64375 0.010224 +0.930797 0.70119 0.0087165 +1.39201 0.956376 0.01031 +0.28756 1.02852 0.010207 +1.15694 1.74514 0.010842 +1.7228 0.978715 0.008187 +1.58183 0.64778 0.0093446 +0.71844 0.68654 0.0084464 +0.18649 0.67012 0.010725 +0.72203 0.24902 0.0098299 +0.72457 0.20575 0.0086655 +0.832501 0.858551 0.011481 +0.66747 0.9082574 0.0096854 +1.32104 1.47273 0.008632 +0.06802 1.06758 0.0083995 +0.51481 0.16669 0.0087711 +0.71247 0.49025 0.010684 +0.16879 0.7611 0.012128 +1.23597 0.2896 0.010333 +1.19977 0.25947 0.009303 +0.31139 0.6843 0.010464 +1.0862 0.16851 0.0096326 +1.03763 1.71692 0.0094641 +0.12264 0.7567 0.0094862 +0.7105 0.43392 0.010118 +0.71864 0.39256 0.0078691 +0.71285 0.77349 0.0076216 +1.65208 0.8957502 0.0081214 +0.25574 1.20507 0.010282 +0.77913 0.0838300000000001 0.010511 +0.934019 0.51167 0.0082521 +0.73889 0.63012 0.0086724 +1.61338 0.78938 0.0081505 +0.858972 0.77567 0.0072195 +0.45477 0.37447 0.0080893 +0.952936 0.57552 0.010243 +1.63801 0.53965 0.010646 +0.21093 0.953811 0.0094942 +0.55469 0.54983 0.010173 +1.10376 0.53688 0.0091984 +0.803149 0.76182 0.0086984 +0.66297 0.70246 0.008611 +1.30355 1.6028 0.0081706 +1.76754 0.873533 0.008096 +1.60908 1.36666 0.0098725 +0.15608 1.06467 0.0099489 +1.30294 0.57521 0.011073 +0.42156 0.83017 0.0098657 +1.12386 0.26206 0.0077044 +0.824624 0.64829 0.0082655 +1.4202 1.15315 0.0093087 +1.09393 0.62108 0.010918 +0.48758 0.35979 0.0066824 +0.27395 0.34315 0.0093186 +1.29892 0.941612 0.0067946 +1.34901 0.967108 0.010231 +0.18632 1.23755 0.010233 +0.22554 1.11587 0.0095313 +1.32717 1.52773 0.010006 +1.64742 0.48419 0.0096313 +1.63415 0.42653 0.010197 +1.58553 0.4243 0.0095978 +1.61055 0.3909 0.0093288 +0.25495 1.28935 0.0095164 +0.06596 0.980191 0.0088555 +0.23462 0.68406 0.0085654 +0.960737 1.7748 0.0088419 +0.912999 1.76707 0.0089502 +0.15417 1.32999 0.0088318 +0.78505 0.61867 0.01174 +0.10325 0.942437 0.012507 +1.47528 0.33637 0.0092427 +1.4758 0.3924 0.0084192 +0.4856 0.28711 0.0093814 +0.3819 0.78606 0.0076048 +0.30416 0.71211 0.0098775 +0.21589 1.20958 0.0079471 +1.52547 1.47736 0.0094443 +0.5352 0.35651 0.010775 +0.48691 0.32676 0.0090398 +0.52592 0.31297 0.0092137 +1.47568 1.48978 0.0092961 +1.2535 0.926598 0.0096896 +0.37017 0.28933 0.010662 +0.74071 0.07287 0.0067095 +1.69882 0.800483 0.0085075 +0.17546 0.97747 0.010019 +1.018 0.49851 0.0085092 +1.19741 0.844221 0.0095548 +0.971105 0.50969 0.0088705 +0.809422 0.27129 0.0093968 +1.48294 0.2537 0.0093868 +1.56868 1.47506 0.0087083 +1.51696 0.41122 0.010657 +0.28941 0.25408 0.0076956 +1.04932 0.193 0.0088785 +1.49509 1.5423 0.010318 +1.59482 0.47899 0.0079167 +1.01049 0.04835 0.0087161 +0.21004 0.37947 0.0089731 +1.6182 0.45113 0.0099202 +0.15517 0.7163 0.0084092 +0.49909 1.69063 0.010089 +0.58452 0.1188 0.0093898 +1.29254 1.566 0.0091161 +0.25834 0.996771 0.009402 +0.872674 0.1112 0.010634 +1.13362 0.59687 0.0086314 +0.69285 0.11754 0.0089297 +1.66861 0.67716 0.0075726 +0.0653900000000001 1.03033 0.00841 +1.15705 0.56432 0.0096608 +1.32738 0.17892 0.0070738 +1.76037 1.11494 0.0097181 +0.10771 1.25777 0.0099994 +1.25433 1.68422 0.0098109 +1.43234 1.46803 0.010784 +0.818565 1.7632 0.0080822 +0.19555 1.15833 0.010305 +1.27299 1.64776 0.0088997 +0.51377 0.1036 0.011175 +0.0795 1.10519 0.0086215 +0.62076 0.27341 0.010385 +1.75274 0.9064654 0.0079738 +1.59121 0.60037 0.0078626 +0.14973 0.55526 0.010608 +1.15095 0.241 0.0071133 +1.18173 0.59634 0.0091409 +1.28955 1.11422 0.010199 +1.33529 1.10413 0.011584 +1.76609 0.951769 0.009183 +1.731 0.944049 0.0075086 +0.46756 0.74593 0.0083683 +0.36559 0.52914 0.0081139 +1.06907 1.74999 0.011014 +0.34242 0.38945 0.010804 +0.45503 0.14665 0.0088118 +0.35826 0.34389 0.01004 +1.55993 0.38976 0.0080352 +1.3491 0.13279 0.010866 +0.41655 0.78595 0.0079941 +0.42322 0.23112 0.0097644 +1.51061 1.51993 0.009531 +1.14755 0.61128 0.0077407 +0.10621 1.04588 0.0098059 +0.4551 0.70587 0.010418 +0.831081 0.0787600000000001 0.01112 +0.12937 0.60218 0.010299 +1.61646 0.63257 0.0083399 +1.50228 0.32707 0.010158 +0.5243 1.63958 0.011997 +0.16401 0.45545 0.0080227 +0.8983326 0.07586 0.0088807 +0.920052 0.0424 0.0074018 +0.17906 0.4971 0.0088225 +1.76195 0.819142 0.0099327 +1.77395 0.7933 0.0077127 +1.73325 0.851067 0.0089661 +1.69115 0.848365 0.0093085 +1.50464 0.36928 0.0082651 +0.19294 0.42127 0.0099817 +0.969812 0.0523600000000001 0.010533 +0.31534 0.58308 0.0097828 +1.66035 0.77922 0.0098648 +1.04603 0.49988 0.0095005 +1.16295 0.50363 0.0069938 +0.11697 0.65042 0.0083826 +0.843132 0.24934 0.009642 +0.34356 0.61733 0.010462 +1.16438 0.27581 0.0082497 +1.47961 0.44821 0.0093645 +1.45199 0.478 0.0093924 +1.0223 0.32929 0.010096 +0.65111 0.17741 0.010014 +1.43498 0.33533 0.0091872 +1.70091 0.65369 0.0078137 +1.26212 0.11556 0.0088745 +1.70304 0.922547 0.0092063 +0.990204 0.46209 0.010488 +1.74916 0.66368 0.010112 +0.46259 0.21588 0.0099763 +0.29679 0.39421 0.011279 +1.72612 0.886955 0.0068964 +0.37687 0.20438 0.010449 +0.18912 1.0217 0.0085718 +0.54406 0.1478 0.0060576 +0.43103 0.2538 0.0093396 +1.0602 0.11135 0.0099552 +0.8912975 0.0243300000000001 0.0079037 +0.13412 0.47768 0.0095586 +1.15624 0.05221 0.010131 +1.75887 1.07657 0.0080233 +1.52455 0.28225 0.011007 +0.13615 1.2955 0.008681 +0.35209 0.21181 0.0085708 +0.45756 0.32754 0.010485 +1.40556 1.57085 0.0074549 +1.76937 0.75157 0.0074001 +1.77189 1.03229 0.0107 +1.03492 0.07803 0.0098759 +1.01582 0.53537 0.008178 +0.69113 0.34543 0.0092354 +0.40991 0.71137 0.0093859 +1.24739 0.16274 0.0097541 +1.40405 0.19536 0.0093935 +1.19459 0.10592 0.0080736 +1.6886 0.871473 0.0096726 +0.34823 0.71396 0.010099 +1.7312 0.72444 0.0098033 +0.43196 0.74488 0.0080249 +1.43028 0.30778 0.0093257 +1.08109 0.57676 0.0099725 +1.59358 1.41552 0.010614 +0.498 0.12572 0.0088147 +0.69432 0.04864 0.0080735 +0.19386 0.55923 0.010084 +0.42447 0.29617 0.010698 +0.66178 0.15441 0.0084615 +1.68783 0.61456 0.0097048 +0.39286 0.56296 0.0090609 +1.55977 0.45955 0.0098421 +1.20655 0.17239 0.010736 +1.2223 0.13237 0.010582 +0.08784 1.16883 0.010814 +1.70401 0.55363 0.010137 +0.11995 0.51577 0.0085144 +0.851163 0.0318200000000001 0.0085898 +1.7823 0.834876 0.0093525 +0.48688 0.20417 0.0094089 +0.38094 0.24751 0.0098818 +0.21677 0.990489 0.0083888 +0.830674 0.10694 0.0088963 +0.177 0.52124 0.0089906 +0.37541 0.58258 0.0094419 +0.70267 0.0815900000000001 0.0073886 +0.31121 0.34754 0.0084741 +1.36745 0.17151 0.0078431 +0.67035 0.0832000000000001 0.0076777 +1.38704 0.18073 0.0078872 +0.17137 1.19566 0.0069151 +0.55923 0.1038 0.0097658 +0.04221 0.71071 0.0084303 +0.32694 0.54596 0.0084427 +0.4634 0.28838 0.0089065 +1.77918 1.00778 0.010102 +1.12316 0.50564 0.0085644 +0.34557 0.55707 0.0074137 +0.18551 1.30288 0.0075044 +0.73159 0.11077 0.0090481 +0.64902 0.28264 0.0095141 +1.32229 1.6706 0.0097016 +0.30173 0.63525 0.0095188 +0.32172 0.65632 0.0094879 +0.869625 0.0444100000000001 0.010055 +0.13962 0.50674 0.009737 +1.66375 0.62421 0.0096875 +1.44585 0.42456 0.0078185 +0.47079 0.2434 0.009929 +0.08491 0.63077 0.0089473 +1.06246 0.04145 0.0080542 +0.23124 0.33061 0.0071703 +1.23671 1.71799 0.0080648 +0.34018 0.75706 0.0097383 +0.04943 1.10812 0.006815 +0.1549 0.43643 0.0094914 +0.935337 0.0240400000000001 0.0096136 +0.809504 0.11716 0.0095013 +0.997133 0.08321 0.0087746 +0.77392 0.10802 0.0085368 +1.49148 0.40963 0.0087823 +1.099 0.0683 0.0078302 +1.18735 0.08675 0.0085946 +0.31529 0.61119 0.0095941 +1.73432 0.78136 0.0095531 +0.06397 1.17162 0.0089528 +0.23627 0.34573 0.0071703 +0.49537 0.23975 0.0085195 +0.39012 0.26958 0.0098358 +1.40754 1.59159 0.0082571 +0.7929 0.0221 0.0075085 +0.0831700000000001 0.56074 0.0073898 +1.38718 1.59964 0.0084387 +0.915961 0.74383 0.0090429 +0.1491 1.22792 0.0075757 +0.08914 1.22132 0.008419 +0.0611 0.62324 0.0087103 +0.08492 0.65324 0.0071742 +0.48219 0.18332 0.0077778 +1.06944 0.07585 0.0067659 +0.71938 0.73893 0.0075416 +1.12585 0.06016 0.0057074 +1.10989 0.03589 0.0085307 +0.27448 0.28588 0.0074847 +0.25646 0.31086 0.007032 +0.25347 0.29118 0.0086414 +0.73827 1.26465 0.01108 +0.69978 1.15744 0.0081903 +0.53514 1.32517 0.010316 +0.60217 1.16169 0.0091027 +0.840244 0.922216 0.0091527 +0.7956 1.37792 0.0074805 +0.953714 1.0306 0.010714 +0.856568 1.01341 0.0094572 +0.956415 1.12087 0.0099558 +0.8915088 1.18381 0.011212 +0.865532 1.11129 0.0070208 +0.67088 1.23389 0.0096531 +0.5242 1.21466 0.0093264 +0.7272 1.44562 0.0093112 +0.79241 1.06687 0.010236 +0.7944 1.19152 0.0091737 +0.65865 1.07006 0.0075065 +0.41838 1.16773 0.010749 +0.37655 1.29145 0.0096453 +0.42205 1.41148 0.011172 +0.9071535 1.36239 0.0089386 +0.977965 1.3854 0.0094316 +0.51463 1.10358 0.010184 +0.972275 1.58142 0.010017 +0.6151 1.37408 0.0091008 +1.1999 1.035 0.0092127 +0.921537 1.5274 0.011411 +0.59587 1.31354 0.0094803 +0.843295 1.53343 0.01039 +0.849894 1.31501 0.0098247 +0.55732 1.03896 0.010846 +0.50503 1.57052 0.010371 +0.587 1.24902 0.010072 +1.02969 1.5237 0.0083166 +0.9045086 1.27775 0.0080057 +0.46712 1.03227 0.010022 +0.941046 1.44247 0.0073031 +0.51932 1.48251 0.0082992 +0.38516 1.49103 0.0091953 +0.58524 1.11522 0.0089381 +0.954442 1.29609 0.0098757 +0.72722 1.36738 0.0098835 +0.43972 1.10472 0.0071606 +0.65723 1.41128 0.0097834 +0.67526 1.34 0.0084884 +1.60667 1.16479 0.0081955 +0.55776 1.52415 0.0086417 +0.77119 1.71655 0.0093723 +0.46083 1.28222 0.0080652 +0.45664 0.42112 0.0074865 +0.69101 1.5414 0.0087701 +1.60206 1.08732 0.0092689 +0.56318 1.43353 0.0087781 +0.72699 1.58875 0.0090721 +0.60853 1.57069 0.0097364 +1.05484 1.58127 0.0084741 +0.45451 1.45469 0.008444 +0.49532 0.960808 0.009877 +0.3596 1.4185 0.007509 +0.77151 1.5213 0.0095073 +1.03771 1.10969 0.0079518 +0.879471 1.46962 0.0078843 +0.46717 1.15397 0.0072507 +0.47005 1.52566 0.0064821 +1.45129 0.910682 0.010312 +0.810922 0.3741 0.0079572 +0.841709 1.44252 0.0098176 +0.39006 0.985447 0.0067148 +1.00344 1.65943 0.0097515 +1.60196 1.23555 0.0082221 +1.46554 0.62143 0.0086256 +0.58374 1.60352 0.009651 +1.0457 1.37457 0.0079103 +0.952153 1.22289 0.0083252 +0.57022 0.834278 0.0077129 +1.10955 1.2565 0.0070692 +1.11033 0.956973 0.0074627 +1.40239 0.5128 0.0072507 +0.64547 1.30091 0.0088122 +1.52086 1.00517 0.0079475 +0.923283 0.3016 0.0086985 +1.17731 1.21725 0.0090363 +0.63898 1.64422 0.0088205 +1.56605 1.16633 0.010028 +0.79505 0.994151 0.0076637 +0.4002 1.02688 0.0078644 +1.17231 1.1706 0.0070108 +0.37406 1.09669 0.0095343 +0.61349 1.7222 0.0078234 +0.57797 1.66068 0.0069995 +1.09179 1.69299 0.008768 +0.36938 1.13399 0.0086282 +1.39983 1.02103 0.0089288 +0.573 0.6865 0.007524 +1.47278 1.0524 0.0084851 +0.47809 1.35609 0.0085125 +0.42941 1.33402 0.0079564 +0.80583 1.46803 0.0087717 +1.51143 0.872532 0.0073429 +0.50267 0.46629 0.0088927 +0.60971 0.929561 0.0071175 +0.73648 1.05766 0.0065806 +0.45463 1.59134 0.0067864 +1.08991 1.00494 0.0099005 +1.66757 1.13702 0.0074928 +0.74615 0.52543 0.0073052 +1.31874 0.44018 0.010011 +1.07227 1.31898 0.0068973 +1.25523 0.52636 0.0078062 +1.42247 0.69472 0.0068592 +1.55812 0.966089 0.0086029 +0.60262 1.49135 0.011289 +0.846374 1.61786 0.0062638 +1.59638 1.31915 0.0099103 +0.63396 1.44858 0.0097412 +0.67 1.4766 0.0084346 +1.01516 0.70229 0.0080101 +0.963136 1.25685 0.0090324 +0.981666 0.867051 0.0094577 +0.77652 1.11809 0.0081709 +1.18766 0.65323 0.0090175 +0.63135 0.53143 0.0084409 +0.973564 1.47447 0.0093426 +0.9041449 1.60298 0.0085479 +0.74867 1.64646 0.012193 +0.58229 0.43351 0.0092144 +0.71435 1.68824 0.0099757 +0.77578 0.49304 0.0073213 +0.808988 0.52673 0.0072184 +0.76708 0.958069 0.0078187 +0.63006 0.69314 0.0088031 +0.31095 1.37375 0.0077474 +0.08429 0.76215 0.0085114 +0.8911395 0.34559 0.0086378 +1.14746 1.06576 0.01148 +1.04275 0.84973 0.0092849 +0.28287 1.50643 0.0070424 +1.63632 1.03391 0.0075904 +1.10287 1.62816 0.0093427 +1.4221 1.3169 0.0082341 +1.07801 1.51886 0.0089865 +1.15164 1.54496 0.0072922 +0.88928 0.46275 0.010278 +1.59016 0.70441 0.0082907 +0.969476 0.74807 0.0090559 +0.922935 0.67572 0.0081247 +0.957293 0.43147 0.0075829 +1.0505 0.7275 0.0076511 +0.68622 0.67853 0.0083614 +0.31874 1.19765 0.006797 +1.26004 0.74878 0.0085602 +1.49251 1.25483 0.0076551 +1.51821 1.31137 0.010533 +1.3989 0.64543 0.010621 +0.875462 0.38967 0.01051 +1.44943 1.00895 0.011303 +1.36943 0.40095 0.0076056 +1.48112 1.21391 0.0097159 +1.23311 0.69984 0.0093823 +0.57243 0.30816 0.0083578 +1.42803 0.802855 0.0109 +1.29042 0.68045 0.0081293 +0.50287 1.41405 0.0089458 +1.30741 0.973061 0.0089572 +1.29012 1.39816 0.0068113 +1.11747 1.18778 0.0087862 +1.21157 0.955779 0.009091 +0.33491 1.47401 0.0085541 +0.2326 1.45965 0.0085298 +1.52681 1.19414 0.010381 +1.37875 1.0758 0.0083088 +1.01304 1.06635 0.0065894 +0.838483 0.804027 0.0096087 +0.74032 0.66327 0.0071425 +0.11979 0.847281 0.0070642 +1.20689 0.78323 0.0076723 +1.31571 1.41828 0.0085018 +0.99115 1.31278 0.0083056 +0.825964 1.57479 0.0092151 +0.65822 0.97914 0.0062444 +0.79728 0.853175 0.0098438 +1.07624 0.67175 0.0086848 +1.37058 1.31049 0.0084557 +1.32041 1.3603 0.0098942 +0.3604 1.34571 0.011692 +1.63709 1.29287 0.0091612 +0.66061 1.58194 0.011094 +1.57608 1.02548 0.0092704 +0.56893 0.72416 0.010101 +1.01709 1.22154 0.0081294 +0.53368 0.39729 0.0081559 +1.57184 0.54646 0.01006 +1.30825 0.52244 0.0087572 +1.17069 0.7054 0.0072426 +1.24677 0.64784 0.0084479 +1.4112 1.3549 0.0083241 +1.40959 1.47971 0.010948 +1.27414 1.22657 0.011375 +1.21298 0.7494 0.0087348 +1.32646 1.25907 0.0075088 +0.3517 0.42773 0.0070386 +0.958695 0.925769 0.0071111 +1.00942 1.45027 0.011221 +1.29994 1.45263 0.0083098 +0.819406 0.74365 0.0083146 +1.49069 0.67515 0.010266 +0.852665 1.24582 0.0069205 +0.47431 1.64808 0.0069374 +0.79619 0.64711 0.0085729 +0.03771 0.888903 0.0093292 +1.25332 0.819004 0.0087023 +0.31259 1.09769 0.0066799 +0.72651 0.918111 0.0096195 +0.31339 1.30513 0.0075258 +0.43235 1.21901 0.0092919 +0.36981 1.22748 0.0079494 +0.75695 0.61146 0.011687 +1.12915 0.30989 0.0095975 +0.65704 1.7059 0.0088754 +1.44251 1.06789 0.0073409 +1.65034 1.19585 0.0098213 +0.976427 1.19285 0.009448 +1.19165 1.40516 0.0066445 +0.39323 0.8926753 0.0086295 +0.882283 0.17149 0.0092095 +0.45316 0.87496 0.0082085 +1.08977 0.871457 0.0086706 +0.961141 0.60318 0.0087088 +1.49462 1.15676 0.0066728 +1.01844 1.76662 0.0062816 +0.41513 0.37592 0.0075879 +1.04085 0.953553 0.0093354 +1.20766 1.47282 0.0086364 +1.27473 0.58126 0.0092259 +0.87116 0.25385 0.0091502 +0.71665 0.95629 0.0083633 +1.17155 1.10894 0.010879 +1.54197 0.6663 0.010213 +1.51828 0.62884 0.010638 +1.26216 1.14771 0.0092403 +1.28969 1.16811 0.0075826 +1.39502 1.18458 0.0087256 +1.5656 1.28823 0.011375 +0.838676 0.62657 0.0078736 +1.64839 1.09806 0.0088476 +0.68629 1.01759 0.010201 +0.73823 1.01239 0.01204 +0.847806 0.831275 0.0097299 +0.28404 1.45978 0.011445 +0.876942 0.53181 0.0099318 +1.24653 1.43704 0.0091337 +0.63678 0.861205 0.0077168 +0.52992 0.922589 0.0099104 +1.17804 0.874254 0.0068188 +0.85796 0.57284 0.0088223 +1.61764 0.964583 0.0074782 +1.0708 1.05419 0.0089945 +0.801742 0.59862 0.008836 +0.62769 0.47891 0.0078421 +1.09744 0.806651 0.0078679 +1.46742 1.13061 0.010484 +0.78817 0.9037917 0.01125 +0.831618 0.47598 0.012005 +1.65237 1.23298 0.0076074 +1.69769 1.20603 0.011617 +0.49004 0.6175 0.0087993 +1.46185 1.18053 0.0096342 +1.32119 0.71572 0.0093549 +0.68529 0.44183 0.0087504 +0.68949 1.65094 0.0097386 +0.9097446 0.61694 0.0079433 +1.21808 1.11726 0.011164 +1.33835 1.03188 0.0098201 +1.07467 0.9089514 0.0090501 +0.41611 1.59571 0.0092059 +0.38406 1.55568 0.010603 +1.11844 1.02943 0.0062871 +1.15314 0.983051 0.0091456 +1.36986 1.23162 0.0097 +1.20774 1.16248 0.0104 +0.42777 0.52223 0.008407 +0.02925 0.857365 0.007481 +1.00765 0.926203 0.0066944 +0.32337 1.43947 0.0087008 +0.975259 0.25997 0.0078543 +1.53227 0.833342 0.0084662 +0.6881 0.892132 0.0086694 +0.53884 0.69636 0.0092913 +1.40997 1.45122 0.0096808 +0.995418 0.38562 0.0089357 +1.19662 1.43735 0.0080789 +1.45205 0.865985 0.0090828 +0.43149 0.939542 0.0079484 +1.08223 1.13475 0.010659 +1.05341 1.17575 0.012291 +0.2357 0.74488 0.0095587 +1.31206 1.50216 0.0085196 +0.60149 1.00249 0.0092244 +1.25608 0.77918 0.0093038 +1.10794 0.72179 0.0099701 +0.995103 0.64161 0.0084901 +1.29458 0.873357 0.0096166 +0.6096 0.21385 0.0066339 +0.78548 1.61211 0.010306 +1.10912 0.38846 0.0090933 +1.13231 0.915432 0.0083999 +0.806717 0.42298 0.0087761 +0.78039 0.30533 0.011863 +1.09822 1.42354 0.011449 +0.63775 0.822739 0.009884 +0.828226 1.68625 0.010527 +1.41373 0.869292 0.00866 +0.991371 1.00105 0.011879 +1.323 0.48895 0.0083433 +1.2792 0.4842 0.0093311 +1.28247 1.2915 0.011542 +1.08905 0.42151 0.0083329 +0.998622 0.74772 0.0050217 +1.34998 1.47068 0.008225 +1.35468 1.19253 0.0091882 +1.11819 1.56982 0.0095834 +1.32836 1.07933 0.0074974 +1.14884 1.37111 0.007838 +1.16318 1.60089 0.010371 +1.07241 1.25898 0.0091531 +0.0739000000000001 0.820771 0.0092959 +1.27917 1.59186 0.0089862 +0.58621 0.7717 0.0097083 +1.01487 1.28222 0.0095931 +1.31619 1.22317 0.0076975 +1.53367 1.24994 0.0088757 +0.986614 0.68364 0.0086399 +1.04038 0.59687 0.0076084 +0.76692 0.921281 0.0093559 +0.67414 0.936551 0.011057 +1.21298 0.56248 0.011013 +1.32192 0.32257 0.0082718 +0.24931 1.12364 0.0087956 +0.27951 0.64528 0.0086062 +0.99885 1.71798 0.0086785 +0.28138 1.22178 0.011514 +1.65991 0.988064 0.010378 +0.802124 0.14397 0.0096378 +1.68452 0.945654 0.011979 +1.07105 0.76469 0.0077229 +0.75079 1.77545 0.010085 +0.59162 0.63663 0.010344 +0.27653 1.30123 0.0096324 +0.45391 0.78541 0.0082187 +1.59741 0.835382 0.0091367 +0.76461 0.43062 0.0090076 +0.32016 0.47212 0.0063757 +1.51098 0.921459 0.0076342 +1.49379 0.962527 0.0088722 +0.3199 0.27012 0.0078229 +1.16718 0.93118 0.0097504 +1.20745 0.915773 0.0096772 +0.870755 0.29375 0.0088078 +0.41617 0.65265 0.0097394 +0.72287 0.57488 0.0082455 +0.63172 1.53251 0.0083823 +1.04955 0.984183 0.0085148 +1.10266 1.07863 0.0077215 +1.23658 1.25959 0.010145 +1.21008 1.21889 0.0080974 +1.34043 0.65781 0.0074723 +0.77326 0.35867 0.009428 +1.4369 0.961961 0.0085854 +0.77272 0.21504 0.010411 +0.2006 0.61964 0.0082087 +0.72883 0.47025 0.0082646 +0.933576 0.970713 0.011563 +1.11305 1.51774 0.0079373 +0.911251 0.41815 0.0095623 +0.28018 1.40923 0.0082076 +0.5416 0.63836 0.0077342 +1.08567 1.38119 0.0085874 +1.55599 0.9044283 0.009407 +0.45101 0.98383 0.010864 +0.78014 0.70157 0.0075824 +1.40015 0.55868 0.0092262 +1.45298 0.55429 0.0097891 +1.10264 0.78081 0.0083918 +1.45218 1.41867 0.0096393 +1.12754 1.12626 0.010327 +0.814929 1.78367 0.0079715 +1.6095 0.881215 0.010388 +1.66413 0.57792 0.010063 +1.14299 1.65849 0.010454 +1.39705 0.44351 0.008103 +1.26106 1.4897 0.013919 +1.15497 1.48025 0.007207 +1.28847 1.04156 0.01165 +1.27861 0.30986 0.010793 +1.02315 1.01097 0.0086211 +1.21863 1.5266 0.010994 +1.67246 1.04191 0.0099585 +0.36286 0.50114 0.0082223 +1.52473 1.14039 0.0089552 +1.40273 1.11792 0.0074547 +0.37574 0.812066 0.0097835 +0.34232 0.978851 0.009407 +0.10142 0.997573 0.008915 +0.54007 0.981681 0.012162 +0.23204 0.4926 0.0096347 +1.11264 0.15563 0.010071 +1.08613 1.21301 0.006907 +1.55789 0.7979 0.0085356 +1.17465 1.5057 0.0072716 +0.62549 0.42808 0.0087384 +0.67947 0.3854 0.0083005 +0.937172 0.22574 0.007702 +0.71151 0.62891 0.0098738 +1.65179 0.939402 0.011169 +1.42093 1.51573 0.006744 +1.23509 1.39947 0.0085432 +1.56944 0.864511 0.0093598 +0.56392 1.70832 0.0091062 +0.988776 0.967137 0.013095 +0.972525 0.134 0.0081147 +1.2689 1.09785 0.0097492 +1.35815 0.35955 0.009778 +0.918072 0.26356 0.010012 +0.34479 1.57574 0.0097781 +1.26405 0.35825 0.0060286 +0.61641 0.72927 0.008998 +1.36611 1.50262 0.0079361 +1.32885 0.20197 0.0087784 +1.2726 1.54194 0.012627 +1.21349 1.60617 0.010369 +0.14295 0.77131 0.01126 +1.35201 0.54831 0.010325 +1.03814 0.8949388 0.008885 +0.32947 0.32801 0.0089385 +0.64145 0.9042843 0.0087107 +1.01283 0.20815 0.0089424 +1.12707 1.31408 0.010924 +1.06641 1.46672 0.0084466 +1.3181 0.59824 0.0088783 +0.66071 0.75834 0.0095132 +1.45493 0.35192 0.0088533 +0.983801 1.76192 0.010322 +1.23634 1.57177 0.0090546 +0.923951 0.57149 0.0089975 +0.54172 1.66349 0.0095171 +0.21635 0.43769 0.010044 +0.960978 0.0779300000000001 0.0085488 +0.4866 0.84601 0.0092394 +0.47621 0.54258 0.0077881 +0.50934 0.55857 0.0078841 +0.24403 1.06606 0.0076566 +1.34184 0.924871 0.008038 +0.997998 0.60057 0.0079205 +0.849271 0.42748 0.010736 +1.23754 0.23429 0.0083376 +1.35476 1.38689 0.0095412 +1.03962 0.3581 0.011447 +0.52702 1.68662 0.010309 +1.25354 1.29976 0.0098176 +1.51126 0.801975 0.0089528 +1.25303 1.01132 0.009828 +1.56628 0.60608 0.0074591 +0.12266 0.972014 0.01259 +0.962089 1.72691 0.0073533 +1.39873 0.982362 0.0093811 +1.50372 1.10278 0.0099737 +1.12129 0.35126 0.0085398 +1.35716 0.50635 0.0093402 +1.36235 0.46483 0.0098583 +0.940411 1.75839 0.0080494 +0.49826 0.67945 0.011143 +0.29272 0.975868 0.0073388 +0.926456 0.37934 0.0099569 +1.61391 0.52453 0.0083887 +0.11215 0.807285 0.009848 +0.04405 1.07526 0.0090337 +1.06685 0.63329 0.010151 +1.19618 1.2731 0.0084857 +1.38423 0.811065 0.0097138 +1.50763 0.7228 0.01051 +1.38739 1.41334 0.0099404 +1.35666 1.44547 0.0091023 +0.54053 0.7557 0.0081573 +1.44369 1.37202 0.009426 +1.02334 1.17634 0.0088469 +0.22603 1.33702 0.0080153 +0.26802 1.34743 0.0094395 +1.19437 1.65003 0.0083707 +0.33026 0.846491 0.0098297 +1.06848 1.43554 0.01267 +1.50556 0.53729 0.0086772 +1.22428 0.34418 0.010781 +1.17424 1.31827 0.0093527 +0.62965 0.39194 0.0086442 +0.3033 1.26673 0.0115 +1.45638 1.50981 0.0099853 +1.31545 0.62396 0.0099263 +0.19324 0.77995 0.0098147 +0.71371 0.28907 0.0092747 +0.27832 1.09777 0.0090573 +0.72139 1.73529 0.010941 +0.69223 1.72452 0.0077636 +0.78367 0.804686 0.0089451 +0.28256 1.14985 0.010572 +0.39974 0.845848 0.010365 +1.29849 0.807136 0.0076818 +0.926798 0.0967 0.0079646 +0.4952 0.39923 0.009144 +0.5551 0.50057 0.0096319 +0.0194 0.812128 0.010475 +0.53724 0.82886 0.0081525 +1.37706 1.14586 0.0088821 +0.56608 0.942681 0.0080615 +1.60709 0.5803 0.009412 +0.910621 1.73936 0.0079788 +1.30426 1.06975 0.0088553 +1.43696 1.55321 0.0083103 +1.19096 1.56204 0.0097635 +1.46087 0.2172 0.010133 +0.591 0.39372 0.009191 +1.12586 0.1929 0.0085718 +0.851763 0.3419 0.010173 +1.37758 0.70673 0.00789 +1.05222 0.13857 0.010314 +0.52119 0.52285 0.0094842 +0.806728 1.66548 0.008483 +0.875559 1.7128 0.0089944 +0.67149 1.75047 0.0071868 +0.72604 0.41377 0.0067964 +1.18623 1.68718 0.008915 +1.2612 0.20744 0.0078891 +1.26708 0.25868 0.0070006 +0.13513 1.07171 0.0085585 +1.33545 0.8984658 0.0073571 +0.08201 1.04787 0.0071149 +0.666 0.10946 0.010733 +1.40382 1.39233 0.010497 +0.19854 0.69788 0.0089597 +0.14637 1.01794 0.010238 +0.68593 0.55032 0.010253 +1.08363 0.52665 0.009925 +0.31962 1.06487 0.0091932 +0.34142 1.02066 0.0084096 +0.0789500000000001 0.862167 0.009456 +1.60364 0.76756 0.0093013 +0.61661 0.31886 0.0093742 +0.33659 1.2347 0.0073676 +0.814942 0.05222 0.010174 +0.11966 0.55645 0.0099876 +0.40467 0.41893 0.0092427 +1.04164 0.3094 0.010345 +1.22967 0.881499 0.0093872 +1.23195 0.18121 0.0090552 +1.25732 0.947787 0.0091237 +0.2822 0.811218 0.0090112 +1.15924 0.15544 0.0099759 +1.31363 1.01749 0.011601 +1.46714 0.51655 0.0085956 +1.49106 0.58107 0.0098967 +0.52276 0.866936 0.0098371 +1.57527 0.7647 0.0083642 +1.48024 0.72597 0.010895 +1.04068 0.45865 0.0083785 +0.849873 0.12205 0.010994 +0.46026 0.58306 0.0082446 +1.07889 0.4653 0.0090026 +0.27433 0.49473 0.0093521 +0.15643 0.817966 0.01097 +0.23474 1.22204 0.0086919 +0.53237 0.59254 0.0095723 +1.14656 1.43067 0.007972 +1.53069 0.56655 0.0092519 +0.02253 0.998861 0.010204 +1.43525 0.57454 0.0076276 +1.51793 1.40506 0.007392 +1.49559 1.43116 0.0078289 +1.04927 1.63701 0.0095075 +1.18051 0.42017 0.0072875 +0.29496 1.055 0.0096502 +1.63006 0.6549 0.0099082 +1.54236 1.41557 0.010473 +1.05385 1.69839 0.0093235 +0.57738 0.25069 0.011122 +0.26293 1.17387 0.011229 +0.14888 0.988857 0.010877 +1.63843 0.74441 0.0096659 +1.01284 0.824096 0.0079812 +0.967479 0.17739 0.0099203 +0.44652 0.827236 0.0092651 +0.30442 0.881215 0.0091942 +0.28758 0.901883 0.011756 +0.34367 0.8942668 0.0098346 +0.25805 0.69973 0.0092401 +1.70405 1.11221 0.0079307 +1.31566 1.12142 0.010558 +0.181 1.32195 0.0088157 +0.980038 0.33282 0.0089315 +1.73711 0.997037 0.0076166 +1.34657 0.32026 0.0084768 +1.447 0.753 0.0098135 +1.48862 0.76865 0.0091999 +1.18504 0.18638 0.0092239 +1.14308 0.850639 0.0088362 +0.77074 0.56366 0.0097605 +0.43381 0.45318 0.0097365 +0.953723 0.3693 0.0093182 +0.2459 0.838355 0.0068003 +0.23084 0.875284 0.0097725 +0.25163 0.881559 0.0093774 +1.1516 0.35127 0.0087993 +0.836499 1.71444 0.0086016 +0.877655 1.68203 0.010609 +0.17342 0.73455 0.0098644 +0.0742 0.951609 0.011511 +1.00697 0.15002 0.0096092 +1.1119 1.46773 0.010123 +1.37553 1.27119 0.0087838 +0.965271 0.46712 0.0093226 +0.15841 0.67101 0.0098214 +1.72354 0.803019 0.0094903 +1.68004 1.28304 0.0079206 +1.68506 1.31088 0.0096074 +0.32108 1.51742 0.0093256 +1.48893 0.831395 0.0080876 +0.861981 0.20252 0.0071112 +0.886282 0.22715 0.0084631 +1.42742 0.45101 0.006872 +1.24585 1.06298 0.010058 +0.32127 0.930778 0.0088716 +0.11032 0.6725 0.0076909 +0.62381 0.12993 0.0090351 +1.53382 1.36875 0.0088302 +1.49336 1.35276 0.011356 +0.963774 1.68488 0.0084381 +0.929063 1.67925 0.0074257 +0.930762 1.63647 0.010598 +1.66672 0.837537 0.0089125 +0.37543 1.60627 0.0095413 +1.15089 1.27713 0.01138 +1.11055 0.64404 0.009414 +0.1615 0.843302 0.010904 +0.21072 0.827505 0.010062 +1.04443 1.74093 0.01017 +1.46845 1.53502 0.0090489 +1.31777 1.55561 0.0076363 +1.36006 1.11215 0.009006 +0.819996 0.19137 0.0085442 +0.18728 0.888998 0.010392 +0.940456 0.18535 0.0086788 +1.10662 1.2989 0.0099921 +0.76646 0.25763 0.0097082 +1.54962 1.48843 0.010478 +0.45501 0.62414 0.0073743 +0.4261 0.60797 0.0069175 +1.10172 0.67034 0.010681 +1.7469 1.04067 0.0091792 +0.27123 0.46993 0.0082807 +0.931676 0.147 0.0083081 +0.25345 0.46036 0.0090858 +1.16857 0.76299 0.0098687 +1.30064 0.12802 0.0097848 +0.21773 1.17368 0.0085164 +1.26954 1.34045 0.010069 +1.32555 0.39782 0.0073957 +1.3132 0.35979 0.009164 +1.23225 0.0898 0.0083445 +1.37336 1.58069 0.0084727 +0.38406 0.31189 0.008779 +1.52845 0.76181 0.0096409 +0.801186 0.22818 0.010212 +1.06512 0.813396 0.0069958 +1.68555 1.0792 0.0087168 +1.38905 1.54079 0.0084034 +1.25589 1.62847 0.0095386 +1.15367 0.07497 0.0076587 +0.13441 0.941682 0.01097 +0.25733 0.820326 0.0085649 +1.3592 0.63157 0.0077701 +1.36407 0.59166 0.010351 +1.40914 0.60314 0.0095063 +0.59278 0.58453 0.0080705 +0.38954 0.53772 0.010352 +0.30746 1.01252 0.0073293 +0.971531 0.21828 0.0087964 +1.32607 0.25594 0.0088599 +1.33819 1.15757 0.0085945 +0.0946900000000001 1.09277 0.0075138 +0.36565 1.0315 0.0088565 +1.19776 1.36462 0.010558 +1.4153 1.26329 0.0096256 +1.17823 0.82724 0.009868 +1.51817 1.45095 0.0097439 +0.14527 0.69259 0.010326 +1.24791 0.967349 0.0091968 +0.73075 0.33001 0.010032 +1.29323 0.23687 0.0080507 +0.32917 1.15264 0.010909 +0.30834 1.13846 0.010584 +0.65707 0.65386 0.0081093 +0.65221 0.19964 0.008304 +0.50728 0.72571 0.0086785 +1.10702 0.56178 0.0098832 +1.737 1.15416 0.007927 +0.55265 0.267 0.009134 +0.67178 0.30282 0.010565 +0.39362 0.48487 0.0074553 +0.39154 0.45851 0.0097977 +0.28498 0.78603 0.0096947 +1.2795 0.19329 0.0093503 +1.24434 1.18038 0.0073021 +1.68633 0.72112 0.0082309 +1.53447 0.70934 0.0098808 +1.55347 0.72697 0.0085822 +1.6926 0.69765 0.006624 +1.62949 1.38925 0.010597 +0.29586 0.43818 0.0083825 +1.52493 0.51423 0.011078 +0.6704 0.57194 0.0093725 +1.59085 0.37122 0.008221 +0.22342 1.40665 0.009293 +0.34547 0.29691 0.0068883 +0.53439 0.19735 0.0080489 +0.56662 0.18337 0.0081974 +1.4117 0.2339 0.008952 +1.47812 1.30641 0.0076821 +1.46781 1.33977 0.0096674 +0.924686 1.71879 0.0094768 +1.397 0.928948 0.0075038 +1.28984 1.33105 0.009557 +0.27044 0.59043 0.009214 +1.30983 0.1672 0.0073541 +1.59377 0.66937 0.0084142 +1.55875 0.43338 0.010676 +1.18702 0.28226 0.0071822 +1.67263 0.885858 0.0087608 +0.36169 0.874083 0.0087776 +1.40354 0.37286 0.011891 +1.43905 0.38468 0.0078106 +0.53522 1.61526 0.011125 +1.49123 0.46901 0.0092016 +0.55239 0.78507 0.0071683 +1.09574 1.34436 0.0092827 +0.30892 0.55885 0.0085479 +0.860789 1.75176 0.0093786 +1.50469 0.49058 0.0098878 +1.69081 1.02243 0.010003 +0.26862 0.56419 0.010342 +0.64389 0.61583 0.0089861 +0.17281 0.56841 0.0085212 +0.23887 0.959714 0.0098384 +1.64404 0.825996 0.0090103 +1.64864 0.69172 0.0093747 +1.09573 0.34175 0.0093905 +1.45884 1.26995 0.0093941 +0.03005 0.941587 0.0092955 +1.48551 1.37837 0.010296 +1.44297 0.2597 0.0096242 +1.45592 0.29972 0.0093079 +0.875944 0.08625 0.0096414 +0.38887 0.62341 0.0094341 +0.27604 0.848337 0.0079076 +1.12602 0.68256 0.0091137 +1.13763 0.4239 0.01047 +1.3236 0.11888 0.0093906 +1.35633 0.837761 0.0083167 +1.36654 0.20201 0.006449 +0.24579 0.919128 0.010303 +0.20885 0.932455 0.0092866 +1.21383 0.48478 0.0078463 +1.32471 1.30806 0.0089335 +1.71814 0.63696 0.0085561 +1.72931 0.61545 0.0093624 +0.19485 0.53564 0.009573 +0.11765 1.02195 0.010937 +1.51736 0.43962 0.0091536 +1.5413 0.4735 0.0093112 +0.16479 0.883749 0.010392 +0.14495 0.9197 0.010589 +0.17785 0.925111 0.0080279 +0.47929 0.52129 0.0093688 +0.882813 1.63769 0.0093721 +0.06833 0.913725 0.0065637 +0.833632 1.74367 0.01107 +1.30589 0.73749 0.0098654 +0.38946 0.72168 0.0092653 +1.21782 1.65157 0.010515 +1.09057 0.18947 0.0070887 +0.990129 0.42436 0.0077069 +0.72701 0.37011 0.0090182 +0.4616 0.65884 0.0088148 +0.48585 0.70691 0.010971 +0.30528 0.41825 0.0078045 +0.26842 0.39796 0.0097428 +0.25761 0.42045 0.0093253 +1.18657 0.32418 0.010068 +0.20099 0.847635 0.010062 +0.24995 0.38134 0.0095982 +0.0480900000000001 0.75921 0.0076471 +1.55796 1.43774 0.0092717 +1.42723 1.20573 0.0082026 +0.69194 0.18754 0.0088925 +1.12946 0.10175 0.0098011 +0.2116 1.03656 0.0087711 +1.5025 0.29711 0.011939 +0.56198 0.8955346 0.0095189 +0.17339 0.955106 0.0076452 +0.30857 1.5555 0.0076701 +1.39393 0.32907 0.0088875 +1.32555 0.77486 0.010044 +0.1535 1.35386 0.0093598 +1.40421 0.75005 0.0077842 +0.956115 0.830147 0.0088329 +1.36355 0.23806 0.010389 +0.29134 0.831788 0.0080284 +0.38118 0.911164 0.0090432 +0.2267 0.66086 0.0091942 +0.57308 0.6155 0.0094181 +0.837194 0.32154 0.0070047 +1.14519 0.54545 0.009047 +1.22222 1.35776 0.010382 +0.18979 1.37649 0.010382 +1.62713 0.859514 0.0085087 +1.43115 0.4153 0.0078185 +1.22792 1.67518 0.010973 +0.0760500000000001 1.00455 0.0079902 +0.829614 0.26596 0.0089512 +0.14772 0.61913 0.0098109 +0.71698 0.15417 0.010724 +0.69628 0.2456 0.0092001 +1.67495 0.800449 0.0090612 +0.35626 0.36846 0.0097081 +0.70575 0.20168 0.0086404 +0.04398 1.02992 0.0084782 +1.58675 1.3758 0.0080111 +1.52126 1.08447 0.0096892 +0.2641 1.03256 0.0080967 +1.02885 0.261 0.0086324 +1.6202 1.34774 0.0085727 +1.70655 1.1669 0.0080637 +0.27297 0.3198 0.0081731 +1.17981 0.49398 0.0079727 +0.70574 0.51302 0.0095578 +1.18955 0.23535 0.0091372 +0.50822 0.27757 0.0095424 +1.65642 0.50476 0.0076024 +1.06854 0.34331 0.0099471 +1.14472 0.66362 0.0089991 +0.33199 0.22412 0.0078729 +0.68619 0.22781 0.0085467 +0.27843 0.94667 0.0074254 +0.43153 0.56453 0.0079311 +1.08435 0.30434 0.0093308 +0.67773 0.59618 0.0094164 +1.21836 0.43801 0.0095052 +1.23522 0.47517 0.0089663 +1.19584 0.44821 0.0070982 +0.63526 0.06116 0.010785 +1.68066 0.65945 0.0091116 +1.70157 0.983667 0.0089494 +1.65485 0.877916 0.0067074 +0.8929559 0.12332 0.0097491 +0.12177 0.73164 0.0081963 +1.61056 0.935525 0.0067793 +1.62865 0.901702 0.010103 +1.37502 0.8939158 0.0097662 +0.41527 0.7607 0.0081034 +0.50604 0.800728 0.0097236 +0.49383 0.821528 0.0085351 +0.69578 0.14278 0.0085611 +1.68694 1.26048 0.0091683 +1.3742 0.77074 0.0083353 +1.34085 0.75403 0.0087338 +1.33998 0.79907 0.010212 +0.43927 0.21652 0.009376 +1.03337 0.17818 0.0083782 +0.996252 0.17423 0.0084973 +1.21763 0.30342 0.0092428 +0.62933 0.57878 0.0096034 +1.10972 1.74376 0.0077758 +0.35534 0.939946 0.0075102 +1.73738 1.11765 0.0080364 +1.41838 0.28863 0.0088601 +1.40379 0.25509 0.0091599 +1.40231 0.30477 0.01019 +1.42898 0.829822 0.0092582 +0.40835 0.31408 0.0099639 +0.37218 0.38689 0.010728 +0.804641 0.29499 0.010057 +1.15729 0.11061 0.0092399 +0.19405 0.996842 0.01027 +0.20658 0.65729 0.0091942 +1.08338 0.11054 0.0088165 +1.64749 0.61009 0.0089061 +0.79313 0.25384 0.0093593 +0.53415 0.54038 0.0070336 +0.57046 0.52521 0.0098853 +0.73716 0.13781 0.011045 +1.36472 1.5548 0.010534 +0.62971 0.29803 0.0081978 +0.59399 0.27383 0.00912 +0.16593 1.22749 0.0075757 +0.64672 0.23867 0.01038 +0.62272 0.24797 0.0094433 +1.66444 0.47121 0.0075778 +0.28803 0.67692 0.0078005 +0.08772 0.71077 0.0091757 +1.12207 0.46121 0.0095616 +0.57996 0.54968 0.0086377 +0.54997 0.57449 0.010057 +0.19888 1.43542 0.0094584 +0.18808 1.4006 0.0076093 +1.0006 0.1049 0.0092934 +1.49415 0.34918 0.0072458 +0.31377 0.75575 0.0089001 +0.993617 0.29408 0.0089483 +1.06692 0.25945 0.0076647 +1.0349 0.24184 0.0090402 +1.05872 0.27438 0.0076647 +0.23121 0.55801 0.0086778 +0.08042 1.125 0.008925 +0.38094 0.34377 0.0070776 +0.50088 0.76089 0.0082999 +0.73024 0.05704 0.0064678 +0.56911 0.20687 0.0094327 +1.31981 0.837377 0.0083185 +0.63873 0.35383 0.0091808 +0.59978 0.35753 0.008309 +1.76747 1.09454 0.0089652 +1.13098 1.74738 0.0078178 +0.50653 0.14617 0.0083084 +1.3768 0.29214 0.0099407 +1.08887 1.73561 0.0096922 +1.22154 0.41222 0.010069 +0.07504 0.68853 0.0080693 +1.57018 1.36217 0.0083592 +1.3581 0.27805 0.0091192 +1.30865 0.2714 0.0087733 +0.42465 1.63938 0.0095824 +1.7007 0.75879 0.0093393 +1.22183 0.21705 0.0079465 +0.21277 0.8940446 0.010664 +0.6511 0.13278 0.0096167 +0.35518 0.24874 0.0085948 +1.08449 0.22277 0.0087544 +1.17062 0.78615 0.0090829 +1.13359 0.800728 0.0084266 +0.953149 0.5277 0.0095242 +0.23447 1.00404 0.0092987 +0.24737 0.78168 0.0089977 +0.35849 0.79492 0.0096822 +0.20402 1.08414 0.0085771 +0.58673 0.17014 0.0097053 +1.56422 0.50206 0.0082595 +1.29012 0.39114 0.0086167 +1.26253 0.41999 0.010105 +1.35484 0.994022 0.010299 +1.15866 1.7202 0.0078 +1.12488 1.71604 0.0073393 +1.18011 0.39211 0.0087185 +0.4596 0.48835 0.0098795 +0.1775 1.05414 0.0079876 +1.43417 1.22587 0.0083506 +1.22586 0.37168 0.0084621 +1.21851 0.846563 0.0082621 +1.61724 1.41267 0.0091607 +1.69151 0.50575 0.0095849 +1.51789 1.53982 0.0080396 +0.26755 0.75642 0.0066929 +0.34109 1.53409 0.00979 +0.66692 0.51017 0.010176 +0.68993 0.48061 0.009056 +0.76971 0.16855 0.008835 +0.73765 0.19091 0.0089018 +0.0532 0.7292 0.0070154 +1.2842 0.11248 0.008197 +1.02119 0.11274 0.0088167 +1.58012 1.39615 0.0083864 +0.77238 0.12693 0.00656 +1.53239 0.78755 0.010613 +0.54077 0.23058 0.0082017 +0.62698 0.10505 0.0078745 +0.6536 0.32074 0.0079387 +1.63601 0.78669 0.0080508 +1.31063 1.62603 0.01093 +1.03228 0.40891 0.0089494 +1.04966 0.41857 0.0087612 +1.06878 0.38948 0.0085661 +1.42647 0.19151 0.00968 +0.12735 1.11152 0.010424 +0.67081 0.34828 0.0077988 +1.01409 0.0699000000000001 0.0097035 +0.11252 1.28285 0.0090337 +1.7295 0.70272 0.0094486 +0.48569 0.75006 0.0064887 +1.70925 0.59699 0.010047 +1.73944 0.68394 0.0095625 +0.29444 0.59715 0.0079673 +0.34348 0.64395 0.0083516 +0.56135 0.36403 0.010075 +0.925515 0.53359 0.0080855 +1.71283 0.845484 0.007028 +0.22967 0.5974 0.0090605 +0.24058 0.61995 0.0099193 +0.20894 1.13453 0.009558 +0.837634 0.17108 0.010191 +1.76666 0.71927 0.0072158 +0.32544 0.70675 0.0086941 +1.46409 0.26306 0.0075016 +0.17431 1.14978 0.0074569 +1.03812 0.10011 0.0087193 +0.47137 0.36677 0.0079404 +0.45122 0.35423 0.0092461 +0.50735 0.36244 0.0089781 +0.945581 0.813584 0.0088329 +1.44992 0.840282 0.0096922 +0.69224 0.32087 0.008704 +0.35263 0.59291 0.008956 +0.33824 0.57808 0.0078616 +0.13657 0.57855 0.0089301 +0.24692 0.66513 0.0069358 +0.09831 0.914856 0.0065721 +1.08653 0.37833 0.0086217 +1.03497 0.4805 0.0093079 +0.976953 0.52909 0.00837 +0.15581 0.52814 0.0092527 +1.56689 0.4111 0.0096346 +1.53462 0.39053 0.0083155 +0.27718 0.26945 0.0069066 +0.932069 0.75841 0.0085189 +1.37414 0.870717 0.0096358 +0.2309 1.0244 0.0070901 +0.31149 0.31118 0.0081083 +0.10862 0.8933965 0.0075722 +0.31268 0.50908 0.0094892 +0.28449 0.53194 0.0083472 +0.38175 0.76334 0.0081642 +1.54561 0.33168 0.0083152 +0.73333 0.22637 0.0086064 +1.14358 0.49383 0.0097698 +0.29283 0.35165 0.0084741 +0.57497 0.14712 0.0085893 +0.11988 1.13344 0.010344 +1.06278 0.56098 0.009292 +0.31846 0.809903 0.008105 +1.70716 1.25803 0.0085396 +1.30042 0.924228 0.0074951 +0.21278 1.37456 0.0084919 +0.24828 1.37911 0.0080936 +0.33246 0.67446 0.0068949 +0.35854 0.69346 0.0074159 +1.71863 0.57413 0.0080046 +0.36267 0.65992 0.0086066 +0.803644 0.07855 0.0093007 +1.19936 0.61267 0.0095405 +1.26891 0.15668 0.010061 +1.03499 0.79192 0.0088699 +0.998766 0.78724 0.0085885 +1.03203 0.76938 0.0088885 +1.11994 0.52439 0.0083308 +0.50488 0.31645 0.0073956 +0.49133 0.30716 0.0073956 +0.52551 0.29068 0.0078419 +1.76142 0.8904521 0.0071482 +1.14262 0.46995 0.010049 +1.17832 0.45983 0.0081373 +0.04501 0.66528 0.0090212 +1.50356 0.25054 0.008212 +0.59152 0.51521 0.0083598 +0.59196 0.49452 0.0081454 +0.8919115 1.77086 0.0073469 +1.41098 0.8926087 0.0074254 +0.43104 0.72126 0.010041 +0.73143 0.876206 0.0093753 +0.858715 0.07023 0.009788 +1.65446 1.35425 0.0083651 +1.48946 0.37962 0.0069328 +0.44706 0.67896 0.010633 +0.27918 0.71852 0.010265 +0.14481 1.31274 0.008681 +0.15155 0.59652 0.0086743 +1.70804 0.73564 0.0097075 +1.59694 0.4609 0.008195 +1.62583 0.48741 0.0078386 +1.63011 0.47053 0.0078386 +1.04787 0.52091 0.0075691 +1.0379 0.53446 0.0075691 +1.65627 0.75768 0.008593 +1.6765 0.75942 0.0090561 +1.66809 0.71978 0.0080599 +1.74361 0.832453 0.0075281 +1.20084 0.51451 0.0065547 +0.66059 0.26108 0.0092296 +0.65908 0.0638500000000001 0.0092381 +1.21832 1.71502 0.0083842 +1.06475 0.21026 0.0088394 +1.44902 1.59179 0.0089597 +1.24635 0.267 0.0075465 +1.22202 0.25015 0.006573 +1.225 0.26737 0.0078641 +1.59806 0.63483 0.0072835 +1.5627 0.63117 0.0093869 +1.60242 0.61924 0.0072835 +0.46891 0.72445 0.0082803 +0.18958 0.960251 0.0076452 +0.922219 0.49702 0.0079859 +0.911555 0.79158 0.0093337 +1.33658 0.872437 0.0099501 +1.70814 0.66948 0.0076861 +1.59794 0.44244 0.0083189 +1.60151 0.41017 0.0072447 +1.61758 0.41108 0.0072447 +0.71668 0.75548 0.0074023 +0.22088 0.806869 0.0079769 +0.17408 1.09969 0.0076643 +0.830435 0.22613 0.0086378 +0.49405 0.34643 0.0066824 +0.17826 1.28786 0.0075044 +1.10474 0.49495 0.0082447 +0.941062 0.870312 0.0079749 +0.59511 0.09507 0.0078462 +1.22778 1.33537 0.0095772 +1.21507 1.30233 0.0081351 +0.16647 1.13518 0.0074569 +1.07014 0.49102 0.0086505 +0.71931 0.820931 0.0072562 +1.09114 0.59698 0.0079658 +1.11115 0.59987 0.0084818 +1.55297 1.05509 0.0080048 +0.32909 0.52411 0.0088176 +0.31926 0.38311 0.0091598 +1.26732 1.66671 0.0075301 +1.25726 0.44256 0.0088942 +0.69025 0.28383 0.008592 +0.928516 0.855182 0.0088299 +0.18379 0.45848 0.0084019 +0.19856 0.4951 0.0081504 +0.930917 0.0614100000000001 0.0079854 +1.19052 0.35798 0.0072937 +0.23185 0.53828 0.0088857 +1.34999 1.53661 0.0081495 +0.3993 0.19837 0.010038 +0.68058 0.15421 0.0084615 +0.36449 0.75019 0.0091905 +1.10997 0.25039 0.008165 +1.13944 0.25496 0.0066251 +1.14043 0.2292 0.0071133 +1.17408 0.57739 0.0078821 +1.14023 0.57887 0.0082399 +1.16516 0.60809 0.007568 +1.08611 0.50473 0.0084796 +1.20335 0.14875 0.01017 +1.74112 1.07485 0.0068318 +0.73297 0.0894900000000001 0.0075297 +1.557 0.34959 0.0079378 +1.5441 0.3686 0.0090427 +0.831523 0.0312100000000001 0.0088422 +0.1098 0.53214 0.0086683 +0.74328 0.79633 0.0088857 +1.00001 0.58239 0.0082314 +0.0997100000000001 0.56618 0.0078359 +0.7963 0.0394300000000001 0.0079454 +0.70871 0.72531 0.0077839 +0.8966392 0.74935 0.007669 +0.22102 0.972339 0.0083888 +1.71385 1.0481 0.0067909 +0.0524600000000001 0.69052 0.0068357 +0.4488 0.30233 0.0090863 +0.15663 1.19131 0.0069151 +0.79479 0.10116 0.0088456 +1.72234 0.958668 0.007647 +1.70438 0.96398 0.008425 +0.44878 0.7508 0.0068687 +0.72226 0.07606 0.007731 +0.0701700000000001 0.66706 0.0064314 +0.41378 0.808631 0.0082263 +1.78145 0.855642 0.0093298 +1.74806 0.865504 0.0071071 +1.73325 0.870991 0.0071071 +1.77167 0.917486 0.0071194 +1.77563 0.932802 0.0071194 +1.73991 0.92685 0.0079591 +0.71148 0.11051 0.0063741 +0.03368 0.74887 0.0058675 +0.02335 0.78524 0.0088043 +0.39879 0.78637 0.0060098 +0.67605 0.71642 0.008611 +0.43547 0.14497 0.0078176 +1.52477 0.35793 0.0075997 +1.52525 0.33751 0.0082143 +0.47426 0.15036 0.007212 +1.16379 0.51915 0.0069938 +0.22652 0.39426 0.0099653 +0.20217 0.39779 0.0089731 +0.23418 0.41831 0.0091419 +0.99179 0.04332 0.0084135 +1.15352 0.25927 0.0066251 +1.12648 0.77964 0.0088445 +0.11335 1.21512 0.0082981 +1.73798 0.8966612 0.006795 +0.51239 0.25536 0.010119 +1.14414 0.62814 0.0076099 +1.16061 0.62427 0.007568 +1.47636 1.45024 0.0093778 +0.14694 1.16465 0.0072527 +0.12821 1.18776 0.0066298 +0.14161 1.19785 0.0070099 +1.72237 1.10298 0.0078765 +1.48782 1.47082 0.0083086 +0.70205 0.09995 0.0063741 +1.75299 0.75306 0.0074001 +0.21921 1.09566 0.0085771 +1.21609 0.10969 0.0098233 +0.20354 0.36018 0.009158 +1.02873 0.03185 0.0090193 +1.74765 0.943014 0.0075086 +0.05115 1.13236 0.0071723 +1.36502 0.15169 0.0089868 +0.45168 0.25585 0.0092014 +1.17874 0.12013 0.0078589 +1.66153 0.53524 0.0073746 +0.15971 1.04055 0.0079992 +0.62634 0.17289 0.0087162 +1.0973 0.05006 0.0079106 +0.30609 0.77709 0.0086705 +0.34089 0.78142 0.0083675 +0.75683 0.87498 0.0084361 +0.55666 0.15252 0.0060576 +0.48615 0.886458 0.0081875 +0.49904 0.22118 0.0074866 +0.25718 1.31038 0.0089716 +0.17152 0.47466 0.0081371 +0.913172 0.0612900000000001 0.0079447 +0.9056568 0.03445 0.0068679 +0.154 0.4702 0.0080227 +0.35639 0.54465 0.0061588 +0.883097 0.824752 0.0055703 +0.812255 0.77966 0.006895 +0.10571 0.63247 0.0065276 +1.57899 0.46998 0.0081938 +0.53682 0.33262 0.0097138 +0.49758 0.867996 0.0082297 +1.4531 1.48199 0.0090681 +1.45424 1.45832 0.0086329 +0.53716 0.13457 0.0067161 +0.43667 0.33787 0.0088703 +0.965579 0.78738 0.0072172 +0.846542 0.76321 0.0072013 +1.10355 0.26882 0.0087794 +1.24754 0.89953548 0.010133 +1.13015 0.86952 0.0085155 +1.68041 0.54239 0.0090838 +0.18999 0.37853 0.0090323 +1.00391 0.02695 0.0091624 +0.39131 0.60104 0.0085257 +0.69458 0.06658 0.0062984 +0.68663 0.0781000000000001 0.0062984 +0.86833 0.74053 0.0072096 +0.8902197 0.76615 0.0070974 +0.93026 0.78114 0.0096404 +1.72239 0.929216 0.0077185 +0.13605 1.21519 0.0071178 +1.01518 0.51721 0.0067375 +0.922294 0.72299 0.0078334 +0.67338 0.04411 0.0094109 +0.3817 0.67256 0.0073937 +0.40836 0.69008 0.0075578 +0.72847 0.76695 0.0074023 +1.3691 0.956456 0.0085097 +1.33683 0.946775 0.0064768 +0.0761500000000001 1.20786 0.0079899 +1.04483 0.04454 0.006766 +0.19811 1.21675 0.0086286 +0.77614 1.30042 0.0099521 +0.54307 1.2543 0.010457 +0.70533 1.40764 0.0097103 +0.72322 1.12183 0.0096075 +0.40154 1.2565 0.0099221 +0.75736 1.20919 0.010523 +0.48151 1.2264 0.0077045 +0.8 1.14978 0.0090468 +0.73047 1.17303 0.0076108 +0.67798 1.19528 0.0085215 +0.547 1.17945 0.010282 +0.76671 1.43862 0.0072952 +0.6095 1.20571 0.0079402 +0.882157 1.07828 0.0063974 +0.5391 1.36494 0.00762 +0.76575 1.36347 0.0078925 +0.942923 1.36518 0.0077287 +0.50562 1.29186 0.0076012 +0.6522 1.10167 0.0075119 +0.58083 1.06653 0.0053791 +0.995798 1.52256 0.0069755 +0.8966736 1.40824 0.0063063 +0.70539 1.24504 0.0072571 +0.40784 1.37199 0.0070192 +0.7234 1.30492 0.0086016 +0.71231 1.33645 0.0074954 +0.912414 1.22297 0.0072182 +0.66851 1.27356 0.0087478 +0.58026 1.39298 0.0064814 +0.43722 1.54253 0.0066977 +1.56252 1.09754 0.0097111 +0.49069 1.02474 0.0083867 +0.70093 1.46722 0.0067575 +0.872222 1.2835 0.0067525 +0.51249 1.34073 0.0093041 +0.60476 1.281 0.0070521 +0.64308 1.23112 0.0096507 +0.39128 1.16252 0.0094215 +0.69926 1.61397 0.0079988 +0.38784 1.41556 0.010022 +0.56879 1.32523 0.010513 +0.46907 1.39035 0.008657 +0.49314 1.44983 0.0096191 +0.44276 1.13547 0.0079439 +0.866248 1.19943 0.0098739 +0.51605 1.13388 0.011247 +0.830232 1.17874 0.0093152 +0.54627 1.46545 0.0070041 +0.82204 1.35423 0.0094549 +0.60747 1.13223 0.0089223 +1.01254 1.366 0.0094324 +1.04382 1.34122 0.0097238 +0.937507 0.65091 0.0095508 +1.00166 1.60722 0.0088724 +0.955906 0.70747 0.009373 +0.933802 1.15418 0.0071274 +0.41473 1.08539 0.0077737 +0.818356 1.23601 0.0097135 +1.12701 1.23186 0.0077282 +0.60215 1.66349 0.010119 +0.980286 1.13919 0.011893 +0.95974 0.952496 0.0077623 +0.51056 0.982533 0.0095532 +0.9044187 0.965755 0.0077638 +1.02952 1.03877 0.0090551 +0.996816 1.35019 0.009077 +0.962524 0.65659 0.008588 +0.64737 1.36215 0.0075374 +0.822555 1.08402 0.011301 +0.835594 1.13081 0.0097122 +1.44808 0.64703 0.0070015 +0.922725 1.1059 0.0074827 +0.879977 1.15569 0.008655 +0.830798 1.40277 0.0094071 +0.54864 1.55095 0.009962 +0.62751 1.16159 0.0070914 +0.872005 1.44618 0.010016 +0.62466 1.05478 0.0084418 +1.26947 1.45993 0.013691 +0.60297 1.35338 0.0095351 +0.7604 1.06198 0.0085033 +0.43264 1.43944 0.010203 +1.45484 0.68956 0.0077103 +0.49082 1.51335 0.0084599 +0.49674 1.54142 0.0076558 +0.78521 1.01321 0.0070375 +1.22958 1.4963 0.013598 +0.70971 1.52366 0.010019 +0.48427 1.58054 0.0088248 +1.1352 1.16805 0.010074 +1.28514 1.51324 0.010003 +0.923297 1.32398 0.007431 +1.4523 0.939571 0.0085097 +0.44433 1.31405 0.009628 +0.93887 0.45967 0.0085857 +0.35626 1.11642 0.0098675 +1.07635 0.935315 0.0086404 +0.934568 0.61859 0.011195 +0.57671 1.14168 0.01051 +1.2184 1.05421 0.010976 +0.844551 1.55861 0.0085023 +1.50879 0.982046 0.0098771 +0.48553 1.09549 0.011205 +0.873932 1.58058 0.0088043 +0.802319 0.957552 0.0086345 +0.986629 1.40669 0.0084011 +0.925853 1.04742 0.0114 +1.01177 0.949308 0.010034 +0.34839 1.39481 0.010052 +0.68101 0.984332 0.0084846 +0.85784 0.972307 0.010428 +1.208 1.0089 0.010903 +1.01789 1.09968 0.0086727 +0.952805 1.4741 0.0077926 +1.49871 0.9027791 0.0084346 +1.03835 1.59522 0.0077385 +1.03082 1.55065 0.0088559 +0.991061 1.56281 0.0086483 +0.815156 0.912387 0.012125 +1.19818 1.0973 0.010165 +0.37022 1.20177 0.0092787 +0.62678 1.01733 0.0084866 +1.24311 1.54715 0.01149 +0.60127 0.856633 0.0089859 +0.47032 0.9268 0.008244 +1.61645 1.14011 0.0084848 +1.08004 1.08045 0.010139 +1.02349 0.6823 0.0083931 +0.36991 1.31694 0.011852 +0.53721 1.50451 0.0090359 +0.884648 1.01152 0.011686 +0.70726 1.0781 0.0098002 +0.977775 1.02368 0.0088279 +1.21869 1.44873 0.0078535 +0.35734 1.48741 0.0099603 +0.842888 1.03528 0.0090481 +0.840236 0.8932688 0.011285 +1.18932 0.964589 0.0092082 +1.02642 0.72112 0.0077441 +1.02961 0.871634 0.0087013 +1.38142 1.32862 0.0083438 +0.79915 0.35092 0.0084397 +1.01296 1.30685 0.0084729 +0.38253 1.4563 0.0080547 +1.15753 1.00758 0.009565 +1.07576 1.56639 0.01048 +0.52377 1.39734 0.0096355 +0.57767 1.02128 0.011846 +0.63746 0.66805 0.009015 +0.876554 1.32217 0.0093962 +0.44451 0.39052 0.0071993 +0.54954 1.01205 0.012605 +1.1 1.0302 0.0082139 +0.61028 1.59628 0.011098 +0.935451 0.32443 0.010554 +0.79352 1.03656 0.0076181 +0.817679 0.996953 0.0089117 +0.65606 0.956331 0.0083954 +0.35009 1.29635 0.010287 +1.29132 1.26731 0.0079339 +0.954909 1.42747 0.009193 +1.57257 1.23596 0.0097443 +0.72184 1.03842 0.0084512 +1.54999 1.19922 0.0089116 +0.930554 1.2829 0.0085412 +0.77857 1.66111 0.0089809 +0.816566 1.63184 0.0066769 +1.25909 1.41153 0.0088983 +0.48303 1.18249 0.0088512 +1.10305 1.1157 0.0095032 +1.054 1.52099 0.007133 +0.77691 1.54435 0.010075 +0.940486 1.00319 0.0081438 +0.977172 1.66232 0.0087449 +1.11665 1.06196 0.0087953 +1.0314 1.49617 0.0079786 +0.55181 1.1096 0.0081915 +0.52821 1.08078 0.0090709 +1.28077 0.832621 0.0097435 +0.71443 0.936647 0.0088958 +0.57591 1.50514 0.0083837 +0.94659 1.5892 0.010766 +0.2957 1.48482 0.0070234 +0.78809 1.7375 0.010379 +0.52847 0.46294 0.0095965 +1.5959 1.0621 0.0095887 +0.62333 1.31142 0.0096752 +0.957584 1.09398 0.010042 +1.60705 1.2609 0.0076055 +0.39872 1.30944 0.010243 +0.63926 1.72455 0.010315 +0.59295 1.54918 0.010849 +0.27084 1.0706 0.010578 +0.62472 0.948206 0.010772 +1.40819 0.48718 0.0091815 +0.910013 1.45885 0.0078208 +0.71416 1.55065 0.0095505 +1.15352 1.09152 0.0090061 +1.02051 0.63888 0.010751 +1.0195 1.42672 0.0094875 +1.04495 1.41849 0.011389 +0.40216 1.62146 0.0087095 +0.66641 1.04575 0.010365 +0.67502 1.55844 0.009178 +0.51368 0.942474 0.0098633 +0.801496 0.46498 0.010483 +0.52841 1.03267 0.010177 +0.874896 0.33245 0.0082414 +0.950986 0.29665 0.010927 +1.42703 0.73297 0.010779 +0.58974 0.90023851 0.0098264 +0.49476 1.63971 0.0099416 +0.42334 1.19566 0.0096599 +1.17084 1.05554 0.0079391 +1.17294 1.19289 0.010032 +0.957807 1.06336 0.0091227 +1.69111 1.1501 0.010269 +1.55625 0.56985 0.0086027 +1.38149 1.0032 0.010858 +0.995596 1.05992 0.0079676 +0.40927 0.982191 0.0065088 +0.43682 1.02811 0.0099059 +0.45554 1.00812 0.0096249 +1.30361 0.9011805 0.0070267 +1.62698 1.18156 0.0095822 +0.870005 1.53116 0.0089416 +0.61911 1.51359 0.0095984 +1.04357 0.62194 0.011373 +1.12557 0.977794 0.0092668 +1.42958 0.926156 0.0072359 +1.0953 0.97676 0.010245 +0.74958 0.58404 0.011759 +0.73449 0.966845 0.0078494 +0.805419 1.57674 0.0068691 +1.05806 1.12091 0.010455 +0.36716 0.985762 0.0091374 +0.25185 1.50768 0.011516 +1.17889 1.48222 0.0080528 +0.61827 0.62082 0.010984 +0.859576 1.63405 0.0071009 +1.48767 0.62919 0.01055 +1.0987 0.8948975 0.01014 +0.60961 0.7689 0.0075234 +0.8955853 1.53046 0.011516 +0.65575 1.44025 0.0095368 +0.66463 1.31764 0.0096189 +1.09272 1.24349 0.0071546 +0.89901747 0.48827 0.011158 +0.819395 1.48688 0.008998 +1.14797 1.68709 0.008499 +0.13765 0.79764 0.010067 +0.73163 1.62463 0.0082129 +0.30092 1.4055 0.0076381 +0.54363 1.42041 0.0099508 +0.34989 0.47885 0.0082751 +0.3141 1.35128 0.010049 +0.57917 1.62894 0.008491 +0.49931 0.51085 0.0097276 +1.6275 1.09062 0.0099792 +1.07198 1.67989 0.0098319 +1.0043 1.69771 0.0083789 +1.57297 0.924218 0.0076825 +0.62986 1.39701 0.010736 +0.58699 1.43333 0.010708 +0.38456 0.966555 0.0067609 +1.35614 0.6774 0.0084735 +0.955438 1.63075 0.0089327 +1.18434 1.15582 0.0082012 +1.62896 1.2339 0.0080978 +1.60295 1.21247 0.0068686 +1.59864 1.01345 0.0083862 +0.32748 1.1791 0.0092294 +0.55004 0.872212 0.010364 +1.26235 0.987174 0.011035 +1.4019 0.69601 0.0092612 +0.834406 0.36461 0.0085806 +1.16777 1.44002 0.010431 +1.12467 0.938715 0.0083996 +0.51812 0.41595 0.0095858 +0.48174 0.449 0.0098065 +0.93125 1.5035 0.0094222 +1.25387 0.54798 0.00861 +1.10792 0.829 0.0089004 +1.45839 0.79844 0.010327 +0.44946 1.05261 0.0098519 +1.4622 1.07342 0.0092033 +1.10696 1.60781 0.0090825 +1.37528 0.73252 0.0075291 +0.74976 0.4097 0.0081172 +1.38394 1.09813 0.010318 +1.13192 1.48425 0.009721 +1.28702 0.53147 0.0081434 +1.27915 0.72738 0.0091897 +0.35708 0.84951 0.0087999 +1.64122 1.31533 0.0099285 +1.57788 0.963846 0.0089492 +1.25918 1.24872 0.0086052 +1.52962 1.33279 0.0086396 +1.34702 0.52591 0.0091936 +0.6474 1.46773 0.0099223 +1.30171 1.43098 0.0078074 +1.17303 1.26321 0.011157 +1.12145 1.33808 0.010373 +0.25521 1.45559 0.010229 +0.45734 1.47912 0.010839 +0.40987 1.48141 0.0091602 +1.64327 0.5675 0.0091718 +1.05858 1.27972 0.0082316 +1.2896 0.63576 0.010558 +0.32892 1.25832 0.0098163 +0.33488 1.455 0.0085541 +1.23488 0.51424 0.0094164 +0.6206 1.55257 0.0092894 +1.57574 1.33678 0.01067 +0.50974 0.6297 0.0080362 +1.4916 0.86723 0.0082509 +1.4505 0.605 0.0077568 +0.69117 1.67709 0.009337 +1.08919 1.47653 0.0072304 +0.75158 1.53285 0.010087 +1.06391 1.37876 0.0084094 +1.16278 0.19549 0.0089665 +1.62613 0.946898 0.0079815 +1.58548 1.1554 0.0070614 +0.56562 0.966062 0.010255 +0.76976 1.75632 0.0076195 +1.35567 0.38512 0.0075155 +0.74751 1.57447 0.00958 +0.52047 1.59394 0.010706 +0.73 1.66809 0.0094311 +0.33821 0.41476 0.0077761 +0.851621 1.67226 0.0091942 +0.59064 0.975502 0.0092232 +1.59593 0.72723 0.0097383 +0.813654 0.40016 0.0094324 +0.77025 0.38757 0.0111 +0.43775 1.59384 0.0076794 +0.36081 0.4505 0.011037 +1.1343 0.39881 0.011388 +1.45091 0.50105 0.0083124 +0.36317 1.07489 0.0096662 +0.4008 1.04904 0.0093302 +1.4225 1.01505 0.0095963 +0.844682 0.30001 0.010259 +1.07108 0.856377 0.010808 +0.66199 1.60655 0.0094332 +0.6311 1.57605 0.010439 +1.50162 1.02594 0.0098886 +1.46191 1.03304 0.0090754 +1.47069 0.99288 0.0090341 +0.816552 1.52761 0.010297 +1.28752 0.28226 0.0070595 +0.78197 0.18818 0.0087719 +0.67041 0.42345 0.0090602 +1.08822 1.54272 0.0084985 +0.848963 0.49703 0.01098 +0.40029 0.35361 0.0097691 +0.41555 0.49893 0.011422 +0.77429 0.47177 0.0094508 +1.64709 1.0529 0.0098245 +1.6068 0.68873 0.0093637 +0.79236 0.50936 0.010469 +0.824192 0.50833 0.010743 +0.56406 0.66713 0.0079052 +1.1871 1.61442 0.0088288 +0.969287 1.31553 0.009093 +0.33451 0.952807 0.010037 +0.8972614 0.14644 0.0071929 +1.26313 1.04797 0.008568 +0.8915424 1.48796 0.0080595 +0.856245 1.50967 0.010909 +0.40341 1.57538 0.0099322 +1.43709 0.2322 0.010054 +1.24518 1.10646 0.010316 +1.4423 1.30604 0.0090717 +1.30328 0.993879 0.0095509 +1.51721 0.67083 0.009254 +1.42802 0.51127 0.0097922 +1.55058 0.68993 0.0085938 +0.937191 1.54735 0.010841 +0.7566 0.28719 0.010391 +0.64913 0.46823 0.0097084 +1.39382 0.39877 0.01102 +1.3008 0.32024 0.0076862 +0.78113 1.4993 0.010058 +1.39022 0.53218 0.0092141 +1.4807 1.27289 0.009712 +0.8149 1.70548 0.0093051 +0.77792 1.69001 0.0086054 +0.7602 0.51085 0.0091103 +1.20944 0.8914383 0.0084837 +1.64156 1.01144 0.010221 +1.12966 1.37707 0.0090404 +0.849132 0.38613 0.0090643 +0.884652 0.36611 0.0088262 +1.48446 1.23566 0.0082584 +1.4597 1.22766 0.010002 +1.13618 0.15988 0.0078797 +1.14042 1.41405 0.007972 +0.871694 0.44662 0.010738 +1.21288 1.57923 0.0097566 +0.58914 1.7208 0.0092101 +0.992597 0.25463 0.0081633 +1.63687 0.988975 0.0070303 +1.66404 0.962654 0.010007 +0.52285 0.67651 0.0096904 +1.25057 1.21178 0.0078084 +1.496 1.05207 0.0093738 +1.33136 1.39984 0.0096867 +0.8978825 0.30177 0.0099023 +0.896414 0.25069 0.01105 +0.82765 0.539 0.0093635 +1.09697 1.15585 0.0088316 +1.22976 1.62992 0.010649 +0.24178 0.802806 0.0089898 +1.19973 1.54208 0.0076838 +1.08607 0.68836 0.0076851 +0.967475 0.11586 0.0082353 +1.3697 1.46093 0.0086021 +0.62497 0.55238 0.0098552 +0.9045784 0.1874 0.008319 +1.27245 0.68728 0.007356 +0.47385 0.41129 0.0081339 +1.30534 0.54659 0.01069 +1.52456 0.65163 0.0090405 +1.48172 0.65255 0.0090598 +0.5611 0.70313 0.0082773 +0.68721 0.52378 0.0096432 +1.41899 1.37288 0.0088159 +1.33286 0.30378 0.009211 +1.64634 1.2742 0.0077791 +0.75875 0.53821 0.0080733 +0.5923 0.68503 0.0078301 +1.51854 1.23474 0.0078874 +1.21721 1.23861 0.0094356 +1.21263 1.2607 0.0092708 +0.29868 1.29186 0.0089169 +1.60142 1.34234 0.0086492 +1.36161 1.28996 0.010081 +0.57213 0.45773 0.010445 +0.970176 1.27794 0.0082337 +1.39922 0.6717 0.0085985 +1.26149 0.50366 0.0091893 +1.51697 0.58663 0.0084833 +1.38896 0.46531 0.0095539 +1.41728 1.33729 0.0083852 +0.8964797 0.56845 0.0088808 +1.45122 1.5688 0.0083212 +1.47152 0.74906 0.010577 +1.41501 0.44212 0.006872 +0.3827 1.01819 0.0079094 +1.58065 1.00062 0.008549 +0.859061 0.1623 0.0087865 +1.03584 1.13281 0.0079453 +0.38085 0.41164 0.0090923 +1.27351 0.46004 0.0097419 +1.43908 0.77686 0.010406 +1.41172 0.77712 0.0097917 +0.40897 0.63224 0.0065544 +1.31028 0.50308 0.0085189 +0.5146 0.9063677 0.0081533 +0.848404 0.45383 0.010971 +0.958101 0.40845 0.009372 +0.47146 0.970995 0.0094321 +0.42949 0.957092 0.0071958 +1.54286 0.61734 0.0096147 +0.807168 0.54267 0.0072184 +0.25182 0.5056 0.0099365 +0.28788 1.1737 0.0093653 +0.938001 0.24703 0.0095881 +0.981854 0.6204 0.0085225 +1.05213 0.38025 0.0085188 +0.74825 1.72404 0.0093974 +1.47568 0.56281 0.009293 +1.21569 0.935706 0.0092208 +0.31323 0.45416 0.0086612 +1.26217 1.60823 0.0094124 +1.02627 1.64722 0.0084011 +0.13718 0.841614 0.0082274 +1.10389 1.20369 0.0090244 +1.25404 0.30431 0.0077227 +1.24767 0.33733 0.0059405 +0.32481 1.21512 0.0082913 +1.28316 0.77688 0.0076156 +0.8932065 1.65874 0.010565 +0.62732 0.71251 0.0079463 +0.72398 0.55303 0.0076037 +1.57863 0.8164 0.011057 +1.1744 1.39921 0.0082108 +1.1412 0.7571 0.01019 +1.03474 1.15581 0.0074891 +0.0155500000000001 0.976479 0.0087601 +1.07784 1.6373 0.010171 +1.07251 1.59357 0.0084802 +0.76576 1.59218 0.0088819 +1.40577 1.30466 0.0080749 +0.22534 1.05487 0.0070588 +1.61596 1.30143 0.010118 +0.40974 0.933132 0.0091388 +0.42326 0.917983 0.0091388 +0.44159 0.54199 0.0085452 +0.38543 1.51221 0.0078421 +1.33893 0.45238 0.010213 +0.60787 0.19118 0.010186 +0.29809 1.10298 0.0069441 +1.38549 0.35308 0.011452 +1.1514 1.30382 0.01188 +1.12804 1.26617 0.0079739 +0.61081 0.52873 0.00932 +0.960654 0.867503 0.0076676 +1.3068 1.18045 0.0094912 +0.44632 1.63168 0.0082797 +1.68574 0.997883 0.0095755 +0.8958742 0.40135 0.0079955 +0.813972 1.44637 0.010414 +0.21627 1.44923 0.0087167 +0.64365 0.77815 0.0089759 +0.8978644 0.44159 0.010278 +1.26859 1.20022 0.0077675 +0.43878 0.42997 0.0079367 +0.895199 1.69778 0.0089267 +1.34102 0.4933 0.0073614 +0.54958 0.912668 0.0076887 +0.67655 1.49757 0.0097259 +0.65013 1.52969 0.0083823 +0.47607 0.5992 0.0081969 +1.332 1.27481 0.0069021 +1.66328 1.11398 0.007958 +1.21604 0.80488 0.0092886 +1.0299 0.19647 0.0081073 +0.6205 1.46706 0.010289 +0.58005 1.4804 0.010308 +1.50427 1.17543 0.007143 +1.50028 1.20012 0.0079263 +1.60381 0.810836 0.010357 +1.29683 0.4493 0.0089937 +1.68623 1.12462 0.0097701 +1.64514 1.2177 0.0076074 +1.16783 1.57422 0.0088481 +0.7732 1.63495 0.011233 +0.12263 0.866091 0.0085607 +0.08489 0.888186 0.0069881 +1.48214 1.17099 0.0075228 +1.39019 0.834969 0.0082246 +1.14299 1.70865 0.0073792 +0.886628 0.61493 0.0094584 +1.44388 1.14236 0.0099551 +1.51682 1.12066 0.0068802 +1.48191 1.11122 0.010088 +1.48081 1.14968 0.0069858 +1.15912 0.43282 0.0090816 +1.38121 0.51152 0.0071907 +1.55232 0.75066 0.010561 +1.14597 0.29377 0.010073 +0.836721 1.59826 0.009829 +0.33524 1.41934 0.0095131 +0.23766 1.16192 0.0093908 +1.45024 1.35213 0.0089071 +1.51296 1.25406 0.0077319 +1.52663 0.856921 0.0089771 +1.59213 0.749 0.0093233 +1.71707 1.22343 0.009232 +1.44561 1.12031 0.0098298 +0.55893 0.43478 0.0094047 +1.31029 0.69345 0.010684 +1.51144 0.69448 0.0095881 +1.22336 1.18141 0.0092819 +0.56935 1.68882 0.0077309 +0.60531 1.70339 0.0083518 +1.06833 0.41126 0.0090216 +0.826128 0.41973 0.0086629 +1.44987 0.98384 0.010216 +0.6626 1.64538 0.0089775 +0.64817 1.68227 0.0097463 +1.22962 0.58622 0.010179 +0.57332 0.48394 0.0090574 +0.873973 1.73562 0.0074155 +1.38829 1.49147 0.0096921 +0.52716 0.71596 0.0089169 +0.5674 0.38634 0.008567 +1.28739 0.35342 0.0094581 +0.73018 0.51483 0.0086268 +1.42392 1.0769 0.0092958 +1.14086 0.8912636 0.0093411 +0.57889 0.34924 0.010037 +1.23607 0.62686 0.0095861 +1.37533 1.1831 0.0087595 +1.38537 1.16642 0.0083449 +1.53818 1.01463 0.0056679 +1.25158 0.87164 0.010257 +0.37879 0.836285 0.0080659 +0.61086 0.38791 0.0069585 +1.24087 1.28172 0.00751 +0.916368 1.61783 0.0086554 +1.39398 0.9044901 0.0091788 +1.04259 1.22943 0.0098635 +1.38038 0.42422 0.010541 +0.35104 1.14158 0.0089336 +1.53696 1.4382 0.0094529 +0.55562 0.819508 0.0080209 +1.41582 1.03684 0.0097165 +0.35837 0.917815 0.0099507 +1.38848 1.4674 0.0089411 +0.39991 0.870235 0.009308 +1.31388 1.33296 0.010341 +1.24135 1.13235 0.010127 +0.971007 1.21566 0.0076883 +1.28327 1.38018 0.008063 +1.25043 1.32609 0.010087 +1.39627 1.22503 0.0090924 +1.17242 0.9085955 0.0074966 +0.918762 1.65866 0.010359 +1.51589 1.28808 0.0088293 +1.54764 1.26811 0.0094742 +1.53738 1.29059 0.0097367 +1.39016 0.58642 0.010972 +1.6207 1.05007 0.009736 +1.01719 1.712 0.0086556 +1.60766 0.980373 0.0074368 +0.842485 0.19424 0.0077437 +1.01732 0.30092 0.011102 +1.30232 1.37281 0.0063241 +1.11987 0.43945 0.0080691 +1.47267 1.41242 0.0055732 +0.56153 1.65608 0.0063214 +0.961876 1.75518 0.0078587 +1.54256 0.954017 0.0088638 +1.53196 0.916376 0.007971 +0.70244 0.869656 0.010147 +1.66991 1.24408 0.0093386 +1.02622 0.13392 0.0088782 +1.25099 0.37944 0.010324 +1.26484 0.60025 0.0091007 +1.41067 0.844097 0.010088 +0.3034 1.20874 0.0085212 +0.905984 0.21029 0.0083214 +1.54474 0.886809 0.0068229 +0.65506 0.3409 0.0078244 +1.0963 1.36534 0.008447 +0.46111 0.51025 0.0082828 +0.17115 0.59014 0.0086302 +1.55841 1.39548 0.008341 +0.60429 0.43069 0.0088194 +1.0641 0.31815 0.0087083 +1.36696 1.06055 0.0081439 +1.22163 0.60842 0.0099659 +1.13578 1.55442 0.0083072 +1.47635 0.60399 0.0092328 +0.950435 1.24131 0.0082224 +0.56623 1.5873 0.0089125 +0.56013 1.61089 0.010965 +1.02511 0.837957 0.0071611 +0.990039 0.847416 0.0079694 +1.30986 0.21682 0.0090332 +1.16839 1.55222 0.007897 +1.10754 0.30598 0.0082748 +1.12141 0.28577 0.010019 +0.59168 0.31278 0.0089108 +0.71266 0.31291 0.0087604 +1.46271 0.888079 0.008659 +0.58841 1.57866 0.0097364 +1.37019 1.37067 0.0092539 +1.33505 1.3419 0.0077454 +1.33437 1.37783 0.0085225 +1.14801 1.62021 0.0082022 +1.5595 0.65179 0.0093405 +1.54597 1.15445 0.010122 +0.48486 0.65819 0.0094192 +0.33232 1.55468 0.0082885 +0.36594 1.57073 0.0076474 +1.15461 0.71672 0.0088502 +1.41386 0.96687 0.0097459 +1.21103 1.69277 0.010533 +0.958439 0.15098 0.0088428 +1.047 1.67598 0.0086433 +0.51893 0.5439 0.0070336 +1.22097 1.1419 0.0093388 +0.06411 0.842701 0.0085984 +1.33323 0.61091 0.0077225 +0.74647 0.20918 0.0081265 +0.41016 0.59409 0.0080161 +0.23879 1.42044 0.0083585 +1.09526 1.67221 0.0085291 +0.48543 1.66565 0.0093536 +0.73652 1.68801 0.0092959 +0.71034 1.71116 0.0092823 +1.30157 0.48628 0.0085189 +1.34698 0.57357 0.0094447 +0.09282 0.78655 0.0096216 +0.23209 0.76878 0.0083213 +0.70854 1.66574 0.009337 +0.03844 0.980348 0.0092485 +0.79156 0.827845 0.0071106 +1.55436 0.824513 0.010706 +1.51811 0.820948 0.0068953 +0.20352 1.41384 0.0091547 +1.70559 1.06625 0.0089728 +1.06487 0.65576 0.0088286 +0.930667 0.11929 0.0097297 +0.68341 0.62262 0.0099144 +0.69713 0.39321 0.0083667 +1.56676 1.04385 0.0069508 +1.03744 0.58022 0.0075298 +0.21787 0.69309 0.0076703 +0.0535 0.9046668 0.0078175 +0.60092 0.55018 0.0083452 +1.40806 1.1364 0.0066002 +1.31584 0.46576 0.010252 +0.956184 0.34272 0.0098746 +0.08377 0.988566 0.0079902 +1.44196 1.16778 0.010632 +1.40389 1.16734 0.0079398 +0.64429 0.3754 0.0084544 +0.993144 1.73899 0.0095879 +0.21388 0.52613 0.0094753 +1.23086 0.920993 0.0089834 +1.00776 1.77828 0.007118 +1.55033 0.848216 0.0098502 +1.36023 1.0404 0.0082036 +0.61235 0.59381 0.0088785 +0.916062 1.69837 0.0093922 +0.58288 0.936461 0.0073733 +1.25566 1.16719 0.0073896 +0.52153 0.842841 0.0078857 +1.25228 0.09846 0.0087944 +1.73562 1.18624 0.0076844 +1.45457 0.3769 0.0078106 +0.976304 0.30859 0.0085775 +1.19939 0.34252 0.0080217 +1.32999 1.56739 0.0074738 +1.25182 1.08452 0.0097492 +0.12184 0.69165 0.0099924 +0.24559 1.03578 0.0065513 +0.61254 0.814929 0.0087935 +1.31782 0.860408 0.0096842 +0.5526 0.31617 0.0092051 +1.33884 1.4262 0.010002 +1.66524 1.1799 0.0081003 +1.67408 1.19558 0.0081003 +1.35684 1.48762 0.0068496 +1.5354 0.4291 0.0093649 +1.35556 0.860084 0.0096022 +1.70735 1.13247 0.0078146 +1.10342 0.47403 0.0085515 +1.68506 0.58861 0.00887 +1.09073 0.14603 0.0083202 +1.00671 0.76221 0.0074668 +1.30817 1.39995 0.0070239 +0.59252 0.72682 0.010675 +1.28441 0.41246 0.0097975 +0.60128 0.23305 0.0094179 +0.20728 0.59889 0.0088714 +0.824863 0.15238 0.009052 +0.31251 0.29197 0.0083319 +0.10247 0.849417 0.0078552 +0.29086 1.36131 0.010636 +1.39348 1.13479 0.0066002 +1.10842 1.27637 0.0088278 +0.35275 1.23205 0.0073676 +1.33575 1.21247 0.0089331 +1.3577 1.21383 0.0075278 +1.34869 1.24593 0.0081805 +1.33088 0.73522 0.0090172 +1.35631 1.14679 0.0073427 +0.52423 0.37895 0.0080836 +0.33485 0.25557 0.0067513 +1.58249 0.5268 0.006931 +0.996466 0.830913 0.00786 +0.79546 0.5751 0.0098955 +0.5771 0.74682 0.010792 +0.48974 0.3766 0.0076256 +1.50711 0.75993 0.0072263 +1.3575 0.9072292 0.0086407 +0.40213 0.67089 0.0077715 +1.37514 0.21809 0.008205 +1.61586 0.843856 0.0068125 +1.58679 0.853037 0.0072399 +1.59004 0.868792 0.0072399 +1.59599 0.51939 0.006931 +1.08931 1.71382 0.0086998 +0.55244 0.39812 0.0084519 +0.59196 0.41546 0.0088194 +0.26836 1.13114 0.0078327 +1.24062 1.37334 0.010673 +0.76439 0.8960863 0.0084239 +1.07275 0.15034 0.0083202 +0.75855 0.45213 0.0083169 +0.7554 0.31689 0.011463 +1.57328 0.71724 0.0086372 +1.43024 0.59476 0.0067583 +0.43693 0.37223 0.0063183 +1.70738 0.817339 0.0069169 +0.73176 1.75849 0.0076818 +1.39597 1.27243 0.0088103 +1.16727 0.65754 0.0089796 +0.0256000000000001 0.838888 0.0084756 +0.58291 0.29283 0.0083578 +1.26507 1.36433 0.010816 +1.6219 0.72454 0.0090886 +0.43708 0.47965 0.01076 +1.55266 1.37425 0.0081822 +1.41758 1.11057 0.0069944 +0.20473 0.46089 0.0090643 +0.939621 0.07968 0.0085586 +0.43716 0.845575 0.0080092 +1.35049 1.51851 0.0081495 +1.28917 1.08972 0.0098272 +1.19292 1.32738 0.0083984 +1.19114 0.75584 0.007274 +1.19342 1.38767 0.0079093 +1.20946 1.40225 0.0080531 +0.04881 0.957747 0.009231 +0.30489 0.26134 0.0076956 +0.929698 0.28337 0.0079399 +0.2526 1.36165 0.0070295 +0.41219 0.57274 0.0084264 +1.15519 0.38189 0.011087 +1.10875 1.70496 0.0088076 +1.15299 0.91239 0.0079867 +0.6245 0.920132 0.0078905 +0.72329 0.27083 0.0073299 +0.74653 0.24359 0.0082599 +1.18624 0.919327 0.0078747 +0.03805 1.09812 0.006815 +1.08573 1.32632 0.0068973 +0.26715 0.7736 0.0077352 +1.40563 1.2037 0.0086302 +1.73128 1.02105 0.0087429 +1.62799 0.58099 0.0088598 +0.9077797 0.36079 0.010143 +1.08659 1.30847 0.0079931 +0.22789 1.38586 0.0084919 +1.33957 0.23751 0.0085477 +0.55958 0.29188 0.0088181 +1.12198 0.704 0.0082394 +1.32549 0.96281 0.0072695 +1.20066 1.29142 0.0081351 +1.01937 0.22885 0.0090974 +0.28746 0.47862 0.0077722 +1.18956 0.864403 0.0068188 +0.34817 0.998922 0.0086109 +0.21186 0.4827 0.0081803 +0.21346 0.73833 0.009527 +1.31746 0.79622 0.0081641 +1.19436 1.2286 0.0083127 +0.6235 0.49582 0.0078172 +0.6203 1.74128 0.0081955 +1.35308 0.61186 0.0089443 +1.02798 1.75642 0.0062816 +0.66324 0.55239 0.0087151 +0.72462 0.45141 0.0074379 +1.66478 0.817827 0.0089125 +0.61814 0.3445 0.0099483 +0.871069 0.27418 0.0088078 +1.13805 0.08173 0.0067044 +1.08409 0.35932 0.0085761 +0.61193 0.4663 0.0078685 +1.15658 0.833566 0.009794 +1.40939 0.62426 0.0095063 +1.51608 0.38755 0.0069661 +1.74091 0.980542 0.0076166 +0.29754 0.73647 0.010705 +1.34785 1.30891 0.0090067 +1.1645 0.3286 0.0064554 +0.52107 0.18515 0.0081276 +0.998036 1.47268 0.009307 +0.800983 0.18389 0.0084291 +1.2459 0.40482 0.0086362 +1.38758 1.05959 0.007615 +1.30392 0.76332 0.009183 +0.55366 0.74178 0.0086087 +1.08742 0.4428 0.0077392 +1.05999 0.83348 0.009328 +0.32072 1.08527 0.0066799 +1.21135 1.32184 0.0086616 +0.948011 0.7941 0.0084649 +0.2738 0.982711 0.0074554 +0.25752 0.974231 0.0077004 +0.26913 1.01529 0.0080967 +0.28762 0.960375 0.0061717 +1.44291 1.19171 0.0086832 +0.826008 0.78642 0.006895 +1.22841 0.49434 0.0067815 +0.30579 0.992869 0.0088751 +0.54997 0.61717 0.0098418 +0.978391 1.72268 0.007579 +0.956444 0.9010657 0.0082572 +0.233 1.2028 0.0074125 +1.16954 0.23191 0.0091372 +0.64706 0.52099 0.0084891 +0.06062 0.804397 0.007298 +1.54463 0.49546 0.0082146 +0.9015849 0.5313 0.0084865 +1.43058 0.46924 0.0083235 +0.6604 0.63159 0.0091822 +1.33888 0.825518 0.009589 +0.948614 0.74921 0.0079128 +0.2746 1.43345 0.0098917 +0.29975 1.43978 0.0085536 +0.20186 1.33313 0.0076136 +1.48176 1.0888 0.0091439 +0.06074 0.88184 0.0088789 +0.0442400000000001 0.848664 0.0078001 +1.45517 1.55012 0.0083103 +0.65448 1.74169 0.0066833 +0.67649 1.70965 0.0085395 +0.980584 0.79304 0.0072172 +1.43575 1.51799 0.006744 +1.42442 1.53479 0.0082693 +1.59098 1.29588 0.0088654 +1.27983 1.13469 0.0080798 +0.09643 0.826295 0.0086056 +0.47051 0.61655 0.0075645 +0.44293 0.59558 0.0077924 +0.34984 0.67695 0.0073132 +1.17428 1.7069 0.0073989 +0.19125 1.0419 0.0068807 +0.40711 0.52287 0.0092998 +0.0662400000000001 1.049 0.0071149 +1.00819 1.75618 0.0065856 +1.1648 1.5288 0.0093809 +0.37942 0.49341 0.0074553 +0.11048 0.71073 0.0088593 +1.0298 1.77506 0.0063692 +0.33129 1.49544 0.0085787 +1.32705 0.58014 0.0087446 +0.992994 0.887469 0.0099141 +0.534 0.48712 0.0084666 +1.0736 0.986626 0.0091802 +0.27489 1.04745 0.0082729 +0.10027 0.65868 0.006135 +0.6526 0.79974 0.0085023 +1.6235 0.75985 0.0064447 +0.3201 0.866944 0.007667 +0.32475 0.883338 0.007667 +0.16952 0.65222 0.0091735 +1.11626 0.36956 0.0066158 +0.53767 0.77437 0.0081895 +1.5985 0.55747 0.0091529 +0.07941 1.08603 0.0075138 +1.34243 1.17619 0.006905 +0.71436 0.70615 0.0087466 +1.29047 0.65957 0.0087055 +0.21581 0.77755 0.0066902 +1.30678 0.25199 0.0084448 +1.05352 0.7987 0.0084257 +1.06237 1.20598 0.011154 +1.47703 0.23288 0.0081793 +0.07625 0.800061 0.0072968 +0.29075 0.51385 0.0086141 +1.17373 0.63807 0.0085667 +1.71311 1.18529 0.0087846 +1.07186 0.18876 0.0083004 +1.46986 0.46722 0.0093924 +0.53455 0.50654 0.008392 +0.67968 0.873746 0.0074398 +0.835052 0.56564 0.010372 +0.31188 1.11521 0.0078866 +0.39806 0.75539 0.0079371 +1.22622 0.64576 0.0074432 +0.26138 0.65351 0.0067452 +0.63702 0.31471 0.0070783 +0.11673 0.831884 0.0070642 +0.50499 0.836869 0.0069097 +1.64665 0.915119 0.0090523 +1.12537 0.54209 0.0083308 +0.36308 1.58748 0.0076474 +1.1916 0.57711 0.0078821 +1.07154 0.7413 0.0088225 +0.66904 0.4866 0.0097781 +0.01668 0.8909878 0.0077263 +0.13894 0.72557 0.0069956 +1.42117 0.26913 0.0087052 +1.05525 1.24732 0.0069561 +1.47969 1.19236 0.0062965 +0.64664 0.5424 0.0084721 +1.12405 0.73977 0.0086403 +0.34782 0.51834 0.0083131 +1.50285 0.941553 0.0097543 +0.855494 0.72771 0.0077704 +1.09611 1.51042 0.0072099 +0.42387 0.67441 0.009912 +1.74286 1.17077 0.0076844 +0.77338 0.941042 0.0069617 +0.63778 0.882236 0.0084768 +0.17906 0.71336 0.0096656 +0.17931 0.804728 0.0093031 +1.51391 0.55467 0.0068506 +1.49562 0.55746 0.0082406 +0.32192 0.79011 0.0081531 +0.61933 0.15368 0.00774 +1.15351 1.63778 0.006989 +1.43278 0.871996 0.0065785 +0.30136 1.51105 0.0051536 +0.31672 1.48315 0.0075965 +0.940022 0.49385 0.0075821 +0.8986189 0.63287 0.0083494 +0.60415 0.12585 0.0074909 +0.23267 1.13928 0.0089904 +0.836446 0.75079 0.0071 +0.71562 0.35021 0.0088212 +1.54789 0.53162 0.0083928 +0.821674 0.32274 0.006786 +1.36529 0.31105 0.0073979 +0.875403 0.77155 0.0070974 +0.31756 0.975492 0.0094437 +0.912223 0.70846 0.0069055 +1.37133 0.1885 0.006449 +0.39792 0.82222 0.0093984 +0.57841 0.59526 0.0080705 +0.271 1.52637 0.010411 +1.14625 0.68356 0.0075244 +0.22143 0.916102 0.0092866 +1.56773 0.78169 0.0077436 +1.05119 0.75458 0.010027 +1.50028 0.45067 0.0091536 +0.16385 1.3719 0.0093254 +0.69054 0.42311 0.0083965 +0.33599 0.915871 0.0073618 +0.6571 0.72156 0.0084547 +1.19709 0.49786 0.0076793 +1.62806 0.807146 0.0097645 +1.49488 0.78864 0.0074964 +0.70833 0.808813 0.0073598 +0.937412 0.42389 0.0080312 +0.946559 0.38965 0.0072405 +0.913097 0.39698 0.0079955 +1.58117 0.49033 0.0079822 +1.15704 1.35574 0.007838 +0.884117 0.73779 0.0072096 +1.00085 0.33588 0.0067875 +1.09987 0.40648 0.0065739 +0.0305500000000001 1.0604 0.0084709 +1.12255 1.73219 0.0073393 +0.877069 0.57723 0.0081019 +0.31701 0.48845 0.0074606 +0.56134 0.22869 0.0083921 +1.32683 0.934553 0.0059186 +1.43922 0.20884 0.0090865 +1.63763 1.34006 0.0085727 +1.12083 1.64271 0.0084348 +0.912367 0.46214 0.010122 +1.00553 0.68733 0.0080101 +1.17069 1.64914 0.0092702 +1.11758 0.811742 0.007176 +0.994707 0.40546 0.007723 +1.51048 1.33422 0.0086396 +1.36643 0.79268 0.010473 +1.5332 1.04842 0.0085142 +0.64079 0.21413 0.008304 +1.69961 0.63273 0.0073362 +0.858126 0.40532 0.009307 +0.59199 0.21065 0.0080525 +0.43566 0.78595 0.0080425 +0.45692 0.80815 0.009724 +0.951639 0.50659 0.0077593 +1.39722 0.21626 0.0094628 +0.77153 0.825997 0.0075719 +0.33356 0.4378 0.0089056 +0.04123 0.77731 0.0080788 +1.16238 0.879575 0.0074423 +0.16717 0.63197 0.008307 +0.992595 0.53916 0.00837 +0.06625 0.75646 0.0065101 +0.863457 0.75852 0.0076037 +1.19928 0.821096 0.0083742 +1.19327 0.37395 0.0067417 +1.05773 0.8973329 0.008885 +0.786 0.42682 0.0090141 +1.61366 0.54391 0.0086052 +0.79501 0.78304 0.0075692 +1.50622 1.41658 0.007392 +0.76345 0.23627 0.0067018 +1.279 0.93553 0.0093733 +1.16648 0.08952 0.0075893 +1.29936 1.22012 0.0076975 +0.938839 0.2069 0.0075082 +1.3289 0.64278 0.0074411 +1.3234 0.6586 0.0075351 +1.32294 1.06358 0.0074974 +0.53426 0.25016 0.0087878 +1.21935 0.07647 0.007302 +0.46302 1.663 0.0083765 +0.979757 0.07436 0.0084434 +1.17507 0.68962 0.0073025 +1.32979 1.23522 0.0081745 +1.32148 0.41811 0.0089023 +1.35658 0.41756 0.00744 +1.09674 1.39814 0.0091122 +0.26099 0.839259 0.0068003 +0.68163 1.73813 0.0071868 +1.13655 1.52824 0.010136 +1.07535 0.09267 0.0078643 +0.33044 0.28736 0.007755 +0.37716 0.69006 0.0071482 +0.974999 0.24186 0.0081509 +0.952017 0.21714 0.0075082 +0.95867 0.25454 0.0078543 +1.31925 1.14479 0.0081414 +1.36743 1.40389 0.0074496 +1.21735 0.76831 0.0064036 +1.29393 0.15071 0.010307 +0.67058 0.19408 0.008636 +0.67719 0.36474 0.0079448 +1.56857 1.4554 0.0085319 +0.72773 0.78417 0.0077559 +1.22866 0.78261 0.0082056 +1.23225 0.817649 0.0082759 +1.25602 0.79985 0.0070194 +1.19992 1.41739 0.0066445 +0.990372 0.13659 0.0081144 +1.74854 1.0616 0.0068318 +1.19697 0.30329 0.009299 +1.25051 0.24941 0.006718 +1.22482 0.67718 0.0078819 +1.3257 0.16329 0.0070738 +1.46721 0.824311 0.0096246 +0.65481 0.8902829 0.0068246 +1.68544 1.05983 0.0084102 +1.66615 1.08961 0.0088476 +0.28061 0.6082 0.0069999 +0.838166 0.73433 0.0074482 +0.74635 0.926446 0.0080884 +0.930119 0.16855 0.0065956 +1.20811 0.69526 0.0088155 +0.78143 0.15279 0.006505 +0.4163 0.33487 0.009265 +1.01676 0.16905 0.0079031 +1.57565 0.59241 0.0055905 +1.34542 0.64197 0.0072973 +1.37566 0.64126 0.0085986 +1.31837 1.45373 0.0067507 +1.13363 0.64306 0.0082097 +0.43895 0.863283 0.0080092 +1.3925 0.857943 0.0095787 +0.25059 0.52877 0.0094547 +0.34016 0.31127 0.0061926 +0.53063 0.21543 0.0079134 +0.45682 0.76377 0.0068687 +1.1782 0.72301 0.0086152 +1.68274 0.56552 0.0090593 +0.861512 0.62301 0.0086144 +1.45569 0.27746 0.0075016 +0.58186 0.79525 0.0080444 +1.18442 1.66575 0.0083707 +0.36827 0.729 0.0090962 +1.36292 0.75293 0.0091323 +0.992383 0.34836 0.0067875 +0.97661 0.37668 0.0081235 +0.9097462 0.09196 0.0078306 +0.17314 1.40851 0.0067916 +0.5401 1.70543 0.0075988 +0.938398 0.59304 0.0088406 +1.46274 0.31936 0.0067056 +0.856846 0.850917 0.0074063 +0.60934 0.48568 0.0078378 +0.2499 0.59947 0.0086649 +0.26128 0.63355 0.0089834 +0.22019 1.19245 0.0074125 +0.51699 0.57541 0.0065856 +0.50074 0.57566 0.0073141 +0.51133 0.60723 0.0082316 +0.962181 1.7095 0.0078347 +0.945829 1.72195 0.0076499 +0.19343 0.7496 0.010308 +1.74008 0.8161 0.0075281 +1.21426 0.39106 0.0068536 +0.79723 0.6953 0.0075544 +0.52267 0.75881 0.00795 +0.52983 0.73758 0.0088566 +0.40246 0.43967 0.0069042 +0.41223 0.45149 0.0069042 +0.4252 0.41872 0.0078907 +0.39169 0.70121 0.0072566 +0.71194 0.58959 0.007675 +0.35256 0.815599 0.0075311 +1.0873 0.77021 0.0066272 +1.36412 1.42293 0.0086954 +1.2448 0.19672 0.0071293 +1.25136 0.22195 0.0061464 +1.64711 0.67094 0.0090927 +1.05965 0.45984 0.0075329 +0.889465 0.835366 0.0055703 +1.23638 0.45117 0.0084168 +1.25741 0.47955 0.0084557 +0.27362 1.3234 0.0094373 +0.74049 0.45606 0.0074379 +0.16827 1.02412 0.0067746 +1.25875 0.72824 0.0091897 +1.71165 1.03015 0.007995 +1.57582 0.38159 0.0069905 +0.29571 1.31428 0.0089603 +0.910947 0.11042 0.0083274 +0.988924 0.75324 0.0050217 +1.12112 0.5805 0.0085627 +1.29809 1.58548 0.0081706 +1.10713 0.23095 0.008844 +1.43009 1.42042 0.0072845 +0.1148 1.19631 0.0060266 +1.00321 0.6224 0.0093821 +1.50926 1.15441 0.0066728 +0.76306 0.79057 0.0074267 +1.01578 0.802684 0.0089898 +1.27858 0.24713 0.0072041 +1.41569 1.23936 0.0087355 +1.39238 0.76716 0.0079469 +1.68118 0.68836 0.006624 +0.68944 0.73029 0.0084825 +0.18247 0.62164 0.0081564 +0.74454 0.0584600000000001 0.0064678 +0.26624 1.11387 0.0078327 +1.45516 0.33225 0.0067301 +1.41887 0.56705 0.0065807 +1.10901 0.870399 0.0083237 +0.871817 0.18908 0.0065343 +0.13001 1.16998 0.007986 +1.09681 0.32091 0.0070444 +0.999204 1.21902 0.0064898 +0.02418 0.873197 0.006873 +1.20261 0.21978 0.008453 +1.65293 0.52129 0.0073746 +0.73832 0.816019 0.0085485 +1.16059 0.45511 0.0082587 +0.6939 0.642 0.0081037 +1.31077 0.38381 0.0084537 +1.18076 0.26758 0.0071822 +1.16065 0.73964 0.0083542 +0.68284 0.26315 0.0087868 +1.5062 1.46904 0.0078464 +0.65008 0.68789 0.0078714 +0.10162 0.74677 0.0088314 +0.855576 1.71324 0.0069308 +1.61306 0.66888 0.0085494 +1.62727 0.7021 0.0091304 +1.21549 1.20173 0.0080974 +0.56826 0.78365 0.0071683 +0.48943 0.55884 0.008957 +1.30626 1.52018 0.0082403 +1.19941 0.40504 0.0076986 +1.18861 0.43419 0.0061674 +1.33624 0.69655 0.0096048 +1.3432 0.71684 0.0081002 +0.925499 0.55155 0.0066286 +1.43783 0.53437 0.0082316 +1.4569 0.5329 0.0072449 +1.02352 0.912316 0.009339 +1.4014 1.55482 0.0062868 +1.4062 1.5255 0.0075997 +1.41726 1.55551 0.0071443 +0.924269 1.75068 0.0068896 +0.26485 1.39344 0.0098583 +0.816273 0.21123 0.0068447 +0.844945 0.21131 0.0066344 +0.945503 1.68066 0.0074257 +0.8727 0.21414 0.0071112 +0.02922 1.04162 0.0083347 +0.49575 0.78173 0.0092929 +0.04505 0.74249 0.0058675 +0.0769500000000001 0.736 0.0093955 +0.77088 0.856801 0.0076044 +1.2761 0.37543 0.0088395 +1.72451 1.08156 0.0080598 +0.27064 0.922565 0.010969 +0.49558 0.9043044 0.0076114 +0.552 0.19425 0.0080489 +0.4225 0.15652 0.0078176 +0.73286 0.8977001 0.0069095 +1.20275 0.67038 0.0085374 +1.34895 0.33986 0.0065204 +1.33551 0.35206 0.0075285 +1.32243 0.34163 0.0064208 +0.832388 0.61024 0.0065197 +0.71487 0.836431 0.0070606 +1.28396 1.66495 0.0075301 +0.25692 0.74602 0.0066929 +1.37511 0.938049 0.0082654 +1.64639 0.865649 0.0067074 +0.19476 0.44338 0.0084019 +0.949038 0.06315 0.0081922 +1.72777 1.13557 0.0077777 +0.806371 0.72704 0.0074497 +0.30159 0.816222 0.0080695 +1.14282 1.57961 0.0095478 +0.32304 1.01725 0.0073293 +1.09954 0.76202 0.0066272 +0.21527 1.32282 0.0072073 +0.11753 1.0645 0.0085585 +0.0826100000000001 0.9073804 0.0057217 +0.985108 0.27441 0.0078659 +0.25447 0.67951 0.005993 +1.51725 1.06236 0.0085911 +1.13616 0.33115 0.0064599 +0.817727 0.58211 0.0086443 +0.6231 0.20793 0.0066339 +1.27071 0.9093516 0.0079173 +1.33851 1.01006 0.0097329 +1.22749 0.968213 0.009091 +0.941525 0.930633 0.0050771 +0.75367 0.34277 0.009191 +0.75014 0.36646 0.0093168 +0.52754 0.14926 0.007463 +1.08024 0.80981 0.0069958 +0.54162 0.28404 0.0068434 +0.46965 0.56209 0.0078578 +0.44258 0.57826 0.0075154 +1.11318 1.44527 0.009628 +1.28978 0.79245 0.0068651 +0.994332 0.919569 0.0066096 +0.33326 0.822792 0.0076711 +0.972299 0.42381 0.0061946 +0.45239 0.64155 0.0079232 +0.65128 0.73942 0.0080896 +1.02354 0.45136 0.0083785 +1.12894 0.21687 0.0075846 +0.49807 0.74266 0.0061891 +0.48838 0.14278 0.007212 +1.2296 0.20119 0.0071293 +1.45832 1.43922 0.0081952 +0.37504 0.32919 0.0070776 +0.826954 0.28567 0.0089512 +1.40207 1.43022 0.0072318 +1.18124 0.14129 0.0091713 +0.34912 0.23062 0.0069935 +0.38078 0.878093 0.008614 +1.36119 0.926073 0.0081322 +0.46797 0.885604 0.0075764 +1.50282 0.819993 0.0068953 +1.01671 1.15783 0.0064798 +0.990155 0.20621 0.0074121 +0.974421 0.19847 0.0063705 +0.99998 0.19299 0.0065981 +0.27071 0.68061 0.0067286 +0.27632 0.66414 0.0067519 +0.67488 1.13205 0.0081322 +0.78476 1.3301 0.010093 +0.66176 1.16531 0.0082072 +0.876013 1.38204 0.0066419 +0.73326 1.46933 0.0087055 +0.57307 1.17036 0.009752 +0.53636 1.28738 0.007003 +0.8936249 1.10251 0.006467 +0.75282 1.23962 0.010058 +0.79635 1.26633 0.0075434 +0.70201 1.27582 0.0081893 +0.819018 1.05163 0.012903 +0.829533 1.29795 0.0094106 +0.847708 0.947039 0.009765 +0.845111 1.38563 0.0083162 +0.56368 1.24096 0.008328 +0.9090945 1.24929 0.0091133 +0.75422 1.17852 0.010361 +0.44653 1.39897 0.0081522 +0.820932 0.940035 0.011502 +0.967061 1.16629 0.0096649 +0.70184 1.17579 0.0064126 +0.77564 1.41624 0.0081127 +0.48934 1.04565 0.0086671 +0.979513 1.10885 0.0094425 +0.923495 1.17642 0.011029 +0.91713 1.34404 0.0062961 +0.806292 1.21227 0.0095804 +0.868441 1.03465 0.0076449 +0.62996 1.11121 0.0098194 +0.912048 1.02135 0.0072241 +0.68129 1.41057 0.0078788 +0.74457 1.1216 0.0068889 +0.43903 1.27244 0.0096236 +0.4728 1.24605 0.0096727 +0.888826 1.29839 0.0079071 +0.58592 1.08697 0.0082326 +0.53217 1.15799 0.0099521 +1.53861 0.982369 0.0088494 +0.48526 1.14164 0.0098349 +0.9010602 1.07014 0.0090251 +0.38622 1.36333 0.0078249 +0.417 1.23735 0.0092163 +0.879481 1.42125 0.007958 +0.914238 1.42084 0.0077209 +0.68111 1.0711 0.010102 +0.45623 1.3431 0.01117 +0.838605 1.33915 0.0096701 +0.51613 1.45718 0.0081059 +0.867639 1.17667 0.0086644 +0.85202 1.09367 0.0095471 +0.8641 1.1326 0.0084047 +0.5415 1.05928 0.010656 +0.68824 1.35857 0.0095837 +0.50661 1.19468 0.010506 +0.54927 1.20592 0.0094214 +0.51719 1.24147 0.010737 +0.883897 0.981367 0.010209 +0.72599 1.0952 0.0081756 +0.79941 1.35615 0.0089466 +0.822826 1.15439 0.0097164 +0.72277 1.1511 0.0087815 +1.008 1.54184 0.0080811 +1.60954 1.11232 0.011611 +0.74679 1.29352 0.010354 +0.70144 1.44835 0.008495 +0.73228 1.41947 0.0097705 +1.04361 1.47575 0.0098966 +0.4344 1.07322 0.0083676 +0.77497 1.0921 0.010594 +0.45953 1.10082 0.00822 +0.964062 1.40511 0.0085559 +0.64041 1.03805 0.007306 +0.40608 1.50596 0.0097068 +0.44573 1.15566 0.0091864 +0.68861 1.21422 0.0097751 +0.65964 1.20894 0.010236 +0.61094 1.23059 0.011214 +0.56254 1.37547 0.0084986 +0.8952167 1.34121 0.007395 +0.934128 1.20677 0.010313 +0.40579 1.14743 0.008845 +0.830969 1.50832 0.010837 +0.6253 1.28495 0.0093137 +0.4151 1.55086 0.0080207 +1.6452 1.14493 0.0082144 +0.68186 1.59986 0.0094332 +0.94692 1.52329 0.010906 +0.925445 1.3805 0.0095477 +0.63945 1.07344 0.0074348 +0.901287 1.58011 0.010372 +0.911242 1.55223 0.011855 +0.371 1.43813 0.0092447 +0.39555 1.19022 0.010971 +0.962961 1.60665 0.0093634 +0.39959 1.28194 0.0091343 +0.41149 1.35003 0.0087347 +0.40835 1.43219 0.0082617 +0.48246 1.29367 0.0096294 +0.48209 1.2064 0.0090012 +1.00761 1.63175 0.010169 +1.1807 1.01982 0.0093494 +0.65481 1.25557 0.010176 +0.36141 1.27628 0.0077866 +0.45956 1.21986 0.01031 +1.47567 0.9061904 0.0088147 +0.40301 1.39168 0.0070582 +0.56888 1.41144 0.0079383 +0.78842 1.44947 0.0079074 +0.53215 1.5717 0.0090051 +0.968416 1.35824 0.011222 +1.23158 1.01546 0.0082851 +0.62255 1.62432 0.010263 +0.823718 1.55026 0.0082143 +0.39136 1.07525 0.010578 +0.56826 1.45787 0.010468 +0.3821 1.11882 0.0089079 +0.883031 1.26364 0.0079764 +1.17318 0.951999 0.007977 +0.953082 1.56545 0.0090899 +0.49597 1.00272 0.0097051 +0.4474 1.56033 0.0071373 +1.05599 1.09394 0.0093364 +1.43611 0.67998 0.0090385 +0.91362 1.30148 0.0092226 +1.0292 1.32337 0.01038 +0.74907 1.37793 0.0099335 +0.495 1.11878 0.0099118 +0.53354 1.11602 0.0078802 +0.79456 1.71089 0.0094706 +0.988432 1.49793 0.010514 +0.38019 1.24719 0.0090074 +0.889561 1.21518 0.0085767 +1.1244 1.2097 0.0096216 +0.9063012 1.50686 0.01079 +0.50591 1.08118 0.009915 +0.62126 1.18533 0.010585 +0.912363 0.33785 0.0088492 +1.04341 1.61466 0.0083286 +0.69955 1.63178 0.0069761 +1.20231 1.07435 0.0094122 +0.996642 1.58505 0.0094349 +0.55279 1.34835 0.0094033 +0.76505 1.73645 0.0091934 +0.63324 1.42602 0.010159 +0.6554 1.38276 0.0095329 +0.50971 0.44262 0.011114 +0.6282 1.35267 0.0096208 +0.59053 1.37359 0.0098746 +0.58836 1.27153 0.0085247 +0.61163 1.26152 0.0092934 +0.47284 1.59946 0.0089727 +0.959348 1.45283 0.0094637 +0.855757 1.46678 0.010747 +0.56231 0.852726 0.0080787 +0.75522 1.50669 0.0098444 +1.01115 1.50889 0.0068786 +0.70434 1.31841 0.0088773 +1.0347 1.57385 0.0096588 +0.79249 1.52374 0.0095073 +0.65454 1.49327 0.010092 +0.57533 1.30281 0.0085039 +0.59188 1.33532 0.0093494 +0.44784 1.52252 0.0095567 +0.32539 1.38583 0.0074634 +0.36199 1.37187 0.010613 +0.71793 1.50296 0.0087467 +0.841534 1.42071 0.0080857 +0.78958 0.37181 0.0076585 +0.70368 1.37908 0.0097445 +0.72713 1.34542 0.0077973 +0.52265 1.5482 0.010185 +0.5029 1.31522 0.010582 +0.33462 1.34247 0.0098993 +1.60534 1.19063 0.0098232 +1.58583 1.17762 0.0099215 +0.43286 1.4678 0.011389 +1.20857 0.979985 0.010028 +0.40105 1.00457 0.0092312 +1.58753 1.27354 0.0086517 +1.00389 1.38895 0.0098875 +1.0754 1.15948 0.0098415 +0.46353 1.36818 0.0084671 +0.856492 1.26568 0.0091024 +0.431 1.12201 0.0080404 +0.62981 1.66397 0.009085 +0.68426 1.51906 0.010073 +1.15189 1.21871 0.011457 +0.5319 1.34787 0.0079629 +1.00485 1.08056 0.0073785 +0.75316 1.70035 0.009321 +1.08415 1.49625 0.0071199 +1.46537 0.6408 0.0082704 +0.49679 1.59628 0.0090531 +0.45372 0.937653 0.008928 +0.922821 1.59597 0.0089759 +0.73375 1.19539 0.0095668 +0.990103 1.6811 0.0090316 +0.928855 1.13006 0.011083 +0.48022 0.47558 0.010301 +0.64021 0.994429 0.0085733 +1.62833 1.16031 0.0095822 +1.04646 1.39322 0.0084007 +0.86802 1.48848 0.0099293 +0.77898 1.14108 0.0097404 +0.86107 1.60213 0.0072774 +0.862539 1.56468 0.0072496 +1.17742 1.13464 0.0099361 +0.60093 0.879458 0.008855 +1.08704 1.61152 0.0091174 +1.24031 1.41772 0.0085432 +1.03438 1.36112 0.0079103 +0.593 0.831138 0.0097221 +0.581 1.0474 0.0086105 +1.47191 0.6881 0.0077103 +1.44204 1.33158 0.0099573 +0.50876 1.02017 0.0072625 +1.13144 1.04244 0.0079214 +1.56643 1.14345 0.010122 +0.993436 1.42915 0.0092532 +0.61325 1.44226 0.0097412 +1.54683 1.17822 0.0095557 +0.843316 0.992969 0.0094297 +0.4821 1.56105 0.0077683 +0.59929 1.06219 0.0085356 +0.879628 0.31406 0.0084365 +0.50061 1.49157 0.0076198 +0.51302 1.50309 0.0076198 +0.53844 1.48127 0.0067769 +1.3762 0.5471 0.0092141 +1.17285 1.23796 0.0095337 +0.73136 0.9862 0.007719 +1.40406 0.79937 0.0090575 +0.74635 1.59573 0.0068823 +0.977324 1.04541 0.0076163 +0.52635 1.37608 0.0069899 +1.27809 1.25154 0.0086052 +1.4056 1.00205 0.0089288 +1.48687 0.980989 0.0088722 +0.835117 1.01225 0.0094297 +0.37506 1.47327 0.0077412 +0.54745 1.44506 0.0074891 +1.28629 0.980781 0.0096519 +0.86256 1.22734 0.0094308 +0.61586 0.6512 0.010587 +0.49929 0.48824 0.0084413 +1.18757 1.17375 0.0070108 +0.60267 1.39404 0.0091188 +1.57925 1.08155 0.0098176 +1.02594 1.66889 0.0086988 +0.71859 1.60883 0.0075475 +1.00632 1.14376 0.0072602 +1.39649 1.34369 0.0083241 +1.00596 0.865744 0.0092171 +0.57602 0.815049 0.008355 +1.14637 1.11021 0.0090061 +0.48867 1.61594 0.0095658 +0.95099 1.27442 0.0087779 +0.66399 0.998763 0.0092038 +1.56584 1.1203 0.0098575 +1.53206 1.12189 0.0068802 +0.78364 0.973667 0.0095437 +1.03767 1.27312 0.0081629 +1.07456 1.02785 0.0093331 +1.479 0.943202 0.0093666 +0.56618 1.12083 0.0079591 +0.70792 0.55826 0.0076037 +0.58266 0.70525 0.0094897 +1.1392 1.14602 0.0091694 +1.37831 0.66174 0.0092917 +1.10061 0.937016 0.0088632 +0.51573 0.39478 0.0069153 +0.65112 1.34071 0.0095866 +0.44389 1.20188 0.0090277 +1.06934 1.33868 0.0089629 +1.13433 1.01814 0.0087702 +0.807299 1.17264 0.0096827 +0.70462 1.03093 0.0064065 +1.25192 1.58999 0.0094124 +1.56721 1.21109 0.0091656 +1.28178 1.18342 0.0077525 +1.55939 0.882916 0.0068229 +1.00416 0.71991 0.0072999 +0.47618 1.46412 0.0097552 +0.45504 1.43594 0.0077976 +0.60345 0.959503 0.0081143 +0.807146 1.61952 0.0069779 +1.6156 1.07179 0.0074151 +0.75704 1.55468 0.0087115 +0.33228 1.10223 0.0090937 +0.835138 1.63708 0.0086842 +1.20219 1.45442 0.0073929 +1.6191 1.02409 0.0089212 +1.18995 1.52452 0.0085189 +1.12938 1.6784 0.0082964 +0.72714 1.56799 0.0084166 +1.4284 0.9024987 0.0081507 +1.62316 1.27802 0.0084216 +0.32999 1.30723 0.0075258 +0.57861 1.52861 0.0078751 +0.53662 1.53039 0.009642 +0.5695 1.54356 0.0078751 +0.36856 1.40442 0.007509 +1.46497 0.7069 0.0090207 +0.8948009 1.61952 0.0085479 +0.63931 0.971244 0.0092208 +0.54477 0.41577 0.0086594 +0.828991 0.38588 0.0090643 +0.6189 1.64683 0.0088181 +0.35001 1.18934 0.0085034 +1.02678 0.932811 0.0091078 +0.31796 1.32586 0.0095501 +1.37873 1.02824 0.0079689 +1.11155 1.68503 0.0085616 +1.45148 1.05214 0.0081553 +0.829986 1.4663 0.010414 +0.45692 0.44109 0.0086857 +0.44078 0.4106 0.0078431 +0.61252 1.33294 0.0087309 +0.83619 1.25293 0.0080746 +0.46087 1.13765 0.0078727 +1.42736 0.64039 0.0097923 +0.61797 1.14905 0.0070914 +0.66722 1.45807 0.0081197 +0.69532 1.56041 0.0085225 +1.2568 0.32125 0.0077227 +0.48355 1.53069 0.0063549 +0.64341 1.32039 0.0072378 +0.66642 1.29305 0.0088213 +0.983443 1.54175 0.0092602 +0.48756 1.42904 0.0092055 +0.70394 1.59382 0.0093074 +1.09855 1.56159 0.0095834 +0.58629 1.64754 0.0066929 +0.52152 1.42093 0.0086112 +0.79231 1.5638 0.0079328 +1.41076 1.28525 0.0083341 +0.24054 1.47969 0.0097012 +0.68289 0.40587 0.0084854 +1.49425 1.00058 0.0094214 +0.46381 1.50412 0.010092 +0.45743 1.54146 0.0075159 +0.70044 0.969543 0.0084896 +1.14949 0.31633 0.0069518 +1.05164 1.5586 0.0091688 +0.47655 1.0121 0.0085327 +0.34685 1.43851 0.0091659 +0.9062865 0.58558 0.0071357 +0.8915144 1.45689 0.0070074 +0.48934 0.981927 0.0088059 +0.8977474 1.47116 0.0070074 +1.54192 1.09067 0.009433 +1.16732 0.17608 0.0089665 +1.43373 0.943146 0.0077499 +1.05588 1.35915 0.0083154 +1.10732 1.38054 0.008447 +1.2854 0.70183 0.0087653 +0.77233 0.41215 0.0086745 +1.06142 1.65795 0.0087979 +1.08828 1.04449 0.0066191 +0.57494 0.32703 0.0085693 +1.44769 0.62839 0.0083898 +0.23562 1.44093 0.0083644 +0.55145 0.929651 0.0076887 +0.57943 0.65611 0.0070965 +0.46473 1.57528 0.00834 +0.952496 1.74014 0.0073533 +0.816752 0.35741 0.0079572 +0.63802 0.44588 0.0081197 +0.49046 0.936468 0.0081451 +0.65052 1.62447 0.0095749 +0.78383 1.47342 0.0091335 +1.02267 1.11896 0.0062746 +1.16463 1.49302 0.007207 +0.39244 0.37433 0.0090767 +0.45926 1.64477 0.0069374 +0.99787 1.29559 0.007907 +0.977744 0.39597 0.0070545 +1.19336 1.11937 0.0092233 +0.10407 0.76667 0.0090223 +0.76435 1.00659 0.007981 +1.09662 0.85096 0.0097252 +0.54933 0.45335 0.0094047 +1.28547 0.8963494 0.0077021 +1.55328 1.24782 0.0088757 +1.00915 0.73891 0.0061782 +1.18103 0.67214 0.0076298 +0.946128 0.47814 0.0075821 +0.3809 1.00071 0.0079094 +0.3122 1.42152 0.0085037 +1.09338 1.26378 0.0079799 +0.59925 1.61834 0.0090148 +0.72928 1.53505 0.008786 +0.28942 1.38649 0.009299 +0.35306 1.09385 0.0091917 +0.985505 0.119 0.008213 +1.06914 0.69058 0.0076851 +1.12437 1.24883 0.0068434 +1.48187 1.03588 0.0084851 +0.59931 1.68583 0.0081357 +0.45172 1.60975 0.0083878 +1.58764 1.2534 0.0090341 +0.37104 1.177 0.010651 +1.59874 0.994817 0.0076397 +0.66829 1.53601 0.0086526 +1.41419 0.53396 0.010547 +0.61323 0.67768 0.0099846 +1.57723 0.9076849 0.0076825 +1.5665 0.983274 0.0086029 +1.04977 0.67671 0.010722 +1.52939 0.879094 0.0077286 +0.71469 1.75866 0.0076818 +0.49503 1.3934 0.009705 +0.44643 0.52134 0.0076215 +0.36996 1.15335 0.0087167 +0.49843 1.35751 0.0091778 +0.48677 1.33836 0.0088849 +0.53216 0.65615 0.0077654 +0.52448 0.63978 0.0077342 +1.13883 0.997483 0.0067763 +0.967639 1.23515 0.0082224 +0.916511 0.63779 0.0083494 +1.1114 1.2409 0.0068434 +0.64125 1.51245 0.0087257 +1.11262 1.01305 0.0076966 +1.19501 1.20776 0.0084317 +0.99622 0.7027 0.0076532 +0.77672 0.993877 0.007981 +0.802376 1.00952 0.0051881 +0.805221 0.978184 0.0085193 +1.20728 0.64869 0.007549 +1.07432 1.70162 0.0086998 +0.70004 0.69204 0.0086409 +0.69054 1.4811 0.0078039 +0.33157 0.48052 0.0063757 +1.15991 1.15452 0.0091365 +1.15663 1.1757 0.0074182 +1.12563 0.17386 0.0078797 +1.49411 0.84872 0.0067192 +1.4726 0.871574 0.0083797 +1.5248 0.60593 0.0093715 +0.73386 0.28322 0.0073299 +1.58207 1.04588 0.0069508 +1.09018 0.95372 0.0088632 +1.12692 0.957245 0.0074627 +0.73277 0.69993 0.0077101 +0.79336 0.71394 0.0080975 +0.76045 0.48757 0.0073213 +1.08834 1.2282 0.006907 +1.57086 0.69656 0.0082407 +1.26577 1.02911 0.008568 +1.59852 0.963677 0.0075138 +0.30446 1.18627 0.0082169 +0.7446 1.04044 0.0085689 +0.74352 1.07047 0.0064261 +0.71872 1.05958 0.0080375 +1.41814 0.71073 0.0074632 +0.69025 0.65963 0.0081037 +1.52595 0.937517 0.009878 +0.913176 0.69315 0.0064124 +0.55728 1.50495 0.0083837 +0.39566 1.59604 0.0090948 +0.6211 0.854265 0.0069485 +1.61649 1.24687 0.0071396 +1.28736 0.853245 0.0065821 +0.6474 0.42543 0.0089227 +0.78225 0.76768 0.0073993 +1.30844 1.26308 0.0079339 +1.28825 0.33182 0.0076862 +1.18718 0.70263 0.0075215 +1.35547 0.48563 0.0073614 +0.912844 0.31819 0.0086767 +1.2338 0.66141 0.0066524 +0.38739 1.21319 0.0092153 +0.965353 1.00849 0.0088279 +1.64856 1.25122 0.0083836 +1.4783 0.78703 0.0074964 +1.51378 0.74533 0.0072263 +1.16687 1.69138 0.0064423 +0.70986 0.79196 0.0076159 +1.40731 1.50402 0.0080855 +1.38932 1.31184 0.007821 +1.13694 1.35579 0.0087292 +0.842129 0.78135 0.0076035 +0.64428 0.70757 0.0079463 +1.52647 1.02824 0.0080813 +1.31312 1.20484 0.0083619 +0.870012 0.78731 0.0066392 +0.47157 0.948441 0.0093855 +0.42977 0.3843 0.0063183 +1.41366 0.928437 0.0066002 +1.27084 0.76444 0.0078003 +0.62346 1.70756 0.0070606 +1.32831 0.53562 0.0094825 +1.06458 1.00492 0.0077334 +0.979035 1.29631 0.0084821 +1.09903 1.6508 0.0090262 +1.29997 1.38666 0.0063241 +1.66722 1.16001 0.0089977 +1.18488 1.63391 0.0084191 +1.23098 1.59116 0.0090546 +1.25229 0.58439 0.00854 +1.23378 0.5496 0.0071721 +1.25997 0.56703 0.00854 +0.949496 0.938618 0.0050771 +0.60107 0.37595 0.0069585 +0.964695 0.27423 0.0079864 +1.31919 0.90017166 0.0070267 +1.19249 0.881418 0.0072557 +1.3947 1.04137 0.0079616 +0.32231 0.42152 0.0067188 +1.43985 0.70626 0.009388 +1.51789 1.21541 0.0085153 +1.02325 1.61127 0.0082943 +0.68376 0.7499 0.0086883 +0.969031 0.84858 0.0093125 +0.987376 1.21077 0.0064898 +0.25894 1.41486 0.0086848 +0.56399 1.6725 0.0074706 +0.58295 1.67815 0.0077796 +0.26842 0.54121 0.0083472 +0.79064 0.48559 0.0074823 +0.75198 0.830238 0.0073914 +1.05306 1.03647 0.0076972 +1.10258 0.4347 0.0077392 +1.59937 1.1481 0.0070614 +1.10422 0.74534 0.0077961 +0.77846 0.54339 0.0073145 +0.49358 0.63916 0.0084254 +0.849336 1.65196 0.0088406 +0.947261 1.31988 0.0090288 +1.39886 1.07731 0.0090768 +0.79289 0.5339 0.0075422 +1.01392 0.39647 0.0095465 +1.37746 0.44746 0.0089943 +1.10937 0.994659 0.0070789 +0.969977 1.64427 0.008013 +0.95622 0.44848 0.0069933 +0.921765 0.18059 0.0065956 +0.38485 1.03578 0.0079761 +0.41582 1.03472 0.0071674 +0.7999 0.44125 0.0087761 +0.79902 1.02055 0.0051881 +0.55632 0.68536 0.007524 +1.34155 0.3941 0.0059664 +0.61213 1.53375 0.0088297 +1.4827 1.0685 0.0085119 +0.70339 0.847127 0.0070606 +1.07397 0.884216 0.0091391 +0.956958 1.20476 0.0080025 +1.13188 0.71942 0.0082462 +0.77306 1.77293 0.0076195 +1.15817 0.69528 0.0072426 +1.56633 0.52168 0.0076282 +1.648 1.07779 0.0083805 +0.824263 0.72205 0.0083489 +0.885427 0.850203 0.006579 +1.35626 1.33204 0.009893 +0.892264 0.5477 0.0084361 +0.69703 0.946426 0.0089787 +1.19555 0.73634 0.0082153 +0.5932 0.923734 0.0073733 +0.60674 0.913943 0.0071546 +0.59976 0.941854 0.0071175 +1.02914 0.66223 0.0093833 +1.43026 1.05388 0.0083753 +0.6725 1.69035 0.0088717 +0.21414 0.50434 0.0081504 +0.734 0.40093 0.0067964 +1.18156 1.41922 0.0077872 +0.24049 1.04942 0.0060468 +0.42131 1.31622 0.0076933 +1.30096 0.4266 0.0097975 +0.39215 1.47139 0.0077412 +0.30424 0.47456 0.0072464 +0.60288 1.73597 0.0072511 +0.60528 0.7909 0.0098642 +0.872617 0.35063 0.0082414 +0.42923 0.97308 0.0071958 +1.36709 1.25358 0.0087838 +1.3089 0.66926 0.0081006 +1.36115 0.71828 0.0079166 +0.77804 1.04924 0.0090018 +1.41593 0.68095 0.0068592 +1.0416 0.71301 0.0066016 +1.23207 1.2959 0.00751 +1.03514 0.69984 0.0066016 +1.06577 1.30155 0.0083718 +1.3934 1.36762 0.0098482 +0.54939 0.65518 0.0077654 +0.939328 1.10681 0.0074827 +1.33896 0.42952 0.0088856 +1.27957 1.4105 0.0063043 +1.27425 1.39754 0.0063043 +1.04657 1.53886 0.008708 +0.52016 0.963413 0.0096261 +1.50668 0.856789 0.0067192 +1.20789 0.37722 0.0062554 +1.10583 1.13675 0.0086585 +0.982139 1.33333 0.0092318 +1.00547 1.32863 0.009612 +1.50208 1.24076 0.0076551 +0.59667 0.45144 0.0095084 +0.59086 0.56576 0.0082614 +0.923877 0.21496 0.0076465 +0.663 0.3771 0.0079496 +1.1434 0.20059 0.0086168 +0.78146 0.13834 0.006505 +0.78382 0.952459 0.0069617 +1.00257 0.9074118 0.0066096 +1.50375 1.27266 0.0088293 +1.11383 1.04262 0.0057072 +0.889928 1.7315 0.0074155 +0.58099 0.67181 0.0070965 +0.45326 0.8937967 0.0075764 +1.60876 0.950482 0.0067793 +0.3673 0.42663 0.0070386 +1.09766 1.52637 0.0072099 +0.99005 0.73586 0.0065846 +1.23481 0.835861 0.0082759 +0.28017 0.62508 0.0075965 +1.49989 0.884073 0.0073097 +1.31817 1.43873 0.0067507 +1.09353 1.06146 0.0071677 +0.39817 0.972921 0.0065088 +1.05895 0.943423 0.0086404 +0.6276 0.51305 0.0079668 +1.30397 0.827845 0.0083185 +0.24577 1.3476 0.0070295 +0.825399 1.61707 0.0077459 +1.62322 0.77417 0.0064447 +1.44418 1.08412 0.0073409 +0.36233 0.829182 0.0070034 +0.45711 0.40449 0.0074865 +0.8923115 0.51342 0.0090131 +1.36308 1.13194 0.0073427 +1.586 1.21897 0.0081719 +0.49531 0.59444 0.0076551 +1.00142 1.23638 0.0078768 +0.443 0.61299 0.0073743 +0.942621 0.44096 0.0069933 +0.800694 0.814951 0.0071106 +0.66958 0.886838 0.0068246 +0.913218 0.14738 0.0068244 +1.0225 0.853654 0.0071611 +1.67372 1.32897 0.0072266 +0.980422 0.60151 0.0079205 +0.6687 0.970046 0.0062444 +1.6628 1.27949 0.0065181 +1.22881 1.21722 0.0084619 +1.2523 1.19452 0.0072394 +1.27268 1.16677 0.0076613 +1.14486 0.930679 0.0088849 +1.36783 0.69216 0.0063096 +0.994319 0.36536 0.0077023 +1.1653 1.46322 0.0089623 +1.17623 0.8903261 0.0072784 +1.46169 1.20297 0.008265 +1.41811 1.4313 0.0072318 +1.20322 0.76658 0.0064036 +1.27495 0.67112 0.007356 +1.54692 0.55145 0.0089321 +1.32939 0.22147 0.0085477 +0.26087 0.95745 0.007559 +1.02798 1.06119 0.0071127 +0.7472 0.9083156 0.0079727 +0.938501 1.48386 0.0077926 +1.44197 0.887254 0.0075388 +1.61459 1.22235 0.0068686 +0.0422600000000001 0.868517 0.0077118 +1.57578 1.31137 0.0097687 +0.984597 1.45258 0.0087856 +0.934338 1.46234 0.0094336 +1.12036 0.9010905 0.0070096 +0.78847 1.58529 0.0085431 +1.58612 0.68643 0.0082407 +0.91213 0.285 0.0079399 +1.37279 0.829374 0.0082246 +1.65295 1.03109 0.0075904 +0.900621 0.948925 0.0074373 +0.41882 0.62151 0.0062555 +0.73549 0.53768 0.0073052 +0.36909 1.50617 0.0078421 +1.44411 0.58899 0.0067583 +1.12184 1.59418 0.0090825 +0.48678 0.918746 0.0076114 +0.847686 0.60977 0.0068872 +1.27664 0.27096 0.0070006 +1.12785 1.50547 0.0086532 +0.6237 0.7779 0.0075234 +1.09808 1.09517 0.0077215 +1.04369 1.50895 0.007133 +0.939491 0.7203 0.0078334 +0.976245 0.64221 0.0084901 +1.62418 0.979864 0.0070303 +1.11131 1.16926 0.0087862 +0.7497 0.958312 0.0078187 +0.809377 1.74777 0.0080822 +1.23992 0.53489 0.0071721 +0.841056 1.23419 0.0073949 +1.19356 0.63332 0.009177 +1.63072 0.840949 0.0068125 +1.21395 0.52086 0.0065547 +0.8175 1.64665 0.0066769 +0.78386 0.68514 0.0074646 +1.56519 0.94688 0.0092106 +1.12552 1.61875 0.0094533 +1.39243 0.50014 0.0071907 +1.70431 0.8324 0.0069169 +1.66323 1.3168 0.0072266 +0.45969 0.54774 0.0077486 +1.39045 0.73957 0.0065034 +1.58572 1.46349 0.0081067 +0.79138 1.67642 0.0075247 +0.18678 0.60403 0.0081564 +0.11317 1.15712 0.0095324 +1.37441 1.35035 0.009341 +0.29729 1.50035 0.0051536 +1.32732 1.1735 0.006097 +1.26938 0.53639 0.0070341 +1.27224 0.52102 0.0070341 +0.21156 0.79179 0.0066902 +0.75637 0.941366 0.0076552 +0.971024 0.885825 0.0080005 +1.5644 0.58714 0.0055905 +1.4832 1.41894 0.0055732 +0.33379 1.19903 0.006797 +0.851226 0.6458 0.010335 +0.77908 0.841035 0.0067402 +1.2563 0.34732 0.0059405 +0.967968 0.69002 0.0071759 +1.31309 0.936416 0.0062386 +0.821234 0.60099 0.0065197 +1.01342 1.05172 0.0065894 +0.7704 1.26827 0.010266 +0.52097 1.2734 0.0093544 +0.75028 1.45452 0.0084898 +0.75884 1.31916 0.0089022 +0.804692 1.30689 0.011338 +0.73196 1.22012 0.010643 +0.77474 1.38674 0.0095228 +0.78132 1.1683 0.011052 +0.78259 1.21103 0.0088884 +0.72835 1.39236 0.011254 +0.69505 1.11996 0.009248 +0.42804 1.38352 0.0087398 +0.79899 1.09269 0.0077748 +0.932483 1.23355 0.0087997 +0.850089 1.18459 0.0086644 +0.59125 1.1908 0.0098309 +0.543 1.23002 0.0091971 +0.68659 1.25792 0.010257 +0.874077 1.05915 0.0086466 +0.884284 1.11902 0.0079603 +0.58158 1.2273 0.0084607 +0.42359 1.25674 0.0075575 +0.56657 1.26277 0.0097585 +0.55522 1.1568 0.010086 +1.22013 1.02988 0.0082851 +0.881327 1.36297 0.0089083 +0.37932 1.26757 0.0089651 +0.851354 1.28991 0.0090966 +0.834753 1.10714 0.0079069 +0.60534 1.10588 0.0099745 +0.81352 1.1349 0.0086871 +0.42314 1.52468 0.010233 +0.68271 1.175 0.0086119 +0.9078754 1.09419 0.0074269 +0.5371 1.09887 0.0078802 +0.39391 1.23261 0.0090074 +0.55129 1.30007 0.0088192 +0.801966 1.40193 0.011175 +0.50063 1.2205 0.0087654 +0.811839 1.28192 0.0091198 +1.16879 0.969173 0.007977 +0.66617 1.36052 0.0084908 +0.45118 1.11995 0.0079439 +0.56505 1.06179 0.0067006 +0.952154 1.14611 0.0090215 +0.819284 1.37754 0.010563 +0.63131 1.20913 0.0091593 +0.9028625 1.16148 0.0080087 +0.74203 1.15898 0.0081894 +1.19154 1.05642 0.0087601 +0.63094 1.24879 0.0077946 +1.58473 1.10524 0.010576 +0.72121 1.28241 0.0091345 +0.50836 1.43482 0.0086112 +0.910272 1.20109 0.0098958 +0.858157 1.42753 0.0080857 +1.55778 1.07592 0.0094946 +0.74588 1.35502 0.0094782 +0.95271 1.38356 0.0093718 +1.05332 1.32029 0.0085499 +0.3915 1.43947 0.0082617 +0.48787 1.06854 0.0096429 +0.71217 1.01886 0.0064065 +0.63532 1.37378 0.0075374 +0.6582 1.14534 0.0080325 +0.64359 1.17485 0.0077969 +0.42027 1.1049 0.0077043 +0.79574 1.12738 0.0086871 +0.71307 1.48229 0.0087074 +0.68507 1.32388 0.0081901 +0.814861 1.19278 0.0092232 +0.47787 1.27029 0.009039 +0.44585 1.29271 0.0076642 +0.72498 1.32565 0.0074954 +0.48077 1.40972 0.008307 +0.64919 1.27881 0.0088787 +0.918082 1.15225 0.0071274 +0.92014 1.26703 0.0084856 +0.4935 1.23862 0.0077045 +1.46938 0.924743 0.0088147 +0.66166 1.18552 0.0085581 +0.982971 1.60095 0.0088724 +0.66739 1.08887 0.0074724 +0.49788 1.47197 0.0089049 +0.71161 1.42972 0.0089287 +0.997468 1.09799 0.0085173 +0.931263 1.02267 0.0063436 +1.02193 1.47208 0.0094241 +0.77911 1.35181 0.0071383 +0.34428 1.27381 0.0077866 +0.68473 1.46242 0.0076048 +0.974577 1.42095 0.0070346 +0.859599 1.33457 0.0076119 +0.941082 1.34369 0.0095329 +0.71415 1.16861 0.0064126 +0.4854 1.37354 0.0085125 +0.972275 1.52095 0.01061 +0.64972 1.66062 0.0088205 +1.43851 0.6593 0.0070015 +0.867817 1.24845 0.0069205 +0.42507 1.14217 0.0085132 +1.01811 1.59004 0.0094017 +0.67255 0.66559 0.0074962 +1.03537 1.09157 0.0076835 +1.09006 0.73486 0.0079268 +0.56668 1.19107 0.008425 +0.52995 1.19475 0.0078488 +0.52377 1.17844 0.0078488 +0.69664 1.19203 0.0076714 +0.48053 1.16298 0.0072507 +0.4635 1.17172 0.0081546 +0.73521 1.49257 0.0090734 +0.46118 1.30014 0.0076642 +0.75468 1.42255 0.0071757 +0.39826 1.10098 0.010063 +0.987784 1.64438 0.008013 +0.51639 0.48051 0.0083767 +0.828818 0.70301 0.0082533 +0.69186 1.42777 0.0085312 +0.865235 0.994267 0.0094572 +0.7299 1.07476 0.0064261 +0.4175 1.27239 0.0075575 +0.60801 1.29633 0.0070521 +0.38755 1.14011 0.0086282 +0.68153 0.69738 0.0084407 +0.44774 1.41957 0.0080661 +0.55209 1.57343 0.0089125 +0.876679 1.09588 0.0078505 +0.866535 1.0782 0.0070299 +0.4724 1.44277 0.0083947 +1.30991 0.953315 0.0063203 +0.801766 1.24982 0.0068053 +0.77602 0.71979 0.0075626 +0.70433 0.67287 0.0085388 +0.41326 1.06672 0.0084298 +0.983702 1.24662 0.0079074 +1.42354 1.29866 0.0082341 +0.74649 0.71019 0.0074494 +0.45867 1.26331 0.0085637 +0.52537 1.2989 0.0071647 +0.78196 1.43313 0.0071422 +1.25458 0.846124 0.010024 +0.78572 0.74904 0.0073802 +0.878078 1.39893 0.0076556 +1.09214 0.918911 0.0086148 +0.978052 1.06232 0.0076163 +0.68833 1.39435 0.0072476 +0.47121 1.05505 0.0091876 +1.02079 1.24383 0.0084305 +0.8989843 1.23175 0.0071305 +0.76706 0.77397 0.0067642 +1.04467 1.00622 0.0067353 +0.69875 0.76206 0.0081651 +0.75725 1.1094 0.007917 +0.75999 1.13036 0.0079802 +0.62151 0.998075 0.0085733 +0.933985 1.42786 0.0073031 +0.51949 1.36048 0.0076712 +0.65124 1.08501 0.0064681 +0.65376 1.12352 0.0098579 +0.969901 0.67419 0.0071759 +0.3096 1.39091 0.0074634 +0.44272 1.18107 0.009381 +0.63275 0.844127 0.0069485 +0.9023067 0.60093 0.0071357 +0.6955 0.78081 0.0071699 +0.917148 0.948858 0.0074373 +1.02791 1.38109 0.0085225 +1.21249 0.72928 0.0072319 +1.54588 1.11128 0.0078409 +0.867622 1.30191 0.0085384 +0.44651 1.57863 0.0067864 +0.73975 1.10707 0.0068889 +0.9052234 0.68132 0.0063499 +0.982754 0.66063 0.0084057 +0.41641 1.0188 0.0071674 +0.56926 1.10342 0.0079591 +0.71856 0.974777 0.007719 +0.922052 1.44183 0.0082659 +1.18021 1.04059 0.0079391 +0.41012 1.32914 0.0076933 +0.855934 0.79172 0.0066392 +0.860596 0.929581 0.0082745 +0.70945 1.22735 0.0081643 +0.826946 1.3187 0.0094106 +0.71338 1.62477 0.0069761 +0.64596 1.05635 0.008228 +0.63414 0.41069 0.0086778 +0.53095 1.4682 0.006163 +0.79495 0.38796 0.0076585 +0.953447 0.73134 0.0080089 +1.53824 1.00203 0.0056679 +0.9064609 1.11512 0.0080965 +0.71517 1.46246 0.0067575 +0.43283 1.35136 0.0069626 +0.61901 0.871682 0.0078941 +0.872287 0.856613 0.006579 +1.047 1.05633 0.0088321 +0.858255 1.04825 0.0076449 +0.977839 0.70448 0.0075094 +0.809862 1.56214 0.0068691 +0.821086 1.42379 0.0093054 +0.44534 1.08931 0.0065712 +1.51483 0.8904503 0.0070602 +0.50605 1.03608 0.0072625 +0.67293 1.42671 0.0081641 +0.43202 1.55648 0.0066977 +0.933812 1.30499 0.0090288 +0.76757 0.68827 0.0074646 +0.972223 1.559 0.0086483 +0.926779 1.35932 0.0077287 +0.7994 1.48643 0.0087717 +0.8971378 1.42225 0.0063063 +0.914135 1.40037 0.0086191 +0.8969648 1.38521 0.0095353 +0.39387 1.37894 0.0070192 +0.5659 1.39405 0.0064814 +1.28431 1.15208 0.0076106 +1.29569 1.41471 0.0074994 +1.5668 1.18875 0.0089116 +0.860287 1.61828 0.0061647 +0.67227 1.39557 0.0072476 +1.01014 1.68003 0.0083789 +0.7091 1.35428 0.0081525 +0.47226 0.42938 0.0079517 +0.54072 1.38198 0.0069899 +0.860828 1.37294 0.0074781 +0.71508 1.18522 0.0073146 +0.55333 0.837184 0.0077129 +1.07473 1.48354 0.0071199 +0.59042 1.29144 0.0079824 +0.58981 1.4097 0.008664 +0.860627 1.54868 0.0072496 +1.05483 1.6001 0.0077385 +0.9091703 1.33253 0.0062961 +0.991924 1.36976 0.009077 +0.68538 1.28322 0.0081893 +0.62869 0.46132 0.0078685 +0.57148 1.64617 0.0063214 +1.05238 1.26251 0.0069561 +0.47601 1.54263 0.0063549 +1.01475 0.37391 0.0099672 +0.70918 1.57331 0.0084299 +0.63785 1.70131 0.0070606 +1.02346 1.07907 0.0073974 +0.94559 1.16576 0.007434 +0.6243 1.03602 0.007306 +0.58097 0.849534 0.0083977 +1.35254 0.40153 0.0059664 +0.923979 1.01061 0.0063436 +1.00562 1.41085 0.0087494 +0.73586 1.60686 0.0068823 +1.01121 1.52417 0.0068786 +0.884962 1.6008 0.0086879 +0.887002 1.28091 0.0067525 +1.65324 1.12854 0.0074928 +1.01819 1.13216 0.0059202 +0.72522 1.24302 0.0089696 +0.54797 1.27701 0.007003 +0.77402 1.19175 0.0091737 +0.71314 1.26139 0.0081429 +0.7629 1.34219 0.0084805 +0.79178 1.28478 0.0085541 +0.7422 1.13942 0.0080935 +0.70358 1.29483 0.0085867 +0.78289 1.36721 0.0071383 +0.64523 1.1576 0.0077969 +0.67209 1.11023 0.0097449 +0.77181 1.22758 0.007646 +0.70652 1.13814 0.0070167 +0.78688 1.2525 0.0066115 +0.59324 1.21255 0.0079402 +1.29208 0.958006 0.0079931 +0.77432 0.73651 0.0071672 +0.49658 1.27759 0.0076012 +0.840731 1.36383 0.0094549 +0.982164 1.26412 0.0079074 +1.03432 0.995409 0.0067353 +0.816164 1.2604 0.00804 +0.67823 1.15266 0.0080687 +0.76273 0.70694 0.0074494 +1.21796 0.71417 0.0072319 +0.66844 0.68394 0.0074436 +0.74626 1.43609 0.0071757 +0.76957 1.45892 0.0089033 +0.63817 1.091 0.0064681 +1.04115 1.02235 0.0066026 +0.972407 0.72433 0.0076748 +0.7541 0.67534 0.0074579 +0.57223 1.07483 0.0053791 +0.863206 1.38938 0.0066419 +1.30292 1.15768 0.0075686 +1.05911 1.07211 0.0080729 +0.800816 0.74263 0.0071621 +0.815229 0.6892 0.0085546 +0.882344 1.1366 0.0079603 +0.73943 1.31532 0.0079934 +0.8743 1.34293 0.0076119 +0.68055 0.78632 0.0066591 +0.53399 1.45485 0.006163 +0.9069564 0.66732 0.0063499 +0.44992 1.38117 0.0079029 +0.69226 1.23568 0.0072571 +0.850409 1.11512 0.0070208 +0.42452 1.36442 0.0069626 +0.69578 1.3386 0.0074982 +1.02285 1.26245 0.0081859 +0.79191 1.10845 0.0077748 +0.7081 1.10205 0.0086189 +0.46235 1.40838 0.0074495 +0.56202 1.22253 0.0082777 +0.4309 1.09148 0.0065712 +0.8923426 1.0882 0.0063974 +1.51769 0.9058776 0.0070602 +0.75578 0.65886 0.0066694 +0.82076 0.67031 0.0066405 +0.73638 0.68102 0.0081822 +0.67141 0.79796 0.0066591 +0.77467 1.24433 0.0066115 +0.917057 0.65659 0.0066306 +0.69105 1.14012 0.0070167 +0.7226 0.66755 0.0082068 +0.840659 0.66625 0.0081848 +0.81035 0.65985 0.0066405 +0.850457 0.68157 0.0075616 +0.7278 0.64855 0.0079378 +0.846766 0.69797 0.0074611 +0.74544 0.64824 0.0066694 +0.857546 0.71056 0.0074593 diff --git a/example/MicroModel/GenerateCases.sh b/example/MicroModel/GenerateCases.sh new file mode 100755 index 00000000..2a1e0902 --- /dev/null +++ b/example/MicroModel/GenerateCases.sh @@ -0,0 +1,47 @@ +#!/bin/bash + + +tau1=1.18 +tau2=0.7 +alpha=0.005 +Q="1.179757e-08 1.179757e-07 1.179757e-06" + +#Cases for drainage +DrainWet="0.79 0.47 0.0" + +# Cases for imbibition +ImbWet="0.92 0.47" + +for q in $Q; do + echo $q; + flux=$(echo $q | sed 's/1.179757e-08/0.002/g') + flux=$(echo $flux | sed 's/1.179757e-07/0.02/g') + flux=$(echo $flux | sed 's/1.179757e-06/0.2/g') + + for i in $DrainWet; do + NAME="Juanes_drain_Q"$flux"_wet"$i + echo $NAME + mkdir $NAME + echo "$tau1 $tau2" > $NAME/Color.in + echo "$alpha 0.95 $i" >> $NAME/Color.in + echo "0.0" >> $NAME/Color.in + echo "0.0 0.0 0.0" >> $NAME/Color.in + echo "0 4 $q 0.0" >> $NAME/Color.in + echo "5000000 25000 1e-5" >> $NAME/Color.in + echo "1000" >> $NAME/Color.in + done + + for i in $ImbWet; do + NAME="Juanes_imb_Q"$flux"_wet"$i + echo $NAME + mkdir $NAME + echo "$tau1 $tau2" > $NAME/Color.in + echo "$alpha 0.95 $i" >> $NAME/Color.in + echo "0.0" >> $NAME/Color.in + echo "0.0 0.0 0.0" >> $NAME/Color.in + echo "0 4 $q 0.0" >> $NAME/Color.in + echo "5000000 25000 1e-5" >> $NAME/Color.in + echo "1000" >> $NAME/Color.in + done + +done \ No newline at end of file diff --git a/example/MicroModel/ReadDiscPack.R b/example/MicroModel/ReadDiscPack.R new file mode 100644 index 00000000..22fcd88e --- /dev/null +++ b/example/MicroModel/ReadDiscPack.R @@ -0,0 +1,21 @@ +require("ggplot2") + +Discs<-read.csv("FullMicromodel.discs",head=FALSE,sep=" ") + +colnames(Discs)<-c("cx","cy","radius") + +L=0.45 + +# Extract some subset from the interior of the discs +SubDiscs<-subset(Discs,Discs$cy>0.9-L) +SubDiscs<-subset(SubDiscs,SubDiscs$cy<0.9+L) +SubDiscs<-subset(SubDiscs,SubDiscs$cx>0.9-L) +SubDiscs<-subset(SubDiscs,SubDiscs$cx<0.9+L) + +SubDiscs$cx<-SubDiscs$cx-0.9+L +SubDiscs$cy<-SubDiscs$cy-0.9+L + +write.table(SubDiscs,file="DiscPack.in",quote=FALSE,row.names=FALSE,col.names=FALSE,sep=" ") + +ShowPlot<-ggplot(SubDiscs)+geom_circle(aes(x0=cx,y0=cy,r=radius)) + diff --git a/example/Piston/input.db b/example/Piston/input.db index 5a9ba030..17828d45 100644 --- a/example/Piston/input.db +++ b/example/Piston/input.db @@ -37,4 +37,8 @@ Analysis { Visualization { -} \ No newline at end of file +} + +FlowAdaptor { + +} diff --git a/example/Plates/input.db b/example/Plates/input.db index 2da2ea3e..df593ea9 100644 --- a/example/Plates/input.db +++ b/example/Plates/input.db @@ -36,4 +36,8 @@ Analysis { } Visualization { -} \ No newline at end of file +} + +FlowAdaptor { + +} From 664da10edda672739516e1def7583310e357836e Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 1 Sep 2021 12:19:47 -0400 Subject: [PATCH 02/40] extra protocol checks --- tests/lbpm_color_simulator.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/lbpm_color_simulator.cpp b/tests/lbpm_color_simulator.cpp index a0b2859c..c2bdb801 100644 --- a/tests/lbpm_color_simulator.cpp +++ b/tests/lbpm_color_simulator.cpp @@ -92,6 +92,8 @@ int main( int argc, char **argv ) SKIP_TIMESTEPS = flow_db->getWithDefault( "skip_timesteps", 50000 ); ENDPOINT_THRESHOLD = flow_db->getWithDefault( "endpoint_threshold", 0.1); /* protocol specific key values */ + if (PROTOCOL == "image sequence" || PROTOCOL == "core flooding") + SKIP_TIMESTEPS = 0; if (PROTOCOL == "fractional flow") FRACTIONAL_FLOW_INCREMENT = flow_db->getWithDefault( "fractional_flow_increment", 0.05); if (PROTOCOL == "seed water") @@ -107,10 +109,14 @@ int main( int argc, char **argv ) runAnalysis analysis(ColorModel); while (ContinueSimulation){ /* this will run steady points */ - timestep += MAX_STEADY_TIME; + if (PROTOCOL == "fractional flow" || PROTOCOL == "seed water" || PROTOCOL == "shell aggregation" || PROTOCOL == "image sequence" ) + timestep += MAX_STEADY_TIME; + else + timestep += ColorModel.timestepMax; + /* Run the simulation timesteps*/ MLUPS = ColorModel.Run(timestep); if (rank==0) printf("Lattice update rate (per MPI process)= %f MLUPS \n", MLUPS); - if (ColorModel.timestep > ColorModel.timestepMax){ + if (ColorModel.timestep >= ColorModel.timestepMax){ ContinueSimulation = false; } From b3457348bde9efc75a28860c17f0174be9ed1c29 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 1 Sep 2021 14:29:31 -0400 Subject: [PATCH 03/40] fix inlet / outlet porosity --- common/Domain.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/Domain.cpp b/common/Domain.cpp index 6a4c61fb..81f74e22 100644 --- a/common/Domain.cpp +++ b/common/Domain.cpp @@ -629,7 +629,8 @@ void Domain::ComputePorosity(){ double sum; double sum_local=0.0; double iVol_global = 1.0/(1.0*(Nx-2)*(Ny-2)*(Nz-2)*nprocx()*nprocy()*nprocz()); - if (BoundaryCondition > 0 && BoundaryCondition !=5) iVol_global = 1.0/(1.0*(Nx-2)*nprocx()*(Ny-2)*nprocy()*((Nz-2)*nprocz()-6)); + if (BoundaryCondition > 0 && BoundaryCondition !=5) + iVol_global = 1.0/(1.0*(Nx-2)*nprocx()*(Ny-2)*nprocy()*((Nz-2)*nprocz()-inlet_layers_z - outlet_layers_z)); //......................................................... for (int k=inlet_layers_z+1; k Date: Thu, 2 Sep 2021 08:19:54 -0400 Subject: [PATCH 04/40] remove random array functionality --- common/Array.h | 2 +- common/Array.hpp | 3 ++- common/FunctionTable.cpp | 4 ++-- common/FunctionTable.hpp | 7 +++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/common/Array.h b/common/Array.h index ccbcbdc8..0e163718 100644 --- a/common/Array.h +++ b/common/Array.h @@ -642,7 +642,7 @@ public: // Math operations void cat( const Array &x, int dim = 0 ); //! Initialize the array with random values (defined from the function table) - void rand(); + //void rand(); //! Return true if NaNs are present bool NaNs() const; diff --git a/common/Array.hpp b/common/Array.hpp index 1faaba71..1deaa463 100644 --- a/common/Array.hpp +++ b/common/Array.hpp @@ -1292,11 +1292,12 @@ TYPE Array::interp( const double *x ) const /******************************************************** * Math operations (should call the Math class) * ********************************************************/ -template +/*template void Array::rand() { FUN::rand( *this ); } +*/ template Array & Array::operator+=( const Array &rhs ) diff --git a/common/FunctionTable.cpp b/common/FunctionTable.cpp index 10577c0f..54dc5848 100644 --- a/common/FunctionTable.cpp +++ b/common/FunctionTable.cpp @@ -4,7 +4,7 @@ /******************************************************** * Random number generation * ********************************************************/ -template<> char genRand() +/*template<> char genRand() { static std::random_device rd; static std::mt19937 gen( rd() ); @@ -88,7 +88,7 @@ template<> long double genRand() static std::uniform_real_distribution dis; return dis( gen ); } - +*/ /******************************************************** * axpy * diff --git a/common/FunctionTable.hpp b/common/FunctionTable.hpp index 6a611f00..57e6b237 100644 --- a/common/FunctionTable.hpp +++ b/common/FunctionTable.hpp @@ -7,21 +7,20 @@ #include #include #include -#include - +//#include /******************************************************** * Random number initialization * ********************************************************/ -template TYPE genRand(); +/*template TYPE genRand(); template inline void FunctionTable::rand( Array &x ) { for ( size_t i = 0; i < x.length(); i++ ) x( i ) = genRand(); } - +*/ /******************************************************** * Reduction * From 21ca163c35bed2e0d3c7220f076183e36d092f78 Mon Sep 17 00:00:00 2001 From: James E McClure Date: Thu, 2 Sep 2021 11:16:24 -0400 Subject: [PATCH 05/40] update mrt model --- docs/source/examples/running.rst | 7 ++- docs/source/userGuide/models/mrt/mrt.rst | 76 ++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/docs/source/examples/running.rst b/docs/source/examples/running.rst index 83993f59..c833117e 100644 --- a/docs/source/examples/running.rst +++ b/docs/source/examples/running.rst @@ -1,9 +1,10 @@ -============ -Running LBPM -============ +============== +LBPM examples +============== There are two main components to running LBPM simulators. First is understanding how to launch MPI tasks on your system, which depends on the particular implementation of MPI that you are using, as well as other details of the local configuration. The second component is understanding the LBPM input file structure. + diff --git a/docs/source/userGuide/models/mrt/mrt.rst b/docs/source/userGuide/models/mrt/mrt.rst index 1e232ea6..65fe57c7 100644 --- a/docs/source/userGuide/models/mrt/mrt.rst +++ b/docs/source/userGuide/models/mrt/mrt.rst @@ -1,6 +1,74 @@ -============================================= +############################################################################### MRT model -============================================= +############################################################################### + +The LBPM single fluid model is implemented by combining a multi-relaxation time (MRT) D3Q19 +lattice Boltzmann equation (LBE) to solve for the momentum transport, recovering the Navier-Stokes +equations to second order based on the Chapman-Enskog expansion. The MRT model is used to assess the +permeability of digital rock images in either the Darcy or non-Darcy flow regimes. + +A typical command to launch the LBPM color simulator is as follows + +``` +mpirun -np $NUMPROCS lbpm_permeability_simulator input.db +``` + +where ``$NUMPROCS`` is the number of MPI processors to be used and ``input.db`` is +the name of the input database that provides the simulation parameters. +Note that the specific syntax to launch MPI tasks may vary depending on your system. +For additional details please refer to your local system documentation. + +*************************** +Model parameters +*************************** + +The essential model parameters for the color model are + +- ``tau`` -- control the fluid viscosity -- :math:`0.7 < \tau < 1.5` + +**************************** +Model Formulation +**************************** + + +**************************** +Example Input File +**************************** + + + + +**************************** +Boundary Conditions +**************************** + +The following external boundary conditions are supported by ``lbpm_permeability_simulator`` +and can be set by setting the ``BC`` key values in the ``Domain`` section of the +input file database + +- ``BC = 0`` -- fully periodic boundary conditions +- ``BC = 3`` -- constant pressure boundary condition +- ``BC = 4`` -- constant volumetric flux boundary condition + +For ``BC = 0`` any mass that exits on one side of the domain will re-enter at the other +side. If the pore-structure for the image is tight, the mismatch between the inlet and +outlet can artificially reduce the permeability of the sample due to the blockage of +flow pathways at the boundary. LBPM includes an internal utility that will reduce the impact +of the boundary mismatch by eroding the solid labels within the inlet and outlet layers +(https://doi.org/10.1007/s10596-020-10028-9) to create a mixing layer. +The number mixing layers to use can be set using the key values in the ``Domain`` section +of the input database + +- ``InletLayers = 5`` -- set the number of mixing layers to ``5`` voxels at the inlet +- ``OUtletLayers = 5`` -- set the number of mixing layers to ``5`` voxels at the outlet + +For the other boundary conditions a thin reservoir of fluid (default ``3`` voxels) +is established at either side of the domain. The inlet is defined as the boundary face +where ``z = 0`` and the outlet is the boundary face where ``z = nprocz*nz``. By default a +reservoir of fluid A is established at the inlet and a reservoir of fluid B is established at +the outlet, each with a default thickness of three voxels. To over-ride the default label at +the inlet or outlet, the ``Domain`` section of the database may specify the following key values + +- ``InletLayerPhase = 2`` -- establish a reservoir of component B at the inlet +- ``OutletLayerPhase = 1`` -- establish a reservoir of component A at the outlet -The multi-relaxation time (MRT) lattice Boltzmann model is constructed to approximate the -solution of the Navier-Stokes equations. From 7c5e0f05e12a5be1a052ab080a9f215b8ce1e149 Mon Sep 17 00:00:00 2001 From: James E McClure Date: Thu, 2 Sep 2021 14:06:35 -0400 Subject: [PATCH 06/40] working on multiline eqs in docs --- docs/source/userGuide/models/color/index.rst | 31 +++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/source/userGuide/models/color/index.rst b/docs/source/userGuide/models/color/index.rst index 326680fe..ead0ada9 100644 --- a/docs/source/userGuide/models/color/index.rst +++ b/docs/source/userGuide/models/color/index.rst @@ -66,7 +66,36 @@ Model Formulation **************************** - +The relaxation parameters are determined from the relaxation time: +.. math:: + :nowrap: + + + $$ + \\begin{eqnarray} + \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu\;, \\ + \lambda_{4}= \lambda_{6}= \lambda_{8} = \lambda_{16} = \lambda_{17} = \lambda_{18}= \frac{8(2-s_\nu)}{8-s_\nu} \;, + \\end{eqnarray} + $$ + +The non-zero equilibrium moments are defined as + +.. math:: + :nowrap: + + $$ + \\begin{eqnarray} + m_1^{eq} &=& (j_x^2+j_y^2+j_z^2) - \alpha |\textbf{C}|, \\ + m_9^{eq} &=& (2j_x^2-j_y^2-j_z^2)+ \alpha \frac{|\textbf{C}|}{2}(2n_x^2-n_y^2-n_z^2), \\ + m_{11}^{eq} &=& (j_y^2-j_z^2) + \alpha \frac{|\textbf{C}|}{2}(n_y^2-n_z^2), \\ + m_{13}^{eq} &=& j_x j_y + \alpha \frac{|\textbf{C}|}{2} n_x n_y\;, \\ + m_{14}^{eq} &=& j_y j_z + \alpha \frac{|\textbf{C}|}{2} n_y n_z\;, \\ + m_{15}^{eq} &=& j_x j_z + \alpha \frac{|\textbf{C}|}{2} n_x n_z\;, + \\end{eqnarray} + $$ + + + **************************** Boundary Conditions **************************** From a39ceffec54ea46f3e2a7978b4d85b4db5a0105b Mon Sep 17 00:00:00 2001 From: James E McClure Date: Thu, 2 Sep 2021 14:32:53 -0400 Subject: [PATCH 07/40] working on multiline eqs in docs --- docs/source/userGuide/models/color/index.rst | 99 +++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/docs/source/userGuide/models/color/index.rst b/docs/source/userGuide/models/color/index.rst index ead0ada9..db45f8c3 100644 --- a/docs/source/userGuide/models/color/index.rst +++ b/docs/source/userGuide/models/color/index.rst @@ -66,10 +66,89 @@ Model Formulation **************************** -The relaxation parameters are determined from the relaxation time: +Two LBEs are constructed to model the mass transport, incorporating the anti-diffusion .. math:: :nowrap: + $$ + \\begin{eqnarray} + A_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) &=& w_q N_a \Big[1 + \frac{\bm{u} \cdot \bm{\xi}_q}{c_s^2} + + \beta \frac{N_b}{N_a+N_b} \bm{n} \cdot \bm{\xi}_q\Big] \; + \\ + B_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) &=& + w_q N_b \Big[1 + \frac{\bm{u} \cdot \bm{\xi}_q}{c_s^2} + - \beta \frac{N_a}{N_a+N_b} \bm{n} \cdot \bm{\xi}_q\Big]\;, + \\end{eqnarray} + $$ + +The number density is obtained directly for each fluid as the sum of the mass transport distributions +.. math:: + :nowrap: + + $$ + \\begin{equation} + N_a = \sum_q A_q\;, \quad N_b = \sum_q B_q\; + \\end{equation} + $$ + + +The phase indicator field is then defined as +.. math:: + :nowrap: + + $$ + \\begin{equation} + \phi = \frac{N_a-N_b}{N_a+N_b} + \\end{equation} + $$ + +The local fluid viscosity and density are determined based on linear interpolation + +.. math:: + :nowrap: + + $$ + \\begin{equation} + \nu = \frac{(1+\phi) \nu_n}{2}+\frac{(1-\phi) \nu_w}{2} \;, + \\end{equation} + $$ + +.. math:: + :nowrap: + + $$ + \\begin{equation} + \rho_0 = \frac{(1+\phi) \rho_n}{2}+ \frac{(1-\phi) \rho_w}{2} \;, + \\end{equation} + $$ + +These values are then used to model the momentum transport. +The LBE governing momentum transport is defined based on a MRT relaxation process with additional +terms to account for the interfacial stresses +.. math:: + :nowrap: + + $$ + \\begin{equation} + f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, + \\end{equation} + $$ + + +The moments are linearly indepdendent +.. math:: + :nowrap: + + $$ + \\begin{equation} + m_k = \sum_{q=0}^{18} M_{qk} f_q\;. + \\end{equation} + $$ + + +The relaxation parameters are determined from the relaxation time: +.. math:: + :nowrap: $$ \\begin{eqnarray} @@ -94,7 +173,25 @@ The non-zero equilibrium moments are defined as \\end{eqnarray} $$ +where the color gradient is determined from the phase indicator field +.. math:: + :nowrap: + $$ + \\begin{equation} + \textbf{C}=\nabla \phi\;. + \\end{equation} + $$ + +and the unit normal vector is +.. math:: + :nowrap: + + $$ + \\begin{equation} + \bm{n} = \frac{\textbf{C}}{|\textbf{C}|}\;. + \\end{equation} + $$ **************************** Boundary Conditions From 343a439f3be4c13917b8d819e54f12bb5a51ebe5 Mon Sep 17 00:00:00 2001 From: James McClure Date: Fri, 3 Sep 2021 06:04:19 -0400 Subject: [PATCH 08/40] added color model formulation --- docs/source/userGuide/models/color/index.rst | 123 ++++++++++++------- 1 file changed, 81 insertions(+), 42 deletions(-) diff --git a/docs/source/userGuide/models/color/index.rst b/docs/source/userGuide/models/color/index.rst index db45f8c3..382f1ff7 100644 --- a/docs/source/userGuide/models/color/index.rst +++ b/docs/source/userGuide/models/color/index.rst @@ -67,94 +67,107 @@ Model Formulation Two LBEs are constructed to model the mass transport, incorporating the anti-diffusion + .. math:: :nowrap: $$ - \\begin{eqnarray} - A_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) &=& w_q N_a \Big[1 + \frac{\bm{u} \cdot \bm{\xi}_q}{c_s^2} + A_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) = w_q N_a \Big[1 + \frac{\bm{u} \cdot \bm{\xi}_q}{c_s^2} + \beta \frac{N_b}{N_a+N_b} \bm{n} \cdot \bm{\xi}_q\Big] \; - \\ - B_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) &=& + $$ + +.. math:: + :nowrap: + + $$ + B_q(\bm{x} + \bm{\xi}_q \delta t, t+\delta t) = w_q N_b \Big[1 + \frac{\bm{u} \cdot \bm{\xi}_q}{c_s^2} - \beta \frac{N_a}{N_a+N_b} \bm{n} \cdot \bm{\xi}_q\Big]\;, - \\end{eqnarray} $$ -The number density is obtained directly for each fluid as the sum of the mass transport distributions +The number density for each fluid is obtained from the sum of the mass transport distributions + .. math:: :nowrap: $$ - \\begin{equation} N_a = \sum_q A_q\;, \quad N_b = \sum_q B_q\; - \\end{equation} $$ The phase indicator field is then defined as + .. math:: :nowrap: $$ - \\begin{equation} \phi = \frac{N_a-N_b}{N_a+N_b} - \\end{equation} $$ -The local fluid viscosity and density are determined based on linear interpolation +The fluid density and kinematic viscosity are determined based on linear interpolation + .. math:: :nowrap: $$ - \\begin{equation} - \nu = \frac{(1+\phi) \nu_n}{2}+\frac{(1-\phi) \nu_w}{2} \;, - \\end{equation} - $$ - -.. math:: - :nowrap: - - $$ - \\begin{equation} \rho_0 = \frac{(1+\phi) \rho_n}{2}+ \frac{(1-\phi) \rho_w}{2} \;, - \\end{equation} $$ +.. math:: + :nowrap: + + $$ + \nu = \frac{(1+\phi) \nu_n}{2}+\frac{(1-\phi) \nu_w}{2} \;, + $$ + +where + +.. math:: + :nowrap: + + $$ + \nu_w = \frac{1}{3}\Big(\tau_w - \frac{1}{2} \Big) \;, \quad + \nu_n = \frac{1}{3}\Big(\tau_n - \frac{1}{2} \Big) \;. + $$ + + These values are then used to model the momentum transport. The LBE governing momentum transport is defined based on a MRT relaxation process with additional terms to account for the interfacial stresses + .. math:: :nowrap: $$ - \\begin{equation} f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, - \\end{equation} $$ -The moments are linearly indepdendent +The moments are linearly indepdendent: + .. math:: :nowrap: $$ - \\begin{equation} m_k = \sum_{q=0}^{18} M_{qk} f_q\;. - \\end{equation} $$ The relaxation parameters are determined from the relaxation time: + .. math:: :nowrap: $$ - \\begin{eqnarray} - \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu\;, \\ + \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu\;, + $$ + +.. math:: + :nowrap: + + $$ \lambda_{4}= \lambda_{6}= \lambda_{8} = \lambda_{16} = \lambda_{17} = \lambda_{18}= \frac{8(2-s_\nu)}{8-s_\nu} \;, - \\end{eqnarray} $$ The non-zero equilibrium moments are defined as @@ -163,34 +176,60 @@ The non-zero equilibrium moments are defined as :nowrap: $$ - \\begin{eqnarray} - m_1^{eq} &=& (j_x^2+j_y^2+j_z^2) - \alpha |\textbf{C}|, \\ - m_9^{eq} &=& (2j_x^2-j_y^2-j_z^2)+ \alpha \frac{|\textbf{C}|}{2}(2n_x^2-n_y^2-n_z^2), \\ - m_{11}^{eq} &=& (j_y^2-j_z^2) + \alpha \frac{|\textbf{C}|}{2}(n_y^2-n_z^2), \\ - m_{13}^{eq} &=& j_x j_y + \alpha \frac{|\textbf{C}|}{2} n_x n_y\;, \\ - m_{14}^{eq} &=& j_y j_z + \alpha \frac{|\textbf{C}|}{2} n_y n_z\;, \\ - m_{15}^{eq} &=& j_x j_z + \alpha \frac{|\textbf{C}|}{2} n_x n_z\;, - \\end{eqnarray} + m_1^{eq} = (j_x^2+j_y^2+j_z^2) - \alpha |\textbf{C}|, \\ + $$ + +.. math:: + :nowrap: + + $$ + m_9^{eq} = (2j_x^2-j_y^2-j_z^2)+ \alpha \frac{|\textbf{C}|}{2}(2n_x^2-n_y^2-n_z^2), \\ + $$ + +.. math:: + :nowrap: + + $$ + m_{11}^{eq} = (j_y^2-j_z^2) + \alpha \frac{|\textbf{C}|}{2}(n_y^2-n_z^2), \\ + $$ + +.. math:: + :nowrap: + + $$ + m_{13}^{eq} = j_x j_y + \alpha \frac{|\textbf{C}|}{2} n_x n_y\;, \\ + $$ + +.. math:: + :nowrap: + + $$ + m_{14}^{eq} = j_y j_z + \alpha \frac{|\textbf{C}|}{2} n_y n_z\;, \\ + $$ + +.. math:: + :nowrap: + + $$ + m_{15}^{eq} = j_x j_z + \alpha \frac{|\textbf{C}|}{2} n_x n_z\;, $$ where the color gradient is determined from the phase indicator field + .. math:: :nowrap: $$ - \\begin{equation} \textbf{C}=\nabla \phi\;. - \\end{equation} $$ and the unit normal vector is + .. math:: :nowrap: $$ - \\begin{equation} \bm{n} = \frac{\textbf{C}}{|\textbf{C}|}\;. - \\end{equation} $$ **************************** From ecc31c92cbaca40475b4530971d33bc3688bc7fe Mon Sep 17 00:00:00 2001 From: James E McClure Date: Fri, 3 Sep 2021 07:09:17 -0400 Subject: [PATCH 09/40] tweak docs --- docs/source/userGuide/models/color/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/userGuide/models/color/index.rst b/docs/source/userGuide/models/color/index.rst index 382f1ff7..e996400c 100644 --- a/docs/source/userGuide/models/color/index.rst +++ b/docs/source/userGuide/models/color/index.rst @@ -118,7 +118,7 @@ The fluid density and kinematic viscosity are determined based on linear interpo :nowrap: $$ - \nu = \frac{(1+\phi) \nu_n}{2}+\frac{(1-\phi) \nu_w}{2} \;, + s_\nu = \frac{(1+\phi)}{2\tau_n} +\frac{(1-\phi)}{2\tau_w} \;, $$ where @@ -160,7 +160,7 @@ The relaxation parameters are determined from the relaxation time: :nowrap: $$ - \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu\;, + \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu \;, $$ .. math:: From e21d7fda4d87bcb3d99ed31f79e4edc0fd3a28ed Mon Sep 17 00:00:00 2001 From: James E McClure Date: Fri, 3 Sep 2021 09:06:58 -0400 Subject: [PATCH 10/40] add MRT formulation --- docs/source/userGuide/models/mrt/mrt.rst | 125 +++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/docs/source/userGuide/models/mrt/mrt.rst b/docs/source/userGuide/models/mrt/mrt.rst index 65fe57c7..b78d0987 100644 --- a/docs/source/userGuide/models/mrt/mrt.rst +++ b/docs/source/userGuide/models/mrt/mrt.rst @@ -30,6 +30,131 @@ The essential model parameters for the color model are Model Formulation **************************** +The LBE governing momentum transport is defined based on a MRT relaxation based on the D3Q19 discrete +velocity set, which determines the values :math:`\bm{\xi}_q` + +.. math:: + :nowrap: + + $$ + f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, + $$ + + +The moments are linearly indepdendent: + +.. math:: + :nowrap: + + $$ + m_k = \sum_{q=0}^{18} M_{qk} f_q\;. + $$ + + +The non-zero equilibrium moments are + +.. math:: + :nowrap: + + $$ + m_1^{eq} = 19\frac{j_x^2+j_y^2+j_z^2}{\rho} - 11\rho \;, + $$ + +.. math:: + :nowrap: + + $$ + m_2^{eq} = 3\rho - frac{11}{2} \frac{j_x^2+j_y^2+j_z^2}{\rho} \;, + $$ + +.. math:: + :nowrap: + + + $$ + m_4^{eq} = -\frac 2 3 j_x \;, + $$ + +.. math:: + :nowrap: + + $$ + m_6^{eq} = -\frac 2 3 j_y \;, + $$ + +.. math:: + :nowrap: + + $$ + m_8^{eq} = -\frac 2 3 j_z \;, + $$ + +.. math:: + :nowrap: + + $$ + m_9^{eq} = \frac{2j_x^2-j_y^2-j_z^2}{\rho}\;, + $$ + +.. math:: + :nowrap: + + $$ + m_{10}^{eq} = -\frac{2j_x^2-j_y^2-j_z^2)}{2\rho_0} \;, + $$ + +.. math:: + :nowrap: + + $$ + m_{11}^{eq} = \frac{j_y^2-j_z^2}{\rho_0} \;, + $$ + +.. math:: + :nowrap: + + $$ + m_{12}^{eq} = -\frac{j_y^2-j_z^2}{2\rho_0} \;, + $$ + + +.. math:: + :nowrap: + + $$ + m_{13}^{eq} = \frac{j_x j_y}{\rho_0} \;, + $$ + +.. math:: + :nowrap: + + $$ + m_{14}^{eq} = \frac{j_y j_z}{\rho_0} \;, + $$ + +.. math:: + :nowrap: + + $$ + m_{15}^{eq} = \frac{j_x j_z}{\rho_0} \;, + $$ + +The relaxation parameters are determined based on the relaxation time :math:`\tau` +.. math:: + :nowrap: + + $$ + \lambda_1 = \lambda_2= \lambda_9 = \lambda_{10}= \lambda_{11}= \lambda_{12}= \lambda_{13}= \lambda_{14}= \lambda_{15} = s_\nu = \frac{1}{\tau} \;, + $$ + +.. math:: + :nowrap: + + $$ + \lambda_{4}= \lambda_{6}= \lambda_{8} = \lambda_{16} = \lambda_{17} = \lambda_{18}= \frac{8(2-s_\nu)}{8-s_\nu} \;, + $$ + + **************************** Example Input File From d3a14c21ffac8a9773ebb6ac855ba7cceb6d7de6 Mon Sep 17 00:00:00 2001 From: James McClure Date: Fri, 3 Sep 2021 09:16:48 -0400 Subject: [PATCH 11/40] fix mrt formulation doc --- docs/source/userGuide/models/mrt/mrt.rst | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/source/userGuide/models/mrt/mrt.rst b/docs/source/userGuide/models/mrt/mrt.rst index b78d0987..07b6c890 100644 --- a/docs/source/userGuide/models/mrt/mrt.rst +++ b/docs/source/userGuide/models/mrt/mrt.rst @@ -40,8 +40,8 @@ velocity set, which determines the values :math:`\bm{\xi}_q` f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, $$ - -The moments are linearly indepdendent: +Where :math:`\bm{F}` an external body force and :math:`c_s^2 = 1/3` is the speed of sound for the LB model. +The moments are linearly indepdendent functions of the distributions: .. math:: :nowrap: @@ -64,7 +64,7 @@ The non-zero equilibrium moments are :nowrap: $$ - m_2^{eq} = 3\rho - frac{11}{2} \frac{j_x^2+j_y^2+j_z^2}{\rho} \;, + m_2^{eq} = 3\rho - \frac{11}{2} \frac{j_x^2+j_y^2+j_z^2}{\rho} \;, $$ .. math:: @@ -100,21 +100,21 @@ The non-zero equilibrium moments are :nowrap: $$ - m_{10}^{eq} = -\frac{2j_x^2-j_y^2-j_z^2)}{2\rho_0} \;, + m_{10}^{eq} = -\frac{2j_x^2-j_y^2-j_z^2)}{2\rho} \;, $$ .. math:: :nowrap: $$ - m_{11}^{eq} = \frac{j_y^2-j_z^2}{\rho_0} \;, + m_{11}^{eq} = \frac{j_y^2-j_z^2}{\rho} \;, $$ .. math:: :nowrap: $$ - m_{12}^{eq} = -\frac{j_y^2-j_z^2}{2\rho_0} \;, + m_{12}^{eq} = -\frac{j_y^2-j_z^2}{2\rho} \;, $$ @@ -122,24 +122,25 @@ The non-zero equilibrium moments are :nowrap: $$ - m_{13}^{eq} = \frac{j_x j_y}{\rho_0} \;, + m_{13}^{eq} = \frac{j_x j_y}{\rho} \;, $$ .. math:: :nowrap: $$ - m_{14}^{eq} = \frac{j_y j_z}{\rho_0} \;, + m_{14}^{eq} = \frac{j_y j_z}{\rho} \;, $$ .. math:: :nowrap: $$ - m_{15}^{eq} = \frac{j_x j_z}{\rho_0} \;, + m_{15}^{eq} = \frac{j_x j_z}{\rho} \;, $$ The relaxation parameters are determined based on the relaxation time :math:`\tau` + .. math:: :nowrap: From 0b183a98eddbd193e7ed691c8951fdd6726926ed Mon Sep 17 00:00:00 2001 From: James McClure Date: Sat, 4 Sep 2021 09:49:12 -0400 Subject: [PATCH 12/40] fix capillary number bug for flux bc --- models/ColorModel.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/models/ColorModel.cpp b/models/ColorModel.cpp index 484ca0bc..9e0da5f5 100644 --- a/models/ColorModel.cpp +++ b/models/ColorModel.cpp @@ -198,22 +198,12 @@ void ScaLBL_ColorModel::ReadParams(string filename){ domain_db->putScalar( "BC", BoundaryCondition ); } else if (protocol == "core flooding"){ - if (rank == 0) printf("Using core flooding protocol \n"); + if (rank == 0) printf("Using core flooding protocol \n"); if (BoundaryCondition != 4){ BoundaryCondition = 4; if (rank==0) printf("WARNING: protocol (core flooding) supports only volumetric flux boundary condition \n"); } domain_db->putScalar( "BC", BoundaryCondition ); - if (color_db->keyExists( "capillary_number" )){ - double capillary_number = color_db->getScalar( "capillary_number" ); - if (rank==0) printf(" set flux to achieve Ca=%f \n", capillary_number); - double MuB = rhoB*(tauB - 0.5)/3.0; - double IFT = 6.0*alpha; - //double CrossSectionalArea = (double) (nprocx*(Nx-2)*nprocy*(Ny-2)); - flux = Dm->Porosity()*nprocx*(Nx-2)*nprocy*(Ny-2)*IFT*capillary_number/MuB; - if (rank==0) printf(" flux=%f \n",flux); - } - color_db->putScalar( "flux", flux ); } } @@ -493,6 +483,18 @@ void ScaLBL_ColorModel::Create(){ void ScaLBL_ColorModel::Initialize(){ + /* if both capillary number and flux BC are specified */ + if (color_db->keyExists( "capillary_number" ) && BoundaryCondition == 4){ + double capillary_number = color_db->getScalar( "capillary_number" ); + if (rank==0) printf(" set flux to achieve Ca=%f \n", capillary_number); + double MuB = rhoB*(tauB - 0.5)/3.0; + double IFT = 6.0*alpha; + double CrossSectionalArea = (double) (nprocx*(Nx-2)*nprocy*(Ny-2)); + flux = Mask->Porosity()*CrossSectionalArea*(Ny-2)*IFT*capillary_number/MuB; + if (rank==0) printf(" flux=%f \n",flux); + } + color_db->putScalar( "flux", flux ); + if (rank==0) printf ("Initializing distributions \n"); ScaLBL_D3Q19_Init(fq, Np); /* From 06c01dd843bf10858d08288d1b4f6f5e6572ce41 Mon Sep 17 00:00:00 2001 From: James McClure Date: Sat, 4 Sep 2021 09:49:27 -0400 Subject: [PATCH 13/40] update docs --- docs/source/userGuide/models/color/index.rst | 4 ++-- docs/source/userGuide/models/mrt/mrt.rst | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/docs/source/userGuide/models/color/index.rst b/docs/source/userGuide/models/color/index.rst index e996400c..82a3c919 100644 --- a/docs/source/userGuide/models/color/index.rst +++ b/docs/source/userGuide/models/color/index.rst @@ -140,10 +140,10 @@ terms to account for the interfacial stresses :nowrap: $$ - f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, + f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + w_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, $$ - +Where :math:`\bm{F}` is an external body force and :math:`c_s^2 = 1/3` is the speed of sound for the LB model. The moments are linearly indepdendent: .. math:: diff --git a/docs/source/userGuide/models/mrt/mrt.rst b/docs/source/userGuide/models/mrt/mrt.rst index 07b6c890..02463480 100644 --- a/docs/source/userGuide/models/mrt/mrt.rst +++ b/docs/source/userGuide/models/mrt/mrt.rst @@ -26,6 +26,15 @@ The essential model parameters for the color model are - ``tau`` -- control the fluid viscosity -- :math:`0.7 < \tau < 1.5` +The kinematic viscosity is given by + +.. math:: + :nowrap: + + $$ + \nu = \frac{1}{3} \Big( \tau - \frac 12 \Big) + $$ + **************************** Model Formulation **************************** @@ -37,10 +46,10 @@ velocity set, which determines the values :math:`\bm{\xi}_q` :nowrap: $$ - f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + t_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, + f_q(\bm{x}_i + \bm{\xi}_q \delta t,t + \delta t) - f_q(\bm{x}_i,t) = \sum^{Q-1}_{k=0} M^{-1}_{qk} \lambda_{k} (m_k^{eq}-m_k) + w_q \bm{\xi}_q \cdot \frac{\bm{F}}{c_s^2} \;, $$ -Where :math:`\bm{F}` an external body force and :math:`c_s^2 = 1/3` is the speed of sound for the LB model. +Where :math:`\bm{F}` is an external body force and :math:`c_s^2 = 1/3` is the speed of sound for the LB model. The moments are linearly indepdendent functions of the distributions: .. math:: From 51d4fe92231937c1c2507398ad9ac4c2122b5641 Mon Sep 17 00:00:00 2001 From: James McClure Date: Sat, 4 Sep 2021 11:25:39 -0400 Subject: [PATCH 14/40] move FlowAdaptor --- analysis/FlowAdaptor.cpp | 574 +++++++++++++++++++++++++++++++++++++++ analysis/FlowAdaptor.h | 32 +++ models/ColorModel.cpp | 568 -------------------------------------- models/ColorModel.h | 18 +- 4 files changed, 607 insertions(+), 585 deletions(-) create mode 100644 analysis/FlowAdaptor.cpp create mode 100644 analysis/FlowAdaptor.h diff --git a/analysis/FlowAdaptor.cpp b/analysis/FlowAdaptor.cpp new file mode 100644 index 00000000..4d06d381 --- /dev/null +++ b/analysis/FlowAdaptor.cpp @@ -0,0 +1,574 @@ +/* Flow adaptor class for multiphase flow methods */ + +#include "analysis/FlowAdaptor.h" +#include "analysis/distance.h" +#include "analysis/morphology.h" + +FlowAdaptor::FlowAdaptor(ScaLBL_ColorModel &M){ + Nx = M.Dm->Nx; + Ny = M.Dm->Ny; + Nz = M.Dm->Nz; + timestep=-1; + timestep_previous=-1; + + phi.resize(Nx,Ny,Nz); phi.fill(0); // phase indicator field + phi_t.resize(Nx,Ny,Nz); phi_t.fill(0); // time derivative for the phase indicator field +} + +FlowAdaptor::~FlowAdaptor(){ + +} + +double FlowAdaptor::ImageInit(ScaLBL_ColorModel &M, std::string Filename){ + int rank = M.rank; + int Nx = M.Nx; int Ny = M.Ny; int Nz = M.Nz; + if (rank==0) printf("Re-initializing fluids from file: %s \n", Filename.c_str()); + M.Mask->Decomp(Filename); + for (int i=0; iid[i]; // save what was read + for (int i=0; iid[i] = M.Mask->id[i]; // save what was read + + double *PhaseLabel; + PhaseLabel = new double[Nx*Ny*Nz]; + M.AssignComponentLabels(PhaseLabel); + + double Count = 0.0; + double PoreCount = 0.0; + for (int k=1; kComm.sumReduce( Count); + PoreCount=M.Dm->Comm.sumReduce( PoreCount); + + if (rank==0) printf(" new saturation: %f (%f / %f) \n", Count / PoreCount, Count, PoreCount); + ScaLBL_CopyToDevice(M.Phi, PhaseLabel, Nx*Ny*Nz*sizeof(double)); + M.Dm->Comm.barrier(); + + ScaLBL_D3Q19_Init(M.fq, M.Np); + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); + M.Dm->Comm.barrier(); + + ScaLBL_CopyToHost(M.Averages->Phi.data(),M.Phi,Nx*Ny*Nz*sizeof(double)); + + double saturation = Count/PoreCount; + return saturation; +} + + +double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ + + double MASS_FRACTION_CHANGE = 0.0005; + if (M.db->keyExists( "FlowAdaptor" )){ + auto flow_db = M.db->getDatabase( "FlowAdaptor" ); + MASS_FRACTION_CHANGE = flow_db->getWithDefault( "mass_fraction_factor", 0.0005); + } + int Np = M.Np; + double dA, dB, phi; + double vx,vy,vz; + double vax,vay,vaz; + double vbx,vby,vbz; + double vax_global,vay_global,vaz_global; + double vbx_global,vby_global,vbz_global; + + double mass_a, mass_b, mass_a_global, mass_b_global; + + double *Aq_tmp, *Bq_tmp; + double *Vel_x, *Vel_y, *Vel_z, *Phase; + + Aq_tmp = new double [7*Np]; + Bq_tmp = new double [7*Np]; + Phase = new double [Np]; + Vel_x = new double [Np]; + Vel_y = new double [Np]; + Vel_z = new double [Np]; + + ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); + ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); + ScaLBL_CopyToHost(Vel_x, &M.Velocity[0], Np*sizeof(double)); + ScaLBL_CopyToHost(Vel_y, &M.Velocity[Np], Np*sizeof(double)); + ScaLBL_CopyToHost(Vel_z, &M.Velocity[2*Np], Np*sizeof(double)); + + int Nx = M.Nx; int Ny = M.Ny; int Nz = M.Nz; + + /* compute the total momentum */ + vax = vay = vaz = 0.0; + vbx = vby = vbz = 0.0; + mass_a = mass_b = 0.0; + double maxSpeed = 0.0; + double localMaxSpeed = 0.0; + for (int k=1; kSDs(i,j,k); + if (!(n<0) ){ + dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; + dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; + phi = (dA - dB) / (dA + dB); + Phase[n] = phi; + mass_a += dA; + mass_b += dB; + if (phi > 0.0){ + vax += Vel_x[n]; + vay += Vel_y[n]; + vaz += Vel_z[n]; + } + else { + vbx += Vel_x[n]; + vby += Vel_y[n]; + vbz += Vel_z[n]; + } + double speed = sqrt(vax*vax + vay*vay + vaz*vaz + vbx*vbx + vby*vby + vbz*vbz); + if (distance > 3.0 && speed > localMaxSpeed){ + localMaxSpeed = speed; + } + } + } + } + } + maxSpeed = M.Dm->Comm.maxReduce(localMaxSpeed); + mass_a_global = M.Dm->Comm.sumReduce(mass_a); + mass_b_global = M.Dm->Comm.sumReduce(mass_b); + vax_global = M.Dm->Comm.sumReduce(vax); + vay_global = M.Dm->Comm.sumReduce(vay); + vaz_global = M.Dm->Comm.sumReduce(vaz); + vbx_global = M.Dm->Comm.sumReduce(vbx); + vby_global = M.Dm->Comm.sumReduce(vby); + vbz_global = M.Dm->Comm.sumReduce(vbz); + + double total_momentum_A = sqrt(vax_global*vax_global+vay_global*vay_global+vaz_global*vaz_global); + double total_momentum_B = sqrt(vbx_global*vbx_global+vby_global*vby_global+vbz_global*vbz_global); + /* compute the total mass change */ + double TOTAL_MASS_CHANGE = MASS_FRACTION_CHANGE*(mass_a_global + mass_b_global); + if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_a_global ) + TOTAL_MASS_CHANGE = 0.1*mass_a_global; + if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_b_global ) + TOTAL_MASS_CHANGE = 0.1*mass_b_global; + + double LOCAL_MASS_CHANGE = 0.0; + for (int k=1; k maxSpeed) local_momentum = maxSpeed; + if (phi > 0.0){ + LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_A; + Aq_tmp[n] -= 0.3333333333333333*LOCAL_MASS_CHANGE; + Aq_tmp[n+Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + Aq_tmp[n+2*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + Aq_tmp[n+3*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + Aq_tmp[n+4*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + Aq_tmp[n+5*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + Aq_tmp[n+6*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; + //DebugMassA[n] = (-1.0)*LOCAL_MASS_CHANGE; + } + else{ + LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_B; + Bq_tmp[n] += 0.3333333333333333*LOCAL_MASS_CHANGE; + Bq_tmp[n+Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + Bq_tmp[n+2*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + Bq_tmp[n+3*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + Bq_tmp[n+4*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + Bq_tmp[n+5*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + Bq_tmp[n+6*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; + //DebugMassB[n] = LOCAL_MASS_CHANGE; + } + } + } + } + } + + if (M.rank == 0) printf("Update Fractional Flow: change mass of fluid B by %f \n",TOTAL_MASS_CHANGE/mass_b_global); + + // Need to initialize Aq, Bq, Den, Phi directly + //ScaLBL_CopyToDevice(Phi,phase.data(),7*Np*sizeof(double)); + ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); + ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); + + return(TOTAL_MASS_CHANGE); +} + +void FlowAdaptor::Flatten(ScaLBL_ColorModel &M){ + + int Np = M.Np; + double dA, dB; + + double *Aq_tmp, *Bq_tmp; + + Aq_tmp = new double [7*Np]; + Bq_tmp = new double [7*Np]; + + ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); + ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); + + for (int n=0; n < M.ScaLBL_Comm->LastExterior(); n++){ + dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; + dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; + if (dA > 1.0){ + double mass_change = dA - 1.0; + Aq_tmp[n] -= 0.333333333333333*mass_change; + Aq_tmp[n+Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; + } + if (dB > 1.0){ + double mass_change = dB - 1.0; + Bq_tmp[n] -= 0.333333333333333*mass_change; + Bq_tmp[n+Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; + } + } + for (int n=M.ScaLBL_Comm->FirstInterior(); n < M.ScaLBL_Comm->LastInterior(); n++){ + dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; + dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; + if (dA > 1.0){ + double mass_change = dA - 1.0; + Aq_tmp[n] -= 0.333333333333333*mass_change; + Aq_tmp[n+Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; + Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; + } + if (dB > 1.0){ + double mass_change = dB - 1.0; + Bq_tmp[n] -= 0.333333333333333*mass_change; + Bq_tmp[n+Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; + Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; + } + } + + ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); + ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); +} + +double FlowAdaptor::MoveInterface(ScaLBL_ColorModel &M){ + + double INTERFACE_CUTOFF = M.color_db->getWithDefault( "move_interface_cutoff", 0.1 ); + double MOVE_INTERFACE_FACTOR = M.color_db->getWithDefault( "move_interface_factor", 10.0 ); + + ScaLBL_CopyToHost( phi.data(), M.Phi, Nx*Ny*Nz* sizeof( double ) ); + /* compute the local derivative of phase indicator field */ + double beta = M.beta; + double factor = 0.5/beta; + double total_interface_displacement = 0.0; + double total_interface_sites = 0.0; + for (int n=0; nPhi(n); + double dist1 = factor*log((1.0+value1)/(1.0-value1)); + double value2 = phi(n); + double dist2 = factor*log((1.0+value2)/(1.0-value2)); + phi_t(n) = value2; + if (value1 < INTERFACE_CUTOFF && value1 > -1*INTERFACE_CUTOFF && value2 < INTERFACE_CUTOFF && value2 > -1*INTERFACE_CUTOFF ){ + /* time derivative of distance */ + double dxdt = 0.125*(dist2-dist1); + /* extrapolate to move the distance further */ + double dist3 = dist2 + MOVE_INTERFACE_FACTOR*dxdt; + /* compute the new phase interface */ + phi_t(n) = (2.f*(exp(-2.f*beta*(dist3)))/(1.f+exp(-2.f*beta*(dist3))) - 1.f); + total_interface_displacement += fabs(MOVE_INTERFACE_FACTOR*dxdt); + total_interface_sites += 1.0; + } + } + ScaLBL_CopyToDevice( M.Phi, phi_t.data(), Nx*Ny*Nz* sizeof( double ) ); + return total_interface_sites; +} + +double FlowAdaptor::ShellAggregation(ScaLBL_ColorModel &M, const double target_delta_volume){ + + const RankInfoStruct rank_info(M.rank,M.nprocx,M.nprocy,M.nprocz); + auto rank = M.rank; + auto Nx = M.Nx; auto Ny = M.Ny; auto Nz = M.Nz; + auto N = Nx*Ny*Nz; + double vF = 0.f; + double vS = 0.f; + double delta_volume; + double WallFactor = 1.0; + bool USE_CONNECTED_NWP = false; + + DoubleArray phase(Nx,Ny,Nz); + IntArray phase_label(Nx,Ny,Nz);; + DoubleArray phase_distance(Nx,Ny,Nz); + Array phase_id(Nx,Ny,Nz); + fillHalo fillDouble(M.Dm->Comm,M.Dm->rank_info,{Nx-2,Ny-2,Nz-2},{1,1,1},0,1); + + // Basic algorithm to + // 1. Copy phase field to CPU + ScaLBL_CopyToHost(phase.data(), M.Phi, N*sizeof(double)); + + double count = 0.f; + for (int k=1; k 0.f && M.Averages->SDs(i,j,k) > 0.f) count+=1.f; + } + } + } + double volume_initial = M.Dm->Comm.sumReduce( count); + double PoreVolume = M.Dm->Volume*M.Dm->Porosity(); + /*ensure target isn't an absurdly small fraction of pore volume */ + if (volume_initial < target_delta_volume*PoreVolume){ + volume_initial = target_delta_volume*PoreVolume; + } + + // 2. Identify connected components of phase field -> phase_label + + double volume_connected = 0.0; + double second_biggest = 0.0; + if (USE_CONNECTED_NWP){ + ComputeGlobalBlobIDs(Nx-2,Ny-2,Nz-2,rank_info,phase,M.Averages->SDs,vF,vS,phase_label,M.Dm->Comm); + M.Dm->Comm.barrier(); + + // only operate on component "0"ScaLBL_ColorModel &M, + count = 0.0; + + for (int k=0; kComm.sumReduce( count); + second_biggest = M.Dm->Comm.sumReduce( second_biggest); + } + else { + // use the whole NWP + for (int k=0; kSDs(i,j,k) > 0.f){ + if (phase(i,j,k) > 0.f ){ + phase_id(i,j,k) = 0; + } + else { + phase_id(i,j,k) = 1; + } + } + else { + phase_id(i,j,k) = 1; + } + } + } + } + } + + // 3. Generate a distance map to the largest object -> phase_distance + CalcDist(phase_distance,phase_id,*M.Dm); + + double temp,value; + double factor=0.5/M.beta; + for (int k=0; k 1.f) value=1.f; + if (value < -1.f) value=-1.f; + // temp -- distance based on analytical form McClure, Prins et al, Comp. Phys. Comm. + temp = -factor*log((1.0+value)/(1.0-value)); + /// use this approximation close to the object + if (fabs(value) < 0.8 && M.Averages->SDs(i,j,k) > 1.f ){ + phase_distance(i,j,k) = temp; + } + // erase the original object + phase(i,j,k) = -1.0; + } + } + } + } + + + if (rank==0) printf("Pathway volume / next largest ganglion %f \n",volume_connected/second_biggest ); + + if (rank==0) printf("MorphGrow with target volume fraction change %f \n", target_delta_volume/volume_initial); + double target_delta_volume_incremental = target_delta_volume; + if (fabs(target_delta_volume) > 0.01*volume_initial) + target_delta_volume_incremental = 0.01*volume_initial*target_delta_volume/fabs(target_delta_volume); + + delta_volume = MorphGrow(M.Averages->SDs,phase_distance,phase_id,M.Averages->Dm, target_delta_volume_incremental, WallFactor); + + for (int k=0; kSDs(i,j,k) > 0.f){ + if (d < 3.f){ + //phase(i,j,k) = -1.0; + phase(i,j,k) = (2.f*(exp(-2.f*M.beta*d))/(1.f+exp(-2.f*M.beta*d))-1.f); + } + } + } + } + } + fillDouble.fill(phase); + + count = 0.f; + for (int k=1; k 0.f && M.Averages->SDs(i,j,k) > 0.f){ + count+=1.f; + } + } + } + } + double volume_final= M.Dm->Comm.sumReduce( count); + + delta_volume = (volume_final-volume_initial); + if (rank == 0) printf("Shell Aggregation: change fluid volume fraction by %f \n", delta_volume/volume_initial); + if (rank == 0) printf(" new saturation = %f \n", volume_final/(M.Mask->Porosity()*double((Nx-2)*(Ny-2)*(Nz-2)*M.nprocs))); + + // 6. copy back to the device + //if (rank==0) printf("MorphInit: copy data back to device\n"); + ScaLBL_CopyToDevice(M.Phi,phase.data(),N*sizeof(double)); + + // 7. Re-initialize phase field and density + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); + auto BoundaryCondition = M.BoundaryCondition; + if (BoundaryCondition == 1 || BoundaryCondition == 2 || BoundaryCondition == 3 || BoundaryCondition == 4){ + if (M.Dm->kproc()==0){ + ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,0); + ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,1); + ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,2); + } + if (M.Dm->kproc() == M.nprocz-1){ + ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-1); + ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-2); + ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-3); + } + } + return delta_volume; +} + + +double FlowAdaptor::SeedPhaseField(ScaLBL_ColorModel &M, const double seed_water_in_oil){ + srand(time(NULL)); + auto rank = M.rank; + auto Np = M.Np; + double mass_loss =0.f; + double count =0.f; + double *Aq_tmp, *Bq_tmp; + + Aq_tmp = new double [7*Np]; + Bq_tmp = new double [7*Np]; + + ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); + ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); + + + for (int n=0; n < M.ScaLBL_Comm->LastExterior(); n++){ + double random_value = seed_water_in_oil*double(rand())/ RAND_MAX; + double dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; + double dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; + double phase_id = (dA - dB) / (dA + dB); + if (phase_id > 0.0){ + Aq_tmp[n] -= 0.3333333333333333*random_value; + Aq_tmp[n+Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+2*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+3*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+4*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+5*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+6*Np] -= 0.1111111111111111*random_value; + + Bq_tmp[n] += 0.3333333333333333*random_value; + Bq_tmp[n+Np] += 0.1111111111111111*random_value; + Bq_tmp[n+2*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+3*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+4*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+5*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+6*Np] += 0.1111111111111111*random_value; + } + mass_loss += random_value*seed_water_in_oil; + } + + for (int n=M.ScaLBL_Comm->FirstInterior(); n < M.ScaLBL_Comm->LastInterior(); n++){ + double random_value = seed_water_in_oil*double(rand())/ RAND_MAX; + double dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; + double dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; + double phase_id = (dA - dB) / (dA + dB); + if (phase_id > 0.0){ + Aq_tmp[n] -= 0.3333333333333333*random_value; + Aq_tmp[n+Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+2*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+3*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+4*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+5*Np] -= 0.1111111111111111*random_value; + Aq_tmp[n+6*Np] -= 0.1111111111111111*random_value; + + Bq_tmp[n] += 0.3333333333333333*random_value; + Bq_tmp[n+Np] += 0.1111111111111111*random_value; + Bq_tmp[n+2*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+3*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+4*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+5*Np] += 0.1111111111111111*random_value; + Bq_tmp[n+6*Np] += 0.1111111111111111*random_value; + } + mass_loss += random_value*seed_water_in_oil; + } + + count= M.Dm->Comm.sumReduce( count); + mass_loss= M.Dm->Comm.sumReduce( mass_loss); + if (rank == 0) printf("Remove mass %f from %f voxels \n",mass_loss,count); + + // Need to initialize Aq, Bq, Den, Phi directly + //ScaLBL_CopyToDevice(Phi,phase.data(),7*Np*sizeof(double)); + ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); + ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); + + return(mass_loss); +} \ No newline at end of file diff --git a/analysis/FlowAdaptor.h b/analysis/FlowAdaptor.h new file mode 100644 index 00000000..331c7d7a --- /dev/null +++ b/analysis/FlowAdaptor.h @@ -0,0 +1,32 @@ +/* Flow adaptor class for multiphase flow methods */ + +#ifndef ScaLBL_FlowAdaptor_INC +#define ScaLBL_FlowAdaptor_INC +#include +#include +#include +#include +#include +#include +#include + +#include "models/ColorModel.h" + +class FlowAdaptor{ +public: + FlowAdaptor(ScaLBL_ColorModel &M); + ~FlowAdaptor(); + double MoveInterface(ScaLBL_ColorModel &M); + double ImageInit(ScaLBL_ColorModel &M, std::string Filename); + double ShellAggregation(ScaLBL_ColorModel &M, const double delta_volume); + double UpdateFractionalFlow(ScaLBL_ColorModel &M); + double SeedPhaseField(ScaLBL_ColorModel &M, const double seed_water_in_oil); + void Flatten(ScaLBL_ColorModel &M); + DoubleArray phi; + DoubleArray phi_t; +private: + int Nx, Ny, Nz; + int timestep; + int timestep_previous; +}; +#endif \ No newline at end of file diff --git a/models/ColorModel.cpp b/models/ColorModel.cpp index 9e0da5f5..af4d3fd8 100644 --- a/models/ColorModel.cpp +++ b/models/ColorModel.cpp @@ -2011,571 +2011,3 @@ void ScaLBL_ColorModel::WriteDebug(){ */ } -FlowAdaptor::FlowAdaptor(ScaLBL_ColorModel &M){ - Nx = M.Dm->Nx; - Ny = M.Dm->Ny; - Nz = M.Dm->Nz; - timestep=-1; - timestep_previous=-1; - - phi.resize(Nx,Ny,Nz); phi.fill(0); // phase indicator field - phi_t.resize(Nx,Ny,Nz); phi_t.fill(0); // time derivative for the phase indicator field -} - -FlowAdaptor::~FlowAdaptor(){ - -} - -double FlowAdaptor::ImageInit(ScaLBL_ColorModel &M, std::string Filename){ - int rank = M.rank; - int Nx = M.Nx; int Ny = M.Ny; int Nz = M.Nz; - if (rank==0) printf("Re-initializing fluids from file: %s \n", Filename.c_str()); - M.Mask->Decomp(Filename); - for (int i=0; iid[i]; // save what was read - for (int i=0; iid[i] = M.Mask->id[i]; // save what was read - - double *PhaseLabel; - PhaseLabel = new double[Nx*Ny*Nz]; - M.AssignComponentLabels(PhaseLabel); - - double Count = 0.0; - double PoreCount = 0.0; - for (int k=1; kComm.sumReduce( Count); - PoreCount=M.Dm->Comm.sumReduce( PoreCount); - - if (rank==0) printf(" new saturation: %f (%f / %f) \n", Count / PoreCount, Count, PoreCount); - ScaLBL_CopyToDevice(M.Phi, PhaseLabel, Nx*Ny*Nz*sizeof(double)); - M.Dm->Comm.barrier(); - - ScaLBL_D3Q19_Init(M.fq, M.Np); - ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); - ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); - M.Dm->Comm.barrier(); - - ScaLBL_CopyToHost(M.Averages->Phi.data(),M.Phi,Nx*Ny*Nz*sizeof(double)); - - double saturation = Count/PoreCount; - return saturation; -} - - -double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ - - double MASS_FRACTION_CHANGE = 0.0005; - if (M.db->keyExists( "FlowAdaptor" )){ - auto flow_db = M.db->getDatabase( "FlowAdaptor" ); - MASS_FRACTION_CHANGE = flow_db->getWithDefault( "mass_fraction_factor", 0.0005); - } - int Np = M.Np; - double dA, dB, phi; - double vx,vy,vz; - double vax,vay,vaz; - double vbx,vby,vbz; - double vax_global,vay_global,vaz_global; - double vbx_global,vby_global,vbz_global; - - double mass_a, mass_b, mass_a_global, mass_b_global; - - double *Aq_tmp, *Bq_tmp; - double *Vel_x, *Vel_y, *Vel_z, *Phase; - - Aq_tmp = new double [7*Np]; - Bq_tmp = new double [7*Np]; - Phase = new double [Np]; - Vel_x = new double [Np]; - Vel_y = new double [Np]; - Vel_z = new double [Np]; - - ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); - ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); - ScaLBL_CopyToHost(Vel_x, &M.Velocity[0], Np*sizeof(double)); - ScaLBL_CopyToHost(Vel_y, &M.Velocity[Np], Np*sizeof(double)); - ScaLBL_CopyToHost(Vel_z, &M.Velocity[2*Np], Np*sizeof(double)); - - int Nx = M.Nx; int Ny = M.Ny; int Nz = M.Nz; - - /* compute the total momentum */ - vax = vay = vaz = 0.0; - vbx = vby = vbz = 0.0; - mass_a = mass_b = 0.0; - double maxSpeed = 0.0; - double localMaxSpeed = 0.0; - for (int k=1; kSDs(i,j,k); - if (!(n<0) ){ - dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - phi = (dA - dB) / (dA + dB); - Phase[n] = phi; - mass_a += dA; - mass_b += dB; - if (phi > 0.0){ - vax += Vel_x[n]; - vay += Vel_y[n]; - vaz += Vel_z[n]; - } - else { - vbx += Vel_x[n]; - vby += Vel_y[n]; - vbz += Vel_z[n]; - } - double speed = sqrt(vax*vax + vay*vay + vaz*vaz + vbx*vbx + vby*vby + vbz*vbz); - if (distance > 3.0 && speed > localMaxSpeed){ - localMaxSpeed = speed; - } - } - } - } - } - maxSpeed = M.Dm->Comm.maxReduce(localMaxSpeed); - mass_a_global = M.Dm->Comm.sumReduce(mass_a); - mass_b_global = M.Dm->Comm.sumReduce(mass_b); - vax_global = M.Dm->Comm.sumReduce(vax); - vay_global = M.Dm->Comm.sumReduce(vay); - vaz_global = M.Dm->Comm.sumReduce(vaz); - vbx_global = M.Dm->Comm.sumReduce(vbx); - vby_global = M.Dm->Comm.sumReduce(vby); - vbz_global = M.Dm->Comm.sumReduce(vbz); - - double total_momentum_A = sqrt(vax_global*vax_global+vay_global*vay_global+vaz_global*vaz_global); - double total_momentum_B = sqrt(vbx_global*vbx_global+vby_global*vby_global+vbz_global*vbz_global); - /* compute the total mass change */ - double TOTAL_MASS_CHANGE = MASS_FRACTION_CHANGE*(mass_a_global + mass_b_global); - if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_a_global ) - TOTAL_MASS_CHANGE = 0.1*mass_a_global; - if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_b_global ) - TOTAL_MASS_CHANGE = 0.1*mass_b_global; - - double LOCAL_MASS_CHANGE = 0.0; - for (int k=1; k maxSpeed) local_momentum = maxSpeed; - if (phi > 0.0){ - LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_A; - Aq_tmp[n] -= 0.3333333333333333*LOCAL_MASS_CHANGE; - Aq_tmp[n+Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - Aq_tmp[n+2*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - Aq_tmp[n+3*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - Aq_tmp[n+4*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - Aq_tmp[n+5*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - Aq_tmp[n+6*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; - //DebugMassA[n] = (-1.0)*LOCAL_MASS_CHANGE; - } - else{ - LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_B; - Bq_tmp[n] += 0.3333333333333333*LOCAL_MASS_CHANGE; - Bq_tmp[n+Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - Bq_tmp[n+2*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - Bq_tmp[n+3*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - Bq_tmp[n+4*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - Bq_tmp[n+5*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - Bq_tmp[n+6*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; - //DebugMassB[n] = LOCAL_MASS_CHANGE; - } - } - } - } - } - - if (M.rank == 0) printf("Update Fractional Flow: change mass of fluid B by %f \n",TOTAL_MASS_CHANGE/mass_b_global); - - // Need to initialize Aq, Bq, Den, Phi directly - //ScaLBL_CopyToDevice(Phi,phase.data(),7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); - - return(TOTAL_MASS_CHANGE); -} - -void FlowAdaptor::Flatten(ScaLBL_ColorModel &M){ - - int Np = M.Np; - double dA, dB; - - double *Aq_tmp, *Bq_tmp; - - Aq_tmp = new double [7*Np]; - Bq_tmp = new double [7*Np]; - - ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); - ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); - - for (int n=0; n < M.ScaLBL_Comm->LastExterior(); n++){ - dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - if (dA > 1.0){ - double mass_change = dA - 1.0; - Aq_tmp[n] -= 0.333333333333333*mass_change; - Aq_tmp[n+Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - if (dB > 1.0){ - double mass_change = dB - 1.0; - Bq_tmp[n] -= 0.333333333333333*mass_change; - Bq_tmp[n+Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - } - for (int n=M.ScaLBL_Comm->FirstInterior(); n < M.ScaLBL_Comm->LastInterior(); n++){ - dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - if (dA > 1.0){ - double mass_change = dA - 1.0; - Aq_tmp[n] -= 0.333333333333333*mass_change; - Aq_tmp[n+Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - if (dB > 1.0){ - double mass_change = dB - 1.0; - Bq_tmp[n] -= 0.333333333333333*mass_change; - Bq_tmp[n+Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - } - - ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); -} - -double FlowAdaptor::MoveInterface(ScaLBL_ColorModel &M){ - - double INTERFACE_CUTOFF = M.color_db->getWithDefault( "move_interface_cutoff", 0.1 ); - double MOVE_INTERFACE_FACTOR = M.color_db->getWithDefault( "move_interface_factor", 10.0 ); - - ScaLBL_CopyToHost( phi.data(), M.Phi, Nx*Ny*Nz* sizeof( double ) ); - /* compute the local derivative of phase indicator field */ - double beta = M.beta; - double factor = 0.5/beta; - double total_interface_displacement = 0.0; - double total_interface_sites = 0.0; - for (int n=0; nPhi(n); - double dist1 = factor*log((1.0+value1)/(1.0-value1)); - double value2 = phi(n); - double dist2 = factor*log((1.0+value2)/(1.0-value2)); - phi_t(n) = value2; - if (value1 < INTERFACE_CUTOFF && value1 > -1*INTERFACE_CUTOFF && value2 < INTERFACE_CUTOFF && value2 > -1*INTERFACE_CUTOFF ){ - /* time derivative of distance */ - double dxdt = 0.125*(dist2-dist1); - /* extrapolate to move the distance further */ - double dist3 = dist2 + MOVE_INTERFACE_FACTOR*dxdt; - /* compute the new phase interface */ - phi_t(n) = (2.f*(exp(-2.f*beta*(dist3)))/(1.f+exp(-2.f*beta*(dist3))) - 1.f); - total_interface_displacement += fabs(MOVE_INTERFACE_FACTOR*dxdt); - total_interface_sites += 1.0; - } - } - ScaLBL_CopyToDevice( M.Phi, phi_t.data(), Nx*Ny*Nz* sizeof( double ) ); - return total_interface_sites; -} - -double FlowAdaptor::ShellAggregation(ScaLBL_ColorModel &M, const double target_delta_volume){ - - const RankInfoStruct rank_info(M.rank,M.nprocx,M.nprocy,M.nprocz); - auto rank = M.rank; - auto Nx = M.Nx; auto Ny = M.Ny; auto Nz = M.Nz; - auto N = Nx*Ny*Nz; - double vF = 0.f; - double vS = 0.f; - double delta_volume; - double WallFactor = 1.0; - bool USE_CONNECTED_NWP = false; - - DoubleArray phase(Nx,Ny,Nz); - IntArray phase_label(Nx,Ny,Nz);; - DoubleArray phase_distance(Nx,Ny,Nz); - Array phase_id(Nx,Ny,Nz); - fillHalo fillDouble(M.Dm->Comm,M.Dm->rank_info,{Nx-2,Ny-2,Nz-2},{1,1,1},0,1); - - // Basic algorithm to - // 1. Copy phase field to CPU - ScaLBL_CopyToHost(phase.data(), M.Phi, N*sizeof(double)); - - double count = 0.f; - for (int k=1; k 0.f && M.Averages->SDs(i,j,k) > 0.f) count+=1.f; - } - } - } - double volume_initial = M.Dm->Comm.sumReduce( count); - double PoreVolume = M.Dm->Volume*M.Dm->Porosity(); - /*ensure target isn't an absurdly small fraction of pore volume */ - if (volume_initial < target_delta_volume*PoreVolume){ - volume_initial = target_delta_volume*PoreVolume; - } - - // 2. Identify connected components of phase field -> phase_label - - double volume_connected = 0.0; - double second_biggest = 0.0; - if (USE_CONNECTED_NWP){ - ComputeGlobalBlobIDs(Nx-2,Ny-2,Nz-2,rank_info,phase,M.Averages->SDs,vF,vS,phase_label,M.Dm->Comm); - M.Dm->Comm.barrier(); - - // only operate on component "0"ScaLBL_ColorModel &M, - count = 0.0; - - for (int k=0; kComm.sumReduce( count); - second_biggest = M.Dm->Comm.sumReduce( second_biggest); - } - else { - // use the whole NWP - for (int k=0; kSDs(i,j,k) > 0.f){ - if (phase(i,j,k) > 0.f ){ - phase_id(i,j,k) = 0; - } - else { - phase_id(i,j,k) = 1; - } - } - else { - phase_id(i,j,k) = 1; - } - } - } - } - } - - // 3. Generate a distance map to the largest object -> phase_distance - CalcDist(phase_distance,phase_id,*M.Dm); - - double temp,value; - double factor=0.5/M.beta; - for (int k=0; k 1.f) value=1.f; - if (value < -1.f) value=-1.f; - // temp -- distance based on analytical form McClure, Prins et al, Comp. Phys. Comm. - temp = -factor*log((1.0+value)/(1.0-value)); - /// use this approximation close to the object - if (fabs(value) < 0.8 && M.Averages->SDs(i,j,k) > 1.f ){ - phase_distance(i,j,k) = temp; - } - // erase the original object - phase(i,j,k) = -1.0; - } - } - } - } - - - if (rank==0) printf("Pathway volume / next largest ganglion %f \n",volume_connected/second_biggest ); - - if (rank==0) printf("MorphGrow with target volume fraction change %f \n", target_delta_volume/volume_initial); - double target_delta_volume_incremental = target_delta_volume; - if (fabs(target_delta_volume) > 0.01*volume_initial) - target_delta_volume_incremental = 0.01*volume_initial*target_delta_volume/fabs(target_delta_volume); - - delta_volume = MorphGrow(M.Averages->SDs,phase_distance,phase_id,M.Averages->Dm, target_delta_volume_incremental, WallFactor); - - for (int k=0; kSDs(i,j,k) > 0.f){ - if (d < 3.f){ - //phase(i,j,k) = -1.0; - phase(i,j,k) = (2.f*(exp(-2.f*M.beta*d))/(1.f+exp(-2.f*M.beta*d))-1.f); - } - } - } - } - } - fillDouble.fill(phase); - - count = 0.f; - for (int k=1; k 0.f && M.Averages->SDs(i,j,k) > 0.f){ - count+=1.f; - } - } - } - } - double volume_final= M.Dm->Comm.sumReduce( count); - - delta_volume = (volume_final-volume_initial); - if (rank == 0) printf("Shell Aggregation: change fluid volume fraction by %f \n", delta_volume/volume_initial); - if (rank == 0) printf(" new saturation = %f \n", volume_final/(M.Mask->Porosity()*double((Nx-2)*(Ny-2)*(Nz-2)*M.nprocs))); - - // 6. copy back to the device - //if (rank==0) printf("MorphInit: copy data back to device\n"); - ScaLBL_CopyToDevice(M.Phi,phase.data(),N*sizeof(double)); - - // 7. Re-initialize phase field and density - ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); - ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); - auto BoundaryCondition = M.BoundaryCondition; - if (BoundaryCondition == 1 || BoundaryCondition == 2 || BoundaryCondition == 3 || BoundaryCondition == 4){ - if (M.Dm->kproc()==0){ - ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,0); - ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,1); - ScaLBL_SetSlice_z(M.Phi,1.0,Nx,Ny,Nz,2); - } - if (M.Dm->kproc() == M.nprocz-1){ - ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-1); - ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-2); - ScaLBL_SetSlice_z(M.Phi,-1.0,Nx,Ny,Nz,Nz-3); - } - } - return delta_volume; -} - - -double FlowAdaptor::SeedPhaseField(ScaLBL_ColorModel &M, const double seed_water_in_oil){ - srand(time(NULL)); - auto rank = M.rank; - auto Np = M.Np; - double mass_loss =0.f; - double count =0.f; - double *Aq_tmp, *Bq_tmp; - - Aq_tmp = new double [7*Np]; - Bq_tmp = new double [7*Np]; - - ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); - ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); - - - for (int n=0; n < M.ScaLBL_Comm->LastExterior(); n++){ - double random_value = seed_water_in_oil*double(rand())/ RAND_MAX; - double dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - double dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - double phase_id = (dA - dB) / (dA + dB); - if (phase_id > 0.0){ - Aq_tmp[n] -= 0.3333333333333333*random_value; - Aq_tmp[n+Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+2*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+3*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+4*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+5*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+6*Np] -= 0.1111111111111111*random_value; - - Bq_tmp[n] += 0.3333333333333333*random_value; - Bq_tmp[n+Np] += 0.1111111111111111*random_value; - Bq_tmp[n+2*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+3*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+4*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+5*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+6*Np] += 0.1111111111111111*random_value; - } - mass_loss += random_value*seed_water_in_oil; - } - - for (int n=M.ScaLBL_Comm->FirstInterior(); n < M.ScaLBL_Comm->LastInterior(); n++){ - double random_value = seed_water_in_oil*double(rand())/ RAND_MAX; - double dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - double dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - double phase_id = (dA - dB) / (dA + dB); - if (phase_id > 0.0){ - Aq_tmp[n] -= 0.3333333333333333*random_value; - Aq_tmp[n+Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+2*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+3*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+4*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+5*Np] -= 0.1111111111111111*random_value; - Aq_tmp[n+6*Np] -= 0.1111111111111111*random_value; - - Bq_tmp[n] += 0.3333333333333333*random_value; - Bq_tmp[n+Np] += 0.1111111111111111*random_value; - Bq_tmp[n+2*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+3*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+4*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+5*Np] += 0.1111111111111111*random_value; - Bq_tmp[n+6*Np] += 0.1111111111111111*random_value; - } - mass_loss += random_value*seed_water_in_oil; - } - - count= M.Dm->Comm.sumReduce( count); - mass_loss= M.Dm->Comm.sumReduce( mass_loss); - if (rank == 0) printf("Remove mass %f from %f voxels \n",mass_loss,count); - - // Need to initialize Aq, Bq, Den, Phi directly - //ScaLBL_CopyToDevice(Phi,phase.data(),7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); - - return(mass_loss); -} diff --git a/models/ColorModel.h b/models/ColorModel.h index d69e3980..a3eddb29 100644 --- a/models/ColorModel.h +++ b/models/ColorModel.h @@ -10,6 +10,7 @@ Implementation of color lattice boltzmann model #include #include "common/Communication.h" +#include "analysis/FlowAdaptor.h" #include "analysis/TwoPhase.h" #include "analysis/runAnalysis.h" #include "common/MPI.h" @@ -93,22 +94,5 @@ private: double MorphOpenConnected(double target_volume_change); }; -class FlowAdaptor{ -public: - FlowAdaptor(ScaLBL_ColorModel &M); - ~FlowAdaptor(); - double MoveInterface(ScaLBL_ColorModel &M); - double ImageInit(ScaLBL_ColorModel &M, std::string Filename); - double ShellAggregation(ScaLBL_ColorModel &M, const double delta_volume); - double UpdateFractionalFlow(ScaLBL_ColorModel &M); - double SeedPhaseField(ScaLBL_ColorModel &M, const double seed_water_in_oil); - void Flatten(ScaLBL_ColorModel &M); - DoubleArray phi; - DoubleArray phi_t; -private: - int Nx, Ny, Nz; - int timestep; - int timestep_previous; -}; #endif From cc5bce461501b791cd834d8110f9b92bf099e10e Mon Sep 17 00:00:00 2001 From: James McClure Date: Tue, 7 Sep 2021 20:34:57 -0400 Subject: [PATCH 15/40] add test for flow adaptor --- tests/CMakeLists.txt | 1 + tests/TestFlowAdaptor.cpp | 241 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+) create mode 100644 tests/TestFlowAdaptor.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 320de0a6..ce9e959b 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -56,6 +56,7 @@ ADD_LBPM_TEST( TestTorus ) ADD_LBPM_TEST( TestTorusEvolve ) ADD_LBPM_TEST( TestTopo3D ) ADD_LBPM_TEST( TestFluxBC ) +ADD_LBPM_TEST( TestFlowAdaptor ) ADD_LBPM_TEST( TestMap ) #ADD_LBPM_TEST( TestMRT ) #ADD_LBPM_TEST( TestColorGrad ) diff --git a/tests/TestFlowAdaptor.cpp b/tests/TestFlowAdaptor.cpp new file mode 100644 index 00000000..5cea1ccf --- /dev/null +++ b/tests/TestFlowAdaptor.cpp @@ -0,0 +1,241 @@ +/* Test the flow adaptor class with color model */ +#include +#include +#include +#include +#include +#include +#include + +#include "common/Utilities.h" +#include "models/ColorModel.h" + +inline void InitializeBubble(ScaLBL_ColorModel &ColorModel, double BubbleRadius){ + // initialize a bubble + int i,j,k,n; + int rank = ColorModel.Dm->rank(); + int nprocx = ColorModel.Dm->nprocx(); + int nprocy = ColorModel.Dm->nprocy(); + int nprocz = ColorModel.Dm->nprocz(); + int Nx = ColorModel.Dm->Nx; + int Ny = ColorModel.Dm->Ny; + int Nz = ColorModel.Dm->Nz; + if (rank == 0) cout << "Setting up bubble..." << endl; + for (k=0;kSDs(i,j,k) = 100.f; + } + } + } + // Initialize the bubble + for (k=0;kiproc())-double((Nx-2)*nprocx)*0.5; + double jglobal= double(j+(Ny-2)*ColorModel.Dm->jproc())-double((Ny-2)*nprocy)*0.5; + double kglobal= double(k+(Nz-2)*ColorModel.Dm->kproc())-double((Nz-2)*nprocz)*0.5; + // Initialize phase position field for parallel bubble test + if ((iglobal*iglobal)+(jglobal*jglobal)+(kglobal*kglobal) < BubbleRadius*BubbleRadius){ + ColorModel.Mask->id[n] = 2; + ColorModel.Mask->id[n] = 2; + } + else{ + ColorModel.Mask->id[n]=1; + ColorModel.Mask->id[n]=1; + } + ColorModel.id[n] = ColorModel.Mask->id[n]; + ColorModel.Dm->id[n] = ColorModel.Mask->id[n]; + } + } + } + + FILE *OUTFILE; + char LocalRankFilename[40]; + sprintf(LocalRankFilename,"Bubble.%05i.raw",rank); + OUTFILE = fopen(LocalRankFilename,"wb"); + fwrite(ColorModel.id,1,Nx*Ny*Nz,OUTFILE); + fclose(OUTFILE); + // initialize the phase indicator field +} + + +int main( int argc, char **argv ) +{ + + // Initialize + Utilities::startup( argc, argv ); + + { // Limit scope so variables that contain communicators will free before MPI_Finialize + + Utilities::MPI comm( MPI_COMM_WORLD ); + int rank = comm.getRank(); + int nprocs = comm.getSize(); + Utilities::setErrorHandlers(); + + if ( rank == 0 ) { + printf( "********************************************************\n" ); + printf( "Test Flow Adaptor with Color LBM \n" ); + printf( "********************************************************\n" ); + } + + /* Populate the input database */ + auto domain_db = std::make_shared(); + auto color_db = std::make_shared(); + auto vis_db = std::make_shared(); + auto flow_db = std::make_shared(); + + domain_db->putVector( "nproc", { 1, 1, 1 } ); + domain_db->putVector( "N", { 40, 40, 40 } ); + domain_db->putVector( "n", { 40, 40, 40 } ); + domain_db->putScalar( "BC", 0 ); + + flow_db->putScalar("mass_fraction_factor",0.0001); + flow_db->putScalar("min_steady_timesteps",50); + flow_db->putScalar("max_steady_timesteps",50); + + color_db->putScalar("alpha",0.01); + + // Initialize compute device + int device = ScaLBL_SetDevice( rank ); + NULL_USE( device ); + ScaLBL_DeviceBarrier(); + comm.barrier(); + + ScaLBL_ColorModel ColorModel( rank, nprocs, comm ); + ColorModel.color_db = color_db; + ColorModel.domain_db = domain_db; + ColorModel.flow_db = flow_db; + ColorModel.vis_db = vis_db; + + + //ColorModel.ReadParams( filename ); + //ColorModel.SetDomain(); + ColorModel.ReadInput(); + + ColorModel.Create(); // creating the model will create data structure to match the pore + // structure and allocate variables + ColorModel.Initialize(); // initializing the model will set initial conditions for variables + + double MLUPS=0.0; + int timestep = 0; + bool ContinueSimulation = true; + + /* Variables for simulation protocols */ + auto PROTOCOL = ColorModel.color_db->getWithDefault( "protocol", "default" ); + /* image sequence protocol */ + int IMAGE_INDEX = 0; + int IMAGE_COUNT = 0; + std::vector ImageList; + /* flow adaptor keys to control behavior */ + int SKIP_TIMESTEPS = 0; + int MAX_STEADY_TIME = 1000000; + double ENDPOINT_THRESHOLD = 0.1; + double FRACTIONAL_FLOW_INCREMENT = 0.0; // this will skip the flow adaptor if not enabled + double SEED_WATER = 0.0; + if (ColorModel.db->keyExists( "FlowAdaptor" )){ + auto flow_db = ColorModel.db->getDatabase( "FlowAdaptor" ); + MAX_STEADY_TIME = flow_db->getWithDefault( "max_steady_timesteps", 1000000 ); + SKIP_TIMESTEPS = flow_db->getWithDefault( "skip_timesteps", 50000 ); + ENDPOINT_THRESHOLD = flow_db->getWithDefault( "endpoint_threshold", 0.1); + /* protocol specific key values */ + if (PROTOCOL == "image sequence" || PROTOCOL == "core flooding") + SKIP_TIMESTEPS = 0; + if (PROTOCOL == "fractional flow") + FRACTIONAL_FLOW_INCREMENT = flow_db->getWithDefault( "fractional_flow_increment", 0.05); + if (PROTOCOL == "seed water") + SEED_WATER = flow_db->getWithDefault( "seed_water", 0.01); + } + /* analysis keys*/ + int ANALYSIS_INTERVAL = ColorModel.timestepMax; + if (ColorModel.analysis_db->keyExists( "analysis_interval" )){ + ANALYSIS_INTERVAL = ColorModel.analysis_db->getScalar( "analysis_interval" ); + } + /* Launch the simulation */ + FlowAdaptor Adapt(ColorModel); + runAnalysis analysis(ColorModel); + while (ContinueSimulation){ + /* this will run steady points */ + if (PROTOCOL == "fractional flow" || PROTOCOL == "seed water" || PROTOCOL == "shell aggregation" || PROTOCOL == "image sequence" ) + timestep += MAX_STEADY_TIME; + else + timestep += ColorModel.timestepMax; + /* Run the simulation timesteps*/ + MLUPS = ColorModel.Run(timestep); + if (rank==0) printf("Lattice update rate (per MPI process)= %f MLUPS \n", MLUPS); + if (ColorModel.timestep >= ColorModel.timestepMax){ + ContinueSimulation = false; + } + + /* Load a new image if image sequence is specified */ + if (PROTOCOL == "image sequence"){ + IMAGE_INDEX++; + if (IMAGE_INDEX < IMAGE_COUNT){ + std::string next_image = ImageList[IMAGE_INDEX]; + if (rank==0) printf("***Loading next image in sequence (%i) ***\n",IMAGE_INDEX); + ColorModel.color_db->putScalar("image_index",IMAGE_INDEX); + Adapt.ImageInit(ColorModel, next_image); + } + else{ + if (rank==0) printf("Finished simulating image sequence \n"); + ColorModel.timestep = ColorModel.timestepMax; + ContinueSimulation = false; + } + } + /*********************************************************/ + /* update the fluid configuration with the flow adapter */ + int skip_time = 0; + timestep = ColorModel.timestep; + /* get the averaged flow measures computed internally for the last simulation point*/ + double SaturationChange = 0.0; + double volB = ColorModel.Averages->gwb.V; + double volA = ColorModel.Averages->gnb.V; + double initialSaturation = volB/(volA + volB); + double vA_x = ColorModel.Averages->gnb.Px/ColorModel.Averages->gnb.M; + double vA_y = ColorModel.Averages->gnb.Py/ColorModel.Averages->gnb.M; + double vA_z = ColorModel.Averages->gnb.Pz/ColorModel.Averages->gnb.M; + double vB_x = ColorModel.Averages->gwb.Px/ColorModel.Averages->gwb.M; + double vB_y = ColorModel.Averages->gwb.Py/ColorModel.Averages->gwb.M; + double vB_z = ColorModel.Averages->gwb.Pz/ColorModel.Averages->gwb.M; + double speedA = sqrt(vA_x*vA_x + vA_y*vA_y + vA_z*vA_z); + double speedB = sqrt(vB_x*vB_x + vB_y*vB_y + vB_z*vB_z); + /* stop simulation if previous point was sufficiently close to the endpoint*/ + if (volA*speedA < ENDPOINT_THRESHOLD*volB*speedB) ContinueSimulation = false; + if (ContinueSimulation && SKIP_TIMESTEPS > 0 ){ + while (skip_time < SKIP_TIMESTEPS && fabs(SaturationChange) < fabs(FRACTIONAL_FLOW_INCREMENT) ){ + timestep += ANALYSIS_INTERVAL; + if (PROTOCOL == "fractional flow") { + Adapt.UpdateFractionalFlow(ColorModel); + } + else if (PROTOCOL == "shell aggregation"){ + double target_volume_change = FRACTIONAL_FLOW_INCREMENT*initialSaturation - SaturationChange; + Adapt.ShellAggregation(ColorModel,target_volume_change); + } + else if (PROTOCOL == "seed water"){ + Adapt.SeedPhaseField(ColorModel,SEED_WATER); + } + /* Run some LBM timesteps to let the system relax a bit */ + MLUPS = ColorModel.Run(timestep); + /* Recompute the volume fraction now that the system has adjusted */ + double volB = ColorModel.Averages->gwb.V; + double volA = ColorModel.Averages->gnb.V; + SaturationChange = volB/(volA + volB) - initialSaturation; + skip_time += ANALYSIS_INTERVAL; + } + if (rank==0) printf(" ********************************************************************* \n"); + if (rank==0) printf(" Updated fractional flow with saturation change = %f \n", SaturationChange); + if (rank==0) printf(" Used protocol = %s \n", PROTOCOL.c_str()); + if (rank==0) printf(" ********************************************************************* \n"); + } + /*********************************************************/ + } + // **************************************************** + + + } // Limit scope so variables that contain communicators will free before MPI_Finialize + + Utilities::shutdown(); + return 0; +} \ No newline at end of file From c3a63ff036dd702b408e14d70033c315cd6134a5 Mon Sep 17 00:00:00 2001 From: James McClure Date: Tue, 7 Sep 2021 21:53:54 -0400 Subject: [PATCH 16/40] refactor fractional flow weight scheme --- analysis/FlowAdaptor.cpp | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/analysis/FlowAdaptor.cpp b/analysis/FlowAdaptor.cpp index 4d06d381..2796273f 100644 --- a/analysis/FlowAdaptor.cpp +++ b/analysis/FlowAdaptor.cpp @@ -68,10 +68,12 @@ double FlowAdaptor::ImageInit(ScaLBL_ColorModel &M, std::string Filename){ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ - double MASS_FRACTION_CHANGE = 0.0005; + double MASS_FRACTION_CHANGE = 0.01; + double FRACTIONAL_FLOW_EPSILON = 5e-6; if (M.db->keyExists( "FlowAdaptor" )){ auto flow_db = M.db->getDatabase( "FlowAdaptor" ); - MASS_FRACTION_CHANGE = flow_db->getWithDefault( "mass_fraction_factor", 0.0005); + MASS_FRACTION_CHANGE = flow_db->getWithDefault( "mass_fraction_factor", 0.01); + FRACTIONAL_FLOW_EPSILON = flow_db->getWithDefault( "fractional_flow_epsilon", 5e-6); } int Np = M.Np; double dA, dB, phi; @@ -107,11 +109,14 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ mass_a = mass_b = 0.0; double maxSpeed = 0.0; double localMaxSpeed = 0.0; + /* compute mass change based on weights */ + double sum_weights_A = 0.0; + double sum_weights_B = 0.0; for (int k=1; kSDs(i,j,k); + //double distance = M.Averages->SDs(i,j,k); if (!(n<0) ){ dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; @@ -129,8 +134,16 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ vby += Vel_y[n]; vbz += Vel_z[n]; } + double local_momentum = sqrt(vx*vx+vy*vy+vz*vz); + double local_weight = (FRACTIONAL_FLOW_EPSILON + local_momentum); + if (phi > 0.0){ + sum_weights_A += local_weight*dA; + } + else { + sum_weights_B += local_weight*dB; + } double speed = sqrt(vax*vax + vay*vay + vaz*vaz + vbx*vbx + vby*vby + vbz*vbz); - if (distance > 3.0 && speed > localMaxSpeed){ + if ( speed > localMaxSpeed){ localMaxSpeed = speed; } } @@ -146,15 +159,22 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ vbx_global = M.Dm->Comm.sumReduce(vbx); vby_global = M.Dm->Comm.sumReduce(vby); vbz_global = M.Dm->Comm.sumReduce(vbz); + double sum_weights_A_global = M.Dm->Comm.sumReduce(sum_weights_A); + double sum_weights_B_global = M.Dm->Comm.sumReduce(sum_weights_B); + sum_weights_A_global /= (FRACTIONAL_FLOW_EPSILON + maxSpeed); + sum_weights_B_global /= (FRACTIONAL_FLOW_EPSILON + maxSpeed); - double total_momentum_A = sqrt(vax_global*vax_global+vay_global*vay_global+vaz_global*vaz_global); - double total_momentum_B = sqrt(vbx_global*vbx_global+vby_global*vby_global+vbz_global*vbz_global); + //double total_momentum_A = sqrt(vax_global*vax_global+vay_global*vay_global+vaz_global*vaz_global); + //double total_momentum_B = sqrt(vbx_global*vbx_global+vby_global*vby_global+vbz_global*vbz_global); /* compute the total mass change */ double TOTAL_MASS_CHANGE = MASS_FRACTION_CHANGE*(mass_a_global + mass_b_global); if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_a_global ) TOTAL_MASS_CHANGE = 0.1*mass_a_global; if (fabs(TOTAL_MASS_CHANGE) > 0.1*mass_b_global ) TOTAL_MASS_CHANGE = 0.1*mass_b_global; + + double MASS_FACTOR_A = TOTAL_MASS_CHANGE / sum_weights_A_global; + double MASS_FACTOR_B = TOTAL_MASS_CHANGE / sum_weights_B_global; double LOCAL_MASS_CHANGE = 0.0; for (int k=1; k maxSpeed) local_momentum = maxSpeed; + //if (local_momentum > maxSpeed) local_momentum = maxSpeed; if (phi > 0.0){ - LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_A; + LOCAL_MASS_CHANGE = MASS_FACTOR_A*local_weight; Aq_tmp[n] -= 0.3333333333333333*LOCAL_MASS_CHANGE; Aq_tmp[n+Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; Aq_tmp[n+2*Np] -= 0.1111111111111111*LOCAL_MASS_CHANGE; @@ -181,7 +202,7 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ //DebugMassA[n] = (-1.0)*LOCAL_MASS_CHANGE; } else{ - LOCAL_MASS_CHANGE = TOTAL_MASS_CHANGE*local_momentum/total_momentum_B; + LOCAL_MASS_CHANGE = MASS_FACTOR_B*local_weight; Bq_tmp[n] += 0.3333333333333333*LOCAL_MASS_CHANGE; Bq_tmp[n+Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; Bq_tmp[n+2*Np] += 0.1111111111111111*LOCAL_MASS_CHANGE; From 21f91f110aa4427e3fb238d831b4eb506c4f4b2e Mon Sep 17 00:00:00 2001 From: James McClure Date: Tue, 7 Sep 2021 22:07:25 -0400 Subject: [PATCH 17/40] refactor fractional flow weight scheme --- analysis/FlowAdaptor.cpp | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/analysis/FlowAdaptor.cpp b/analysis/FlowAdaptor.cpp index 2796273f..6807c2b6 100644 --- a/analysis/FlowAdaptor.cpp +++ b/analysis/FlowAdaptor.cpp @@ -78,11 +78,6 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ int Np = M.Np; double dA, dB, phi; double vx,vy,vz; - double vax,vay,vaz; - double vbx,vby,vbz; - double vax_global,vay_global,vaz_global; - double vbx_global,vby_global,vbz_global; - double mass_a, mass_b, mass_a_global, mass_b_global; double *Aq_tmp, *Bq_tmp; @@ -103,9 +98,6 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ int Nx = M.Nx; int Ny = M.Ny; int Nz = M.Nz; - /* compute the total momentum */ - vax = vay = vaz = 0.0; - vbx = vby = vbz = 0.0; mass_a = mass_b = 0.0; double maxSpeed = 0.0; double localMaxSpeed = 0.0; @@ -124,16 +116,9 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ Phase[n] = phi; mass_a += dA; mass_b += dB; - if (phi > 0.0){ - vax += Vel_x[n]; - vay += Vel_y[n]; - vaz += Vel_z[n]; - } - else { - vbx += Vel_x[n]; - vby += Vel_y[n]; - vbz += Vel_z[n]; - } + vx = Vel_x[n]; + vy = Vel_y[n]; + vz = Vel_z[n]; double local_momentum = sqrt(vx*vx+vy*vy+vz*vz); double local_weight = (FRACTIONAL_FLOW_EPSILON + local_momentum); if (phi > 0.0){ @@ -142,9 +127,8 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ else { sum_weights_B += local_weight*dB; } - double speed = sqrt(vax*vax + vay*vay + vaz*vaz + vbx*vbx + vby*vby + vbz*vbz); - if ( speed > localMaxSpeed){ - localMaxSpeed = speed; + if ( local_momentum > localMaxSpeed){ + localMaxSpeed = local_momentum; } } } @@ -153,12 +137,6 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ maxSpeed = M.Dm->Comm.maxReduce(localMaxSpeed); mass_a_global = M.Dm->Comm.sumReduce(mass_a); mass_b_global = M.Dm->Comm.sumReduce(mass_b); - vax_global = M.Dm->Comm.sumReduce(vax); - vay_global = M.Dm->Comm.sumReduce(vay); - vaz_global = M.Dm->Comm.sumReduce(vaz); - vbx_global = M.Dm->Comm.sumReduce(vbx); - vby_global = M.Dm->Comm.sumReduce(vby); - vbz_global = M.Dm->Comm.sumReduce(vbz); double sum_weights_A_global = M.Dm->Comm.sumReduce(sum_weights_A); double sum_weights_B_global = M.Dm->Comm.sumReduce(sum_weights_B); sum_weights_A_global /= (FRACTIONAL_FLOW_EPSILON + maxSpeed); From a2ed3fdb3427beb18adadb786ad39ec7ac5a1694 Mon Sep 17 00:00:00 2001 From: James McClure Date: Tue, 7 Sep 2021 22:40:30 -0400 Subject: [PATCH 18/40] fix bug --- tests/TestFlowAdaptor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestFlowAdaptor.cpp b/tests/TestFlowAdaptor.cpp index 5cea1ccf..9a229b34 100644 --- a/tests/TestFlowAdaptor.cpp +++ b/tests/TestFlowAdaptor.cpp @@ -107,7 +107,7 @@ int main( int argc, char **argv ) ScaLBL_ColorModel ColorModel( rank, nprocs, comm ); ColorModel.color_db = color_db; ColorModel.domain_db = domain_db; - ColorModel.flow_db = flow_db; + //ColorModel.flow_db = flow_db; ColorModel.vis_db = vis_db; From 5f87f8b7668ad16f64b5891f4ba87261f00156e3 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 8 Sep 2021 13:43:25 -0400 Subject: [PATCH 19/40] add max/min Ca --- models/ColorModel.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/models/ColorModel.cpp b/models/ColorModel.cpp index af4d3fd8..5f62e58c 100644 --- a/models/ColorModel.cpp +++ b/models/ColorModel.cpp @@ -595,14 +595,18 @@ double ScaLBL_ColorModel::Run(int returntime){ auto flow_db = db->getDatabase( "FlowAdaptor" ); int MIN_STEADY_TIMESTEPS = flow_db->getWithDefault( "min_steady_timesteps", 1000000 ); int MAX_STEADY_TIMESTEPS = flow_db->getWithDefault( "max_steady_timesteps", 1000000 ); - int RESCALE_FORCE_AFTER_TIMESTEP = MAX_STEADY_TIMESTEPS*2; double capillary_number = 1.0e-5; double Ca_previous = 0.0; + double minCa = 8.0e-6; + double maxCa = 1.0; if (color_db->keyExists( "capillary_number" )){ capillary_number = color_db->getScalar( "capillary_number" ); SET_CAPILLARY_NUMBER=true; + RESCALE_FORCE_AFTER_TIMESTEP = MIN_STEADY_TIMESTEPS; + maxCa = 2.0*capillary_number; + minCa = 0.8*capillary_number; } if (color_db->keyExists( "rescale_force_after_timestep" )){ RESCALE_FORCE_AFTER_TIMESTEP = color_db->getScalar( "rescale_force_after_timestep" ); @@ -739,6 +743,12 @@ double ScaLBL_ColorModel::Run(int returntime){ isSteady = true; if (CURRENT_TIMESTEP >= MAX_STEADY_TIMESTEPS) isSteady = true; + + if (isSteady && (Ca > maxCa || Ca < minCa) ){ + isSteady = false; + RESCALE_FORCE = true; + } + if (RESCALE_FORCE == true && SET_CAPILLARY_NUMBER == true && CURRENT_TIMESTEP > RESCALE_FORCE_AFTER_TIMESTEP){ RESCALE_FORCE = false; double RESCALE_FORCE_FACTOR = capillary_number / Ca; From edfbc1a7e246d0e3688eedd7161c2a35666dc7c7 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 8 Sep 2021 16:27:08 -0400 Subject: [PATCH 20/40] fix FlowAdaptor test --- tests/TestFlowAdaptor.cpp | 69 +++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/tests/TestFlowAdaptor.cpp b/tests/TestFlowAdaptor.cpp index 9a229b34..781f81d1 100644 --- a/tests/TestFlowAdaptor.cpp +++ b/tests/TestFlowAdaptor.cpp @@ -73,6 +73,13 @@ int main( int argc, char **argv ) Utilities::MPI comm( MPI_COMM_WORLD ); int rank = comm.getRank(); int nprocs = comm.getSize(); + + // Initialize compute device + int device = ScaLBL_SetDevice( rank ); + NULL_USE( device ); + ScaLBL_DeviceBarrier(); + comm.barrier(); + Utilities::setErrorHandlers(); if ( rank == 0 ) { @@ -86,34 +93,42 @@ int main( int argc, char **argv ) auto color_db = std::make_shared(); auto vis_db = std::make_shared(); auto flow_db = std::make_shared(); + auto analysis_db = std::make_shared(); + auto db = std::make_shared(); domain_db->putVector( "nproc", { 1, 1, 1 } ); domain_db->putVector( "N", { 40, 40, 40 } ); domain_db->putVector( "n", { 40, 40, 40 } ); domain_db->putScalar( "BC", 0 ); - flow_db->putScalar("mass_fraction_factor",0.0001); - flow_db->putScalar("min_steady_timesteps",50); - flow_db->putScalar("max_steady_timesteps",50); + flow_db->putScalar("mass_fraction_factor",0.01); + flow_db->putScalar("min_steady_timesteps",400); + flow_db->putScalar("max_steady_timesteps",400); + flow_db->putScalar("skiptimesteps",100); color_db->putScalar("alpha",0.01); + color_db->putScalar("timestepMax",2000); + color_db->putVector( "ComponentLabels", { 0, -1 } ); + color_db->putVector( "ComponentAffinity", { 0.0, 0.0 } ); + + db->putDatabase("Color",color_db); + db->putDatabase("Domain",domain_db); + db->putDatabase("FlowAdaptor",flow_db); + db->putDatabase("Visualization",vis_db); + db->putDatabase("Analysis",analysis_db); - // Initialize compute device - int device = ScaLBL_SetDevice( rank ); - NULL_USE( device ); - ScaLBL_DeviceBarrier(); - comm.barrier(); - ScaLBL_ColorModel ColorModel( rank, nprocs, comm ); ColorModel.color_db = color_db; ColorModel.domain_db = domain_db; - //ColorModel.flow_db = flow_db; ColorModel.vis_db = vis_db; + ColorModel.analysis_db = analysis_db; + ColorModel.db = db; - //ColorModel.ReadParams( filename ); - //ColorModel.SetDomain(); - ColorModel.ReadInput(); + ColorModel.SetDomain(); + //ColorModel.ReadInput(); + double radius=15.5; + InitializeBubble(ColorModel,radius); ColorModel.Create(); // creating the model will create data structure to match the pore // structure and allocate variables @@ -124,7 +139,8 @@ int main( int argc, char **argv ) bool ContinueSimulation = true; /* Variables for simulation protocols */ - auto PROTOCOL = ColorModel.color_db->getWithDefault( "protocol", "default" ); + //auto PROTOCOL = ColorModel.color_db->getWithDefault( "protocol", "default" ); + std::string PROTOCOL = "fractional flow"; /* image sequence protocol */ int IMAGE_INDEX = 0; int IMAGE_COUNT = 0; @@ -132,22 +148,19 @@ int main( int argc, char **argv ) /* flow adaptor keys to control behavior */ int SKIP_TIMESTEPS = 0; int MAX_STEADY_TIME = 1000000; + double SEED_WATER = 0.01; double ENDPOINT_THRESHOLD = 0.1; double FRACTIONAL_FLOW_INCREMENT = 0.0; // this will skip the flow adaptor if not enabled - double SEED_WATER = 0.0; - if (ColorModel.db->keyExists( "FlowAdaptor" )){ - auto flow_db = ColorModel.db->getDatabase( "FlowAdaptor" ); - MAX_STEADY_TIME = flow_db->getWithDefault( "max_steady_timesteps", 1000000 ); - SKIP_TIMESTEPS = flow_db->getWithDefault( "skip_timesteps", 50000 ); - ENDPOINT_THRESHOLD = flow_db->getWithDefault( "endpoint_threshold", 0.1); - /* protocol specific key values */ - if (PROTOCOL == "image sequence" || PROTOCOL == "core flooding") - SKIP_TIMESTEPS = 0; - if (PROTOCOL == "fractional flow") - FRACTIONAL_FLOW_INCREMENT = flow_db->getWithDefault( "fractional_flow_increment", 0.05); - if (PROTOCOL == "seed water") - SEED_WATER = flow_db->getWithDefault( "seed_water", 0.01); - } + + MAX_STEADY_TIME = flow_db->getWithDefault( "max_steady_timesteps", 1000000 ); + SKIP_TIMESTEPS = flow_db->getWithDefault( "skip_timesteps", 50000 ); + ENDPOINT_THRESHOLD = flow_db->getWithDefault( "endpoint_threshold", 0.1); + /* protocol specific key values */ + if (PROTOCOL == "fractional flow") + FRACTIONAL_FLOW_INCREMENT = flow_db->getWithDefault( "fractional_flow_increment", 0.05); + else if (PROTOCOL == "seed water") + SEED_WATER = flow_db->getWithDefault( "seed_water", 0.01); + /* analysis keys*/ int ANALYSIS_INTERVAL = ColorModel.timestepMax; if (ColorModel.analysis_db->keyExists( "analysis_interval" )){ From c4030da8677f1b30dcb90c6b45e57971cd2605e9 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 8 Sep 2021 16:27:18 -0400 Subject: [PATCH 21/40] set defaults for analysis --- analysis/runAnalysis.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/analysis/runAnalysis.cpp b/analysis/runAnalysis.cpp index 86abc7a9..4c82b377 100644 --- a/analysis/runAnalysis.cpp +++ b/analysis/runAnalysis.cpp @@ -624,8 +624,8 @@ runAnalysis::runAnalysis( std::shared_ptr input_db, const RankInfoStru d_N[1] = Dm->Ny; d_N[2] = Dm->Nz; - d_restart_interval = db->getScalar( "restart_interval" ); - d_analysis_interval = db->getScalar( "analysis_interval" ); + d_restart_interval = db->getWithDefault( "restart_interval", 100000 ); + d_analysis_interval = db->getWithDefault( "analysis_interval", 1000 ); d_subphase_analysis_interval = INT_MAX; d_visualization_interval = INT_MAX; d_blobid_interval = INT_MAX; @@ -639,7 +639,7 @@ runAnalysis::runAnalysis( std::shared_ptr input_db, const RankInfoStru d_subphase_analysis_interval = db->getScalar( "subphase_analysis_interval" ); } - auto restart_file = db->getScalar( "restart_file" ); + auto restart_file = db->getWithDefault( "restart_file", "Restart"); d_restartFile = restart_file + "." + rankString; @@ -765,8 +765,8 @@ runAnalysis::runAnalysis( ScaLBL_ColorModel &ColorModel) d_N[1] = ColorModel.Dm->Ny; d_N[2] = ColorModel.Dm->Nz; - d_restart_interval = db->getScalar( "restart_interval" ); - d_analysis_interval = db->getScalar( "analysis_interval" ); + d_restart_interval = db->getWithDefault( "restart_interval", 100000 ); + d_analysis_interval = db->getWithDefault( "analysis_interval", 1000 ); d_subphase_analysis_interval = INT_MAX; d_visualization_interval = INT_MAX; d_blobid_interval = INT_MAX; @@ -780,10 +780,9 @@ runAnalysis::runAnalysis( ScaLBL_ColorModel &ColorModel) d_subphase_analysis_interval = db->getScalar( "subphase_analysis_interval" ); } - auto restart_file = db->getScalar( "restart_file" ); + auto restart_file = db->getWithDefault( "restart_file", "Restart"); d_restartFile = restart_file + "." + rankString; - - + d_rank = d_comm.getRank(); writeIDMap( ID_map_struct(), 0, id_map_filename ); // Initialize IO for silo From a6e1abc20c07c7cd28e554cecfb7ca8369fcbba1 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 8 Sep 2021 18:44:25 -0400 Subject: [PATCH 22/40] fix timestep / exit loop criterion --- models/ColorModel.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/models/ColorModel.cpp b/models/ColorModel.cpp index 5f62e58c..d43b829a 100644 --- a/models/ColorModel.cpp +++ b/models/ColorModel.cpp @@ -590,12 +590,14 @@ double ScaLBL_ColorModel::Run(int returntime){ bool Regular = false; bool RESCALE_FORCE = false; bool SET_CAPILLARY_NUMBER = false; + bool TRIGGER_FORCE_RESCALE = false; double tolerance = 0.01; auto current_db = db->cloneDatabase(); auto flow_db = db->getDatabase( "FlowAdaptor" ); int MIN_STEADY_TIMESTEPS = flow_db->getWithDefault( "min_steady_timesteps", 1000000 ); int MAX_STEADY_TIMESTEPS = flow_db->getWithDefault( "max_steady_timesteps", 1000000 ); int RESCALE_FORCE_AFTER_TIMESTEP = MAX_STEADY_TIMESTEPS*2; + int INITIAL_TIMESTEP = timestep; double capillary_number = 1.0e-5; double Ca_previous = 0.0; @@ -604,7 +606,6 @@ double ScaLBL_ColorModel::Run(int returntime){ if (color_db->keyExists( "capillary_number" )){ capillary_number = color_db->getScalar( "capillary_number" ); SET_CAPILLARY_NUMBER=true; - RESCALE_FORCE_AFTER_TIMESTEP = MIN_STEADY_TIMESTEPS; maxCa = 2.0*capillary_number; minCa = 0.8*capillary_number; } @@ -744,12 +745,23 @@ double ScaLBL_ColorModel::Run(int returntime){ if (CURRENT_TIMESTEP >= MAX_STEADY_TIMESTEPS) isSteady = true; - if (isSteady && (Ca > maxCa || Ca < minCa) ){ + if (isSteady && (Ca > maxCa || Ca < minCa) && SET_CAPILLARY_NUMBER ){ + /* re-run the point if the actual Ca is too far from the target Ca */ isSteady = false; RESCALE_FORCE = true; + t1 = std::chrono::system_clock::now(); + CURRENT_TIMESTEP = 0; + timestep = INITIAL_TIMESTEP; + TRIGGER_FORCE_RESCALE = true; + if (rank == 0) printf(" Capillary number missed target value = %f (measured value was Ca = %f) \n ",capillary_number, Ca); + } if (RESCALE_FORCE == true && SET_CAPILLARY_NUMBER == true && CURRENT_TIMESTEP > RESCALE_FORCE_AFTER_TIMESTEP){ + TRIGGER_FORCE_RESCALE = true; + } + + if (TRIGGER_FORCE_RESCALE){ RESCALE_FORCE = false; double RESCALE_FORCE_FACTOR = capillary_number / Ca; if (RESCALE_FORCE_FACTOR > 2.0) RESCALE_FORCE_FACTOR = 2.0; From ea987e90d3ec4d6ee420f1ee0c0770542e0404f4 Mon Sep 17 00:00:00 2001 From: James McClure Date: Wed, 8 Sep 2021 21:42:04 -0400 Subject: [PATCH 23/40] fix force rescale/ loop criterion --- models/ColorModel.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/models/ColorModel.cpp b/models/ColorModel.cpp index d43b829a..2f15d320 100644 --- a/models/ColorModel.cpp +++ b/models/ColorModel.cpp @@ -763,6 +763,7 @@ double ScaLBL_ColorModel::Run(int returntime){ if (TRIGGER_FORCE_RESCALE){ RESCALE_FORCE = false; + TRIGGER_FORCE_RESCALE = false; double RESCALE_FORCE_FACTOR = capillary_number / Ca; if (RESCALE_FORCE_FACTOR > 2.0) RESCALE_FORCE_FACTOR = 2.0; if (RESCALE_FORCE_FACTOR < 0.5) RESCALE_FORCE_FACTOR = 0.5; From c74b803157841dd59b670b98da5b8a29c12975ac Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Thu, 9 Sep 2021 15:48:25 +1000 Subject: [PATCH 24/40] initialize a new convergence scheme for Poisson solver --- common/ScaLBL.h | 2 + cpu/Poisson.cpp | 81 ++++++++++++++++++++++++++++++++++++++++ models/PoissonSolver.cpp | 42 +++++++++------------ models/PoissonSolver.h | 1 + 4 files changed, 102 insertions(+), 24 deletions(-) diff --git a/common/ScaLBL.h b/common/ScaLBL.h index a7e8a4e6..ee8aab17 100644 --- a/common/ScaLBL.h +++ b/common/ScaLBL.h @@ -132,6 +132,8 @@ extern "C" void ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(int *Map, double *d extern "C" void ScaLBL_D3Q7_Poisson_Init(int *Map, double *dist, double *Psi, int start, int finish, int Np); +extern "C" void ScaLBL_D3Q7_PoissonResidualError(int *neighborList, int *Map, double *ResidualError, double *Psi, double *Den_charge, double epsilon_LB,int strideY, int strideZ,int start, int finish); + //maybe deprecated //extern "C" void ScaLBL_D3Q7_Poisson_ElectricField(int *neighborList, int *Map, signed char *ID, double *Psi, double *ElectricField, int SolidBC, // int strideY, int strideZ,int start, int finish, int Np); diff --git a/cpu/Poisson.cpp b/cpu/Poisson.cpp index c84350cd..958ffb2f 100644 --- a/cpu/Poisson.cpp +++ b/cpu/Poisson.cpp @@ -235,6 +235,87 @@ extern "C" void ScaLBL_D3Q7_Poisson_Init(int *Map, double *dist, double *Psi, in } } +extern "C" void ScaLBL_D3Q7_PoissonResidualError(int *neighborList, int *Map, double *ResidualError, double *Psi, double *Den_charge, double epsilon_LB,int strideY, int strideZ,int start, int finish){ + + int n,nn,ijk; + double psi;//electric potential + double rho_e;//local charge density + // neighbors of electric potential psi + double m1,m2,m4,m6,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18; + double m0,m3,m5,m7; + double psi_Laplacian; + double residual_error; + + for (n=start; nRegularLayout(Map,Psi,Psi_host); - ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); - double count_loc=0; - double count; - double psi_avg; - double psi_loc=0.f; + ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()) + ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()) - for (int k=1; k 0){ - psi_loc += Psi_host(i,j,k); - count_loc+=1.0; - } - } - } - } - psi_avg=Dm->Comm.sumReduce( psi_loc); - count=Dm->Comm.sumReduce( count_loc); - - psi_avg /= count; - double psi_avg_mag=psi_avg; - if (psi_avg==0.0) psi_avg_mag=1.0; - error = fabs(psi_avg-psi_avg_previous)/fabs(psi_avg_mag); - psi_avg_previous = psi_avg; + vector ResidualError_host(Np); + double error_loc_max; + //calculate the maximum residual error + ScaLBL_CopyToHost(ResidualError_host,ResidualError,sizeof(double)*Np); + vector::iterator it_max = max_element(ResidualError_host[0],ResidualError_host[ScaLBL_Comm->LastExterior()]); + unsigned int idx_max1 = distance(ResidualError_host.begin(),it_max); + it_max = max_element(ResidualError_host[ScaLBL_Comm->FirstInterior()], ResidualError_host[ScaLBL_Comm->LastInterior()]); + unsigned int idx_max2 = distance(ResidualError_host.begin(),it_max); + if (ResidualError_host[idx_max1]>ResidualError_host[idx_max2]){ + error_loc_max=ResidualError_host[idx_max1]; + } + else{ + error_loc_max=ResidualError_host[idx_max2]; + } + error = Dm->Comm.maxReduce(error_loc_max); } } if(WriteLog==true){ diff --git a/models/PoissonSolver.h b/models/PoissonSolver.h index 2ffbd1a7..0a4648fc 100644 --- a/models/PoissonSolver.h +++ b/models/PoissonSolver.h @@ -85,6 +85,7 @@ public: double *Psi; double *ElectricField; double *ChargeDensityDummy;// for debugging + double *ResidualError; private: Utilities::MPI comm; From 878760ed0a3872f095f74f17b4de05a303404003 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Thu, 9 Sep 2021 08:04:11 -0400 Subject: [PATCH 25/40] fix a few bugs and pass build; to be verified --- cpu/Poisson.cpp | 2 +- models/PoissonSolver.cpp | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/cpu/Poisson.cpp b/cpu/Poisson.cpp index 958ffb2f..6b5b56e0 100644 --- a/cpu/Poisson.cpp +++ b/cpu/Poisson.cpp @@ -311,7 +311,7 @@ extern "C" void ScaLBL_D3Q7_PoissonResidualError(int *neighborList, int *Map, do nn = ijk-strideZ+strideY; // neighbor index (get convention) m18 = Psi[nn]; // get neighbor for phi - 18 - psi_Laplacian = 2.0*3.0/18.0*(m1+m2+m3+m4+m5+m6-6*phi+0.5*(m7+m8+m9+m10+m11+m12+m13+m14+m15+m16+m17+m18-12*psi));//Laplacian of electric potential + psi_Laplacian = 2.0*3.0/18.0*(m1+m2+m3+m4+m5+m6-6*psi+0.5*(m7+m8+m9+m10+m11+m12+m13+m14+m15+m16+m17+m18-12*psi));//Laplacian of electric potential residual_error = psi_Laplacian+rho_e/epsilon_LB; ResidualError[n] = residual_error; } diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index 7c798167..b092e371 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -542,7 +542,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ timestep=0; double error = 1.0; - double psi_avg_previous = 0.0; + //double psi_avg_previous = 0.0; while (timestep < timestepMax && error > tolerance) { //************************************************************************/ // *************ODD TIMESTEP*************// @@ -562,16 +562,24 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ // Check convergence of steady-state solution if (timestep%analysis_interval==0){ - ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()) - ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()) + ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()); + ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()); vector ResidualError_host(Np); double error_loc_max; //calculate the maximum residual error - ScaLBL_CopyToHost(ResidualError_host,ResidualError,sizeof(double)*Np); - vector::iterator it_max = max_element(ResidualError_host[0],ResidualError_host[ScaLBL_Comm->LastExterior()]); + ScaLBL_CopyToHost(&ResidualError_host,ResidualError,sizeof(double)*Np); + vector::iterator it_temp1,it_temp2; + it_temp1=ResidualError_host.begin(); + advance(it_temp1,ScaLBL_Comm->LastExterior()); + vector::iterator it_max = max_element(ResidualError_host.begin(),it_temp1); unsigned int idx_max1 = distance(ResidualError_host.begin(),it_max); - it_max = max_element(ResidualError_host[ScaLBL_Comm->FirstInterior()], ResidualError_host[ScaLBL_Comm->LastInterior()]); + + it_temp1=ResidualError_host.begin(); + it_temp2=ResidualError_host.begin(); + advance(it_temp1,ScaLBL_Comm->FirstInterior()); + advance(it_temp2,ScaLBL_Comm->LastInterior()); + it_max = max_element(it_temp1,it_temp2); unsigned int idx_max2 = distance(ResidualError_host.begin(),it_max); if (ResidualError_host[idx_max1]>ResidualError_host[idx_max2]){ error_loc_max=ResidualError_host[idx_max1]; From 0aefd3e456e912c29ec581ee3caa7cb73ef2f215 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Thu, 9 Sep 2021 09:32:57 -0400 Subject: [PATCH 26/40] fix more bugs but still need to verify --- models/PoissonSolver.cpp | 6 +++--- models/PoissonSolver.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index b092e371..de01c4ff 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -542,12 +542,10 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ timestep=0; double error = 1.0; - //double psi_avg_previous = 0.0; while (timestep < timestepMax && error > tolerance) { //************************************************************************/ // *************ODD TIMESTEP*************// timestep++; - SolveElectricPotentialAAodd(timestep_from_Study);//update electric potential SolvePoissonAAodd(ChargeDensity);//perform collision ScaLBL_Comm->Barrier(); comm.barrier(); @@ -564,11 +562,13 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()); ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()); + ScaLBL_Comm->Barrier(); comm.barrier(); vector ResidualError_host(Np); double error_loc_max; //calculate the maximum residual error - ScaLBL_CopyToHost(&ResidualError_host,ResidualError,sizeof(double)*Np); + ScaLBL_CopyToHost(&ResidualError_host[0],ResidualError,sizeof(double)*Np); + vector::iterator it_temp1,it_temp2; it_temp1=ResidualError_host.begin(); advance(it_temp1,ScaLBL_Comm->LastExterior()); diff --git a/models/PoissonSolver.h b/models/PoissonSolver.h index 0a4648fc..a1769389 100644 --- a/models/PoissonSolver.h +++ b/models/PoissonSolver.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "common/ScaLBL.h" #include "common/Communication.h" From 1c04f03c3c9df9788ad69273d08247a97afdb19b Mon Sep 17 00:00:00 2001 From: James McClure Date: Sun, 12 Sep 2021 09:21:19 -0400 Subject: [PATCH 27/40] flatten after modifying flow adaptor --- analysis/FlowAdaptor.cpp | 64 ++-------------------------------- tests/lbpm_color_simulator.cpp | 3 +- 2 files changed, 4 insertions(+), 63 deletions(-) diff --git a/analysis/FlowAdaptor.cpp b/analysis/FlowAdaptor.cpp index 6807c2b6..1d4568e0 100644 --- a/analysis/FlowAdaptor.cpp +++ b/analysis/FlowAdaptor.cpp @@ -207,68 +207,8 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ void FlowAdaptor::Flatten(ScaLBL_ColorModel &M){ - int Np = M.Np; - double dA, dB; - - double *Aq_tmp, *Bq_tmp; - - Aq_tmp = new double [7*Np]; - Bq_tmp = new double [7*Np]; - - ScaLBL_CopyToHost(Aq_tmp, M.Aq, 7*Np*sizeof(double)); - ScaLBL_CopyToHost(Bq_tmp, M.Bq, 7*Np*sizeof(double)); - - for (int n=0; n < M.ScaLBL_Comm->LastExterior(); n++){ - dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - if (dA > 1.0){ - double mass_change = dA - 1.0; - Aq_tmp[n] -= 0.333333333333333*mass_change; - Aq_tmp[n+Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - if (dB > 1.0){ - double mass_change = dB - 1.0; - Bq_tmp[n] -= 0.333333333333333*mass_change; - Bq_tmp[n+Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - } - for (int n=M.ScaLBL_Comm->FirstInterior(); n < M.ScaLBL_Comm->LastInterior(); n++){ - dA = Aq_tmp[n] + Aq_tmp[n+Np] + Aq_tmp[n+2*Np] + Aq_tmp[n+3*Np] + Aq_tmp[n+4*Np] + Aq_tmp[n+5*Np] + Aq_tmp[n+6*Np]; - dB = Bq_tmp[n] + Bq_tmp[n+Np] + Bq_tmp[n+2*Np] + Bq_tmp[n+3*Np] + Bq_tmp[n+4*Np] + Bq_tmp[n+5*Np] + Bq_tmp[n+6*Np]; - if (dA > 1.0){ - double mass_change = dA - 1.0; - Aq_tmp[n] -= 0.333333333333333*mass_change; - Aq_tmp[n+Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Aq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - if (dB > 1.0){ - double mass_change = dB - 1.0; - Bq_tmp[n] -= 0.333333333333333*mass_change; - Bq_tmp[n+Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+2*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+3*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+4*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+5*Np] -= 0.111111111111111*mass_change; - Bq_tmp[n+6*Np] -= 0.111111111111111*mass_change; - } - } - - ScaLBL_CopyToDevice(M.Aq, Aq_tmp, 7*Np*sizeof(double)); - ScaLBL_CopyToDevice(M.Bq, Bq_tmp, 7*Np*sizeof(double)); + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); + ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); } double FlowAdaptor::MoveInterface(ScaLBL_ColorModel &M){ diff --git a/tests/lbpm_color_simulator.cpp b/tests/lbpm_color_simulator.cpp index c2bdb801..2daead06 100644 --- a/tests/lbpm_color_simulator.cpp +++ b/tests/lbpm_color_simulator.cpp @@ -182,9 +182,10 @@ int main( int argc, char **argv ) } /*********************************************************/ } + if (rank==0) printf(" (flatten density field) \n"); + Adapt.Flatten(ColorModel); } - PROFILE_STOP( "Main" ); auto file = db->getWithDefault( "TimerFile", "lbpm_color_simulator" ); auto level = db->getWithDefault( "TimerLevel", 1 ); From 7ba74fd2fd9f2695933bd2750d18668f6cf2dc2e Mon Sep 17 00:00:00 2001 From: James McClure Date: Sun, 12 Sep 2021 14:44:28 -0400 Subject: [PATCH 28/40] flatten after modifying flow adaptor --- tests/lbpm_color_simulator.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/lbpm_color_simulator.cpp b/tests/lbpm_color_simulator.cpp index 2daead06..4988d254 100644 --- a/tests/lbpm_color_simulator.cpp +++ b/tests/lbpm_color_simulator.cpp @@ -181,9 +181,11 @@ int main( int argc, char **argv ) if (rank==0) printf(" ********************************************************************* \n"); } /*********************************************************/ + if (rank==0) printf(" (flatten density field) \n"); + if (PROTOCOL == "fractional flow") { + Adapt.Flatten(ColorModel); + } } - if (rank==0) printf(" (flatten density field) \n"); - Adapt.Flatten(ColorModel); } PROFILE_STOP( "Main" ); From 37db7f9e62855067503ea627986de57df63d0ebf Mon Sep 17 00:00:00 2001 From: James McClure Date: Sun, 12 Sep 2021 20:24:38 -0400 Subject: [PATCH 29/40] update sphinx docx --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index fa5df96e..e67f47bd 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -18,7 +18,7 @@ import sys # -- Project information ----------------------------------------------------- project = 'LBPM' -copyright = '2021, James E McClure' +copyright = '2021' author = 'James E McClure' # The full version, including alpha/beta/rc tags From 44fa670fb1637246b9770e555e254ff898a7a9c5 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 17:53:15 +1000 Subject: [PATCH 30/40] change convergence method to MSE --- models/PoissonSolver.cpp | 81 +++++++++++++++++++++++++++------------- models/PoissonSolver.h | 1 + 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index de01c4ff..a9513f25 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -558,36 +558,65 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ //************************************************************************/ // Check convergence of steady-state solution + if (timesetp==2){ + //save electric potential for convergence check + ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); + } if (timestep%analysis_interval==0){ - - ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()); - ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()); - ScaLBL_Comm->Barrier(); comm.barrier(); - vector ResidualError_host(Np); - double error_loc_max; - //calculate the maximum residual error - ScaLBL_CopyToHost(&ResidualError_host[0],ResidualError,sizeof(double)*Np); + double count_loc=0; + double count; + double MSE_loc=0.0; + //double MSE; + ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); + for (int k=1; k 0){ + MSE_loc += (Psi_host(i,j,k) - Psi_previous(i,j,k))*(Psi_host(i,j,k) - Psi_previous(i,j,k)); + count_loc+=1.0; + } + } + } + } + error=Dm->Comm.sumReduce(MSE_loc); + count=Dm->Comm.sumReduce(count_loc); + error /= count; + ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); - vector::iterator it_temp1,it_temp2; - it_temp1=ResidualError_host.begin(); - advance(it_temp1,ScaLBL_Comm->LastExterior()); - vector::iterator it_max = max_element(ResidualError_host.begin(),it_temp1); - unsigned int idx_max1 = distance(ResidualError_host.begin(),it_max); - it_temp1=ResidualError_host.begin(); - it_temp2=ResidualError_host.begin(); - advance(it_temp1,ScaLBL_Comm->FirstInterior()); - advance(it_temp2,ScaLBL_Comm->LastInterior()); - it_max = max_element(it_temp1,it_temp2); - unsigned int idx_max2 = distance(ResidualError_host.begin(),it_max); - if (ResidualError_host[idx_max1]>ResidualError_host[idx_max2]){ - error_loc_max=ResidualError_host[idx_max1]; - } - else{ - error_loc_max=ResidualError_host[idx_max2]; - } - error = Dm->Comm.maxReduce(error_loc_max); + + + + //legacy code that tried to use residual to check convergence + //ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior()); + //ScaLBL_D3Q7_PoissonResidualError(NeighborList,dvcMap,ResidualError,Psi,ChargeDensity,epsilon_LB,Nx,Nx*Ny,0, ScaLBL_Comm->LastExterior()); + //ScaLBL_Comm->Barrier(); comm.barrier(); + + //vector ResidualError_host(Np); + //double error_loc_max; + ////calculate the maximum residual error + //ScaLBL_CopyToHost(&ResidualError_host[0],ResidualError,sizeof(double)*Np); + + //vector::iterator it_temp1,it_temp2; + //it_temp1=ResidualError_host.begin(); + //advance(it_temp1,ScaLBL_Comm->LastExterior()); + //vector::iterator it_max = max_element(ResidualError_host.begin(),it_temp1); + //unsigned int idx_max1 = distance(ResidualError_host.begin(),it_max); + + //it_temp1=ResidualError_host.begin(); + //it_temp2=ResidualError_host.begin(); + //advance(it_temp1,ScaLBL_Comm->FirstInterior()); + //advance(it_temp2,ScaLBL_Comm->LastInterior()); + //it_max = max_element(it_temp1,it_temp2); + //unsigned int idx_max2 = distance(ResidualError_host.begin(),it_max); + //if (ResidualError_host[idx_max1]>ResidualError_host[idx_max2]){ + // error_loc_max=ResidualError_host[idx_max1]; + //} + //else{ + // error_loc_max=ResidualError_host[idx_max2]; + //} + //error = Dm->Comm.maxReduce(error_loc_max); } } if(WriteLog==true){ diff --git a/models/PoissonSolver.h b/models/PoissonSolver.h index a1769389..b7a46c11 100644 --- a/models/PoissonSolver.h +++ b/models/PoissonSolver.h @@ -79,6 +79,7 @@ public: IntArray Map; DoubleArray Distance; DoubleArray Psi_host; + DoubleArray Psi_previous; int *NeighborList; int *dvcMap; //signed char *dvcID; From 172f66a16906f8b72380f0c60c58ce7cdfd5cd31 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 04:45:37 -0400 Subject: [PATCH 31/40] PoissonSolver using MSE as stopping criterion should work now --- models/PoissonSolver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index a9513f25..3317aa95 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -150,6 +150,7 @@ void ScaLBL_Poisson::SetDomain(){ N = Nx*Ny*Nz; Distance.resize(Nx,Ny,Nz); Psi_host.resize(Nx,Ny,Nz); + Psi_previous.resize(Nx,Ny,Nz); for (int i=0; iid[i] = 1; // initialize this way //Averages = std::shared_ptr ( new TwoPhase(Dm) ); // TwoPhase analysis object @@ -558,7 +559,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ //************************************************************************/ // Check convergence of steady-state solution - if (timesetp==2){ + if (timestep==2){ //save electric potential for convergence check ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); } From d19e4f104789651a4bdaa0b83e5d9402d690c3d0 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 18:46:44 +1000 Subject: [PATCH 32/40] save the work;incomplete --- models/PoissonSolver.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index a9513f25..37d310f6 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -69,6 +69,8 @@ void ScaLBL_Poisson::ReadParams(string filename){ if (electric_db->keyExists( "tolerance" )){ tolerance = electric_db->getScalar( "tolerance" ); } + //'tolerance_method' can be {"sum","max"} + auto tolerance_method = electric_db->getWithDefault( "tolerance_method", "sum" ); if (electric_db->keyExists( "epsilonR" )){ epsilonR = electric_db->getScalar( "epsilonR" ); } From 65b0d12172e6473067820890886d2642095c446e Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 19:24:23 +1000 Subject: [PATCH 33/40] add MES_max as alternative method to check convergence;to be verified --- models/PoissonSolver.cpp | 61 +++++++++++++++++++++++++++------------- models/PoissonSolver.h | 1 + 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index 340efbfc..cd81a2a2 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -70,7 +70,7 @@ void ScaLBL_Poisson::ReadParams(string filename){ tolerance = electric_db->getScalar( "tolerance" ); } //'tolerance_method' can be {"sum","max"} - auto tolerance_method = electric_db->getWithDefault( "tolerance_method", "sum" ); + tolerance_method = electric_db->getWithDefault( "tolerance_method", "sum" ); if (electric_db->keyExists( "epsilonR" )){ epsilonR = electric_db->getScalar( "epsilonR" ); } @@ -566,25 +566,46 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); } if (timestep%analysis_interval==0){ - - double count_loc=0; - double count; - double MSE_loc=0.0; - //double MSE; - ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); - for (int k=1; k 0){ - MSE_loc += (Psi_host(i,j,k) - Psi_previous(i,j,k))*(Psi_host(i,j,k) - Psi_previous(i,j,k)); - count_loc+=1.0; - } - } - } - } - error=Dm->Comm.sumReduce(MSE_loc); - count=Dm->Comm.sumReduce(count_loc); - error /= count; + if (tolerance_method.compare("sum")==0){ + double count_loc=0; + double count; + double MSE_loc=0.0; + ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); + for (int k=1; k 0){ + MSE_loc += (Psi_host(i,j,k) - Psi_previous(i,j,k))*(Psi_host(i,j,k) - Psi_previous(i,j,k)); + count_loc+=1.0; + } + } + } + } + error=Dm->Comm.sumReduce(MSE_loc); + count=Dm->Comm.sumReduce(count_loc); + error /= count; + } + else if (tolerance_method.compare("max")==0){ + vectorMSE_loc; + double MSE_loc_max; + ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); + for (int k=1; k 0){ + MSE_loc.push_back((Psi_host(i,j,k) - Psi_previous(i,j,k))*(Psi_host(i,j,k) - Psi_previous(i,j,k))); + } + } + } + } + vector::iterator it_max = max_element(MSE_loc.begin(),MSE.end()); + unsigned int idx_max=distance(MSE_loc.begin();it_max); + MSE_loc_max=MSE_loc[idx_max]; + error=Dm->Comm.maxReduce(MSE_loc_max); + } + else{ + ERROR("Error: user-specified tolerance_method cannot be identified; check you input database! \n"); + } ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); diff --git a/models/PoissonSolver.h b/models/PoissonSolver.h index b7a46c11..81312cab 100644 --- a/models/PoissonSolver.h +++ b/models/PoissonSolver.h @@ -49,6 +49,7 @@ public: int BoundaryConditionSolid; double tau; double tolerance; + std::string tolerance_method; double k2_inv; double epsilon0,epsilon0_LB,epsilonR,epsilon_LB; double Vin, Vout; From 50395a14e980c28dc8cf148812ca3c24b7b47b41 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 05:38:42 -0400 Subject: [PATCH 34/40] PoissonSolver with sum or max MSE should work now after fixing dumb bugs --- models/PoissonSolver.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index cd81a2a2..6d14f671 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -598,8 +598,8 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ } } } - vector::iterator it_max = max_element(MSE_loc.begin(),MSE.end()); - unsigned int idx_max=distance(MSE_loc.begin();it_max); + vector::iterator it_max = max_element(MSE_loc.begin(),MSE_loc.end()); + unsigned int idx_max=distance(MSE_loc.begin(),it_max); MSE_loc_max=MSE_loc[idx_max]; error=Dm->Comm.maxReduce(MSE_loc_max); } From 101105c7aecf05f94ff04fe153e4e158c6cea6b5 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 06:11:22 -0400 Subject: [PATCH 35/40] print out info on what tolerance_method is used --- models/PoissonSolver.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index 6d14f671..7c2a9bec 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -124,6 +124,15 @@ void ScaLBL_Poisson::ReadParams(string filename){ if (rank==0) printf("LB-Poisson Solver: steady-state MaxTimeStep = %i; steady-state tolerance = %.3g \n", timestepMax,tolerance); if (rank==0) printf(" LB relaxation tau = %.5g \n", tau); if (rank==0) printf("***********************************************************************************\n"); + if (tolerance_method.compare("sum")==0){ + if (rank==0) printf("LB-Poisson Solver: Use averaged MSE to check solution convergence.\n"); + } + else if (tolerance_method.compare("max")==0){ + if (rank==0) printf("LB-Poisson Solver: Use maximum MSE to check solution convergence.\n"); + } + else{ + if (rank==0) printf("LB-Poisson Solver: tolerance_method=%s cannot be identified!\n",tolerance_method.c_str()); + } switch (BoundaryConditionSolid){ case 1: From fa2c325f5a82c750b490b88f10778ca52ba38e6f Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 08:00:32 -0400 Subject: [PATCH 36/40] comment out PoissonSolverResidual so it can be complined with GPU --- common/ScaLBL.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/ScaLBL.h b/common/ScaLBL.h index ee8aab17..07fb72bf 100644 --- a/common/ScaLBL.h +++ b/common/ScaLBL.h @@ -132,7 +132,7 @@ extern "C" void ScaLBL_D3Q7_AAeven_Poisson_ElectricPotential(int *Map, double *d extern "C" void ScaLBL_D3Q7_Poisson_Init(int *Map, double *dist, double *Psi, int start, int finish, int Np); -extern "C" void ScaLBL_D3Q7_PoissonResidualError(int *neighborList, int *Map, double *ResidualError, double *Psi, double *Den_charge, double epsilon_LB,int strideY, int strideZ,int start, int finish); +//extern "C" void ScaLBL_D3Q7_PoissonResidualError(int *neighborList, int *Map, double *ResidualError, double *Psi, double *Den_charge, double epsilon_LB,int strideY, int strideZ,int start, int finish); //maybe deprecated //extern "C" void ScaLBL_D3Q7_Poisson_ElectricField(int *neighborList, int *Map, signed char *ID, double *Psi, double *ElectricField, int SolidBC, From 2357cd9dfa175d003b44f8d0036c75be3fbb2698 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 13 Sep 2021 09:20:52 -0400 Subject: [PATCH 37/40] update options for tolerance_method --- models/PoissonSolver.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/models/PoissonSolver.cpp b/models/PoissonSolver.cpp index 7c2a9bec..37ee1e18 100644 --- a/models/PoissonSolver.cpp +++ b/models/PoissonSolver.cpp @@ -69,8 +69,8 @@ void ScaLBL_Poisson::ReadParams(string filename){ if (electric_db->keyExists( "tolerance" )){ tolerance = electric_db->getScalar( "tolerance" ); } - //'tolerance_method' can be {"sum","max"} - tolerance_method = electric_db->getWithDefault( "tolerance_method", "sum" ); + //'tolerance_method' can be {"MSE","MSE_max"} + tolerance_method = electric_db->getWithDefault( "tolerance_method", "MSE" ); if (electric_db->keyExists( "epsilonR" )){ epsilonR = electric_db->getScalar( "epsilonR" ); } @@ -124,10 +124,10 @@ void ScaLBL_Poisson::ReadParams(string filename){ if (rank==0) printf("LB-Poisson Solver: steady-state MaxTimeStep = %i; steady-state tolerance = %.3g \n", timestepMax,tolerance); if (rank==0) printf(" LB relaxation tau = %.5g \n", tau); if (rank==0) printf("***********************************************************************************\n"); - if (tolerance_method.compare("sum")==0){ + if (tolerance_method.compare("MSE")==0){ if (rank==0) printf("LB-Poisson Solver: Use averaged MSE to check solution convergence.\n"); } - else if (tolerance_method.compare("max")==0){ + else if (tolerance_method.compare("MSE_max")==0){ if (rank==0) printf("LB-Poisson Solver: Use maximum MSE to check solution convergence.\n"); } else{ @@ -575,7 +575,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ ScaLBL_CopyToHost(Psi_previous.data(),Psi,sizeof(double)*Nx*Ny*Nz); } if (timestep%analysis_interval==0){ - if (tolerance_method.compare("sum")==0){ + if (tolerance_method.compare("MSE")==0){ double count_loc=0; double count; double MSE_loc=0.0; @@ -594,7 +594,7 @@ void ScaLBL_Poisson::Run(double *ChargeDensity, int timestep_from_Study){ count=Dm->Comm.sumReduce(count_loc); error /= count; } - else if (tolerance_method.compare("max")==0){ + else if (tolerance_method.compare("MSE_max")==0){ vectorMSE_loc; double MSE_loc_max; ScaLBL_CopyToHost(Psi_host.data(),Psi,sizeof(double)*Nx*Ny*Nz); From 7d5e8f96c13dcf421bee806f0744fc41bdf6be54 Mon Sep 17 00:00:00 2001 From: James McClure Date: Mon, 13 Sep 2021 10:42:04 -0400 Subject: [PATCH 38/40] flatten momentum LBE in flow adaptor --- analysis/FlowAdaptor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/analysis/FlowAdaptor.cpp b/analysis/FlowAdaptor.cpp index 1d4568e0..17821e2b 100644 --- a/analysis/FlowAdaptor.cpp +++ b/analysis/FlowAdaptor.cpp @@ -207,6 +207,7 @@ double FlowAdaptor::UpdateFractionalFlow(ScaLBL_ColorModel &M){ void FlowAdaptor::Flatten(ScaLBL_ColorModel &M){ + ScaLBL_D3Q19_Init(M.fq, M.Np); ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, 0, M.ScaLBL_Comm->LastExterior(), M.Np); ScaLBL_PhaseField_Init(M.dvcMap, M.Phi, M.Den, M.Aq, M.Bq, M.ScaLBL_Comm->FirstInterior(), M.ScaLBL_Comm->LastInterior(), M.Np); } From 88dda8d914cdc1ef65b66416ec218d29523edb94 Mon Sep 17 00:00:00 2001 From: Mark Berrill Date: Mon, 13 Sep 2021 11:51:21 -0400 Subject: [PATCH 39/40] Cleaning up doxygen warnings --- CMakeLists.txt | 2 +- IO/Reader.h | 2 +- IO/Xdmf.h | 1 + IO/netcdf.h | 6 ++++++ IO/silo.h | 4 +--- analysis/analysis.h | 26 +++++++++++++++----------- analysis/distance.h | 2 ++ analysis/filters.h | 3 +++ analysis/imfilter.h | 3 ++- common/Communication.h | 1 + common/MPI.h | 2 +- common/Utilities.h | 1 + doxygen/Doxyfile.in | 33 ++------------------------------- doxygen/DoxygenMainpage.h | 2 -- threadpool/atomic_helpers.h | 1 - 15 files changed, 37 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9b7e66a..17e127bc 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,7 +90,7 @@ CHECK_ENABLE_FLAG( USE_DOXYGEN 1 ) CHECK_ENABLE_FLAG( USE_LATEX 1 ) FILE( MAKE_DIRECTORY "${${PROJ}_INSTALL_DIR}/doc" ) IF ( USE_DOXYGEN ) - SET( DOXYFILE_LATEX YES ) + SET( DOXYFILE_LATEX NO ) SET( DOXYFILE_IN "${${PROJ}_SOURCE_DIR}/doxygen/Doxyfile.in" ) SET( DOXY_HEADER_FILE "${${PROJ}_SOURCE_DIR}/doxygen/html/header.html" ) SET( DOXY_FOOTER_FILE "${${PROJ}_SOURCE_DIR}/doxygen/html/footer.html" ) diff --git a/IO/Reader.h b/IO/Reader.h index 6542a2ea..9dfc834b 100644 --- a/IO/Reader.h +++ b/IO/Reader.h @@ -87,7 +87,7 @@ std::shared_ptr getVariable( const std::string &path, const std::s * @brief Reformat the variable to match the mesh * @details This function modifies the dimensions of the array to match the mesh * @param[in] mesh The underlying mesh - * @param[in/out] variable The variable name to read + * @param[in,out] var The variable name to read */ void reformatVariable( const IO::Mesh &mesh, IO::Variable &var ); diff --git a/IO/Xdmf.h b/IO/Xdmf.h index c7d39801..ff9097bc 100644 --- a/IO/Xdmf.h +++ b/IO/Xdmf.h @@ -105,6 +105,7 @@ public: * @param[in] type The element type * @param[in] NumElements The number of elements * @param[in] dofMap The connectivity information (type x NumElements) + * @param[in] NumNodes The number of nodes * @param[in] x The x coordinates or the xy/xyz coordinates * @param[in] y The y coordinates (may be null) * @param[in] z The z coordinates (may be null) diff --git a/IO/netcdf.h b/IO/netcdf.h index 5fcc5d82..80c7d18a 100644 --- a/IO/netcdf.h +++ b/IO/netcdf.h @@ -123,6 +123,8 @@ Array getAtt( int fid, const std::string &att ); * @brief Write the dimensions * @details This function writes the grid dimensions to netcdf. * @param fid Handle to the open file + * @param names + * @param dims */ std::vector defDim( int fid, const std::vector &names, const std::vector &dims ); @@ -132,6 +134,10 @@ std::vector defDim( * @brief Write a variable * @details This function writes a variable to netcdf. * @param fid Handle to the open file + * @param var Variable to read + * @param dimids + * @param data + * @param rank_info */ template void write( int fid, const std::string &var, const std::vector &dimids, diff --git a/IO/silo.h b/IO/silo.h index a3edfeb7..aef994df 100644 --- a/IO/silo.h +++ b/IO/silo.h @@ -49,7 +49,7 @@ void close( DBfile *fid ); * @param[in] fid Handle to the open file * @param[in] name Name of variable */ -DataType varDataType( DBfile *dbfile, const std::string &name ); +DataType varDataType( DBfile *fid, const std::string &name ); /*! @@ -250,8 +250,6 @@ void writeMultiMesh( DBfile *fid, const std::string &meshname, * @param[in] varname Mesh name * @param[in] subVarNames Names of the sub meshes in the form "filename:meshname" * @param[in] subVarTypes Type of each submesh - * @param[in] ndim Dimension of variable (used to determine suffix) - * @param[in] nvar Number of subvariables (used to determine suffix) */ void writeMultiVar( DBfile *fid, const std::string &varname, const std::vector &subVarNames, const std::vector &subVarTypes ); diff --git a/analysis/analysis.h b/analysis/analysis.h index ec377995..1dc2a0c1 100644 --- a/analysis/analysis.h +++ b/analysis/analysis.h @@ -22,8 +22,8 @@ typedef Array BlobIDArray; * @param[in] SignDist SignDist * @param[in] vF vF * @param[in] vS vS - * @param[in] S S * @param[out] LocalBlobID The ids of the blobs + * @param[in] periodic Optional value * @return Returns the number of blobs */ int ComputeLocalBlobIDs( const DoubleArray& Phase, const DoubleArray& SignDist, @@ -48,12 +48,13 @@ int ComputeLocalPhaseComponent( const IntArray &PhaseID, int &VALUE, IntArray &C * @param[in] nx Number of elements in the x-direction * @param[in] ny Number of elements in the y-direction * @param[in] nz Number of elements in the z-direction + * @param[in] rank_info MPI communication info * @param[in] Phase Phase * @param[in] SignDist SignDist * @param[in] vF vF * @param[in] vS vS - * @param[in] S S - * @param[out] LocalBlobID The ids of the blobs + * @param[out] GlobalBlobID The ids of the blobs + * @param[in] comm MPI communicator * @return Returns the number of blobs */ int ComputeGlobalBlobIDs( int nx, int ny, int nz, const RankInfoStruct& rank_info, @@ -68,10 +69,11 @@ int ComputeGlobalBlobIDs( int nx, int ny, int nz, const RankInfoStruct& rank_inf * @param[in] nx Number of elements in the x-direction * @param[in] ny Number of elements in the y-direction * @param[in] nz Number of elements in the z-direction - * @param[in] rank_in MPI communication info + * @param[in] rank_info MPI communication info * @param[in] PhaseID Array that identifies the phases * @param[in] VALUE Identifier for the phase to decompose * @param[out] GlobalBlobID The ids of the blobs for the phase + * @param[in] comm The communicator to use * @return Return the number of components in the specified phase */ int ComputeGlobalPhaseComponent( int nx, int ny, int nz, const RankInfoStruct& rank_info, @@ -82,10 +84,8 @@ int ComputeGlobalPhaseComponent( int nx, int ny, int nz, const RankInfoStruct& r * @brief Reorder the blobs * @details Reorder the blobs based on the number of cells they contain * largest first. - * @param[in] nx Number of elements in the x-direction - * @param[in] ny Number of elements in the y-direction - * @param[in] nz Number of elements in the z-direction - * @param[in/out] ID The ids of the blobs + * @param[in,out] ID The ids of the blobs + * @param[in] comm MPI communicator */ void ReorderBlobIDs( BlobIDArray& ID, const Utilities::MPI& comm ); @@ -117,8 +117,12 @@ struct ID_map_struct { * @details This functions computes the map of blob ids between iterations * @return Returns the map of the blob ids. Each final blob may have no source * ids, one parent, or multiple parents. Each src id may be a parent for multiple blobs. + * @param[in] nx Number of elements in the x-direction + * @param[in] ny Number of elements in the y-direction + * @param[in] nz Number of elements in the z-direction * @param[in] ID1 The blob ids at the first timestep * @param[in] ID2 The blob ids at the second timestep + * @param[in] comm The communicator to use */ ID_map_struct computeIDMap( int nx, int ny, int nz, const BlobIDArray& ID1, const BlobIDArray& ID2, const Utilities::MPI& comm ); @@ -127,7 +131,7 @@ ID_map_struct computeIDMap( int nx, int ny, int nz, const BlobIDArray& ID1, cons * @brief Compute the new global ids based on the map * @details This functions computes the time-consistent global ids for the * current global id index - * @param[in/out] map The timestep mapping for the ids + * @param[in,out] map The timestep mapping for the ids * @param[in] id_max The globally largest id used previously * @param[out] new_ids The newly renumbered blob ids (0:ids.max()) */ @@ -139,9 +143,9 @@ void getNewIDs( ID_map_struct& map, BlobIDType& id_max, std::vector& * @details This functions computes the map of blob ids between iterations. * Note: we also update the map to reflect the new ids * @param[out] new_ids The newly renumbered blob ids (0:ids.max()) - * @param[in/out] IDs The blob ids to renumber + * @param[in,out] IDs The blob ids to renumber */ -void renumberIDs( const std::vector& new_id_list, BlobIDArray& IDs ); +void renumberIDs( const std::vector& new_ids, BlobIDArray& IDs ); /*! diff --git a/analysis/distance.h b/analysis/distance.h index b3fc870e..99ac1cd4 100644 --- a/analysis/distance.h +++ b/analysis/distance.h @@ -24,6 +24,7 @@ inline bool operator<(const Vec& l, const Vec& r){ return l.x*l.x+l.y*l.y+l.z*l. * @param[in] ID Segmentation id * @param[in] Dm Domain information * @param[in] periodic Directions that are periodic + * @param[in] dx Cell size */ template void CalcDist( Array &Distance, const Array &ID, const Domain &Dm, @@ -36,6 +37,7 @@ void CalcDist( Array &Distance, const Array &ID, const Domain &Dm, * @param[in] ID Domain id * @param[in] Dm Domain information * @param[in] periodic Directions that are periodic + * @param[in] dx Cell size */ void CalcVecDist( Array &Distance, const Array &ID, const Domain &Dm, const std::array& periodic = {true,true,true}, const std::array& dx = {1,1,1} ); diff --git a/analysis/filters.h b/analysis/filters.h index 404fb265..65f52e32 100644 --- a/analysis/filters.h +++ b/analysis/filters.h @@ -25,7 +25,10 @@ void Med3D( const Array &Input, Array &Output ); * @details This routine performs a non-linear local means filter * @param[in] Input Input image * @param[in] Mean Mean value + * @param[in] Distance Distance * @param[out] Output Output image + * @param[in] d + * @param[in] h */ int NLM3D( const Array &Input, Array &Mean, const Array &Distance, Array &Output, const int d, const float h); diff --git a/analysis/imfilter.h b/analysis/imfilter.h index b1c4040a..1b998461 100644 --- a/analysis/imfilter.h +++ b/analysis/imfilter.h @@ -89,7 +89,7 @@ Array imfilter_separable( const Array& A, const std::vector imfilter_separable( const Array& A, const std::vector& Nh * This version works with separable filters and is more efficient than a single filter. * @param[in] A The input array (Nx,Ny,Nz) * @param[in] H The filter [2*Nhx+1,2*Nhy+1,...] + * @param[in] Nh The filter size * @param[in] boundary The boundary conditions to apply (ndim): * fixed - Input array values outside the bounds of the array are * implicitly assumed to have the value X diff --git a/common/Communication.h b/common/Communication.h index 5baaa962..f14cc8a1 100644 --- a/common/Communication.h +++ b/common/Communication.h @@ -51,6 +51,7 @@ class fillHalo public: /*! * @brief Default constructor + * @param[in] comm Communicator to use * @param[in] info Rank and neighbor rank info * @param[in] n Number of local cells * @param[in] ng Number of ghost cells diff --git a/common/MPI.h b/common/MPI.h index ef2d9584..6e05135d 100644 --- a/common/MPI.h +++ b/common/MPI.h @@ -821,7 +821,7 @@ public: // Member functions * @return Output array for allGather */ template - std::vector allGather( const std::vector &x_in ) const; + std::vector allGather( const std::vector &x ) const; /*! diff --git a/common/Utilities.h b/common/Utilities.h index 8dcd8c8e..9389d538 100644 --- a/common/Utilities.h +++ b/common/Utilities.h @@ -30,6 +30,7 @@ using StackTrace::Utilities::sleep_s; * \details This routine will peform the default startup sequence * \param argc argc from main * \param argv argv from main + * \param multiple Intialize mpi with MPI_THREAD_MULTIPLE support? */ void startup( int argc, char **argv, bool multiple=true ); diff --git a/doxygen/Doxyfile.in b/doxygen/Doxyfile.in index 8070b0e7..b654532f 100755 --- a/doxygen/Doxyfile.in +++ b/doxygen/Doxyfile.in @@ -379,12 +379,6 @@ MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. @@ -467,7 +461,7 @@ INPUT_ENCODING = UTF-8 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl -FILE_PATTERNS = *.h *.hh *.cu +FILE_PATTERNS = *.h *.hh # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. @@ -728,12 +722,6 @@ HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = YES -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports @@ -850,7 +838,7 @@ TREEVIEW_WIDTH = 250 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be @@ -1005,18 +993,6 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that @@ -1174,11 +1150,6 @@ ALLEXTERNALS = NO EXTERNAL_GROUPS = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- diff --git a/doxygen/DoxygenMainpage.h b/doxygen/DoxygenMainpage.h index d3dae521..0d42f215 100644 --- a/doxygen/DoxygenMainpage.h +++ b/doxygen/DoxygenMainpage.h @@ -4,8 +4,6 @@ * * - \ref IO "IO routines" * - \ref Utilities "Utility routines" - * - \ref silo "Access to silo routines" - * - \ref netcdf "Access to netcdf routines" * * \author James McClure */ diff --git a/threadpool/atomic_helpers.h b/threadpool/atomic_helpers.h index 32b67200..6d36312e 100644 --- a/threadpool/atomic_helpers.h +++ b/threadpool/atomic_helpers.h @@ -222,7 +222,6 @@ inline int32_atomic atomic_fetch_and_or( int32_atomic volatile *v, int32_atomic * \brief Fetch the current value and "ou" with given value * \details Perform *v = (*v) | x, returning the previous value * \return Returns the previous value before the "and" operation - * \param[in] v The pointer to the value to check and swap * \param[in] v The pointer to the value to check and or * \param[in] x The value to or */ From c3300baf1e7a8872685c4fffc461036969a78549 Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Tue, 14 Sep 2021 10:53:03 +1000 Subject: [PATCH 40/40] set up reading user-specified multi-species ion concentration; to be verified --- models/IonModel.cpp | 28 ++++++++++++++++------------ models/IonModel.h | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/models/IonModel.cpp b/models/IonModel.cpp index 7db8745b..b14279a3 100644 --- a/models/IonModel.cpp +++ b/models/IonModel.cpp @@ -627,13 +627,13 @@ void ScaLBL_IonModel::AssignSolidBoundary(double *ion_solid) } } -void ScaLBL_IonModel::AssignIonConcentration_FromFile(double *Ci,const vector &File_ion) +void ScaLBL_IonModel::AssignIonConcentration_FromFile(double *Ci,const vector &File_ion, int ic) { double *Ci_host; Ci_host = new double[N]; double VALUE=0.f; - Mask->ReadFromFile(File_ion[0],File_ion[1],Ci_host); + Mask->ReadFromFile(File_ion[2*ic],File_ion[2*ic+1],Ci_host); for (int k=0;kkeyExists("IonConcentrationFile")){ - //TODO: Need to figure out how to deal with multi-species concentration initialization //NOTE: "IonConcentrationFile" is a vector, including "file_name, datatype" auto File_ion = ion_db->getVector( "IonConcentrationFile" ); - double *Ci_host; - Ci_host = new double[number_ion_species*Np]; - for (size_t ic=0; ic db0); void AssignSolidBoundary(double *ion_solid); - void AssignIonConcentration_FromFile(double *Ci,const vector &File_ion); + void AssignIonConcentration_FromFile(double *Ci,const vector &File_ion,int ic); void IonConcentration_LB_to_Phys(DoubleArray &Den_reg); }; #endif