diff --git a/examples/global-lunar-bombardment/driver.py b/examples/global-lunar-bombardment/driver.py new file mode 100644 index 00000000..50392285 --- /dev/null +++ b/examples/global-lunar-bombardment/driver.py @@ -0,0 +1,3 @@ +import ctem +sim = ctem.Simulation() +sim.run() \ No newline at end of file diff --git a/examples/quasimc-global/CTEM b/examples/quasimc-global/CTEM new file mode 120000 index 00000000..604970bd --- /dev/null +++ b/examples/quasimc-global/CTEM @@ -0,0 +1 @@ +../../build/src/CTEM \ No newline at end of file diff --git a/examples/quasimc-global/FassettCounts.txt b/examples/quasimc-global/FassettCounts.txt new file mode 100755 index 00000000..44ce2d5c --- /dev/null +++ b/examples/quasimc-global/FassettCounts.txt @@ -0,0 +1,1859 @@ +0.262536589 +0.176770321 +0.175995859 +0.156565826 +0.130153339 +0.126776836 +0.126553629 +0.118358564 +0.116568588 +0.106986374 +0.105429213 +0.098078171 +0.092612749 +0.090501684 +0.09047876 +0.08781776 +0.085820858 +0.085754002 +0.083454996 +0.076337128 +0.075205063 +0.07340358 +0.073309078 +0.072861195 +0.068587427 +0.068080952 +0.066606033 +0.065360443 +0.065199574 +0.064515709 +0.064202063 +0.062984385 +0.061691271 +0.061284111 +0.060228058 +0.059947254 +0.055627617 +0.055591274 +0.053209719 +0.05240097 +0.051933239 +0.051539026 +0.050585707 +0.050556021 +0.048518661 +0.0469625 +0.04669845 +0.046388145 +0.04604167 +0.046022951 +0.045856228 +0.045741301 +0.045294882 +0.044407434 +0.044282604 +0.044105377 +0.043816229 +0.043681845 +0.043550516 +0.043486217 +0.042997763 +0.042848343 +0.042555172 +0.040751772 +0.039898363 +0.039055811 +0.038536098 +0.038294147 +0.037820879 +0.037679493 +0.036935659 +0.03689386 +0.035973907 +0.035657555 +0.035625893 +0.035545273 +0.035306149 +0.035302029 +0.035045565 +0.035043678 +0.034913473 +0.034847137 +0.034552809 +0.034384033 +0.033993189 +0.033745352 +0.033523645 +0.033318762 +0.033016794 +0.032899143 +0.032609478 +0.032314951 +0.032142475 +0.03200486 +0.031917757 +0.031890144 +0.031857988 +0.031460625 +0.030767677 +0.030767113 +0.030460476 +0.030331865 +0.030289734 +0.029726887 +0.029615973 +0.029550011 +0.02938451 +0.029173721 +0.029095247 +0.029082436 +0.029073275 +0.028761459 +0.028689842 +0.028631931 +0.028592638 +0.028579586 +0.028563473 +0.028557178 +0.028480917 +0.028459938 +0.028346771 +0.028335405 +0.028153231 +0.028084768 +0.028073935 +0.028040752 +0.02793849 +0.027823267 +0.027690029 +0.027462877 +0.02729034 +0.027278883 +0.026917295 +0.026840796 +0.026818367 +0.026721016 +0.026655212 +0.02663151 +0.026473448 +0.026417494 +0.026259781 +0.026256214 +0.026160954 +0.026140079 +0.026019669 +0.025973564 +0.025891783 +0.025720058 +0.025710346 +0.025668613 +0.025640926 +0.025276188 +0.025203102 +0.025177795 +0.025167692 +0.025158926 +0.025071365 +0.025056839 +0.025004429 +0.024973148 +0.024682114 +0.024676453 +0.024466703 +0.024330297 +0.024309729 +0.02425374 +0.024244202 +0.024087336 +0.023678082 +0.023496538 +0.02347315 +0.023157385 +0.022928219 +0.022852436 +0.02281638 +0.02279372 +0.022724525 +0.02266025 +0.022654459 +0.022652817 +0.022649279 +0.022620216 +0.022600542 +0.022588608 +0.022569284 +0.022550669 +0.022410641 +0.022315672 +0.022302658 +0.022299139 +0.022288818 +0.022202471 +0.022167955 +0.022162033 +0.02209297 +0.022073755 +0.021955069 +0.021751413 +0.021708652 +0.021423197 +0.021378506 +0.021259531 +0.021227345 +0.021089561 +0.020936649 +0.020861197 +0.020860371 +0.020838644 +0.020606852 +0.020473328 +0.020472935 +0.020471384 +0.020430973 +0.020380817 +0.020325941 +0.020262781 +0.020239618 +0.020236551 +0.02021805 +0.020058912 +0.020020618 +0.02001145 +0.019993168 +0.019958797 +0.019916817 +0.019894848 +0.019819748 +0.01980736 +0.019772074 +0.019747128 +0.019706919 +0.019619061 +0.019556425 +0.01953952 +0.019537689 +0.01937623 +0.019359455 +0.019353893 +0.019328989 +0.019320642 +0.019315897 +0.01931078 +0.019274996 +0.019219761 +0.019188459 +0.019170271 +0.019121384 +0.019117035 +0.019082581 +0.01900869 +0.018900898 +0.01887785 +0.018834726 +0.018802755 +0.018799969 +0.018734516 +0.018716284 +0.018657557 +0.018486683 +0.018470064 +0.01843469 +0.018428869 +0.018424885 +0.018359276 +0.018357563 +0.018275291 +0.018178654 +0.018173914 +0.018167345 +0.018141184 +0.018096386 +0.018080029 +0.018067968 +0.018058834 +0.018057837 +0.018043201 +0.018038431 +0.017957052 +0.017945669 +0.017872269 +0.017806503 +0.017760859 +0.017738289 +0.017689602 +0.017683031 +0.017664824 +0.017629597 +0.017627619 +0.017572273 +0.01746537 +0.017459494 +0.017347958 +0.017296581 +0.017276457 +0.017257166 +0.017207304 +0.017165371 +0.017153646 +0.017105444 +0.017037437 +0.017032539 +0.017010843 +0.016990288 +0.016960238 +0.016940037 +0.016935999 +0.016928764 +0.016826895 +0.016826365 +0.016784529 +0.016782661 +0.016767546 +0.016752989 +0.016724216 +0.016719021 +0.016698797 +0.016666059 +0.016629961 +0.016604898 +0.016601042 +0.016569962 +0.016551758 +0.016543955 +0.016517651 +0.016488834 +0.016479387 +0.01644212 +0.016438778 +0.016426662 +0.016424648 +0.016361364 +0.016360878 +0.016351889 +0.01633313 +0.016324522 +0.01630615 +0.016235176 +0.016225349 +0.016223791 +0.016197784 +0.016143642 +0.016067232 +0.016022793 +0.016020367 +0.016010267 +0.016004301 +0.015972395 +0.015945494 +0.015922928 +0.015917259 +0.015873688 +0.015823755 +0.015801109 +0.015800224 +0.01578319 +0.015766155 +0.015756973 +0.015749697 +0.01574148 +0.015733179 +0.015717846 +0.015688328 +0.015679689 +0.015651791 +0.015578312 +0.015568274 +0.015530949 +0.015530323 +0.015514252 +0.015489029 +0.015470831 +0.015454618 +0.015418854 +0.015399651 +0.015362696 +0.015293245 +0.015278149 +0.015268711 +0.015223194 +0.015179592 +0.015173313 +0.015159817 +0.015134972 +0.015124113 +0.015116041 +0.015099134 +0.015076462 +0.015045692 +0.015029678 +0.015027952 +0.015027258 +0.014935503 +0.01493124 +0.014926783 +0.01491824 +0.0149004 +0.014860443 +0.014859562 +0.014846706 +0.014798023 +0.014779491 +0.014776089 +0.014741917 +0.014723202 +0.014678886 +0.014669807 +0.014668699 +0.014668066 +0.014646431 +0.014642235 +0.014635643 +0.014628716 +0.014619865 +0.014581942 +0.014542461 +0.014536594 +0.014529648 +0.014468794 +0.014467144 +0.014455965 +0.014454327 +0.014449732 +0.014434872 +0.014409092 +0.014391941 +0.014377277 +0.014373404 +0.014367949 +0.014364553 +0.014335861 +0.014331312 +0.014315964 +0.01426531 +0.014250792 +0.014210838 +0.014205109 +0.014191071 +0.014177277 +0.014177231 +0.014173882 +0.014140757 +0.014134668 +0.014126049 +0.014125811 +0.014054796 +0.014049654 +0.014025244 +0.014011656 +0.014005735 +0.014000278 +0.013994108 +0.013980742 +0.013960318 +0.013959234 +0.013957403 +0.013863153 +0.013853767 +0.013846024 +0.013827398 +0.0138141 +0.013794388 +0.013780336 +0.013725868 +0.01370705 +0.013689266 +0.013676516 +0.013659449 +0.013632868 +0.013612614 +0.013608204 +0.013590315 +0.013580334 +0.013579395 +0.013574163 +0.013561247 +0.013552969 +0.013543577 +0.013521376 +0.013520414 +0.013518848 +0.013515829 +0.013506664 +0.013487404 +0.013485006 +0.013484594 +0.013480972 +0.013479225 +0.01347628 +0.013475264 +0.01346327 +0.013460785 +0.013449255 +0.013442308 +0.013407326 +0.013399773 +0.013395823 +0.013386217 +0.013368906 +0.013360865 +0.013346773 +0.013335306 +0.013333345 +0.013333048 +0.013321527 +0.013315958 +0.013315645 +0.01330739 +0.01330707 +0.013300503 +0.013275019 +0.013258389 +0.013248606 +0.013243155 +0.013229275 +0.013220968 +0.013217663 +0.013214537 +0.013209286 +0.013207514 +0.013207174 +0.013193296 +0.013181753 +0.013153952 +0.013148331 +0.013147619 +0.01313567 +0.013118118 +0.013115601 +0.01311112 +0.013109673 +0.013098419 +0.013078987 +0.013071623 +0.013053558 +0.013045286 +0.013034384 +0.013032793 +0.012990602 +0.012989401 +0.012988441 +0.012980288 +0.012979965 +0.012975786 +0.012964212 +0.012956188 +0.012955414 +0.012893169 +0.012893152 +0.0128902 +0.012886431 +0.012879498 +0.012878588 +0.012859074 +0.012858637 +0.012857098 +0.012831366 +0.012811628 +0.012811588 +0.01280357 +0.012792517 +0.012785456 +0.012731108 +0.012724525 +0.012707968 +0.012705519 +0.012686659 +0.012677549 +0.012675512 +0.012669334 +0.012662849 +0.012638254 +0.012635168 +0.012623556 +0.012621117 +0.012598213 +0.012597338 +0.012591715 +0.012580093 +0.012575912 +0.012569979 +0.01256566 +0.012554483 +0.012516331 +0.012513477 +0.012508524 +0.012498989 +0.012497349 +0.012469387 +0.012460047 +0.012458017 +0.012454325 +0.012438656 +0.012437292 +0.012430819 +0.012428659 +0.012428358 +0.012392172 +0.012384192 +0.012363575 +0.0123627 +0.012350508 +0.012346867 +0.01234458 +0.012331961 +0.012319809 +0.012309959 +0.012292959 +0.012284637 +0.012281668 +0.012281235 +0.012280586 +0.012274038 +0.012268166 +0.012258696 +0.012257057 +0.012251684 +0.012246971 +0.012233299 +0.012228237 +0.012225534 +0.01220252 +0.012199188 +0.012192537 +0.012169985 +0.012165277 +0.01216407 +0.012150248 +0.012142494 +0.012138397 +0.012134502 +0.01213015 +0.012127392 +0.012120623 +0.012117563 +0.012116022 +0.012113462 +0.012105881 +0.012105434 +0.012104166 +0.012102961 +0.01209749 +0.012092037 +0.012088411 +0.012075352 +0.012067623 +0.012067242 +0.012063 +0.012036968 +0.012029539 +0.012010164 +0.011975971 +0.01196966 +0.011960005 +0.011939915 +0.011938236 +0.011930258 +0.011906082 +0.011903753 +0.011892712 +0.011889427 +0.011856606 +0.011820641 +0.011805254 +0.011789558 +0.011789398 +0.01178734 +0.011783859 +0.011779053 +0.011778351 +0.011777405 +0.011772186 +0.011769785 +0.011769045 +0.011750731 +0.011747965 +0.011736797 +0.011734623 +0.011733103 +0.011727646 +0.01172629 +0.011725962 +0.011709002 +0.011707088 +0.011696634 +0.011681881 +0.011675974 +0.011667149 +0.011655512 +0.011647635 +0.011647419 +0.01163505 +0.011605785 +0.011605425 +0.011600323 +0.011598598 +0.011597515 +0.011596882 +0.011592381 +0.011589779 +0.011586567 +0.011561277 +0.011549034 +0.011542812 +0.011533627 +0.011532291 +0.011521511 +0.011510878 +0.011508146 +0.011506927 +0.011503363 +0.011489201 +0.011487507 +0.011483534 +0.011479553 +0.011467575 +0.011454956 +0.011446638 +0.011445547 +0.011441696 +0.011437248 +0.011431505 +0.011427803 +0.011426689 +0.011415283 +0.011396639 +0.01138549 +0.011352455 +0.011314417 +0.011306023 +0.011303225 +0.011302319 +0.011300928 +0.011289301 +0.011285217 +0.011281603 +0.011278131 +0.01127788 +0.011263325 +0.011262651 +0.011262035 +0.011246296 +0.011234552 +0.011231739 +0.011231646 +0.011219385 +0.01121571 +0.01120808 +0.011197796 +0.011194654 +0.011191275 +0.01118327 +0.011173223 +0.011152914 +0.011149899 +0.011143148 +0.011132282 +0.011125904 +0.011119093 +0.011117306 +0.011116018 +0.011109745 +0.011104404 +0.011101629 +0.011097563 +0.011075924 +0.011064947 +0.01105262 +0.01104351 +0.011031324 +0.011030983 +0.011029053 +0.011020464 +0.011018896 +0.011011696 +0.011001032 +0.010998014 +0.010984489 +0.010971436 +0.010968437 +0.010963564 +0.010949352 +0.010948906 +0.010934481 +0.010930653 +0.010904673 +0.010899469 +0.01089786 +0.010891098 +0.010890671 +0.010883684 +0.010878458 +0.010868954 +0.010840351 +0.010828503 +0.010828463 +0.010825006 +0.010823111 +0.010821735 +0.010817783 +0.010810497 +0.010802845 +0.01079652 +0.010791281 +0.010790363 +0.01078661 +0.010768972 +0.010767355 +0.010755199 +0.010752583 +0.01073773 +0.010730816 +0.010725431 +0.010719328 +0.010708258 +0.010699146 +0.010698341 +0.010698065 +0.010691956 +0.010674366 +0.010650129 +0.010644913 +0.010642487 +0.010639471 +0.010637476 +0.010636229 +0.010623184 +0.010613899 +0.010610718 +0.010591265 +0.010589745 +0.010572945 +0.010570053 +0.010569427 +0.010567434 +0.010564369 +0.010555328 +0.01055295 +0.010534523 +0.010531313 +0.010522446 +0.010521631 +0.010521332 +0.010512012 +0.010507 +0.010502451 +0.010496294 +0.010495981 +0.010483732 +0.010479671 +0.010476015 +0.010474428 +0.010467804 +0.010461031 +0.010460667 +0.010458643 +0.010456127 +0.010455097 +0.010447887 +0.010445536 +0.010445459 +0.010440294 +0.010437674 +0.010424053 +0.010416035 +0.010414288 +0.010411982 +0.010407345 +0.010399019 +0.010397694 +0.010388165 +0.010378002 +0.01037006 +0.010369282 +0.010366194 +0.010362364 +0.010360876 +0.010360525 +0.010359678 +0.010355755 +0.010355 +0.010347639 +0.010340961 +0.010337378 +0.010333439 +0.010332153 +0.010330547 +0.010319702 +0.010315458 +0.010309067 +0.010282721 +0.010280952 +0.010279924 +0.010276993 +0.01026244 +0.010249809 +0.010248869 +0.010244844 +0.010238785 +0.010236814 +0.010225241 +0.010225189 +0.010216644 +0.010205359 +0.01020236 +0.010201057 +0.010196196 +0.010189608 +0.010189569 +0.010172859 +0.010172478 +0.010165102 +0.01014731 +0.010141016 +0.010140961 +0.010140358 +0.010133509 +0.010133013 +0.010129753 +0.010118662 +0.010115639 +0.010097383 +0.010086994 +0.010082422 +0.010079693 +0.010077808 +0.010072815 +0.010069971 +0.010069366 +0.010055101 +0.01005344 +0.010052853 +0.010047998 +0.010046717 +0.010044819 +0.010043018 +0.010027805 +0.010021772 +0.010021236 +0.01001984 +0.010019176 +0.010010813 +0.00999271 +0.009992634 +0.009991449 +0.009988405 +0.009984127 +0.009974216 +0.009973822 +0.009963972 +0.009963217 +0.009959003 +0.009956129 +0.009952198 +0.009951605 +0.009948689 +0.009944738 +0.009934162 +0.009918089 +0.009917334 +0.009915791 +0.009914267 +0.009904041 +0.009895824 +0.009893026 +0.009889654 +0.009885946 +0.009877302 +0.009871275 +0.009862823 +0.009861906 +0.009858282 +0.009857748 +0.009855597 +0.009847418 +0.009838875 +0.009835417 +0.009831131 +0.009821716 +0.009816917 +0.009803411 +0.009801027 +0.009800934 +0.009796852 +0.009794268 +0.00978698 +0.00978071 +0.009769447 +0.009763535 +0.009754473 +0.009749176 +0.009735178 +0.009727205 +0.009726158 +0.009698318 +0.009689453 +0.009668062 +0.009665691 +0.009660448 +0.00965749 +0.009654848 +0.009649281 +0.009637127 +0.009626499 +0.009619808 +0.009618343 +0.009615482 +0.0096136 +0.009610949 +0.009606657 +0.009603209 +0.009598448 +0.009588451 +0.009587584 +0.009577406 +0.009574543 +0.009573772 +0.009573324 +0.009570744 +0.009566359 +0.009563923 +0.009561911 +0.009549023 +0.009546049 +0.009538694 +0.009536924 +0.009534451 +0.009518095 +0.00951535 +0.009508617 +0.009503626 +0.009499363 +0.009495277 +0.009491816 +0.009480606 +0.009474659 +0.009469687 +0.009466248 +0.009465406 +0.009452772 +0.009446671 +0.009442673 +0.009437975 +0.00943074 +0.009428259 +0.009424911 +0.00942466 +0.009418406 +0.00941394 +0.009413757 +0.009407326 +0.009403046 +0.009401253 +0.009391813 +0.009382788 +0.009379992 +0.009376503 +0.009361496 +0.009357916 +0.009354851 +0.00935318 +0.009352173 +0.00934803 +0.009345863 +0.009329193 +0.009310602 +0.009304094 +0.009301453 +0.009299442 +0.009292503 +0.009284487 +0.009283396 +0.00928088 +0.009279207 +0.009275887 +0.009271751 +0.009265942 +0.009260149 +0.009254648 +0.009254284 +0.009252703 +0.009251087 +0.009249889 +0.009248173 +0.009242489 +0.00923875 +0.009236567 +0.009235508 +0.009233568 +0.009231432 +0.009230724 +0.009227587 +0.009224741 +0.009222822 +0.009221806 +0.009216061 +0.009210773 +0.009206926 +0.009206793 +0.00919978 +0.00919894 +0.009184977 +0.009181301 +0.009174124 +0.009171574 +0.009167807 +0.009165182 +0.009157467 +0.009156483 +0.009154934 +0.009154753 +0.009153097 +0.009150114 +0.009149862 +0.009133947 +0.009125546 +0.009125187 +0.009121799 +0.009118078 +0.009116598 +0.009116219 +0.009113089 +0.009109341 +0.009106779 +0.009098486 +0.009091818 +0.009087416 +0.009081589 +0.009071327 +0.009068558 +0.009067184 +0.009057989 +0.009054289 +0.00905188 +0.009050917 +0.009045128 +0.009042654 +0.009039398 +0.00903755 +0.009036253 +0.009035683 +0.009025154 +0.009024414 +0.009016073 +0.009010956 +0.009010275 +0.009009649 +0.009008425 +0.009008026 +0.009003935 +0.009003487 +0.009001575 +0.009000021 +0.008998213 +0.008997826 +0.00899695 +0.00899629 +0.008994701 +0.008980593 +0.008979242 +0.008973251 +0.008967598 +0.008967264 +0.008962202 +0.008958742 +0.008956482 +0.008949486 +0.008948862 +0.008936363 +0.008931353 +0.008928507 +0.00892395 +0.008912882 +0.008911312 +0.008905334 +0.008904833 +0.008898914 +0.008898584 +0.008896852 +0.008896091 +0.008895342 +0.008879528 +0.008878824 +0.008875925 +0.008873835 +0.008866924 +0.008866913 +0.008853792 +0.008847788 +0.008842609 +0.00884203 +0.008841763 +0.008823824 +0.008823648 +0.008821688 +0.008815807 +0.008815762 +0.008815523 +0.008813768 +0.008812487 +0.008809599 +0.00880356 +0.008800686 +0.008790859 +0.008787264 +0.008787136 +0.00878548 +0.008778179 +0.008773167 +0.008769232 +0.008766172 +0.008758953 +0.008753864 +0.008745367 +0.008728994 +0.008727705 +0.008722036 +0.008714931 +0.008713942 +0.008706615 +0.008706228 +0.008702322 +0.00869656 +0.008695816 +0.008694998 +0.008687172 +0.008683538 +0.008681408 +0.008680571 +0.008677876 +0.008668587 +0.008665112 +0.008660421 +0.00865873 +0.008652853 +0.008649252 +0.008645973 +0.008637754 +0.008627981 +0.008618307 +0.008618225 +0.008611267 +0.008608376 +0.008605997 +0.008605856 +0.008604956 +0.008601501 +0.008593412 +0.008593252 +0.008590149 +0.008581535 +0.008579865 +0.008579063 +0.008576729 +0.00857555 +0.008567648 +0.008565775 +0.00856448 +0.008560547 +0.008560545 +0.008559984 +0.008559341 +0.008557108 +0.00855102 +0.008548868 +0.00854011 +0.008531914 +0.008531733 +0.008530304 +0.008523857 +0.008521852 +0.0085205 +0.008506149 +0.008496536 +0.008492718 +0.008491959 +0.008491611 +0.008483423 +0.008482132 +0.008480064 +0.0084772 +0.00847496 +0.008471758 +0.00846702 +0.008464207 +0.00845647 +0.008449924 +0.008448872 +0.008446491 +0.008446367 +0.008444078 +0.00843767 +0.008437092 +0.008437023 +0.008436787 +0.008430056 +0.008423786 +0.008409794 +0.008409582 +0.00840749 +0.008404102 +0.008402639 +0.008402025 +0.008398212 +0.008398067 +0.008397497 +0.008390812 +0.008388365 +0.008387287 +0.008386095 +0.008385265 +0.008384295 +0.008382305 +0.008377583 +0.008375067 +0.008370543 +0.008363409 +0.008362431 +0.008350986 +0.008350721 +0.008347136 +0.008346004 +0.008345411 +0.008340242 +0.008339193 +0.008337996 +0.008335783 +0.008332388 +0.008331875 +0.008329184 +0.008329 +0.008325085 +0.008317554 +0.008315899 +0.00831558 +0.008312111 +0.008311546 +0.008308163 +0.008303694 +0.008302061 +0.008295502 +0.008276363 +0.0082719 +0.008268257 +0.008266729 +0.008265278 +0.008252605 +0.008252218 +0.008250618 +0.00824852 +0.008243444 +0.008241011 +0.008235146 +0.008234823 +0.008232748 +0.008228065 +0.00822789 +0.008227877 +0.008222773 +0.008221802 +0.008220362 +0.008214621 +0.0082124 +0.00821044 +0.008207237 +0.008198914 +0.008193914 +0.008192726 +0.008192453 +0.008189316 +0.008188591 +0.008180777 +0.008174021 +0.008166906 +0.008166307 +0.008163851 +0.008158514 +0.008132813 +0.008130104 +0.008126024 +0.008125488 +0.008124292 +0.008123589 +0.008123493 +0.008123234 +0.008116533 +0.008115725 +0.00811104 +0.008109131 +0.008099726 +0.008099237 +0.008098579 +0.00808876 +0.00808765 +0.008086834 +0.008085915 +0.00808304 +0.008081331 +0.008078959 +0.008076214 +0.008073627 +0.008070107 +0.008067293 +0.008065502 +0.008063486 +0.008058489 +0.008050545 +0.008043613 +0.008037531 +0.008033579 +0.00802656 +0.008025509 +0.008023716 +0.008019367 +0.008016018 +0.007995533 +0.007995502 +0.007994684 +0.007993433 +0.007991413 +0.007990221 +0.007981342 +0.007980297 +0.007976282 +0.00797542 +0.007963688 +0.007961447 +0.007960775 +0.007959494 +0.007949574 +0.007947363 +0.007943882 +0.00794335 +0.007938526 +0.007938213 +0.007937023 +0.007933744 +0.007928679 +0.0079184 +0.007917301 +0.007916977 +0.007916502 +0.007914402 +0.007911205 +0.007907639 +0.007898962 +0.007897505 +0.007890778 +0.007888922 +0.00788455 +0.007882633 +0.007878956 +0.007873016 +0.007866476 +0.007862608 +0.007861006 +0.007856619 +0.007848036 +0.007846813 +0.007837957 +0.007830175 +0.007830101 +0.007813538 +0.007806742 +0.007800179 +0.00779528 +0.007793753 +0.007782089 +0.007777205 +0.007774603 +0.007773149 +0.00777243 +0.007764381 +0.007753885 +0.007737322 +0.007736816 +0.007732416 +0.007730043 +0.007727249 +0.007725708 +0.007722313 +0.007709854 +0.007709442 +0.007707956 +0.007707741 +0.007705021 +0.007697092 +0.007690178 +0.007686562 +0.007686396 +0.007686283 +0.007685259 +0.007682032 +0.007679382 +0.007677752 +0.00767338 +0.007671814 +0.007669827 +0.007667139 +0.00766713 +0.00766556 +0.007663883 +0.007647295 +0.007645601 +0.007644512 +0.007641895 +0.007634661 +0.007633572 +0.007626781 +0.007620035 +0.007608179 +0.007603334 +0.007596003 +0.007594143 +0.00759277 +0.007587484 +0.00753887 +0.007538639 +0.007538141 +0.007532749 +0.007531567 +0.007530338 +0.007527729 +0.007527119 +0.007521132 +0.007515654 +0.007515554 +0.007508749 +0.007503225 +0.00749881 +0.007496796 +0.007492863 +0.007489515 +0.007487968 +0.007486027 +0.007480305 +0.007476843 +0.007475327 +0.007472973 +0.007472609 +0.007466551 +0.007458138 +0.007457579 +0.007454803 +0.007443495 +0.007440092 +0.007436852 +0.007423079 +0.007420023 +0.007415533 +0.007405418 +0.007404099 +0.007399483 +0.0073958 +0.007394213 +0.0073892 +0.007384178 +0.007381269 +0.007375069 +0.007370123 +0.007362854 +0.007362654 +0.007362572 +0.007360636 +0.007350525 +0.007348639 +0.007348511 +0.007345818 +0.007340227 +0.007333773 +0.007331263 +0.007330294 +0.0073283 +0.007322588 +0.007308031 +0.007306694 +0.007304211 +0.007295887 +0.007293764 +0.007292185 +0.007277504 +0.007276218 +0.007269623 +0.007268534 +0.007266216 +0.007261278 +0.007260929 +0.007249109 +0.00724872 +0.00723798 +0.007232494 +0.007231319 +0.007229631 +0.00722677 +0.007221827 +0.007221193 +0.00721487 +0.007211618 +0.007207369 +0.007204393 +0.007201649 +0.00720067 +0.00719776 +0.007197191 +0.007195637 +0.007190441 +0.007190075 +0.007189671 +0.007182873 +0.007180506 +0.007178869 +0.007171055 +0.007170536 +0.007169872 +0.007160252 +0.007159506 +0.007139025 +0.007138716 +0.007133526 +0.007132404 +0.007130962 +0.00712409 +0.007110884 +0.007107983 +0.007106459 +0.007106091 +0.007097916 +0.007090223 +0.007084623 +0.007083195 +0.007068876 +0.007065039 +0.007057159 +0.007055059 +0.00705242 +0.007050728 +0.007050497 +0.00704656 +0.007045835 +0.007043203 +0.007041342 +0.007037169 +0.007037048 +0.007037033 +0.007035322 +0.007035032 +0.007034454 +0.007027992 +0.007010723 +0.007010368 +0.007010002 +0.007004395 +0.007001211 +0.006998716 +0.00699678 +0.00698596 +0.0069813 +0.006970192 +0.006968014 +0.006967873 +0.006956198 +0.006955866 +0.006955643 +0.0069527 +0.006944527 +0.006943811 +0.006936493 +0.006932322 +0.006919962 +0.006917557 +0.006915163 +0.006913467 +0.006912697 +0.006910807 +0.006900354 +0.00689155 +0.006886789 +0.006880814 +0.006871332 +0.006867739 +0.00686223 +0.00686108 +0.00685799 +0.006856377 +0.006854639 +0.006851885 +0.006850521 +0.006846849 +0.00684086 +0.006840626 +0.006832794 +0.006831898 +0.006831432 +0.006830631 +0.006830364 +0.006822613 +0.006813906 +0.006807535 +0.006806032 +0.006804279 +0.006804209 +0.006803143 +0.006797207 +0.006792576 +0.00678742 +0.006786198 +0.006776249 +0.006767094 +0.006765043 +0.006759504 +0.006758421 +0.006748098 +0.006743984 +0.006743649 +0.006740118 +0.006735943 +0.006732008 +0.006731319 +0.006726734 +0.006720741 +0.00671867 +0.006716177 +0.006706623 +0.006698238 +0.006694654 +0.006692337 +0.006690315 +0.006687939 +0.006686069 +0.00668399 +0.006671804 +0.006667908 +0.006664333 +0.006659399 +0.006647436 +0.006647329 +0.006639271 +0.006638327 +0.006633261 +0.006633078 +0.006611351 +0.006607069 +0.006606344 +0.006600904 +0.006597185 +0.006595774 +0.006593163 +0.006589317 +0.006586607 +0.006580635 +0.006576479 +0.006574949 +0.006566893 +0.006566399 +0.006554573 +0.006530695 +0.006525759 +0.006521776 +0.006517738 +0.006501879 +0.006500742 +0.006499847 +0.006492546 +0.006478745 +0.006469521 +0.006459919 +0.006446957 +0.006436213 +0.006430162 +0.006429461 +0.006420221 +0.006410669 +0.006406378 +0.006403811 +0.006396671 +0.006391806 +0.006382936 +0.006363773 +0.006350231 +0.006341734 +0.006335096 +0.006329418 +0.006325489 +0.00632304 +0.006291357 +0.006279036 +0.00625112 +0.006240334 +0.006233267 +0.006232565 +0.006211235 +0.006205635 +0.006204079 +0.006202707 +0.00619545 +0.006194229 +0.006185663 +0.006182297 +0.006178352 +0.006153929 +0.006151711 +0.006140169 +0.006138277 +0.006132753 +0.006055676 +0.006026957 +0.006006159 +0.005980967 +0.005950672 +0.005929432 +0.005926622 +0.005907154 +0.005893517 +0.005889854 +0.005885946 +0.005880421 +0.005874573 +0.005866598 +0.005859877 +0.005851454 +0.005845602 +0.005840521 +0.005823341 +0.005810097 +0.005768602 +0.005765007 +0.005762871 +0.005753492 +0.005752243 +0.005749565 +0.005721613 +0.005683754 +0.005637468 +0.005622242 +0.005615107 +0.005605305 +0.005576214 +0.005545177 +0.005544794 +0.005515455 +0.005495152 +0.005432837 +0.005423744 +0.00542115 +0.005391729 +0.005372042 +0.005344336 +0.00532242 +0.005316675 +0.005290703 +0.005276886 +0.005098354 +0.005076155 +0.004904335 +0.0048818 +0.004871721 +0.004807217 +0.004717197 +0.004528528 +0.004348799 diff --git a/examples/quasimc-global/LOLASethCraterCatalogv8gt20-binned.dat b/examples/quasimc-global/LOLASethCraterCatalogv8gt20-binned.dat new file mode 100755 index 00000000..64f0ea87 --- /dev/null +++ b/examples/quasimc-global/LOLASethCraterCatalogv8gt20-binned.dat @@ -0,0 +1,15 @@ + 16000.000 1.67673714E-02 613 + 22627.416 8.79671574E-02 1608 + 31999.998 0.13588955 1242 + 45254.828 0.18796957 859 + 63999.992 0.21663548 495 + 90509.656 0.23370373 267 + 127999.98 0.16630602 95 + 181019.31 0.11553892 33 + 255999.97 0.11203775 16 + 362038.63 8.40283111E-02 6 + 511999.94 0.16805661 6 + 724077.25 0.28009436 5 + 1023999.9 0.22407550 2 + 1448154.5 0.0000000 0 + 2047999.8 0.44815099 1 diff --git a/examples/quasimc-global/NPF.plt b/examples/quasimc-global/NPF.plt new file mode 100755 index 00000000..601acbd3 --- /dev/null +++ b/examples/quasimc-global/NPF.plt @@ -0,0 +1,100 @@ +#gnuplot 5.0 script +# The Neukum production function +# Neukum, Ivanov, and Hartmann (2001) SSR v. 96 pp. 55-86 +N1lunar(T) = 5.44e-14 * (exp(6.93*T) - 1) + 8.38e-4*T +#Units: Nc>1 km per km**2 + +# Lunar crater SFD +aL00 = -3.0876 +aL01 = -3.557528 +aL02 = 0.781027 +aL03 = 1.021521 +aL04 = -0.156012 +aL05 = -0.444058 +aL06 = 0.019977 +aL07 = 0.086850 +aL08 = -0.005874 +aL09 = -0.006809 +aL10 = 8.25e-4 +aL11 = 5.54e-5 + +Nlunar(D) = D < 0.01 ? 1/0 : D > 1000 ? 1/0 : 10**( \ + aL00 \ + + aL01 * log10(D)**1 \ + + aL02 * log10(D)**2 \ + + aL03 * log10(D)**3 \ + + aL04 * log10(D)**4 \ + + aL05 * log10(D)**5 \ + + aL06 * log10(D)**6 \ + + aL07 * log10(D)**7 \ + + aL08 * log10(D)**8 \ + + aL09 * log10(D)**9 \ + + aL10 * log10(D)**10 \ + + aL11 * log10(D)**11 ) +#Units: Nc>D(km) per km**2 per Gy +#Projectile SFD + +aP00 = 0.0 +aP01 = -1.375458 +aP02 = 1.272521e-1 +aP03 = -1.282166 +aP04 = -3.074558e-1 +aP05 = 4.149280e-1 +aP06 = 1.910668e-1 +aP07 = -4.260980e-2 +aP08 = -3.976305e-2 +aP09 = -3.180179e-3 +aP10 = 2.799369e-3 +aP11 = 6.892223e-4 +aP12 = 2.614385e-6 +aP13 = -1.416178e-5 +aP14 = -1.191124e-6 + +Rproj(D) = D < 1e-4 ? 1/0 : D > 300 ? 1/0 : 10**( \ + aP00 \ + + aP01 * log10(D)**1 \ + + aP02 * log10(D)**2 \ + + aP03 * log10(D)**3 \ + + aP04 * log10(D)**4 \ + + aP05 * log10(D)**5 \ + + aP06 * log10(D)**6 \ + + aP07 * log10(D)**7 \ + + aP08 * log10(D)**8 \ + + aP09 * log10(D)**9 \ + + aP10 * log10(D)**10 \ + + aP11 * log10(D)**11 \ + + aP12 * log10(D)**12 \ + + aP13 * log10(D)**13 \ + + aP14 * log10(D)**14 ) + + +# Mars crater SFD +# Ivanov (2001) SSR v. 96 pp. 87-104 +aM00 = -3.384 +aM01 = -3.197 +aM02 = 1.257 +aM03 = 0.7915 +aM04 = -0.4861 +aM05 = -0.3630 +aM06 = 0.1016 +aM07 = 6.756e-2 +aM08 = -1.181e-2 +aM09 = -4.753e-3 +aM10 = 6.233e-4 +aM11 = 5.805e-5 + +N1mars(T) = 2.68e-14 * (exp(6.93*T) - 1) + 4.13e-4*T + +Nmars(D) = D < 0.01 ? 1/0 : D > 1000 ? 1/0 : 10**( \ + aM00 \ + + aM01 * log10(D)**1 \ + + aM02 * log10(D)**2 \ + + aM03 * log10(D)**3 \ + + aM04 * log10(D)**4 \ + + aM05 * log10(D)**5 \ + + aM06 * log10(D)**6 \ + + aM07 * log10(D)**7 \ + + aM08 * log10(D)**8 \ + + aM09 * log10(D)**9 \ + + aM10 * log10(D)**10 \ + + aM11 * log10(D)**11 ) diff --git a/examples/quasimc-global/NPFextrap.dat b/examples/quasimc-global/NPFextrap.dat new file mode 100755 index 00000000..e98391df --- /dev/null +++ b/examples/quasimc-global/NPFextrap.dat @@ -0,0 +1,1418 @@ + 1.0000000000000001E-009 16373498665196056. + 1.0200000000000000E-009 15624829133353072. + 1.0404000000000000E-009 14910392118418680. + 1.0612080000000001E-009 14228622356426014. + 1.0824322000000000E-009 13578024968994198. + 1.1040808000000000E-009 12957178207974354. + 1.1261623999999999E-009 12364718530314516. + 1.1486857000000000E-009 11799347079002376. + 1.1716594000000001E-009 11259828517385738. + 1.1950926000000001E-009 10744978582763124. + 1.2189943999999999E-009 10253671176415016. + 1.2433742999999999E-009 9784827283731524.0 + 1.2682417999999999E-009 9337421008741684.0 + 1.2936066000000000E-009 8910472977441879.0 + 1.3194787999999999E-009 8503045296702585.0 + 1.3458682999999999E-009 8114249148673952.0 + 1.3727857000000000E-009 7743228961776817.0 + 1.4002413999999999E-009 7389174104114597.0 + 1.4282461999999999E-009 7051308368799519.0 + 1.4568112000000000E-009 6728890208258190.0 + 1.4859474000000000E-009 6421215521897574.0 + 1.5156663000000001E-009 6127609310508435.0 + 1.5459797000000000E-009 5847426967224776.0 + 1.5768993000000000E-009 5580056424177601.0 + 1.6084372000000000E-009 5324911980228383.0 + 1.6406059999999999E-009 5081432797667148.0 + 1.6734181000000000E-009 4849087118238152.0 + 1.7068865000000000E-009 4627364941332780.0 + 1.7410241999999999E-009 4415781316339177.5 + 1.7758447000000000E-009 4213871971251545.0 + 1.8113615999999999E-009 4021194880969782.5 + 1.8475888000000001E-009 3837328037757316.5 + 1.8845406000000000E-009 3661868141016992.5 + 1.9222313999999999E-009 3494431216318050.5 + 1.9606759999999999E-009 3334650316747248.5 + 1.9998896000000001E-009 3182174901302566.0 + 2.0398873000000000E-009 3036671967025619.5 + 2.0806850999999999E-009 2897821576611301.5 + 2.1222988000000000E-009 2765320229959727.0 + 2.1647448000000000E-009 2638877361348099.5 + 2.2080397000000001E-009 2518216084527946.0 + 2.2522004999999999E-009 2403071976513234.5 + 2.2972445000000000E-009 2293192809795639.5 + 2.3431893999999999E-009 2188337764271766.2 + 2.3900531000000002E-009 2088277363840784.0 + 2.4378541999999999E-009 1992791917069052.2 + 2.4866113000000000E-009 1901672535858309.2 + 2.5363434999999998E-009 1814719612820091.0 + 2.5870704000000000E-009 1731742474774254.8 + 2.6388118000000001E-009 1652559481637765.0 + 2.6915880000000000E-009 1576997126693668.5 + 2.7454198000000002E-009 1504889718623458.0 + 2.8003281999999998E-009 1436079430510044.2 + 2.8563347000000001E-009 1370415533754651.0 + 2.9134614000000000E-009 1307754004857728.0 + 2.9717306999999998E-009 1247957575911645.5 + 3.0311653000000001E-009 1190895391529202.2 + 3.0917886000000001E-009 1136442337305807.5 + 3.1536243999999999E-009 1084479092213053.0 + 3.2166969000000001E-009 1034891852503704.1 + 3.2810308000000000E-009 987571998980541.62 + 3.3466513999999998E-009 942415804458058.00 + 3.4135843999999999E-009 899324359631564.38 + 3.4818560999999998E-009 858203223971718.88 + 3.5514931999999999E-009 818962349229012.12 + 3.6225231000000002E-009 781515712287184.12 + 3.6949736000000000E-009 745781303219183.00 + 3.7688729999999998E-009 711680881369590.50 + 3.8442505000000000E-009 679139634252424.62 + 3.9211355000000002E-009 648086339057709.00 + 3.9995582000000000E-009 618452938978139.88 + 4.0795494000000003E-009 590174494421968.88 + 4.1611404000000001E-009 563189075227060.88 + 4.2443631999999998E-009 537437556193661.94 + 4.3292503999999998E-009 512863527269277.06 + 4.4158355000000001E-009 489413090719507.75 + 4.5041521999999999E-009 467034939488460.38 + 4.5942352000000002E-009 445680024973336.06 + 4.6861198999999999E-009 425301543369721.69 + 4.7798422999999998E-009 405854855741145.12 + 4.8754392000000000E-009 387297347872637.31 + 4.9729479000000000E-009 369588397022663.94 + 5.0724068999999997E-009 352689156962741.94 + 5.1738549999999998E-009 336562638379934.25 + 5.2773320999999999E-009 321173490452837.50 + 5.3828788000000004E-009 306487995360364.31 + 5.4905363999999996E-009 292473991498358.12 + 5.6003471000000003E-009 279100776849566.19 + 5.7123539999999996E-009 266339046656329.31 + 5.8266011000000001E-009 254160833114840.06 + 5.9431331000000001E-009 242539466105880.25 + 6.0619958000000003E-009 231449474398208.41 + 6.1832356999999997E-009 220866571431898.88 + 6.3069004000000003E-009 210767565834604.31 + 6.4330384000000003E-009 201130331399540.56 + 6.5616992000000004E-009 191933751602170.12 + 6.6929332000000002E-009 183157681685953.81 + 6.8267918000000003E-009 174782897833489.59 + 6.9633277000000003E-009 166791039009238.41 + 7.1025941999999997E-009 159164610185338.97 + 7.2446461000000002E-009 151886892107514.00 + 7.3895389999999998E-009 144941945641289.97 + 7.5373297999999992E-009 138314551278590.05 + 7.6880764000000003E-009 131990191714344.11 + 7.8418378999999996E-009 125955011347589.45 + 7.9986746999999999E-009 120195783849702.44 + 8.1586482000000008E-009 114699895257102.41 + 8.3218211999999993E-009 109455302339307.47 + 8.4882576000000007E-009 104450517459128.98 + 8.6580226999999995E-009 99674574428007.266 + 8.8311832000000003E-009 95117006273188.609 + 9.0078069000000000E-009 90767830811786.562 + 9.1879630000000007E-009 86617520797173.422 + 9.3717223000000003E-009 82656979820887.656 + 9.5591567000000001E-009 78877534206942.641 + 9.7503398000000004E-009 75270901460268.844 + 9.9453466000000004E-009 71829179396882.812 + 1.0144254000000000E-008 68544820836225.852 + 1.0347139000000000E-008 65410646497629.273 + 1.0554081000000001E-008 62419790325370.305 + 1.0765163000000000E-008 59565673586258.523 + 1.0980465999999999E-008 56842067973770.125 + 1.1200076000000000E-008 54242986818745.445 + 1.1424077000000000E-008 51762760619395.273 + 1.1652559000000000E-008 49395931268191.195 + 1.1885609999999999E-008 47137330228209.656 + 1.2123322000000000E-008 44982002588342.570 + 1.2365788000000000E-008 42925228016763.523 + 1.2613104000000000E-008 40962492917581.109 + 1.2865366000000001E-008 39089505256454.422 + 1.3122674000000000E-008 37302153815962.242 + 1.3385127000000000E-008 35596535659580.703 + 1.3652830000000000E-008 33968900264402.430 + 1.3925886000000000E-008 32415693637990.871 + 1.4204404000000001E-008 30933501818846.531 + 1.4488492000000000E-008 29519084260541.852 + 1.4778261999999999E-008 28169339086295.105 + 1.5073827000000001E-008 26881312027552.051 + 1.5375304000000001E-008 25652176494844.832 + 1.5682810000000001E-008 24479244642274.449 + 1.5996465999999999E-008 23359944870186.188 + 1.6316394999999999E-008 22291824829480.715 + 1.6642723000000000E-008 21272542674614.992 + 1.6975578000000000E-008 20299865430624.629 + 1.7315088999999998E-008 19371666343646.961 + 1.7661391000000001E-008 18485906643103.184 + 1.8014619000000000E-008 17640647961544.605 + 1.8374910999999999E-008 16834039524188.734 + 1.8742409000000001E-008 16064312451471.598 + 1.9117258000000001E-008 15329778741146.434 + 1.9499602999999998E-008 14628833032189.432 + 1.9889595000000001E-008 13959937509623.682 + 2.0287386999999999E-008 13321626625147.031 + 2.0693133999999998E-008 12712503396493.473 + 2.1106997000000001E-008 12131230494230.133 + 2.1529137000000001E-008 11576536345526.742 + 2.1959720000000000E-008 11047205059657.873 + 2.2398914000000000E-008 10542077919747.137 + 2.2846892999999998E-008 10060046255544.195 + 2.3303830000000000E-008 9600056819862.7637 + 2.3769907000000001E-008 9161098955437.1289 + 2.4245305000000001E-008 8742212689765.9873 + 2.4730211000000002E-008 8342479736439.3154 + 2.5224815000000000E-008 7961024444539.4209 + 2.5729311999999999E-008 7597010341008.1240 + 2.6243898000000001E-008 7249641233953.4287 + 2.6768776000000001E-008 6918155213847.5566 + 2.7304150999999999E-008 6601826537550.0312 + 2.7850234000000000E-008 6299961535648.2812 + 2.8407239000000001E-008 6011898979667.3711 + 2.8975384000000000E-008 5737007988465.2129 + 2.9554892000000001E-008 5474686204565.7217 + 3.0145988999999997E-008 5224359429035.2139 + 3.0748909000000000E-008 4985478284117.9785 + 3.1363887000000002E-008 4757520001567.6973 + 3.1991165000000001E-008 4539984838571.4219 + 3.2630987999999999E-008 4332396536883.7876 + 3.3283608000000003E-008 4134299935039.2305 + 3.3949279999999998E-008 3945261310425.0435 + 3.4628266000000003E-008 3764866228554.6958 + 3.5320830999999998E-008 3592719796758.2207 + 3.6027248000000002E-008 3428444506578.7588 + 3.6747793000000003E-008 3271680693359.0024 + 3.7482749000000002E-008 3122084803976.6665 + 3.8232403999999998E-008 2979329130228.1948 + 3.8997051999999998E-008 2843100901531.3130 + 3.9776993000000001E-008 2713101629103.0752 + 4.0572533000000002E-008 2589046476685.4932 + 4.1383983000000000E-008 2470663794671.9092 + 4.2211663000000003E-008 2357693959398.8506 + 4.3055895999999998E-008 2249889687218.9824 + 4.3917014000000000E-008 2147014667034.8123 + 4.4795355000000002E-008 2048843483433.1084 + 4.5691261999999999E-008 1955161213496.6575 + 4.6605086999999997E-008 1865762527880.5625 + 4.7537189000000001E-008 1780451503931.3225 + 4.8487932000000002E-008 1699041369129.2983 + 4.9457691000000003E-008 1621353576798.9429 + 5.0446845000000002E-008 1547218032532.4575 + 5.1455781999999998E-008 1476472302781.3630 + 5.2484897000000000E-008 1408961431360.2058 + 5.3534595000000003E-008 1344537414557.3447 + 5.4605287000000000E-008 1283059149759.8259 + 5.5697393000000002E-008 1224391937812.7815 + 5.6811340999999998E-008 1168407259997.1379 + 5.7947567999999998E-008 1114982450296.6106 + 5.9106518999999997E-008 1064000485116.6843 + 6.0288649000000002E-008 1015349642963.6342 + 6.1494422000000003E-008 968923318991.95959 + 6.2724311000000003E-008 924619795267.01807 + 6.3978796999999998E-008 882342053288.68738 + 6.5258373000000004E-008 841997429632.64258 + 6.6563539999999999E-008 803497557403.88025 + 6.7894811000000003E-008 766758052921.46326 + 6.9252707000000001E-008 731698453641.91223 + 7.0637761999999997E-008 698241910301.06592 + 7.2050516999999996E-008 666315174928.58032 + 7.3491526999999999E-008 635848274355.08435 + 7.4961357999999994E-008 606774440832.36877 + 7.6460585000000002E-008 579030004685.42468 + 7.7989797000000004E-008 552554160097.28235 + 7.9549593000000000E-008 527288913637.53717 + 8.1140583999999998E-008 503178920665.76013 + 8.2763396000000005E-008 480171327337.28839 + 8.4418663999999995E-008 458215747372.30853 + 8.6107037000000007E-008 437264079007.88422 + 8.7829177999999996E-008 417270408258.57721 + 8.9585762000000003E-008 398190935823.03259 + 9.1377476999999995E-008 379983869073.30249 + 9.3205025999999995E-008 362609313384.73578 + 9.5069127000000000E-008 346029190991.65741 + 9.6970508999999994E-008 330207194295.50470 + 9.8909920000000005E-008 315108639531.97485 + 1.0088812000000000E-007 300700453028.72919 + 1.0290588000000000E-007 286951100304.25635 + 1.0496400000000000E-007 273830398824.25473 + 1.0706327999999999E-007 261309649245.87091 + 1.0920454000000000E-007 249361434541.21716 + 1.1138863000000000E-007 237959519387.66306 + 1.1361640999999999E-007 227078911767.07831 + 1.1588874000000000E-007 216695841161.21136 + 1.1820651000000000E-007 206787558744.98465 + 1.2057063999999999E-007 197332308194.68011 + 1.2298205000000001E-007 188309403334.54932 + 1.2544169000000001E-007 179699059251.88254 + 1.2795052999999999E-007 171482395554.55167 + 1.3050953999999999E-007 163641455843.85178 + 1.3311972999999999E-007 156159039406.35278 + 1.3578212000000000E-007 149018762172.14835 + 1.3849777000000001E-007 142204939962.86777 + 1.4126772000000001E-007 135702706863.71530 + 1.4409307999999999E-007 129497760760.52310 + 1.4697494000000000E-007 123576547597.46860 + 1.4991444000000001E-007 117926073347.71808 + 1.5291272000000000E-007 112533981565.08438 + 1.5597097999999999E-007 107388415907.11580 + 1.5909040000000000E-007 102478137005.01477 + 1.6227221000000001E-007 97792375760.095139 + 1.6551764999999999E-007 93320876904.490311 + 1.6882800000000001E-007 89053833104.851059 + 1.7220455999999999E-007 84981893879.282379 + 1.7564866000000000E-007 81096132302.188889 + 1.7916163000000001E-007 77388057987.848480 + 1.8274486000000001E-007 73849532612.797913 + 1.8639976000000000E-007 70472799448.051804 + 1.9012775000000001E-007 67250472464.319939 + 1.9393031000000000E-007 64175476409.695488 + 1.9780891000000001E-007 61241091364.895897 + 2.0176508999999999E-007 58440873753.760574 + 2.0580038999999999E-007 55768696985.791275 + 2.0991640000000001E-007 53218701612.847710 + 2.1411473000000001E-007 50785303621.508827 + 2.1839703000000000E-007 48463169749.026505 + 2.2276496999999999E-007 46247217340.361671 + 2.2722026999999999E-007 44132587611.583885 + 2.3176467000000001E-007 42114650797.673409 + 2.3639996000000001E-007 40188982118.849129 + 2.4112796000000000E-007 38351361952.392334 + 2.4595051999999998E-007 36597766012.277328 + 2.5086953000000001E-007 34924352727.238846 + 2.5588691999999999E-007 33327455429.419361 + 2.6100465999999998E-007 31803574765.990089 + 2.6622476000000002E-007 30349371365.674057 + 2.7154925000000000E-007 28961663787.900448 + 2.7698024000000001E-007 27637405910.687466 + 2.8251984000000002E-007 26373701261.103699 + 2.8817023999999999E-007 25167777115.559059 + 2.9393364000000001E-007 24016994798.944111 + 2.9981231000000000E-007 22918830970.512638 + 3.0580855999999997E-007 21870878952.293278 + 3.1192473000000001E-007 20870844815.995773 + 3.1816323000000000E-007 19916535721.223831 + 3.2452648999999998E-007 19005863338.361744 + 3.3101702000000000E-007 18136830303.799107 + 3.3763736000000000E-007 17307533417.960754 + 3.4439011000000000E-007 16516155325.650702 + 3.5127791000000000E-007 15760963127.140764 + 3.5830347000000001E-007 15040301278.532799 + 3.6546953999999998E-007 14352591433.729498 + 3.7277893000000002E-007 13696326881.594456 + 3.8023451000000001E-007 13070069494.442820 + 3.8783920000000002E-007 12472447522.296986 + 3.9559598000000000E-007 11902151766.819441 + 4.0350790000000000E-007 11357932171.402477 + 4.1157805999999999E-007 10838596629.491890 + 4.1980962000000000E-007 10343007623.858597 + 4.2820580999999999E-007 9870079223.4984512 + 4.3676993000000002E-007 9418774898.5524960 + 4.4550533000000002E-007 8988106351.1573124 + 4.5441543000000001E-007 8577130255.7068071 + 4.6350374000000000E-007 8184945470.8186483 + 4.7277382000000000E-007 7810692982.6348801 + 4.8222928999999996E-007 7453553427.5187416 + 4.9187388000000002E-007 7112743511.5251446 + 5.0171136000000002E-007 6787517014.6966610 + 5.1174559000000000E-007 6477161319.7870684 + 5.2198050000000003E-007 6180996608.3631239 + 5.3242010999999997E-007 5898373820.7871580 + 5.4306851000000005E-007 5628673863.8338795 + 5.5392987999999997E-007 5371305744.9803934 + 5.6500848000000005E-007 5125705590.5661449 + 5.7630865000000003E-007 4891335416.2200336 + 5.8783482000000000E-007 4667681758.0877953 + 5.9959151999999999E-007 4454254425.1566029 + 6.1158334999999995E-007 4250586013.4730248 + 6.2381500999999999E-007 4056230333.2004013 + 6.3629130999999998E-007 3870761357.1443782 + 6.4901713999999997E-007 3693772799.1979837 + 6.6199748000000004E-007 3524877033.9801593 + 6.7523743000000005E-007 3363703899.4316201 + 6.8874217999999998E-007 3209900309.0552664 + 7.0251701999999996E-007 3063129358.6413770 + 7.1656736000000002E-007 2923069399.7206674 + 7.3089871000000005E-007 2789413577.9710178 + 7.4551668999999998E-007 2661869074.3602333 + 7.6042702000000003E-007 2540156554.5936022 + 7.7563555999999996E-007 2424009247.9907260 + 7.9114827000000001E-007 2313172720.8053265 + 8.0697124000000003E-007 2207404096.8074675 + 8.2311066000000003E-007 2106471745.4751511 + 8.3957287999999996E-007 2010154405.2482915 + 8.5636432999999996E-007 1918241202.4974861 + 8.7349161999999997E-007 1830530625.4059026 + 8.9096145000000005E-007 1746830595.6282666 + 9.0878067999999999E-007 1666957689.9548492 + 9.2695629000000003E-007 1590736949.3339379 + 9.4549542000000000E-007 1518001331.1405859 + 9.6440533000000010E-007 1448591520.6681437 + 9.8369343999999992E-007 1382355431.5699728 + 1.0033673000000000E-006 1319147990.7537870 + 1.0234346999999999E-006 1258830492.3210196 + 1.0439033000000000E-006 1201271392.3003054 + 1.0647814000000000E-006 1146343809.2271917 + 1.0860770000000001E-006 1093927913.9954834 + 1.1077986000000000E-006 1043908507.3660606 + 1.1299546000000000E-006 996176286.85680950 + 1.1525536000000000E-006 950626834.44310856 + 1.1756046999999999E-006 907159876.11715174 + 1.1991168000000000E-006 865680462.29182279 + 1.2230990999999999E-006 826097740.43104613 + 1.2475611000000001E-006 788324832.95741260 + 1.2725124000000000E-006 752278989.66656435 + 1.2979626000000000E-006 717881495.07573700 + 1.3239218000000000E-006 685056808.51713252 + 1.3504003000000001E-006 653732876.48902380 + 1.3774083000000000E-006 623841294.32597458 + 1.4049565000000001E-006 595316448.27911973 + 1.4330556000000000E-006 568095947.99357510 + 1.4617166999999999E-006 542120072.91482520 + 1.4909509999999999E-006 517331948.33869046 + 1.5207701000000001E-006 493677158.38076752 + 1.5511855000000000E-006 471104033.88979679 + 1.5822092000000000E-006 449563058.84410787 + 1.6138532999999999E-006 429007079.48189741 + 1.6461304000000000E-006 409390938.55344498 + 1.6790529999999999E-006 390671759.68748778 + 1.7126340999999999E-006 372808480.38837469 + 1.7468867999999999E-006 355762001.91272759 + 1.7818245000000000E-006 339494989.49936914 + 1.8174609999999999E-006 323971757.16301894 + 1.8538102000000001E-006 309158328.49890012 + 1.8908864000000000E-006 295022229.57686782 + 1.9287040999999999E-006 281532504.44340748 + 1.9672781999999999E-006 268659574.38621789 + 2.0066237999999999E-006 256375247.11991504 + 2.0467562999999999E-006 244652618.30817631 + 2.0876914000000001E-006 233466014.11792561 + 2.1294452000000000E-006 222790911.53514940 + 2.1720341000000002E-006 212603916.32905811 + 2.2154747999999999E-006 202882711.27109835 + 2.2597843000000002E-006 193606006.22004980 + 2.3049799999999998E-006 184753471.74274507 + 2.3510795999999999E-006 176305717.35163444 + 2.3981012000000001E-006 168244230.71487257 + 2.4460632000000001E-006 160551356.33877766 + 2.4949844999999999E-006 153210225.59394935 + 2.5448841999999998E-006 146204768.03206238 + 2.5957817999999998E-006 139519643.32072857 + 2.6476974999999999E-006 133140174.11938395 + 2.7006514000000001E-006 127052415.91807871 + 2.7546645000000000E-006 121243004.17869684 + 2.8097577000000001E-006 115699240.95055012 + 2.8659529000000000E-006 110408950.41497400 + 2.9232720000000001E-006 105360556.20958902 + 2.9817373999999999E-006 100543003.90697807 + 3.0413720999999998E-006 95945732.025454387 + 3.1021996000000000E-006 91558660.330692887 + 3.1642435999999999E-006 87372188.689579099 + 3.2275284000000001E-006 83377146.149690047 + 3.2920789999999998E-006 79564768.593441397 + 3.3579205999999998E-006 75926710.726433173 + 3.4250790000000001E-006 72455002.798176125 + 3.4935805999999998E-006 69142035.336683005 + 3.5634522000000001E-006 65980553.011830956 + 3.6347211999999999E-006 62963629.066042639 + 3.7074157000000001E-006 60084647.650260292 + 3.7815640000000002E-006 57337309.543459058 + 3.8571953000000004E-006 54715590.843328290 + 3.9343391999999996E-006 52213749.695231773 + 4.0130259999999998E-006 49826303.246465102 + 4.0932865000000000E-006 47548022.537930578 + 4.1751521999999997E-006 45373915.228200622 + 4.2586551999999997E-006 43299218.106943920 + 4.3438283000000004E-006 41319384.440037131 + 4.4307049000000002E-006 39430076.813855864 + 4.5193190000000004E-006 37627157.449836500 + 4.6097054000000002E-006 35906675.288457364 + 4.7018995000000001E-006 34264861.766135469 + 4.7959375000000002E-006 32698118.995765790 + 4.8918562000000001E-006 31203015.622155707 + 4.9896933999999996E-006 29776273.231380627 + 5.0894872000000003E-006 28414769.846710719 + 5.1912770000000002E-006 27115518.892308448 + 5.2951024999999997E-006 25875676.652969956 + 5.4010046000000002E-006 24692524.538084690 + 5.5090247000000003E-006 23563471.884270709 + 5.6192051999999997E-006 22486044.588703938 + 5.7315893000000000E-006 21457882.176173091 + 5.8462210000000000E-006 20476732.620486479 + 5.9631455000000000E-006 19540444.275454685 + 6.0824084000000004E-006 18646967.909491993 + 6.2040564999999998E-006 17794345.664688975 + 6.3281377000000004E-006 16980708.214339003 + 6.4547004000000000E-006 16204274.669385515 + 6.5837944000000004E-006 15463342.858892167 + 6.7154702999999997E-006 14756289.655807687 + 6.8497796999999997E-006 14081566.176669700 + 6.9867753000000004E-006 13437694.013588579 + 7.1265107999999997E-006 12823262.615790203 + 7.2690409999999998E-006 12236925.805970181 + 7.4144218999999999E-006 11677398.573602589 + 7.5627103000000001E-006 11143455.857292952 + 7.7139645000000006E-006 10633927.275331518 + 7.8682438000000008E-006 10147696.566777911 + 8.0256086999999997E-006 9683698.4616727829 + 8.1861208000000003E-006 9240916.6891116519 + 8.3498433000000000E-006 8818380.4708922599 + 8.5168401000000005E-006 8415164.8609299120 + 8.6871768999999992E-006 8030385.9205410350 + 8.8609204999999996E-006 7663200.6619232958 + 9.0381389000000008E-006 7312804.9003621889 + 9.2189016999999998E-006 6978430.7400451154 + 9.4032797000000007E-006 6659345.7570849862 + 9.5913453000000004E-006 6354850.6992041664 + 9.7831721999999997E-006 6064278.5343819205 + 9.9788356000000005E-006 5786992.6790467855 + 1.0178412000000000E-005 5522385.9118151022 + 1.0381981000000000E-005 5269876.8367677992 + 1.0589620000000001E-005 5028915.2126645660 + 1.0801413000000000E-005 4798970.1050369870 + 1.1017440999999999E-005 4579540.0007866398 + 1.1237790000000000E-005 4370142.8006480681 + 1.1462545000000001E-005 4170321.0297175515 + 1.1691795999999999E-005 3979635.2350405804 + 1.1925632000000001E-005 3797668.4666920146 + 1.2164145000000001E-005 3624021.8394446643 + 1.2407428000000001E-005 3458315.2988679176 + 1.2655576000000001E-005 3300186.0139632057 + 1.2908687999999999E-005 3149286.4837214323 + 1.3166862000000000E-005 3005286.9024010641 + 1.3430199000000000E-005 2867871.8753652950 + 1.3698803000000000E-005 2736739.9479724532 + 1.3972779000000000E-005 2611603.9931547828 + 1.4252235000000000E-005 2492189.6136763925 + 1.4537279000000000E-005 2378235.8379557426 + 1.4828024999999999E-005 2269492.1153841284 + 1.5124585000000000E-005 2165720.9628725541 + 1.5427077000000000E-005 2066694.4265082360 + 1.5735619000000001E-005 1972195.7853850159 + 1.6050330999999999E-005 1882018.2856032588 + 1.6371338000000001E-005 1795963.9004598274 + 1.6698764000000002E-005 1713844.5889679128 + 1.7032740000000000E-005 1635479.7917542397 + 1.7373393999999999E-005 1560698.5167169769 + 1.7720862000000001E-005 1489336.3818411003 + 1.8075280000000002E-005 1421237.1255185530 + 1.8436784999999998E-005 1356251.9170877561 + 1.8805520999999999E-005 1294237.9695006604 + 1.9181631000000001E-005 1235059.6895512016 + 1.9565263999999999E-005 1178587.1870778245 + 1.9956569000000000E-005 1124696.9509151909 + 2.0355700999999998E-005 1073270.7029168624 + 2.0762815000000002E-005 1024195.9722807186 + 2.1178071000000000E-005 977365.18812400894 + 2.1601632000000001E-005 932675.72676108195 + 2.2033665000000000E-005 890029.58990739926 + 2.2474338000000000E-005 849333.48640435957 + 2.2923825000000001E-005 810498.14363984112 + 2.3382301000000001E-005 773438.58549524425 + 2.3849946999999999E-005 738073.51840637717 + 2.4326946000000002E-005 704325.49457770202 + 2.4813485000000001E-005 672120.58025205252 + 2.5309755000000000E-005 641388.20567062881 + 2.5815950000000001E-005 612061.07615932985 + 2.6332269000000000E-005 584074.90852185700 + 2.6858914999999999E-005 557368.36302855529 + 2.7396093000000001E-005 531883.00439070247 + 2.7944015000000000E-005 507562.93042676145 + 2.8502895000000001E-005 484354.89703530917 + 2.9072952999999999E-005 462208.02280674933 + 2.9654412000000001E-005 441073.80851015908 + 3.0247500000000001E-005 420905.95073286624 + 3.0852450000000000E-005 401660.24962004879 + 3.1469498999999998E-005 383294.54800707957 + 3.2098889000000002E-005 365768.60782600328 + 3.2740867000000000E-005 349044.02689875313 + 3.3395683999999999E-005 333084.18215294968 + 3.4063597999999998E-005 317854.07772982976 + 3.4744869999999998E-005 303320.36798482563 + 3.5439767000000002E-005 289451.21293872269 + 3.6148563000000000E-005 276216.19802248740 + 3.6871534000000001E-005 263586.36344363284 + 3.7608965000000003E-005 251534.01187652227 + 3.8361144000000001E-005 240032.75721127572 + 3.9128366999999999E-005 229057.38518446503 + 3.9910933999999997E-005 218583.86228548523 + 4.0709152999999998E-005 208589.22738368998 + 4.1523336000000001E-005 199051.59639622536 + 4.2353803000000003E-005 189950.06489815947 + 4.3200878999999998E-005 181264.69964266196 + 4.4064896000000001E-005 172976.47288255283 + 4.4946193999999997E-005 165067.21481268876 + 4.5845118000000002E-005 157519.60309820992 + 4.6762019999999999E-005 150317.10563231463 + 4.7697261000000002E-005 143443.93153248174 + 4.8651206000000002E-005 136885.03540384132 + 4.9624230000000000E-005 130626.04059658188 + 5.0616715000000000E-005 124653.23192424838 + 5.1629048999999997E-005 118953.53071920716 + 5.2661629999999999E-005 113514.44359218581 + 5.3714863000000002E-005 108324.05402841966 + 5.4789159999999998E-005 103370.99534595871 + 5.5884943000000002E-005 98644.412311095992 + 5.7002641999999997E-005 94133.948388619712 + 5.8142695000000001E-005 89829.723005431762 + 5.9305548999999997E-005 85722.306283478480 + 6.0491659999999999E-005 81802.699285230250 + 6.1701493000000006E-005 78062.314897604520 + 6.2935523000000004E-005 74492.956605586558 + 6.4194233000000006E-005 71086.806926364516 + 6.5478118000000002E-005 67836.399595407667 + 6.6787680000000003E-005 64734.617071938694 + 6.8123433999999999E-005 61774.660225477834 + 6.9485902000000004E-005 58950.048055397834 + 7.0875620000000004E-005 56254.588485216016 + 7.2293133000000004E-005 53682.376245656778 + 7.3738995999999996E-005 51227.777540072333 + 7.5213775000000006E-005 48885.416028320309 + 7.6718051000000006E-005 46650.155622935745 + 7.8252412000000003E-005 44517.102057208998 + 7.9817460000000003E-005 42481.581505754570 + 8.1413808999999994E-005 40539.133986816698 + 8.3042086000000004E-005 38685.502709762957 + 8.4702926999999999E-005 36916.629383039734 + 8.6396985999999995E-005 35228.635663673311 + 8.8124925999999998E-005 33617.824751977991 + 8.9887424000000002E-005 32080.668007057582 + 9.1685173000000000E-005 30613.796087803417 + 9.3518876000000004E-005 29213.996858227081 + 9.5389254000000006E-005 27878.202032182500 + 9.7297038999999994E-005 26603.486100990729 + 9.9242979000000001E-005 25387.056296952607 + 1.0122784000000000E-004 24226.245826690531 + 1.0325239999999999E-004 23118.511907098316 + 1.0531744000000000E-004 22061.434187145624 + 1.0742379000000001E-004 21052.686268415113 + 1.0957227000000001E-004 20090.061547655005 + 1.1176371000000000E-004 19171.456341886540 + 1.1399899000000000E-004 18294.849481054789 + 1.1627897000000000E-004 17458.327132412986 + 1.1860455000000000E-004 16660.054195544297 + 1.2097664000000001E-004 15898.282375265315 + 1.2339617000000001E-004 15171.342669353615 + 1.2586408999999999E-004 14477.642006433896 + 1.2838138000000000E-004 13815.657428149610 + 1.3094900000000000E-004 13183.945637516810 + 1.3356798000000000E-004 12581.116723967780 + 1.3623933999999999E-004 12005.851759216137 + 1.3896412999999999E-004 11456.889939716984 + 1.4174340999999999E-004 10933.030204674744 + 1.4457827999999999E-004 10433.122897617906 + 1.4746985000000000E-004 9956.0731913299514 + 1.5041923999999999E-004 9500.8380764484391 + 1.5342763000000001E-004 9066.4165742123387 + 1.5649618000000001E-004 8651.8598306724380 + 1.5962610000000001E-004 8256.2585744065291 + 1.6281862999999999E-004 7878.7446204035850 + 1.6607500000000001E-004 7518.4934844581639 + 1.6939650000000000E-004 7174.7143625408125 + 1.7278443000000001E-004 6846.6543581034957 + 1.7624011999999999E-004 6533.5946006210788 + 1.7976491999999999E-004 6234.8496538734908 + 1.8336021999999999E-004 5949.7643415035282 + 1.8702742000000001E-004 5677.7148422901691 + 1.9076797000000000E-004 5418.1042386559257 + 1.9458333000000000E-004 5170.3642617921560 + 1.9847500000000001E-004 4933.9519018229212 + 2.0244450000000001E-004 4708.3495711127734 + 2.0649338999999999E-004 4493.0627871997895 + 2.1062326000000000E-004 4287.6197713872743 + 2.1483571999999999E-004 4091.5708682275231 + 2.1913242999999999E-004 3904.4861478461448 + 2.2351508000000001E-004 3725.9555373309636 + 2.2798539000000001E-004 3555.5878891576617 + 2.3254509000000001E-004 3393.0107901952560 + 2.3719599000000000E-004 3237.8672318796284 + 2.4193991000000001E-004 3089.8174656635324 + 2.4677871000000000E-004 2948.5371523035915 + 2.5171428999999998E-004 2813.7167033104624 + 2.5674857000000000E-004 2685.0611445267027 + 2.6188353999999998E-004 2562.2881823134712 + 2.6712121999999998E-004 2445.1287164017031 + 2.7246364000000001E-004 2333.3265931216993 + 2.7791291000000000E-004 2226.6365271332370 + 2.8347117000000001E-004 2124.8247222291452 + 2.8914058999999999E-004 2027.6682967325241 + 2.9492340999999998E-004 1934.9541131481556 + 3.0082186999999999E-004 1846.4794830622891 + 3.0683830999999999E-004 1762.0501537185794 + 3.1297508000000001E-004 1681.4812979950680 + 3.1923458000000001E-004 1604.5964775505568 + 3.2561926999999998E-004 1531.2271735244158 + 3.3213166000000001E-004 1461.2125763080928 + 3.3877429000000000E-004 1394.3994383564398 + 3.4554977999999998E-004 1330.6412261985129 + 3.5246076999999998E-004 1269.7984105041310 + 3.5950998999999999E-004 1211.7375158246011 + 3.6670019000000002E-004 1156.3314598176823 + 3.7403418999999998E-004 1103.4588443940845 + 3.8151487000000000E-004 1053.0037993354442 + 3.8914517000000000E-004 1004.8557439839823 + 3.9692807000000000E-004 958.90926817138632 + 4.0486663999999997E-004 915.06360504680390 + 4.1296397000000000E-004 873.22282170206813 + 4.2122325000000001E-004 833.29516897294911 + 4.2964771000000000E-004 795.19321177104700 + 4.3824066999999998E-004 758.83340065720188 + 4.4700548000000003E-004 724.13615948878828 + 4.5594559000000000E-004 691.02541664890100 + 4.6506450000000001E-004 659.42865250192358 + 4.7436579000000002E-004 629.27662754348455 + 4.8385311000000001E-004 600.50327555720492 + 4.9353017000000002E-004 573.04558821081014 + 5.0340077000000005E-004 546.84339171685224 + 5.1346878999999998E-004 521.83925698704104 + 5.2373815999999995E-004 497.97844708202007 + 5.3421293000000003E-004 475.20863272687154 + 5.4489719000000002E-004 453.47996756245192 + 5.5579513000000001E-004 432.74484388859719 + 5.6691103000000001E-004 412.95782013318836 + 5.7824924999999995E-004 394.07554406959622 + 5.8981424000000005E-004 376.05664154394248 + 6.0161052000000002E-004 358.86165810382306 + 6.1364272999999997E-004 342.45289987060636 + 6.2591559000000003E-004 326.79441621993942 + 6.3843389999999997E-004 311.85191713956726 + 6.5120257999999999E-004 297.59265167353175 + 6.6422663000000005E-004 283.98538732020444 + 6.7751116000000001E-004 271.00030875774297 + 6.9106139000000004E-004 258.60895752742181 + 7.0488261000000005E-004 246.78420673106629 + 7.1898027000000004E-004 235.50012387696981 + 7.3335987000000004E-004 224.73200967541163 + 7.4802707000000000E-004 214.45625610250985 + 7.6298760999999997E-004 204.65035857094162 + 7.7824736000000000E-004 195.29283091255718 + 7.9381231000000003E-004 186.36316835613906 + 8.0968855000000000E-004 177.84181467609744 + 8.2588232999999999E-004 169.71008776841461 + 8.4239997000000000E-004 161.95018711420093 + 8.5924796999999997E-004 154.54510055106095 + 8.7643292999999998E-004 147.47860765768473 + 8.9396159000000000E-004 140.73522612058639 + 9.1184082000000000E-004 134.30018326835051 + 9.3007764000000001E-004 128.15937752913058 + 9.4867919000000002E-004 122.29935890304898 + 9.6765277000000001E-004 116.70728674919727 + 9.8700582999999994E-004 111.37090681021482 + 1.0067459000000000E-003 106.27854285962243 + 1.0268809000000001E-003 101.41899378289264 + 1.0474185000000000E-003 96.781668078947419 + 1.0683668999999999E-003 92.356371572505694 + 1.0897342000000000E-003 88.133432785485070 + 1.1115289000000000E-003 84.103575515231697 + 1.1337595000000000E-003 80.257980503515171 + 1.1564346000000000E-003 76.588241049170264 + 1.1795632999999999E-003 73.086283225151718 + 1.2031546000000001E-003 69.744447078952007 + 1.2272177000000001E-003 66.555418245317071 + 1.2517620000000000E-003 63.512213566317371 + 1.2767973000000000E-003 60.608144595986715 + 1.3023332000000000E-003 57.836874196360156 + 1.3283799000000001E-003 55.192310302517157 + 1.3549475000000000E-003 52.668671038432279 + 1.3820464000000000E-003 50.260428320124269 + 1.4096874000000001E-003 47.962291133764388 + 1.4378811000000000E-003 45.769244451627792 + 1.4666386999999999E-003 43.676471602128551 + 1.4959715000000000E-003 41.679386419660766 + 1.5258909000000001E-003 39.773620458543157 + 1.5564088000000001E-003 37.954988056748043 + 1.5875368999999999E-003 36.219520481762594 + 1.6192877000000001E-003 34.563399012652916 + 1.6516733999999999E-003 32.983008494777621 + 1.6847069000000001E-003 31.474876533747612 + 1.7184010000000000E-003 30.035706087859037 + 1.7527691000000000E-003 28.662336284402915 + 1.7878244000000001E-003 27.351769142616142 + 1.8235809000000001E-003 26.101123618430815 + 1.8600526000000000E-003 24.907661005447931 + 1.8972536000000000E-003 23.768772972227683 + 1.9351987000000000E-003 22.681957673830212 + 1.9739025999999998E-003 21.644839122059562 + 2.0133807000000002E-003 20.655139183383611 + 2.0536483000000000E-003 19.710694230172933 + 2.0947213000000000E-003 18.809432481785571 + 2.1366156999999999E-003 17.949381685655915 + 2.1793479999999998E-003 17.128655999701149 + 2.2229350000000001E-003 16.345456604863337 + 2.2673937000000002E-003 15.598069281538553 + 2.3127415999999999E-003 14.884855451231967 + 2.3589964000000001E-003 14.204253795047784 + 2.4061763000000000E-003 13.554772205764143 + 2.4542997999999999E-003 12.934987768514379 + 2.5033858000000002E-003 12.343542275133615 + 2.5534536000000000E-003 11.779139443544361 + 2.6045225999999999E-003 11.240545281847178 + 2.6566131000000000E-003 10.726576859973671 + 2.7097453000000001E-003 10.236110382515051 + 2.7639402000000000E-003 9.7680697210320773 + 2.8192191000000000E-003 9.3214291697803997 + 2.8756034000000001E-003 8.8952123706270250 + 2.9331155000000002E-003 8.4884832896086770 + 2.9917778000000000E-003 8.1003519626672364 + 3.0516134000000000E-003 7.7299674072682985 + 3.1126456000000000E-003 7.3765191332292943 + 3.1748985000000000E-003 7.0392317758868712 + 3.2383964999999999E-003 6.7173664937951703 + 3.3031644000000001E-003 6.4102186154783594 + 3.3692277000000001E-003 6.1171147219338406 + 3.4366123000000000E-003 5.8374127147768213 + 3.5053444999999998E-003 5.5705002911118102 + 3.5754514000000000E-003 5.3157920881015999 + 3.6469605000000000E-003 5.0727300810660143 + 3.7198996999999998E-003 4.8407822225644503 + 3.7942977000000001E-003 4.6194400088394785 + 3.8701835999999999E-003 4.4082187127596653 + 3.9475873000000003E-003 4.2066551825077063 + 4.0265390000000000E-003 4.0143082164439088 + 4.1070697999999999E-003 3.8307560609345042 + 4.1892112000000000E-003 3.6555967659571129 + 4.2729954000000001E-003 3.4884465912339926 + 4.3584553000000003E-003 3.3289392381115874 + 4.4456243999999997E-003 3.1767252691340784 + 4.5345369000000003E-003 3.0314711740842135 + 4.6252276999999998E-003 2.8928586727996413 + 4.7177321999999997E-003 2.7605843212152279 + 4.8120869000000000E-003 2.6343579964901789 + 4.9083286000000002E-003 2.5139034221241814 + 5.0064951999999998E-003 2.3989564912028905 + 5.1066250999999997E-003 2.2892654836967314 + 5.2087575999999998E-003 2.1845900369193556 + 5.3129327000000000E-003 2.0847008657056882 + 5.4191914000000004E-003 1.9893789857592377 + 5.5275751999999999E-003 1.8984157110153121 + 5.6381267000000001E-003 1.8116116637319581 + 5.7508893000000000E-003 1.7287766355627836 + 5.8659070000000001E-003 1.6497292989845691 + 5.9832252000000001E-003 1.5742962656613595 + 6.1028897000000000E-003 1.5023124071719436 + 6.2249475000000004E-003 1.4336199668291105 + 6.3494464000000000E-003 1.3680684806020620 + 6.4764354000000001E-003 1.3055142415118048 + 6.6059641000000002E-003 1.2458202994772352 + 6.7380833999999999E-003 1.1888558204819208 + 6.8728449999999998E-003 1.1344960459591205 + 7.0103018999999999E-003 1.0826218165777304 + 7.1505079999999999E-003 1.0331194879160142 + 7.2935181000000002E-003 0.98588066702327803 + 7.4393884999999996E-003 0.94080178566405215 + 7.5881762000000004E-003 0.89778414327704192 + 7.7399397999999998E-003 0.85673342012589626 + 7.8947385999999994E-003 0.81755973839638596 + 8.0526333000000005E-003 0.78017726996665782 + 8.2136859999999996E-003 0.74450407132540453 + 8.3779596999999997E-003 0.71046202200441488 + 8.5455189000000001E-003 0.67797652229419658 + 8.7164293000000000E-003 0.64697640195123329 + 8.8907579000000007E-003 0.61739374723079110 + 9.0685729999999999E-003 0.58916375490534367 + 9.2499444999999993E-003 0.56222454926777399 + 9.4349433999999996E-003 0.53651712898530080 + 9.6236423000000005E-003 0.51198516418139162 + 9.8161150999999999E-003 0.48857491980491274 + 1.0012437000000001E-002 0.46623513528188409 + 1.0212686000000000E-002 0.44491675455937113 + 1.0416940000000000E-002 0.42457314521480627 + 1.0625279000000000E-002 0.40515974557793161 + 1.0837784000000000E-002 0.38663408029013380 + 1.1054540000000000E-002 0.36895541702612150 + 1.1275631000000000E-002 0.35208511174224882 + 1.1501143000000000E-002 0.33598624979032610 + 1.1731165999999999E-002 0.32062344789591679 + 1.1965790000000000E-002 0.30596306990135075 + 1.2205105000000001E-002 0.29197311621767125 + 1.2449207000000000E-002 0.27862280582629312 + 1.2698192000000001E-002 0.26588288341533961 + 1.2952155000000000E-002 0.25372556865646928 + 1.3211199000000000E-002 0.24212406279904539 + 1.3475422000000001E-002 0.23105310831302997 + 1.3744931000000000E-002 0.22048830640289663 + 1.4019830000000000E-002 0.21040658219779360 + 1.4300225999999999E-002 0.20078587286253557 + 1.4586231000000000E-002 0.19160503053986452 + 1.4877955000000000E-002 0.18284401027857561 + 1.5175513999999999E-002 0.17448356772390042 + 1.5479025000000000E-002 0.16650538092873565 + 1.5788605000000001E-002 0.15889202269364919 + 1.6104377000000000E-002 0.15162677156871154 + 1.6426465000000001E-002 0.14469370836805959 + 1.6754993999999999E-002 0.13807767123810727 + 1.7090094000000000E-002 0.13176414085294239 + 1.7431895999999999E-002 0.12573929343627163 + 1.7780534000000001E-002 0.11998992974505628 + 1.8136144000000000E-002 0.11450346406709788 + 1.8498866999999999E-002 0.10926785229966474 + 1.8868844999999999E-002 0.10427162915670114 + 1.9246222000000000E-002 9.9503863062363321E-002 + 1.9631145999999999E-002 9.4954106797128096E-002 + 2.0023769000000000E-002 9.0612379827296058E-002 + 2.0424244000000001E-002 8.6469180684827104E-002 + 2.0832729000000001E-002 8.2515422188434634E-002 + 2.1249384000000000E-002 7.8742444651995577E-002 + 2.1674371000000001E-002 7.5141993754831299E-002 + 2.2107859000000001E-002 7.1706161547957906E-002 + 2.2550015999999999E-002 6.8427436675349312E-002 + 2.3001015999999999E-002 6.5298630616325334E-002 + 2.3461037000000001E-002 6.2312881138150637E-002 + 2.3930257000000000E-002 5.9463662087143557E-002 + 2.4408862999999999E-002 5.6744712988084874E-002 + 2.4897039999999999E-002 5.4150092456364991E-002 + 2.5394981000000000E-002 5.1674107272516742E-002 + 2.5902880000000000E-002 4.9311338945007187E-002 + 2.6420938000000001E-002 4.7056602473489244E-002 + 2.6949357000000000E-002 4.4904963371035084E-002 + 2.7488344000000001E-002 4.2851708281143361E-002 + 2.8038111000000001E-002 4.0892336262560322E-002 + 2.8598873000000000E-002 3.9022556611212483E-002 + 2.9170850000000002E-002 3.7238272318929865E-002 + 2.9754267000000001E-002 3.5535572092807909E-002 + 3.0349352999999999E-002 3.3910725184354645E-002 + 3.0956339999999999E-002 3.2360175432256826E-002 + 3.1575467000000003E-002 3.0880523131259750E-002 + 3.2206975999999998E-002 2.9468528344714199E-002 + 3.2851115000000000E-002 2.8121096586458158E-002 + 3.3508138000000000E-002 2.6835273054267930E-002 + 3.4178300000000002E-002 2.5608245788794195E-002 + 3.4861865999999998E-002 2.4437322349806948E-002 + 3.5559104000000001E-002 2.3319937707785655E-002 + 3.6270285999999999E-002 2.2253646054815338E-002 + 3.6995691999999997E-002 2.1236109527015865E-002 + 3.7735604999999998E-002 2.0265100761680453E-002 + 3.8490318000000003E-002 1.9338488721918529E-002 + 3.9260124000000000E-002 1.8454246994097888E-002 + 4.0045325999999999E-002 1.7610436848660517E-002 + 4.0846233000000003E-002 1.6805208509125601E-002 + 4.1663157999999999E-002 1.6036798964303569E-002 + 4.2496421000000000E-002 1.5303524984133326E-002 + 4.3346348999999999E-002 1.4603779765287841E-002 + 4.4213276000000003E-002 1.3936029675589538E-002 + 4.5097541999999997E-002 1.3298811783992724E-002 + 4.5999492000000003E-002 1.2690731225357922E-002 + 4.6919481999999998E-002 1.2110454181294502E-002 + 4.7857872000000003E-002 1.1556709889269892E-002 + 4.8815029000000003E-002 1.1028285701586156E-002 + 4.9791330000000002E-002 1.0524022984196546E-002 + 5.0787156999999999E-002 1.0042817434779193E-002 + 5.1802899999999999E-002 9.5836150019858683E-003 + 5.2838957999999998E-002 9.1454092949484790E-003 + 5.3895736999999999E-002 8.7272403727407643E-003 + 5.4973651999999998E-002 8.3281918480295827E-003 + 5.6073125000000001E-002 7.9473897114159184E-003 + 5.7194586999999998E-002 7.5839996939896194E-003 + 5.8338478999999999E-002 7.2372252589365579E-003 + 5.9505247999999997E-002 6.9063071362134047E-003 + 6.0695353000000000E-002 6.5905198996111438E-003 + 6.1909260000000001E-002 6.2891718912211131E-003 + 6.3147445999999996E-002 6.0016026666124779E-003 + 6.4410394999999995E-002 5.7271825549078349E-003 + 6.5698601999999995E-002 5.4653103507859195E-003 + 6.7012575000000005E-002 5.2154117605065871E-003 + 6.8352826000000005E-002 4.9769399134100556E-003 + 6.9719882999999996E-002 4.7493719014593400E-003 + 7.1114280000000002E-002 4.5322094926857652E-003 + 7.2536565999999997E-002 4.3249765639462086E-003 + 7.3987296999999994E-002 4.1272193494821408E-003 + 7.5467042999999998E-002 3.9385044288789148E-003 + 7.6976383999999995E-002 3.7584183891924239E-003 + 7.8515911999999993E-002 3.6022923901546607E-003 + 8.0086229999999994E-002 3.4312226207997448E-003 + 8.1687953999999993E-002 3.2692767414769096E-003 + 8.3321714000000005E-002 3.1158494908371383E-003 + 8.4988147999999999E-002 2.9703864529170964E-003 + 8.6687911000000006E-002 2.8323783456352821E-003 + 8.8421668999999994E-002 2.7013572414019589E-003 + 9.0190101999999994E-002 2.5768924155658555E-003 + 9.1993904000000001E-002 2.4585868899378942E-003 + 9.3833782000000004E-002 2.3460743772041044E-003 + 9.5710457999999998E-002 2.2390163545490840E-003 + 9.7624666999999998E-002 2.1370996669088666E-003 + 9.9577160999999997E-002 2.0400340514368045E-003 + 0.10156870000000000 1.9475505385187220E-003 + 0.10360008000000000 1.8593983413995490E-003 + 0.10567208000000000 1.7753455727625407E-003 + 0.10778552000000000 1.6951751804403542E-003 + 0.10994123000000000 1.6186849907224247E-003 + 0.11214006000000000 1.5456860881903436E-003 + 0.11438286000000000 1.4760023440242560E-003 + 0.11667051000000001 1.4094684066654184E-003 + 0.11900392000000000 1.3459289274486048E-003 + 0.12138400000000001 1.2852385829002393E-003 + 0.12381167999999999 1.2272607135139098E-003 + 0.12628792000000000 1.1718664511931147E-003 + 0.12881368000000001 1.1189347945696182E-003 + 0.13138995000000001 1.0683513525400652E-003 + 0.13401774999999999 1.0200079120643857E-003 + 0.13669809999999999 9.7380253343640731E-004 + 0.13943206000000000 9.2963839340060115E-004 + 0.14222071000000000 8.8742379783392558E-004 + 0.14506511999999999 8.4707223594697630E-004 + 0.14796641999999999 8.0850102094817287E-004 + 0.15092575000000000 7.7163177140573275E-004 + 0.15394426999999999 7.3638997871478169E-004 + 0.15702315000000000 7.0270486034572138E-004 + 0.16016361000000001 6.7050869799272644E-004 + 0.16336688999999999 6.3973700224614330E-004 + 0.16663422000000000 6.1032857068573038E-004 + 0.16996691000000000 5.8222448460980715E-004 + 0.17336625000000000 5.5536886846663117E-004 + 0.17683357000000000 5.2970819578543012E-004 + 0.18037023999999999 5.0519119375514745E-004 + 0.18397764999999999 4.8176887581484088E-004 + 0.18765720000000000 4.5939447056862884E-004 + 0.19141035000000001 4.3802300797355341E-004 + 0.19523855000000001 4.1761164308140933E-004 + 0.19914332000000001 3.9811911209959409E-004 + 0.20312619000000001 3.7950598739073713E-004 + 0.20718871000000000 3.6173452482926675E-004 + 0.21133249000000001 3.4476841875036155E-004 + 0.21555914000000001 3.2857299517820217E-004 + 0.21987032000000001 3.1311493426204698E-004 + 0.22426773000000000 2.9836226483885103E-004 + 0.22875308000000000 2.8428440631552798E-004 + 0.23332813999999999 2.7085194914668525E-004 + 0.23799471000000000 2.5803670987304441E-004 + 0.24275459999999999 2.4581172768853592E-004 + 0.24760968999999999 2.3415105893045062E-004 + 0.25256189000000001 2.2302984856593586E-004 + 0.25761311999999997 2.1242432380356169E-004 + 0.26276538999999999 2.0231158459034257E-004 + 0.26802069000000001 1.9266979537351951E-004 + 0.27338110999999998 1.8347791410466458E-004 + 0.27884872999999999 1.7471586345250523E-004 + 0.28442570000000000 1.6636435462571839E-004 + 0.29011421999999998 1.5840489812491947E-004 + 0.29591650000000003 1.5081982721019420E-004 + 0.30183483000000000 1.4359217184703056E-004 + 0.30787153000000000 1.3670570105455112E-004 + 0.31402896000000002 1.3014487962213775E-004 + 0.32030954000000000 1.2389482107831142E-004 + 0.32671572999999998 1.1794128528848531E-004 + 0.33325004000000003 1.1227064347966266E-004 + 0.33991505000000000 1.0686983986372273E-004 + 0.34671334999999998 1.0172641843476733E-004 + 0.35364761000000000 9.6828443111989703E-005 + 0.36072057000000002 9.2164490407483672E-005 + 0.36793498000000002 8.7723668450142203E-005 + 0.37529368000000002 8.3495543838788171E-005 + 0.38279954999999999 7.9470155823599205E-005 + 0.39045553999999999 7.5637980636287269E-005 + 0.39826465000000000 7.1989925113976138E-005 + 0.40622994000000001 6.8517304163223913E-005 + 0.41435453999999999 6.5211820616685806E-005 + 0.42264162999999999 6.2065558015812156E-005 + 0.43109447000000001 5.9070953554498873E-005 + 0.43971635999999997 5.6220798193003670E-005 + 0.44851067999999999 5.3508207777286272E-005 + 0.45748090000000002 5.0926608275832156E-005 + 0.46663051999999999 4.8469740289257595E-005 + 0.47596313000000001 4.6131628274601184E-005 + 0.48548238999999999 4.3906574661578607E-005 + 0.49519204000000000 4.1789145907399948E-005 + 0.50509588000000005 3.9774165616429312E-005 + 0.51519778999999999 3.7856698982543942E-005 + 0.52550174999999999 3.6032039261292469E-005 + 0.53601178000000005 3.4295708608746228E-005 + 0.54673201999999999 3.2643434299722012E-005 + 0.55766665999999998 3.1071151297384975E-005 + 0.56881999000000005 2.9574985244511821E-005 + 0.58019639000000001 2.8151245921697637E-005 + 0.59180032000000005 2.6796420350683046E-005 + 0.60363633000000005 2.5507163561611956E-005 + 0.61570906000000003 2.4280291103886423E-005 + 0.62802323999999998 2.3112771794102293E-005 + 0.64058369999999998 2.2001719866302217E-005 + 0.65339537000000003 2.0944388517727065E-005 + 0.66646327999999999 1.9938163654314873E-005 + 0.67979255000000005 1.8980558530682307E-005 + 0.69338840000000002 1.8069207033326317E-005 + 0.70725616999999996 1.7201856875192841E-005 + 0.72140128999999997 1.6376366311965109E-005 + 0.73582932000000001 1.5590696617540340E-005 + 0.75054589999999999 1.4842910078118326E-005 + 0.76555682000000003 1.4131161615913417E-005 + 0.78086796000000003 1.3453697522968135E-005 + 0.79648532000000005 1.2808849637618633E-005 + 0.81241501999999999 1.2195031346478809E-005 + 0.82866331999999998 1.1610733050584085E-005 + 0.84523658999999995 1.1054519666761100E-005 + 0.86214131999999999 1.0525026639626276E-005 + 0.87938415000000003 1.0020955679207626E-005 + 0.89697183000000003 9.5410728277409563E-006 + 0.91491127000000005 9.0842039817177521E-006 + 0.93320948999999997 8.6492333594888504E-006 + 0.95187368000000006 8.2350992297271437E-006 + 0.97091116000000000 7.8407923076613850E-006 + 0.99032938000000004 7.4653531495942172E-006 + 1.0101359999999999 7.1078682725896258E-006 + 1.0303386999999999 6.7674713418441464E-006 + 1.0509455000000001 6.4433353988246167E-006 + 1.0719643999999999 6.1346769090525625E-006 + 1.0934037000000001 5.8407486592846609E-006 + 1.1152717000000001 5.5608422672354001E-006 + 1.1375772000000000 5.2942799273487192E-006 + 1.1603287000000000 5.0404226807096867E-006 + 1.1835353000000000 4.7986579513811851E-006 + 1.2072060000000000 4.5684061438820748E-006 + 1.2313501000000000 4.3491147343732399E-006 + 1.2559771000000000 4.1402581002204751E-006 + 1.2810967000000000 3.9413362423637700E-006 + 1.3067186000000000 3.7518749861046138E-006 + 1.3328530000000001 3.5714209910923866E-006 + 1.3595100000000000 3.3995450844682388E-006 + 1.3867001999999999 3.2358370349092847E-006 + 1.4144342000000001 3.0799078641003735E-006 + 1.4427228999999999 2.9313869466316141E-006 + 1.4715773999999999 2.7899217281040942E-006 + 1.5010089000000000 2.6551772670741961E-006 + 1.5310291000000000 2.5268335737272809E-006 + 1.5616497000000000 2.4045871515327654E-006 + 1.5928827000000001 2.2881488476716760E-006 + 1.6247403000000000 2.1772435682696184E-006 + 1.6572351000000001 2.0716089373280299E-006 + 1.6903798000000001 1.9709957016289277E-006 + 1.7241873999999999 1.8751664189881942E-006 + 1.7586712000000000 1.7838949276976497E-006 + 1.7938445999999999 1.6969663077896142E-006 + 1.8297215000000000 1.6141753381465933E-006 + 1.8663159000000000 1.5353270155298157E-006 + 1.9036422000000000 1.4602353699085672E-006 + 1.9417150999999999 1.3887232860848904E-006 + 1.9805493999999999 1.3206224198964781E-006 + 2.0201604000000000 1.2557720535892756E-006 + 2.0605636000000001 1.1940192700385869E-006 + 2.1017747999999998 1.1352183991058157E-006 + 2.1438103000000002 1.0792304109036189E-006 + 2.1866865000000000 1.0259231517799499E-006 + 2.2304203000000000 9.7517048822484287E-007 + 2.2750287000000000 9.2685249717953427E-007 + 2.3205293000000000 8.8085461291098330E-007 + 2.3669397999999999 8.3706790542262777E-007 + 2.4142785999999998 7.9538823828433185E-007 + 2.4625642000000001 7.5571660682439918E-007 + 2.5118155000000000 7.1795860941770322E-007 + 2.5620517999999999 6.8202424150909173E-007 + 2.6132928000000000 6.4782769436210918E-007 + 2.6655587000000001 6.1528710290604083E-007 + 2.7188699000000001 5.8432454887356018E-007 + 2.7732473000000000 5.5486568620602606E-007 + 2.8287122000000000 5.2683963973580946E-007 + 2.8852864999999999 5.0017875135318330E-007 + 2.9429921999999999 4.7481866724102401E-007 + 3.0018520000000000 4.5069790456179084E-007 + 3.0618891000000001 4.2775782591244413E-007 + 3.1231268999999999 4.0594261569374603E-007 + 3.1855894000000000 3.8519899551149661E-007 + 3.2493012000000001 3.6547612161941246E-007 + 3.3142871999999999 3.4672556871512286E-007 + 3.3805730000000001 3.2890109871329619E-007 + 3.4481844000000001 3.1195869906256110E-007 + 3.5171481000000000 2.9585630064883208E-007 + 3.5874910999999998 2.8055384280017341E-007 + 3.6592408999999999 2.6601312763698079E-007 + 3.7324256999999998 2.5219769748557175E-007 + 3.8070742000000002 2.3907279902916152E-007 + 3.8832157000000000 2.2660528735736687E-007 + 3.9608800000000000 2.1476356942386979E-007 + 4.0400976000000002 2.0351750336750129E-007 + 4.1208996000000004 1.9283835048748273E-007 + 4.2033176000000001 1.8269872398046387E-007 + 4.2873839000000000 1.7307250173592538E-007 + 4.3731315999999998 1.6393476215019414E-007 + 4.4605942000000001 1.5526177371854186E-007 + 4.5498060999999996 1.4703088939026808E-007 + 4.6408022000000004 1.3922053790020964E-007 + 4.7336182999999998 1.3181014009141134E-007 + 4.8282905999999999 1.2478010539459352E-007 + 4.9248564000000004 1.1811173409699362E-007 + 5.0233536000000001 1.1178721674602573E-007 + 5.1238206000000002 1.0578959705457706E-007 + 5.2262971000000000 1.0010268658297935E-007 + 5.3308229999999996 9.4711094396125430E-008 + 5.4374395000000000 8.9600131083774358E-008 + 5.5461881999999996 8.4755823750441427E-008 + 5.6571119999999997 8.0164842292397229E-008 + 5.7702543000000004 7.5814506383632725E-008 + 5.8856593000000004 7.1692741682779182E-008 + 6.0033725000000002 6.7788036235637084E-008 + 6.1234400000000004 6.4089440353119546E-008 + 6.2459087999999996 6.0586530074846717E-008 + 6.3708270000000002 5.7269378335183679E-008 + 6.4982435000000001 5.4128541134981083E-008 + 6.6282084000000001 5.1155025714124698E-008 + 6.7607724999999999 4.8340282090247607E-008 + 6.8959880000000000 4.5676167704911064E-008 + 7.0339077000000003 4.3154945523871724E-008 + 7.1745859000000003 4.0769248354273071E-008 + 7.3180775999999996 3.8512076588258226E-008 + 7.4644392000000002 3.6376769680766525E-008 + 7.6137278999999998 3.4356999919806144E-008 + 7.7660024999999999 3.2446746131144812E-008 + 7.9213225999999999 3.0640290415178342E-008 + 8.0797489999999996 2.8932198610979322E-008 + 8.2413439999999998 2.7317304418008096E-008 + 8.4061708999999993 2.5790702366409486E-008 + 8.5742943000000000 2.4347732512357049E-008 + 8.7457802000000004 2.2983968354187342E-008 + 8.9206958000000007 2.1695207650757864E-008 + 9.0991096999999996 2.0477460325152658E-008 + 9.2810918999999998 1.9326938642103459E-008 + 9.4667136999999997 1.8240048294225797E-008 + 9.6560480000000002 1.7213377517830794E-008 + 9.8491689999999998 1.6243690201759347E-008 + 10.046151999999999 1.5327918151381987E-008 + 10.247075000000001 1.4463145917317794E-008 + 10.452017000000000 1.3646611659062357E-008 + 10.661057000000000 1.2875702506103728E-008 + 10.874278000000000 1.2147932399161688E-008 + 11.091764000000000 1.1460947819594073E-008 + 11.313599000000000 1.0812523391078608E-008 + 11.539871000000000 1.0200543647741965E-008 + 11.770669000000000 9.6230069745514478E-009 + 12.006081999999999 9.0780215504960070E-009 + 12.246204000000001 8.5637883250348497E-009 + 12.491128000000000 8.0786101429296585E-009 + 12.740950000000000 7.6208777192613472E-009 + 12.995768999999999 7.1890659978458325E-009 + 13.255685000000000 6.7817335244042287E-009 + 13.520797999999999 6.3975191008729669E-009 + 13.791214000000000 6.0351290961527149E-009 + 14.067038999999999 5.6933429562030971E-009 + 14.348379000000000 5.3710085726379308E-009 + 14.635346999999999 5.0670309067781817E-009 + 14.928053999999999 4.7803792527400868E-009 + 15.226615000000001 4.5100773028767143E-009 + 15.531147000000001 4.2552025150862812E-009 + 15.841770000000000 4.0148825020956005E-009 + 16.158605999999999 3.7882932784825927E-009 + 16.481777999999998 3.5746572710012221E-009 + 16.811413000000002 3.3732388284173237E-009 + 17.147642000000001 3.1833423468052765E-009 + 17.490594000000002 3.0043134261610007E-009 + 17.840406000000002 2.8355312663834403E-009 + 18.197213999999999 2.6764116173916283E-009 + 18.561159000000000 2.5264018946429973E-009 + 18.932382000000000 2.3849816339745919E-009 + 19.311029000000001 2.2516587310468632E-009 + 19.697250000000000 2.1259684941715491E-009 + 20.091194999999999 2.0074734302020766E-009 + 20.493019000000000 1.8957601407478390E-009 + 20.902878999999999 1.7904389478461058E-009 + 21.320937000000001 1.6911418271536741E-009 + 21.747356000000000 1.5975222152554887E-009 + 22.182303000000001 1.5092530890933402E-009 + 22.625948999999999 1.4260259491803929E-009 + 23.078468000000001 1.3475500091468277E-009 + 23.540037000000002 1.2735511943460025E-009 + 24.010838000000000 1.2037709103530324E-009 + 24.491054999999999 1.1379656506647364E-009 + 24.980875999999999 1.0759058410810340E-009 + 25.480492999999999 1.0173750803668472E-009 + 25.990103000000001 9.6216931142876283E-010 + 26.509905000000000 9.1009645923066965E-010 + 27.040102999999998 8.6097542861611026E-010 + 27.580905000000001 8.1463560222372053E-010 + 28.695174000000002 7.2966589031651737E-010 + 29.854458999999999 6.5401004871203844E-010 + 31.060579000000001 5.8662332610716834E-010 + 32.315427000000000 5.2657882156795515E-010 + 33.620970000000000 4.7305443767792211E-010 + 34.979256999999997 4.2532090882291807E-010 + 36.392418999999997 3.8273151116352206E-010 + 37.862673000000001 3.4471272458553628E-010 + 39.392325000000000 3.1075597040908430E-010 + 40.983775000000001 2.8041022558860062E-010 + 42.639519000000000 2.5327553160832373E-010 + 44.362155999999999 2.2899714203019620E-010 + 46.154387000000000 2.0726045398140483E-010 + 48.019024000000002 1.8778636715433720E-010 + 49.958993000000000 1.7032726118887742E-010 + 51.977336000000001 1.5466342475235416E-010 + 54.077219999999997 1.4059983475734602E-010 + 56.261940000000003 1.2796335776133195E-010 + 58.534922000000002 1.1660026189343760E-010 + 60.899732999999998 1.0637397901384812E-010 + 63.360081999999998 9.7163170260146996E-011 + 65.919830000000005 8.8859973981599563E-011 + 68.582991000000007 8.1368489040764416E-011 + 71.353744000000006 7.4603397767326091E-011 + 74.236435000000000 6.8488777741613896E-011 + 77.235586999999995 6.2957029531914039E-011 + 80.355905000000007 5.7947940028684915E-011 + 83.602283000000000 5.3407848706021217E-011 + 86.979815000000002 4.9288905282129231E-011 + 90.493799999999993 4.5548421668259681E-011 + 94.149749000000000 4.2148294372322209E-011 + 97.953399000000005 3.9054487437455199E-011 + 101.91072000000000 3.6236582365917923E-011 + 106.02791000000001 3.3667385383971742E-011 + 110.31144000000000 3.1322548711452861E-011 + 114.76802000000001 2.9180283178750872E-011 + 119.40465000000000 2.7221055805406316E-011 + 124.22859000000000 2.5427361505696765E-011 + 129.24743000000001 2.3783480138677208E-011 + 134.46903000000000 2.2275308356690163E-011 + 139.90156999999999 2.0890170792799357E-011 + 145.55359999999999 1.9616659415287865E-011 + 151.43396000000001 1.8444519687436268E-011 + 157.55189999999999 1.7364504962686349E-011 + 163.91699000000000 1.6368289658158696E-011 + 170.53924000000001 1.5448354644830361E-011 + 177.42902000000001 1.4597917400578771E-011 + 184.59716000000000 1.3810844104722072E-011 + 192.05488000000000 1.3081592553335565E-011 + 199.81389999999999 1.2405141601367561E-011 + 207.88638000000000 1.1776945459797219E-011 + 216.28498999999999 1.1192880863357955E-011 + 225.02289999999999 1.0649206747803399E-011 + 234.11383000000001 1.0142524046928303E-011 + 243.57203000000001 9.6697440056861121E-012 + 253.41234000000000 9.2280553832457931E-012 + 263.65019999999998 8.8148980034579494E-012 + 274.30166000000003 8.4279387996075459E-012 + 285.38344999999998 8.0650482906622494E-012 + 296.91293999999999 7.7242833523534219E-012 + 308.90823000000000 7.4038675178755780E-012 + 321.38812000000001 7.1021769571817967E-012 + 334.37220000000002 6.8177247317838258E-012 + 347.88083999999998 6.5491492274878016E-012 + 361.93522000000002 6.2952026998320719E-012 + 376.55739999999997 6.0547403892198138E-012 + 391.77032000000003 5.8267120333720584E-012 + 407.59784000000002 5.6101534932722536E-012 + 424.06479999999999 5.4041790417962714E-012 + 441.19702000000001 5.2079752198784723E-012 + 459.02136999999999 5.0207944374417017E-012 + 477.56583999999998 4.8419493641553783E-012 + 496.85950000000003 4.6708089196574999E-012 + 516.93262000000004 4.5067931301187465E-012 + 537.81669999999997 4.3350103125034375E-012 + 559.54449000000000 4.1650647877128398E-012 + 582.15008999999998 4.0022199906156007E-012 + 605.66895999999997 3.8458988079149174E-012 + 630.13797999999997 3.6955799275282834E-012 + 655.59555999999998 3.5507932426035585E-012 + 682.08162000000004 3.4111164729844574E-012 + 709.63770999999997 3.2761712877846989E-012 + 738.30708000000004 3.1456200991730542E-012 + 768.13468000000000 3.0191634079698438E-012 + 799.16732000000002 2.8965366444739648E-012 + 831.45367999999996 2.7775078844133395E-012 + 865.04440999999997 2.6618753227528650E-012 + 899.99221000000000 2.5494649743098607E-012 + 936.35189000000003 2.4401285420523291E-012 + 974.18051000000003 2.3337411277745463E-012 + 1013.5374000000000 2.2301993826574698E-012 + 1054.4843000000001 2.1294193560535412E-012 + 1097.0854999999999 2.0313344485513330E-012 + 1141.4077000000000 1.9358940287028195E-012 + 1187.5206000000001 1.8430604707869154E-012 + 1235.4964000000000 1.7528086174307183E-012 + 1285.4105000000000 1.6651227768555657E-012 + 1337.3411000000001 1.5799959523867731E-012 + 1391.3697000000000 1.4974274427972068E-012 + 1447.5809999999999 1.4174215901675241E-012 + 1506.0633000000000 1.3399858263733937E-012 + 1566.9082000000001 1.2651297928721501E-012 + 1630.2112999999999 1.1928632217994020E-012 + 1696.0717999999999 1.1231953394488761E-012 + 1764.5931000000000 1.0561331741664425E-012 + 1835.8827000000001 9.9168081231061112E-013 + 1910.0524000000000 9.2983842984609447E-013 + 1987.2184999999999 8.7060148211505633E-013 + 2067.5021000000002 8.1395998190553921E-013 + 2151.0291999999999 7.5989808799183736E-013 + 2237.9308000000001 7.0839380412722407E-013 + 2328.3431999999998 6.5941868776680804E-013 + 2422.4083000000001 6.1293772542875806E-013 + 2520.2734999999998 5.6890953121051755E-013 + 2622.0925999999999 5.2728619490771499E-013 + 2728.0250999999998 4.8801396173734828E-013 + 2838.2374000000000 4.5103319374642640E-013 + 2952.9020999999998 4.1627916085350289E-013 + 3072.1994000000000 3.8368217589230718E-013 + 3196.3162000000002 3.5316851866203663E-013 + 3325.4474000000000 3.2466075111523831E-013 + 3459.7955000000002 2.9807852989126127E-013 + 3599.5711999999999 2.7333916905142226E-013 + 3744.9938999999999 2.5035825868342118E-013 + 3896.2917000000002 2.2905035715304517E-013 + 4053.7017999999998 2.0932958189071832E-013 + 4217.4714000000004 1.9111012692213490E-013 + 4387.8572000000004 1.7430691477087417E-013 + 4565.1266999999998 1.5883599405911280E-013 + 4749.5577999999996 1.4461507414226649E-013 + 4941.4399000000003 1.3156386553664597E-013 + 5141.0740999999998 1.1960445593892954E-013 + 5348.7735000000002 1.0866161529690159E-013 + 5564.8639999999996 9.8663021395578856E-014 + 5789.6845000000003 8.9539469901704571E-014 + 6023.5877000000000 8.1225006195797373E-014 + 6266.9405999999999 7.3657029160501952E-014 + 6520.1251000000002 6.6776348749453348E-014 + 6783.5380999999998 6.0527216966835591E-014 + 7057.5929999999998 5.4857289114847534E-014 + 7342.7197999999999 4.9717594313488356E-014 + 7639.3657000000003 4.5062463630043374E-014 + 7947.9961000000003 4.0849431214398112E-014 + 8269.0951000000005 3.7039126944504290E-014 + 8603.1664999999994 3.3595147770735904E-014 + 8950.7345000000005 3.0483923118074751E-014 + 9312.3441000000003 2.7674573888566115E-014 + 9688.5627999999997 2.5138756108691086E-014 + 10079.981000000000 2.2850514290316272E-014 + 10487.212000000000 2.0786133585866365E-014 + 10910.895000000000 1.8923977856640371E-014 + 11351.696000000000 1.7244346290321227E-014 + 11810.304000000000 1.5729347235479436E-014 + 12287.440000000001 1.4362730528210602E-014 + 12783.852999999999 1.3129776245284544E-014 + 13300.321000000000 1.2017167368127060E-014 + 13837.654000000000 1.1012866596426995E-014 + 14396.695000000000 1.0106006572840395E-014 + 14978.321000000000 9.2867867341240056E-015 + 15583.445000000000 8.5463758174280703E-015 + 16213.017000000000 7.8768230343847488E-015 + 16868.022000000001 7.2709782203031616E-015 + 17549.491000000002 6.7224065125122176E-015 + 18258.490000000002 6.2253299982360160E-015 + 18996.133000000002 5.7745540290743498E-015 + 19763.577000000001 5.3654142688988730E-015 + 20562.025000000001 4.9937221940735513E-015 + 21392.731000000000 4.6557154134006144E-015 + 22256.996999999999 4.3480161615777856E-015 + 23156.180000000000 4.0675896048309341E-015 + 24091.689999999999 3.8117096112415683E-015 + 25064.993999999999 3.5779257644432805E-015 + 26077.619999999999 3.3640340249452290E-015 + 27131.155999999999 3.1680514581870478E-015 + 28227.254000000001 2.9881923819981091E-015 + 29367.634999999998 2.8228470667151590E-015 + 30554.088000000000 2.6705636121978543E-015 + 31788.473000000002 2.5300310463776182E-015 + 33072.726999999999 2.4000640310196475E-015 + 34408.864999999998 2.2795898796367450E-015 + 35798.983999999997 2.3913811981261564E-015 + 37245.262999999999 2.2452778320345745E-015 + 38749.970999999998 2.1116445392284188E-015 + 40315.470000000001 1.9889073395881336E-015 + 41944.214999999997 1.8756682859287949E-015 + 43638.760999999999 1.7706845196908967E-015 + 45401.767000000000 1.6728509691286447E-015 + 47235.999000000003 1.5811860493936842E-015 + 49144.332999999999 1.4948199595382982E-015 + 51129.764000000003 1.4129850420333424E-015 + 53195.406999999999 1.3350085506505829E-015 + 55344.500999999997 1.2603069468879770E-015 + 57580.419000000002 1.1883813989582614E-015 + 59906.667999999998 1.1188146994378623E-015 + 62326.896999999997 1.0512686000772998E-015 + 64844.904000000002 9.8548153797691524E-016 + 67464.638000000006 9.2126644028569005E-016 + 70190.209000000003 8.5850787903785407E-016 + 73025.894000000000 7.9715854536744735E-016 + 75976.139999999999 7.3723465610053916E-016 + 79045.576000000001 6.7880979188701792E-016 + 82239.017000000007 6.2200738173102105E-016 + 85561.472999999998 1.0000000000000001E-030 diff --git a/examples/quasimc-global/NonMareNonSpa-Highlands.csv b/examples/quasimc-global/NonMareNonSpa-Highlands.csv new file mode 100755 index 00000000..90092563 --- /dev/null +++ b/examples/quasimc-global/NonMareNonSpa-Highlands.csv @@ -0,0 +1,3686 @@ +"Diameters (km)" +628.67955670200 +603.12585544700 +582.28517772100 +549.39275684700 +417.13945337600 +401.55924920100 +393.54698604500 +359.05374574500 +333.28461135800 +330.79116162500 +315.76747197400 +308.09434150000 +299.35803327100 +265.18714504600 +255.76985416400 +252.19359601800 +250.89701250800 +241.64514558600 +240.78545453000 +231.69602083600 +229.96070021200 +226.91016017900 +221.89444258100 +221.56270492500 +220.89463781500 +220.53092785600 +218.80229048800 +210.02423941800 +207.02805836900 +205.51074799700 +205.00453447500 +204.08314886900 +193.63152767600 +187.09360562100 +185.44082106500 +185.05602771900 +184.82611176000 +184.13493829800 +180.65115410100 +180.08799743700 +177.40019817300 +176.98557032000 +174.79927604900 +174.75694179900 +173.02841163000 +170.71656137300 +169.86744279200 +169.38041783700 +169.07583791600 +168.69850593700 +167.70424078900 +166.98305214400 +166.28615528600 +163.89393525300 +163.33372574700 +162.59974346900 +161.11149431300 +160.93255629200 +160.12757637800 +159.48892607300 +156.97285364200 +153.83733947200 +153.58988061400 +153.20381601400 +153.10250583000 +151.16600036600 +151.04427927100 +149.05950380200 +148.22071283400 +148.10783197000 +147.96182884700 +146.46483237900 +145.76899719200 +145.74657949500 +144.06358080100 +141.10179047400 +139.33375894400 +139.23828245100 +138.34192742000 +138.02512451000 +137.36485961400 +136.92999267600 +136.58054755900 +135.42634857600 +135.30920263600 +135.10465379100 +133.52749486400 +133.24207628700 +129.98406193100 +129.81657670200 +129.76047752700 +129.61575016900 +129.36507164800 +128.99166549800 +128.69641557400 +128.50329913200 +128.49112803100 +128.09599304200 +127.72305963400 +126.97688736200 +126.30599975600 +125.72992305700 +125.46479068300 +125.15867528100 +124.83125999100 +124.29702801400 +124.07578245200 +124.00723744200 +123.62822061300 +123.59681167000 +123.31221209700 +123.16827514600 +123.07973255100 +123.06968740400 +123.05306558500 +123.00000000000 +122.97452734400 +122.95863099800 +122.85058619600 +122.83984816400 +122.49266528300 +122.00433004100 +121.64657986900 +121.07558799600 +121.03219784700 +120.62904741700 +120.36865029500 +119.74906609800 +119.47899745600 +118.96843216600 +118.77811863700 +117.19120274800 +117.06668749100 +115.85251445900 +115.77242446800 +115.55231119500 +115.40852182500 +114.88500213600 +114.70683082200 +113.89003670700 +113.85267038900 +113.64985803000 +113.53388978700 +113.50604993100 +113.02131881800 +112.85284287200 +112.67669888000 +112.60018614900 +112.36869857400 +112.32776708600 +111.62794209400 +111.57193699300 +111.36133842700 +111.19291649000 +110.78505639900 +110.67538350600 +110.60722498700 +110.42840359400 +110.19472267500 +110.00550607900 +109.99629264700 +109.79910162900 +109.66650829500 +109.28295048100 +108.98999671500 +108.57220830900 +108.25800323500 +107.87629769200 +107.64604154700 +107.56426937700 +107.34426039100 +107.16868279100 +106.98494085700 +106.65816397200 +106.44461151400 +106.21050169300 +105.96129637600 +105.69808766600 +105.53322087500 +105.45843021200 +105.19750430700 +104.98704444300 +104.91699981700 +104.86764663500 +104.77220595500 +104.64614581700 +104.33594784500 +104.05067288700 +103.84912718800 +103.80233652300 +103.76811265800 +103.46819080200 +103.41569190900 +103.38535224000 +103.36694091200 +103.36371542900 +103.34649088300 +103.27313148600 +103.25461251200 +103.18562453900 +103.13149198600 +102.72256204700 +102.65430895500 +101.96918046400 +101.93499755900 +101.91987220900 +101.91400146500 +101.76384727400 +101.53706757400 +101.44409398900 +101.44111576200 +101.24551473400 +100.99500274700 +100.88881430500 +100.76187159100 +100.64982904200 +100.51381615100 +100.21772092100 +99.91369628910 +99.88409382510 +99.58496487100 +99.53252705810 +99.48142736320 +99.10992141280 +98.67447512940 +98.62695019590 +98.58478749300 +98.26214456090 +97.94642951900 +97.91503186380 +97.91410064700 +97.75905360170 +97.71832022870 +97.54137161180 +97.10819017340 +96.98478625640 +96.91110229490 +96.81704656340 +96.69098999370 +96.66985427230 +96.51316022790 +95.90920257570 +95.90149688720 +95.82694290380 +95.71233614170 +95.70352111660 +95.67792581930 +95.54086154220 +95.46952961410 +95.27067067500 +95.26419093240 +95.22814401020 +95.08826334870 +95.07582454160 +94.74040059740 +94.57690339590 +94.56232444780 +94.49375670730 +94.48195912000 +94.40193155450 +94.29723332010 +94.19439824190 +94.11360801640 +94.11051981290 +93.92289733890 +93.86229443000 +93.74938227840 +93.73499504900 +93.62282096390 +93.59231719990 +93.45852038560 +93.43814837470 +93.39120944550 +93.32034881670 +93.10824036780 +93.00319671630 +92.96414679910 +92.91819763180 +92.90784107440 +92.90630340580 +92.45956558310 +92.41927804920 +92.25050354000 +91.94760131840 +91.91970062260 +91.66212023250 +91.64646768850 +91.60922891130 +91.52855888270 +91.24166212140 +91.18782285160 +91.04149290500 +90.90529632570 +90.81009674070 +90.72031580970 +90.64138922160 +90.44329065160 +90.00301050180 +89.90630340580 +89.61285498870 +89.54663756190 +89.47099285420 +89.46649932860 +89.37464781750 +89.19705195420 +89.16889953610 +89.10818338980 +89.08498047360 +88.90553561390 +88.86777667170 +88.60779077770 +88.40539581200 +87.91359710690 +87.91202419810 +87.90200042720 +87.89607470470 +87.87627024860 +87.69030830430 +87.62485892100 +87.59225842530 +87.40440242210 +87.38473790210 +87.34370063340 +87.20858728030 +87.19685755380 +87.12024657210 +86.83573136130 +86.79225692850 +86.76504404970 +86.14920043950 +86.13937571410 +86.03659820560 +86.03394818750 +85.92209625240 +85.90080261230 +85.86440277100 +85.85659162550 +85.81590316480 +85.62234815100 +85.56502689550 +85.56407759200 +85.35418916370 +85.27757661730 +85.25461941890 +85.15136921500 +85.03809101250 +84.69975184170 +84.69688395820 +84.48778431740 +84.48475468380 +84.40450894900 +84.22987510660 +84.13718923280 +84.08666371070 +84.06276926720 +84.02103401440 +83.98767923380 +83.96289399130 +83.69610041670 +83.51946499590 +83.49653649640 +83.46775897580 +83.45672844190 +83.32302740030 +83.17717500190 +83.16996078920 +83.12100219730 +83.00901910690 +82.98384998560 +82.95469665530 +82.91391826500 +82.85338157080 +82.83020357450 +82.54912411930 +82.46636436300 +82.33945169260 +82.33869107220 +82.13254118700 +82.09308297840 +82.04890764860 +81.85299579170 +81.67474086800 +81.57336943250 +81.53504991870 +81.52577597610 +81.50622210970 +81.44024416010 +81.40926098560 +81.17852763390 +81.16160109170 +81.05440708460 +81.01010672180 +80.94551200660 +80.93720190490 +80.91449737550 +80.88420104980 +80.86475324770 +80.85649871830 +80.83757665410 +80.80204724840 +80.62640255400 +80.61349804270 +80.58398824350 +80.58075849770 +80.22926056790 +80.19396666300 +80.18065663730 +80.16246660200 +80.13671458950 +80.08993861680 +79.90411273160 +79.89299774170 +79.71875171180 +79.69927420300 +79.64413491050 +79.48099155610 +79.46946564110 +79.43252506100 +79.13860321040 +79.13812589160 +79.08846220820 +78.97184758670 +78.96160125730 +78.84856240040 +78.71922834520 +78.71505994520 +78.59218129600 +78.53519631810 +78.49271362860 +78.47416426090 +78.40890445190 +78.40307955930 +78.38845724390 +78.22357228700 +78.17747074960 +77.94059793910 +77.69996169280 +77.65144314370 +77.30736084680 +77.29063390190 +77.24886484670 +77.01124791960 +76.99560042320 +76.94960021970 +76.93096251870 +76.88849639890 +76.82216038970 +76.67114623670 +76.62838006390 +76.59625355200 +76.59182354720 +76.46509098680 +76.42751623420 +76.32376334450 +76.31447684160 +76.29400603740 +76.15498543630 +76.06124387900 +76.04007004040 +76.01585145190 +75.68079316830 +75.63426568460 +75.60112927650 +75.49931184960 +75.41648755930 +75.38168121270 +75.34467662870 +75.32939405110 +75.19493239430 +75.02449798580 +75.00879669190 +74.98761819060 +74.98105232340 +74.93258878410 +74.72910372140 +74.70694054110 +74.70105694740 +74.66208320990 +74.65198970340 +74.59093997280 +74.52628096940 +74.48097056970 +74.41285403340 +74.23453446950 +73.99375973800 +73.88359832760 +73.85201336070 +73.82316841940 +73.66703928060 +73.64111760040 +73.59256207790 +73.56662872630 +73.52393147710 +73.18494257310 +73.06074193030 +73.05290222170 +73.04751491370 +72.98480224610 +72.93653487210 +72.92030334470 +72.89550018310 +72.84791690220 +72.65091008360 +72.63060556950 +72.47467867760 +72.44344582880 +72.34668160880 +72.16563387580 +72.07388430040 +71.92199707030 +71.90169224130 +71.82180225050 +71.82119614450 +71.79897066980 +71.62289240900 +71.49893677100 +71.41028725850 +71.39072726270 +71.37179124230 +71.17367620260 +71.10702806600 +71.08650207520 +70.96900177000 +70.90485676960 +70.86997017010 +70.72690143940 +70.70659637450 +70.67948274070 +70.61443573390 +70.57951846250 +70.55453470740 +70.50572800930 +70.40874996390 +70.24462302120 +70.20556783890 +70.19156112150 +70.11034707030 +70.05286957080 +69.95946588660 +69.95619202590 +69.94065914740 +69.90239715580 +69.88790130620 +69.88479510110 +69.87989807130 +69.87121616420 +69.78020104510 +69.77230150730 +69.76763776980 +69.62711564350 +69.55760083930 +69.48135155380 +69.41329472970 +69.33483108590 +69.18663131280 +69.05539703370 +68.88783046650 +68.88583536340 +68.87609863280 +68.84770202640 +68.81762593400 +68.66528126930 +68.60945751300 +68.57108508170 +68.52781804310 +68.45819996510 +68.45718324420 +68.40755588700 +68.37987198800 +68.22228750110 +68.21981513170 +68.17735756010 +67.98519897460 +67.96677854830 +67.91185873930 +67.91118121500 +67.88369750980 +67.87799835210 +67.86143703710 +67.84143555460 +67.82410632180 +67.78191037070 +67.78032036080 +67.73820489310 +67.65470896850 +67.57911335110 +67.44923490740 +67.38483186630 +67.35940007320 +67.32281973580 +67.27334647380 +67.17442171120 +67.16088104460 +67.08712586360 +67.08406388580 +66.97254923010 +66.91259765630 +66.89309692380 +66.87409973140 +66.67227765640 +66.60230816690 +66.56683867670 +66.56022848140 +66.52365832000 +66.39533007970 +66.39106860340 +66.37963878590 +66.37033156630 +66.34736356020 +66.33660528610 +66.30203774290 +66.18929860610 +66.17887073100 +66.15200042720 +66.08631596400 +65.98769715110 +65.96822575760 +65.91139984130 +65.90680393030 +65.88592688300 +65.69886670390 +65.62208690520 +65.61629144140 +65.59236438340 +65.55574467820 +65.53504573960 +65.51221309380 +65.44220075810 +65.43329423970 +65.38790692290 +65.34670873400 +65.30404735190 +65.21225087780 +65.20203673830 +65.15193841000 +65.06210327150 +65.06042869080 +64.91211274280 +64.90585728110 +64.88164322420 +64.87190890950 +64.87190246580 +64.86859893800 +64.85009988640 +64.83797487970 +64.82990572860 +64.80716642900 +64.79377859430 +64.75965909910 +64.69268137820 +64.68102303550 +64.64806656480 +64.63604824600 +64.62399262080 +64.61084955560 +64.31282808050 +64.29980848130 +64.22061391910 +63.99911953830 +63.97779924860 +63.94580078130 +63.87870025630 +63.85889816280 +63.83397875930 +63.81989818090 +63.80717097600 +63.72015965480 +63.68792966090 +63.65365690270 +63.64800153170 +63.63620318660 +63.62672676260 +63.62644580780 +63.58394288420 +63.53752674390 +63.53429413600 +63.53109595960 +63.46549987790 +63.31597100430 +63.27175973190 +63.24720001220 +63.23364440850 +63.22380065920 +63.18627417450 +63.16051651900 +63.15643483020 +63.14910125730 +63.12509454300 +63.08866544500 +62.97639846800 +62.91912085410 +62.91311509960 +62.90103814080 +62.89569515570 +62.88452893940 +62.86240005490 +62.82827238480 +62.82247556940 +62.69916645050 +62.67920584350 +62.57005934030 +62.51005604880 +62.48012950940 +62.39321712890 +62.35449878510 +62.34483161950 +62.29263873810 +62.22365775350 +62.16644621410 +62.15218388960 +62.10752066790 +62.03560213470 +62.03094784850 +61.98942562920 +61.94210052490 +61.86790084840 +61.80269799460 +61.79819025550 +61.71795627430 +61.68684289230 +61.67986310170 +61.65578397080 +61.63760533650 +61.63641654950 +61.60154962680 +61.58852380280 +61.55250519670 +61.49947227050 +61.44466158050 +61.43118008860 +61.41379786150 +61.35583114250 +61.35273106950 +61.31398968400 +61.28090295710 +61.22423619620 +61.19917437780 +61.18335118020 +61.17504335220 +61.11268659980 +61.11062714970 +61.10821011960 +61.05807449130 +61.05664944190 +61.05599975590 +61.03769026590 +60.97163836730 +60.92659215580 +60.92326292040 +60.91277600520 +60.91265776060 +60.89589541600 +60.87616898470 +60.87231272350 +60.86019897460 +60.86019897460 +60.86019897460 +60.84640121460 +60.84164945270 +60.79938344100 +60.74759186530 +60.74423009850 +60.73201901930 +60.60166556610 +60.60008362110 +60.58762452550 +60.55408509970 +60.45883349590 +60.45598695760 +60.42720547160 +60.32087577360 +60.27405864440 +60.21735407000 +60.18077069210 +60.13906098800 +60.13024730800 +60.06529998780 +60.02299880980 +59.98726219390 +59.91429901120 +59.89109029960 +59.88380050660 +59.86740112300 +59.86259841920 +59.86259841920 +59.86000061040 +59.82361037900 +59.77308444730 +59.77036067190 +59.66390580040 +59.62065274320 +59.52659442510 +59.51800404800 +59.46006195280 +59.45836385430 +59.45231400670 +59.43383066990 +59.37766029380 +59.32509817950 +59.31936987700 +59.27239474040 +59.12571670480 +59.11190024720 +59.06148162830 +59.00539168730 +58.86660003660 +58.85900115970 +58.85860061650 +58.85340118410 +58.85309982300 +58.84609260900 +58.77249908450 +58.70031655000 +58.65688956860 +58.58436648540 +58.58360612510 +58.55622733120 +58.55577415390 +58.45749494760 +58.44767220340 +58.35847564740 +58.30585764190 +58.28888733750 +58.17732007930 +58.14949310400 +58.12220001220 +58.10499954220 +58.03333913480 +58.02814310440 +58.02389907840 +58.01369857790 +57.99449920650 +57.92656961770 +57.92640000930 +57.89781097730 +57.88990383070 +57.87883672770 +57.87499902290 +57.85150146480 +57.84390463080 +57.83107719530 +57.81950499610 +57.81457370800 +57.69852432780 +57.68813732740 +57.63752938860 +57.61695384080 +57.61652329310 +57.54672568000 +57.49402967570 +57.47660064700 +57.46584980210 +57.45250010620 +57.44475552600 +57.39186004530 +57.32747291270 +57.26200129460 +57.21809276690 +57.21101011620 +57.16666978110 +57.12235439480 +57.11561029620 +57.06587217340 +57.06213429070 +57.05985503330 +57.04749924600 +57.01837610690 +56.93798690190 +56.85449981690 +56.83752567810 +56.83601625720 +56.81691024130 +56.73039197050 +56.71715027850 +56.68928057510 +56.61483668990 +56.46228490320 +56.40706892680 +56.40454376330 +56.19007335000 +56.17404547070 +56.16650968420 +56.15044499640 +56.12090897580 +56.10658682080 +56.08543016140 +56.08392320730 +55.99574846270 +55.94029998780 +55.88613814170 +55.85589981080 +55.84909820560 +55.84909820560 +55.84829869550 +55.82020187380 +55.80449368800 +55.76294367510 +55.74973034600 +55.74766823230 +55.74102913100 +55.71223100230 +55.70205937560 +55.65884282060 +55.58488645060 +55.56451044710 +55.54024537360 +55.50251229870 +55.44362041790 +55.43319915800 +55.42616965360 +55.31768804280 +55.18650042890 +55.16275900800 +55.12398856650 +55.10969924930 +55.10281948500 +55.03729595020 +55.00277341910 +54.98680114750 +54.92549984980 +54.91640090940 +54.89390182500 +54.85179901120 +54.84920120240 +54.84479904170 +54.83636494160 +54.83229827880 +54.80966095580 +54.72965252610 +54.72860553940 +54.68928358350 +54.66627915920 +54.60743663620 +54.51313747100 +54.50190802230 +54.46101156360 +54.38546252890 +54.37725545220 +54.36425457060 +54.35163631180 +54.21739276480 +54.17037247250 +54.14719351140 +54.08011185890 +54.04044448090 +54.03900146480 +53.97362602870 +53.94689235950 +53.90969848630 +53.90910278080 +53.90420150760 +53.90259933470 +53.90069961550 +53.88619995120 +53.86645832150 +53.85345643790 +53.84579849240 +53.83179855350 +53.82935840020 +53.80275549810 +53.78604224430 +53.77547325190 +53.77342094660 +53.77298523540 +53.75632741370 +53.72478736580 +53.70533084820 +53.68973071010 +53.61656653930 +53.53620495180 +53.53477974340 +53.51673565330 +53.48715448170 +53.45033585570 +53.40922344350 +53.37170097050 +53.33129965670 +53.32682921050 +53.32592998370 +53.32260319640 +53.31940651260 +53.31078967330 +53.27096849490 +53.25452158700 +53.18252929780 +53.01233098380 +52.98920887440 +52.93634742320 +52.92012039160 +52.91831224870 +52.88966522580 +52.88050079350 +52.87039947510 +52.84314024310 +52.74097081450 +52.73092098500 +52.53580823130 +52.50714940390 +52.49597200170 +52.47378086910 +52.42463824170 +52.40973348360 +52.37751764490 +52.27877494990 +52.27254830380 +52.25316294130 +52.24660110470 +52.17674126130 +52.12786204010 +52.12447771030 +52.09317293680 +52.02907330020 +52.02277948780 +51.98391099330 +51.97529983520 +51.96668253480 +51.94848041650 +51.94229888920 +51.92986463170 +51.84605562010 +51.84269866830 +51.84249877930 +51.83890151980 +51.83832260350 +51.83430099490 +51.81868933920 +51.80355129570 +51.78206982830 +51.77186161820 +51.76299889480 +51.71247756030 +51.67313609900 +51.62632372660 +51.62378093370 +51.61002774570 +51.60951026680 +51.44869997550 +51.43699714030 +51.43614179340 +51.39019397070 +51.38050029950 +51.34436536390 +51.33205176850 +51.28930905880 +51.27557500170 +51.24794362540 +51.23569563640 +51.19714573340 +51.15352514580 +51.14548250020 +51.11113525360 +51.03167359160 +50.94237239480 +50.93862947930 +50.92957070200 +50.88529968260 +50.88349914550 +50.85230387480 +50.84920120240 +50.83570098880 +50.83570098880 +50.81620025630 +50.78503616060 +50.76863915500 +50.72626138710 +50.71878095970 +50.59497142910 +50.58178203680 +50.52432180400 +50.44801727910 +50.44003475950 +50.40657050120 +50.35529386350 +50.31171979020 +50.30293907310 +50.26924104310 +50.25930199950 +50.23333746050 +50.21178490860 +50.19253864520 +50.18795154330 +50.16603066890 +50.12947715900 +50.12508917150 +50.07199928560 +50.03885786100 +49.99468394310 +49.97468895470 +49.96704877140 +49.96127579400 +49.95064617710 +49.89730869360 +49.89210128780 +49.88688001260 +49.84186758510 +49.81790161130 +49.80583375250 +49.79699910000 +49.79401284110 +49.77666609270 +49.76044080070 +49.74558467920 +49.68966047600 +49.63883618830 +49.62570578530 +49.61692073380 +49.59719857440 +49.59176151060 +49.59035137550 +49.58171617750 +49.56035611910 +49.45348130550 +49.43426742750 +49.41799735600 +49.38334942030 +49.36499883330 +49.33750993840 +49.33739402010 +49.31936226030 +49.30250083420 +49.29520311880 +49.26355973520 +49.23095422560 +49.22490497750 +49.21575046150 +49.18846251900 +49.18240786820 +49.17979040220 +49.16455298560 +49.15286018000 +49.13784486830 +49.08688760010 +49.07992535550 +49.05423922080 +49.03889846800 +48.98112690060 +48.94087442760 +48.93030166630 +48.92029953000 +48.90567673760 +48.87017860120 +48.85550752190 +48.85271203480 +48.84550094600 +48.83200073240 +48.83200073240 +48.82649993900 +48.82359309240 +48.80598693050 +48.77411352750 +48.69406917550 +48.68848246420 +48.57676195900 +48.54066522960 +48.50096552980 +48.49333613030 +48.46523890160 +48.43165510320 +48.41957323730 +48.41869293290 +48.32148986420 +48.21740720620 +48.21219986930 +48.18400022640 +48.16078039030 +48.14258823670 +48.12565588630 +48.11136999380 +48.07966920140 +48.07955695240 +48.07561106000 +48.06312565880 +48.00081777190 +47.98527399260 +47.96069141200 +47.93429946900 +47.91669845580 +47.88662703050 +47.87149810790 +47.84200598590 +47.82049942020 +47.80889892580 +47.77441377330 +47.74506883800 +47.74459788840 +47.71641701720 +47.71413982160 +47.70735025710 +47.61780138100 +47.61316064160 +47.59034416550 +47.56502694380 +47.49738458270 +47.47972765590 +47.47060234550 +47.43047924190 +47.41429598560 +47.38538019730 +47.34518313460 +47.27095532600 +47.23451352880 +47.23410034180 +47.20034711450 +47.19920703040 +47.11232823960 +47.06161451850 +47.03583560370 +47.03578797070 +47.02821832550 +46.96676145610 +46.91542883600 +46.90420150760 +46.90330823860 +46.87089920040 +46.83819961550 +46.83580017090 +46.82860183720 +46.81832938760 +46.80577440770 +46.79930114750 +46.78832537300 +46.78770899580 +46.78705301290 +46.78142976460 +46.77343969160 +46.75235965570 +46.66819727910 +46.66282576010 +46.65564120810 +46.64418569700 +46.60280512920 +46.54540195730 +46.52105908560 +46.49802911420 +46.48069431170 +46.43041863050 +46.42398725810 +46.42122817190 +46.36939645640 +46.35377769050 +46.34877344960 +46.28784612490 +46.27044318730 +46.26977498790 +46.17528995740 +46.16955240680 +46.16433598420 +46.13766467940 +46.10165839130 +46.08911012040 +46.05892985180 +46.05585984240 +46.03953848280 +46.00429916380 +45.99918945890 +45.99327463780 +45.99290084840 +45.96925888420 +45.94099319220 +45.93752820150 +45.92897931730 +45.92029953000 +45.88719940190 +45.87229919430 +45.87009811400 +45.84749984740 +45.84548625540 +45.82820129390 +45.82139968870 +45.82133229070 +45.81980133060 +45.81499862670 +45.76127175740 +45.75556026280 +45.73478330560 +45.71205965360 +45.65382121280 +45.64931224130 +45.64700842120 +45.63119433060 +45.56852861690 +45.55543946540 +45.54423365440 +45.52053528630 +45.51178212310 +45.46823345470 +45.46088540640 +45.35896502610 +45.23138753750 +45.23053124100 +45.18413517640 +45.13925008850 +45.07754555560 +45.02534635610 +45.01036476270 +44.95735496580 +44.90831614420 +44.90752894050 +44.89597656140 +44.89365359470 +44.88368130750 +44.88230133060 +44.87820053100 +44.86707600650 +44.85889816280 +44.82626374930 +44.82279968260 +44.82013931510 +44.81865041280 +44.81650161740 +44.81228401010 +44.80839920040 +44.80577781010 +44.80080032350 +44.76001186970 +44.71134770810 +44.70996938780 +44.66163642640 +44.64416441350 +44.60240710370 +44.57762139560 +44.55473062590 +44.54090030370 +44.47210861960 +44.46299603650 +44.42496650450 +44.40795959950 +44.40689016320 +44.37631287390 +44.36652891320 +44.35140962090 +44.31606629870 +44.31087285540 +44.28942395370 +44.26660774190 +44.26149581000 +44.26032238540 +44.25302286580 +44.24541860810 +44.23122335450 +44.20744850460 +44.20630542340 +44.19332417350 +44.18960189820 +44.18819661860 +44.16249847410 +44.13226214250 +44.10810417480 +44.10183812720 +44.10017891600 +44.09568233110 +44.09543647410 +44.08040667260 +44.05864971370 +44.03700263900 +44.03092223920 +44.01832441740 +43.98258311510 +43.98238776820 +43.93033167360 +43.90341054410 +43.88179881060 +43.83919906620 +43.82949829100 +43.79454258910 +43.78620114210 +43.74235017330 +43.73999616070 +43.73121695820 +43.65734717680 +43.64185253670 +43.63213543190 +43.62511748620 +43.59997295650 +43.58651521080 +43.56735005670 +43.52696799610 +43.50960855130 +43.50825116680 +43.47823127900 +43.43711549590 +43.43503255680 +43.39246769320 +43.34518679250 +43.32187707180 +43.31846081550 +43.28189509950 +43.27956563550 +43.24506857860 +43.21579851720 +43.20947759030 +43.19987265540 +43.11922665010 +43.09502803000 +43.07112264560 +43.02024446470 +42.98870086670 +42.97654747790 +42.97210035260 +42.96527170020 +42.94976283810 +42.93663128250 +42.92281617530 +42.90883569660 +42.90241058300 +42.89913794110 +42.89649963380 +42.89440155030 +42.86959838870 +42.86489868160 +42.85134881790 +42.83470232520 +42.81560134890 +42.81299972530 +42.80569839480 +42.80569839480 +42.80469894410 +42.79399871830 +42.78913493140 +42.73431326970 +42.70828926750 +42.67784238500 +42.64659196940 +42.64420486330 +42.62582119320 +42.56228776720 +42.53474443030 +42.52231493710 +42.47161397500 +42.45870646050 +42.45549720610 +42.45010913200 +42.43033289520 +42.41993645310 +42.40399207980 +42.40358940400 +42.40159813560 +42.39799104710 +42.38727945710 +42.37017786320 +42.32837128830 +42.31819305430 +42.29250900780 +42.25273597540 +42.23653880750 +42.22998008520 +42.22245524910 +42.16094708710 +42.14170712600 +42.12850981440 +42.10470975110 +42.07221420240 +42.06342040810 +42.03095790440 +42.02293076710 +41.97227310120 +41.92179870610 +41.91750062400 +41.91360092160 +41.90753918110 +41.86700057980 +41.86619949340 +41.86328589740 +41.85061005620 +41.84879340970 +41.84747799270 +41.83820657050 +41.82830047610 +41.82099914550 +41.81520080570 +41.80317873830 +41.79890060420 +41.79539871220 +41.79539871220 +41.79539871220 +41.78839874270 +41.77187613490 +41.76664885460 +41.75749969480 +41.74240641430 +41.72423599080 +41.71922872560 +41.69491453290 +41.67619876420 +41.67202983850 +41.63362889130 +41.62225127140 +41.58727526960 +41.56622368410 +41.55301045060 +41.53545130920 +41.47218557380 +41.45687766520 +41.45557969910 +41.43862376620 +41.42266786690 +41.42179862020 +41.41970242980 +41.41471274550 +41.41321877260 +41.33405431520 +41.31817478020 +41.31409471250 +41.29770300560 +41.29201888050 +41.29108706950 +41.26339347290 +41.25451317950 +41.23918352800 +41.23235637510 +41.22742976140 +41.21137902320 +41.20244448410 +41.18436828640 +41.13557634020 +41.13446306770 +41.10429489150 +41.04718445120 +41.04693076310 +41.02942628070 +41.00632791090 +40.97850036620 +40.96939232210 +40.96847754690 +40.96288205640 +40.95038907410 +40.94360871190 +40.93972878650 +40.92990161130 +40.92810058590 +40.91378716390 +40.85395491320 +40.84149405720 +40.83706033800 +40.81759091620 +40.81349945070 +40.81185115230 +40.80039978030 +40.80039978030 +40.78898738410 +40.77709960940 +40.76243561260 +40.75927048370 +40.75657562280 +40.74713757080 +40.66452976510 +40.66344802440 +40.65253544720 +40.63814755420 +40.61681066840 +40.61190568230 +40.60362192930 +40.57675623610 +40.57064347460 +40.47358189970 +40.47055272040 +40.46818661170 +40.40290845050 +40.37801105990 +40.34793181380 +40.27660465550 +40.26865620290 +40.23953675440 +40.23165416920 +40.14471750330 +40.13035670000 +40.12409354960 +40.11202119830 +40.09562800060 +40.09343496910 +40.09227265700 +40.08260405990 +40.06551206320 +40.01339336490 +39.99984759550 +39.98611029910 +39.97081132310 +39.93219571460 +39.89394117920 +39.87835922480 +39.86209869380 +39.85369873050 +39.84812019440 +39.84144561140 +39.83962271530 +39.83633483060 +39.83545627280 +39.83414920680 +39.83346149970 +39.82898457420 +39.82030105590 +39.81462045420 +39.79430237750 +39.79320144650 +39.79257073060 +39.78919982910 +39.78919982910 +39.78919982910 +39.78366199720 +39.78279876710 +39.78191773470 +39.77956072410 +39.77008771380 +39.68337574100 +39.67605854730 +39.66596645160 +39.65856426830 +39.59354079750 +39.58634170270 +39.55218651510 +39.53472136400 +39.52967996150 +39.52901906230 +39.52135260990 +39.49887738600 +39.45112631260 +39.40367374250 +39.40279133750 +39.39079328330 +39.38533440860 +39.36726459040 +39.30309484960 +39.29918171560 +39.29745321020 +39.28033326170 +39.23541706900 +39.22603952440 +39.21080354460 +39.20461364950 +39.19572601310 +39.18163121770 +39.18161517430 +39.16631674120 +39.12801325830 +39.12762606670 +39.06869767950 +39.05140492910 +39.03479776770 +39.03025255590 +39.01552503120 +39.00825334470 +39.00143118100 +38.99380111690 +38.99225713700 +38.96517092330 +38.95512763000 +38.95360183720 +38.92818720920 +38.89590072630 +38.89567592220 +38.89375468080 +38.87070083620 +38.86300649880 +38.83309936520 +38.79840087890 +38.79460144040 +38.76010968110 +38.75243838800 +38.73628549850 +38.68110671970 +38.66786860380 +38.60707363760 +38.55857807530 +38.55618291350 +38.55576459770 +38.54402072480 +38.54365078810 +38.49360499430 +38.48343862550 +38.47776505780 +38.47738877110 +38.46786559050 +38.44979555150 +38.40461139010 +38.39618922200 +38.37734561870 +38.37032413710 +38.35876662580 +38.33660462290 +38.30138087750 +38.28495995610 +38.26383592490 +38.24130694910 +38.21496586550 +38.20463541340 +38.18908499700 +38.17337186330 +38.16058505680 +38.14176109100 +38.12624442320 +38.11416030310 +37.96084699460 +37.95971494190 +37.92306027980 +37.90719985960 +37.90413524590 +37.90299987790 +37.89463482000 +37.86750030520 +37.85560085950 +37.85250091550 +37.85020065310 +37.84373788350 +37.84096596340 +37.81100082400 +37.80039978030 +37.79885238110 +37.79618978970 +37.79106363030 +37.78956244710 +37.78570175170 +37.78279876710 +37.78279876710 +37.78279876710 +37.78279876710 +37.77320098880 +37.77259826660 +37.75568171990 +37.73281065530 +37.69293148540 +37.68611053300 +37.67670641970 +37.64705223860 +37.55511093670 +37.54087518310 +37.51703326010 +37.50020076060 +37.48559434980 +37.45542287120 +37.40140538630 +37.38688113820 +37.36782864310 +37.35321026090 +37.28941205780 +37.28907998310 +37.28257327000 +37.27320560130 +37.24176458750 +37.21330521180 +37.18159542240 +37.14085174890 +37.12930444380 +37.11928634520 +37.11321698820 +37.09697208350 +37.09528280530 +37.07549204520 +37.07443442640 +37.07148100480 +37.06950873450 +37.06394401610 +37.05223612400 +37.03142138350 +36.98729750380 +36.93706620590 +36.93378976600 +36.92788376400 +36.91447530070 +36.91319873200 +36.89300155640 +36.89209028030 +36.88399887080 +36.87998653050 +36.86544064780 +36.83838335620 +36.83794896610 +36.80559921260 +36.80455272820 +36.80217674240 +36.80109276800 +36.79930114750 +36.79589843750 +36.79000091550 +36.78433372040 +36.77999877930 +36.77550125120 +36.77113003640 +36.76990127560 +36.76940155030 +36.75441637010 +36.74670028690 +36.74277866780 +36.74269276920 +36.73509630020 +36.72698131870 +36.70868218940 +36.69164705140 +36.67694490010 +36.64113620540 +36.62126907930 +36.61534003210 +36.60859433400 +36.59380504610 +36.56660281110 +36.56454797250 +36.56437705450 +36.54252119250 +36.54021630470 +36.53012821300 +36.52296184600 +36.51671888100 +36.46991168960 +36.46601028850 +36.46440549710 +36.39057704830 +36.34996455350 +36.34720993020 +36.32612490750 +36.32391272560 +36.32214257650 +36.31048560900 +36.30801864880 +36.28441551490 +36.27970034160 +36.27371942970 +36.25033374690 +36.25029334510 +36.21044217750 +36.20837769290 +36.20369826130 +36.19908957110 +36.15506978580 +36.13043639770 +36.12692145280 +36.10480488230 +36.10219824400 +36.08460462340 +36.08128112120 +36.05306281990 +36.03938311460 +36.03467429730 +36.03180096820 +36.01717990230 +35.99185979150 +35.93546097290 +35.92587716720 +35.90698124180 +35.89468378720 +35.89310073850 +35.88578084070 +35.84379959110 +35.81639862060 +35.80964888080 +35.80160140990 +35.80009281360 +35.78079986570 +35.77750015260 +35.77713662600 +35.77600097660 +35.77600097660 +35.77420043950 +35.77349853520 +35.76874833570 +35.76210267990 +35.73840008140 +35.73207131330 +35.70421075600 +35.66729216950 +35.65479649330 +35.62323726880 +35.62048815520 +35.61876608300 +35.60861742620 +35.60083650220 +35.59575418370 +35.58981329070 +35.58824087480 +35.58526558620 +35.56796399780 +35.55557100540 +35.52984642260 +35.51959152850 +35.51641845210 +35.50852340320 +35.46272323920 +35.42360235350 +35.41707074180 +35.39608244550 +35.39280641060 +35.38996390600 +35.38891749800 +35.38201663980 +35.36700387370 +35.34972134000 +35.34267911420 +35.29397499360 +35.28132994920 +35.27264201080 +35.25821143850 +35.21211978310 +35.19595430920 +35.18456100510 +35.16836293420 +35.14227574680 +35.12783438360 +35.09151514790 +35.07439771480 +35.05346026480 +35.04507366500 +35.02454907770 +35.01634942920 +34.98333816070 +34.97888945410 +34.97101731490 +34.94106715320 +34.93661875370 +34.92356035690 +34.91841505910 +34.90910681810 +34.89920043950 +34.89889461110 +34.88239866320 +34.85419845580 +34.84896691730 +34.82647667910 +34.81224184860 +34.80490112300 +34.79751879350 +34.79399871830 +34.79362294820 +34.79339981080 +34.78969955440 +34.78900146480 +34.78639984130 +34.76210021970 +34.75370025630 +34.74800109860 +34.72111170530 +34.71985844680 +34.68387490350 +34.67022373090 +34.66441941280 +34.65516483500 +34.65471667860 +34.64576212200 +34.62042648910 +34.61651932620 +34.59383651650 +34.57187997880 +34.56034662250 +34.55098597950 +34.54509600270 +34.53453724150 +34.48685956700 +34.48413001900 +34.48186953060 +34.48056448070 +34.47025834910 +34.46450853840 +34.46393624850 +34.43925992410 +34.41920227280 +34.41889420520 +34.40568996180 +34.39108181590 +34.38966778640 +34.38685091340 +34.38434183250 +34.38291995270 +34.37303335560 +34.36123097350 +34.35808036970 +34.34178196600 +34.32671184480 +34.31741414560 +34.30612810070 +34.30237988640 +34.28826584310 +34.25687530870 +34.25559478830 +34.23697956130 +34.23499599690 +34.23210392290 +34.20765095990 +34.20608713880 +34.20170542010 +34.19376040040 +34.16462179970 +34.16226462830 +34.16066858530 +34.13461938960 +34.12351657450 +34.12232269400 +34.11208622850 +34.09434145010 +34.08070107100 +34.07269861110 +34.07095718630 +34.03046474640 +34.02974404570 +34.02304973850 +34.01168184780 +33.94995778900 +33.93723640780 +33.93501000440 +33.91711297290 +33.90108920570 +33.89752499670 +33.88505503790 +33.86873278000 +33.86409582020 +33.86380004880 +33.85864239040 +33.85421467680 +33.85070037840 +33.83372891830 +33.82823152940 +33.80658578830 +33.79010956860 +33.78910064700 +33.78200149540 +33.78146270350 +33.77920150760 +33.77370071410 +33.76824422570 +33.75870132450 +33.75650024410 +33.75618408300 +33.74639892580 +33.73630142210 +33.71662881880 +33.70605515790 +33.70488375970 +33.69722158940 +33.67077105270 +33.66068493070 +33.64565032320 +33.63802678180 +33.63254588630 +33.63239847340 +33.62373069260 +33.59440906190 +33.58885950230 +33.57873195390 +33.56329940480 +33.54622191970 +33.54459662030 +33.53198790330 +33.51172253910 +33.48540869450 +33.47594218050 +33.46377172260 +33.45976871600 +33.45615034130 +33.44630208110 +33.44496378180 +33.44337165940 +33.43748299300 +33.40074240180 +33.39268630370 +33.38221528020 +33.38160153970 +33.38124456660 +33.37414364740 +33.34171054110 +33.33763777760 +33.33498214700 +33.31938162710 +33.29638118870 +33.28278230900 +33.25788046600 +33.22798683890 +33.20288303560 +33.17580626140 +33.16453308900 +33.15711321030 +33.15087485460 +33.11875665170 +33.11547928810 +33.10839945660 +33.10048288160 +33.09509911790 +33.09080487690 +33.08455102640 +33.07575854170 +33.07142467990 +33.05945167860 +33.05089199200 +33.02926770910 +33.02555211160 +32.99482865790 +32.97818657200 +32.95918827410 +32.95272166060 +32.94445123230 +32.93851361760 +32.90389281290 +32.90283393660 +32.88671674830 +32.82899762490 +32.81969833370 +32.80938764010 +32.80848213410 +32.80179977420 +32.78799697770 +32.78643419620 +32.78602826180 +32.77701194710 +32.77391592920 +32.77057250740 +32.75410079960 +32.75370025630 +32.75230026250 +32.74980163570 +32.73606263060 +32.73440170290 +32.73349419080 +32.72284858190 +32.72189725580 +32.71456004400 +32.71246580430 +32.70823227010 +32.70269670690 +32.70243191120 +32.68185973310 +32.67682639100 +32.64998338550 +32.64720269260 +32.64234157520 +32.63939009290 +32.62009333100 +32.60771320940 +32.60545998020 +32.58731937830 +32.57670632640 +32.57087914080 +32.54279884930 +32.51495746390 +32.49443402720 +32.49352962330 +32.48850441110 +32.45662265580 +32.44928040620 +32.44749867380 +32.44092854640 +32.43167820350 +32.41834500930 +32.38391823160 +32.34447166220 +32.31359584890 +32.29754097410 +32.27857770790 +32.26603269920 +32.25072966120 +32.21736490410 +32.20851220750 +32.20403321510 +32.20071598620 +32.19726606940 +32.17216793360 +32.16709458940 +32.14993848690 +32.14838201440 +32.12799248440 +32.11499113100 +32.09119199500 +32.08690788980 +32.08363842130 +32.04600143430 +32.04486444900 +32.02344508500 +32.00533209880 +31.98006978450 +31.97687213870 +31.97131395650 +31.97007907520 +31.93867291860 +31.92404887230 +31.92242099600 +31.91584684980 +31.91299667430 +31.90498133830 +31.90136918350 +31.89673863220 +31.89589963100 +31.86219978330 +31.85376396930 +31.84610888230 +31.82340049740 +31.82249578770 +31.81410026550 +31.80784751170 +31.80310058590 +31.80209922790 +31.78512289610 +31.78170013430 +31.78022537460 +31.77335583460 +31.77239990230 +31.76670074460 +31.75670193320 +31.75276893630 +31.74749946590 +31.74230003360 +31.73819923400 +31.73690032960 +31.73690032960 +31.73690032960 +31.73372855340 +31.73259925840 +31.73189926150 +31.69823361660 +31.69587570680 +31.69523898770 +31.66376011490 +31.65898250270 +31.64383719820 +31.64196179430 +31.64184295160 +31.64139235280 +31.63318203080 +31.60843569210 +31.60399561250 +31.60207444960 +31.58958510030 +31.58021208370 +31.57354006150 +31.54131242610 +31.53806091630 +31.53143375710 +31.52120419270 +31.51705254700 +31.50630725450 +31.50182244090 +31.48175611310 +31.48134414510 +31.47234725190 +31.46859015280 +31.46753495900 +31.45658037510 +31.44254598480 +31.42291776160 +31.42170311640 +31.40474768500 +31.39302968570 +31.35661157440 +31.35443159230 +31.34731396740 +31.32030339940 +31.31875397310 +31.30007714790 +31.28766310750 +31.28438087070 +31.27842197640 +31.26735867360 +31.24926064820 +31.22623591630 +31.21029827520 +31.16865529000 +31.16617858340 +31.15267550120 +31.14694737000 +31.14432941230 +31.13737766180 +31.13632788140 +31.07858220680 +31.07467762180 +31.04425090830 +31.03754018440 +31.03504397950 +31.01821013830 +31.01773496510 +31.01492540620 +31.00688264370 +30.99903154900 +30.98994117440 +30.95450429960 +30.95389569170 +30.94786397030 +30.94619723830 +30.92498393020 +30.92375363930 +30.91988006300 +30.90949148880 +30.89236603680 +30.85319973660 +30.84837298830 +30.84585729590 +30.84131622960 +30.80789947510 +30.80730056760 +30.80100059510 +30.79137775390 +30.78650093080 +30.77781484720 +30.77385499320 +30.76758241770 +30.76215731000 +30.75989913940 +30.72963287100 +30.72500038150 +30.72089958190 +30.71980094910 +30.71759986880 +30.71759986880 +30.71759986880 +30.71759986880 +30.71656452680 +30.71369934080 +30.69593259690 +30.68491258840 +30.64745044840 +30.64585760640 +30.63852539950 +30.62828193890 +30.60237080620 +30.58044824550 +30.55640150130 +30.49802326230 +30.49225118380 +30.48721613670 +30.47950713000 +30.47614197540 +30.47294721970 +30.47236471650 +30.45830462500 +30.45348701800 +30.44516625910 +30.44133738320 +30.43422008080 +30.40334279710 +30.39157449620 +30.38499499540 +30.35803504890 +30.35136783490 +30.33672469400 +30.32746081900 +30.32402095770 +30.30343658260 +30.29884470100 +30.29751472590 +30.29273981350 +30.26861252470 +30.25647837170 +30.24817269140 +30.22556355890 +30.21288964380 +30.20412509860 +30.20308932080 +30.19999731590 +30.19695868090 +30.18788517120 +30.16833857770 +30.16756301840 +30.15062228660 +30.14149570520 +30.14016212050 +30.13502633410 +30.13363006350 +30.10997157220 +30.08339473030 +30.07030316560 +29.98845188920 +29.98151948030 +29.97862530720 +29.94921713000 +29.91946264300 +29.90076138290 +29.89940922340 +29.89876764440 +29.89655611120 +29.88395406490 +29.86096839890 +29.83849906920 +29.83275912460 +29.82027105720 +29.81809216660 +29.81436456310 +29.81189918520 +29.80940613840 +29.79663814030 +29.78663982190 +29.78260040280 +29.76662096510 +29.76581905690 +29.75180053710 +29.74819946290 +29.74466259050 +29.73830032350 +29.73509979250 +29.73390007020 +29.72949981690 +29.72680091860 +29.72439956670 +29.72050094600 +29.71710014340 +29.70789084910 +29.69955806830 +29.69484769900 +29.67496205370 +29.67020736430 +29.66980837180 +29.66950420990 +29.66593017450 +29.66121198120 +29.64378581800 +29.62162289730 +29.60455645390 +29.60308892780 +29.60203006370 +29.58778445450 +29.56234258500 +29.54257719140 +29.51802803630 +29.51438231760 +29.51320039530 +29.50930380530 +29.49105754710 +29.48796323260 +29.47679390500 +29.46849364840 +29.46551319820 +29.40793079530 +29.39959488910 +29.36696244490 +29.34268663110 +29.32867536080 +29.32558015390 +29.31892771650 +29.31700554670 +29.31602297440 +29.30781173500 +29.29097195990 +29.28402436710 +29.28240421820 +29.27857687840 +29.27763038320 +29.27421845240 +29.26472773350 +29.25438527850 +29.25055267120 +29.24043778150 +29.22514465940 +29.22408719360 +29.20375110660 +29.20295895380 +29.19391576800 +29.19353427690 +29.17837625150 +29.17107240310 +29.16396866550 +29.15875334800 +29.14810697180 +29.14373240690 +29.14296303110 +29.14239898410 +29.13942598370 +29.10924780410 +29.10900419290 +29.10652579670 +29.10172424560 +29.06527895630 +29.05104407350 +29.03296799760 +29.03096478940 +29.01572577510 +28.99583806200 +28.99331829510 +28.97399284530 +28.96695559210 +28.96450772220 +28.93398180980 +28.93083073370 +28.91778215510 +28.91550064090 +28.91387686440 +28.90935610760 +28.90116381410 +28.88969203300 +28.88141017420 +28.87807650990 +28.87754987630 +28.87537029190 +28.87150294260 +28.86853939640 +28.86023809750 +28.85169381350 +28.84123034790 +28.82489247850 +28.81682461580 +28.81220410660 +28.80653051890 +28.80237347520 +28.79506580960 +28.77729988100 +28.77260387910 +28.75885812790 +28.75358066520 +28.75250053410 +28.74707391530 +28.73475298570 +28.73379612380 +28.72480010990 +28.72442884680 +28.72236203690 +28.71529960630 +28.71439933780 +28.71220016480 +28.71150016780 +28.70698511560 +28.70669937130 +28.70569992070 +28.70569992070 +28.70420074460 +28.70060128750 +28.69705238420 +28.69319915770 +28.69314446360 +28.68995409910 +28.68515098700 +28.67826033680 +28.67196745410 +28.65157671030 +28.62580298270 +28.59600741930 +28.59427469200 +28.58922368450 +28.58789111320 +28.58616816430 +28.58288425500 +28.56823367640 +28.56419853290 +28.56011743700 +28.55182794760 +28.54589464490 +28.54262976010 +28.53922418010 +28.52923996190 +28.52806578470 +28.52389774120 +28.51277113140 +28.50743120280 +28.50668568000 +28.49707259250 +28.49488566570 +28.49462542580 +28.48651201580 +28.47521175100 +28.47382591420 +28.46196743240 +28.44618331700 +28.43714786400 +28.42751174120 +28.41794535690 +28.41639209110 +28.39524106320 +28.38424772840 +28.36838439370 +28.36783145910 +28.36492813480 +28.36296924360 +28.36040979700 +28.33612243380 +28.32833405150 +28.29818036470 +28.29579216080 +28.26412454400 +28.25957828060 +28.25867594680 +28.25655501770 +28.23757103570 +28.23484439100 +28.22394844840 +28.22217876410 +28.21997064090 +28.21855634670 +28.21166156700 +28.20436154550 +28.19990017830 +28.19495466020 +28.18435269260 +28.17754052690 +28.17573642390 +28.16271255340 +28.15229142480 +28.14530523890 +28.14341520410 +28.13970280160 +28.10566598410 +28.08708498060 +28.08444240480 +28.07107492340 +28.06259176090 +28.04603684590 +28.04325441860 +28.02823837890 +28.02632121090 +28.02411257190 +28.02292173490 +27.99092168660 +27.98676056020 +27.96033100800 +27.95626834440 +27.94543982080 +27.93815949560 +27.93709165060 +27.93274418590 +27.92822882620 +27.91868180840 +27.91829319480 +27.91245919500 +27.90961009780 +27.90644408360 +27.89688688270 +27.89613238890 +27.88769394990 +27.88140790090 +27.87943852770 +27.87566366610 +27.87491941720 +27.86985128990 +27.86832786870 +27.86129219800 +27.85704783640 +27.85051350370 +27.85040457660 +27.84951732750 +27.83594471900 +27.82425125550 +27.82065709850 +27.81920051570 +27.81059892140 +27.80559921260 +27.80349922180 +27.79301262160 +27.79190063480 +27.79179954530 +27.78637688950 +27.78433077000 +27.76699003610 +27.76527541950 +27.72240066530 +27.71850013730 +27.71599960330 +27.71590042110 +27.71388464430 +27.70664887960 +27.68538102020 +27.66846702630 +27.65618609210 +27.65223650110 +27.61793530270 +27.58923442690 +27.57697586030 +27.55526789880 +27.54104246660 +27.53885354650 +27.53533436040 +27.52705156320 +27.49733904530 +27.49708791140 +27.48920784610 +27.48457075550 +27.48422649340 +27.48097548560 +27.47743689270 +27.47160638370 +27.46989353360 +27.46544129470 +27.45290464040 +27.44679424970 +27.44471046920 +27.41858333620 +27.40696505750 +27.39689139040 +27.38945685820 +27.38113251570 +27.34935333050 +27.34154431130 +27.33348275170 +27.32572468770 +27.31928179190 +27.30638263060 +27.30312195810 +27.29624322090 +27.28941223650 +27.26136607460 +27.22722942710 +27.22348639370 +27.22270935910 +27.21029773240 +27.20657875200 +27.19380684270 +27.17243173010 +27.16771797370 +27.15959546580 +27.15306342920 +27.15029566960 +27.13124467630 +27.11577247370 +27.11265913230 +27.10898867700 +27.10651812470 +27.10254074040 +27.09651246990 +27.08618652100 +27.08540091840 +27.08110152440 +27.07532207330 +27.05805511900 +27.05583613650 +27.05019264010 +27.04856166400 +27.04698563880 +27.03476649150 +27.02700183820 +27.02304550640 +27.02152617650 +27.01513237860 +27.00956373820 +26.97942950710 +26.97094422140 +26.96842336070 +26.96697693970 +26.96550633050 +26.94788449880 +26.92992844300 +26.92347366820 +26.91891028060 +26.91458026660 +26.91267576800 +26.90464146830 +26.87556358660 +26.86620214180 +26.86525633650 +26.85658242510 +26.85263992140 +26.84831043060 +26.83851430830 +26.82510311440 +26.82488358250 +26.82177000260 +26.81974097420 +26.80480886230 +26.80459252830 +26.80135782560 +26.77929892230 +26.76490020750 +26.75774879570 +26.75108565990 +26.73879815430 +26.72950378960 +26.72830224290 +26.72595447550 +26.72399051580 +26.72200012210 +26.71999931340 +26.70910072330 +26.70039939880 +26.69799995420 +26.69709968570 +26.69700050350 +26.69519996640 +26.69389915470 +26.69389915470 +26.69289970400 +26.69289970400 +26.69289970400 +26.69289970400 +26.69239997860 +26.67381167210 +26.66892511420 +26.65871458070 +26.64117039050 +26.61398709300 +26.61344895170 +26.60253598630 +26.59180760380 +26.59152294540 +26.58809503230 +26.58747162710 +26.57095407550 +26.54633905310 +26.54241694730 +26.53996254110 +26.52876429210 +26.52767200970 +26.51581921820 +26.50545522700 +26.49300726170 +26.47038349480 +26.46603852690 +26.46041332720 +26.44439793550 +26.43865051550 +26.42290116660 +26.41834786290 +26.40451906440 +26.37872249850 +26.37393061820 +26.35394461090 +26.33664874810 +26.30576594150 +26.30460426870 +26.29533163250 +26.28670023250 +26.28401729350 +26.28338578590 +26.28008254810 +26.27372005420 +26.26685423630 +26.26208463170 +26.25531795320 +26.25106847060 +26.24188813450 +26.23472305780 +26.22479433900 +26.22100066060 +26.20281437500 +26.18700223160 +26.15658894100 +26.15038875690 +26.14616855290 +26.13619044490 +26.10365992090 +26.09672075320 +26.09533603800 +26.07494847360 +26.06009727480 +26.05721945320 +26.05235671840 +26.05077725930 +26.04547272880 +26.04263548190 +26.02949207970 +26.01736199280 +26.00625614580 +25.99241769270 +25.98346165870 +25.98054853760 +25.97994102710 +25.97836268960 +25.95523020580 +25.95367822440 +25.93565101830 +25.92787892100 +25.91350344710 +25.89806584900 +25.89614287050 +25.89543270190 +25.89417493060 +25.89096574590 +25.88894792120 +25.88279206950 +25.88111674420 +25.87657729510 +25.87089918780 +25.86973763820 +25.86919187640 +25.84607520710 +25.84187511560 +25.83674967350 +25.80436431170 +25.79313034500 +25.78205904560 +25.78160820040 +25.78067319560 +25.77098639370 +25.76429939270 +25.76424426320 +25.75916384840 +25.74770036460 +25.74189949040 +25.74162624700 +25.73330487420 +25.72809982300 +25.72489643770 +25.72438464640 +25.71498200380 +25.71290016170 +25.70630073550 +25.70053059260 +25.69630050660 +25.68799972530 +25.68772449340 +25.68020057680 +25.67860031130 +25.67682143860 +25.67320060730 +25.66860008240 +25.66699981690 +25.66620063780 +25.66620063780 +25.66520707610 +25.65216293590 +25.65164941170 +25.64918960110 +25.64430046080 +25.62187817990 +25.60189008280 +25.59848580980 +25.57996016070 +25.55258337980 +25.54838311500 +25.54446417500 +25.53620194350 +25.52294049990 +25.52046801090 +25.50862919650 +25.50144974580 +25.50111760640 +25.49267968820 +25.47887035610 +25.47336264830 +25.47240170300 +25.46859979590 +25.46790744000 +25.46759522340 +25.46487946240 +25.46113244330 +25.45334008760 +25.44575355880 +25.44300236810 +25.43472191290 +25.43401831590 +25.41831472010 +25.41244769790 +25.41213272400 +25.39895850170 +25.39079361540 +25.38552770610 +25.38279562420 +25.36958359170 +25.36314739010 +25.35718674380 +25.35431238740 +25.34504761190 +25.33396079710 +25.32721256520 +25.32091656640 +25.30529843500 +25.30239092940 +25.30161151510 +25.29868305540 +25.29493530860 +25.28461504240 +25.28346076870 +25.28335760380 +25.28267007930 +25.26808963940 +25.25290742000 +25.25048717930 +25.24448021100 +25.23905720480 +25.23014412190 +25.22067799580 +25.21589323990 +25.21455661870 +25.21267756980 +25.19090436030 +25.18070286280 +25.17792701070 +25.16988225230 +25.16042029490 +25.15981850620 +25.15873533930 +25.06842978810 +25.05837146800 +25.05168226040 +25.04005960100 +25.03827296890 +25.03337955340 +25.02834207900 +25.02364312120 +25.01654074260 +25.01315280420 +25.00790476340 +25.00049823440 +24.99886499410 +24.99002095390 +24.97721063040 +24.97616506020 +24.96608757950 +24.96459143850 +24.95627714050 +24.93484459280 +24.92221047860 +24.91434273960 +24.90870115340 +24.90381351970 +24.89070896280 +24.88858421810 +24.88277385150 +24.86706417870 +24.86639976500 +24.86068285980 +24.82839965820 +24.81979942320 +24.80841384960 +24.79391666470 +24.78967414660 +24.78879928590 +24.77377910040 +24.76668073720 +24.75602210370 +24.75377263330 +24.73145500300 +24.71859931950 +24.70669937130 +24.70207055690 +24.70030021670 +24.69758159840 +24.69318866840 +24.68580055240 +24.68549919130 +24.67910003660 +24.66990089420 +24.66970062260 +24.66686321840 +24.66683971350 +24.65662405710 +24.64906828510 +24.64710189760 +24.64331826220 +24.61849362910 +24.61805239920 +24.61578237690 +24.61458182830 +24.61005423960 +24.60960767100 +24.59737412190 +24.59707834360 +24.59317324790 +24.59143626580 +24.56412782720 +24.55061865060 +24.54848699970 +24.53208308820 +24.52756773040 +24.50845697850 +24.50839729340 +24.50758137340 +24.47481492730 +24.47033367000 +24.46753056310 +24.46433008740 +24.45224411530 +24.44679723870 +24.42499126310 +24.42108219760 +24.41736823600 +24.41579640670 +24.39630798920 +24.39395075700 +24.39251629640 +24.38818999100 +24.37975685520 +24.36993122870 +24.36982216570 +24.35932676790 +24.35865883990 +24.33915172950 +24.33313598620 +24.32136736090 +24.30004977920 +24.29399128360 +24.28529834780 +24.28268322380 +24.25750658860 +24.25517285000 +24.25091735380 +24.25023879650 +24.21137512000 +24.20057737910 +24.19441910970 +24.19305078060 +24.18685985900 +24.18056068910 +24.18044906280 +24.16435563090 +24.16048713110 +24.15779674390 +24.15546443760 +24.13621253300 +24.12029542600 +24.11953926590 +24.11620303540 +24.10466517640 +24.10050098250 +24.09452029060 +24.08443916350 +24.08391107670 +24.08094934060 +24.07832860130 +24.07580090970 +24.07237415550 +24.05998430570 +24.04739123200 +24.01079224480 +24.00298195820 +24.00122602060 +23.99250631280 +23.99138301070 +23.98548321030 +23.97354034370 +23.96619539500 +23.96371967460 +23.94911991430 +23.94861299440 +23.94486673170 +23.94236086160 +23.93099340200 +23.90795564850 +23.90142941960 +23.89953403040 +23.89679626890 +23.89187130780 +23.88466173830 +23.87139623310 +23.86511830060 +23.86191394100 +23.84728709790 +23.84522162430 +23.84283806390 +23.83879923150 +23.83511816260 +23.83404012910 +23.83184807340 +23.83164997780 +23.82088778490 +23.81170526810 +23.80012518180 +23.79997876680 +23.79140377150 +23.78707611540 +23.77623496240 +23.75159938490 +23.73929977420 +23.73384472530 +23.73006949310 +23.72360038760 +23.71019935610 +23.70693391020 +23.70089912410 +23.69446514890 +23.67149925230 +23.66941284640 +23.66290092470 +23.65718157630 +23.65419960020 +23.65209960940 +23.65141298360 +23.64949989320 +23.64949989320 +23.64660072330 +23.64410018920 +23.62546420450 +23.62305491210 +23.60881767670 +23.58164886220 +23.58142453270 +23.57550518760 +23.55883962210 +23.54135357710 +23.53752561560 +23.52393955440 +23.51847142210 +23.50566927880 +23.50515654580 +23.50330523620 +23.49182868070 +23.48819713350 +23.47827036160 +23.47381482810 +23.45940270980 +23.45770407300 +23.45657406590 +23.45514732740 +23.45304112530 +23.43917096530 +23.43197049120 +23.42822636440 +23.42707474020 +23.42637515440 +23.42627971640 +23.42436546840 +23.42113850950 +23.41598031750 +23.41541681330 +23.41136397440 +23.40862369290 +23.40800775590 +23.40731772720 +23.39220986820 +23.39061320800 +23.38941864070 +23.37127316030 +23.36479660780 +23.35847186310 +23.34783461650 +23.34764315180 +23.34540701930 +23.34109551700 +23.33249208810 +23.31408307680 +23.30754887560 +23.28760676550 +23.26932264890 +23.26333225610 +23.24953161670 +23.24750353500 +23.24155635870 +23.23742552440 +23.22139830510 +23.20581348650 +23.18819423200 +23.17579090580 +23.17422470480 +23.16948331970 +23.16929250040 +23.16813080700 +23.16376503930 +23.15717038720 +23.15574651950 +23.14400805260 +23.12957245180 +23.12756713960 +23.11171310100 +23.09246670740 +23.08498297830 +23.08017209190 +23.06659553780 +23.05076922240 +23.04714851530 +23.02201706420 +23.01929230790 +23.01509682170 +23.00433911070 +22.99467128920 +22.97239196280 +22.96616538120 +22.96431495570 +22.96309680930 +22.96246012140 +22.93846798210 +22.93307840760 +22.92445551970 +22.92372366160 +22.92367366840 +22.91841271710 +22.91252790520 +22.90949166350 +22.90875062990 +22.89486731280 +22.87556131570 +22.86941215420 +22.86785667730 +22.86655467750 +22.86528013340 +22.86014992250 +22.85460771080 +22.84555994680 +22.84272566880 +22.83106079300 +22.82202028330 +22.80504923880 +22.80407362380 +22.78006499350 +22.77481437330 +22.77432080080 +22.75782992400 +22.73101073790 +22.72701641180 +22.72632237180 +22.72419607330 +22.70572925910 +22.70459938050 +22.69195692980 +22.69012012190 +22.66842287300 +22.66701712590 +22.66261177120 +22.66178101750 +22.66169929500 +22.66130446580 +22.66031181280 +22.65066282030 +22.64393515040 +22.63776817210 +22.63199996950 +22.62585906200 +22.61549949650 +22.61459922790 +22.61459922790 +22.61459922790 +22.61459922790 +22.61459922790 +22.61459922790 +22.61174987960 +22.61140060420 +22.61017358700 +22.61000061040 +22.60792721940 +22.60186703750 +22.60181522560 +22.60149237120 +22.60131934550 +22.59563538090 +22.58235653870 +22.57614571520 +22.56583936430 +22.56367122650 +22.56121351320 +22.55909598790 +22.55143675500 +22.54702760140 +22.54559005240 +22.54080188260 +22.53982866450 +22.52995755970 +22.52700440890 +22.52373949990 +22.50256053900 +22.49936045940 +22.49816544840 +22.49565767930 +22.49181689900 +22.48203450170 +22.46344449860 +22.44551355790 +22.44478330030 +22.44457074930 +22.43797070930 +22.43264228320 +22.43006194950 +22.41920304700 +22.41417735970 +22.41231296680 +22.40510949700 +22.39585735560 +22.39128251050 +22.39111444850 +22.39100359340 +22.39061800820 +22.38110630330 +22.37899500750 +22.33773302870 +22.33563701330 +22.33141243010 +22.32898828580 +22.32380778940 +22.31292757820 +22.30284889700 +22.29823655080 +22.29291371880 +22.27723074340 +22.26175279080 +22.25036185460 +22.25003019180 +22.22883495150 +22.22836644830 +22.21397914170 +22.19836470140 +22.19040780380 +22.19034201850 +22.18161374850 +22.18100603920 +22.17823262530 +22.17674410760 +22.17555784790 +22.16282489130 +22.15472884270 +22.14856766900 +22.14724051640 +22.12188687120 +22.10982526850 +22.10783202050 +22.10764431210 +22.10311327490 +22.09875183110 +22.09355034230 +22.08653507280 +22.08322110250 +22.07589765190 +22.06951153380 +22.05446374550 +22.04167489440 +22.03320767530 +22.02727159650 +22.02575867040 +22.01781918750 +22.00590556350 +22.00357113360 +21.98532202990 +21.98025080080 +21.97917128750 +21.94531208110 +21.93427376670 +21.92951940580 +21.92566621270 +21.92520705910 +21.92338534330 +21.90055739400 +21.89450959030 +21.89356927480 +21.89176825260 +21.88660737300 +21.88573304850 +21.88492183830 +21.88281879770 +21.88187488980 +21.88031888090 +21.87719079870 +21.86989165830 +21.86480520080 +21.86118790040 +21.85813848510 +21.85735230120 +21.84210985130 +21.82942874150 +21.82928625230 +21.82626383450 +21.81901841850 +21.81899369050 +21.81862551080 +21.80983699320 +21.80054565750 +21.79637608110 +21.79253393170 +21.78913830460 +21.78683580390 +21.77676357360 +21.77440567440 +21.77323071600 +21.77075743590 +21.76560922890 +21.75665551450 +21.74815215770 +21.74364161620 +21.74257637950 +21.73443206410 +21.73329642020 +21.71332587720 +21.70967394430 +21.69881572700 +21.69788668240 +21.69381723550 +21.68740217190 +21.67554922800 +21.67515340640 +21.66386189770 +21.66060066220 +21.65763549480 +21.65080070500 +21.64649963380 +21.64599990840 +21.64030075070 +21.63529968260 +21.63459968570 +21.63439941410 +21.63139915470 +21.63129997250 +21.63129997250 +21.63089942930 +21.62762756160 +21.62340644220 +21.61135885440 +21.61061665960 +21.58800645960 +21.58376674420 +21.58238471100 +21.57881699600 +21.57207935850 +21.56831262110 +21.54674348180 +21.53232115400 +21.53005459390 +21.51140839030 +21.50539983030 +21.50203767590 +21.50167648590 +21.49320956450 +21.48695022010 +21.48643446080 +21.48092876640 +21.47931157000 +21.47318992950 +21.46937163420 +21.43161779990 +21.42937527450 +21.42501309500 +21.42029301990 +21.41620563930 +21.41617374460 +21.40879471230 +21.40773222780 +21.40174111880 +21.38621720190 +21.36677260400 +21.36180614050 +21.36043684120 +21.35961743190 +21.35691218600 +21.35089075850 +21.34952239620 +21.33630466380 +21.33364972370 +21.31693122660 +21.31404152400 +21.30707523080 +21.30201517960 +21.30004375460 +21.29872090060 +21.27488412350 +21.27399005880 +21.26949800430 +21.26811822830 +21.25171630640 +21.25046173910 +21.24087961760 +21.24006023470 +21.23092321650 +21.22886360370 +21.22541193970 +21.20815679810 +21.19121030330 +21.18503803190 +21.17860269150 +21.17760587430 +21.17561582690 +21.17112500210 +21.16663383870 +21.14754133650 +21.10672040460 +21.09359029290 +21.08433557620 +21.08174183710 +21.06330803720 +21.05869760610 +21.05465049670 +21.05395768580 +21.04437160240 +21.03380627140 +21.03337474010 +21.02591525540 +21.01037862620 +20.99705802630 +20.99045765320 +20.98642272010 +20.97198012240 +20.95952315140 +20.93724646190 +20.93651800370 +20.93598308200 +20.93384085840 +20.93037372220 +20.92323197910 +20.90950106850 +20.89845071710 +20.88870576770 +20.87842268970 +20.87524849090 +20.85356302980 +20.84302822180 +20.84165200730 +20.83668103480 +20.83418934610 +20.83302247860 +20.82821290590 +20.82399630600 +20.82297444760 +20.81448656480 +20.80626899970 +20.80127678430 +20.78615334630 +20.78560208070 +20.78451740240 +20.77880832270 +20.77407722000 +20.76891830030 +20.75501914040 +20.74630435020 +20.73856357840 +20.72611821490 +20.72500897200 +20.71448398970 +20.71094798910 +20.70732495230 +20.70598666780 +20.69511380280 +20.69202321070 +20.68618211550 +20.67152095160 +20.67027438830 +20.66715025920 +20.66414756200 +20.66123612720 +20.66110038760 +20.66071351260 +20.64979656060 +20.64721922990 +20.64220949290 +20.63200807780 +20.63190078740 +20.62607913030 +20.62096463940 +20.62080001830 +20.61585550830 +20.61488008510 +20.61210060120 +20.60849139990 +20.60530090330 +20.60120010380 +20.60070037840 +20.59846858090 +20.59609985350 +20.59589958190 +20.59199905400 +20.59189987180 +20.59189987180 +20.58609962460 +20.57436267840 +20.55706312480 +20.54844147810 +20.53917791910 +20.53707287200 +20.53456694880 +20.53125970450 +20.52835634460 +20.49834909290 +20.48683397980 +20.46348521920 +20.45933353630 +20.44689019110 +20.44637198070 +20.43575701150 +20.42863377750 +20.42689288210 +20.41701022020 +20.39322073070 +20.38288460440 +20.38270219640 +20.36294406760 +20.35683794680 +20.35195804130 +20.35093844670 +20.33295619100 +20.31755466150 +20.31184219390 +20.31010383220 +20.28408535170 +20.26481357080 +20.26160240030 +20.25538825240 +20.25062069050 +20.24577305430 +20.24564790370 +20.24351228170 +20.23123550190 +20.22370530750 +20.21948249370 +20.21535563300 +20.21531253130 +20.21002504050 +20.20902086860 +20.20639585700 +20.18351248620 +20.17626693970 +20.16137493000 +20.16028803000 +20.13642220300 +20.13620945810 +20.13547413030 +20.13405229600 +20.13157012390 +20.12572351120 +20.10898680310 +20.09717450100 +20.09681647750 +20.09033011770 +20.05968245380 +20.05373553870 +20.04877775970 +20.04017418850 +20.03818425890 +20.03676971370 +20.03198292560 +20.02996791270 +20.02796771200 +20.02611356870 +20.02518818360 +20.02176725900 +20.01801198450 +20.00440021880 +20.00292211490 diff --git a/examples/quasimc-global/basins.in b/examples/quasimc-global/basins.in new file mode 100644 index 00000000..88f9479e --- /dev/null +++ b/examples/quasimc-global/basins.in @@ -0,0 +1,74 @@ +#Dcrat(m) vel(m/s) ang(deg) xoffset(km) yoffset(km) t(Ga) +2050000 18300.0 45.0 -2908888.89 -1848000.0 4.31 +690000 18300.0 45.0 889777.778 -157422.222 4.309 +264656 18300.0 45.0 1186318.17 -534322.694 4.308 +326000 18300.0 45.0 8555.55556 27377.7778 4.307 +330000 18300.0 45.0 -152288.889 386711.111 4.306 +260000 18300.0 45.0 -311422.222 246400.0 4.305 +410000 18300.0 45.0 53044.4444 485955.556 4.304 +374000 18300.0 45.0 -2429777.78 1351777.78 4.303 +880000 18300.0 45.0 1642666.67 -1214888.89 4.302 +450000 18300.0 45.0 410666.667 -1830888.89 4.301 +835450 18300.0 45.0 -263040.07 -637522.098 4.3 +730000 18300.0 45.0 458577.778 -263511.111 4.295 +308094 18300.0 45.0 -2519567.44 2028565.87 4.29 +319231 18300.0 45.0 2800767.24 -1122736.77 4.28 +220000 18300.0 45.0 2522177.78 -1274777.78 4.27 +378676 18300.0 45.0 2109715.64 -2774575.25 4.263 +290000 18300.0 45.0 -1570800.0 947955.556 4.262 +212469 18300.0 45.0 -1130569.41 -547599.551 4.261 +886977 18300.0 45.0 1482572.48 -62471.4873 4.26 +359054 18300.0 45.0 -2906174.32 859038.234 4.257 +350250 18300.0 45.0 -774571.654 -1897853.22 4.24 +311641 18300.0 45.0 2791733.77 -1961595.46 4.234 +205004 18300.0 45.0 -1854181.15 1376770.88 4.233 +275673 18300.0 45.0 -1856978.34 -962586.498 4.232 +314000 18300.0 45.0 3062888.89 1690577.78 4.231 +393547 18300.0 45.0 -2706368.89 460362.231 4.23 +315767 18300.0 45.0 -2096692.02 1757288.99 4.229 +210000 18300.0 45.0 287466.667 1221733.33 4.228 +255770 18300.0 45.0 2556030.11 -672915.097 4.226 +240785 18300.0 45.0 2111330.34 -673236.652 4.225 +226910 18300.0 45.0 -2035711.33 1441522.25 4.224 +250897 18300.0 45.0 1931105.19 -1077483.55 4.222 +658628 18300.0 45.0 322727.54 924805.964 4.22 +221894 18300.0 45.0 1794255.96 -399012.867 4.216 +245208 18300.0 45.0 3016756.71 -1607613.72 4.213 +211558 18300.0 45.0 -120713.901 -769825.757 4.21 +216511 18300.0 45.0 -90181.5496 -1115976.46 4.205 +333285 18300.0 45.0 -1661485.97 1175981.78 4.2 +220895 18300.0 45.0 -1691872.37 1973120.21 4.195 +210024 18300.0 45.0 -2611928.38 -482937.546 4.19 +233749 18300.0 45.0 3065058.83 -1312407.74 4.186 +199964 18300.0 45.0 -941029.635 -1524104.18 4.183 +265187 18300.0 45.0 1686465.17 1381789.57 4.18 +221563 18300.0 45.0 2615864.61 1555419.06 4.176 +370000 18300.0 45.0 400400.0 164266.667 4.173 +914999 18300.0 45.0 593195.937 -495024.054 4.17 +582285 18300.0 45.0 2994510.92 627952.666 4.141 +233783 18300.0 45.0 -1175349.83 -171471.453 4.14 +475882 18300.0 45.0 -2596129.71 -1234252.24 4.139 +320524 18300.0 45.0 2311567.75 -1964057.8 4.132 +231696 18300.0 45.0 2820529.3 1747190.24 4.131 +635875 18300.0 45.0 -1603265.73 -1714462.72 4.13 +330791 18300.0 45.0 2414988.84 186292.831 4.128 +205592 18300.0 45.0 -2841219.74 -1210629.78 4.12 +417139 18300.0 45.0 -2694487.95 -152049.734 4.11 +218802 18300.0 45.0 2683743.19 -346053.467 4.1 +628680 18300.0 45.0 2545646.5 940690.222 4.094 +401559 18300.0 45.0 2516183.2 894136.07 4.093 +220531 18300.0 45.0 -252682.598 -2008658.54 4.092 +207028 18300.0 45.0 2054901.26 2407038.61 4.091 +407689 18300.0 45.0 -679255.178 -844843.612 4.09 +549393 18300.0 45.0 -2210021.5 69289.6604 4.089 +603126 18300.0 45.0 1402675.35 1958745.73 4.08 +204083 18300.0 45.0 1543412.32 2107205.15 4.076 +252194 18300.0 45.0 1866228.89 -2349248.81 4.074 +299358 18300.0 45.0 -1177173.74 -2299092.71 4.073 +372000 18300.0 45.0 1129333.33 564666.667 4.071 +1091521 18300.0 45.0 1024041.73 580965.114 4.07 +1113841 18300.0 45.0 -297849.189 1145194.64 3.87 +312747 18300.0 45.0 2284910.03 -2562054.13 3.86 +928472 18300.0 45.0 -1617968.16 -675359.22 3.81 +205511 18300.0 45.0 1382863.9 -926935.011 3.7 +233931 18300.0 45.0 -533541.384 1523910.2 3.65 \ No newline at end of file diff --git a/examples/quasimc-global/cleanup b/examples/quasimc-global/cleanup new file mode 100755 index 00000000..43b86768 --- /dev/null +++ b/examples/quasimc-global/cleanup @@ -0,0 +1,33 @@ +#!/bin/bash +rm console/console*.* +rm surf/surf*.* +rm rego/rego*.* +rm shaded/shaded*.* +rm dist/odist*.dat +rm dist/tdist*.dat +rm dist/pdist*.dat +rm dist/ocum*.dat +rm dist/tcum*.dat +rm misc/mass*.dat +rm misc/ctem*.dat +rm presentation/presentation*.jpg +rm surface_*.dat +rm odistribution.dat +rm pdistribution.dat +rm tdistribution.dat +rm tcumulative.dat +rm ocumulative.dat +rm craterscale.dat +rm ctem.dat +rm fracdone.dat +rm production.dat +rm ejecta_table_max.dat +rm ejecta_table_min.dat +rm impactmass.dat +rm frames/* +rm regolithdepth.dat +rm avgkdiff.dat +rm *.o* +rm term.out +rm time.out +rm testprofile.dat diff --git a/examples/quasimc-global/common.plt b/examples/quasimc-global/common.plt new file mode 100644 index 00000000..1f6ad098 --- /dev/null +++ b/examples/quasimc-global/common.plt @@ -0,0 +1,36 @@ +#gnuplot 5.0 script + + +#Common SFD definitions +nemp(r) = 0.0084 * r**(-2) +ngsat(r) = 0.385 * r**(-2) + +#Define custom color scheme that is colorblind safe +custcolor01 = 'black' +custcolor02 = '#2166ac' +custcolor03 = '#4393c3' +custcolor04 = '#01665e' +custcolor05 = '#8c510a' +custcolor06 = 'black' +custcolor07 = '#8f8686' +custcolor08 = '#343131' +custcolor09 = 'gray90' +custcolor10 = 'gray50' + +#Define custom colorblind safe gradient palette +#set palette defined (0 '#014636',1 '#016c59',2 '#02818a',3 '#3690c0',4 '#67a9cf',5 '#a6bddb',6 '#d0d1e6',7 '#ece2f0', 8 '#fff7fb') + +set palette defined (0 '#081d58',1 '#253494',2 '#225ea8',3 '#1d91c0',4 '#41b6c4',5 '#7fcdbb',6 '#c7e9b4',7 '#edf8b1',8 '#ffffd9') + +#Line styles +set style line 1 lt 1 lc rgb custcolor01 lw 6 pt 6 ps 1 +set style line 2 lt 1 lc rgb custcolor02 lw 5 dt (2,1) pt 4 ps 2 +set style line 22 lt 1 lc rgb custcolor02 lw 5 dt (1,1) pt 4 ps 2 +set style line 3 lt 1 lc rgb custcolor03 lw 5 dt (1,1) pt 4 ps 2 +set style line 4 lt 1 lc rgb custcolor04 lw 5 dt (8,3,1,3) pt 4 ps 2 +set style line 5 lt 1 lc rgb custcolor05 lw 5 dt (8,3) pt 4 ps 2 +set style line 6 lt 1 lc rgb custcolor06 lw 3 dt 1 pt 6 ps 1 +set style line 7 lt 1 lc rgb custcolor07 lw 4 +set style line 8 lt 1 lc rgb custcolor08 lw 4 +set style line 9 lt 1 lc rgb custcolor09 lw 3 +set style line 10 lt 1 lc rgb custcolor10 lw 3 diff --git a/examples/quasimc-global/console/.gitignore b/examples/quasimc-global/console/.gitignore new file mode 100644 index 00000000..88cc1070 --- /dev/null +++ b/examples/quasimc-global/console/.gitignore @@ -0,0 +1,2 @@ +*.jpg +*.png diff --git a/examples/quasimc-global/counttest.plt b/examples/quasimc-global/counttest.plt new file mode 100755 index 00000000..e045eaaf --- /dev/null +++ b/examples/quasimc-global/counttest.plt @@ -0,0 +1,30 @@ +#gnuplot 5.0 script +reset + +set terminal postscript enhanced eps color size 5.0,5.0 16 +set output 'counttest.eps' + + +set format x "" +set format y "" +set xrange[0:1999] +set yrange[0:1999] + +set size ratio 1.0 + +unset xtics +unset ytics + +pix = 3.08e3 + +#set label 1 "A" at graph 0.05,graph 0.95 front center tc rgb "white" font ",24" + +set style line 1 lt 1 lc rgb "white" lw 1 +set style line 2 lt 1 lc rgb "blue" lw 0.1 +set style line 3 lt 1 lc rgb "red" lw 0.1 +set style line 4 lt 1 lc rgb "green" lw 0.1 +set style line 5 lt 1 lc rgb "cyan" lw 0.1 + + +plot "surf/surf000166.jpg" binary filetype=auto w rgbimage notitle,\ + "dist/ocum_000166.dat" u ($4 > 0.00 ? $2/pix - 1 : 1/0):($3/pix - 1):(0.5*$1/pix) w circles ls 1 notitle diff --git a/examples/quasimc-global/craterlist.in b/examples/quasimc-global/craterlist.in new file mode 100644 index 00000000..bf096d1d --- /dev/null +++ b/examples/quasimc-global/craterlist.in @@ -0,0 +1,74 @@ +#Dcrat(m) vel(m/s) ang(deg) xoffset(m) yoffset(m) t(Ga) +2050000 18300.0 45.0 -2908888.89 -1848000.0 4.31 +690000 18300.0 45.0 889777.778 -157422.222 4.309 +264656 18300.0 45.0 1186318.17 -534322.694 4.308 +326000 18300.0 45.0 8555.55556 27377.7778 4.307 +330000 18300.0 45.0 -152288.889 386711.111 4.306 +260000 18300.0 45.0 -311422.222 246400.0 4.305 +410000 18300.0 45.0 53044.4444 485955.556 4.304 +374000 18300.0 45.0 -2429777.78 1351777.78 4.303 +880000 18300.0 45.0 1642666.67 -1214888.89 4.302 +450000 18300.0 45.0 410666.667 -1830888.89 4.301 +835450 18300.0 45.0 -263040.07 -637522.098 4.3 +730000 18300.0 45.0 458577.778 -263511.111 4.295 +308094 18300.0 45.0 -2519567.44 2028565.87 4.29 +319231 18300.0 45.0 2800767.24 -1122736.77 4.28 +220000 18300.0 45.0 2522177.78 -1274777.78 4.27 +378676 18300.0 45.0 2109715.64 -2774575.25 4.263 +290000 18300.0 45.0 -1570800.0 947955.556 4.262 +212469 18300.0 45.0 -1130569.41 -547599.551 4.261 +886977 18300.0 45.0 1482572.48 -62471.4873 4.26 +359054 18300.0 45.0 -2906174.32 859038.234 4.257 +350250 18300.0 45.0 -774571.654 -1897853.22 4.24 +311641 18300.0 45.0 2791733.77 -1961595.46 4.234 +205004 18300.0 45.0 -1854181.15 1376770.88 4.233 +275673 18300.0 45.0 -1856978.34 -962586.498 4.232 +314000 18300.0 45.0 3062888.89 1690577.78 4.231 +393547 18300.0 45.0 -2706368.89 460362.231 4.23 +315767 18300.0 45.0 -2096692.02 1757288.99 4.229 +210000 18300.0 45.0 287466.667 1221733.33 4.228 +255770 18300.0 45.0 2556030.11 -672915.097 4.226 +240785 18300.0 45.0 2111330.34 -673236.652 4.225 +226910 18300.0 45.0 -2035711.33 1441522.25 4.224 +250897 18300.0 45.0 1931105.19 -1077483.55 4.222 +658628 18300.0 45.0 322727.54 924805.964 4.22 +221894 18300.0 45.0 1794255.96 -399012.867 4.216 +245208 18300.0 45.0 3016756.71 -1607613.72 4.213 +211558 18300.0 45.0 -120713.901 -769825.757 4.21 +216511 18300.0 45.0 -90181.5496 -1115976.46 4.205 +333285 18300.0 45.0 -1661485.97 1175981.78 4.2 +220895 18300.0 45.0 -1691872.37 1973120.21 4.195 +210024 18300.0 45.0 -2611928.38 -482937.546 4.19 +233749 18300.0 45.0 3065058.83 -1312407.74 4.186 +199964 18300.0 45.0 -941029.635 -1524104.18 4.183 +265187 18300.0 45.0 1686465.17 1381789.57 4.18 +221563 18300.0 45.0 2615864.61 1555419.06 4.176 +370000 18300.0 45.0 400400.0 164266.667 4.173 +914999 18300.0 45.0 593195.937 -495024.054 4.17 +582285 18300.0 45.0 2994510.92 627952.666 4.141 +233783 18300.0 45.0 -1175349.83 -171471.453 4.14 +475882 18300.0 45.0 -2596129.71 -1234252.24 4.139 +320524 18300.0 45.0 2311567.75 -1964057.8 4.132 +231696 18300.0 45.0 2820529.3 1747190.24 4.131 +635875 18300.0 45.0 -1603265.73 -1714462.72 4.13 +330791 18300.0 45.0 2414988.84 186292.831 4.128 +205592 18300.0 45.0 -2841219.74 -1210629.78 4.12 +417139 18300.0 45.0 -2694487.95 -152049.734 4.11 +218802 18300.0 45.0 2683743.19 -346053.467 4.1 +628680 18300.0 45.0 2545646.5 940690.222 4.094 +401559 18300.0 45.0 2516183.2 894136.07 4.093 +220531 18300.0 45.0 -252682.598 -2008658.54 4.092 +207028 18300.0 45.0 2054901.26 2407038.61 4.091 +407689 18300.0 45.0 -679255.178 -844843.612 4.09 +549393 18300.0 45.0 -2210021.5 69289.6604 4.089 +603126 18300.0 45.0 1402675.35 1958745.73 4.08 +204083 18300.0 45.0 1543412.32 2107205.15 4.076 +252194 18300.0 45.0 1866228.89 -2349248.81 4.074 +299358 18300.0 45.0 -1177173.74 -2299092.71 4.073 +372000 18300.0 45.0 1129333.33 564666.667 4.071 +1091521 18300.0 45.0 1024041.73 580965.114 4.07 +1113841 18300.0 45.0 -297849.189 1145194.64 3.87 +312747 18300.0 45.0 2284910.03 -2562054.13 3.86 +928472 18300.0 45.0 -1617968.16 -675359.22 3.81 +205511 18300.0 45.0 1382863.9 -926935.011 3.7 +233931 18300.0 45.0 -533541.384 1523910.2 3.65 \ No newline at end of file diff --git a/examples/quasimc-global/craterproduction.py b/examples/quasimc-global/craterproduction.py new file mode 100644 index 00000000..4d81b687 --- /dev/null +++ b/examples/quasimc-global/craterproduction.py @@ -0,0 +1,216 @@ +import numpy as np +from scipy import optimize + +# The Neukum production function for the Moon and Mars +#Lunar PF from: Ivanov, Neukum, and Hartmann (2001) SSR v. 96 pp. 55-86 +#Mars PF from: Ivanov (2001) SSR v. 96 pp. 87-104 +sfd_coef = { + "NPF_Moon" : [-3.0876,-3.557528,+0.781027,+1.021521,-0.156012,-0.444058,+0.019977,+0.086850,-0.005874,-0.006809,+8.25e-4, +5.54e-5], + "NPF_Mars" : [-3.384, -3.197, +1.257, +0.7915, -0.4861, -0.3630, +0.1016, +6.756e-2,-1.181e-2,-4.753e-3,+6.233e-4,+5.805e-5] + } +sfd_range = { + "NPF_Moon" : [0.01,1000], + "NPF_Mars" : [0.015,362] +} +#Exponential time constant (Ga) +tau = 6.93 +Nexp = 5.44e-14 + +time_coef = { + "NPF_Moon" : Nexp, + "NPF_Mars" : Nexp * 10**(sfd_coef.get("NPF_Mars")[0]) / 10**(sfd_coef.get("NPF_Moon")[0]) +} + +def N1(T, pfmodel): + """ + Return the N(1) value as a function of time for a particular production function model + + Parameters + ---------- + T : numpy array + Time in units of Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + N1 : numpy array + The number of craters per square kilometer greater than 1 km in diameter + """ + T_valid_range = np.where((T <= 4.5) & (T >= 0.0), T, np.nan) + return time_coef.get(pfmodel) * (np.exp(tau * T_valid_range) - 1.0) + 10 ** (sfd_coef.get(pfmodel)[0]) * T_valid_range + +def CSFD(Dkm,planet): + """ + Return the cumulative size-frequency distribution for a particular production function model + + Parameters + ---------- + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + CSFD : numpy array + The number of craters per square kilometer greater than Dkm in diameter at T=1 Ga + """ + logCSFD = sum(co * np.log10(Dkm) ** i for i, co in enumerate(sfd_coef.get(planet))) + return 10**(logCSFD) + +def DSFD(Dkm,planet): + """ + Return the differential size-frequency distribution for a particular production function model + + Parameters + ---------- + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + DSFD : numpy array + The differential number of craters (dN/dD) per square kilometer greater than Dkm in diameter at T = 1 Ga + """ + dcoef = sfd_coef.get(planet)[1:] + logDSFD = sum(co * np.log10(Dkm) ** i for i, co in enumerate(dcoef)) + return 10**(logDSFD) * CSFD(Dkm,planet) / Dkm + +def Tscale(T,planet): + """ + Return the number density of craters at time T relative to time T = 1 Ga + + Parameters + ---------- + T : numpy array + Time in units of Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + Tscale : numpy array + N1(T) / CSFD(Dkm = 1.0) + """ + return N1(T,planet) / CSFD(1.0,planet) + +def pf_csfd(T,Dkm,planet): + """ + Return the cumulative size-frequency distribution for a particular production function model as a function of Time + + Parameters + ---------- + T : numpy array + Time in units of Ga + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + pf_csfd : numpy array + The cumulative number of craters per square kilometer greater than Dkm in diameter at time T T + """ + D_valid_range = np.where((Dkm >= sfd_range.get(planet)[0]) & (Dkm <= sfd_range.get(planet)[1]),Dkm,np.nan) + return CSFD(D_valid_range,planet) * Tscale(T,planet) + +def pf_dsfd(T,Dkm,planet): + """ + Return the differential size-frequency distribution for a particular production function model as a function of Time + + Parameters + ---------- + T : numpy array + Time in units of Ga + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + pf_dsfd : numpy array + The cumulative number of craters per square kilometer greater than Dkm in diameter at time T T + """ + D_valid_range = np.where((Dkm >= sfd_range.get(planet)[0]) & (Dkm <= sfd_range.get(planet)[1]), Dkm, np.nan) + return DSFD(D_valid_range, planet) * Tscale(T, planet) + +def T_from_scale(TS,planet): + """ + Return the time in Ga for the given number density of craters relative to that at 1 Ga. + This is the inverse of Tscale + + Parameters + ---------- + TS : numpy array + number density of craters relative to that at 1 Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + T_from_scale : numpy array + The time in Ga + """ + def func(S): + return Tscale(S,planet) - TS + return optimize.fsolve(func, np.full_like(TS,4.4),xtol=1e-10) + + +if __name__ == "__main__": + import matplotlib.pyplot as plt + import matplotlib.ticker as ticker + print("Tests go here") + print(f"T = 1 Ga, N(1) = {pf_csfd(1.0,1.00,'NPF_Moon')}") + print(f"T = 4.2 Ga, N(1) = {pf_csfd(4.2,1.00,'NPF_Moon')}") + print("Tscale test: Should return all 1s") + Ttest = np.logspace(-4,np.log10(4.4),num=100) + Tres = T_from_scale(Tscale(Ttest,'NPF_Mars'),'NPF_Mars') + print(Ttest / Tres) + #for i,t in enumerate(Ttest): + # print(t,Tscale(t,'Moon'),Tres[i]) + + CSFDfig = plt.figure(1, figsize=(8, 7)) + ax = {'NPF_Moon': CSFDfig.add_subplot(121), + 'NPF_Mars': CSFDfig.add_subplot(122)} + + tvals = [0.01,1.0,4.0] + x_min = 1e-3 + x_max = 1e3 + y_min = 1e-9 + y_max = 1e3 + Dvals = np.logspace(np.log10(x_min), np.log10(x_max)) + for key in ax: + ax[key].title.set_text(key) + ax[key].set_xscale('log') + ax[key].set_yscale('log') + ax[key].set_ylabel('$\mathregular{N_{>D} (km^{-2})}$') + ax[key].set_xlabel('Diameter (km)') + ax[key].set_xlim(x_min, x_max) + ax[key].set_ylim(y_min, y_max) + ax[key].yaxis.set_major_locator(ticker.LogLocator(base=10.0, numticks=20)) + ax[key].yaxis.set_minor_locator(ticker.LogLocator(base=10.0, subs=np.arange(2,10), numticks=100)) + ax[key].xaxis.set_major_locator(ticker.LogLocator(base=10.0, numticks=20)) + ax[key].xaxis.set_minor_locator(ticker.LogLocator(base=10.0, subs=np.arange(2,10), numticks=100)) + ax[key].grid(True,which="minor",ls="-",lw=0.5,zorder=5) + ax[key].grid(True,which="major",ls="-",lw=1,zorder=10) + for t in tvals: + prod = pf_csfd(t,Dvals,key) + ax[key].plot(Dvals, prod, '-', color='black', linewidth=1.0, zorder=50) + labeli = 15 + ax[key].text(Dvals[labeli],prod[labeli],f"{t:.2f} Ga", ha="left", va="top",rotation=-72) + + plt.tick_params(axis='y', which='minor') + plt.tight_layout() + plt.show() diff --git a/examples/quasimc-global/ctem.in b/examples/quasimc-global/ctem.in new file mode 100755 index 00000000..ca50a7fa --- /dev/null +++ b/examples/quasimc-global/ctem.in @@ -0,0 +1,76 @@ +! CTEM Input file + + +! Testing input. These are used to perform non-Monte Carlo tests. +testflag F ! Set to T to create a single crater with user-defined impactor properties +testimp 15000.0 ! Diameter of test impactor (m) +testvel 18.3e3 ! Velocity of test crater (m/s) +testang 45.0 ! Impact angle of test crater (deg) - Default 90.0 +testxoffset 0.0 ! x-axis offset of crater center from grid center (m) - Default 0.0 +testyoffset 0.0 ! y-axis offset of crater center from grid center (m) - Default 0.0 +tallyonly F ! Tally the craters without generating any craters +testtally F +quasimc T ! MC run constrained by non-MC 'real' craters given in a list +realcraterlist craterlist.in ! list of 'real' craters for Quasi-MC runs + + + +! IDL driver in uts +interval 6.280 +numintervals 100 ! Total number of intervals (total time = interval * numintervals) <--when runtype is 'single' +restart F ! Restart a previous run +impfile NPFextrap.dat ! Impactor SFD rate file (col 1: Dimp (m), col 2: ! impactors > D (m**(-2) y**(-1)) +popupconsole F ! Pop up console window every output interval +saveshaded F ! Output shaded relief images +saverego F ! Output regolith map images +savepres F ! Output simplified console display images (presentation-compatible images) +savetruelist T ! Save the true cumulative crater distribution for each interval (large file size) +sfdcompare LOLASethCraterCatalogv8gt20-binned.dat ! File name for the SFD comparison file used in the console display +shadedminh -85.0 ! Minimum height for shaded relief map (m) (Default - automatic) +shadedmaxh 85.0 ! Maximum height for shaded relief map (m) (Default - automatic) +runtype single ! Run type: options are normal / statistical + ! single: craters accumulate in successive intervals + ! statistical: surface is reset between intervals + +! CTEM required inputs +seed 76535 ! Random number generator seed +gridsize 200 ! Size of grid in pixels +numlayers 10 ! Number of perched layers +pix 3.08e4 ! Pixel size (m) +mat rock ! Material (rock or ice) +! Bedrock scaling parameters +mu_b 0.55e0 ! Experimentally derived parameter for bedrock crater scaling law +kv_b 0.20e0 ! Experimentally derived parameter for bedrock crater scaling law +trho_b 2250.0e0 ! Target density (bedrock) (kg/m**3) +ybar_b 0.0e6 ! Bedrock strength (Pa) +! Regolith scaling parameters +mu_r 0.55e0 ! Experimentally derived parameter for regolith crater scaling law +kv_r 0.20e0 ! Experimentally derived parameter for regolith crater scaling law +trho_r 2250.0e0 ! Target density (regolith) (kg/m**3) +ybar_r 0.00e6 ! Regolith strength (Pa) +! Body parameters +gaccel 1.62e0 ! Gravitational acceleration at target (m/s**2) +trad 1737.35e3 ! Target radius (m) +prho 2500.0e0 ! Projectile density (kg/m**3) +sfdfile production.dat ! Impactor SFD file (col 1: Dimp (m), col 2: ! impactors > D +velfile lunar-MBA-impactor-velocities.dat ! Impactor velocity dist file + +! Seismic shaking input (required if seismic shaking is set to T, otherwise ignored) +doseismic F ! Perform seismic shaking calculations with each impact - Default F + +! Optional inputF These have internally set default values that work reasonable well. Comment them out with +deplimit 9e99 ! Depth limit for craters (m) - Default is to ignore. +maxcrat 3.15e-2 ! Fraction of gridsize that maximum crater can be - Default 1.0 +killatmaxcrater F ! Stop the run if a crater larger than the maximum is produced - Default F +basinimp 35.0e3 ! Size of impactor to switch to lunar basin scaling law - Default is to ignore +docollapse T ! Do slope collapse - Default T +dosoftening T ! Do ejecta softening - Default T +doangle T ! Vary the impact angle. Set to F to have only vertical impacts - Default T +Kd1 0.0001 +psi 2.000 +fe 4.00 +ejecta_truncation 4.0 +doregotrack F +dorays T +superdomain F +dorealistic F diff --git a/examples/quasimc-global/ctem_driver.pro b/examples/quasimc-global/ctem_driver.pro new file mode 100755 index 00000000..060d1b8d --- /dev/null +++ b/examples/quasimc-global/ctem_driver.pro @@ -0,0 +1,233 @@ +pro ctem_driver + +;------------------------------------------------------------------------- +; Jim Richardson, Arecibo Observatory +; David Minton, Purdue University Dept. of Earth, Atmospheric, & Planetary Sciences +; July 2014 +; Cratered Terrain Evolution Model display module +; +; Inputs are read in from the ctem.in file +; +;------------------------------------------------------------------------- +;------------- Initial Setup ---------------- +;------------------------------------------------------------------------- +Compile_Opt DEFINT32 +!EXCEPT=2 + +; ----------- input file ----------------------- +infilename = 'ctem.in' +DATFILE='ctem.dat' + +; ---------- reading input files ---------- +seedarr = lon64arr(100) +seedn = 1 +totalimpacts = long64(0) +ncount = long64(0) +curyear = 0.d0 +restart = "F" +fracdone = 1.0d0 +masstot = 0.d0 + +ctem_io_read_input,infilename,interval,numintervals,gridsize,pix,seed,numlayers,sfdfile,impfile,maxcrat,ph1,shadedmaxhdefault,shadedminhdefault,shadedminh,shadedmaxh,restart,runtype,popupconsole,saveshaded,saverego,savepres,savetruelist + +seedarr(0) = seed +area = (gridsize * pix)^2 + +;read input data +pnum = file_lines(impfile) +production = dblarr(2,pnum) +productionfunction = dblarr(2,pnum) +openr,LUN,impfile,/GET_LUN +readf,LUN,productionfunction +free_lun,LUN + +;create impactor production population +production(0,*) = productionfunction(0,*) +production(1,*) = productionfunction(1,*)*area*interval + +;write out corrected production population +openw,1,sfdfile +printf,1,production +close,1 +free_lun,1 + +;set up cratering surface grid and display-only grid +surface_dem = dblarr(gridsize,gridsize) +regolith = dblarr(gridsize,gridsize) + +;set up temporary distribution bins +distl = 1 +pdistl = 1 +odist = dblarr(6,distl) +tdist = dblarr(6,distl) +pdist = dblarr(6,pdistl) +pdisttotal = dblarr(6,pdistl) + +datformat = "(I17,1X,I12,1X,E19.12,1X,A1,1X,F9.6,1X,E19.12)" + + +if strmatch(restart,'F',/fold_case) then begin ; Start with a clean slate + print, 'Starting a new run' + curyear = 0.0d0 + totalimpacts = 0 + masstot = 0.d0 + fracdone = 1.0d0 + + if strmatch(runtype,'statistical',/fold_case) then begin + ncount = 1 + openw,LUN,DATFILE,/GET_LUN + printf,LUN,totalimpacts,ncount,curyear,restart,fracdone,masstot,format=datformat + for n=0,seedn-1 do begin + printf,LUN,seedarr(n),format='(I12)' + endfor + free_lun,LUN + endif else begin + ncount = 0 + endelse + + surface_dem(*,*) = 0.0d0 + regolith(*,*) = 0.0d0 + + file_delete, 'tdistribution.dat',/allow_nonexistent + +endif else begin ; continue an old run + print, 'Continuing a previous run' + + ctem_io_read_old,gridsize,surface_dem,regolith,odist,tdist,pdist,mass + + ;read in constants file + openr,LUN,DATFILE,/GET_LUN + readf,LUN,totalimpacts,ncount,curyear,restart,fracdone,masstot,format=datformat + seedn = 0 + while ~ eof(LUN) do begin + readf,LUN,iseed + seedarr(seedn) = long64(iseed) + seedn=seedn+1 + endwhile + +endelse + +openw,FRACDONEFILE,'fracdone.dat',/GET_LUN +openw,REGODEPTHFILE,'regolithdepth.dat',/GET_LUN + +;------------------------------------------------------------------------- +; ---------- begin loops ---------- +;------------------------------------------------------------------------- +print, 'Beginning loops' + +;define number of loop iterations and begin +;numintervals=ceil(endyear/interval)-ncount +while (ncount le numintervals) do begin + + + ; ---------- creating crater population ---------- + if (ncount gt 0) then begin + + fnum = string(ncount,format='(I6.6)') + if (file_test('misc',/DIRECTORY) eq 0) then begin + file_mkdir,'misc' + endif + ; save a copy of the ctem.dat file + fname = 'misc/ctem_' + fnum + '.dat' + file_copy, 'ctem.dat', fname, /OVERWRITE + + print, ncount, ' Calling FORTRAN routine' + ;call fortran program to create & count craters + spawn, './CTEM',/noshell + + ; ---------- reading FORTRAN output ---------- + print, ncount, ' Reading FORTRAN output' + ctem_io_read_old,gridsize,surface_dem,regolith,odist,tdist,pdist,mass + + ;read in constants file + openr,LUN,DATFILE,/GET_LUN + readf,LUN,totalimpacts,ncount,curyear,restart,fracdone,masstot,format=datformat + seedn = 0 + while ~ eof(LUN) do begin + readf,LUN,iseed + seedarr(seedn) = long64(iseed) + seedn = seedn + 1 + endwhile + free_lun,LUN + + curyear = curyear + fracdone * interval + masstot = masstot + mass + printf,FRACDONEFILE,fracdone,curyear + flush,FRACDONEFILE + + printf,REGODEPTHFILE,curyear,mean(regolith),max(regolith),min(regolith) + flush,REGODEPTHFILE + + ;save a copy of the binned observed crater distribution + if (file_test('dist',/DIRECTORY) eq 0) then begin + file_mkdir,'dist' + endif + fname = 'dist/odist_' + fnum + '.dat' + file_copy, 'odistribution.dat', fname, /OVERWRITE + + ; save a copy of the cumulative observed crater distribution + fname = 'dist/ocum_' + fnum + '.dat' + file_copy, 'ocumulative.dat', fname, /OVERWRITE + + ;save a copy of the binned true distribution + fname = 'dist/tdist_' + fnum + '.dat' + file_copy, 'tdistribution.dat', fname, /OVERWRITE + + ;save a copy of the binned idealized production function + fname = 'dist/pdist_' + fnum + '.dat' + file_copy, 'pdistribution.dat', fname, /OVERWRITE + + ; save a copy of the cumulative true crater distribution if the user requests it + if strmatch(savetruelist,'T',/fold_case) then begin + fname = 'dist/tcum_' + fnum + '.dat' + file_copy, 'tcumulative.dat', fname, /OVERWRITE + endif + + ; save a copy of the impacted mass + fname = 'misc/mass_' + fnum + '.dat' + file_copy, 'impactmass.dat', fname, /OVERWRITE + + + endif + + ; Get the accumulated production function + pdisttotal = pdist + pdisttotal(3:5,*) = pdist(3:5,*) * curyear / interval + + ; ---------- displaying results ---------- + print, ncount, ' Displaying results' + + ctem_image_dem,ncount,gridsize,pix,surface_dem,surface_dem_image + if strmatch(saverego,'T',/fold_case) then ctem_image_regolith,ncount,gridsize,pix,regolith,regolith_image + if strmatch(saveshaded,'T',/fold_case) then begin + if (shadedminhdefault eq 1) then shadedminh = min(surface_dem) + if (shadedmaxhdefault eq 1) then shadedmaxh = max(surface_dem) + ctem_image_shaded_relief,ncount,gridsize,pix,surface_dem,surface_dem,shadedminh,shadedmaxh,'shaded',shaded_image + endif + if strmatch(savepres,'T',/fold_case) then ctem_image_presentation,ncount,gridsize,pix,curyear,odist,pdisttotal,tdist,ph1,surface_dem_image + ctem_window_display,ncount,totalimpacts,gridsize,pix,curyear,masstot,odist,pdisttotal,tdist,ph1,surface_dem,regolith,surface_dem_image,popupconsole + + ncount = ncount + 1 + + ;write out the current data file + if (strmatch(runtype,'statistical',/fold_case)) || (ncount eq 1) then begin + restart = 'F' + curyear = 0.0d0 + totalimpacts = 0 + masstot = 0.d0 + file_delete, 'tdistribution.dat',/allow_nonexistent + endif else begin + restart = 'T' + endelse + + openw,LUN,DATFILE,/GET_LUN + printf,LUN,totalimpacts,ncount,curyear,restart,fracdone,masstot,format=datformat + for n=0,seedn-1 do begin + printf,LUN,seedarr(n),format='(I12)' + endfor + free_lun,LUN +endwhile +free_lun,FRACDONEFILE +free_lun,REGODEPTHFILE + +end diff --git a/examples/quasimc-global/ctem_driver.py b/examples/quasimc-global/ctem_driver.py new file mode 100755 index 00000000..6fb56613 --- /dev/null +++ b/examples/quasimc-global/ctem_driver.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python3 +# +#Cratered Terrain Evolution Model driver +# +#Original IDL design: Jim Richardson, Arecibo Observatory +#Revised IDL design: David Minton, Purdue University +#Re-engineered design and Python implementation: Matthew Route, Purdue University +#August 2016 + +#Import general purpose modules + +import numpy +import os +import subprocess +import shutil +import pandas +from scipy.interpolate import interp1d + +#Import CTEM modules +import ctem_io_readers +import ctem_io_writers +import craterproduction #craterproduction had to be cp'd to example dir + +#Create and initialize data dictionaries for parameters and options from CTEM.in +notset = '-NOTSET-' +currentdir = os.getcwd() + os.sep + +parameters={'restart': notset, + 'runtype': notset, + 'popupconsole': notset, + 'saveshaded': notset, + 'saverego': notset, + 'savepres': notset, + 'savetruelist': notset, + 'seedn': 1, + 'totalimpacts': 0, + 'ncount': 0, + 'curyear': 0.0, + 'fracdone': 1.0, + 'masstot': 0.0, + 'interval': 0.0, + 'numintervals': 0, + 'pix': -1.0, + 'gridsize': -1, + 'seed': 0, + 'maxcrat': 1.0, + 'shadedminhdefault': 1, + 'shadedmaxhdefault': 1, + 'shadedminh': 0.0, + 'shadedmaxh': 0.0, + 'workingdir': currentdir, + 'ctemfile': 'ctem.in', + 'datfile': 'ctem.dat', + 'impfile': notset, + 'sfdcompare': notset, + 'sfdfile': notset, + 'quasimc': notset, + 'realcraterlist': notset} + +#Read ctem.in to initialize parameter values based on user input +ctem_io_readers.read_ctemin(parameters,notset) + +#Read sfdcompare file +sfdfile = parameters['workingdir'] + parameters['sfdcompare'] +ph1 = ctem_io_readers.read_formatted_ascii(sfdfile, skip_lines = 0) + +#Set up data arrays +seedarr = numpy.zeros(100, dtype = numpy.int) +seedarr[0] = parameters['seed'] +odist = numpy.zeros([1, 6]) +pdist = numpy.zeros([1, 6]) +tdist = numpy.zeros([1, 6]) +surface_dem = numpy.zeros([parameters['gridsize'], parameters['gridsize']], dtype = numpy.float) +regolith = numpy.zeros([parameters['gridsize'], parameters['gridsize']], dtype =numpy.float) + +#Read production function file +impfile = parameters['workingdir'] + parameters['impfile'] +prodfunction = ctem_io_readers.read_formatted_ascii(impfile, skip_lines = 0) + +if (parameters['quasimc'] == 'T'): + + #Read list of real craters + print("quasi-MC mode is ON") + craterlistfile = parameters['workingdir'] + parameters['realcraterlist'] + rclist = ctem_io_readers.read_formatted_ascii(craterlistfile, skip_lines = 0) + + #Interpolate craterscale.dat to get impactor sizes from crater sizes given + df = pandas.read_csv('craterscale.dat', sep='\s+') + df['log(Dc)'] = numpy.log(df['Dcrat(m)']) + df['log(Di)'] = numpy.log(df['#Dimp(m)']) + xnew = df['log(Dc)'].values + ynew = df['log(Di)'].values + interp = interp1d(xnew, ynew, fill_value='extrapolate') + rclist[:,0] = numpy.exp(interp(numpy.log(rclist[:,0]))) + + #Convert age in Ga to "interval time" + rclist[:,5] = (parameters['interval'] * parameters['numintervals']) - craterproduction.Tscale(rclist[:,5], 'NPF_Moon') + rclist = rclist[rclist[:,5].argsort()] + + #Export to dat file for Fortran use + ctem_io_writers.write_realcraters(parameters, rclist) + +#Create impactor production population +area = (parameters['gridsize'] * parameters['pix'])**2 +production = numpy.copy(prodfunction) +production[:,1] = production[:,1] * area * parameters['interval'] + +#Write corrected production function to file +ctem_io_writers.write_production(parameters, production) + +#Starting new or old run? +if (parameters['restart'].upper() == 'F'): + print('Starting a new run') + + if (parameters['runtype'].upper() == 'STATISTICAL'): + parameters['ncount'] = 1 + + #Write ctem.dat file + ctem_io_writers.write_ctemdat(parameters, seedarr) + + else: + parameters['ncount'] = 0 + + #Delete tdistribution file, if it exists + tdist_file = parameters['workingdir'] + 'tdistribution.dat' + if os.path.isfile(tdist_file): + os.remove(tdist_file) + +else: + print('Continuing a previous run') + + #Read surface dem(shaded relief) and ejecta data files + dem_file = parameters['workingdir'] + 'surface_dem.dat' + surface_dem = ctem_io_readers.read_unformatted_binary(dem_file, parameters['gridsize']) + ejecta_file = parameters['workingdir'] + 'surface_ejc.dat' + regolith = ctem_io_readers.read_unformatted_binary(ejecta_file, parameters['gridsize']) + + #Read odistribution, tdistribution, and pdistribution files + ofile = parameters['workingdir'] + 'odistribution.dat' + odist = ctem_io_readers.read_formatted_ascii(ofile, skip_lines = 1) + tfile = parameters['workingdir'] + 'tdistribution.dat' + tdist = ctem_io_readers.read_formatted_ascii(tfile, skip_lines = 1) + pfile = parameters['workingdir'] + 'pdistribution.dat' + pdist = ctem_io_readers.read_formatted_ascii(pfile, skip_lines = 1) + + #Read impact mass from file + massfile = parameters['workingdir'] + 'impactmass.dat' + impact_mass = ctem_io_readers.read_impact_mass(massfile) + + #Read ctem.dat file + ctem_io_readers.read_ctemdat(parameters, seedarr) + +#Open fracdonefile and regodepthfile for writing +filename = parameters['workingdir'] + 'fracdone.dat' +fp_frac = open(filename,'w') +filename = parameters['workingdir'] + 'regolithdepth.dat' +fp_reg = open(filename,'w') + +#Begin CTEM processing loops +print('Beginning loops') + +ctem_io_writers.create_dir_structure(parameters) + +while (parameters['ncount'] <= parameters['numintervals']): + + #Create crater population + if (parameters['ncount'] > 0): + + #Move ctem.dat + forig = parameters['workingdir'] + 'ctem.dat' + fdest = parameters['workingdir'] + 'misc' + os.sep + "ctem%06d.dat" % parameters['ncount'] + shutil.copy2(forig, fdest) + + #Create crater population and display CTEM progress on screen + print(parameters['ncount'], ' Calling FORTRAN routine') + with subprocess.Popen([parameters['workingdir']+'CTEM'], stdout=subprocess.PIPE, bufsize=1,universal_newlines=True) as p: + for line in p.stdout: + print(line, end='') + + + #Optional: do not pipe CTEM progress to the screen + #subprocess.check_output([parameters['workingdir']+'CTEM']) + + #Read Fortran output + print(parameters['ncount'], ' Reading Fortran output') + + #Read surface dem(shaded relief) and ejecta data files + dem_file = parameters['workingdir'] + 'surface_dem.dat' + surface_dem = ctem_io_readers.read_unformatted_binary(dem_file, parameters['gridsize']) + ejecta_file = parameters['workingdir'] + 'surface_ejc.dat' + regolith = ctem_io_readers.read_unformatted_binary(ejecta_file, parameters['gridsize']) + + #Read odistribution, tdistribution, and pdistribution files + ofile = parameters['workingdir'] + 'odistribution.dat' + odist = ctem_io_readers.read_formatted_ascii(ofile, skip_lines = 1) + tfile = parameters['workingdir'] + 'tdistribution.dat' + tdist = ctem_io_readers.read_formatted_ascii(tfile, skip_lines = 1) + pfile = parameters['workingdir'] + 'pdistribution.dat' + pdist = ctem_io_readers.read_formatted_ascii(pfile, skip_lines = 1) + + #Read impact mass from file + massfile = parameters['workingdir'] + 'impactmass.dat' + impact_mass = ctem_io_readers.read_impact_mass(massfile) + + #Read ctem.dat file + ctem_io_readers.read_ctemdat(parameters, seedarr) + + #Update parameters: mass, curyear, regolith properties + parameters['masstot'] = parameters['masstot'] + impact_mass + + parameters['curyear'] = parameters['curyear'] + parameters['fracdone'] * parameters['interval'] + template = "%(fracdone)9.6f %(curyear)19.12E\n" + fp_frac.write(template % parameters) + + reg_text = "%19.12E %19.12E %19.12E %19.12E\n" % (parameters['curyear'], + numpy.mean(regolith), numpy.amax(regolith), numpy.amin(regolith)) + fp_reg.write(reg_text) + + #Save copy of crater distribution files + ctem_io_writers.copy_dists(parameters) + + #Display results + print(parameters['ncount'], ' Displaying results') + + #Write surface dem, surface ejecta, shaded relief, and rplot data + ctem_io_writers.image_dem(parameters, surface_dem) + if (parameters['saverego'].upper() == 'T'): + ctem_io_writers.image_regolith(parameters, regolith) + if (parameters['saveshaded'].upper() == 'T'): + ctem_io_writers.image_shaded_relief(parameters, surface_dem) + if (parameters['savepres'].upper() == 'T'): + ctem_io_writers.create_rplot(parameters,odist,pdist,tdist,ph1) + + #Update ncount + parameters['ncount'] = parameters['ncount'] + 1 + + if ((parameters['runtype'].upper() == 'STATISTICAL') or (parameters['ncount'] == 1)): + parameters['restart'] = 'F' + parameters['curyear'] = 0.0 + parameters['totalimpacts'] = 0 + parameters['masstot'] = 0.0 + + #Delete tdistribution file, if it exists + tdist_file = parameters['workingdir'] + 'tdistribution.dat' + if os.path.isfile(tdist_file): + os.remove(tdist_file) + + else: + parameters['restart'] = 'T' + + #Write ctem.dat file + ctem_io_writers.write_ctemdat(parameters, seedarr) + +#Close updateable fracdonefile and regodepthfile files +fp_frac.close() +fp_reg.close() diff --git a/examples/quasimc-global/ctem_image_dem.pro b/examples/quasimc-global/ctem_image_dem.pro new file mode 100755 index 00000000..ad6fbd7e --- /dev/null +++ b/examples/quasimc-global/ctem_image_dem.pro @@ -0,0 +1,41 @@ +pro ctem_image_dem,ncount,gridsize,pix,surface_dem,surface_dem_image +; Generates the shaded surface DEM image and saves it as a jpeg output image in the 'surf' directory +; outputs surface_dem_arr, which may be scaled to use as a console image + +; This code is for reading in the x-y positions from the cumulative distribution and separating out into layers +; so that the tallied craters can be drawn as circles +;!PATH = Expand_Path('+/home/campus/daminton/coyote/') + ':' + !PATH + +Compile_Opt DEFINT32 +thisDevice = !D.Name +Set_Plot, 'Z' +Erase +Device, Set_Resolution=[gridsize,gridsize],Set_Pixel_Depth=24, Decomposed=0 +TVLCT, red, green, blue, /GET + +sun = 20.d0 +radsun = sun * !dtor + +surface_dem_arr = dblarr(gridsize,gridsize) + +surface_dem_arr=surface_dem-shift(surface_dem,0,1) +surface_dem_arr = (0.5d0*!dpi) + atan(surface_dem_arr,pix) ; Get average slope +surface_dem_arr = abs(surface_dem_arr - radsun < 0.5d0*!dpi) ; incident angle +surface_dem_arr = 254.0d0 * cos(surface_dem_arr) ; shaded relief surface + +tv, surface_dem_arr, 0, 0, xsize=gridsize, ysize=gridsize, /device +print,'plotting' + +surface_dem_image = TVRD(True=1) +Set_Plot, thisDevice + +; save surface display +if (file_test('surf',/DIRECTORY) eq 0) then begin + file_mkdir,'surf' +endif +fnum = string(ncount,format='(I6.6)') +fname = 'surf/surf' + fnum + '.jpg' + +write_jpeg, fname, surface_dem_image, true=1, quality=100 + +end diff --git a/examples/quasimc-global/ctem_image_presentation.pro b/examples/quasimc-global/ctem_image_presentation.pro new file mode 100755 index 00000000..05a7d65a --- /dev/null +++ b/examples/quasimc-global/ctem_image_presentation.pro @@ -0,0 +1,143 @@ +pro ctem_image_presentation,ncount,gridsize,pix,curyear,odist,pdist,tdist,ph1,map +; Generates the simplified version of the console display for use in presentations +; Plots the R-plot on the left and the image map on the right + +; presentation graphics +presresx = 1024 +presresy = 0.6*presresx +area = (gridsize * pix)^2 + +minx = (pix / 3.0d0) * 1d-3 +maxx = 3 * pix * gridsize * 1d-3 + +;strings for display +dum = string(format='(E10.4)', curyear) +parts = strsplit(dum, 'E', /extract) +fcuryear = strcompress(string(format='(F6.4,"x10!U",i,"!N")', parts[0], parts[1])) +time = 'Time = ' +timeunit = ' yr' + +if (file_test('presentation',/DIRECTORY) eq 0) then begin + file_mkdir,'presentation' +endif + +thisDevice = !D.Name +Set_Plot, 'Z' +Erase +Device, Set_Resolution=[presresx,presresy],Set_Pixel_Depth=24, Decomposed=0 +loadct, 0 +TVLCT, red, green, blue, /GET + +;geometric saturation +geom = dblarr(2,2) +geomem = dblarr(2,2) +geomep = dblarr(2,2) +geomel = dblarr(2,2) +geom(0,0) = minx +geom(0,1) = maxx +geom(1,*) = 3.12636d0 +geomem(0,0) = minx +geomem(0,1) = maxx +geomem(1,*) = 0.156318d0 +geomep(0,0) = minx +geomep(0,1) = maxx +geomep(1,*) = 0.312636d0 +geomel(0,0) = minx +geomel(0,1) = maxx +geomel(1,*) = 0.0312636d0 + +; Remove zeros +nz = where(odist(5,*) ne 0.0,count) +if (count gt 0) then begin + odistnz = dblarr(6,count) + odistnz(*,*)= odist(*,nz) +endif else begin + odistnz = odist +endelse + +nz = where(tdist(5,*) ne 0.0,count) +if (count gt 0) then begin + tdistnz = dblarr(6,count) + tdistnz(*,*)= tdist(*,nz) +endif else begin + tdistnz = tdist +endelse + +nz = where(pdist(5,*) ne 0.0,count) +if (count gt 0) then begin + pdistnz = dblarr(6,count) + pdistnz(*,*)= pdist(*,nz) +endif else begin + pdistnz = pdist +endelse + +; create r-plot array containing exactly 1 crater per bin +area = (gridsize * pix * 1d-3)^2 +plo = 1 +while (sqrt(2.0d0)^plo gt minx) do begin + plo = plo - 1 +endwhile +phi = plo + 1 +while (sqrt(2.0d0)^phi lt maxx) do begin + phi = phi + 1 +endwhile +n = phi - plo +sdist = dblarr(6,n + 1) +p = plo +for i=0,n do begin + sdist(0,i) = sqrt(2.d0)^p + sdist(1,i) = sqrt(2.d0)^(p+1) + sdist(2,i) = sqrt(sdist(0,i) * sdist(1,i)) + sdist(3,i) = 1.0d0 + sdist(5,i) = (sdist(2,i))^3 / (area * (sdist(1,i) - sdist(0,i))) + p = p + 1 +endfor +sdist(4,*) = reverse(total(sdist(3,*),/cumulative),2) + + +plot, odistnz(2,*)*1.0d-3, odistnz(5,*), line=0, color=255, thick=2.0, $ + TITLE='Crater Distribution R-Plot', charsize=1.2, $ + XTITLE='Crater Diameter (km)', $ + XRANGE=[minx,maxx], /XLOG, XSTYLE=1, $ + YTITLE='R Value', $ + YRANGE=[5.0e-4,5.0e0], /YLOG, YSTYLE=1, $ + /device, pos = [0.12,0.12,0.495,0.495]*presresx + +Dfac = sqrt(sqrt(2.0d0)) + +;display observed crater distribution +oplot, tdistnz(2,*)*1.0d-3, tdistnz(5,*), line=0, color=255, thick=1.0 +;oplot, geom(0,*), geom(1,*), line=2, color=255, thick=1.0 +oplot, geomem(0,*), geomem(1,*), line=1, color=255, thick=1.0 +oplot, geomep(0,*), geomep(1,*), line=1, color=255, thick=1.0 +;oplot, geomel(0,*), geomel(1,*), line=1, color=255, thick=1.0 +oplot, pdistnz(2,*)*1.0d-3, pdistnz(5,*), line=3, color=255, thick=1.0 +oplot, odistnz(2,*)*1.0d-3, odistnz(5,*), line=1, color=255, thick=1.0 +oplot, sdist(0,*), sdist(5,*), line=1, color=255, thick=1.0 +oplot, ph1(0,*)*Dfac*1.0d-3, ph1(1,*), psym=1, color=255, thick=1.0 +;oplot, ph2(0,*), ph2(1,*), psym=4, color=255, thick=1.0 +;oplot, ph3(0,*), ph3(1,*), psym=5, color=255, thick=1.0 + +;draw box around the main surface display & fill +displaysize = floor(0.45*presresx) ; size of displayed surface +surfxpos = floor(0.520*presresx) +surfypos = floor(0.12*presresy) +xbox = [surfxpos - 1,surfxpos - 1,surfxpos + displaysize,surfxpos + displaysize,surfxpos - 1] +ybox = [surfypos - 1,surfypos + displaysize,surfypos + displaysize,surfypos - 1,surfypos - 1] +plotS, xbox, ybox, /device, color=255 + +mapscaled = congrid(map,3,displaysize,displaysize,/interp) + +;mapscaled=congrid(map,displaysize,displaysize) ; scale image +tv, mapscaled, surfxpos, surfypos, xsize=displaysize, ysize=displaysize, true=1, /device + +xyouts, 0.310*presresx, 0.04*presresy, time + fcuryear + timeunit, color=255, charsize=2*presresy/720., /device + +snapshot = TVRD(True=1) +Set_Plot, thisDevice +fnum = string(ncount,format='(I6.6)') +fname = 'presentation/presentation' + fnum + '.jpg' +Write_JPEG, fname, snapshot, True=1, Quality=90 + + +end diff --git a/examples/quasimc-global/ctem_image_regolith.pro b/examples/quasimc-global/ctem_image_regolith.pro new file mode 100755 index 00000000..8d7f07a7 --- /dev/null +++ b/examples/quasimc-global/ctem_image_regolith.pro @@ -0,0 +1,33 @@ +pro ctem_image_regolith,ncount,gridsize,pix,regolith,regolith_image +; Generates the regolith depth map image and saves it as a jpeg output image in the 'rego' directory +; outputs dregolith, which may be scaled to use as a console image +Compile_Opt DEFINT32 +thisDevice = !D.Name +Set_Plot, 'Z' +Erase +Device, Set_Resolution=[gridsize,gridsize],Set_Pixel_Depth=24, Decomposed=0 +loadct, 39 +TVLCT, red, green, blue, /GET + +minref = pix * 1.0d-4 +regolith_scaled = dblarr(gridsize,gridsize) +maxreg = max(regolith) +minreg = min(regolith) +if minreg lt minref then minreg = minref +if maxreg lt minref then maxreg = minref + 1.0d30 +regolith_scaled = regolith > minreg +regolith_scaled = 254.0d0 * ((alog(regolith_scaled) - alog(minreg)) / (alog(maxreg) - alog(minreg))) + +; save regolith display +tv, regolith_scaled, 0, 0, xsize=gridsize, ysize=gridsize, /device +regolith_image = TVRD(True=1) +Set_Plot, thisDevice + +if (file_test('rego',/DIRECTORY) eq 0) then begin + file_mkdir,'rego' +endif +fnum = string(ncount,format='(I6.6)') +fname = 'rego/rego' + fnum + '.jpg' +write_jpeg, fname, regolith_image, true=1, quality=100 + +end diff --git a/examples/quasimc-global/ctem_image_shaded_relief.pro b/examples/quasimc-global/ctem_image_shaded_relief.pro new file mode 100755 index 00000000..73986f84 --- /dev/null +++ b/examples/quasimc-global/ctem_image_shaded_relief.pro @@ -0,0 +1,52 @@ +pro ctem_image_shaded_relief,ncount,gridsize,pix,surface_dem,height_vals,minh,maxh,dirname,shaded_image +; Generates the shaded depth map image and saves it as a jpeg output image in the 'rego' directory +; outputs dshaded, which may be scaled to use as a console image +; Uses the array height_vals for the color +Compile_Opt DEFINT32 +thisDevice = !D.Name +Set_Plot, 'Z' +Erase +Device, Set_Resolution=[gridsize,gridsize],Set_Pixel_Depth=24, Decomposed=0 +loadct, 33 +TVLCT, red, green, blue, /GET + +light=[[1,1,1],[0,0,0],[-1,-1,-1]] + +; convolution of the dem with the 3x3 matrix + +shaded=bytscl(convol(float(surface_dem),float(light))) +if max(shaded) eq 0 then shaded=255 + +; scale the dem to the height +if (minh gt maxh) then begin + tmp = minh + minh = maxh + maxh = tmp +endif + +demscaled = ((height_vals - minh) > 0.0) < (maxh-minh) +if ((maxh - minh) eq 0.0) then begin + demscaled = demscaled * 0.0 +endif else begin + demscaled = demscaled/(maxh-minh)*255.0 +endelse + +tv, demscaled, 0, 0, xsize=gridsize, ysize=gridsize, /device +shaded_image = TVRD(True=1) +shadedscl =float(shaded)/255.0 +shaded_imagearr = dblarr(3,gridsize,gridsize) +shaded_imagearr(0,*,*) = float(shaded_image(0,*,*)) * shadedscl(*,*) +shaded_imagearr(1,*,*) = float(shaded_image(1,*,*)) * shadedscl(*,*) +shaded_imagearr(2,*,*) = float(shaded_image(2,*,*)) * shadedscl(*,*) +shaded_image=round(shaded_imagearr) +Set_Plot, thisDevice + +if (file_test(dirname,/DIRECTORY) eq 0) then begin + file_mkdir,dirname +endif + +fnum = string(ncount,format='(I6.6)') +fname = dirname + '/' + dirname + fnum + '.jpg' +write_jpeg,fname,shaded_image,true=1,quality=90 + +end diff --git a/examples/quasimc-global/ctem_io_read_input.pro b/examples/quasimc-global/ctem_io_read_input.pro new file mode 100755 index 00000000..ea135668 --- /dev/null +++ b/examples/quasimc-global/ctem_io_read_input.pro @@ -0,0 +1,131 @@ +pro ctem_io_read_input,infilename,interval,numintervals,gridsize,pix,seed,numlayers,sfdfile,impfile,maxcrat,ph1,shadedmaxhdefault,shadedminhdefault,shadedminh,shadedmaxh,restart,runtype,popupconsole,saveshaded,saverego,savepres,savetruelist +Compile_Opt DEFINT32 +print, 'Reading input file' +openr,infile,infilename, /GET_LUN +line="" +comment="!" +interval = 0.d0 +numintervals = 0 +pix=-1.0d0 +gridsize=-1 +seed = 0 +maxcrat = 1.0d0 +shadedmaxhdefault = 1 +shadedminhdefault = 1 +shadedminh = 0.d0 +shademaxnh = 0.d0 + + +; Set required strings to unset value +notset="-----NOTSET----" +sfdfile = notset +impfile = notset +sfdcompare = notset +restart = notset +runtype = notset +popupconsole = notset +saveshaded = notset +saverego = notset +savepres = notset +savetruelist = notset +while (not EOF(infile)) do begin + readf,infile,line + if (~strcmp(line,comment,1)) then begin + substrings = strsplit(line,' ',/extract) + if strmatch(substrings(0),'pix',/fold_case) then reads,substrings(1),pix + if strmatch(substrings(0),'gridsize',/fold_case) then reads,substrings(1),gridsize + if strmatch(substrings(0),'seed',/fold_case) then reads,substrings(1),seed + if strmatch(substrings(0),'sfdfile',/fold_case) then reads,substrings(1),sfdfile + if strmatch(substrings(0),'impfile',/fold_case) then reads,substrings(1),impfile + if strmatch(substrings(0),'maxcrat',/fold_case) then reads,substrings(1),maxcrat + if strmatch(substrings(0),'sfdcompare',/fold_case) then reads,substrings(1),sfdcompare + if strmatch(substrings(0),'interval',/fold_case) then reads,substrings(1),interval + if strmatch(substrings(0),'numintervals',/fold_case) then reads,substrings(1),numintervals + if strmatch(substrings(0),'popupconsole',/fold_case) then reads,substrings(1),popupconsole + if strmatch(substrings(0),'saveshaded',/fold_case) then reads,substrings(1),saveshaded + if strmatch(substrings(0),'saverego',/fold_case) then reads,substrings(1),saverego + if strmatch(substrings(0),'savepres',/fold_case) then reads,substrings(1),savepres + if strmatch(substrings(0),'savetruelist',/fold_case) then reads,substrings(1),savetruelist + if strmatch(substrings(0),'runtype',/fold_case) then reads,substrings(1),runtype + if strmatch(substrings(0),'restart',/fold_case) then reads,substrings(1),restart + if strmatch(substrings(0),'shadedminh',/fold_case) then begin + reads,substrings(1),shadedminh + shadedminhdefault = 0 + endif + if strmatch(substrings(0),'shadedmaxh',/fold_case) then begin + reads,substrings(1),shadedmaxh + shadedmaxhdefault = 0 + endif + end +end +if interval le 0.0d0 then begin + print,'Invalid value for or missing variable INTERVAL in ' + infilename + stop +end +if numintervals le 0 then begin + print,'Invalid value for or missing variable NUMINTERVALS in ' + infilename + stop +end +if pix le 0.0d0 then begin + print,'Invalid value for or missing variable PIX in ' + infilename + stop +end +if gridsize le 0 then begin + print,'Invalid value for or missing variable GRIDSIZE in ' + infilename + stop +end +if seed eq 0 then begin + print,'Invalid value for or missing variable SEED in ' + infilename + stop +end +if strmatch(sfdfile,notset) then begin + print,'Invalid value for or missing variable SFDFILE in ' + infilename + stop +end +if strmatch(impfile,notset) then begin + print,'Invalid value for or missing variable IMPFILE in ' + infilename + stop +end +if strmatch(popupconsole,notset) then begin + print,'Invalid value for or missing variable POPUPCONSOLE in ' + infilename + stop +end +if strmatch(saveshaded,notset) then begin + print,'Invalid value for or missing variable SAVESHADED in ' + infilename + stop +end +if strmatch(saverego,notset) then begin + print,'Invalid value for or missing variable SAVEREGO in ' + infilename + stop +end +if strmatch(savepres,notset) then begin + print,'Invalid value for or missing variable SAVEPRES in ' + infilename + stop +end +if strmatch(savetruelist,notset) then begin + print,'Invalid value for or missing variable SAVETRUELIST in ' + infilename + stop +end +if strmatch(runtype,notset) then begin + print,'Invalid value for or missing variable RUNTYPE in ' + infilename + stop +end +if strmatch(restart,notset) then begin + print,'Invalid value for or missing variable RESTART in ' + infilename + stop +end + +free_lun,infile + +ph1 = dblarr(3,1) +if ~strmatch(sfdcompare,notset) then begin + cnum = file_lines(sfdcompare) + ph1 = dblarr(3,cnum) + openr,COMP,sfdcompare,/GET_LUN + readf,COMP,ph1 + close,COMP + free_lun,COMP +end +free_lun,infile + +end diff --git a/examples/quasimc-global/ctem_io_read_old.pro b/examples/quasimc-global/ctem_io_read_old.pro new file mode 100755 index 00000000..a9013687 --- /dev/null +++ b/examples/quasimc-global/ctem_io_read_old.pro @@ -0,0 +1,45 @@ +pro ctem_io_read_old,gridsize,surface_dem,regolith,odist,tdist,pdist,mass +Compile_Opt DEFINT32 +openr,LUN,'surface_ejc.dat',/GET_LUN +readu,LUN,regolith +free_lun,LUN + +openr,LUN,'surface_dem.dat',/GET_LUN +readu,LUN,surface_dem +free_lun,LUN + +distl = file_lines('odistribution.dat') - 1 +pdistl = file_lines('pdistribution.dat') - 1 + +;read in observed cumulative distribution +odist = dblarr(6,distl) +line = "temp" +openr,LUN,'odistribution.dat',/GET_LUN +readf,LUN,line +readf,LUN,odist +close,LUN +free_lun,LUN + +;read in true cumulative distribution +tdist = dblarr(6,distl) +openr,LUN,'tdistribution.dat',/GET_LUN +readf,LUN,line +readf,LUN,tdist +close,LUN +free_lun,LUN + +;read in production function +pdist = dblarr(6,pdistl) +openr,LUN,'pdistribution.dat',/GET_LUN +readf,LUN,line +readf,LUN,pdist +close,LUN +free_lun,LUN + +;read in accumulated mass from file +openr,LUN,'impactmass.dat',/GET_LUN +readf,LUN,mass +close,LUN +free_lun,LUN + +end diff --git a/examples/quasimc-global/ctem_io_readers.py b/examples/quasimc-global/ctem_io_readers.py new file mode 100644 index 00000000..0881ad1a --- /dev/null +++ b/examples/quasimc-global/ctem_io_readers.py @@ -0,0 +1,146 @@ +#!/usr/local/bin/python +# +#Cratered Terrain Evolution Model file reading utilities +# +#Original IDL design: Jim Richardson, Arecibo Observatory +#Revised IDL design: David Minton, Purdue University +#Re-engineered design and Python implementation: Matthew Route, Purdue University +#August 2016 +# +#Known issues for operation with CTEM +#1) ctem.in has 1.0d0 value for maxcrat which is not readable by Python + +import numpy + +def read_ctemin(parameters,notset): + #Read and parse ctem.in file + inputfile = parameters['workingdir'] + parameters['ctemfile'] + + #Read ctem.in file + print('Reading input file '+ parameters['ctemfile']) + fp = open(inputfile,'r') + lines = fp.readlines() + fp.close() + + #Process file text + for line in lines: + fields = line.split() + if len(fields) > 0: + if ('pix' == fields[0].lower()): parameters['pix']=float(fields[1]) + if ('gridsize' == fields[0].lower()): parameters['gridsize']=int(fields[1]) + if ('seed' == fields[0].lower()): parameters['seed']=int(fields[1]) + if ('sfdfile' == fields[0].lower()): parameters['sfdfile']=fields[1] + if ('impfile' == fields[0].lower()): parameters['impfile']=fields[1] + if ('maxcrat' == fields[0].lower()): parameters['maxcrat']=float(fields[1]) + if ('sfdcompare' == fields[0].lower()): parameters['sfdcompare']=fields[1] + if ('interval' == fields[0].lower()): parameters['interval']=float(fields[1]) + if ('numintervals' == fields[0].lower()): parameters['numintervals']=int(fields[1]) + if ('popupconsole' == fields[0].lower()): parameters['popupconsole']=fields[1] + if ('saveshaded' == fields[0].lower()): parameters['saveshaded']=fields[1] + if ('saverego' == fields[0].lower()): parameters['saverego']=fields[1] + if ('savepres' == fields[0].lower()): parameters['savepres']=fields[1] + if ('savetruelist' == fields[0].lower()): parameters['savetruelist']=fields[1] + if ('runtype' == fields[0].lower()): parameters['runtype']=fields[1] + if ('restart' == fields[0].lower()): parameters['restart']=fields[1] + if ('quasimc' == fields[0].lower()): parameters['quasimc']=fields[1] + if ('realcraterlist' == fields[0].lower()): parameters['realcraterlist']=fields[1] + if ('shadedminh' == fields[0].lower()): + parameters['shadedminh'] = float(fields[1]) + parameters['shadedminhdefault'] = 0 + if ('shadedmaxh' == fields[0].lower()): + parameters['shadedmaxh'] = float(fields[1]) + parameters['shadedmaxhdefault'] = 0 + + #Test values for further processing + if (parameters['interval'] <= 0.0): + print('Invalid value for or missing variable INTERVAL in '+ inputfile) + if (parameters['numintervals'] <= 0): + print('Invalid value for or missing variable NUMINTERVALS in '+ inputfile) + if (parameters['pix'] <= 0.0): + print('Invalid value for or missing variable PIX in '+ inputfile) + if (parameters['gridsize'] <= 0): + print('Invalid value for or missing variable GRIDSIZE in '+ inputfile) + if (parameters['seed'] == 0): + print('Invalid value for or missing variable SEED in '+ inputfile) + if (parameters['sfdfile'] == notset): + print('Invalid value for or missing variable SFDFILE in '+ inputfile) + if (parameters['impfile'] == notset): + print('Invalid value for or missing variable IMPFILE in '+ inputfile) + if (parameters['popupconsole'] == notset): + print('Invalid value for or missing variable POPUPCONSOLE in '+ inputfile) + if (parameters['saveshaded'] == notset): + print('Invalid value for or missing variable SAVESHADED in '+ inputfile) + if (parameters['saverego'] == notset): + print('Invalid value for or missing variable SAVEREGO in '+ inputfile) + if (parameters['savepres'] == notset): + print('Invalid value for or missing variable SAVEPRES in '+ inputfile) + if (parameters['savetruelist'] == notset): + print('Invalid value for or missing variable SAVETRUELIST in '+ inputfile) + if (parameters['runtype'] == notset): + print('Invalid value for or missing variable RUNTYPE in '+ inputfile) + if (parameters['restart'] == notset): + print('Invalid value for or missing variable RESTART in '+ inputfile) + + return + +def read_formatted_ascii(filename, skip_lines): + #Generalized ascii text reader + #For use with sfdcompare, production, odist, tdist, pdist data files + data = numpy.genfromtxt(filename, skip_header = skip_lines) + return data + +def read_unformatted_binary(filename, gridsize): + #Read unformatted binary files created by Fortran + #For use with surface ejecta and surface dem data files + dt = numpy.float + data = numpy.fromfile(filename, dtype = dt) + data.shape = (gridsize,gridsize) + + return data + +def read_ctemdat(parameters, seedarr): + #Read and parse ctem.dat file + datfile = parameters['workingdir'] + 'ctem.dat' + + #Read ctem.dat file + print('Reading input file '+ parameters['datfile']) + fp = open(datfile,'r') + lines = fp.readlines() + fp.close() + + #Parse file lines and update parameter fields + fields = lines[0].split() + if len(fields) > 0: + parameters['totalimpacts'] = float(fields[0]) + parameters['ncount'] = int(fields[1]) + parameters['curyear'] = float(fields[2]) + parameters['restart'] = fields[3] + parameters['fracdone'] = float(fields[4]) + parameters['masstot'] = float(fields[5]) + + #Parse remainder of file to build seed array + nlines = len(lines) + index = 1 + while (index < nlines): + fields = lines[index].split() + seedarr[index - 1] = float(fields[0]) + index += 1 + + parameters['seedn'] = index - 1 + + return + +def read_impact_mass(filename): + #Read impact mass file + + fp=open(filename,'r') + line=fp.readlines() + fp.close() + + fields = line[0].split() + if (len(fields) > 0): + mass = float(fields[0]) + else: + mass = 0 + + return mass \ No newline at end of file diff --git a/examples/quasimc-global/ctem_io_writers.py b/examples/quasimc-global/ctem_io_writers.py new file mode 100644 index 00000000..a5e72b26 --- /dev/null +++ b/examples/quasimc-global/ctem_io_writers.py @@ -0,0 +1,282 @@ +#!/usr/local/bin/python +# +#Cratered Terrain Evolution Model file and graphical writing utilities +# +#Original IDL design: Jim Richardson, Arecibo Observatory +#Revised IDL design: David Minton, Purdue University +#Re-engineered design and Python implementation: Matthew Route, Purdue University +#August 2016 +# + +import matplotlib +from matplotlib import pyplot +import numpy +import os +import shutil +import scipy +from scipy import signal + +#Set pixel scaling common for image writing, at 1 pixel/ array element +dpi = 72.0 + +#Write production function to file production.dat +#This file format does not exactly match that generated from IDL. Does it work? +def write_production(parameters, production): + filename = parameters['workingdir'] + parameters['sfdfile'] + numpy.savetxt(filename, production, fmt='%1.8e', delimiter=' ') + + return + +def create_dir_structure(parameters): + #Create directories for various output files if they do not already exist + directories=['dist','misc','rego','rplot','surf','shaded'] + + for directory in directories: + dir_test = parameters['workingdir'] + directory + if not os.path.isdir(dir_test): + os.makedirs(dir_test) + + return + +def write_ctemdat(parameters, seedarr): + #Write various parameters and random number seeds into ctem.dat file + filename = parameters['workingdir'] + parameters['datfile'] + fp = open(filename,'w') + + template = "%(totalimpacts)17d %(ncount)12d %(curyear)19.12E %(restart)s %(fracdone)9.6f %(masstot)19.12E\n" + fp.write(template % parameters) + + #Write random number seeds to the file + for index in range(parameters['seedn']): + fp.write("%12d\n" % seedarr[index]) + + fp.close() + + return + +def copy_dists(parameters): + #Save copies of distribution files + + orig_list = ['odistribution', 'ocumulative', 'pdistribution', 'tdistribution'] + dest_list = ['odist', 'ocum', 'pdist', 'tdist'] + + for index in range(len(orig_list)): + forig = parameters['workingdir'] + orig_list[index] + '.dat' + fdest = parameters['workingdir'] + 'dist' + os.sep + dest_list[index] + "_%06d.dat" % parameters['ncount'] + shutil.copy2(forig, fdest) + + forig = parameters['workingdir'] + 'impactmass.dat' + fdest = parameters['workingdir'] + 'misc' + os.sep + "mass_%06d.dat" % parameters['ncount'] + shutil.copy2(forig, fdest) + + if (parameters['savetruelist'].upper() == 'T'): + forig = parameters['workingdir'] + 'tcumulative.dat' + fdest = parameters['workingdir'] + 'dist' + os.sep + "tcum_%06d.dat" % parameters['ncount'] + shutil.copy2(forig, fdest) + + return + +#Possible references +#http://nbviewer.jupyter.org/github/ThomasLecocq/geophysique.be/blob/master/2014-02-25%20Shaded%20Relief%20Map%20in%20Python.ipynb + +def image_dem(parameters, surface_dem): + + #Create surface dem map + solar_angle = 20.0 + dem_map = numpy.copy(surface_dem) - numpy.roll(surface_dem, 1, 0) + dem_map = (0.5 * numpy.pi) + numpy.arctan2(dem_map, parameters['pix']) + dem_map = dem_map - numpy.radians(solar_angle) * (0.5 * numpy.pi) + numpy.place(dem_map, dem_map > (0.5 * numpy.pi), 0.5 *numpy.pi) + dem_map = numpy.absolute(dem_map) + dem_map = 254.0 * numpy.cos(dem_map) + + #Save image to file + filename = parameters['workingdir'] + 'surf' + os.sep + "surf%06d.png" % parameters['ncount'] + height = parameters['gridsize'] / dpi + width = height + fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi) + fig.figimage(dem_map, cmap = matplotlib.cm.gray, origin = 'lower') + matplotlib.pyplot.savefig(filename) + + return + +def image_regolith(parameters, regolith): + + #Create scaled regolith image + minref = parameters['pix'] * 1.0e-4 + maxreg = numpy.amax(regolith) + minreg = numpy.amin(regolith) + if (minreg < minref): minreg = minref + if (maxreg < minref): maxreg = (minref + 1.0e3) + regolith_scaled = numpy.copy(regolith) + numpy.place(regolith_scaled, regolith_scaled < minref, minref) + regolith_scaled = 254.0 * ((numpy.log(regolith_scaled) - numpy.log(minreg)) / (numpy.log(maxreg) - numpy.log(minreg))) + + #Save image to file + filename = parameters['workingdir'] + 'rego' + os.sep + "rego%06d.png" % parameters['ncount'] + height = parameters['gridsize'] / dpi + width = height + fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi) + fig.figimage(regolith_scaled, cmap = matplotlib.cm.nipy_spectral, origin = 'lower') + matplotlib.pyplot.savefig(filename) + + return + +def image_shaded_relief(parameters, surface_dem): + #The color scale and appearance of this do not quite match the IDL version + + #Create image by convolving DEM with 3x3 illumination matrix + light = numpy.array([[1.0, 1.0, 1.0], [0.0, 0.0, 0.0], [-1.0, -1.0, -1.0]]) + convolved_map = scipy.signal.convolve2d(surface_dem, light, mode = 'same') + + #Adjust output to resemble IDL (north slopes illuminated, south in shadow) + convolved_map = convolved_map * -1.0 + convolved_map[0,:]=0.0 + convolved_map[-1,:] =0.0 + convolved_map[:,0]=0.0 + convolved_map[:,-1]=0.0 + + #If no shadedmin/max parameters are read in from ctem.dat, determine the values from the data + if (parameters['shadedminhdefault'] == 1): shadedminh = numpy.amin(surface_dem) + if (parameters['shadedmaxhdefault'] == 1): shadedmaxh = numpy.amax(surface_dem) + + #If min and max appear to be reversed, then fix them + if (parameters['shadedminh'] > parameters['shadedmaxh']): + temp = parameters['shadedminh'] + shadedminh = parameters['shadedmaxh'] + shadedmaxh = temp + else: + shadedminh = parameters['shadedminh'] + shadedmaxh = parameters['shadedmaxh'] + + #If dynamic range is valid, construct a shaded DEM + dynamic_range = shadedmaxh - shadedminh + if (dynamic_range != 0): + dem_scaled = numpy.copy(surface_dem) - shadedminh + numpy.place(dem_scaled, dem_scaled < 0.0, 0.0) + numpy.place(dem_scaled, dem_scaled > dynamic_range, dynamic_range) + dem_scaled = dem_scaled / dynamic_range + else: + dem_scaled = numpy.copy(surface_dem) * 0.0 + + #Generate shaded depth map with surface_dem color scaling (RGBA) + shaded = scipy.misc.bytescale(convolved_map) + if numpy.amax(shaded) == 0: shaded=255 + shadedscl = shaded / 255.0 + + #shaded_imagearr = matplotlib.cm.jet(dem_scaled) + #print dem_scaled[0:4,0:4] + #shaded_imagearr[:,:,0] = shaded_imagearr[:,:,0] * shadedscl + #shaded_imagearr[:,:,1] = shaded_imagearr[:,:,1] * shadedscl + #shaded_imagearr[:,:,2] = shaded_imagearr[:,:,2] * shadedscl + #shaded_imagearr[:,:,3] = shaded_imagearr[:,:,3] * shadedscl + + #Delivers nearly proper coloring, but no shaded relief + shaded_imagearr = dem_scaled * shadedscl + shaded_imagearr = matplotlib.cm.jet(shaded_imagearr) + shaded_imagearr = numpy.around(shaded_imagearr, decimals = 1) + + #Save image to file + filename = parameters['workingdir'] + 'shaded' + os.sep + "shaded%06d.png" % parameters['ncount'] + height = parameters['gridsize'] / dpi + width = height + fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi) + fig.figimage(shaded_imagearr, cmap = matplotlib.cm.jet, origin = 'lower') + matplotlib.pyplot.savefig(filename) + return + +def create_rplot(parameters,odist,pdist,tdist,ph1): + #Parameters: empirical saturation limit and dfrac + satlimit = 3.12636 + dfrac = 2**(1./4) * 1.0e-3 + + #Calculate geometric saturation + minx = (parameters['pix'] / 3.0) * 1.0e-3 + maxx = 3 * parameters['pix'] * parameters['gridsize'] * 1.0e-3 + geomem = numpy.array([[minx, satlimit / 20.0], [maxx, satlimit / 20.0]]) + geomep = numpy.array([[minx, satlimit / 10.0], [maxx, satlimit / 10.0]]) + + #Create distribution arrays without zeros for plotting on log scale + idx = numpy.nonzero(odist[:,5]) + odistnz = odist[idx] + odistnz = odistnz[:,[2,5]] + + idx = numpy.nonzero(pdist[:,5]) + pdistnz = pdist[idx] + pdistnz = pdistnz[:,[2,5]] + + idx = numpy.nonzero(tdist[:,5]) + tdistnz = tdist[idx] + tdistnz = tdistnz[:,[2,5]] + + #Correct pdist + pdistnz[:,1] = pdistnz[:,1] * parameters['curyear'] / parameters['interval'] + + #Create sdist bin factors, which contain one crater per bin + area = (parameters['gridsize'] * parameters['pix'] * 1.0e-3)**2. + plo = 1 + sq2 = 2**(1./2) + while (sq2**plo > minx): + plo = plo - 1 + phi = plo + 1 + while (sq2**phi < maxx): + phi = phi + 1 + n = phi - plo + 1 + sdist = numpy.zeros([n , 2]) + p = plo + for index in range(n): + sdist[index, 0] = sq2**p + sdist[index, 1] = sq2**(2.0*p + 1.5) / (area * (sq2 - 1)) + p = p + 1 + + #Create time label + tlabel = "%5.4e" % parameters['curyear'] + tlabel = tlabel.split('e') + texp = str(int(tlabel[1])) + timelabel = 'Time = '+ r'${}$ x 10$^{}$'.format(tlabel[0], texp) + ' yrs' + + #Save image to file + filename = parameters['workingdir'] + 'rplot' + os.sep + "rplot%06d.png" % parameters['ncount'] + height = parameters['gridsize'] / dpi + width = height + fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi) + + #Alter background color to be black, and change axis colors accordingly + matplotlib.pyplot.style.use('dark_background') + matplotlib.pyplot.rcParams['axes.prop_cycle'] + + #Plot data + matplotlib.pyplot.plot(odistnz[:,0]*1.0e-3, odistnz[:,1], linewidth=3.0, color = 'blue') + matplotlib.pyplot.plot(pdistnz[:,0]*1.0e-3, pdistnz[:,1], linewidth=2.0, linestyle='dashdot', color = 'white') + matplotlib.pyplot.plot(tdistnz[:,0]*1.0e-3, tdistnz[:,1], linewidth=2.0, color = 'red') + + matplotlib.pyplot.plot(geomem[:,0], geomem[:,1], linewidth=2.0, linestyle =':', color = 'yellow') + matplotlib.pyplot.plot(geomep[:,0], geomep[:,1], linewidth=2.0, linestyle =':', color = 'yellow') + matplotlib.pyplot.plot(sdist[:,0], sdist[:,1], linewidth=2.0, linestyle =':', color = 'yellow') + + matplotlib.pyplot.plot(ph1[:,0] * dfrac, ph1[:,1], 'wo') + + #Create plot labels + matplotlib.pyplot.title('Crater Distribution R-Plot',fontsize=22) + matplotlib.pyplot.xlim([minx, maxx]) + matplotlib.pyplot.xscale('log') + matplotlib.pyplot.xlabel('Crater Diameter (km)',fontsize=18) + matplotlib.pyplot.ylim([5.0e-4, 5.0]) + matplotlib.pyplot.yscale('log') + matplotlib.pyplot.ylabel('R Value', fontsize=18) + matplotlib.pyplot.text(1.0e-2, 1.0, timelabel, fontsize=18) + + matplotlib.pyplot.tick_params(axis='both', which='major', labelsize=14) + matplotlib.pyplot.tick_params(axis='both', which='minor', labelsize=12) + + matplotlib.pyplot.savefig(filename) + + return + +def write_realcraters(parameters, realcraters): + """writes file of real craters for use in quasi-MC runs""" + + filename = parameters['workingdir'] + 'craterlist.dat' + numpy.savetxt(filename, realcraters, fmt='%1.8e', delimiter='\t') + + return \ No newline at end of file diff --git a/examples/quasimc-global/ctem_window_display.pro b/examples/quasimc-global/ctem_window_display.pro new file mode 100755 index 00000000..d6edf5b9 --- /dev/null +++ b/examples/quasimc-global/ctem_window_display.pro @@ -0,0 +1,249 @@ +pro ctem_window_display,ncount,totalimpacts,gridsize,pix,curyear,masstot,odist,pdist,tdist,ph1,surface_dem,regolith,map,popupconsole +; Produces the console window display. The array 'map' is used to generate the image on the right-hand side +Compile_Opt DEFINT32 + +; console output graphics resolution +minref = pix * 1.0d-4 +conresx = 1280 +;conresy = 0.758*conresx +profsize = 0.00 +conresy = (0.60 + profsize) * conresx +sun = 20.d0 ; sun angle for display + +minx = (pix / 3.0d0) * 1d-3 +maxx = 3 * pix * gridsize * 1d-3 +charfac = 1.6 ; character size multiplier + +if strmatch(popupconsole,'T',/fold_case) then begin + device, decomposed=0, retain=2 + thisDevice = !D.NAME + SET_PLOT, 'Z' + TVLCT, red, green, blue, /GET + SET_PLOT, thisDevice + !P.MULTI = [0, 1, 2] + Window, 0, xsize=conresx, ysize=conresy +endif else begin + SET_PLOT, 'Z', /COPY + device, set_resolution=[conresx,conresy],decomposed=0, Z_Buffer=0 + TVLCT, red, green, blue, /GET + !P.MULTI = [0, 1, 2] + erase +endelse + +;set up first color scale +loadct, 0 + +;strings for display +time = 'Time = ' +timeunit = ' yr' +timp = 'Total impacts (dotdash) = ' +tcrt = 'Total craters (line) = ' +ocrt = 'Countable craters (bold) = ' +epwr = 'Mean regolith depth = ' +mtot = 'Impacted mass = ' +c1lab = 'Min. Elevation' +c2lab = 'Mean Elevation' +c3lab = 'Max. Elevation' + +maxelev = max(surface_dem) +minelev = min(surface_dem) +medelev = mean(surface_dem) +c1 = string(minelev, format = '(F9.1)') + ' m' +c2 = string(medelev, format = '(F9.1)') + ' m' +c3 = string(maxelev, format = '(F9.1)') + ' m' +tslp = mean(regolith) + +;geometric saturation +geom = dblarr(2,2) +geomem = dblarr(2,2) +geomep = dblarr(2,2) +geomel = dblarr(2,2) +geom(0,0) = minx +geom(0,1) = maxx +geom(1,*) = 3.12636d0 +geomem(0,0) = minx +geomem(0,1) = maxx +geomem(1,*) = 0.156318d0 +geomep(0,0) = minx +geomep(0,1) = maxx +geomep(1,*) = 0.312636d0 +geomel(0,0) = minx +geomel(0,1) = maxx +geomel(1,*) = 0.0312636d0 + +; Remove zeros +nz = where(odist(5,*) ne 0.0,count) +if (count gt 0) then begin + odistnz = dblarr(6,count) + odistnz(*,*)= odist(*,nz) +endif else begin + odistnz = odist +endelse + +nz = where(tdist(5,*) ne 0.0,count) +if (count gt 0) then begin + tdistnz = dblarr(6,count) + tdistnz(*,*)= tdist(*,nz) +endif else begin + tdistnz = tdist +endelse + +nz = where(pdist(5,*) ne 0.0,count) +if (count gt 0) then begin + pdistnz = dblarr(6,count) + pdistnz(*,*)= pdist(*,nz) + +endif else begin + pdistnz = pdist +endelse + +; create r-plot array containing exactly 1 crater per bin +area = (gridsize * pix * 1d-3)^2 +plo = 1 +while (sqrt(2.0d0)^plo gt minx) do begin + plo = plo - 1 +endwhile +phi = plo + 1 +while (sqrt(2.0d0)^phi lt maxx) do begin + phi = phi + 1 +endwhile +n = phi - plo +sdist = dblarr(6,n + 1) +p = plo +for i=0,n do begin + sdist(0,i) = sqrt(2.d0)^p + sdist(1,i) = sqrt(2.d0)^(p+1) + sdist(2,i) = sqrt(sdist(0,i) * sdist(1,i)) + sdist(3,i) = 1.0d0 + sdist(5,i) = (sdist(2,i))^3 / (area * (sdist(1,i) - sdist(0,i))) + p = p + 1 +endfor +sdist(4,*) = reverse(total(sdist(3,*),/cumulative),2) + +plot, odistnz(2,*)*1.0d-3, odistnz(5,*), line=0, color=255, thick=2.0, $ + TITLE='Crater Distribution R-Plot', charsize=charfac*conresy/720, $ + XTITLE='Crater Diameter (km)', $ + XRANGE=[minx,maxx], /XLOG, XSTYLE=1, $ + YTITLE='R Value', $ + YRANGE=[5.0e-4,5.0e0], /YLOG, YSTYLE=1, $ + /device, pos = [0.085*conresx,(0.25 + profsize)*conresy,0.44*conresx,0.85*conresy] + +Dfac = sqrt(sqrt(2.0d0)) + +;display observed crater distribution +oplot, tdistnz(2,*)*1.0d-3, tdistnz(5,*), line=0, color=255, thick=1.0 +oplot, geom(0,*), geom(1,*), line=2, color=255, thick=1.0 +oplot, geomem(0,*), geomem(1,*), line=1, color=255, thick=1.0 +oplot, geomep(0,*), geomep(1,*), line=1, color=255, thick=1.0 +oplot, geomel(0,*), geomel(1,*), line=1, color=255, thick=1.0 +oplot, pdistnz(2,*)*1.0d-3, pdistnz(5,*), line=3, color=255, thick=1.0 +oplot, odistnz(2,*)*1.0d-3, odistnz(5,*), line=1, color=255, thick=1.0 +oplot, sdist(0,*), sdist(5,*), line=1, color=255, thick=1.0 +oplot, ph1(0,*)*Dfac*1.0d-3, ph1(1,*), psym=1, color=255, thick=1.0 +;oplot, ph2(0,*), ph2(1,*), psym=4, color=255, thick=1.0 +;oplot, ph3(0,*), ph3(1,*), psym=5, color=255, thick=1.0 + +; set up profile display +surfpos = dblarr(gridsize) +surfpro = dblarr(gridsize) +surfhpro = dblarr(gridsize) +surfrpro = dblarr(gridsize) +for k = 0,gridsize-1 do begin + surfpos(k) = (-0.5d0*(gridsize-1) + double(k)) * pix +endfor +surfpro(*) = surface_dem(*,gridsize/2-1) +surfhpro(*) = regolith(*,gridsize/2-1) +surfrpro(*) = surfpro(*) - surfhpro(*) + +; set up profile +;maxelevp = max(surfpro) +;minelevp = min(surfpro) +;medelevp = mean(surfpro) +;vertrange = 1.5 * abs(maxelevp-minelevp) +;vertadd = 0.5d0 * (vertrange - abs(maxelevp-minelevp)) +;horzrange = vertrange * 5.86666666667d0 +;if (horzrange gt (pix*gridsize)) then horzrange = pix*gridsize +;plot, surfpos(*)/1.0d3, surfpro(*)/1.0d3, line=0, color=255, thick=1.0, $ +; TITLE='Matrix Cross-Section', charsize=1.0, $ +; XTITLE='Horizontal Position (km)', $ +; XRANGE=[(-1.0d0*horzrange/2.0d3),(horzrange/2.0d3)], XSTYLE=1, $ +; YTITLE='Elevation (km)', $ +; YRANGE=[((minelevp - vertadd)/1.0d3),((maxelevp + vertadd)/1.0d3)], YSTYLE=1, $ +; /device, pos = [0.063*conresx,0.049*conresy,0.99*conresx,0.26*conresy] +;oplot, surfpos(*)*1.0d-3, surfrpro(*)*1.0d-3, line=0, color=255, thick=1.0 + +;display text +dum = string(format='(E10.4)', curyear) +parts = strsplit(dum, 'E', /extract) +fcuryear = strcompress(string(format='(F6.4,"x10!U",i,"!N")', parts[0], parts[1])) + ' yr' +ftimp = string(totalimpacts, format = '(I13)') +ftcnt = string(tdist(4,0), format = '(I13)') +focnt = string(odist(4,0), format = '(I13)') +ftslp = string(tslp, format = '(F13.3)') + ' m' + + +dum = string(format='(E10.4)',masstot) +parts = strsplit(dum, 'E', /extract) +fmtot = strcompress(string(format='(F6.4,"x10!U",i,"!N")', parts[0], parts[1])) + ' kg' + +; Display information text below the R-plot +texttop = 0.15 + profsize +textspc = 0.035 +textleft = 0.05*conresx +textbreak = 0.25*conresx +xyouts, textleft, (texttop - 0*textspc)*conresy, time, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft, (texttop - 1*textspc)*conresy, timp, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft, (texttop - 2*textspc)*conresy, tcrt, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft, (texttop - 3*textspc)*conresy, ocrt, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft, (texttop - 4*textspc)*conresy, mtot, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft + textbreak, (texttop - 0*textspc)*conresy, fcuryear, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft + textbreak, (texttop - 1*textspc)*conresy, ftimp, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft + textbreak, (texttop - 2*textspc)*conresy, ftcnt, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft + textbreak, (texttop - 3*textspc)*conresy, focnt, color=255, charsize=charfac*conresy/720., /device +xyouts, textleft + textbreak, (texttop - 4*textspc)*conresy, fmtot, color=255, charsize=charfac*conresy/720., /device + +; Display information text above the R-plot +xyouts, 0.0368*conresx, 0.972*conresy, c1lab, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.195*conresx, 0.972*conresy, c2lab, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.353*conresx, 0.972*conresy, c3lab, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.0368*conresx, 0.944*conresy, c1, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.195*conresx, 0.944*conresy, c2, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.353*conresx, 0.944*conresy, c3, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.100*conresx, 0.917*conresy, epwr, color=255, charsize=charfac*conresy/720., /device +xyouts, 0.278*conresx, 0.917*conresy, ftslp, color=255, charsize=charfac*conresy/720., /device + +;print to screen +print, ncount, ' time = ', curyear +;print, ncount, ' tot impacts = ', tdist +;print, ncount, ' tot craters = ', totalimpacts +;print, ncount, ' obs craters = ', ocrcnt +;print, ncount, ' regolith = ', tslp +;print, ncount, ' prod R = ', mean(prval(1,*)) + +;draw box around the main surface display & fill +displaysize = floor(0.53*conresx) ; size of displayed surface +surfxpos = floor(0.462*conresx) +surfypos = floor((0.05 + profsize)*conresy) +xbox = [surfxpos - 1,surfxpos - 1,surfxpos + displaysize,surfxpos + displaysize,surfxpos - 1] +ybox = [surfypos - 1,surfypos + displaysize,surfypos + displaysize,surfypos - 1,surfypos - 1] +plotS, xbox, ybox, /device, color=255 + +; for display +mapscaled = congrid(map,3,displaysize,displaysize,/interp) + +tv, mapscaled, surfxpos, surfypos, xsize=displaysize, ysize=displaysize, true=1, /device + +; ---------- saving window ---------- + +; save console window +fnum = string(ncount,format='(I6.6)') +; print screen to JPEG file +if (file_test('console',/DIRECTORY) eq 0) then begin + file_mkdir,'console' +endif +print, ncount, ' saving window' +fname = 'console/console' + fnum + '.jpg' +dwin = tvrd(true=1) +write_jpeg, fname, dwin, true=1, quality=90 + +end diff --git a/examples/quasimc-global/driver.py b/examples/quasimc-global/driver.py new file mode 100644 index 00000000..50392285 --- /dev/null +++ b/examples/quasimc-global/driver.py @@ -0,0 +1,3 @@ +import ctem +sim = ctem.Simulation() +sim.run() \ No newline at end of file diff --git a/examples/quasimc-global/equilmovie.plt b/examples/quasimc-global/equilmovie.plt new file mode 100755 index 00000000..afced705 --- /dev/null +++ b/examples/quasimc-global/equilmovie.plt @@ -0,0 +1,158 @@ +#gnuplot 5.0 script +do for [ii=166:166] { +reset + + +ftype = "eps" +set terminal postscript enhanced eps color size 6.5,3.65625 18 +load "params.plt" +load "common.plt" +show output + + +set multiplot layout 1,2 title titletext font ",18" +set size square + +set format x "" +set format y "" + +set xrange[000:1999] +set yrange[000:1999] + +unset xtics +unset ytics + +sg = 1.0 +lg = 3.7 + +set tmargin 1.0 +set bmargin 2.1 +set lmargin sg +set rmargin lg + +pix = 3.08e3 +gridsize = 2000 + +set obj 1 rect from 1600,30 to 1600+100e4/pix,60 fc rgb "white" front fs solid 1.0 noborder +set label 1 "1000 km" at 1600+50e4/pix,100 tc rgb "white" front center + +set style line 1 lt 1 lc rgb "white" lw 0.1 + +surf = sprintf("surf/surf%06d.jpg",ii) +circ = sprintf("dist/ocum_%06d.dat",ii) + +plot surf binary filetype=auto w rgbimage notitle + +unset obj 1 +unset label 1 + +xmin = 10.0 +xmax = 1000.0 + +ymin = 1e-8 +ymax = 1e-3 + +set logscale xy + +set format x "10^{%L}" +set format y "10^{%L}" + +set xtics 10 +set ytics 10 + +set mxtics 10 +set mytics 10 + +set rmargin sg+0.5 +set lmargin lg + +set xlabel "Crater diameter {/Times-Italic D_c} (km)" +set ylabel "Cumulative number per unit area {/Times-Italic n_{>D_c}} (km^{-2})" offset -1 + +#set style line 1 lt 1 lc rgb "black" lw 1 pt 6 ps 1 +#set style line 2 lt 1 lc rgb "black" lw 3 dt 2 pt 4 ps 2 +#set style line 3 lt 1 lc rgb "black" lw 3 dt 3 pt 4 ps 2 +#set style line 4 lt 1 lc rgb "black" lw 3 dt 4 pt 4 ps 2 +#set style line 5 lt 1 lc rgb "black" lw 3 dt 6 pt 4 ps 2 +#set style line 9 lt 1 lc rgb "blue" lw 3 + +A = (pix * gridsize)**2 + +pdist = sprintf("dist/pdist_%06d.dat",ii) +ocum = sprintf("dist/ocum_%06d.dat",ii) + + + + +set xrange[xmin:xmax] +set yrange[ymin:ymax] + +labx = 10**((log10(xmax) - log10(xmin))*0.97 + log10(xmin)) +angscl = (log10(ymax) - log10(ymin)) / (log10(xmax) - log10(xmin)) + +ang(slp) = atan2(slp,angscl) * 180 / pi + +set style textbox opaque fillcolor "white" noborder +set label 9 "Geometric saturation" at first labx, first 8.0*ngsat(labx) rotate by ang(-2.0) right boxed front tc rgb custcolor05 +set label 10 "Predicted equilibrium" at first labx, first 2*ngsat(labx) rotate by ang(-2.0) right boxed front tc rgb custcolor02 + +set fit quiet +set fit logfile '/dev/null' +f(x) = a*x+b +fit [log10(20):log10(80)] [*:*] f(x) eqfile u (log10($1*2*1e-3)):(log10($2*1e6)) via a,b + +# get the relation of x- and y-range +dx = log10(xmax)-log10(xmin) +dy = log10(ymax)-log10(ymin) +s1 = dx/dy +# get ratio of axes +# helper function for getting the rotation angle of the labels in degree +deg(x) = x/pi*180.0 +r(x) = deg(atan(s1*x)) + + +#set label 11 "Empirical equilibrium" at first labx, first 1.9*nemp(labx) rotate by ang(-2.0) center boxed front + +Xval = sprintf("{/Times-Italic X }= %5.3f",ii / 600.0) +set label 20 Xval at screen 0.98, screen 0.92 right + +set key spacing 1.3 at screen 0.83, screen 0.30 box width -3 opaque +#print labx + +Ahighlands = 20051255.514 / 1.5 +AMoon = 3.793e7 +AFassett = 2.798701 +set style line 17 lt 1 lc rgb custcolor06 lw 1 pt 7 ps 1.00 +set style line 27 lt 1 lc rgb custcolor07 lw 1 pt 8 ps 1.00 +set style line 37 lt 1 lc rgb custcolor05 lw 1 pt 9 ps 1.00 + +load "NPF.plt" + +if (ii > 0) { + plot \ + "NonMareNonSpa-Highlands.csv" u ($1 < 200 ? $1 : NaN):(($0+1)/Ahighlands):(sqrt($0+0.9999999)/Ahighlands) w errorbars ls 27 title "LOLA Highlands",\ + "Neumann2015GRAIL_farside_basins.dat" u 1:(2*($0+1)/AMoon):(2*sqrt($0+0.999999)/AMoon) w errorbars ls 37 title "GRAIL Far side basins",\ + pdist u ($1*1e-3):($5/A*ii*1e6) w lines ls 4 title "CTEM Production",\ + eqfile u ($1*2*1e-3):($2*1e6) w lines ls 2 notitle "Equilibrium",\ + ngsat(x*0.5e3)*1e6 w lines ls 5 notitle,\ + ocum u ($1*1e-3):(($0+1)/A*1e6) w points ls 6 title "CTEM Counts" + + +} else { + plot \ + "../NonMareNonSpa-Highlands.csv" u ($1 < 200 ? $1 : NaN):(($0+1)/Ahighlands):(sqrt($0+0.9999999)/Ahighlands) w errorbars ls 27 title "LOLA Highlands",\ + "../Neumann2015GRAIL_farside_basins.dat" u 1:(2*($0+1)/AMoon):(2*sqrt($0+0.999999)/AMoon) w errorbars ls 37 title "GRAIL Far side basins",\ + NaN w lines ls 4 title "CTEM Production",\ + eqfile u ($1*2*1e-3):($2*1e6) w lines ls 2 notitle "Equilibrium",\ + ngsat(x*0.5e3)*1e6 w lines ls 5 notitle,\ + NaN w points ls 6 title "CTEM Counts" +} + + #"" u ($0 == 291 ? $1*2*1e-3 : NaN):(4.0*$2*1e6):(sprintf("Predicted equilibrium")) w labels rotate by ang(-1.8) right boxed tc rgb custcolor02 notitle,\ + #"" u ($0 == 291 ? $1*2*1e-3 : NaN):(4.0*$2*1e6):(sprintf("Predicted equilibrium")) w labels rotate by ang(-1.8) right boxed tc rgb custcolor02 notitle,\ + +makeanim = sprintf("mogrify -verbose -format png -density 600 -flatten -resize 1920x1080\! ".outname) +system(sprintf(makeanim." ; rm ".outname."; cd ..")) + +unset multiplot +} diff --git a/examples/quasimc-global/frames/.gitignore b/examples/quasimc-global/frames/.gitignore new file mode 100644 index 00000000..a17efa9a --- /dev/null +++ b/examples/quasimc-global/frames/.gitignore @@ -0,0 +1,3 @@ +*.jpg +*.png + diff --git a/examples/quasimc-global/lunar-MBA-impactor-velocities.dat b/examples/quasimc-global/lunar-MBA-impactor-velocities.dat new file mode 100755 index 00000000..b56ce090 --- /dev/null +++ b/examples/quasimc-global/lunar-MBA-impactor-velocities.dat @@ -0,0 +1,64 @@ +6000 41.000000 0.002861 +7000 200.000000 0.016817 +8000 541.000000 0.054567 +9000 793.000000 0.109902 +10000 822.000000 0.167260 +11000 974.000000 0.235224 +12000 978.000000 0.303468 +13000 973.000000 0.371363 +14000 901.000000 0.434233 +15000 1034.000000 0.506385 +16000 1036.000000 0.578676 +17000 934.000000 0.643849 +18000 784.000000 0.698556 +19000 644.000000 0.743493 +20000 467.000000 0.776080 +21000 356.000000 0.800921 +22000 285.000000 0.820808 +23000 239.000000 0.837485 +24000 232.000000 0.853674 +25000 319.000000 0.875933 +26000 368.000000 0.901612 +27000 240.000000 0.918359 +28000 162.000000 0.929663 +29000 132.000000 0.938874 +30000 84.000000 0.944735 +31000 82.000000 0.950457 +32000 83.000000 0.956249 +33000 79.000000 0.961761 +34000 81.000000 0.967413 +35000 50.000000 0.970902 +36000 63.000000 0.975298 +37000 66.000000 0.979904 +38000 43.000000 0.982904 +39000 41.000000 0.985765 +40000 44.000000 0.988835 +41000 28.000000 0.990789 +42000 37.000000 0.993371 +43000 19.000000 0.994697 +44000 20.000000 0.996092 +45000 19.000000 0.997418 +46000 5.000000 0.997767 +47000 10.000000 0.998465 +48000 5.000000 0.998814 +49000 3.000000 0.999023 +50000 2.000000 0.999163 +51000 1.000000 0.999232 +52000 0.000000 0.999232 +53000 1.000000 0.999302 +54000 0.000000 0.999302 +55000 1.000000 0.999372 +56000 1.000000 0.999442 +57000 1.000000 0.999512 +58000 0.000000 0.999512 +59000 0.000000 0.999512 +60000 1.000000 0.999581 +61000 0.000000 0.999581 +62000 1.000000 0.999651 +63000 1.000000 0.999721 +64000 0.000000 0.999721 +65000 1.000000 0.999791 +66000 2.000000 0.999930 +67000 0.000000 0.999930 +68000 0.000000 0.999930 +69000 1.000000 1.000000 diff --git a/examples/quasimc-global/misc/.gitignore b/examples/quasimc-global/misc/.gitignore new file mode 100644 index 00000000..773a6df9 --- /dev/null +++ b/examples/quasimc-global/misc/.gitignore @@ -0,0 +1 @@ +*.dat diff --git a/examples/quasimc-global/params.plt b/examples/quasimc-global/params.plt new file mode 100755 index 00000000..8c840193 --- /dev/null +++ b/examples/quasimc-global/params.plt @@ -0,0 +1,15 @@ +#gnuplot 5.0 script +#parameters for the particular run + +fe = 5 +Kd1 = 0.0315151258095091 +psi1 = 2.0 +psi2 = 1.25 + +runname = sprintf('variable-psi-fe%d-%.1f-%g',fe,psi1,psi2) +outname = sprintf('frames/NPF-global-'.runname.'-equilmovie-%06d.'.ftype,ii) + +set output outname + +eqfile = 'NPFextrap-equilibrium-'.runname.'.dat' +titletext = sprintf("Variable degradation function exponent for f_e = %g\n{/Symbol y}_{small} = %g {/Symbol y}_{big} = %4.2f",fe,psi1,psi2) diff --git a/examples/quasimc-global/params.txt b/examples/quasimc-global/params.txt new file mode 100644 index 00000000..a92460d4 --- /dev/null +++ b/examples/quasimc-global/params.txt @@ -0,0 +1,4 @@ +5 +6.0 +4.0 + diff --git a/examples/quasimc-global/presentation/.gitignore b/examples/quasimc-global/presentation/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/examples/quasimc-global/rego/.gitignore b/examples/quasimc-global/rego/.gitignore new file mode 100644 index 00000000..a17efa9a --- /dev/null +++ b/examples/quasimc-global/rego/.gitignore @@ -0,0 +1,3 @@ +*.jpg +*.png + diff --git a/examples/quasimc-global/scale.ipynb b/examples/quasimc-global/scale.ipynb new file mode 100644 index 00000000..c7ad8e41 --- /dev/null +++ b/examples/quasimc-global/scale.ipynb @@ -0,0 +1,312 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pylab as plt\n", + "from scipy.interpolate import interp1d" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('craterscale.dat', sep='\\s+')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
#Dimp(m)Dcrat(m)
01.000000e-096.481735e-06
11.020000e-096.583192e-06
21.040400e-096.686237e-06
31.061208e-096.790895e-06
41.082432e-096.897191e-06
.........
14137.302589e+048.652002e+05
14147.597614e+049.033476e+05
14157.904558e+049.431769e+05
14168.223902e+049.847623e+05
14178.556147e+041.028181e+06
\n", + "

1418 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " #Dimp(m) Dcrat(m)\n", + "0 1.000000e-09 6.481735e-06\n", + "1 1.020000e-09 6.583192e-06\n", + "2 1.040400e-09 6.686237e-06\n", + "3 1.061208e-09 6.790895e-06\n", + "4 1.082432e-09 6.897191e-06\n", + "... ... ...\n", + "1413 7.302589e+04 8.652002e+05\n", + "1414 7.597614e+04 9.033476e+05\n", + "1415 7.904558e+04 9.431769e+05\n", + "1416 8.223902e+04 9.847623e+05\n", + "1417 8.556147e+04 1.028181e+06\n", + "\n", + "[1418 rows x 2 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(df['#Dimp(m)'], df['Dcrat(m)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAf9UlEQVR4nO3deXhU1f3H8feBsIclbCEsgbCGfTHs7ruAsmgVt1JE0V9bt1oriwoqbrSKtFWUqq21KgiyBFAQUKRWCwUFshEIYUuABAKBQBKyzPn9kdGmGCXLTO4sn9fz5CFz5w7zPTnkw51z7z3HWGsRERH/U8PpAkREpHIU4CIifkoBLiLipxTgIiJ+SgEuIuKnQqrzzZo3b247dOhQnW8pIuL3tm7desxa2+Lc7dUa4B06dGDLli3V+ZYiIn7PGLO/rO0aQhER8VMKcBERP6UAFxHxUwpwERE/pQAXEfFTCnARET+lABcR8VMKcBERLzp4PJenViRQVOzy+N9drTfyiIgEi/zCYt74IpXXNqRQs4ZhXP+29G7b2KPvoQAXEfGwz3ZmMDM2kQPHcxnZJ4LHR3YnonE9j7+PAlxExEO+Gy5Zl5RJpxYNeO/uwQzv3Nxr76cAFxGpovzCYl7/Yg/zNuyhZg3D1OuimTg8itoh3j3NqAAXEamC9UkZzFyRwMHjeYzqE8F0Lw2XlEUBLiJSCQeySoZL1u/MpHPLUN6/ezDDvDhcUhYFuIhIBeQXFjNvwx7mfbGHkBqGaSOi+cUw7w+XlEUBLiJSTusSM3hqZclwyfV9WzN9RHdaNa7rWD0KcBGR89ifdYanViTy2c5MurQM5f17BjOsU/UOl5RFAS4i8iPyC4t5bcMeXv9iD7VqGKaP6M4vhnegVk3fuIm9XAFujHkYuBuwQBwwEYgAFgDNgK3AndbaAi/VKSJSbay1rEvK5KkVCaSdyOOGvq2ZPrI74Y2cGy4py3kD3BjTBngA6GGtzTPGfAiMB0YAc6y1C4wxrwOTgHlerVZExMv2Z51hZmwCnycfpUvLUD64ZwhDOzVzuqwylXcIJQSoZ4wpBOoDh4HLgdvcz78DzEQBLiJ+Kq+gmHkbUnh9Yyq1ahgeH9mdCcN8Z7ikLOcNcGttujHmD8ABIA/4lJIhk2xrbZF7tzSgTVmvN8ZMBiYDREZGeqJmERGPsdayNjGDp1cmknYij9H9WjNthO8Nl5SlPEMoYcBoIArIBhYB15b3Day184H5ADExMbZSVYqIeMG+Y2eYuSKBDclH6Rru28MlZSnPEMqVwF5r7VEAY8wSYDjQxBgT4j4Kbwuke69MERHPySso5rUNKbzxRSq1Q2r4xXBJWcoT4AeAIcaY+pQMoVwBbAE+B26i5EqUCcBybxUpIuIJ1lo+Tczg6RWJpGfnMcY9XNLSD4ZLylKeMfBNxpjFwDdAEfAtJUMiq4AFxphZ7m1vebNQEZGqKD1c0i28IQsmD2FIR/8ZLilLua5CsdbOAGacszkVGOTxikREPOjc4ZInRvXg50Pb+91wSVl0J6aIBCRrLWsSMnhmZclwydj+bZh6XbTfDpeURQEuIgFn77EzzIhNYOOuo0S3asjCyUMY7OfDJWVRgItIwMgrKObVz1OYvzGVOiE1eNI9XBISAMMlZVGAi4jf++5mnKfcV5eM69+GKSOiadkwcIZLyqIAFxG/diArl5krEvhsZyZdw0MDdrikLApwEfFL+YXFvPFFKq9tSCHET+Yu8TQFuIj4nQ3JmcyITWB/Vi6j+kTw+Mgejq6M4xQFuIj4jUPZeTy9IpHVCUfo2LwB/5g0mAu7OL8yjlMU4CLi8wqKXLz15V7+uH43Fsuj13Tj7ouiqBNS0+nSHKUAFxGf9tWeYzy5PIGUzNNc3SOcJ0b1oF3T+k6X5RMU4CLikzJP5TNrVRKx2w/Rrmk93v5FDJdHhztdlk9RgIuITykqdvH3r/fz8tpdFBS7eOCKLvzy0k7UrRXcwyVlUYCLiM/Yuv84jy9LIOnwKS7p2oKnbuhJh+YNnC7LZynARcRxWafP8sInO1m0NY3Wjevy+h0DuKZnK4wxTpfm0xTgIuKYYpflg80H+P2aZM6cLeK+SzrxwBWdqV9b0VQe+imJiCN2pGXz+LJ4dqSdZGjHZjwzpiedWzZ0uiy/ogAXkWp1MreQ2Wt28v7mA7QIrcPc8f24oW9rDZdUggJcRKqFy2VZ/E0aL3yyk5N5hUwcFsXDV3WhYd1aTpfmtxTgIuJ1iYdO8eTyeLbsP0FM+zCeGdOL7hGNnC7L7ynARcRrcvILmbN2N+98vY8m9Wrx+5v6cOOAttSooeEST1CAi4jHWWuJ3X6IZ1clcfT0WW4fHMmjV0fTuL6GSzxJAS4iHpWSmcMTyxL4OjWLvm0b8+aEGPq0beJ0WQFJAS4iHpFbUMSfPkvhLxtTaVAnhGfH9mL8wEhqarjEaxTgIlJlaxMzmBmbQHp2Hj+7oC1TroumWWgdp8sKeApwEam0tBO5zIxNZF1SBt3CG7LovqEM7NDU6bKChgJcRCqs9AILxsC0EdFMHB4VVOtR+gIFuIhUyKbULB5fFs/uzNNc0zOcGdf3pHWTek6XFZQU4CJSLlmnz/Lcxzv56Js02oZpgQVfoAAXkZ/kclkW/OcgL67eSW5BEb+6rBO/vqwL9WprgQWnKcBF5EclHDrJ48vi+fZANkM6NmXWmF6aMdCHKMBF5Ady8gt5ee0u3vlqH00b1GbOLX0Z06+NZgz0MQpwEfmetZZVcYd5ZmUimTm6Bd7XKcBFBIB9x87wZGwCG3cdpVebRrxxZwz92jVxuiz5CQpwkSCXX1jM61/s4bUNe6hdswYzr+/BnUM76BZ4P6AAFwli/9x9lCeXJ7D32Bmu79uaJ0Z2p2Wjuk6XJeWkABcJQhmn8nlmZSIrdxwmqnkD3p00iIu6tHC6LKkgBbhIECkqdvHuv/fz0qe7KCh28fCVXbn3ko7UraVruv1RuQLcGNMEeBPoBVjgLiAZWAh0APYBN1trT3ijSBGpum0Hs5m+NI6EQ6e4uGsLnr6hJx2aN3C6LKmC8h6BzwVWW2tvMsbUBuoD04D11toXjDFTgCnAY16qU0QqqfQq8C0b1uHV2wYwoncrXdMdAM4b4MaYxsDFwC8ArLUFQIExZjRwqXu3d4ANKMBFfIa1lqXfpvPcx0kcP1OgVeADUHmOwKOAo8BfjTF9ga3Ag0C4tfawe58jQJmz2hhjJgOTASIjI6tcsIicX0pmDo8vi+ffqcfp164J79w1iJ6tGztdlnhYeQI8BBgA3G+t3WSMmUvJcMn3rLXWGGPLerG1dj4wHyAmJqbMfUTEM/IKivnTZ7v5yz9TqV87hOfG9mb8wHZaBT5AlSfA04A0a+0m9+PFlAR4hjEmwlp72BgTAWR6q0gROb/1SRnMiE0g7UQeNw5oy9QR0TTXsmYB7bwBbq09Yow5aIzpZq1NBq4AEt1fE4AX3H8u92qlIlKm9Ow8nopN4NPEDLq0DGXh5CEM7tjM6bKkGpT3KpT7gffcV6CkAhOBGsCHxphJwH7gZu+UKCJlKSwuWdZs7rrdWCyPXRvNpAujqB2iZc2CRbkC3Fq7DYgp46krPFqNiJTLln3Hmb40nuSMHK7sHs7MG3rQNqy+02VJNdOdmCJ+JDu3gBdX7+SDzQdp3bgu8++8gKt7tnK6LHGIAlzED1hrWbYtnVkrk8jOK+Sei6J46MquNKijX+Fgpt4X8XGpR0/zxPJ4/pWSRb92TXh3bG96tG7kdFniAxTgIj7qbFExr29I5dUNKdSpWYNnRvfktsHtNU+3fE8BLuKDvt6TxfRlcaQePcOoPhE8OaqH5umWH1CAi/iQrNNnefbjJJZ8k067pvV4565BXNJV83RL2RTgIj7A5bIs2nqQ5z/Zyen8In55aSfuv7wL9Wprnm75cQpwEYftzshh+tJ4Nu87zsAOYTw7tjddwxs6XZb4AQW4iEPyC0smnpq/sWTiqRdv7M3PLtDEU1J+CnARB3yx6yhPLIvnwPFcxvVvw7SR3TXxlFSYAlykGmXm5PPMyiRWbD9Ex+YNeP/uwQzr3NzpssRPKcBFqoHLZXlv8wFmr97J2UIXD13Zhfsu6aTFhKVKFOAiXpZ46BTTlsax7WA2wzo1Y9aYXnRsEep0WRIAFOAiXpJbUMQr63bz1pd7aVyvFi/f3Jex/dtoMWHxGAW4iBesSyxZHSc9O4/xA9sx5bpomtSv7XRZEmAU4CIedPhkHjNjE1iTkEHX8FAW3TeUgR2aOl2WBCgFuIgHFLss73y1j5c+TabIZXn0mm7cc1FHrY4jXqUAF6miHWnZTFsaR3z6KS7p2oJnRvcisplWxxHvU4CLVFJOfiEvfbqLv3+9j2ahdfjzbf0Z2TtCJyml2ijARSphTcIRZixPICMnnzsGt+e313Sjcb1aTpclQUYBLlIBR07mMyM2njUJGUS3ashrdwxgQGSY02VJkFKAi5RDscvy3qb9zF6dTGGxi99dW3KSslZNnaQU5yjARc4j6fAppi4puZPyoi7NmTWmF+2bNXC6LBEFuMiPyS8sZu763fxlYyqN6tVizi19GdNPd1KK71CAi5Thy93HmL4sjv1Zudx0QVumj+hOWAPdSSm+RQEuUkrW6bM8uyqJJd+mE6XpXsXHKcBFAGstH32TzrOrEjl9toj7L+/Mry7rrOlexacpwCXo7T12hulL4/hqTxYXtA/j+XFak1L8gwJcglZBkYv5G/fwx89SqFOzBs+O7cWtAyO1JqX4DQW4BKWt+48zdUkcuzJOM6J3K2Zc35PwRnWdLkukQhTgElRO5Rcye/VO3tt0gIhGdXnz5zFc2SPc6bJEKkUBLkHBWsvq+CPMiE3g2OmzTBwWxSNXd6VBHf0KiP/Sv14JeIey83hyeTzrkjLpEdGINyfE0KdtE6fLEqkyBbgErO8WWfjDp8lYC9NHdGfi8A6EaP4SCRAKcAlI8eknmbY0jh1pJ7m0W8kiC+2aapEFCSwKcAkoeQXFvLJuF29+uZew+rX40639GdVHiyxIYFKAS8D4V8oxpi6J48DxXMYPbMfU67rTuL4WWZDAVe4AN8bUBLYA6dbaUcaYKGAB0AzYCtxprS3wTpkiPy47t4BZq5JYvDWNqOYN+OCeIQzt1MzpskS8riJncx4Ekko9fhGYY63tDJwAJnmyMJHzsdayYvshrnz5C5Z9m86vLuvEJw9epPCWoFGuADfGtAVGAm+6HxvgcmCxe5d3gDFeqE+kTIey87j7nS3c/8G3tG5Sj9hfX8ij10Rr8ikJKuUdQnkF+B3w3Qw/zYBsa22R+3Ea0MazpYn8kMtl+cem/bz4yU5cFh4f2Z2Jw6OoqflLJAidN8CNMaOATGvtVmPMpRV9A2PMZGAyQGRkZEVfLvK9XRk5TPloB98cKFna7LmxvXVpoAS18hyBDwduMMaMAOoCjYC5QBNjTIj7KLwtkF7Wi62184H5ADExMdYjVUtQOVtUzKuf72HehhRC64RoaTMRt/MGuLV2KjAVwH0E/ltr7e3GmEXATZRciTIBWO69MiVYbdl3nClL4kjJPM3Y/m14fGR3moXWcbosEZ9QlevAHwMWGGNmAd8Cb3mmJBHIyS9k9upk3v33fto0qcffJg7k0m4tnS5LxKdUKMCttRuADe7vU4FBni9Jgt3axAyeWBZPRk4+dw3XrIEiP0a/FeIzMnPyeSo2kVVxh4lu1ZB5dwygf2SY02WJ+CwFuDjOWsuiLWnMWpVIfpGLR6/pxuSLO1JLswaK/CQFuDhq37EzTHMvKDwoqinPj+tNpxahTpcl4hcU4OKYBZsPMCM2gdo1a/Dc2N6MH9hOCwqLVIA+o4pjVu44zNkiF3df1JHbBms1eJGKUoCLY167YwCXdmvBnHW7eHJ5PIXFLqdLEvErCnBxTKO6tXhrwkDuvbgjf/96Pz9/azMncwudLkvEbyjAxVE1axgevqorfds14evULNYkHnG6JBG/oZOY4qhdGTn8+v1v2JVxmnsv7siYfprUUqS8FODiCGstH2w+yFMrEmhYN4R37hrEJV1bOF2WiF9RgEu1O5lXyLQlcayKO8yFnZvz8i19admwrtNlifgdBbhUq637T/DAB9+ScSqfx66N5t6LO+ryQZFKUoBLtXC5LPO+2MPLa3cR0bguH943lAGa50SkShTg4nWZOfn8ZuF2vkw5xsjeETw3rjeN69VyuiwRv6cAF6/akJzJIx9u50xBEc+PK7ldXivpiHiGAly8oqDIxR8+TWb+xlS6hTdkwW1D6BLe8PwvFJFyU4CLx6UePc2DC7YRl36S2wdH8sSoHtStVdPpskQCjgJcPMZay6KtacyMTaB2SA1ev+MCru3VyumyRAKWAlw84mReIdOWxrFqx2GGdGzKnFv6EdG4ntNliQQ0BbhU2X/2HeehBdvIOJXP767txr0Xd6Kmru0W8ToFuFRaUbGLP36Wwp8/2027pvVZ/H/D6NeuidNliQQNBbhUysHjuTy0cBtb959g3IA2PD26F6FaOV6kWuk3Tiosdvshpi+JA2Du+H6M1gyCIo5QgEu5nT5bxMzYBBZvTaN/ZBP+OL4/7ZrWd7oskaClAJdy2X4wmwcXfMuB47k8cHlnHriiCyE1tR6IiJMU4PKTXC7LGxtTeenTZFo2rMMH9wxhcMdmTpclIijA5SccOZnPbz7cxld7shjRuxXPj+1D4/qahErEVyjApUxrEo7w2Ec7OFvoYvaNffhZTFtNQiXiYxTg8j9yC4p4dlUS7206QK82jZg7vj+dWoQ6XZaIlEEBLt/bkZbNQwu2kXrsDJMv7sgjV3elTogmoRLxVQpwodhlmbchhVfW7aZFwzq8f/dghnVu7nRZInIeCvAgd/B4Lg8v3MaW/ScY1SeCZ8f01olKET+hAA9S1lo++iadmbEJGOCVW/oxul9rnagU8SMK8CB04kwB05fF8XHcEQZFNeXlm/vSNkx3VIr4GwV4kPnn7qP8dtF2jp8p4LFro5l8cUdN/SripxTgQSK/sJjZq5N5+1976dwylLcmDKRXm8ZOlyUiVaAADwJJh0/x0IJtJGfkMGFoe6aO6K41KkUCgAI8gLlclrf/tZfZq5NpXL8Wf504kMu6tXS6LBHxkPMGuDGmHfB3IBywwHxr7VxjTFNgIdAB2AfcbK094b1SpSIOn8zjkQ+389WeLK7uEc7z43rTLLSO02WJiAeV5wi8CHjEWvuNMaYhsNUYsxb4BbDeWvuCMWYKMAV4zHulSnlYa1m2LZ0nlydQ7LK8eGNvbo5pp8sDRQLQeQPcWnsYOOz+PscYkwS0AUYDl7p3ewfYgALcUVmnz/L4sng+iT9CTPswXrq5L+2bNXC6LBHxkgqNgRtjOgD9gU1AuDvcAY5QMsRS1msmA5MBIiMjK12o/LS1iRlMXbKDU3lFTLkumnsu0uWBIoGu3AFujAkFPgIestaeKv2R3FprjTG2rNdZa+cD8wFiYmLK3EcqLye/kKdXJLJoaxrdIxrxj7v7Et2qkdNliUg1KFeAG2NqURLe71lrl7g3ZxhjIqy1h40xEUCmt4qUsn29J4vfLtrO4ZN5/OqyTjx4RVdqh2iZM5FgUZ6rUAzwFpBkrX251FOxwATgBfefy71SofxA6Ztyopo3YPH/DWNAZJjTZYlINSvPEfhw4E4gzhizzb1tGiXB/aExZhKwH7jZKxXK/9iRls3DC7ex5+gZJgxtz2PXRVO/ti7nFwlG5bkK5Uvgx86GXeHZcuTHFBa7+PNnKfz58xRahNbh3UmDuKhLC6fLEhEH6dDND6Rk5vDwwu3EpZ9kXP82zLihJ43rac5ukWCnAPdhLpflr1/t48XVO2lQuybzbh/Adb0jnC5LRHyEAtxH7Tt2ht8t3sHmfce5sntLnh/XhxYNdSu8iPyXAtzHuFyWv321j9lrdlKrZg1+f1MfbrqgrW6FF5EfUID7kNJH3Zd1a8Hz4/rQqnFdp8sSER+lAPcB5x51/+FnfblxQBsddYvIT1KAO2zfsTM8ung7/9l3gsujW/Lc2N466haRclGAO0RH3SJSVQpwB+w9dobf6ahbRKpIAV6Nvruu+/c66hYRD1CAVxMddYuIpynAvayo2MWbX+5lztpd1A7RUbeIeI4C3IsSDp3ksY92EJ9+iqt7hPPMmF6EN9JRt4h4hgLcC/ILi5m7fjfzN6YSVr82r90+gOt6tdJRt4h4lALcwzalZjFlSRx7j53hZxe0ZfrI7jSpX9vpskQkACnAPeRUfiEvfLKT9zcdoF3Tevxj0mAu7NLc6bJEJIApwD1gbWIGTyyLJzMnn7svjOI3V3fVKjki4nVKmSo4mnOWmSsSWLXjMNGtGvLGnRfQt10Tp8sSkSChAK8Eay2Lt6Yxa1USeQXFPHJVV+69pJNWhBeRaqUAr6CUzNNMXxrHpr3HiWkfxgs39qZzy4ZOlyUiQUgBXk75hcW8+nkKr3+xh3q1avL8uN7cEtOOGjV0aaCIOEMBXg7/3H2Ux5fFsz8rl7H92zB9ZHeah2p5MxFxlgL8J2Tm5DNrZRKx2w8R1bwB7909mOGddWmgiPgGBXgZXC7Le5sPMHv1Ts4Wunjoyi7cd0kn6taq6XRpIiLfU4CfI/HQKaYtjWPbwWyGdWrGrDG96Ngi1OmyRER+QAHudjK3kJfWJvOPf+8nrH5t5tzSlzH9NGugiPiuoA9wl8vy4ZaDzF6TTHZuAXcOac9vrupG4/q1nC5NROQnBXWAbzuYzYzl8WxPO8nADmE8dcNgerRu5HRZIiLlEpQBnnX6LLNXJ7Nwy0FaNqzD3PH9uKFvaw2XiIhfCaoALyp28d6mA7z0aTK5BcXce3FH7r+iC6F1gurHICIBImiSa0NyJs+uSmJ35mku6tKcGdf3pHNLXV0iIv4r4AM8+UgOz36cxMZdR+nQrD6v33EB1/QM13CJiPi9gA3wozlnmbNuFws2HyC0TghPjOrBnUPaa8ZAEQkYARfgeQXFvP2vvczbsIf8wmImDOvAA5d3IayBljUTkcASMAFeUORi4ZaD/Gn9bjJzznJl93CmjYjWXZQiErD8PsCLXZbY7enMWbubA8dzGdghjD/fNoBBUU2dLk1ExKv8NsBdLsuniUeYs3Y3yRk59IhoxF8nDuTSri10glJEgkKVAtwYcy0wF6gJvGmtfcEjVf2EomIXK3cc5tXPU9ideZqo5g340639Gdk7QosriEhQqXSAG2NqAq8CVwFpwH+MMbHW2kRPFVfa6bNFLN+WzvyNqezPyqVbeEPmju/HqD6tqangFpEgVJUj8EFAirU2FcAYswAYDXg8wKctjWPpN+nkFRbTu01j3rjzAq7qHq4jbhEJalUJ8DbAwVKP04DB5+5kjJkMTAaIjIys1Bu1DavHzTFtGd2/Df3bNdEYt4gI1XAS01o7H5gPEBMTYyvzd/zy0s4erUlEJBBU5bbEdKBdqcdt3dtERKQaVCXA/wN0McZEGWNqA+OBWM+UJSIi51PpIRRrbZEx5tfAGkouI3zbWpvgscpEROQnVWkM3Fr7MfCxh2oREZEK0NR8IiJ+SgEuIuKnFOAiIn5KAS4i4qeMtZW6t6Zyb2bMUWB/JV/eHDjmwXJ8mdoauIKpvWqr57S31rY4d2O1BnhVGGO2WGtjnK6jOqitgSuY2qu2ep+GUERE/JQCXETET/lTgM93uoBqpLYGrmBqr9rqZX4zBi4iIv/Ln47ARUSkFAW4iIif8osAN8Zca4xJNsakGGOmOF1PVRlj2hljPjfGJBpjEowxD7q3NzXGrDXG7Hb/Gebebowxf3S3f4cxZoCzLag4Y0xNY8y3xpiV7sdRxphN7jYtdE9JjDGmjvtxivv5Do4WXkHGmCbGmMXGmJ3GmCRjzNBA7VdjzMPuf7/xxpgPjDF1A6lfjTFvG2MyjTHxpbZVuC+NMRPc++82xkzwZI0+H+ClFk++DugB3GqM6eFsVVVWBDxire0BDAF+5W7TFGC9tbYLsN79GEra3sX9NRmYV/0lV9mDQFKpxy8Cc6y1nYETwCT39knACff2Oe79/MlcYLW1NhroS0mbA65fjTFtgAeAGGttL0qmlB5PYPXr34Brz9lWob40xjQFZlCy3OQgYMZ3oe8R1lqf/gKGAmtKPZ4KTHW6Lg+3cTlwFZAMRLi3RQDJ7u/fAG4ttf/3+/nDFyWrNa0HLgdWAoaSu9ZCzu1jSuaXH+r+PsS9n3G6DeVsZ2Ng77n1BmK/8t81cZu6+2klcE2g9SvQAYivbF8CtwJvlNr+P/tV9cvnj8Ape/HkNg7V4nHuj5L9gU1AuLX2sPupI0C4+3t//xm8AvwOcLkfNwOyrbVF7sel2/N9W93Pn3Tv7w+igKPAX93DRW8aYxoQgP1qrU0H/gAcAA5T0k9bCcx+La2ifenVPvaHAA9YxphQ4CPgIWvtqdLP2ZL/rv3+Gk9jzCgg01q71elaqkEIMACYZ63tD5zhvx+xgYDq1zBgNCX/abUGGvDD4YaA5gt96Q8BHpCLJxtjalES3u9Za5e4N2cYYyLcz0cAme7t/vwzGA7cYIzZByygZBhlLtDEGPPdilCl2/N9W93PNwayqrPgKkgD0qy1m9yPF1MS6IHYr1cCe621R621hcASSvo6EPu1tIr2pVf72B8CPOAWTzbGGOAtIMla+3Kpp2KB785ST6BkbPy77T93n+keApws9THOp1lrp1pr21prO1DSd59Za28HPgducu92blu/+xnc5N7fL45YrbVHgIPGmG7uTVcAiQRgv1IydDLEGFPf/e/5u7YGXL+eo6J9uQa42hgT5v7UcrV7m2c4fZKgnCcSRgC7gD3AdKfr8UB7LqTko9cOYJv7awQlY4Lrgd3AOqCpe39DyZU4e4A4Ss78O96OSrT7UmCl+/uOwGYgBVgE1HFvr+t+nOJ+vqPTdVewjf2ALe6+XQaEBWq/Ak8BO4F44F2gTiD1K/ABJeP7hZR8uppUmb4E7nK3OwWY6MkadSu9iIif8ochFBERKYMCXETETynARUT8lAJcRMRPKcBFRPyUAlxExE8pwEVE/NT/A46CjZdD0zAaAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Dikm = df['#Dimp(m)'] / 1000\n", + "Dckm = df['Dcrat(m)'] / 1000\n", + "\n", + "plt.plot(Dckm, Dikm)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "df['log(Dc)'] = np.log(df['Dcrat(m)'])\n", + "df['log(Di)'] = np.log(df['#Dimp(m)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "xnew = df['log(Dc)'].values\n", + "ynew = df['log(Di)'].values\n", + "interp = interp1d(xnew, ynew, fill_value='extrapolate')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15258.479128540499" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(interp(np.log(200000))) #crater size as input; impactor size as output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Initializing simulation domain and determining minimum impactor size\n", + " Generating a test crater\n", + " Dimp = 44200.2475301581 \n", + " Vimp = 18300.0000000000 \n", + " angle = 45.0000000000000 \n", + " x offset = 0.000000000000000E+000\n", + " y offset = 0.000000000000000E+000\n", + " 0% ( ) Dcrat = 500013.835241806 " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "186296.7168337693" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(interp(np.log(2400000)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/quasimc-global/shaded/.gitignore b/examples/quasimc-global/shaded/.gitignore new file mode 100644 index 00000000..a17efa9a --- /dev/null +++ b/examples/quasimc-global/shaded/.gitignore @@ -0,0 +1,3 @@ +*.jpg +*.png + diff --git a/examples/quasimc-global/start.in b/examples/quasimc-global/start.in new file mode 100644 index 00000000..eb1e22d6 --- /dev/null +++ b/examples/quasimc-global/start.in @@ -0,0 +1 @@ +ctem_driver diff --git a/examples/quasimc-global/surf/.gitignore b/examples/quasimc-global/surf/.gitignore new file mode 100644 index 00000000..a17efa9a --- /dev/null +++ b/examples/quasimc-global/surf/.gitignore @@ -0,0 +1,3 @@ +*.jpg +*.png + diff --git a/python/ctem/ctem/craterproduction.py b/python/ctem/ctem/craterproduction.py new file mode 100644 index 00000000..4d81b687 --- /dev/null +++ b/python/ctem/ctem/craterproduction.py @@ -0,0 +1,216 @@ +import numpy as np +from scipy import optimize + +# The Neukum production function for the Moon and Mars +#Lunar PF from: Ivanov, Neukum, and Hartmann (2001) SSR v. 96 pp. 55-86 +#Mars PF from: Ivanov (2001) SSR v. 96 pp. 87-104 +sfd_coef = { + "NPF_Moon" : [-3.0876,-3.557528,+0.781027,+1.021521,-0.156012,-0.444058,+0.019977,+0.086850,-0.005874,-0.006809,+8.25e-4, +5.54e-5], + "NPF_Mars" : [-3.384, -3.197, +1.257, +0.7915, -0.4861, -0.3630, +0.1016, +6.756e-2,-1.181e-2,-4.753e-3,+6.233e-4,+5.805e-5] + } +sfd_range = { + "NPF_Moon" : [0.01,1000], + "NPF_Mars" : [0.015,362] +} +#Exponential time constant (Ga) +tau = 6.93 +Nexp = 5.44e-14 + +time_coef = { + "NPF_Moon" : Nexp, + "NPF_Mars" : Nexp * 10**(sfd_coef.get("NPF_Mars")[0]) / 10**(sfd_coef.get("NPF_Moon")[0]) +} + +def N1(T, pfmodel): + """ + Return the N(1) value as a function of time for a particular production function model + + Parameters + ---------- + T : numpy array + Time in units of Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + N1 : numpy array + The number of craters per square kilometer greater than 1 km in diameter + """ + T_valid_range = np.where((T <= 4.5) & (T >= 0.0), T, np.nan) + return time_coef.get(pfmodel) * (np.exp(tau * T_valid_range) - 1.0) + 10 ** (sfd_coef.get(pfmodel)[0]) * T_valid_range + +def CSFD(Dkm,planet): + """ + Return the cumulative size-frequency distribution for a particular production function model + + Parameters + ---------- + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + CSFD : numpy array + The number of craters per square kilometer greater than Dkm in diameter at T=1 Ga + """ + logCSFD = sum(co * np.log10(Dkm) ** i for i, co in enumerate(sfd_coef.get(planet))) + return 10**(logCSFD) + +def DSFD(Dkm,planet): + """ + Return the differential size-frequency distribution for a particular production function model + + Parameters + ---------- + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + DSFD : numpy array + The differential number of craters (dN/dD) per square kilometer greater than Dkm in diameter at T = 1 Ga + """ + dcoef = sfd_coef.get(planet)[1:] + logDSFD = sum(co * np.log10(Dkm) ** i for i, co in enumerate(dcoef)) + return 10**(logDSFD) * CSFD(Dkm,planet) / Dkm + +def Tscale(T,planet): + """ + Return the number density of craters at time T relative to time T = 1 Ga + + Parameters + ---------- + T : numpy array + Time in units of Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + Tscale : numpy array + N1(T) / CSFD(Dkm = 1.0) + """ + return N1(T,planet) / CSFD(1.0,planet) + +def pf_csfd(T,Dkm,planet): + """ + Return the cumulative size-frequency distribution for a particular production function model as a function of Time + + Parameters + ---------- + T : numpy array + Time in units of Ga + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + pf_csfd : numpy array + The cumulative number of craters per square kilometer greater than Dkm in diameter at time T T + """ + D_valid_range = np.where((Dkm >= sfd_range.get(planet)[0]) & (Dkm <= sfd_range.get(planet)[1]),Dkm,np.nan) + return CSFD(D_valid_range,planet) * Tscale(T,planet) + +def pf_dsfd(T,Dkm,planet): + """ + Return the differential size-frequency distribution for a particular production function model as a function of Time + + Parameters + ---------- + T : numpy array + Time in units of Ga + Dkm : numpy array + Diameters in units of km + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + pf_dsfd : numpy array + The cumulative number of craters per square kilometer greater than Dkm in diameter at time T T + """ + D_valid_range = np.where((Dkm >= sfd_range.get(planet)[0]) & (Dkm <= sfd_range.get(planet)[1]), Dkm, np.nan) + return DSFD(D_valid_range, planet) * Tscale(T, planet) + +def T_from_scale(TS,planet): + """ + Return the time in Ga for the given number density of craters relative to that at 1 Ga. + This is the inverse of Tscale + + Parameters + ---------- + TS : numpy array + number density of craters relative to that at 1 Ga + pfmodel : string + The production function model to use + Currently options are 'NPF_Moon' or 'NPF_Mars' + + Returns + ------- + T_from_scale : numpy array + The time in Ga + """ + def func(S): + return Tscale(S,planet) - TS + return optimize.fsolve(func, np.full_like(TS,4.4),xtol=1e-10) + + +if __name__ == "__main__": + import matplotlib.pyplot as plt + import matplotlib.ticker as ticker + print("Tests go here") + print(f"T = 1 Ga, N(1) = {pf_csfd(1.0,1.00,'NPF_Moon')}") + print(f"T = 4.2 Ga, N(1) = {pf_csfd(4.2,1.00,'NPF_Moon')}") + print("Tscale test: Should return all 1s") + Ttest = np.logspace(-4,np.log10(4.4),num=100) + Tres = T_from_scale(Tscale(Ttest,'NPF_Mars'),'NPF_Mars') + print(Ttest / Tres) + #for i,t in enumerate(Ttest): + # print(t,Tscale(t,'Moon'),Tres[i]) + + CSFDfig = plt.figure(1, figsize=(8, 7)) + ax = {'NPF_Moon': CSFDfig.add_subplot(121), + 'NPF_Mars': CSFDfig.add_subplot(122)} + + tvals = [0.01,1.0,4.0] + x_min = 1e-3 + x_max = 1e3 + y_min = 1e-9 + y_max = 1e3 + Dvals = np.logspace(np.log10(x_min), np.log10(x_max)) + for key in ax: + ax[key].title.set_text(key) + ax[key].set_xscale('log') + ax[key].set_yscale('log') + ax[key].set_ylabel('$\mathregular{N_{>D} (km^{-2})}$') + ax[key].set_xlabel('Diameter (km)') + ax[key].set_xlim(x_min, x_max) + ax[key].set_ylim(y_min, y_max) + ax[key].yaxis.set_major_locator(ticker.LogLocator(base=10.0, numticks=20)) + ax[key].yaxis.set_minor_locator(ticker.LogLocator(base=10.0, subs=np.arange(2,10), numticks=100)) + ax[key].xaxis.set_major_locator(ticker.LogLocator(base=10.0, numticks=20)) + ax[key].xaxis.set_minor_locator(ticker.LogLocator(base=10.0, subs=np.arange(2,10), numticks=100)) + ax[key].grid(True,which="minor",ls="-",lw=0.5,zorder=5) + ax[key].grid(True,which="major",ls="-",lw=1,zorder=10) + for t in tvals: + prod = pf_csfd(t,Dvals,key) + ax[key].plot(Dvals, prod, '-', color='black', linewidth=1.0, zorder=50) + labeli = 15 + ax[key].text(Dvals[labeli],prod[labeli],f"{t:.2f} Ga", ha="left", va="top",rotation=-72) + + plt.tick_params(axis='y', which='minor') + plt.tight_layout() + plt.show() diff --git a/python/ctem/ctem/driver.py b/python/ctem/ctem/driver.py index 401a29b1..832eb5b0 100644 --- a/python/ctem/ctem/driver.py +++ b/python/ctem/ctem/driver.py @@ -4,6 +4,9 @@ import shutil from ctem import util import sys +import pandas +from ctem import craterproduction +from scipy.interpolate import interp1d class Simulation: """ @@ -19,7 +22,6 @@ def __init__(self, param_file="ctem.in", isnew=True): 'popupconsole': None, 'saveshaded': None, 'saverego': None, - 'savepres': None, 'savetruelist': None, 'seedn': 1, 'totalimpacts': 0, @@ -41,7 +43,9 @@ def __init__(self, param_file="ctem.in", isnew=True): 'ctemfile': os.path.join(currentdir, param_file), 'impfile': None, 'sfdcompare': None, - 'sfdfile': None + 'sfdfile': None, + 'quasimc': None, + 'realcraterlist': None } self.user = util.read_user_input(self.user) @@ -65,12 +69,19 @@ def __init__(self, param_file="ctem.in", isnew=True): 'ejmax' : 'ejecta_table_max.dat', 'ejmin' : 'ejecta_table_min.dat', 'testprof' : 'testprofile.dat', - 'craterscale' : 'craterscale.dat' + 'craterscale' : 'craterscale.dat', + 'craterlist' : 'craterlist.dat' } for k, v in self.output_filenames.items(): self.output_filenames[k] = os.path.join(currentdir, v) - + + self.directories = ['dist', 'misc', 'surf'] + if self.user['saveshaded'].upper() == 'T': + self.directories.append('shaded') + if self.user['saverego'].upper() == 'T': + self.directories.append('rego') + # Set up data arrays self.seedarr = np.zeros(100, dtype=int) self.seedarr[0] = self.user['seed'] @@ -79,6 +90,7 @@ def __init__(self, param_file="ctem.in", isnew=True): self.tdist = np.zeros([1, 6]) self.surface_dem = np.zeros([self.user['gridsize'], self.user['gridsize']], dtype=float) self.surface_ejc = np.zeros([self.user['gridsize'], self.user['gridsize']], dtype=float) + self.ph1 = None if self.user['sfdcompare'] is not None: # Read sfdcompare file @@ -92,7 +104,7 @@ def __init__(self, param_file="ctem.in", isnew=True): if (self.user['restart'].upper() == 'F'): print('Starting a new run') - util.create_dir_structure(self.user) + util.create_dir_structure(self.user, self.directories) # Delete any old output files for k, v in self.output_filenames.items(): if os.path.isfile(v): @@ -100,7 +112,32 @@ def __init__(self, param_file="ctem.in", isnew=True): # Scale the production function to the simulation domain self.scale_production() - + + # Setup Quasi-MC run + + if (self.user['quasimc'] == 'T'): + + #Read list of real craters + print("quasi-MC mode is ON") + # Use self.compute_one_interval() to generate craterlist.dat + rclist = util.read_formatted_ascii(self.user['realcraterlist'], skip_lines = 0) + + #Interpolate craterscale.dat to get impactor sizes from crater sizes given + df = pandas.read_csv(self.output_filenames['craterscale'], sep='\s+') + df['log(Dc)'] = np.log(df['Dcrat(m)']) + df['log(Di)'] = np.log(df['#Dimp(m)']) + xnew = df['log(Dc)'].values + ynew = df['log(Di)'].values + interp = interp1d(xnew, ynew, fill_value='extrapolate') + rclist[:,0] = np.exp(interp(np.log(rclist[:,0]))) + + #Convert age in Ga to "interval time" + rclist[:,5] = (self.user['interval'] * self.user['numintervals']) - craterproduction.Tscale(rclist[:,5], 'NPF_Moon') + rclist = rclist[rclist[:,5].argsort()] + + #Export to dat file + util.write_realcraters(user, rclist) + util.write_datfile(self.user, self.output_filenames['dat'], self.seedarr) else: print('Continuing a previous run') @@ -219,6 +256,7 @@ def read_output(self): # Read ctem.dat file util.read_datfile(self.user, self.output_filenames['dat'], self.seedarr) + def process_output(self): """ @@ -228,7 +266,7 @@ def process_output(self): # Display results print(self.user['ncount'], ' Generating surface images and plots') - # Write surface dem, surface ejecta, shaded relief, and rplot data + # Write surface dem, surface ejecta and shaded relief data util.image_dem(self.user, self.surface_dem) if (self.user['saverego'].upper() == 'T'): util.image_regolith(self.user, self.surface_ejc) @@ -236,8 +274,6 @@ def process_output(self): util.image_shaded_relief(self.user, self.surface_dem) if self.user['ncount'] > 0: # These aren't available yet from the initial conditions - if (self.user['savepres'].upper() == 'T'): - util.create_rplot(self.user, self.odist, self.pdist, self.tdist, self.ph1) # Save copy of crater distribution files # Update user: mass, curyear, regolith properties @@ -286,7 +322,7 @@ def cleanup(self): """ # This is a list of files generated by the main Fortran program print("Deleting all files generated by CTEM") - util.destroy_dir_structure(self.user) + util.destroy_dir_structure(self.user, self.directories) for key, filename in self.output_filenames.items(): print(f"Deleting file {filename}") try: diff --git a/python/ctem/ctem/util.py b/python/ctem/ctem/util.py index 7d363f2f..df0465a1 100644 --- a/python/ctem/ctem/util.py +++ b/python/ctem/ctem/util.py @@ -9,12 +9,12 @@ dpi = 72.0 # These are directories that are created by CTEM in order to store intermediate results -directories = ['dist', 'misc', 'rego', 'rplot', 'surf', 'shaded'] -def create_dir_structure(user): +def create_dir_structure(user, directories): """ Create directories for various output files if they do not already exist """ + for dirname in directories: dirpath = os.path.join(user['workingdir'], dirname) if not os.path.isdir(dirpath): @@ -23,7 +23,7 @@ def create_dir_structure(user): return -def destroy_dir_structure(user): +def destroy_dir_structure(user, directories): """ Deletes directories generated by create_dir_structure """ @@ -35,95 +35,6 @@ def destroy_dir_structure(user): return - -def create_rplot(user, odist, pdist, tdist, ph1): - # Parameters: empirical saturation limit and dfrac - satlimit = 3.12636 - dfrac = 2 ** (1. / 4) * 1.0e-3 - - # Calculate geometric saturation - minx = (user['pix'] / 3.0) * 1.0e-3 - maxx = 3 * user['pix'] * user['gridsize'] * 1.0e-3 - geomem = np.array([[minx, satlimit / 20.0], [maxx, satlimit / 20.0]]) - geomep = np.array([[minx, satlimit / 10.0], [maxx, satlimit / 10.0]]) - - # Create distribution arrays without zeros for plotting on log scale - idx = np.nonzero(odist[:, 5]) - odistnz = odist[idx] - odistnz = odistnz[:, [2, 5]] - - idx = np.nonzero(pdist[:, 5]) - pdistnz = pdist[idx] - pdistnz = pdistnz[:, [2, 5]] - - idx = np.nonzero(tdist[:, 5]) - tdistnz = tdist[idx] - tdistnz = tdistnz[:, [2, 5]] - - # Correct pdist - pdistnz[:, 1] = pdistnz[:, 1] * user['curyear'] / user['interval'] - - # Create sdist bin factors, which contain one crater per bin - area = (user['gridsize'] * user['pix'] * 1.0e-3) ** 2. - plo = 1 - sq2 = 2 ** (1. / 2) - while (sq2 ** plo > minx): - plo = plo - 1 - phi = plo + 1 - while (sq2 ** phi < maxx): - phi = phi + 1 - n = phi - plo + 1 - sdist = np.zeros([n, 2]) - p = plo - for index in range(n): - sdist[index, 0] = sq2 ** p - sdist[index, 1] = sq2 ** (2.0 * p + 1.5) / (area * (sq2 - 1)) - p = p + 1 - - # Create time label - tlabel = "%5.4e" % user['curyear'] - tlabel = tlabel.split('e') - texp = str(int(tlabel[1])) - timelabel = 'Time = ' + r'${}$ x 10$^{}$'.format(tlabel[0], texp) + ' yrs' - - # Save image to file - filename = os.path.join(user['workingdir'],'rplot',"rplot%06d.png" % user['ncount']) - height = user['gridsize'] / dpi - width = height - fig = plt.figure(figsize=(width, height), dpi=dpi) - - # Alter background color to be black, and change axis colors accordingly - plt.style.use('dark_background') - plt.rcParams['axes.prop_cycle'] - - # Plot data - plt.plot(odistnz[:, 0] * 1.0e-3, odistnz[:, 1], linewidth=3.0, color='blue') - plt.plot(pdistnz[:, 0] * 1.0e-3, pdistnz[:, 1], linewidth=2.0, linestyle='dashdot', color='white') - plt.plot(tdistnz[:, 0] * 1.0e-3, tdistnz[:, 1], linewidth=2.0, color='red') - - plt.plot(geomem[:, 0], geomem[:, 1], linewidth=2.0, linestyle=':', color='yellow') - plt.plot(geomep[:, 0], geomep[:, 1], linewidth=2.0, linestyle=':', color='yellow') - plt.plot(sdist[:, 0], sdist[:, 1], linewidth=2.0, linestyle=':', color='yellow') - - plt.plot(ph1[:, 0] * dfrac, ph1[:, 1], 'wo') - - # Create plot labels - plt.title('Crater Distribution R-Plot', fontsize=22) - plt.xlim([minx, maxx]) - plt.xscale('log') - plt.xlabel('Crater Diameter (km)', fontsize=18) - plt.ylim([5.0e-4, 5.0]) - plt.yscale('log') - plt.ylabel('R Value', fontsize=18) - plt.text(1.0e-2, 1.0, timelabel, fontsize=18) - - plt.tick_params(axis='both', which='major', labelsize=14) - plt.tick_params(axis='both', which='minor', labelsize=12) - - plt.savefig(filename) - - return - def image_dem(user, DEM): dpi = 300.0 # 72.0 pix = user['pix'] @@ -166,7 +77,7 @@ def image_regolith(user, regolith): height = user['gridsize'] / dpi width = height fig = plt.figure(figsize=(width, height), dpi=dpi) - fig.figimage(regolith_scaled, cmap=cm.nipy_spectral, origin='lower') + fig.figimage(regolith_scaled, cmap=cm.cividis, origin='lower') plt.savefig(filename) return @@ -310,6 +221,7 @@ def read_user_input(user): if ('savetruelist' == fields[0].lower()): user['savetruelist'] = fields[1] if ('runtype' == fields[0].lower()): user['runtype'] = fields[1] if ('restart' == fields[0].lower()): user['restart'] = fields[1] + if ('quasimc' == fields[0].lower()): user['quasimc'] = fields[1] if ('shadedminh' == fields[0].lower()): user['shadedminh'] = real2float(fields[1]) user['shadedminhdefault'] = 0 @@ -400,3 +312,11 @@ def write_production(user, production): return + +def write_realcraters(user, realcraters): + """Writes file of real craters for use in quasi-MC runs""" + + filename = user['craterlist'] + np.savetxt(filename, realcraters, fmt='%1.8e', delimiter='\t') + + return \ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am index 90ac9873..3a193de4 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,7 +10,7 @@ AM_FCFLAGS = $(IPRODUCTION) #ifort debug flags #gfortran optimized flags -#AM_FCFLAGS = -O3 -fopenmp -ffree-form -g -fbounds-check -fbacktrace +AM_FCFLAGS = -O3 -fopenmp -ffree-form -g -fbounds-check -fbacktrace #gfortran debug flags #AM_FCFLAGS = -O0 -g -fopenmp -fbounds-check -Wall -Warray-bounds -Warray-temporaries -Wimplicit-interface -ffree-form -fsanitize-address-use-after-scope -fstack-check -fsanitize=bounds-strict -fsanitize=undefined -fsanitize=signed-integer-overflow -fsanitize=object-size -fstack-protector-all diff --git a/src/crater/crater_emplace.f90 b/src/crater/crater_emplace.f90 index c9544dcb..885143cd 100644 --- a/src/crater/crater_emplace.f90 +++ b/src/crater/crater_emplace.f90 @@ -24,6 +24,8 @@ ! * surf -- Outputs the new ejecta blanket onto the grid ! * crater -- May affects the value of the maximum affected distance ! * domain -- +! +! teswelktjrlkgjdlr ! ! Notes !