From 272b35b7af80837ced90fe4889fff9fe4c31a3ba Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 6 Dec 2012 21:19:22 -0500 Subject: [PATCH] Updated documentation to version 0.5.0. --- ...699541fd58481a75e0abad276ffecfd3767678.png | Bin 724 -> 0 bytes ...4ccf810d8b9fed4efe9df70dc0e70667c10381.png | Bin 391 -> 0 bytes ...6c519418d6e80eecb56502c8141bcc8fd02dac.png | Bin 1775 -> 0 bytes ...2dfa76529a0336c4df38e0620d170e6bfae916.png | Bin 0 -> 2466 bytes ...7433454f772ce180fc7b172abe4a64463c2dba.png | Bin 0 -> 2701 bytes ...be6addfac54bc22fb15534a5ec5cbe763ae7a9.png | Bin 0 -> 2089 bytes ...759659edb723e8f540171447461ecbbf77df3a.png | Bin 0 -> 343 bytes ...c2b6e475d01d8e0c5e3f7362ba9c81fb3bad5e.png | Bin 1117 -> 0 bytes ...aff915942ffb165f2d1bf054b22ad11d847f2.png} | Bin ...70a7515093c18d1d0836c332801e5931dbc500.png | Bin 622 -> 0 bytes ...768d7bc95b2e83ea09efa9cfcab024c10fbb39.png | Bin 0 -> 713 bytes ...894185a4626c5744e7def1ebf1a8cce3b4b75b.png | Bin 662 -> 0 bytes ...b02ce8fe228ede6ecddbbb62f2ed83a3a40609.png | Bin 0 -> 657 bytes ...dc55b9f305312b927279536a168654ce7f959f.png | Bin 0 -> 1018 bytes ...c878270009e6b580f34b84b327b3f4cd2b31d6.png | Bin 2007 -> 0 bytes ...cd500e91d1291645c1f2deb55e03e532902802.png | Bin 0 -> 362 bytes ...4ff010ed5a97ccf9e5e270b37afdbc61478156.png | Bin 0 -> 636 bytes ...5415a924d36e2734a23f99e94257d5091db94d.png | Bin 0 -> 817 bytes ...78690d5eac1413b0074b059b5c50d02cabfefa.png | Bin 2042 -> 0 bytes ...6cd86fc6398b816bd542a0f228aa399b7f27fe.png | Bin 2758 -> 0 bytes ...4c44d5859497107d7935ccb7b3ebf945e77036.png | Bin 0 -> 710 bytes ...04f5b4abe71eac5e4bb91f42d77f02fc95df30.png | Bin 740 -> 0 bytes ...f9017f15e5261188982a68bf9aac7c4870d22b.png | Bin 0 -> 1296 bytes ...0c77fec4c184bc5feb14825a638bbe6386b774.png | Bin 0 -> 1075 bytes ...7c5f44dbc332a2ff744cbe9a0b6991af95239f.png | Bin 1003 -> 0 bytes ...ad44e08be759dbfa306ff657b1646ed1348e77.png | Bin 0 -> 682 bytes ...c96eb2618141ba570e310f166accbf8998c72b.png | Bin 296 -> 0 bytes ...ddd53cab945638b174fc5a86c2d3375afb285a.png | Bin 0 -> 440 bytes ...178aaed51eec6164f6499657f0da97eb41965c.png | Bin 538 -> 0 bytes ...3913b278c1449f1820c28dffd2c40941bb4b84.png | Bin 0 -> 2038 bytes ...b6e2c62e6e64b4bb36cd69b67aa136c2544429.png | Bin 0 -> 1289 bytes ...80ee7cf09d9c08a683a7db1903bec33dd1e316.png | Bin 0 -> 761 bytes ...c637cab61f43e08325bd8c5a41e60bca94fa9a.png | Bin 192 -> 0 bytes ...661164baa521f78c15a180cb3bc25c2ccea4ad.png | Bin 0 -> 941 bytes ...55faa969d195745d46532d0e26ecff25af71a2.png | Bin 0 -> 656 bytes ...6174258d5f693a187b1c384416e8c148a66065.png | Bin 0 -> 1432 bytes ...eaebc1064e992b4ec80f9e0a877deba60205c9.png | Bin 0 -> 1013 bytes ...88ecae09ba1f2688572248e61c024774b756a1.png | Bin 1031 -> 0 bytes ...dcc4ea3a156537af1885c20f7a9d289faeef9d.png | Bin 0 -> 481 bytes ...92477e53a9f48501a6c403ad413500fae0a6d.png} | Bin ...78c15bb0cde3ad82b6c96d5737d75c5ecff4fa.png | Bin 486 -> 0 bytes ...8c2896dec2ac483dc4bcc92baca55b7cb19921.png | Bin 0 -> 246 bytes ...3d82e64ffa9e9d405065f74882a39a67c2a34a.png | Bin 0 -> 385 bytes ...f8ed7eb5654492c2a155dca7a71c04d0617da8.png | Bin 1295 -> 0 bytes ...4bfba219fe239a5796b200bacc974984e4e5c0.png | Bin 375 -> 0 bytes ...1ba583dd94da2078b240e3f6b2e6c6a870d63f.png | Bin 1368 -> 0 bytes ...6d5c906bb30c00ba2b8a7925aebc1bf8e4d656.png | Bin 0 -> 1450 bytes ...8f428010f544a68b10a29e9f56a82215d82c09.png | Bin 0 -> 820 bytes ...c5698c0310b533ad83064b5322096a3897fc76.png | Bin 1559 -> 0 bytes ...9ec6f7d2eb074e88e8f0e65288c7b9e480ea6b.png | Bin 409 -> 0 bytes ...5d820fddfbdeba128fea5611868ae6f3e02144.png | Bin 541 -> 0 bytes ...2104988d1bdede1e32a1a6cba5e5036b38078a.png | Bin 0 -> 726 bytes ...02a6b128ac408eb591049357b288ec9974597c.png | Bin 0 -> 350 bytes ...8f48c956034bca318c830d791a0f939921c448.png | Bin 908 -> 0 bytes ...dc991d37b3fa110b88c93a607969cfe30f6af8.png | Bin 0 -> 408 bytes ...bcbe5c4ec7dc9e7de4e5c3269f17c75981e27e.png | Bin 0 -> 812 bytes ...994a3d8762adfff079e8823b7a5dcc13abca52.png | Bin 771 -> 0 bytes ...564f3935a5e8dc746e34e3cc8ef0f53c31ea48.png | Bin 0 -> 358 bytes ...7181abfea7ca562a63421bfdacc65196eea297.png | Bin 1307 -> 0 bytes ...75035003057c0d471bcf75f7ebc69ee5d489b0.png | Bin 0 -> 923 bytes ...9259ea13017b50b3f238a75c59d4dec4ed989e.png | Bin 0 -> 384 bytes ...c5e2bf6de276d2d6c6dcd521181005cf66bf70.png | Bin 0 -> 359 bytes ...b143dd085345dc8e90d189bb3459976592c654.png | Bin 274 -> 0 bytes ...dcd1621630cb79cbd9d098c352efd564692125.png | Bin 0 -> 401 bytes ...cd8bddb750a0ad8e918993fad151b283a282ca.png | Bin 975 -> 0 bytes ...ccdabb54d53172e417848edff364cf77ffed3c.png | Bin 0 -> 551 bytes ...fc70bf11f3bc30f46e03173dec44cbb02f9886.png | Bin 0 -> 2769 bytes ...2d4ac30c971be67cf2655355d5d2c3b424c9af.png | Bin 0 -> 980 bytes ...44daa8af479b4aeca327e7680b9b48fffd35f3.png | Bin 0 -> 210 bytes ...a45e27a2286d530c0d9d17fba88c3e35471698.png | Bin 0 -> 659 bytes ...c9948bd95c09c736c99d00ad637d74eabbb64c.png | Bin 0 -> 861 bytes ...50e80ff25a3c978e7280b826d0d76cb3cda5ac.png | Bin 0 -> 1364 bytes ...3f21416d84e13708696f34dea81026cda583c9.png | Bin 0 -> 155 bytes ...f5ad51fbccc6f210d02d9c3eb8ea96fdd9f505.png | Bin 0 -> 500 bytes ...5738ad34c34e619278e78f3682a638f3ccab97.png | Bin 947 -> 0 bytes ...693703d3c0d2a954fa4dea34a5eb50e611e2a5.png | Bin 0 -> 1787 bytes ...db20de736ea9b9091c56adbd1e4111cc026472.png | Bin 464 -> 0 bytes ...724bbfb4ca001be9002a1f15a1f58cc3eb3dbe.png | Bin 0 -> 2053 bytes ...865559d669db2d2cf737e2d36d6070f12d2a52.png | Bin 0 -> 1180 bytes ...b0923a067ed9ba14e75a609d00553a6995a734.png | Bin 0 -> 488 bytes ...0382cba422757f5ad3072ea3edddfdb75568f4.png | Bin 1586 -> 0 bytes ...68db1245b557002774198c3744f72423cf487f.png | Bin 1022 -> 0 bytes ...21b74ffe3855d81ee338d064b7e89e8a40b8d5.png | Bin 2696 -> 0 bytes ...2798887f53db0227145680256423e007cd10d4.png | Bin 701 -> 0 bytes ...b5b60943e09b96c6f8ff0bccfdcdba8a92324e.png | Bin 1237 -> 0 bytes ...e0193a4c5b00f81c510ae43fcccfb3da27018e.png | Bin 0 -> 942 bytes ...6b89f519c7015310fff873255c4b350e27e3ff.png | Bin 482 -> 0 bytes ...e70a42234963b21c52f4dbf547d7630dcb1cba.png | Bin 2082 -> 0 bytes ...50da7a7a67e43cbe2548fb3e6b03740a27b89a.png | Bin 0 -> 346 bytes ...1d5b4233cfcb148da95272d25a97c69e14f88e.png | Bin 529 -> 0 bytes ...e9bb1f4819f7c9658ac21ee97abfe983accc96.png | Bin 0 -> 905 bytes ...06483391e5d25f86b5db41ebd1bc96aeabdb36.png | Bin 0 -> 927 bytes ...2389d958251c37b8f71f21654e1cb959da7f67.png | Bin 0 -> 443 bytes ...f37b880c28c0f79ccc57bc79ae3451936f2079.png | Bin 0 -> 417 bytes ...af838d0b24bf7dde42dba97b2fd24f2747e646.png | Bin 0 -> 201 bytes ...5ec799a437cc6b3b9b16101acca9e22cf51049.png | Bin 0 -> 376 bytes ...c5da59a13a4d083fba1bf493a394ed62839e37.png | Bin 992 -> 0 bytes ...f272ef45c654fbb0b1475da1f2d24cb6e8c996.png | Bin 0 -> 1591 bytes ...86b0ef48a28317d10a53f409f74d756ae49fd4.png | Bin 0 -> 344 bytes ...cf6d01088bea405efbc8b1cc72f1d04b1f53f5.png | Bin 0 -> 509 bytes ...d354ab7d7f620dd8ae20952c61ac140e6df368.png | Bin 684 -> 0 bytes ...ae97afd50afd36ef27d7eeff7e8a693e403e6a.png | Bin 273 -> 0 bytes ...02377eaf710d12e68cb7e0f4fc46f356fdefad.png | Bin 0 -> 901 bytes ...5208d9f66b32932755ea1cf913c34fd21f4a93.png | Bin 2426 -> 0 bytes ...75ae22d97a71b892653637c6d02bd25172ab30.png | Bin 1306 -> 0 bytes _images/uniongrid.svg | 792 ++++++++++ _sources/devguide/statepoint.txt | 221 +++ _sources/devguide/structures.txt | 66 + _sources/methods/cross_sections.txt | 94 ++ .../{criticality.txt => eigenvalue.txt} | 34 +- _sources/methods/geometry.txt | 224 ++- _sources/methods/index.txt | 5 +- _sources/methods/introduction.txt | 20 +- _sources/methods/physics.txt | 821 +++++----- _sources/methods/random_numbers.txt | 74 + _sources/methods/statistics.txt | 369 ----- _sources/methods/tallies.txt | 334 +++- _sources/publications.txt | 2 +- _sources/releasenotes/index.txt | 1 + _sources/releasenotes/notes_0.4.4.txt | 4 +- _sources/releasenotes/notes_0.5.0.txt | 52 + _sources/usersguide/input.txt | 162 +- _sources/usersguide/install.txt | 35 +- developers.html | 2 +- devguide/index.html | 18 +- devguide/statepoint.html | 200 ++- devguide/structures.html | 55 +- devguide/styleguide.html | 2 +- devguide/workflow.html | 2 +- devguide/xml-fortran.html | 2 +- genindex.html | 2 +- index.html | 2 +- license.html | 2 +- methods/cross_sections.html | 165 ++ methods/{criticality.html => eigenvalue.html} | 52 +- methods/geometry.html | 307 ++-- methods/index.html | 123 +- methods/introduction.html | 28 +- methods/parallelization.html | 28 +- methods/physics.html | 1339 +++++++++-------- methods/random_numbers.html | 150 ++ methods/statistics.html | 339 ----- methods/tallies.html | 243 ++- objects.inv | Bin 1512 -> 1631 bytes publications.html | 4 +- quickinstall.html | 2 +- releasenotes/index.html | 9 +- releasenotes/notes_0.4.0.html | 2 +- releasenotes/notes_0.4.1.html | 2 +- releasenotes/notes_0.4.2.html | 2 +- releasenotes/notes_0.4.3.html | 2 +- releasenotes/notes_0.4.4.html | 10 +- releasenotes/notes_0.5.0.html | 128 ++ search.html | 2 +- searchindex.js | 2 +- usersguide/beginners.html | 2 +- usersguide/index.html | 29 +- usersguide/input.html | 187 +-- usersguide/install.html | 36 +- usersguide/troubleshoot.html | 2 +- 160 files changed, 4422 insertions(+), 2370 deletions(-) delete mode 100644 _images/math/03699541fd58481a75e0abad276ffecfd3767678.png delete mode 100644 _images/math/044ccf810d8b9fed4efe9df70dc0e70667c10381.png delete mode 100644 _images/math/046c519418d6e80eecb56502c8141bcc8fd02dac.png create mode 100644 _images/math/062dfa76529a0336c4df38e0620d170e6bfae916.png create mode 100644 _images/math/077433454f772ce180fc7b172abe4a64463c2dba.png create mode 100644 _images/math/09be6addfac54bc22fb15534a5ec5cbe763ae7a9.png create mode 100644 _images/math/11759659edb723e8f540171447461ecbbf77df3a.png delete mode 100644 _images/math/16c2b6e475d01d8e0c5e3f7362ba9c81fb3bad5e.png rename _images/math/{03ebd74b62217730b500ee083515c436dad85fb6.png => 1e3aff915942ffb165f2d1bf054b22ad11d847f2.png} (100%) delete mode 100644 _images/math/1f70a7515093c18d1d0836c332801e5931dbc500.png create mode 100644 _images/math/22768d7bc95b2e83ea09efa9cfcab024c10fbb39.png delete mode 100644 _images/math/22894185a4626c5744e7def1ebf1a8cce3b4b75b.png create mode 100644 _images/math/23b02ce8fe228ede6ecddbbb62f2ed83a3a40609.png create mode 100644 _images/math/23dc55b9f305312b927279536a168654ce7f959f.png delete mode 100644 _images/math/26c878270009e6b580f34b84b327b3f4cd2b31d6.png create mode 100644 _images/math/26cd500e91d1291645c1f2deb55e03e532902802.png create mode 100644 _images/math/274ff010ed5a97ccf9e5e270b37afdbc61478156.png create mode 100644 _images/math/2c5415a924d36e2734a23f99e94257d5091db94d.png delete mode 100644 _images/math/2d78690d5eac1413b0074b059b5c50d02cabfefa.png delete mode 100644 _images/math/306cd86fc6398b816bd542a0f228aa399b7f27fe.png create mode 100644 _images/math/334c44d5859497107d7935ccb7b3ebf945e77036.png delete mode 100644 _images/math/3904f5b4abe71eac5e4bb91f42d77f02fc95df30.png create mode 100644 _images/math/3bf9017f15e5261188982a68bf9aac7c4870d22b.png create mode 100644 _images/math/3f0c77fec4c184bc5feb14825a638bbe6386b774.png delete mode 100644 _images/math/3f7c5f44dbc332a2ff744cbe9a0b6991af95239f.png create mode 100644 _images/math/40ad44e08be759dbfa306ff657b1646ed1348e77.png delete mode 100644 _images/math/40c96eb2618141ba570e310f166accbf8998c72b.png create mode 100644 _images/math/46ddd53cab945638b174fc5a86c2d3375afb285a.png delete mode 100644 _images/math/4e178aaed51eec6164f6499657f0da97eb41965c.png create mode 100644 _images/math/4f3913b278c1449f1820c28dffd2c40941bb4b84.png create mode 100644 _images/math/50b6e2c62e6e64b4bb36cd69b67aa136c2544429.png create mode 100644 _images/math/5280ee7cf09d9c08a683a7db1903bec33dd1e316.png delete mode 100644 _images/math/54c637cab61f43e08325bd8c5a41e60bca94fa9a.png create mode 100644 _images/math/55661164baa521f78c15a180cb3bc25c2ccea4ad.png create mode 100644 _images/math/5855faa969d195745d46532d0e26ecff25af71a2.png create mode 100644 _images/math/5a6174258d5f693a187b1c384416e8c148a66065.png create mode 100644 _images/math/5aeaebc1064e992b4ec80f9e0a877deba60205c9.png delete mode 100644 _images/math/5e88ecae09ba1f2688572248e61c024774b756a1.png create mode 100644 _images/math/5edcc4ea3a156537af1885c20f7a9d289faeef9d.png rename _images/math/{73ff526963cd019052e8d882596a8aa0dc87a2a6.png => 66192477e53a9f48501a6c403ad413500fae0a6d.png} (100%) delete mode 100644 _images/math/6d78c15bb0cde3ad82b6c96d5737d75c5ecff4fa.png create mode 100644 _images/math/708c2896dec2ac483dc4bcc92baca55b7cb19921.png create mode 100644 _images/math/743d82e64ffa9e9d405065f74882a39a67c2a34a.png delete mode 100644 _images/math/75f8ed7eb5654492c2a155dca7a71c04d0617da8.png delete mode 100644 _images/math/7a4bfba219fe239a5796b200bacc974984e4e5c0.png delete mode 100644 _images/math/7b1ba583dd94da2078b240e3f6b2e6c6a870d63f.png create mode 100644 _images/math/7d6d5c906bb30c00ba2b8a7925aebc1bf8e4d656.png create mode 100644 _images/math/7d8f428010f544a68b10a29e9f56a82215d82c09.png delete mode 100644 _images/math/7dc5698c0310b533ad83064b5322096a3897fc76.png delete mode 100644 _images/math/839ec6f7d2eb074e88e8f0e65288c7b9e480ea6b.png delete mode 100644 _images/math/855d820fddfbdeba128fea5611868ae6f3e02144.png create mode 100644 _images/math/882104988d1bdede1e32a1a6cba5e5036b38078a.png create mode 100644 _images/math/8902a6b128ac408eb591049357b288ec9974597c.png delete mode 100644 _images/math/8b8f48c956034bca318c830d791a0f939921c448.png create mode 100644 _images/math/8edc991d37b3fa110b88c93a607969cfe30f6af8.png create mode 100644 _images/math/8fbcbe5c4ec7dc9e7de4e5c3269f17c75981e27e.png delete mode 100644 _images/math/90994a3d8762adfff079e8823b7a5dcc13abca52.png create mode 100644 _images/math/91564f3935a5e8dc746e34e3cc8ef0f53c31ea48.png delete mode 100644 _images/math/927181abfea7ca562a63421bfdacc65196eea297.png create mode 100644 _images/math/9375035003057c0d471bcf75f7ebc69ee5d489b0.png create mode 100644 _images/math/959259ea13017b50b3f238a75c59d4dec4ed989e.png create mode 100644 _images/math/98c5e2bf6de276d2d6c6dcd521181005cf66bf70.png delete mode 100644 _images/math/a4b143dd085345dc8e90d189bb3459976592c654.png create mode 100644 _images/math/a5dcd1621630cb79cbd9d098c352efd564692125.png delete mode 100644 _images/math/a7cd8bddb750a0ad8e918993fad151b283a282ca.png create mode 100644 _images/math/a8ccdabb54d53172e417848edff364cf77ffed3c.png create mode 100644 _images/math/a9fc70bf11f3bc30f46e03173dec44cbb02f9886.png create mode 100644 _images/math/aa2d4ac30c971be67cf2655355d5d2c3b424c9af.png create mode 100644 _images/math/aa44daa8af479b4aeca327e7680b9b48fffd35f3.png create mode 100644 _images/math/aca45e27a2286d530c0d9d17fba88c3e35471698.png create mode 100644 _images/math/acc9948bd95c09c736c99d00ad637d74eabbb64c.png create mode 100644 _images/math/ad50e80ff25a3c978e7280b826d0d76cb3cda5ac.png create mode 100644 _images/math/b13f21416d84e13708696f34dea81026cda583c9.png create mode 100644 _images/math/b1f5ad51fbccc6f210d02d9c3eb8ea96fdd9f505.png delete mode 100644 _images/math/ba5738ad34c34e619278e78f3682a638f3ccab97.png create mode 100644 _images/math/be693703d3c0d2a954fa4dea34a5eb50e611e2a5.png delete mode 100644 _images/math/c0db20de736ea9b9091c56adbd1e4111cc026472.png create mode 100644 _images/math/c1724bbfb4ca001be9002a1f15a1f58cc3eb3dbe.png create mode 100644 _images/math/c2865559d669db2d2cf737e2d36d6070f12d2a52.png create mode 100644 _images/math/c7b0923a067ed9ba14e75a609d00553a6995a734.png delete mode 100644 _images/math/cc0382cba422757f5ad3072ea3edddfdb75568f4.png delete mode 100644 _images/math/cd68db1245b557002774198c3744f72423cf487f.png delete mode 100644 _images/math/cf21b74ffe3855d81ee338d064b7e89e8a40b8d5.png delete mode 100644 _images/math/d02798887f53db0227145680256423e007cd10d4.png delete mode 100644 _images/math/d6b5b60943e09b96c6f8ff0bccfdcdba8a92324e.png create mode 100644 _images/math/d6e0193a4c5b00f81c510ae43fcccfb3da27018e.png delete mode 100644 _images/math/dc6b89f519c7015310fff873255c4b350e27e3ff.png delete mode 100644 _images/math/dce70a42234963b21c52f4dbf547d7630dcb1cba.png create mode 100644 _images/math/de50da7a7a67e43cbe2548fb3e6b03740a27b89a.png delete mode 100644 _images/math/e11d5b4233cfcb148da95272d25a97c69e14f88e.png create mode 100644 _images/math/ede9bb1f4819f7c9658ac21ee97abfe983accc96.png create mode 100644 _images/math/f006483391e5d25f86b5db41ebd1bc96aeabdb36.png create mode 100644 _images/math/f02389d958251c37b8f71f21654e1cb959da7f67.png create mode 100644 _images/math/f2f37b880c28c0f79ccc57bc79ae3451936f2079.png create mode 100644 _images/math/f3af838d0b24bf7dde42dba97b2fd24f2747e646.png create mode 100644 _images/math/f55ec799a437cc6b3b9b16101acca9e22cf51049.png delete mode 100644 _images/math/f8c5da59a13a4d083fba1bf493a394ed62839e37.png create mode 100644 _images/math/f9f272ef45c654fbb0b1475da1f2d24cb6e8c996.png create mode 100644 _images/math/fa86b0ef48a28317d10a53f409f74d756ae49fd4.png create mode 100644 _images/math/fbcf6d01088bea405efbc8b1cc72f1d04b1f53f5.png delete mode 100644 _images/math/fbd354ab7d7f620dd8ae20952c61ac140e6df368.png delete mode 100644 _images/math/fcae97afd50afd36ef27d7eeff7e8a693e403e6a.png create mode 100644 _images/math/fd02377eaf710d12e68cb7e0f4fc46f356fdefad.png delete mode 100644 _images/math/fd5208d9f66b32932755ea1cf913c34fd21f4a93.png delete mode 100644 _images/math/ff75ae22d97a71b892653637c6d02bd25172ab30.png create mode 100644 _images/uniongrid.svg create mode 100644 _sources/methods/cross_sections.txt rename _sources/methods/{criticality.txt => eigenvalue.txt} (84%) create mode 100644 _sources/methods/random_numbers.txt delete mode 100644 _sources/methods/statistics.txt create mode 100644 _sources/releasenotes/notes_0.5.0.txt create mode 100644 methods/cross_sections.html rename methods/{criticality.html => eigenvalue.html} (84%) create mode 100644 methods/random_numbers.html delete mode 100644 methods/statistics.html create mode 100644 releasenotes/notes_0.5.0.html diff --git a/_images/math/03699541fd58481a75e0abad276ffecfd3767678.png b/_images/math/03699541fd58481a75e0abad276ffecfd3767678.png deleted file mode 100644 index 850fa0f94baaddb64d9b750bf128b98808eb8bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)4SytFwv4 zHCIMK+%&NfvxXEwF&q{a0m&YcD{M@WBA_gLm4za{nZ4EB+qv;l__$+d=C|LxeQ)N? z0EwN(|FJ;9&PqqGsiqqV&J5u*7h(7^u-{h9IvOku1bS;L@pSzrCbHvS(gr&y&UReb z%Duo`JmXLO1aLPC-lUB&$!Z)I&gWhj_pl?vzYi=(mE~A5?TBzc_ktGUB@grQst-zk zX?uMq&MJ-hMXVp-p6GPlej@|BuD+M_z6Bc+rK7(GtenqYjE>FYr96<&joJq*%qnjn z(u0pU6#1vdkpw;!9dqe&Ab|pFIiH=F|L99X)F{0kYv(d#w(ynJrbx-xo*KInn3lv3 ziIVUI$}$h@d_;DX@i`6Q6BV)7#-iv+6gB8m0_@QkDIs8WstD7PuX+-t>0-9;^KWiL ztnq;tlsX>bM39TK7gyUTd!!Vb!ZTV$nEL!IQ%=ruoL^7P$0C1Tg;-Ba$1JPtz;J!d zo@|IB*6i^{5mu88zvZ8mQ^=unEx=A!~EIRrQi zzCS2H=Dc$@sdH)I?7JhJ@J(_uJH9kn>LPJ-DmY9zc=jcxGrmbGq3V*LX?OdjB83WL zvdhfc7Qxn4IvaYuQXdLcCcVolTmQVXOMJnb3aGG6$=Giq4&@^|nhPfY0000!0003J zNklYHU@~C94#46p3OHm{Ktvc0Nd^v(<^l!=+q-ugzyi#7@7@42z#;`u71%*A z0|Vy*oU$(&7`TB{^R?z*ATD1g1IGuj1pj8X1t2LPVq37fVIN3Lnfn3%1+c8e)5{DD zj0_BGfL1ePLySsT$iSTdVR8YT!=nI_Wnj1uwdp>?Ln!M716WoY#4d)4onQ!uF!(@5 zK82E%i zL1ZfcW-xP|0R~wHg+$K&8PqX002ovPDHLkV1n%nh~fYM diff --git a/_images/math/046c519418d6e80eecb56502c8141bcc8fd02dac.png b/_images/math/046c519418d6e80eecb56502c8141bcc8fd02dac.png deleted file mode 100644 index cfe6aa551d44eeaab12fc998ba79802ca26e18da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1775 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%0DTpKm00000NkvXX Hu0mjf=O8lK literal 0 HcmV?d00001 diff --git a/_images/math/09be6addfac54bc22fb15534a5ec5cbe763ae7a9.png b/_images/math/09be6addfac54bc22fb15534a5ec5cbe763ae7a9.png new file mode 100644 index 0000000000000000000000000000000000000000..942d35ce6a24af6a49d8f8cad714e49fa388dc92 GIT binary patch literal 2089 zcmV+^2-f$BP)a(1UR#7h3pa%5hjbAn$Uk?Hh-!ay&YZb3=VQL^ncHQ4 z^e(%5IP<=9&OGPLd!FZ<0ceTc=9G%Ptv8=e-GmmKe!?j}35l`xe2W|GDmcaalLLeP zVT&6)Ep6^Kx2Tj71OuFr4Seg^>9JLn z20cD;i|Im=U?`5rMqWW9T5ilkrRH9ymLwRm(y!<|^gGy?NA@yRP7(^B^-Bh-{g6XH z4S5vvNreGsNyc@IL%C6p_0;nGPgnyxS8fbyKwI|5<4uHNo$T88%h__H9zRg!U11IE zo&#S5!BEU+2Ac=N4#`wi98poOS8#^yM06D0#i#^%U>l&W9t^p^@_H3<&U*Aa=-&); zeeqK07=lH(INk&prfFG`YXCk|F;%#UmpudJ0rY<}?v8Q^+o0%ylf^t}fIX##;Gz?~ z9j&m3fw}*^kS!a_aa}XkobDm2<<-&SzCpi#Ld6CV!(faDdEjKx-v|uZJj`*T5e)D* zd;J2m<+JIgt(aA}{D>Bv(_ki4Hoijv>4V-dupV4fIzeAu;hSLEOl{nW_JE-uUV)iW zRM?zr0t_i?h)jsAw2ZkZwA8T-=dzbQVcCKqn^W~8V3X8L2@Sj{t@>2ENt;>;ow(9Y8n$*a?+kheg0L1@mcuY5)w52ePeRB=Uq1 zvf+$1Q?Aj`A`IOqBWM*}HKE(x%^D4Q(qN|IK4ll0w0Ce6h_6zZ)k)n{n*^moV0dnp z$I9h+U=mpnVQ8nM-Cbnzng)JPjUGB0!JwX8$t?8v&$hkUL0Cd6P~y>F+#5va0%7>w z&CRHrDK1^}RcT(4YLFVVNs?dou{@9+pi=tn_WyefYM~;pQO;tv&kvYX^dbS?sjo?) z0LzFUnre3jX82TK^7z~-Z8a58*o#7y0K;fUR|tJ^JWf(DY_cKReUpcwI}Zn<-(N43 zNaD#NuaAPWU?5eQa!Q9G!(SAt1Q-h0_d@ch<8hLDo^wPyP4~{{Vc>L5$o)0=p1f)( zL+E`T3E?HT(Q1%#b78o89ma3uzOe`2o8U~`BykN-6C`Y`GJhR>8Xz3RGO4qx8+*i5LozwbZ zF^uq=GN{TGFsFtex?%y;CUa~?!C;ha?c|Qz@bJ~)VQc76&TI7cJs1Wo1qdx&g7w!V zDqP2H)w_S3zQQOsx^o${R3PP7iUXM-lSjj$hJpFm5kjd!Q} zRbS;s!_ZkGU8G(LQbh}xCgg_4u-MEI?L?199focEsvR{qEEj00g3>|F>3-E$x#8SU zhhZ8$;R;|n}MGKfXFcA8r?Z^=ruy&%yqs|+8duL1BJe`My-*U7R;IEC3I^9nd ze3YBJU@F%FTA&4tmWvGo-tT(D)=uk;hg0 zn0;wShli*c36G%ebIMJX+l%B#xp-V7kam<0i7e6QFdsK~D``&6h{rV^dMA#hWk2*_ zNV&&x4NuzLbBY_x#|_>}no~0#$2Gj(iD&ISl7S2<_t=Z%Njq|yYtQBgA2)Dn#^anq z)H`vk^Ri?hL&`m1;7L20#&#My8{t%+Q!^eghYZ4eMixnmlzSf6@T48t-8MiYp&vJ}YR2oh#zXJKv7@qq3@P`R4XZ_xI8C}+ z9NZPL4M)v*%mz{K#IYN)feb14fPp9N;CyJ+T|OAC30KYd!O$$dqx4AzvZP!*t`SH( zI3HSNFIOTq;;0$%xTd*!CnLL1u%ui(uHi|$W!K4T-P1s$M9nPvkM&Ml+;8Z^j%%3f z4-m%IHx&8y0dgR+M+AE!?hV3@Ynbbu7U;@A^i9_QIS|<+g8c@qG?iq_-VsQar7Ep$ zZ_@gE%uE;z`&<0w^4k_!`!QiCz=amKr&!$L{iMAUL#=MnI)d1lFc@awe`D=m@cxZ` TZ;K4(00000NkvXXu0mjfm)-WU literal 0 HcmV?d00001 diff --git a/_images/math/11759659edb723e8f540171447461ecbbf77df3a.png b/_images/math/11759659edb723e8f540171447461ecbbf77df3a.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb773ed96ef5deef1d5d9ba9159209199a2d343 GIT binary patch literal 343 zcmV-d0jU0oP)!0002u zNklFYS3fQDnKtvdl0JG_5D2oH6tpG{tGJ_(__yVXj40tkde}FQB z85lShpx6P|^^$>s8>lf<***a(audem1|zkF1{_cuTRy>fj0_BG7#I?I7+5Djb-jK7 zSAV0000mP)t-s|Ns90 z001yBFp7$bA|fKTwzka7%;x6io}Qir1OyBW3{X%|KtMni78Z1LbYfy+2MhG1000B% zNkl)OheR7f6ta5ED&^VgQed8G4We12bwuLV~`wkFD+6ZLdv?U(%Ppw|@Jz-}}Dr z_iF(fG`huTA!yuE8b1OzcM%-eIeTub-~{xwJ-22jn6PZm&Ep6(VbARz%B9)Eh5SM2 zs-19sCW}l74L2s=7LJjj&&VN;16*dJwJ!6$jG3$kBzar~@GcMsh~fdbK)m*aG0VMa zMMsGkG%b3;>lbW-q7Vr{R0G}|8fJk7xC-Q;my{T1fh@Sd$-A=l;sL-<8=yN%(S2Mb z1a*lhF=H?eAlU#tuCzjl;mLc0I|>7JF-<|0-q0(0MTQ7;Snh<#*T>rc^(kRpLdO*% z(68w5qhw;i253;Z)2HYl+f=y?4WiKQ+5vSX<;O)oa5>VB9a!lpbVq^P9@w4e+OoK3 zda8ZeoGj)J6!McI2_{`>L!E(fO85mC0`C!f?Y=_c-Ymd*=%lm%fWnjIq(E`~15biD zyxwF3-fx_;DHErKK051~!1o|E;GJ*^3iDf#U~<77N1!eq47}S39xWM2DutU{Jy2$! z!u3WaX#*`sAf-udMoyV&yP$Vuda35K+u)Y}mhF&DE?y=BXSGEZsi-|QB2`>p43N` zFoo+a45?938(vDFqXV$_`{vA-Yv0lQ5vFik;q@mlh3nHR49|nQm9!AZ6kYrbALbHG zXuhaYxIIudgDJdXLm~t|ZH;W`7U$l7J0)F2F-^GmF*ILK)==8@K!cI0EW98ExCNsgVGK^7Mo;Aw z3ddPyt+&&d6#8|lyA4w~*4k-NEmPwrE2I_JD|+BAY@@qxUe@eN4ZXdN8_$N0&DY8a zp=j;Aa=KZy3&!#YgfzQit+#{z1vAiR`w5|H?Z=IBX;?$y)_S|&lQ0AA6)=S>THDv? zJ0pEW^A>Kcw|O>e2AV2j3Rko?*Rb-vU!iboz3m1rV+Pt3#}uw;?Z$O)cco0N_4aUK zDx~tpn%dYfs4I)3PN=niT(8ukrQSwQ5ixsGE{Z`3wRU>G(n_uLwi^{;*bJ0u!<9s+ zwW)CV)KYIF$warBfkKN~U!+>wU;a#m^>(!lwTp22P)P$?R^5}hqZ4Xvmh6Mf8U1w0 jo)iq`z=3VT|6zXt-8b@**71&P00000NkvXXu0mjfpHmIu diff --git a/_images/math/03ebd74b62217730b500ee083515c436dad85fb6.png b/_images/math/1e3aff915942ffb165f2d1bf054b22ad11d847f2.png similarity index 100% rename from _images/math/03ebd74b62217730b500ee083515c436dad85fb6.png rename to _images/math/1e3aff915942ffb165f2d1bf054b22ad11d847f2.png diff --git a/_images/math/1f70a7515093c18d1d0836c332801e5931dbc500.png b/_images/math/1f70a7515093c18d1d0836c332801e5931dbc500.png deleted file mode 100644 index 73476d6e03400a57c42d31d5d7407475f9c57cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)571+v9W(SjCK7EcjSu+UvzclIPr=pZN6cDPN7@8^6| zg=9i^aki61f9+myxexOu%R3wzIH5jQlj|#~9DlYY z6x|CVd1G{p-VO5o9xCcym;gMbb=nv+d^)JH?j{w^h($>yrEB2RVjZLBZ!b6eiZoY% zr|FO1LX1`5IT9&Kap4r=cJz#oM=YoNZ!OyTo$cD92k;;I1f_dwHV;_V;s5{u07*qo IM6N<$f_!Nm<^TWy diff --git a/_images/math/22768d7bc95b2e83ea09efa9cfcab024c10fbb39.png b/_images/math/22768d7bc95b2e83ea09efa9cfcab024c10fbb39.png new file mode 100644 index 0000000000000000000000000000000000000000..2e397b67bff12554b80fafe1d511c5890a1ae907 GIT binary patch literal 713 zcmV;)0yh1LP)8O%*@P+ii!*j3?d>TP*6}nKtKcp1Qr$+YMKy+00071 zNkl- zlgoh}q&ghp;ufsnpoLH=;-bMngJ>X=uGK{y1b;6HA(89von~+9Z>l#}=;Bb?9u&LnIti>3R{PheN}rgK^XyX;nFF;AVwP!HbGX zxJIZyqU*|YE+w7EH$0;z8>%vIm^tdi*UT`opBbI7Oa0X4JU`mojVe~X!#nWg5D zao=+>DN*));cP!@HVa~nT;aZRF~fWOm6q#CsMhqV8X)Oq9+vQ;&Y5k+fP zgR)y4u_$Gi`kN^hN14hE7nXxF&2Qqo$cTOc zUG%KBBjug-bMn*?4tK9!A6}?Rd1rS{UztNS-YtR0oz{6)%DY0J vAknx}8hrvKW1O2Z+zs%K{gRa6uFtz)xqGW_`K)kv00000NkvXXu0mjfa+FvK literal 0 HcmV?d00001 diff --git a/_images/math/22894185a4626c5744e7def1ebf1a8cce3b4b75b.png b/_images/math/22894185a4626c5744e7def1ebf1a8cce3b4b75b.png deleted file mode 100644 index fadbd144ca3bf42181c5b8c0c22e6841887d1859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`q;P)bW|{YGvcQSA*o&_&ZDQ&P_enV)#(i*Y*94qVa;i zyOdkS(~k2lS>kQn=&$lMEH1-RDl^_HE8(0`hrP#-q}yA3D13DI`$=F2=DWF#AX0hb ztgM8y0^1$Nq!@+^Fc(9MnXqHr6Uxjw#hZSrFypLD4v8BFsGnIf-h^SG7I{KBny;W# ze>AiH_E&N-QC9!-dm^Sga8^Vha~}Px_rR`v*&AV5sJBQRVl>Xha%P;}V^KDTGYGWY zEKJn84c^~V9?u>wK2a$e^60Y+vJOBUy07*qoM6N<$f+jB<^-yl#d@8J4&(YjMZ*dMFoc*Nn~`Z4FJ}0kX1GnJ zVH`Wm8T$7ii|}1w2w-3ZB^WMJ4KoHNjt4v&fHC0$0>BXDd;k>A2RWFH)Kqo==(q(y z#~?r=D5*F+Aj6mZAQvQXD4ix9xN}^%h2f*nAIo$#|&$#~s8RpicrdbhC z($GK_V%ztwfCXen!C_MUnIiRofjOit#kB?zjz|6o8buW_vgDa|>G6PEhc9-EQnz(tPA;Fly zE{-ZE#!y&5l3@lco1v^u2Id7oibn|qKmo!rfx(IaImZz+3;{MV@Ekx*oC*wQkaFB1 zCEZI(+8{3o;ss#6_ZYZPix%Do42w~690@KHWhg8yK=vkM0K0fNa*iY3Fb+|MoqQ-F zjRD*f9w6s9A`MF_VBo&7$%s)Eijk4y z;K>X<5GRn4jY*7=Y(EDgZ=|LkITX-W{NtHRf^*=c(3!DV+e!(d5;= zSSmdQ1|Rb3UMzs+0fQWQbuYGrUckJ7yt)?)2u$D&Ag}Jl0v`SQ#z1D>iwX2duX}NW rsbrS~n1D@y?2-Tz^vVPz($VKtMp|=H?(NP4S>>ZZkm_?PtH!5_L66%~b4K~XEDq8@Ci&i*%T$QH?Z(Rawqyv%$% z^S*E18=!=p7=e@ab~fcGJ}Um>{}cEg;jC(cAZ&I5pA!;V=SzC4Bk}33(>u)e5hw6F z1p}6CDY=4?%`RsPf3$mAhxH0k!}+~n%A0uM5|=e*jGfenBCTJFsHem$W` z!;~Jtp9HslLuA)R(jV3*xm!T>+Td3TVlnqTPa^0Gk={4Wkx}MKz(u7sqAY@~vB77~ zY%At&Q-iE7s4|4%)>Z zF2NGcxP*45Uy(>+P#Npj{&4tq&R(n8T1$fi7{CK%yUQ9Y3*t)rM-6@2 zD5y0xa7o76Be#f67Q>(0WSr5*2l*h;X%e36B;;Yjq;XH)DW9*!xaN*&(}Q4xYw-lr z^owQW2!N8f1oDWZgMcu^F@Y8MY&9++rMNYGDg#$=9hW(6DwG!ec_`xepx?f{CKz(h z6{d(rdC`hL9Y$po?9=o4lJUWel{VtE$d3dhERn$?x#tQhhTDFr@h5m>v}odYq)?go zbkhGyEV+HZ$q_ucPLYEg^Sa^X=(v&ym{vx-Gp_1$j*#({xD|bVj)Tgcg72{m+D1c7 zR@c}5vi%wO3<8()n1}m*PfwQQhkZn_GQpdSOjQ#%0wPAOZ0jiv&&F1JD8j&1pxJbg za4@C@nyvhx+R!;);Q=V&E|cy9SEYq*bj|VTF13m2S%4i%Tmu@7e~Eiy7pvBv zCPWgd!s>t@Fx#r|1IcF#ES~9B8 zw7E(uS8-f`?|lMtp*Z<;*`6%3;QUcugKJXH%6v>_tIAf~$8s{&%jvntv{2dbFI-6l zf`eL_jhMEhZ1{5%;HpLE9)}$_z=oWIM@1gq8VB*+M2%tmB}=NmdzNMnIfJk2-_l;FjIw7^Sw)9m3}`?ns2xj(ZN_Q?gb#_Bw=5cTqX@J?qr| omvNIcKk9Oh-7v28@SiOE4J?w*5XwAmF#rGn07*qoM6N<$f?Rv<{r~^~ literal 0 HcmV?d00001 diff --git a/_images/math/26c878270009e6b580f34b84b327b3f4cd2b31d6.png b/_images/math/26c878270009e6b580f34b84b327b3f4cd2b31d6.png deleted file mode 100644 index eeb341372d3ac90c53483e622b0649596262791e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2007 zcmV;|2PpW7P)_x5&YZ+15|GWA%`R1Ata?+6dmRy{RMXbw%|AiU5@FmyA6 zEQmviR!TZMiH;+^xDrCKH5Ez;_QI5eV55+vj9IP}BkhRHf~elin?LWpd9ypS>pZxd zd2hdazwh_n_rC9Y-yVR+HkO&HKcjMO*=QCTYir?lfjpOKtxtuoZm9ZmgUWocE~B+H zH8!s?y3tp>NO=O0Zq&=yP~~6tgEu(BO^t2vM%9ayN07$&w&d8o$n&KCp?b*ye^}o- zMua&p*8&NK?>mlFF7c!}cML6to?H!(K=?+FvEx^{(#_P4F7U^ANHDpmOkD~b#=t_R$~8B5iONS#|7p=g=PDaRYQj^5nJ~0+sw=& zW4|x*;Fod<(GDxJlwH?P8srkqh}guqT~2;){85Q?0=6j$#(E`uT&8poE4N+*50RU}s~1;6kpSl!kz22RgQF>T%c%+ z5}vi%=s5YZp`z%n3Quiq+Q%{(w1FL6dJu{X4(1$uW$%0q5VXI`hL^o6%tLNh=s1X@ zepe^Czipi(x(vWhcunJbD*Aq+ghCjKVFjb(;44k?p$f+=t!ZPqq{G}zz7^RwNF^sK zy}6_M`%XB^$)96#b3c|rZgrQI(d9(#D5X>s9rqX=fGq{o_F8iy5;9EFGgv(=rc~7bfLCI$`GzvJnx#sJ88)ZA zvtuzc{g%SM@9@fEzCJ*3ZfzXh(54QR!*>)C3YO_nl4(g>_7+)pYN$VAbewz}v}bc# z?nT|&U*Gnu=hojCf35KDg9z|~Au|TyvK|#Gim35L{d^I39QN$%{PNtaF|CAjP;blm z&6>HjGzB})iVBjGZ!!&YMJ!W+-T@Sk#F2LRLW@TU_4>d<+^HFls;c5tTePPA0fdqp zUqA6k2hnot(?S~OD=j5>kYmrsq)P&pi3~0&qBJXCZCzdpCMcK{l&HJ`zl$8rQ1SmjV0sKxDVV# zt2VI}>H!I)K3OS}g;<^{C|%hP%vCC0^aCVKgL*&$;hVC3=T%&1hqHNjm{7$m3Xs(u z73mPv0}=>dy8tSc zah+X^rr`*sN-WEi=#Xd<*2O&|jVX121j848*VRBUS|L`iv&Z{UvIb3s!sS9ixAr!i z3E&84io(Gr&q(-N10Ns(@_khM_2pz-@zU$;sa&{BE`20R8l@=;`Iu*<$b?Uj0Qn~L zgyb^*9!0OShg9P`QbUy!5Y`^1Cox1L10nBFqu>)HIKGh)qbyi9>+B)5r%0%h+UL32~HHeNujzJRtA6LoN0oDfo pK-^p1|4&HYVFD4oZGTy%{SO8U3$pKR4 zNklp;1qx|Sp^uF1VD_%3=Clm^FSOZvCd&c_9*``zI77fSh6=DRHt;z> znfwk6TtFvBFbi-N++iq$$QA}bnHvKbxE_=;%+XX)Ww^#L10=-k>022rg*2xTGzR%Zv0`wp-ifHJWGV`nr00AnUIv`5118M4cE|8|44MH)yDBE3feonM{ z-H8UQ%?xIQ)z?6%3lR*=4GiZ9tM`S{YZ&+rFeDRJ{|HL|W#GTSBuR91aSAX@WMJMv zFt9imK*MJP(6d|)1S5kv02&Pj42K!m4=W&Kn2b%ZsOOu2%Oq6>wgOC1Zk#p;FmPZ| zuZPoP1q@cC}p0>d8$UIR#K!%R`4(A?6_z}LXQ1ynYbfm4=&9cLbsf##Oa3_Jo1{1ZTiG7B*9 zD&SJT8{_~;u4!PH&kzD~5x&y*AUyaL0~qX>b%8$S$CrTv3t+h=1&F{-n^=HHy`lj$ zx3B zy}E$gfTQRF1G_lhsznA88XpA(A8;rzA7)@#A$Ag<2EhW->Xt?ltH#wNs<&aF761T- Wc5Sx>ROwLw0000!0008K zNkl1gpa;g{XyIBHSHvRVoEV;>_-5@@A9lWglcSZ|3{vd-G=A>;eba ztxuTTMuYX`@5V`cipN=zha_M7(n=Ki4PV6d>MGG-dU$5@$=n6Y9a z(b(Xxpm|2bKLJ?SAqSZSyUz4czN z6-JVCWHj?BnBJ}?GNzDelAtq1$kzh1+-}fd{)Y-9ox4WM=V7Qei$-Vdb@| zm^oTxdgCPawX$LI`iexts`%d0PKQp&{M`sxtjI>%eG|%H)|itcG3KZW+ozq{v&T|> zU;O#i*1EX{G$$I#DZr|4NfRl9h@$@F`IpL%mz#@9QBeCjk>vaTM}* vl24(+00000NkvXXu0mjfxr~Fg literal 0 HcmV?d00001 diff --git a/_images/math/2d78690d5eac1413b0074b059b5c50d02cabfefa.png b/_images/math/2d78690d5eac1413b0074b059b5c50d02cabfefa.png deleted file mode 100644 index 0d0f7606c6d072fca9a69f11e1f1557b6e56b739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmVr1ZFotxRtcix+s&pd$t#I(MGPem&mAfM{o0{m|lF}yWr;4zp9p6ofS_bp+YdH?=nXcY~~vrs|6N!?>4^Q zf`+By`J58*v=S-=bNcr8y-A*D!R?+|DFr1d+V~~yC>qvsPzvf@_wbE`3US|e`a*(w zX}_=@dxDa5xDgL$I?%9k&u@Ty`dTuE9=lqBYd zGGthg#3FTLADkp(ja$iz|7)aun@-*pHNCeHJ0=>IUV#`sdbLOwOv1I5JcLbu-jMe7 zY#;$`{krJ2UEf$} zSSb=`sT>&J4No`WS5UM{)CjkHjo9}P0wUfmi6;BQaw$%d@~3trg;>Cg7LZ5abNY{3 z!pilcKpF?1DiAVNzq#@BHJ}GPhwX0pDKa3%Nm9n#H|Webjn*T1&*X>oBk0fA!wN&9 z*l8h2XtJ03yW7(jB4uxrFXbI;Qk6}U_}K~!bCkOys`$uNHRJage6g&zzlbABX!7r%5;mJsBYZ2M;h z`#qXO7bi&>E3uAoYyt_zW=raAkJ~Nz>D9$Q&y=onzHeP!t$-l<~5aL=VZEzleE;wp*Kxi0&$znXhZZA zo^XfDY#zI+t%ml5rV>H&3VP6ZUhCNqLD6G3}r{^lCt zE)i1L3wXp?E&ozd-d!!Nt&W3UAIjE_E?#seD4YASfT%kp?aZ_c!-yoJ68Hnfre0)I zXVsRF@*7KK)@bK@G57S+Xww`V1a{ILKygt`<6D!6A|E)_^g4qvn$Z$cwy~LH_s)`) z-l>(z&q+b3$WfL-N}#jVOE`Eg5U@SHRgmSHQ*|>c*?;C2yr-$8o1D zeQ=JWPI1Yh%I!i#fOdSX&|SpdHErxd^+tThD(-YC1(~GX5R>g4!z^`5B%zajhm882 z36v*}NJJ$HZAeO$nAwgTPp7Y=8AgVCT}dGI5_0YXXu~U0>g4EnCU?<{jFAsvO7qd3 zZRf0DGEu|OVP@t7%`kEqNmo)`vX+o@SBF)TQYTNxjwGF|C8Y}ju|_6JuYwiHA*YcH zBbSkMC9RXZ;Q}P!zL-s&d{)wtM9-dRAs9*U3z36+(;)l$fzPB){; zNZJo1RXZjqNov_n-r(6j3B6!v7%}&b*sNnqI(q1R&vMXuiF1<`bls-Z>1H$=k`ikU zEx<3S1|^AHT_9D&tgBxHggi9Eh`Dz>lvzn{q|*aJ&J5%6&k(KH)ahn4nR6+fz6KTN zt-vI$z;UniBqbTfjoMc7pf(-NRI@5lr<>8_=yqLTitOCr-hN4jv8ZqHTZyYOB6T)0 znrwg9vsn717hCp7F^}%1!TXl0Fu0Ae$g))7tD;xzYps Y2bUuJaa-$v&Hw-a07*qoM6N<$f`psOi2wiq diff --git a/_images/math/306cd86fc6398b816bd542a0f228aa399b7f27fe.png b/_images/math/306cd86fc6398b816bd542a0f228aa399b7f27fe.png deleted file mode 100644 index b17207a9317df3995edc42d9bab24b942a15f029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2758 zcmV;%3OV(OP)Pz($Vwzjqw78XE2Ky-9;1Ox<%ii)0|o-i;lVq#(W_TgTcu?XvT z29!VB8e=7kpjgI~dR;1+QiPD3>M`5;<37KQoXl9rQXhUdHMq7l#>&vy{Jd_Tb5?}G zN9%D@55%nUXYl_|udGN|)k)oYadXRz)nUR+`!yF5oYglXWSpsQ%%@{kc|lXGIA{g^ zw0Bk~iB6ke8GinQP5o|g?u>B5*W5?tSkCCQ#r29&Hyg4D zyP?Jc&5j17|6Y9AjX%$#H!KE4fkZ_mZL?!FRyEfQD-Oi1kiB#WboREG4GBgUY}A|} z7A5^JqVc=%=gL44dI2HF8P>SG5~;UCW~9m^g=SdMi2J-~mT)h}d8F1pzK=y}R*Bh2 zylyyqnTvy^3vF+)0X#7z{QPa^KBTRloh3RmxYfJrc)Y9IAW4#x%(pzQLuJa3gya;EZT6%;fhS^g znO7jyXVc)h|7m+(e$&PEo_Fu=yfJUxJEp_kO9I-NVJ< z{KobR4Sp~yhRBoO%0p)X{t&`qV&H@EA>L6yVDu3YH`(6$0I10_Q9_x&9cEs`f1Hmp z)@d-wj93-L&IFOwTL50y+`@!g6LKVxJJK$#4ngGmcj|vU` zwGl#O#zgdxsAPMCETCdQ9aTx-A{_+;COj$_Xx=8l8m&|7bz_w;5No{j=hAHl=v=Hs{*N@y%h z%k~Hj{=`#Af$oEj3g$EIgFzO}?)JbejOYi7dzZ^KB<(;1>R9WVED+_tOU0dU$Vk2269y|8ILz+t$|(>?<~wIxvg-6?W-Ed-?jod+8f;F{EALN4EtjE3AI7(0$wzsstM} z9a4k!ZnhEjHBZbZdq5_=#&JZ#my{;0sM7dCe^SnEQX?}K_h~HziB9%4Bq~xC&7{K- z7zEbLNet+qhk|*v;jKiln}x@4$0^^NwQJTdkgJKw*|AV#wYfsbZLRiIf=-{ldi&g+ zP9UBtRhSWzpuc*`DbctMekAHIvmchTXlf9Sz(Uq+P#82=qUmO(KVgyRtBM(Krv=;T zA}7nT9g%wK8Lp$_IPA9e$F#DKAjnxAb%s>oK;13s;=Rp}Lx$umaI0B$V18)vFW?=k ziA_AKHfTfjvtUex6o#a>T)iFPE77pqT13l60jfp#asx%2OQuA*8CE@*-x$sGrCA&{ zVCsnLp>%;}d8;-O=~}OlGtUG}n@OP90Pv)<2m|pMYk8>|*2HO~pOyapj)^wg!PH&O zz=NaC1ouXZ5epNzvy8ktjt|dXQeC2P+E8qUHF2t$tl+g?SNWEq*AttRi)gwIwoHo} zkh8#Z?kS^N54*`MJ2+yT#hRvA6Q_<*TKY@D*(7hdKw{WmX-uTB&%yI`Nl4E!CCHoz zq#PS!RC+c4elLub8f%#+cJ}dzIIrD~#3aH`f7mSqrW?6i5^lOqVwioy^2hYoV^o?~ zj+NPAtTfHTTS9s-H&)pR^f%*1%b%$@<(lzEBkVK`_dYHruW*LW-{7hgL&!?z8h$a$9>NEWC)WDWn{U7~^|pP--k>9rs)c z$4m3s*FPa6OsCCK=79c<>6h?lnfvV%gWT3GgCP@+&ws5V6n|sPN&7*cHEUKW#8}80 zCnd8M(QPrwN!KmXWaImr^z@)(_|svmpW(k&(NJ7bcWGVEiSIa1Z(S-i7Gb5?7479s zkJV#76yrd{b`aIpoC;xSb8?rzvGhSXFI9$*$U`UPtoN*s%rjB?57(~kv=qzHiU0rr M07*qoM6N<$g3Mw^G5`Po diff --git a/_images/math/334c44d5859497107d7935ccb7b3ebf945e77036.png b/_images/math/334c44d5859497107d7935ccb7b3ebf945e77036.png new file mode 100644 index 0000000000000000000000000000000000000000..781bd64bd4e37bea507906b0646670b260808280 GIT binary patch literal 710 zcmV;%0y+JOP)&Z8d7c)9`GTbEJ zJho{S49T;RMOZH|C@?UAQV|ziOo3?g%7G~+fO`TkV$Og7Ff{oBfWn_a&gO?HVs<4u z^=$w;aRJat2=Eb6uexP=g6m2nzm41u!rxpl3NQ zu>bDE(iAW_w9%3ox)2l0h@Y<+%KOnXNex3o1_Q$bD31{sn9QgOFoam)#Z)%Gpx^}b zR2lx^Fay&8C@-;riGc}K0frFVyzu?lLzbO^8RqI)4BY6l7(%RsiqUpXURaRao&6eJ z7DI@jc?CSvVUa1ukPc>SaRCBPBq22rdjWCgA^BW_K?AK;fC%xMgV-OyHu+uw+r%h{ z7l1W$19KxkYKDUd@vxHMU!=qcjD2oY|3ZZRv;&!u3Z$C%5vbG>o6uxn0$^{SK#F-^ z8W=b)dd~EcK+W|Kq0^w4;VvM>JUx6R=?ZYpgQO~U1qMn1`vDHN1_nOr)n%#mJO&Ip zRIMHh7>udgSebC2n&z=HoWxbL6x)Yxpr%z7q70j<*)D2&z%T{98m9y>I{?!=YBf#~ z;0a(5MXSas0*npp3(%@@ih$w=UIntNaV#Lj)SdyQ8mADrVpQXlfkznCI7NV80HYeG s2;@pPpjYG6>5d?(aq1Lk@M;_i0BBB)t;|6eZU6uP07*qoM6N<$g4ItRi2wiq literal 0 HcmV?d00001 diff --git a/_images/math/3904f5b4abe71eac5e4bb91f42d77f02fc95df30.png b/_images/math/3904f5b4abe71eac5e4bb91f42d77f02fc95df30.png deleted file mode 100644 index 45c43390cc18c3a5d3dc584367d24515313aae6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmVjV^bb@si|Gax9mZuqMZ+2uFvUvC$@DodX83bY;GIC8 zVQkYX7?NkB2*olmF)*lsSPLM*O0;3+z{C;24RVRj86Y?eWIP38esho{#J45^#HO+h zK*ud$y?`XdFApSmSmAuugmNMcV+IA;2Tlj%#3BF``O^+$MS>%T0| zGq8S`3`{ZX?IgwnlMKjqHx#j-p%DzHK~CZZI-6sb^vo$TsG2$#?wsj(0E=mVqyiY2 z6)@7(3UIOk3G)JjKpRc=3eXiBkOlN%?s&~m-jALQ*bi{9H8Ajjn2bQ@F{4R~12Kx0 zFc>47Ur-Pua8m1e3>b7kti%Q;^pwUX!JxpPfX%S*{WyZNfWa6<&0^rjh_wX_8&E~U z2$pjb?t|#NvtMIm!JGR?G>o0$Bq$AXh%ux?a;ysofWxCPfek3d1S+Drh%*dkrUZiq zddXhcz|_FT@EK$mKg625U~3o!@dBVqU{2#lD_Qme@ppy;0mOR~R(Jw!m-s4`v~-+C8`j=7%=5c-~`2WMI|YQabEPC=_P?GHdkckl!XmEpa^Z)PLj)T z`@aE1-iL6CC^W2wp&^5T;Q@7OBDU}khZ&d-P_1TTXJDpYMcK~DOTE@W0nc2X3`lh^WvxDWhD!`& z)xB5%t8?%NMBPgvUGWqh71#weWsAUzJXqNkQG*WB6+;ZPJU}3Z6eYnQBqfk6 z(L{$ulYKDwlZY=Q)@O&dl~s*}0S5 zIh$?onfAN$&AHz>_uK-G{fjUb4#jQqqtT)GO%bC*@!JdAqeF38d*zK$Z`PL)A z-}L?Y`uRYHn98NTB-sFDN+w3#VF|V@@XSh1SkW}8uw!ga?@U}nEos}9;>@UZD)O$_`UR(*fv1IqV?kjttghqRut)O_vy+zYMT^jWJq_s%>|`Ruwt7hc76c) zq`6hN<@53vFF%AQ=<D*FlIlF3%5(wgJLo>X zX%^WX^X+`C``8}aK_#O)RV?!B6s|0HyH9`>QOt;joHjoU>Si$-c49u%5qKgRcJW*o z)RKr~mu=zJI&Rc;XhTsfZmfousPm#0B8yT4>~^-*hQ^zL@&Gx2Oh&-&83+xTw|a?9 z(qiq2fZZrLMajIGK@M~)?TS6OHb7#h@y0IJCb65Eb8c5j->n)dpYF1Sjlj?3Z?5h4 zZKMZi34A%59X?84d=9y@zEjXG^zwR6REhMl>Veu^llvcm9Sn5U&EX9I0000t?WSFr=t>0* zu3e<4D>pGzsEySiC={)QyI@5y8!<(A~{ zK_14OS71>(3iOa35m#&)u2VC?kmwiLws)p2n82HYk+$>I);`)%SVG4|H;`iz>7iK% zc;}EYeD5Q4)ZIXS#-|XfA)5N}1+v3YQA5w%|;u@Xxz*;RUx8h zF(mtMHB?tD5J<-0oa53o*U2=yO(PCp(=w#aIe&zZo@}EHxUV5}rbz_a)hcuQ6@k`9 z0`ilhc4HYKm>N-eEtDk!?XG+tC<3ibZ~~sjbXST(xYSU2Em9%^?GAEL7HD1OK71e7 zk6U>65H@Ab_$hFp9v_&=F>v=8ELj+oi7WaHY!)y8toRAu8lqUkMIA^Sa zObY=f4ZPM%1e%16doB_V^phXFv?0xasStryoO4mcZD~wy$-ryt+HBak=M6$pF?q3! z^cr1O3V}H1Dtfos;yH{p{aBL?8}}Rw)lDG7aitK5bAITE(uV|9pl#gqurF%@=}jmC zEjj0av;U0whAPlD?wOC2O(28&6oHnUGw00Wb!Ak6wsy~6;7TTta90*+;+$DWh~O!! zZE5YE$7-{fK4119UF{##Kn}=-K;@jdlnQC>o_S!CW~=-;A$Ki}b7p&0fwpwdUeu5Y zGsxl#@{!ItcW?KEwR^sevejb-$&iUqI_DXceu;Z-jSGDu9N*K_Ku(`tlV%zskCrH% t^Ag=-B|T3>Ts^(n?Bw}NtOEZ({sEX5_VYlWYHt7l002ovPDHLkV1g@v@tyzx literal 0 HcmV?d00001 diff --git a/_images/math/3f7c5f44dbc332a2ff744cbe9a0b6991af95239f.png b/_images/math/3f7c5f44dbc332a2ff744cbe9a0b6991af95239f.png deleted file mode 100644 index 1380e2fb062526d432a6b58a73a7701686119a03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmVu| z=Alp(1gm(c1P`LO)JG308V_x)2ytegnYc+S?D{1n|GzV{-~XC_ zc7ZjqU6R`1D*XLJqwX@G2~{bVDLNp;4B00gR3S;yHs=_`HU!K-c_p3geb?3!^P@ut z#0MGwV~9udOR;rPkSO^Sgqzc{*}8dGAmFb#U|dauF^ z{USGyZ%W+UjMp{`y(aIEjm2Y^mkTFyDbx-xh{RVu5@#pUx(r2u=Lp#)B+BUl3Q3uw zv5_}=77~d>?lYmNmpwGv-Wd7KS@Q(ynTMpRc ze3sUlw_#k<=OXBbpYEr#`Q`R++T7!V*P&57x^;;DRhQo=Gj)twsm65#^LBHCuT&>u zxCeZo2G!v{z0yi;Jw{>M{uXMOS|srhMuRDC+}7nreac&nLa4@9a#2Cz6429KCQx|7XiM}v zpb%F|q5}SmRN+^xpr8@Nq@MFJe(q#l^P9=_zeH6}=r?}0k zdx0G!)w?`e%n9Ooj#I{y>T@(S7YUW0J z)I)3djX|~Kcaa26X4gew9Z7!&RcntLE}EHAO$jzTb9`&;^>-=zYZ=OLpPSQe4?dPW;1~oO7OGF_J%bWsx?<)2ghvwEZTs%v+Ni==*2e Z{{XV7&;cbyAp-ya002ovPDHLkV1g>f%(egk diff --git a/_images/math/40ad44e08be759dbfa306ff657b1646ed1348e77.png b/_images/math/40ad44e08be759dbfa306ff657b1646ed1348e77.png new file mode 100644 index 0000000000000000000000000000000000000000..efca0b8fcbee444f9b64f26838ba2e9e2f0af937 GIT binary patch literal 682 zcmV;b0#*HqP)!0006t zNkl==F#(Ga0;UQJF~ERe>Q-cgkWdT4r~@MwQ4tG~ zM_@9lU?GD?CKNFtrVI!efM#eb)F~5{ijcWGlgpixxbY|D^6tIw?mNGGcLyAT+n+H# z#*@j42WalZQ96qnUB!3240$l*Dqu7w%4i-)M-LR=#WLg!cX1wAE=WQXh^u|sWBMh? z!1sk8ml`&eWPz{1 zm4@~BHIpIn+wi>{T(#fL_PFKP^?ElaqqkO+M2r5AEbyqgALCVh0d2Z?tf|3}(Ajp* zQtN~8Wiob$wVSzgZK~vJDaBuIF2cxaug#h*p4%4;{Hs}A2D&Ro8fp44O}qbPYN5)e zeVHtue+QPsty8R7&)234(x+R>w?h6JjX8F6?A;Oa0M!6SCc{cVI|}vG9gB(Cx06vB z<{&;oWywA^6!I`>b6r$A*#U~NraLvc5J_?xd!}bQtVVM(w4m=VZ}(&w+TY2M#d3XA zqBp!wTx_?VJy8z8n+a07*qoM6N<$f~{UM@Bjb+ literal 0 HcmV?d00001 diff --git a/_images/math/40c96eb2618141ba570e310f166accbf8998c72b.png b/_images/math/40c96eb2618141ba570e310f166accbf8998c72b.png deleted file mode 100644 index 8c061de6dd58ad196bac2d4ade3243b54f710736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^PC(4V!VDx;G|G+xDT4r?5ZC|z{{xv_U0o$5C1=i@ zad2=52nY}p6Wg|J8w(2y4-e0?XU~$7lIG2uXJBBUq@S*BL5$$z2Sj;m|L9LyExtVzxmmWLYwK_{=+~Z+kYx?bQVgZApa0<6@TmMZ-KH-3av*#Q* su$%GFKCQPz($VKtMp|=H?YAcXjSfY=YfiWUMLiDnW+h>aH^qQk)8h^7c4 z^eh6%yae&25d*_vH0vNj`X3k=I3mCTtWpdN$M_Z?8w3?f0Wnz`z($KTFs!+YY8ynz z6ztIl4EO*?0xMSl13LqLu(prw1H&{1f}nxnKS4FD4GQN7D&k;BYG4=z)CMdIh!9$M zfq}5l#SaVwg?O1A7zhf@V@qHlDAd4Wz(7cdgMq&QM0L`h8m%^m44jgv)8dkX)Q@@{-BFXDt-W+twYf$#exWebD@3!XQxgog@U8tlFc<} z6+eKhPzP}nhq_9jyV#=_lb&+#dx*cGaN&N%vC696$&x4l^a+x zy`D*~)!+CWOs}6BN5~9P;TB@O!Vs{ARColZjunb`+W@sNc{p|TJ-0nGU(oxK3gz^I!oDtoUBk=;B2 z$MY^p?0xqV_7YLpOVb9ZL?re^ip_pEWzWnmFK=Q+iM@k1Rv5Flag)7WKDM8;w=&8G zr9DtDrI4LoM3h3Uni&D~QXcS6ang?U3Ec5 zn^}A6f{b?gK2n=opgkVTTI1_dA2GK;o4*cSl2--VO17kEzlkp zto?z8x$XZpw^HDLG&jNC)8@wQEt#8a@6_C+lSAIzw39>5+`rfx4}Nk`+8d8#Z(@3h cW_W%F@07*qoM6N<$f@u!+Q2+n{ diff --git a/_images/math/4f3913b278c1449f1820c28dffd2c40941bb4b84.png b/_images/math/4f3913b278c1449f1820c28dffd2c40941bb4b84.png new file mode 100644 index 0000000000000000000000000000000000000000..35ff70c0b89140d32da94d552b5f60ba2239ebfc GIT binary patch literal 2038 zcmV-h928w=;f3wi>gRiWD)rODLN*>S|e1Zz@!Ta7!!0sKF#C zA(kXsA!%$STC8=#5=60)6iWYSHcUwfCW1&xc!OamX%dwEAzSypulw=t%)B?_&V}81 z_r5dtoZmh7-gEBn4uHopo}OWR%2^M>Pe6OcixN5GrKdFQOHJ^t0_bdBTfS*pr(f&@SX;&gBu2bQd!Y37<}P zD}jYClwEB%I|KPc*Nc}#(ut$Y01W!m-)ch{6ji@2b?az!?Xv6 z$n(XpKgi=kBi&wx;Z8tyE7=EOEwd8T>=9-%C+;NA8K01aNYrUw$L7{TR%f~_sX|50 z6+w|xaF~Aa7n#>uL&(x9ZfUrc7_(gvlDe9NslKi4Lk^Z0+YpiC zrj_~J04PJ8KZgYBLn4PJxczHjE+_D1`;Y@{?t1~?Zj1?1xMy~wjZ>l#8stTIk?r{s zXH!6wV1EHYLF)mwnu@SrRbOrZSv6&)CXkP5Oxv*vV9)*nGjY#(W=$ps>p=b*mT*T1 zZY^_4On+`YwMt;rPi$4=7W|V+1IS_BS)F(_X>}m?aN9>gLPMoqhaG6NM%cg^ChIKm z%t5L{nNF@&Y@WU0KW-xT2<(fe)3*znU*YOk3B1t#%jbOlFAaGPD|?S^f??tt^}Ni* zMrnGIs?B5HrRq+Yzscmv?L6)!0M{!E*!(-RoxJ)j+Mi>B)LCvRT8jb>_#j&23X}@nW|7j-*0^$@(wwlqw{a6Dp64@&ZQz@c592+Yb{Y= zXC4Q63fEX8+ePmPw;@igV`k_v!kL5y3MX8Ur+9~4%hLI`l8q5h4m_l24CF4dp9K5X z8Y8k|--@@5QJ>vcvMMgfJPf6QIU>t(w|UGc^)5CH35|^8T#%=FhaAY*%RjXE_#$oL z2RcZ-V`et6xR3U7@UBNp8C=;8?_kJ^wjp-}g*J#}qeE7OhphUr24=XMoNgnzgqsEE zZ!$eZkc)QyeM0^;UNPaE7UkHlqRicv2^QdWK#5rhPU2S+C~8KtRt2^Uqq56^Tz`EE z%0a=Lwz`Fn;j&&2vL7Y!K|BA>Ddw&atEyuH$Wj${Ix=V_bYsXC7cqe{nz$w)CJ5v} zx>+HRndX$!?QOkF`NUv&_`>jT(Wep%GS0uPWgOVls|z3_l%F{=c?}&0uHdI1jU5!7 zyU*Db7vwf4w%x7xY;Swn_rx~x?_}0RO;C^#%90~94(K?5w=Z=%pnzFI129jqD*VLu zwU$NOm({I`4%7NAS<4wG|E_7qURu*Z6+lKP3uQ+JHWYD?Iw_?R8V*uN)$@{BX&$5+ z6@leWx4(i^sR!AQ65|Ad^KYfJz)WS56?i~2vGuFPenV!xj^f0!GN4rX%$n7Y8pq$S z2G-waR@{*3$to`+>$Vw-kvB!1ZZEsmG6k7YBDfcz<8sc*zZ08J?=_M-bws$9mAxz9 z`ooYphsQdv6PhyF_$2iYoi|n*pU=Cg%DY}%w#NGOp=7+=8WHp$`uoT^mNtaEn`&5B zhu4|A!wg8&79|(_oXmYFS*EoH`FR{8fId9dg-oC8c*@>d{7cQm7lPDm3|IU>_MxPw zHM(!@tSq4j^d=MmdGDg^C3BM9gs73*N2@gP>!)L{Emgat74SU_X50lb- zQ07U=S(s$V_7573h*%?@<0*Ud%txIJrnI2UixT-wFFm#MgGP4d`H(GlLW!U9KWr%_ U;6rp2aR2}S07*qoM6N<$f?}i6a{vGU literal 0 HcmV?d00001 diff --git a/_images/math/50b6e2c62e6e64b4bb36cd69b67aa136c2544429.png b/_images/math/50b6e2c62e6e64b4bb36cd69b67aa136c2544429.png new file mode 100644 index 0000000000000000000000000000000000000000..d371a4a39fb28dbc534f0f3b33dec4dec4c8a583 GIT binary patch literal 1289 zcmV+k1@`)hP)?z_~sq@;7jf1B@Hx{ zi-=N$a!IA7eKDaAwv@sJ3boiug5n<(JpW+P`f!32pV~W0AHLJ3E`8WoN;RH1|?1~n@DQ5i~jvaV6#-^x(JJC+oR z#u^3M{i;yHp}BgkLH{?_rqJwFg%S=^rACvdl4GE;=5!>TW~pzz|h9(z@&T;atYwz*U&4(;4dn#~NuZD&!o0Z+dErm_$ zBlJhYQ^-ST;`Mk-AwAv7bk4f=%!|m_LzH&1X{7%%Z zHpsn@=+Ps>4SwGBIGjEHc+0Q3=ORqq_~GieeIhq{1pU$0xKh5_|$*$7a4)7Yp`q(1ZAJ$kTZkkM@Xt8u@cd>{m>&jj2KK&+M2B zYMbUldd)DN6q~Yhbnh1x6k1OEX%O5ttqLVPRuAd=M!hDYb)4}(GJI0r9YQ{6#C(X7 zFdh+~Qp#KhYX(bTctYMj#yeG^ghOda--BLagDRA87^~`2Xk=BPgu^b456kJADwJ@z zuTf!SK^00k^lMbuEUH2Yx4She{8SlActYntZJsJa3D1mbRM@QyB|K8prtfy5rU)fG zJvymx2Jd{)P=pemp4h4JjxwPNB^<^pudCw~sT)uDQV?ot00000NkvXXu0mjfS*>Qc literal 0 HcmV?d00001 diff --git a/_images/math/5280ee7cf09d9c08a683a7db1903bec33dd1e316.png b/_images/math/5280ee7cf09d9c08a683a7db1903bec33dd1e316.png new file mode 100644 index 0000000000000000000000000000000000000000..0ade5ab1d7f17de8e258bed80b6884d810567618 GIT binary patch literal 761 zcmV!0007n zNklB(3Kg*jZA8SMDh51=;vrfP zFV-M>u&2$zQ+vp%cq-MSAVgAB5Ooga&im%g`)1yI`v&-j zoLj;Fi#X*OeI#AuvJ}szTN*ZEw03#&$bbpuBRy!Q%WBv zV&X6Z_=Qdwu_{L6tP2~Tbgc0F!^*hwQH|lr&_D0X;aU$d343}O!5#tcrH`x|v(lo; z?`n9UdqSg30Gp!6-2&VW*vF6`v(l-<3j8q7T#WTs;Ith{O%eDdedKtPZ)SdKksiG; zro1I| zVUgQQ1URa|1%AkCbe^!tD9JiZxm_Mwd0nm~9-4HDoDH^q45epK?(u}=43&Wz?cv9@ zXg#|S9V!A&hjyMM0r{GxeG9B#7b1&8`kK)cp(s}0CZ=<5~G%Cl@kaZnxT$_O#wzQ@! ze4f33SNm!XufD5T9j6Ja7UiKdq}s3bZcF+Uz5yru!?v}C^JPU@H?;V=sE51Eta|O@ z$7IBI5*O(g+rfa3rfx+|=WHKZ2&kwRHHh^LH67u`@}v#;l~KMI`ov3m1y8>`NEhuE r-wSaPch3#DnnqA=>&S+_FOKCe4vD5~%|iIM00000NkvXXu0mjfpKWE4 literal 0 HcmV?d00001 diff --git a/_images/math/54c637cab61f43e08325bd8c5a41e60bca94fa9a.png b/_images/math/54c637cab61f43e08325bd8c5a41e60bca94fa9a.png deleted file mode 100644 index 02dbc4417a5addb5ed132ad485f9e208853e9ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_2!VDz$u3i`jqznRlLR|m<{|{tt+qSK%t4m2q z>DjYqEG#T%&YUSJDG?JBn>TM>Qc_YtK!AaP0S^z4gM$NyrQcMb25(On#}JO|$q7b@ z9NGy92^|T+4`LXWh>I8%h#RmP7|cn1knn)zlnvXZ90$%oHq~|WqaDAnwcT~tSIf@a nEX>TJ;-GPjlULvvKPyAB53k!Y7n=h>V;MYM{an^LB{Ts5*?u{R diff --git a/_images/math/55661164baa521f78c15a180cb3bc25c2ccea4ad.png b/_images/math/55661164baa521f78c15a180cb3bc25c2ccea4ad.png new file mode 100644 index 0000000000000000000000000000000000000000..06e24fb93f9e07a8095134d887def82929dd485e GIT binary patch literal 941 zcmV;e15*5nP)!0009x zNkl zQM_1#=)s;6#8Z0+2*p#Wo(y)SRx z`~YjTlXIxQY5kf12J?UsGjN(hqtRK(*BXd6Y4D)r3g)f>cBW9kXiH$2NCw)BG9vl9 z0@2%mbJ#1ng1KveSM$dM_J(A56v(G4qDRdJg5xH1e3o3j>j5M6?BiUQ9dIN>RE+&6 z^Sry{d4d`-z2rS3?|Ie)d+k2(fd`D6Az@TD_`~k*adQ{gdVnT7kxJG{M;&0VZ3M2D zDPUthB#e=RTF#52#zW9wfn&NTDva9$d*ze{{_=nc`uT51e@hGAai-JeE8_N!!=k7n zu$aSL5$)Ou#BV$nMG<$?6HSu##~k#5y_y<9^d1k$CTjT!Yg!x~)So8GyqDISn`dQF z5px>L(jIo~1{9jN_(knoC`qTxSik85dlmev^9p#tNtPH4$)lFW60)$H^`5&vTa-Qn zO;2M=Ogh;{56frLJpfikP4X$e!g^#gJK*RFHU7gJ%IJnSk?&38AvL~Od{-)_D~ip$ z#Ah;5Y|uzkQ4sn8Y&(W_FHZN$&uc5o4)-ENFbvCPPF5db$61}*y`A)N(SH<}&?>CT zsf46VMVKRLsnS*_dzcD00bizw+wg6%FRRRn>e_z??1#JVk;e*T7Xc+jdAv8{!Vpio39+W>~GzPm)EAlZZlA z7FEa|L4ogbSrp^ezF#;bf`@zO7l>H^yE|qBa9QUw+4|0p-MJ;5P6rm>XVr>PglhRk zvC>gWZ{%y6*#r0n9QBK0+=~9nk}l%O7o1rDyQ{a!!s&KfUoPNbk<)VGr7~uJZKsbu zAGQx?*`IK!#LFSvoH_J%13m>^PVA03QRPjQ*?BM}xyX*OYeO^Z6g(@SpFX zr%P4KL^7$2{JvqfR+^>PNPXOlxfZy-hZvL^&!JYdmt>D)x2=b}Elkos3q|2R3a#Ld P00000NkvXXu0mjfg!jL6 literal 0 HcmV?d00001 diff --git a/_images/math/5855faa969d195745d46532d0e26ecff25af71a2.png b/_images/math/5855faa969d195745d46532d0e26ecff25af71a2.png new file mode 100644 index 0000000000000000000000000000000000000000..01cd7ae3a435e74557ed01bdf54c375f4b50cf50 GIT binary patch literal 656 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 literal 0 HcmV?d00001 diff --git a/_images/math/5e88ecae09ba1f2688572248e61c024774b756a1.png b/_images/math/5e88ecae09ba1f2688572248e61c024774b756a1.png deleted file mode 100644 index 90e6a219889b35ee036651c9c80211c7fb001b43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmV+i1o-=jP){001cj0{{R30jff=0000mP)t-s|Ns90 z003fQVhjunKtMpYwzhP1bc%|K=H})wFfg8;o={Lw78Vu+1O&{?%pxKpdJcqm000A$ zNklF|9LImN?#!&C`$tPt6L$?Vh!Q=N2N8rQ4<+m#Iy)W;FU15wMr5-U zgjt{+EDym{1O^4$Awo15BZ}x^U4z;sBKijtgojSOH-C1adjk^&?7xDHKffFOrt$qX z()~TJk14Ye@GXEiO!8kT1K<*Rj-Hvp8GZY8=gAoqn;gEMB;7yt`dD0zfH>W9Bp<<{ zJl6&Z&H2Wve0!8Bcz-VBLCJ$ZOHhBjK2}!_he{jdAy4o`2Dw-C4oi-6GhZge=rINhsZ_Z7o&pX%J5bsqZmX|yH+CbKe% zhS;Z+1(XHx1uQoX@^*WWOqhpaMlKT&iiYB?c#tRW+l8FAegJ$yk!^x0w>ql!0-CK3 zIjlEv>>D)+gxUgaXtjr=3ZJ0Z7XnetE$dC>zSEo0w_gH#T|jEZnJA#Le*-naPiE|) z05Qv`x(`Aa1n_b%$oIMK_vdUMzI)$(Jz?1Hm1cZbuT92@%5wvr)Nhp3s{0^Jb)ZZy z5&T3NL=aWH)PM^QyHDN0>FL;iM?pUja|$ov%)4i#muz}&kvyNeb$vB!5Kv!fUta3h zNgg|%gVBR1mN>d9JZ}02B2Eq0zJT8B!fE6)a{sZ_9ky3>M{Hml_`|@4XOTOaoBbw< zf|?6Eyv;?N=%P40i*m07URVkF_fXhuLlItvA`cDDuo&>AS2tYBZVy>tg%s``H#EZ6 z1pTZdHnTzs=a$f#mX^;*Q zJB`|c3id_$ynNHNbiqBcXXFx?oMGD literal 0 HcmV?d00001 diff --git a/_images/math/73ff526963cd019052e8d882596a8aa0dc87a2a6.png b/_images/math/66192477e53a9f48501a6c403ad413500fae0a6d.png similarity index 100% rename from _images/math/73ff526963cd019052e8d882596a8aa0dc87a2a6.png rename to _images/math/66192477e53a9f48501a6c403ad413500fae0a6d.png diff --git a/_images/math/6d78c15bb0cde3ad82b6c96d5737d75c5ecff4fa.png b/_images/math/6d78c15bb0cde3ad82b6c96d5737d75c5ecff4fa.png deleted file mode 100644 index c46edbd820de5d7b26a489b9f6f44a54f0c3fe2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmV@P)E163a-iLQ$51f!}}x4csye3|tB%Xy6oVV3LMuW8YEdS5UYU)q>|Ht zdjd>=$;8+sjF2wA2Rv|gpc?~QVFLjTEE9g~!$To~fnlN~Aq@=KFh8(J0SQJ?;zNxc ztU;Q14a~sg$dD*YyaqNwV2m^tz_`}CfnY0M9gPnd7&c;wMnSAVfPtSIm>A{wN$@n= zAqI{GDQr*w8WHCtuGJL`tgA~o7$?LM8A^h34BUdU3{x0(qRAvMu;CMU$8Z2mg99*r z@d$YGZ~A~Kk5Z7KYH(oNi_He)f(*k-Y#NXYGNLpf7i2_fKrYCL(tuo$5vKvEAR|r# zQb9(X21r2$E|-YY04d18#r@a{vGU diff --git a/_images/math/708c2896dec2ac483dc4bcc92baca55b7cb19921.png b/_images/math/708c2896dec2ac483dc4bcc92baca55b7cb19921.png new file mode 100644 index 0000000000000000000000000000000000000000..01d52a006812f097d83c8f547b34a6c3b1461fe0 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^5A4G4UL{Ijv*Y^lM@n* zL_`uB8aI6MvzWcIG0~Lyu&==7hQ_B1hk4oBm;|0P9u{V6^VwmvK&qVWAA^GTX9i|t z=GUxjti^0>_il0W*i8OsVDKR~At51sH$&j*l?*C7yXJrCU_&Wz#K7#{_FxF)}e8@r^5;bnHBDEh*zJi5Higx zhh1eKV92DnU{iegB*nAPa_n#?>nfR(N#*^=yS+@FQ&NZ@nS5qIR1Q=KXE3_zn<<{a z_ifT2LTEmIw69_HO??e#Xin^hz%#2@1=aorGHznbHVM|kY!fnca`_D$HM_?nu&hnU fY({M{__vKeb!0i;*4Mwp00000NkvXXu0mjf316QR literal 0 HcmV?d00001 diff --git a/_images/math/75f8ed7eb5654492c2a155dca7a71c04d0617da8.png b/_images/math/75f8ed7eb5654492c2a155dca7a71c04d0617da8.png deleted file mode 100644 index d6083c2f55c9c30b728536daadcc38cfb3759d05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1295 zcmV+q1@QWbP)Pz($Vwzjqw78XE2Ky-9;1Ox<%ii)0|o-i;lVq#(kFrAAyGVS11`Om-%{2)>= ztyJQSjYfo^U8}dT3%Kqgj`HmgqwuMF!%n38_R8JnX7TH#8?jNeBh9XrfmKpp)ZdEB z>5*Gz;WJ738h8Eus2ic`;y}H7QpHB|h!jF~k7Tum^5=)r<4<{>9kF?@4rb$uP zk+A}+V+K8z`#n*AYq!(X2Wh3{3A4?fFo(%0C|eFOvM`zd$BpA}xK#}cj|W!jo4?cZ zaDQ4!?Bf)~jX;6m9KfOvuLgX+yCx}yNd4Qdp&Z@GhyO7)#xUsB9m@K~>8Ibhvbv2E zuO8;NbnleGtnO}_FSf=mBh>QU3G@Cpu#(fxDB}x%BeUVX{xomFtE*)WjCi7G zPRZ68u;)x^0000mP)t-s|Ns90 z008FZ=5%y)Vq#*7ii#p4BDS`+3=9m+%*;SQKo%AjP*6~wo}Mr;Fa!hy?rJNv00033 zNklYHzy#4B82BzQU2DSn(ta5(>K;}LLF`0}_Fy-wSnn08)&;Sg%81^QRI|CRvFy**R zp8!eD0tPD_fxy7Zw(S5;IR=JJxa4$!{sdX@4g}Cl06J$0YH$id0a&gVmzf3(>(n67yzJo VIcUb9Q|15w002ovPDHLkV1kLwk?{Zk diff --git a/_images/math/7b1ba583dd94da2078b240e3f6b2e6c6a870d63f.png b/_images/math/7b1ba583dd94da2078b240e3f6b2e6c6a870d63f.png deleted file mode 100644 index c9ed231dd2d71587294dc922f04e8202f18fb3f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 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 Ef=Ir&3IG5A literal 0 HcmV?d00001 diff --git a/_images/math/7d8f428010f544a68b10a29e9f56a82215d82c09.png b/_images/math/7d8f428010f544a68b10a29e9f56a82215d82c09.png new file mode 100644 index 0000000000000000000000000000000000000000..4b93d88d40f9322f64a0c2da07dc6afc9bac8bd5 GIT binary patch literal 820 zcmV-41Izr0P)ER%*@Q@=H?#RVZ3SNvz;O zgcZEh7L9ljL2W9&-_AHj_!R6R^zQq;Hv>w=-{kGw);G zTVO4uXIHndyb<88nvNp*^rd4b(H?y0CNo8S87!S5G#`s?G&lw$GQ~YB4#O_$lmC8Rt^lg)w z_Dz`9N|PP;FBU=F*RQ$&{-zRQpEN`zZZi~d-wy_X>9U^;{Vf(~GR#LCxJZiPMLV3EEcFTy8_s@L8sCt4ygwn66Y>%*Is=vk0BTc&lzgxBGF`|y? z>eO+!b1F5QXXZC22n{ot!WM4%h)q--gwc<)9AW_1-B8|x*zKCG${;%9xEbU`ORBvK zC4tY#vB1gTFwx$iip-IAt&1&yEO%?6QIev>^Ew;UoZh55H}2Wu4{2ov(V+;AaIg<# zspcR~?pKrzZFu<}xac`mCq~oAl;BkKI-HH?@uE~mfhcj+%kHNT{z3XDz${Sht1Ye) zJ6sSTs%-^fY1Y;4SZcU-CgB-ks4-5oxZ9Gl1#8wjzhh#RH|!E(JQt{fz(-$Ik57pP ze^)`PTulqbY^cdivQu2@o-a7^jDO}n_o#GLO!LTeBoVkr^=wWOqUy!FaceNOOA(0uWx*kX2Ba}eWUa#CfF%V y=~J-6sTNgvThwQ0HqYCdyhj>^6X#xapZ*I(+@HI8q-56s0000TP)yV!{sfhV@L19bLF;?NZdnH&XnI>o|6 zNmfe6cA>EsP*${B-ps;YKzSXFz4Fbc_X5gi0NLJ=H7Cl0848&}f(et*Wm64C(c1D9?aYr3O10)jiP`bC_9sF}obg1F z@}q-tpzKCzTIoh=6OZr1o+whjqpwChl?;j~26Gy3iZj_t* z>D}XyN3%$#qh2lNi$|U>53X=st=El`q_?@oPX8t*`^F@eUtom{ zpQ6jdQF8P)_`$`G&XBJAH{iubOD=!tpyiE{9UqKRE}Zs#AS@p*5XQ>zhmuQm@M@g( z#y6jML`BK3-`Bt71$dhP6agC>KCvcOD`#>i4JbmViL-V znOqZcD9W#Jhf9Y<9U3^$7%jLT{rnOG+`$RY=Eood8tH|Wf^uMfWRz#n=O>8EL5}I* zMvaDUR`134QOFf?VoZIHONXpUV7KEhp^&zp$wJS9ZwCDVlxoA^IzoS-a0 zl0K7VY&mZM*TIb%M(Nl41Dark9D;(>f6S#r6#?p~gQZRQ6qK=|;jw*u75$lQD6R5K zW8_x(27TUyoD#o?4q?=!v4VP2%oK76O4Z7=xO8aZhC~3dhF-czQA7vJppj#}h5~1N zwWgqa2%(IXX;`@;8xW#H7&RHCggTOtLr|KK?{=7U9LpZY!T5S3)iTv!diF` zb9D5im0@q}9~~uOLh7x`cgmbWbO@t%&54q@{ixNKLr{#6uk>+_e4*02%}ba);nf8<@BBLS?Bes2GH62hP%caGlezY(ETMwadZ?o zgQgYNNpfRu)C?(3W*bg9eH2;CywUP8`DNHt&g5Dlpd`_>q9%jim>4zLzNE zTuzV>mGE2y>E+rv)c|!vK+(-v_W-InjoO?<`Nm179D$Ok1+Ov=zpH(^x#oo;*(a|w zv_KFe$K-^ywtuMOg~Ghh;54+rE^Jer01p)Eg$8fwDFq^ea^4GtdLf@JJ-I+cP^P?4 zs2B3t(vu5B14WzmLLpwrcS}zy5Dk<>%lRIXqYy9Tx1}c+hz1I>d*nT&A)yd2aL#B}V z&K%|_)C>7+=_v&w(ZSFPhrEX@;0IseD8dU3+R{@BL}Xr}?;**%$oHrzbNpk-ur0me z1p)+~5dSd*o7&Zb_P=5iJNTB~@B%xV7I|Ok!X8PTo*5M>{{hM&$01Twu^s>b002ov JPDHLkV1gqq;P?Ol diff --git a/_images/math/839ec6f7d2eb074e88e8f0e65288c7b9e480ea6b.png b/_images/math/839ec6f7d2eb074e88e8f0e65288c7b9e480ea6b.png deleted file mode 100644 index fdc85a069f68ca172a3cd572d189ffbbb80352f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmV;K0cQS*P)vio+2V5baZsKwzg1EP(VOH3=9lnVq!2bFcuaTUO9Iq0003b zNklYHAOI4G5J3k880vu{Oa>^TER`5~IC@_&F!XK*s%KGvh_D18D`8zB24Qdp z!1b(PaBSdkU=?Cua7qe5w;2qedN>l`dbTq#Kj4|b@P>i&3#Myv=wSfb!`#5Ikb&m{ zM1)P92tCU|#2W_32@nwv<_QG#Xg>i3jt~RC0z@Ps5Jc~L2L!Kh+A|qwF8c)rwq+_1 zk=5ATw(s5he-Jakdia3xahHKX31*5VLI1pD;1XqEy1>A)0V=|DAc26}fDywdz>vYf z%c}qt;aYHkkUdKnoG);0OVj3p*~7WR0VU}ymtTplhj;BG24+D)IZp8jIN}rvm?mJR z(Qugtyn3*v>nLl|^)O_UuBT}$QF@k_H=yv<%QpZ3E1gqm?N6eJ00000NkvXXu0mjf DgI=IG diff --git a/_images/math/855d820fddfbdeba128fea5611868ae6f3e02144.png b/_images/math/855d820fddfbdeba128fea5611868ae6f3e02144.png deleted file mode 100644 index 9829d63f52adf4349589385f19698a7c0e199f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^ii#p4A_N2kP*6~|wze=ZFboU~?yC{#0004~ zNkl5W ziYjFpnE(_ftQTwns$Sk=AmK!WUakZTz5EU!KjGEOTbML2fPtF4{JRu2|32&ZQ zfFYD6ufPCFlWYa4c=O;{Ore||46NY1z%c=DmSEt(A{GJ7gNFF?F}A#~*~S0~BP~t? z26DlYOtQ5yYz5^ghQ4<|@P!0007E zNkldgrF>uEX2Y9L@Fv%sSyGR1T=_&5vyHb zsWJi*k|P8Q9U}1uBBly4SSk_=A3>ssk0lE*AY|^dYv(=34#}~cynF9?KF{}E-v^Aw zH7PntSD0?mAtBHhzoIQ%~F{GXg)%0{^Zyn<%sPgE%OD;ge47CZ(y!9Ew- zJgN?+y!?rk7L=aHt2`QuoZuo*?c#!t62ZQmD z-U6pgZT%@zSt#|YdE6b9AxgH|r`-&hw$LT@*X}BQfG5WZyY&F- z?XVyVYzazg9ZE~3i|;3!(ci($5ArHqqnZ!l1C^~%$dTQoj&W&tKYQ6NYzY};9x@I< zJbgm@Mx8bDA=sJc)Q+D?<_`u-s*4>nwk0#`NXk3K%n=&@0De=Q*Xc2B@Bjb+07*qo IM6N<$f(+V4u>b%7 literal 0 HcmV?d00001 diff --git a/_images/math/8902a6b128ac408eb591049357b288ec9974597c.png b/_images/math/8902a6b128ac408eb591049357b288ec9974597c.png new file mode 100644 index 0000000000000000000000000000000000000000..cbcadff7694cda6debf201e4ec8290c101d160c4 GIT binary patch literal 350 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 BV{HHc diff --git a/_images/math/91564f3935a5e8dc746e34e3cc8ef0f53c31ea48.png b/_images/math/91564f3935a5e8dc746e34e3cc8ef0f53c31ea48.png new file mode 100644 index 0000000000000000000000000000000000000000..ea000608469b832cca7d7d6f52a515852359f997 GIT binary patch literal 358 zcmV-s0h#`ZP)LIc zF)(~dU`XdsV4VOFU^lv10F!)b9=CykVZlZQjs?245TWf1FqRMlKghhP42ld7*uh$u z3}7rS0S0CPAbptO9#;U914u}V0mkBdz`zfZ6l3t@4d4d(iE9CaEri9uGl7Bc07#Ns ziuVIINZHa``nnJnL*fDkK8IZl43(7vya7xg^#ywlLs^^;of){EgKXz@-~vL3BM~ex z;8?)1fZ+iz%!3FP2;?)&XJA-a3F9JI;9#jNz!km>0BX@TivcP_*Z=?k07*qoM6N<$ Ef(F=s`~Uy| literal 0 HcmV?d00001 diff --git a/_images/math/927181abfea7ca562a63421bfdacc65196eea297.png b/_images/math/927181abfea7ca562a63421bfdacc65196eea297.png deleted file mode 100644 index fcc10cb6b3b4857940ed31f6552862dd2fb7773a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmV+$1?2jPP)i2^FL6XEt{6i`v`r#N3XFCx$9QoPt&b4eb#mx;5c=jQFTEJj-2rplRzK(+*PWAGu^t>XSJ~bj#H-@ zRj=3!J!nUMj=p6rV`+om8C7hz-rui9S9+W}=T-G2P*;!G!S%4B2YePe<+^{W*N;5c=|qw3W*xMk%{`;p7AqCC5C!X{6L`3i6cpEHWX^Ur=f=*-?S zKR*ZD4FN5%ZY{jZOnCv0Q?GbbEwyk^{I+ACJ^8ny4zrNtO`z`~cAhzC&5ifoW`Gk~ ztXqqRD*oGM101KG^{6_n;0B(vC*C3dR#am>*qcD3NG~d+ah^5E3O%>|O;&mQWk)6A*}fg*ww9K*Q}`it3}y`?HWKO|4{*8X{W}TSJ6v+{^RAue_my z?4v+5C~O6(_lAA!d_}jUjMcc0?OeSdBF^}=XJ4Bc z>^x9no>urDwT~KCjoT@|F3QRe=d{@#DVNOK!X}@&9|qKJZwatkNa;yXlLw=qE{!F@ zjju#{rA_1q%XB#kYD*$=D|K-BuF$C8A=lzR)>IQ6K6FJICJlQ%c5X9<)RMzyoj5|? z5msa8b|2}7#IV(hZ{v2SM~QJ916LKp<^y>}8^=uS+(yX0$zk^`WsrTl5;L=(Ngpoh zQaHVps{4TN$X~qUmxqbdcerqQTADgZU#x3!y8^Y!i+e(%>cnlOL(O=p{Ri*~33EO~ RrW61G002ovPDHLkV1ibid|?0p diff --git a/_images/math/9375035003057c0d471bcf75f7ebc69ee5d489b0.png b/_images/math/9375035003057c0d471bcf75f7ebc69ee5d489b0.png new file mode 100644 index 0000000000000000000000000000000000000000..1559fa5c91a6e97437cb9a83848c5e296e6d4682 GIT binary patch literal 923 zcmV;M17!S(P)gBir$P`kRA$AghG2s{6eXf zs(27o3SK;T5IlGh4PvPwSc?ZK7NiK$gQBZN6bd2Ulp=LzcXqS0vzvYp*@GPj*_nC! ze)GO&CIP(K*))P_gI`7hA|td$UL*gvg8<OPt@zPmS%NTLdOsOy7a;`z$ZLGp1d=lECtjfSkK#Sm8~okQ~F?WU?Fn%tGKm!2m| z9E;7|62h)_yWC)k@8^OPo&l~dC(&$jJ$X8F&F)Hz1-3XgGy`R#m4BIuH=4bLV(}%= zxiD(#T0WVWD9=_V`VnHjFe4z*F!N+fJnF~*C5t8?l3xjVnk=miUWaS%>v-bg?>h3LjC)J?W} z`%xsTZRn*>EhJzp!4BY_ zBlo08I}BT#lDCw;bAZq6`xELD{uxHdBzxp0b4!r-;RII`%;t-N&6YTcvl4Tuwa6{V zoy+=q+awd4qjY)NFm-{tj5u53giO=O%iG}=6ttymCUK5XBlKZ3rtwW6i&bTb)2ez8 zjXQ7d&~qS*$j8#@A3nQh{Ls+udF9p&aUl#yYm6Q!&`)^w=PwvIX9W#ZKMAy=HK z_j}Wo?62BL&Yaq;Ym0@l>&!BZQIoJxpDMyR*wJx002ovPDHLkV1m2Hx<>#2 literal 0 HcmV?d00001 diff --git a/_images/math/959259ea13017b50b3f238a75c59d4dec4ed989e.png b/_images/math/959259ea13017b50b3f238a75c59d4dec4ed989e.png new file mode 100644 index 0000000000000000000000000000000000000000..c713476203cf8906ef1cd56e4de8a6c26acb405f GIT binary patch literal 384 zcmV-`0e}99P)Ex;c2DSn(T+)96Ko&fO@|cWGFqPObG(lOaK$9?}W7wOZE)QVfz?9}P zeF9-{7BE=h4k89twrvOSNi#5P!XvE<3<8j4??3?49H0Z2pa!`h6u_i=@fdEvz}|q{ zaHazcY7=nioTtFRt89uZ-Wlo(7pK-hils>a0000U$w#1RvjAto9fm@XP}tQua}Tf!fV7A*Fsx$_V3?z+qRMcMVFpOnp#BqY0w+kXmz)Aa zlrhx(aX<(Sg$Jw;&_jlc;WCW5fY$&c+?*X?%n%bKaR5nXE=-20ioO5<002ovPDHLk FV1f+tf*1e* literal 0 HcmV?d00001 diff --git a/_images/math/a4b143dd085345dc8e90d189bb3459976592c654.png b/_images/math/a4b143dd085345dc8e90d189bb3459976592c654.png deleted file mode 100644 index 82ac4d1be4b687a15eddb1b8474b40421c6796b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%W!VDy3uI;=JqznRlLR|m<{|{t#b#)~rC6$zv zI5;?L+qNwrAmG`vXDlo%Vq#)EJUnO4oS8Roo|2N1fq}ubNy2tO4RbwR977~7Cnq>C z$>^Qq(OA&gsL$x?(AX&L+MwQeP}IY4W{V^1j33uT8CDjw`LVHgFfbqHVq=@e%5%p` z`~cHl9v)R5o;iFxF~Ayszf8#)aPK5Vm)RFGlaGD-aCRiA_wmOKLk8RyU99E^+%Css?h U-Ar092y`fer>mdKI;Vst0B|B%oB#j- diff --git a/_images/math/a5dcd1621630cb79cbd9d098c352efd564692125.png b/_images/math/a5dcd1621630cb79cbd9d098c352efd564692125.png new file mode 100644 index 0000000000000000000000000000000000000000..25a4a86491a6c622c593c02a79a62fdb416a1ffe GIT binary patch literal 401 zcmV;C0dD?@P)l;}*M2fvZP4 zlN8~Zq6c7ZUX!j7#enrLHW&f^vZ4myY|wEl+X{S%o-W1N&E*;qQ4p=ty9gA(`+>_M zPRvN_hCQI#(9rIwsQ&dlrVUG~w(ytHEDa@++w+w`GpVY^5(L-^3mW(Q!CxqPsr_hA7dY vpxdn+FKhfaTglpcW*6TlsXDXGtSwJ}Bjhwj4`|Vs00000NkvXXu0mjf`s1sm literal 0 HcmV?d00001 diff --git a/_images/math/a7cd8bddb750a0ad8e918993fad151b283a282ca.png b/_images/math/a7cd8bddb750a0ad8e918993fad151b283a282ca.png deleted file mode 100644 index cb005655a3c62acff1d2db2ae92491e2a5de946a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 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 Xnda~p@koEY00000NkvXXu0mjfbE;V- literal 0 HcmV?d00001 diff --git a/_images/math/aa2d4ac30c971be67cf2655355d5d2c3b424c9af.png b/_images/math/aa2d4ac30c971be67cf2655355d5d2c3b424c9af.png new file mode 100644 index 0000000000000000000000000000000000000000..40881e20da795370af0e70e1eff1b661a46c9c83 GIT binary patch literal 980 zcmV;_11tQAP)F|82|0KyW{?uSs#gtlx~J?LEv^0f=DCs5+#*Ef28ap-o}VB4yY z!|Ib_=q1$C>nmgK{M0!?4T+9IS*j%^-hX4eqk1AwC;Wn<0jog8FgeK^l6^)R{Xl;t zr>k`vw4WUL=kxI{oX03_-h!4i`oo%7=#p*5TWWedEu>f53`;d9{#0JAQ)a-3TO^al zZ_1o$$lhtfdxu$)v1o$y+QzP}nib_d8b_B@>dkm-#x%fAD@LcjM$G9DdgTId&hD^{ zjdMpOve|6u8|80F2AGqjG5QpzrLYYJXvigyNIEPq-6mRB$)aUMZZu0BYbS815J<6m zSu&kvEt~W}i-Z1c9#m0VU@B>g7|-J=g3Rn-0Y9%$ze@W_J%Vg3gD`u!B%6T-i}{)7 zEV87wDP5jx#UMiLh77E)_WYpyXRhCd&i~@>QTD3aoIgf#X0f*H&T-5;=|&dlG2jvK zg_+Wf$E>rHg=-&!V_s89k6EN{P$nXIdCEyQoMPjjb$+E0Z;;dZD+mw{qvu_dd3=}} zhQQ@Et;%-40z)(^*kbhH)S|2Z5wb++40|jsR@J7?>CydPL){VP=evo25G$Fb74|=@ z(M>p`2BD%JpG(v?YjBHCpwA**gjA!&3fNagJ3je`#a9xM*|XVG^s*#e5_`lN{|A8Y zkSDA9pNDb9=$MQ7AFNC?nkTpL8M$w?9&T7$&wFCO$1P(~YFKB|oj;6f`B~&W5pN>V z$!s6Nz4Xwg7v1?Q-e(&51;SkHTWFGkF^dsabYD&DIE=W?@W{5VFIksM_VU#u zh>~?Kskglje^IjHW3JrxVEV%*NK{%VWbXaidY`yTlHj13`;;T9>lUmyobZ(zwI4`=YSS5c)I$ztaD0e F0su}*MPUE{ literal 0 HcmV?d00001 diff --git a/_images/math/aca45e27a2286d530c0d9d17fba88c3e35471698.png b/_images/math/aca45e27a2286d530c0d9d17fba88c3e35471698.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fbbc71f35adba4a8e73cf811f5b766f8405969 GIT binary patch literal 659 zcmV;E0&M+>P)3{d$$8|w+w2hwZFYlpA~_-5DJ*6K)_}`fdFNgJy;%rDZOj~O(CMThtuMU zOJLeCg4)3FB>6xby$-8>DlpgRhv<~1fOF=DiD>Eev8G7OWd8=kERN-%S~po1b+7`% zGkXk+zB}Vr79PQ}?I%=={z0Yw#wS|zM2kSpr&@HZ(!%iZiABxSpY!u7HgD0}iz+6x z=(Xpmn5?Ui$fC1{sY%n;x0*1kzP#>Jn5LV$Q^3~g{pf3ak2D}MGnukx7wNdoGyc@j zLE+r2Z=%!v#~~LgbV;(SqiFw@6wFHj>1^j*Fq zx?zZVv9X_yo0f;Uj&G)}!J3CSu0yQ+f0Jo4W0Rj38!X1UEarEAH7=>7z#12F}7l6<7xq84$#CG%vp)r;)v1YjEj-`5ZCFZ)#SbK<99;WZ9kE^ tn9OU2l)9+i1-0_;0#U1y&-{HCegjs`mT&;p;$Q#(002ovPDHLkV1hqPJ>38R literal 0 HcmV?d00001 diff --git a/_images/math/acc9948bd95c09c736c99d00ad637d74eabbb64c.png b/_images/math/acc9948bd95c09c736c99d00ad637d74eabbb64c.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a42c3e6a0197054c3e571c65096270ed6ce960 GIT binary patch literal 861 zcmV-j1ETziP)!0008$ zNklsENDT9a(U+X4G7r;=C#Pc;_@Nfn@1m7-)jwjHo1*KjzA zCGZ@JpR+RH_BNAxE zh)*Ci*7wV69unbq02Z>N1Y-zUCy~YX>~`ZJnK@{6mqzlqBe0MQK(>nWW+IF4nP#o~ zFld4Uy@GptM`$E$s`1yJq~l~?=xzusLY8*2!Vy%F8_8h-#5rvba$cjigr$#FVl76xd=G(NYk2V>1zjB z>$R|Xk(gEf`&6bg?ab&10iS6y*=#k3pn8+bSPV?bekGlK7olMoR%Ks#QXX*`Y3oJB z7K5wJ=B;M4){Z1olE7GJi~oQWw%A=Q7?xn+#Vk3tDmS3n$KEBJlSW{=-eBvfwJhkI zq`2W*XuUa@#&=M#FTF*mmSDk5xO#0+8orkL@kD|!U2B+?t&wnp?w~}$mtjm`fkYBy zr>BOls$fa&guE~Aa&=0>>#N@!kRve%w1R2z@(M-5s(5;AwN5ke^Tz43m^TrAhICw9xlxb2@wI-ahO7?TOr)uCgcTAZW8h-54m%3M*Nuh&{c? z_TY&n953wozke-4f%%C(y!ajl&$3D^U2qh nT-3EE?!J>tj3nu%KJLPz($Vwzjqw78XE2Ky-9;1Ox<%ii)0|o-i;lVq#(dLd+niE-Qh8tOE^N1|87p`7A zYANH&X`$a-*Okvd7z^lCmR#V}Le6H&v{T`g_=h&1Kj`bfR(zCc`=9N94b9Ct+zlJF zk+8-2T44A(CVU+)uk@&t=YO6P>fCaD>Vca>R)cyl3gmBQ{>=Ha=`R4Y3x^Ro3!WX?L`WZ01ZG#}i z3iFzw*sTMDIGGm%uH!Ou#@lvn-a)HhrDzBoIoz3>r6F!%(y(QWRsMFu;<%{hsy3#- z@~eQ!wNYB)T9J&W$m|<|G&%2OEJ!po%FZ0d-F5T8iqQ1jeMRh9=dta-_4aZUGn4Mb zmHB7aZ#_E6@~=lp!t(jg(CEF4pUpH;Jiz8Z-d$1vaA=3g?Ath)`LvakF%Sd3#BtMp z3iqxI4Y;3&x4%8*tI=}&sRR{3Y|XE|(VYRU;5+7NV;vh)H_ZBYK+ zd}`Z6WTr>;={+M~z`33q?m5jozT-H_J0Z}hWM0cO-!7&aE;eG}sE4M9$7tO2ePLD+ zXEDsrmU9gK1TwY)fVb(UTh8|1%W{Pe0)0NMEnpQr6| z#lcEtI}CCLL2Ho58sw+pZ%Mv^!F?Pbl9lY{q_MLlBLpqqk1Z+ymh4EL zL65^@4FlK={4CO72-$iy<|QoTMFMps)J8%S4%#klCPMSbCW|dX8-6n&$KD~rna-As z5TS_z&Ke2;lAn+nVJGq8F~HXC6~!a%%@*yLN6*pf%lCpJF1Zq#BW)(K_ThxNAI&m( zA`ol8!~9M{%R(~3s{ZrlsOAH>=ppr_ovp^VQVG|H_(M}PJI(f;fpOiDX-^-g*^Cp8 zslj6n#{6!%fNvKz@0zkc>`OecvspRB*h~9)_tw-)GO^j&f{}iDy;iySi4S0ldf_r# zz8PF>RIRRPg+qIHF?dwj8yGbOlQ~C?OtlxWrzV2EdT_~;u8|N6>~U&~YIbM>^~JKL z%5)est)`SURX8KTh~WU*nu$o~ z1L%B}+}B0xycFt&5Sy7ith5faGjd_IFW~D#XG3gO?PwFh$o5r6MrrdSC1{toP2E}M zzP#E$UE)>j%<68p%TIRxYHqdpoJ9h^#3T13bdDEg;HFg6kR`4vi=tf5Mb2x<5o8IS zUW`TWznDHGd8v$9k;8U7SReiaxoYH~J?f4`^?$$gxD!=q*~_Df4Cb21Lc{+b{{H}m W)?_A#cWq7p0000ArEN#~MaXys%RH9KN{6{wZL)78&qol`;+0DQYH AVgLXD literal 0 HcmV?d00001 diff --git a/_images/math/b1f5ad51fbccc6f210d02d9c3eb8ea96fdd9f505.png b/_images/math/b1f5ad51fbccc6f210d02d9c3eb8ea96fdd9f505.png new file mode 100644 index 0000000000000000000000000000000000000000..7607aecef3fbef52e433efb2b75e2fbace40737f GIT binary patch literal 500 zcmVX%UK|(BLc-nu3DVPU6-;EiMklDmpm4iWYUTpsNs9 zrz*H96rnf?^*_kwAV{PX!9i491uwtaXxm3}ckjIqckg}x-rB>!rTI6T*crrCY{{vG zHGnt7i^P9m_d&v4L-txDKZn78jteMmkdG z>K0dKP*?-=UR)XB+6?IthBBoAMRT|p62=0qJnj)vOmnz^#a%ojW|iV z@1wZ<9h~w-#J)kzf~e%>Iz zY(j}nY8-NOw$%VamfuXbq=%j%e&OIAxb@e&*)@Z@R}0GE2cw3+E&jnOdPb|D8kpmH q=BnSE%CFPD-O9iTR-$8n4}Jkd=1@1AmbQri0000jc+Wkwnp}L?T#8N?p+FekgXl?MPP})PY+V|3PnWd zK?@4P9<1Va55=3P-38Hupl&S`3ksng6m6j%^d?k6K}6R1$tIIzQ`lGaRT5j38I4v%&$qYj27otIL{wD$x?JR zX^p!i$+>8A3I=4dqEQeXjHuC;|D=KwnqhK4+RjqQ0}xl;&I=|$f@1f_rdD7d@SZ8^ zL_Z$Q1zMXr9Z6QJW7R5t_Y#OTx6wDq7D#gP7J!3V;VtCRNV4p~(C|G=QUNigMq#D< zDtgk5JC|PAB6cP!01nSP|6GU8 zd!JO6qHh^BLw5hqlC(;IQTRoIAdNG5dAXYearHP}L#p+E3B+y#=kgHzD0JA;ec)D0Y-8K(bG zHv1(A&MsOj^`!=(*xt4*--{<+_@joyz@xPrK{X3alSvVgf;2cpPUnR%CyGdb=mnbY zq7nuLk#+sGM=$9iP@I~#)q{=@QZCHiL{jVnglWP|xjoR0R>!!qSa|FsZg}0EVxQ0H zUxd&t912V4*~MXS42;gRi9^|?dHgR7tn(ZcSOX3^HP2@LHq{r0F3qzE!#dBYd58ua z3M?5|=b4(v5{KTJ#}7r^(ma+p^wvB+&M&0%OwGfJ!-+umhN*daHmZ5nPq9(W^ABsG V+O7g2tE&J2002ovPDHLkV1in&xXAzj diff --git a/_images/math/be693703d3c0d2a954fa4dea34a5eb50e611e2a5.png b/_images/math/be693703d3c0d2a954fa4dea34a5eb50e611e2a5.png new file mode 100644 index 0000000000000000000000000000000000000000..74cd8f0eb06b403435b4ed1601cd62255c98fa7b GIT binary patch literal 1787 zcmV$box0000mP)t-s|Ns90 z002NhKw@HIbaZs)=H|@I%urBJA|fIT3=E2jiZC!R1Ox=0o}LyK7Phvwa0{Lk000Jt zNkl znOr5C?e6KRs;{cLs(Jt%61IXe7serN{ikr7Y>YQli4IklKDQu7z@**H;4*#wN`O8y zM!@6^Q=4I(+@q2q9XSDo7)4PtfF-K{CuhUO_ln~TSh^C!bKeYLJ;pc%HeVm7z&?a= z3ha|6@aUh#{*^oOquA~4I=TLT1SVh81Yo(8M*mB2Q|R-xzL~R2(h?O|IRY@*vIpfh zLeZ7W00379BzDLG@tuix4-0!UJl#0 zFu36CN@GSo9VtR|s%*j<&FSSrqbFdAiyTnFjOLReE|a>u04CV|*o4qGc(kSNg1764 z4KAX6aGox6-AUwyP}j|-Ptq5a;X$_s-u*qutd75jAoW{a>}3n{!qK+3&Au^sp`ApN(NWah}c@krRc zh*LcSu;1O){{T8#sYL;EvaI9=7Rs|iw8F&?0KV~-x9P+99%<)Dz%J5s+zDOli*`y5 zD;{ZsPyAxu*(JBNA!KP%6tKNct8RMfzcWm$tOo1wV0qc&sBe?d@ecf1m5#9)+R~f2 zEY!DQg^fOoE=c`c39Ld#r@nNG{MnZ8PIVGYEu4joT`$moj_>g(VC_!Y1$Yw6SdGaG z(FzGYmUYj#Jk7`FIT(_(6Yxv=sdKYx2#ihwEJ|6c)qLgdv$vwkG`4i(y+9`c7G@cQHD*c^kWZ0x4jY_R8$elyeX!zGkp#vPGB5JIL6XSk`JSc57$QV` z-{w*d?T&G(k~B~U6&_FGV(czKBn=C(p>0mAu_kBCVhdCh{$r11v-_Xh zP(L=(vPOG*VKKAeGH@Z!dP;xu8|LzccH6apI`K+;bIL?~Jy#o|qLj#cJtZ8x6hRlf zx-#`j0E2m>xP`k^pukv9N$zZ;7bAH_O5|eqNm0=enA1~^nXnD}wJTo0N`S!Jo^q_z zQh~at#R}M48=w8ja(l|LQrS`l)N0IvF_rgv%CXWC5C-I0{D8SV)fv_yIF6@AV&+V+T|hwAkU2t;>5~#AXk^S{Ofv dWiIda{{S@IoW96jqXPf{002ovPDHLkV1m5JS1$kn literal 0 HcmV?d00001 diff --git a/_images/math/c0db20de736ea9b9091c56adbd1e4111cc026472.png b/_images/math/c0db20de736ea9b9091c56adbd1e4111cc026472.png deleted file mode 100644 index 2f7ae30cb94e2b6b506cd8e9cd9c48370f890439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 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 literal 0 HcmV?d00001 diff --git a/_images/math/c7b0923a067ed9ba14e75a609d00553a6995a734.png b/_images/math/c7b0923a067ed9ba14e75a609d00553a6995a734.png new file mode 100644 index 0000000000000000000000000000000000000000..313959907d8d9b1aac713ec4a266f3a3451c0d5d GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^$v~{l!VDzm$!RYKQU(D&A+G=b{|7S9oH^s*;Gm?W z6c7;b?AbFO9-gkQu5H`4iHV6B7#Ogyu#}XPBqb%yn>TO!-b-^C7#NE^T^vI^jwdH9 zFnSQHv3XMC$`2x%RWni>Si+e!qh_$^8yM86oz0ZyH!#pq@;&Xs$##x+NoJy8dcsVH zSz>hu`J`k_4IKo|$oS>bfu;A$A`pfJV?al%-UZ{BqU3he0o497x(gv2r8lH_D*OYvV z`aGtnx^mB6z+}+Hoxt{nt&zb=^AV##xJCkpF;^1ngC(bUeVmK_s8r5>E5LlbNhCu{ z=~QCOYHf*#@aaNxyS4~R%wT;gv4b`BVvwLljD*AmuW2k3Zp`7d0CM{p3;U+AI3(=| z67=EDy4b#sRaNw0uA}C!3tJPW=_;6NxXKqs1$5adZB-Djb;)wn`_*x!DdvmdO4gk( zl*71pyl7tHkhHa-+s=ba1}2P)cdu1#E`O4 zsZvoltTmgahDcvh0%cazf~IC7rNkB`qDZL}Hnir!7poLWMB)a;J{ZJv|7PainQ5{i zFX^S*+?_Mu_nrCfxo7V#!0N|G`Jjltx28koLP7ikD?8_A!^bp9ctTD&9zu=c1KZsU$_k90XX*(AoYJyYjP8FG2j61QL;| z8xVd|5wHo*;9U8n6}W2L)))L?@wWg@mi!^F`lyf`d~d!a^M4H0gf(36TSa2*^IVzi zV1HkHfK3ch9~%Ke^wTf;951GeJRvNSWUU0^5eT7jQCVI$A#}(w8;1)s;SYNXUrT-v z3&I%9H)~4g=mvur8_nVa1vix+)eA<9EqSW0E++{m(fGrZXtAzQQr|@k>5@Pq zFXC0J>Hpw*J(Qs2?^iLMgt9Lzk|qE7Lcpl^^J}K;b8|VR)=)F()1(uOnvlS^Jtunp zq>udqL|K8>{GgX|EO=B{4l4gib+<#Rg;oSqp^s>aUS7&vrH9Q# zsfN|Sh3i9Dn5thHT)>Ic_lc6~SM_f_2k~HX73LJbs;0r=Q~Wwbp3tP?wy;e&x~q*7 z8ohfh33odGoyb|xa@e!%1}8-uQYiH2z@tKQ@bI6~?p3>L3;Bm$A?qz%4;W|H%|%FX zDpHa$vX|Nya4;L9piM(YpY|4Zs07+8da4$#D6WJ=KXsM(MOTaJXX3W7AZ#`D3<$!1 zC0w`}zOr-Xv>bL97Uukut`r5N2`kz3s_>?!@Hbjd^V0x%^o5+`S1VAzz&>LR!wjFz z0{6=`{wf^D&h4B!+ZX1~Fe{5FvjHQ#vlFG$R4LR!&#;V7ijWos@HQ7`!Vcl#bTX}T z!emCmMQb5r=R7OrL0TtKWGT8JC^hM$LIWQDCaij8KQ^;$&*JMoa$$@Ij=~eX0trIx zU%2Ava<%2HujACOSVkLBswhGHI>-6sMaLG!n(&xQSP<^S*FT)_Cm9#v8e`zlau_)@ z&6Hdzx*+pDDvV3z&q7Q+`87e5ldI>X*9D&(!J~wZ2U#jkgUBizkud+=lZGRA?|*3a zJyZ2-u%Xbt4c`s*dv={R_gG2rNs;&mb9u5}RGbRC2{#pn`_hcix^+~>(HfyJn^u(N zfpv>W;9{z5K*KJe28tyqk{t$Fn>{VLXS{FDwXZfFBqRNr- zac9~a2=a|+UCR;PhS38Hf&{26%g=U^PSNi>ekDxuc`N+VtqQ-rUvV8LDjQ6A4GAkz zSuuQyqQ&=z56Le$c{W-0_Z(mU+v07j{hb8zYfD&x%8Ez)y!3k^?r&qtViP*PsFd*1 k&}vg*!fQxaiOLGc|2ymsXE9G6)c^nh07*qoM6N<$f^&-e0ssI2 diff --git a/_images/math/cd68db1245b557002774198c3744f72423cf487f.png b/_images/math/cd68db1245b557002774198c3744f72423cf487f.png deleted file mode 100644 index c77cbdb00d990c17f7365bab09c913d7a9e4a129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 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 diff --git a/_images/math/d6e0193a4c5b00f81c510ae43fcccfb3da27018e.png b/_images/math/d6e0193a4c5b00f81c510ae43fcccfb3da27018e.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8e770f6d5422befbd2ff64f1247a11f4cb88fb GIT binary patch literal 942 zcmV;f15x~mP)(`QE&F zZ{}N|ndD_31g+$$n;|?>hF=n?u-Ezr4$D?N^9?1LWmwvZF}r0Q-us5KMbFL!>7?Bv zVBD(s_#*2S<+}b-lJo2xQ#jiti>H(mI=rIPmXOe=m$+~<*3c6w7CeH81!M3H4wM^$ z#Wk(rjz^R@aJUlr3{kbLh3cX^_u0J{bZ45`BDNXH{f?B{0%eYr*B6|^u1zHlh3SUm zRrady(4A?Sr`5Qz>`vr!Ew?2sv|(6~734~l4-~eK~%2ZJoggeD)ux1=qFE< ztbkOPW~e3?f1F?Z1&i+Z8zM7oc#AWPLkee8nn*Rz-9chsb8K6XD3~*v`$Bbz`)6-g z`7dZlrt?Ke5<*H8agB`KQ9>j~17r}&#Z)^A)%D;lO8ghS5SgL>?k5H9I0Edau4<(H zP?NKT1Uk)T6yZb>Nz9!n@L@gf8Dxe+S5hM=B!XF@?pBjk%^gKpjWFHv=!6Cq9*078 z5USRGk>xea5UXTV49*eNPx9QGc=yMsws0eu*GSb$kcG#l=Sp9yxO8$UZHz9H=S`qL7bLVCl*@CQB4PNTHeo@3)Qp}r{xJ{k9Ok37^P74abqZZ zG>H>OHC>65M-;J6oH(lKN}Rl1d4xTh#EGYx3BPY9lQ{8IGw*k2dLd4K0apClvb@ui Q4FCWD07*qoM6N<$f-ao5F8}}l literal 0 HcmV?d00001 diff --git a/_images/math/dc6b89f519c7015310fff873255c4b350e27e3ff.png b/_images/math/dc6b89f519c7015310fff873255c4b350e27e3ff.png deleted file mode 100644 index 9e0b074823761cb63d2a55a6499a9fdff329e3f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)Pz($VKtMp|=H?k+DUWCEyxZ@Bvab zfejBC_mzJlJptV0yh>226w1{$^t-lTGEQ;ygynE8X-yu)P3sN@k$~o&=3^hpp!i4@ zq^a3TRuF7b{Nq~myA=OXi+oXe?G2#F8sD3KH$Dd2( YCmNMyB=c1lpa1{>07*qoM6N<$g5O8XYybcN diff --git a/_images/math/dce70a42234963b21c52f4dbf547d7630dcb1cba.png b/_images/math/dce70a42234963b21c52f4dbf547d7630dcb1cba.png deleted file mode 100644 index 4dcb8134467c7278335aec9573ead6ae4c07bcf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2082 zcmV+-2;KLIP)hwyebdxY7zK1S6(qVQhri2f>(F zmXUX&SW2+bgjg+Ei(rk&k))C}9TTC@!VMw%Aq|2A`DYf1sQl6SxO4CMxN|?J%l*;2 z?9Aod_r2%LbIy6s^PF=5VzJw-t5R?L)}&E4AU@NMS(i^iVywLoUtL{A>+=5OAfSB| zUtI_6%ZHMK04y=$s!1QPud4|{AX|xT5|opPfIdI2nqIdrm2!d*fKwr2-ac}2d}TGD z$5Hz-T}%=JrO^;Umr*}ff_bRSV9VB%gg`FLoa{&cL%}?9mze7$0RWkS;4$g|63ptwUg2@U&DKRZ%uqa1QN6yb?V?uey0)8)WY8_jtbYMh!8@M)bSr>n3-9 z(GutwhK2ZYq6G-dm=iP~05n4}RJeiHG#$-(^t}nUM7fA4u%fr3 zF3lK=r-Z8+pM$+e^sB*_roU&eVL_qMsBaNX0D$QbV!O3PdEU0(ot!NnmWj_1_ z@1dt;##+IzGyOp$KAb&%;E0jKJ!pKTO`W|__qJ+n! zkaefX__)eO%LsI%*`KLussY{hp3|7yk921sd(9DFV;W za#)ru4@?P*G6L<4D7%Y}Rzt^gQtx4-5d!M*72E=jKep`74Z&hsfRc>%(r!0~=8C}Y zB>SQkri6qn7NtcQnSs=h$$Oe58RCI#ACt6iH^1-E?XnGY-sA~IePPgGq8CcYPJc}= zim;UWp#gTMYa&m%CW_C=C^ZyN_;RU8LSU?;%Y%_v9>*C3Hk#<{ydfgcU4VW5pRX0m zG|A+U*T?S3&Xs~pyHy74__wOw1qjZVi3?Pru4CUYh>ig$O!2$l-hzmz6T?KIXxwri?Mt< zhc2$+x*E-&Wbbgo%WPa0ttUD!3}_LnKUy#bvS#Kc(uWn#<`~F?lKp!D_DCd??1Ed( zuQe53X5%``v~|oZphc|yXh9x$49mnkl|F1QG!WP#F3EoLz%q$sDroB0t>)L73NM@o z5CSvk$1NB34M-8IKcXODt_9O3A;Qv!?FAD7<;$mcg^{;)I3$zIW00;ln$NF>obaNV zuw#1l_!@r8)GT84M-&7oBg$;cQv|T|VSAy$2YP#Fhj@6p01LhqNG8Bv>mRk6pDH#H zUiNC(%vk-A$wx*2Z%DmqN*}ft;KcxnMDoz8pr8GOCz*WnyP69x4+J><5yjTh?rAI2 zmj|%)VSB+tk$8EafutXW^squ{4=xYvkntB7N9i@K7XP9$Ep?yXwuGpXOu}FT7B+ zNA9uohYPXxzHjak;VrqUgLw8(Bq2Q9nlA`1WuC__T0?)h5Nq%IZSeZJt{4*M7CL6JC|7s#3=igjKJ z9>Wo92LwdojmE8+ZBF|*Iu{g)0|K&UiDIP?hYlREc0fQR-pD>PnUUd*fS^bm5Rf%X zB(4$yM21*9o|uTl8`<3^Hlv;|5Ace_>BPiAvqZ7OA!0aU?Jx#b$&_z~wzM>~!)G0q zB5@c4vSx{5*F(f`#M%J?k$8jkzEXE(zrQMMMbZp`R%sTcFL(@3tmP9EiFkwczEbW| z)n_G^B9Tu_TB}*IA(jH3Sj#6SBJn16jZWd70QFHtvhY9FENv0qF84Yy;qE^``B&et z@5j4Pdfy&C?1>1mUMD8p{Z0b4GU$IV)P>Uf_V8i9K}@F7q}V$O$+A>6wyMsN&m%^{ z5ZD{vE57d#>h)v70D$xHRizNl@Ilfh!ElU~k)wd^2}9r}{BPL)1YqAo>RbX92?%6e$G;Zjcm@0>i-z47tcM zJP8c0AexDR!I6RC29RMA29;vsTUP*O{sNQX44n)P3{cf8pi+}T1j_;jZk-EYelG(< z3DjsY5XtGlz-0^(04fNEu$Tov03lW_Vx5H!k literal 0 HcmV?d00001 diff --git a/_images/math/e11d5b4233cfcb148da95272d25a97c69e14f88e.png b/_images/math/e11d5b4233cfcb148da95272d25a97c69e14f88e.png deleted file mode 100644 index 450272c275306190c93181ebec575a5e35271e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)6J2}^B3+uQOWrt+j7xdurfh_L<3l&au zaAH6up>SAuXS=qE$dkmqnl}&^(bSr-rj0uHENqHLvA^_twoj|p@E!}%;v%^M68!Pz zVCy!21h9Y>RVjIij3!j4L-?dM$OpIQ&s}J>>-qY%^bRJ;5h-E?Z1Aiuo;QqomYoanz}AW~)TnLgzBbKyrC0C(fm%y|K$2Nz?mZ zBlk@x5`WYMsRno411bG3m|Bx`Ay>WR$FNVa$^V|lP_^d~Qi5pBbjxJA?SuISiA!Sc T!0009N zNklC1yvReGPl*XRC_yd(<549`eU#qs@K@<RTy5TS!buw*JuB zTYz)e(`u!-kN#Me!H7kh1WMVuXi=@u$!QZhKFYT2llM#g+(!h^W0{DEB*p$aO8j-L zVF?rR^gLj@3%uh#Qn4&)Gs3sZ2ERG4yZ!h>WdP_5e))RfT8(^6#kk8Y zGJ)hB?t=mG(;O8CJ0EEx3yVZ6&Ditelu`Y0rpDiLdRNz?9EoDiQN+Ved*60?RC00*uLcTVuGDUF_|tZ*wBi7oh1m%!wO7x-r03uERYK zl7C3}2ej32$OAHYAoJ)Z$GI%C^x(B;+$Z6C!D}jE`jIf-m$+|on5`Q*$_ko&500Kf zPa_gRjE&K2Wn@i@;MzbDYb< zs(37sGsIffDm$>I7TEsNvdEE46LZ;;BPm-)Q07$}JjmApmvzepjt?%^M4GP`4sx8! z!m?p`>edZu)%LHxwbZ&%focaMVcVLhzLGl_(?{?HINH298*H5J@qp&+GYO}^usP0U zQHmiAzNi(&BYMjD*-DS0z}z96Wq*-y3A>LT3=qNL>=if}$l)J>_y)g_Ofs%-J} fozaoxV_5zI#CP6io&<44 zJn3Q49>j_iL8u2IhoX23R6H3G#e-m_ASvj@ob>9<>^9k%%#KaA^TU$KyzJ!9?0fIa z0KIxRGw~4${V$$gD9M__ZXV(V{o;=svhx|O`* zgFYSnA=eXl*MYXw0T&0>qUl%3E9Rp*_V;GM8m1+1+~34dBXn@{u%8%*9i@S_rl{}m zGe&K14sIL?AE=FN8DZy9#NkBlvVo$>H53kv>C=-{>1~x#Ub$;g{2(oZ0Pk{q^a7mN zvhBD7fh%WkyS9A)0_Uf4ucA10knzn?Av%uPSZxf)9SB^ht-_#t^yNI!r2)FfJ#yWG z%_l2zZLFdTkByjv9xahtpOP+wvWS}2D5+F?g&9$Vy3N#PKFgwS0#7xy3z0!pT=Rn|!v4+R#Na`au zhTlT(U#gbcZU-KGHO9Ge*F(uAnUF??i_*)9GspPZU!RUH)H?8pdPU?Q&XsGdWM8Lp zU^bBNZALE;heya_qJk1`oqia7DKia8ZOPXOzqG)Y%I>`V2`pqoR%mg`Bxchjqz`MWl`f zG0s@0=+Kv)SOn^55aWzvB%W9V>Sz$-%>4=(O;x2Q7M?o$uaGl8NUhqHZJ7g}IvNym zrb&BEaYc4w;i;oRA!peCs=P1T1D-lM4z9FQ*$p%2(SIKj2RwDOv;(T;M@|`wvJ(qW z9Uba$Ccw1p#KKcYr_5k`eNgJ`k8FGh2Bl6P`Ump^61zS8IG_Lk002ovPDHLkV1juh BwrBtV literal 0 HcmV?d00001 diff --git a/_images/math/f02389d958251c37b8f71f21654e1cb959da7f67.png b/_images/math/f02389d958251c37b8f71f21654e1cb959da7f67.png new file mode 100644 index 0000000000000000000000000000000000000000..80bb61a5d0b54e28f69bb11fe80377dfe129debe GIT binary patch literal 443 zcmV;s0Yv_ZP)9r6FG*_~p&;D?Q9)dS-JBv(2N&a@)I~c8f*>S=&_xiWL)T6Y zDwTqB#4nJ+MGz4x1wo|v3A#CIE_q{$pxpZo_wc*t4({auzLH-eP7`;y=T-Nx#9?hz zRvtqYYaD7Rf^-Uea;Os~genw|L)`?F5nffmTD1-+>()^3l!% zg|{B`;W49&`I%V^aL!nCmkCAn%S=hS{(#)Gf2O<}cT(>;j?sAO=(D92H(?(B{2@C|otN@PL;&Vm2{002ovPDHLkV1lq*wiW;Y literal 0 HcmV?d00001 diff --git a/_images/math/f2f37b880c28c0f79ccc57bc79ae3451936f2079.png b/_images/math/f2f37b880c28c0f79ccc57bc79ae3451936f2079.png new file mode 100644 index 0000000000000000000000000000000000000000..69e491249cc67d4ddf90236ff7694c904ed1e3ea GIT binary patch literal 417 zcmV;S0bc%zP)vio+2V5baZsKwzg1EP(VOH3=9lnVq!2bFcuaTUO9Iq0003j zNklB0LI$1- za1l0jBD5_B5pNhAC%{EKm?sd_ru_sI20{${3UF-+fgp0q}7_!OI*0hyaZOh9WQ26TQpzs6$lF?L@RE-CO00000 LNkvXXu0mjflRTs= literal 0 HcmV?d00001 diff --git a/_images/math/f3af838d0b24bf7dde42dba97b2fd24f2747e646.png b/_images/math/f3af838d0b24bf7dde42dba97b2fd24f2747e646.png new file mode 100644 index 0000000000000000000000000000000000000000..44645e09f8946e6a46984c3b1603e7702833d950 GIT binary patch literal 201 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 SWnk9;00006JK=O2UZ2PfEIm4n+C<6y^X0%9t{ Tr?1NibSHzStDnm{r-UW|F|Aws diff --git a/_images/math/fd02377eaf710d12e68cb7e0f4fc46f356fdefad.png b/_images/math/fd02377eaf710d12e68cb7e0f4fc46f356fdefad.png new file mode 100644 index 0000000000000000000000000000000000000000..9a13cc650ddcf4b6c3d6feae0ff5e5fce34bccc0 GIT binary patch literal 901 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 diff --git a/_images/math/ff75ae22d97a71b892653637c6d02bd25172ab30.png b/_images/math/ff75ae22d97a71b892653637c6d02bd25172ab30.png deleted file mode 100644 index c45df7780504bde00befd33e36c7c0c7599d3adb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1306 zcmV+#1?BpQP)_ir?kcF~&fGgQH)*G7D3Uo3 zH<{$*Kfk&6oaPSR2AwvwxEj(J5pkU_VvK4mz9o|iUIK#MX7a7`zJT79(5^I zx7%vx9JYsLqf`>&U37W*&EI>3o+|p9`k451lW%Eap{mHZZC2ykbKUgQJfoEN#AUjY zH~miL{2rmB=!>iS#D~-F%VB<~7>LP#c*XP=$1_Sq#>Hj2FU1?p+1xMgDY`3eeeac# zjNYMNZS#1et>#pu2MnM;!Gc>ZDLW&dRpv!c*ge zp{s4J7+=P`Rz?f^@D4|h;RSG2MMnR%^chVsOQ*j^-O`#+$~2^Xqa?@}dVo$l-o&W{ zeXloh4}J9mobZl#kZHr&nkL2%WPnuI=qWQ$JE z(u+`Rf^vp~o>B717v3|TZXu%|AOe`*#c*a3@YMsus*x;%%`p7c!v@WWf?xUwYqa?@}x%HiFaBug~MJ1Qogm@{J2CF8_RSJ%#x zcw+5m#MZv!s`m!bGnYPxe#L^D{`T616E|LEgRNS^D0yTIJxF(k3A_qi4myH-ABEm! zl8$Y)C4q}es@w?NwZoivcfOaqjDSb?fphH*cjIGA4JfH0HfZrod;lXy^7 z@6+|JNLw-^%St*(xOZt)y%{jQ)Hr+M5N3=}leD=VIz*ej)~D&^57+psPnMN*@Xz(m ziZ7^68&Uc4&-E((xTVtwn55}#(Z#LC9G`>T-D>z`S!_!e8Yht{gqozK-dl}5erB~k zxGUTUHA(3qzLTySp(aTgV)QRUO_Fd`!x-^$s7V@T^ht!8q#>?#+DXb`CTWP#-~9LY zYM4n9u4)M5-O + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + E1 + + E2 + + E3 + + E4 + + E5 + + E6 + + E7 + + E8 + UnionEnergy Grid + + 0 + NuclidePointers + + 0 + + 1 + + 1 + + 1 + + 2 + + 3 + + 3 + + + + + + + + + + E1 + + E2 + + E3 + NuclideEnergy Grid + + σ1 + + σ2 + + σ3 + NuclideCross Sections + + + + diff --git a/_sources/devguide/statepoint.txt b/_sources/devguide/statepoint.txt index ffcc3d9686..b001b13060 100644 --- a/_sources/devguide/statepoint.txt +++ b/_sources/devguide/statepoint.txt @@ -4,6 +4,227 @@ State Point Binary File Specifications ====================================== +---------- +Revision 6 +---------- + +**integer(4) REVISION_STATEPOINT** + + Revision of the binary state point file. Any time a change is made in the + format of the state-point file, this integer is incremented. + +**integer(4) VERSION_MAJOR** + + Major version number for OpenMC + +**integer(4) VERSION_MINOR** + + Minor version number for OpenMC + +**integer(4) VERSION_RELEASE** + + Release version number for OpenMC + +**character(19) time_stamp** + + Date and time the state point was written. + +**character(255) path** + + Absolute path to directory containing input files. + +**integer(8) seed** + + Pseudo-random number generator seed. + +**integer(4) run_mode** + + run mode used. The modes are described in constants.F90. + +**integer(8) n_particles** + + Number of particles used per generation. + +**integer(4) n_batches** + + Total number of batches (active + inactive). + +**integer(4) current_batch** + + The number of batches already simulated. + +if (run_mode == MODE_CRITICALITY) + + **integer(4) n_inactive** + + Number of inactive batches + + **integer(4) gen_per_batch** + + Number of generations per batch for criticality calculations + + *do i = 1, current_batch* + + **real(8) k_batch(i)** + + k-effective for the i-th batch + + *do i = 1, current_batch* + + **real(8) entropy(i)** + + Shannon entropy for the i-th batch + +**integer(4) n_meshes** + + Number of meshes in tallies.xml file + +*do i = 1, n_meshes* + + **integer(4) meshes(i) % id** + + Unique ID of mesh. + + **integer(4) meshes(i) % type** + + Type of mesh. + + **integer(4) meshes(i) % n_dimension** + + Number of dimensions for mesh (2 or 3). + + **integer(4) meshes(i) % dimension(:)** + + Number of mesh cells in each dimension. + + **real(8) meshes(i) % lower_left(:)** + + Coordinates of lower-left corner of mesh. + + **real(8) meshes(i) % upper_right(:)** + + Coordinates of upper-right corner of mesh. + + **real(8) meshes(i) % width(:)** + + Width of each mesh cell in each dimension. + +**integer(4) n_tallies** + +*do i = 1, n_tallies* + + **integer(4) tallies(i) % id** + + Unique ID of tally. + + **integer(4) tallies(i) % n_realizations** + + Number of realizations for the i-th tally. + + **integer(4) size(tallies(i) % scores, 1)** + + Total number of score bins for the i-th tally + + **integer(4) size(tallies(i) % scores, 2)** + + Total number of filter bins for the i-th tally + + **integer(4) tallies(i) % n_filters** + + *do j = 1, tallies(i) % n_filters* + + **integer(4) tallies(i) % filter(j) % type** + + Type of tally filter. + + **integer(4) tallies(i) % filter(j) % n_bins** + + Number of bins for filter. + + **integer(4)/real(8) tallies(i) % filter(j) % bins(:)** + + Value for each filter bin of this type. + + **integer(4) tallies(i) % n_nuclide_bins** + + Number of nuclide bins. If none are specified, this is just one. + + *do j = 1, tallies(i) % n_nuclide_bins* + + **integer(4) tallies(i) % nuclide_bins(j)** + + Values of specified nuclide bins + + **integer(4) tallies(i) % n_score_bins** + + Number of scoring bins. + + *do j = 1, tallies(i) % n_score_bins* + + **integer(4) tallies(i) % score_bins(j)** + + Values of specified scoring bins (e.g. SCORE_FLUX). + +**integer(4) n_realizations** + + Number of realizations for global tallies. + +**integer(4) N_GLOBAL_TALLIES** + + Number of global tally scores + +*do i = 1, N_GLOBAL_TALLIES* + + **real(8) global_tallies(i) % sum** + + Accumulated sum for the i-th global tally + + **real(8) global_tallies(i) % sum_sq** + + Accumulated sum of squares for the i-th global tally + +**integer(4) tallies_on** + + Flag indicated if tallies are present in the file. + +if (tallies_on > 0) + + *do i = 1, n_tallies* + + *do k = 1, size(tallies(i) % scores, 2)* + + *do j = 1, size(tallies(i) % scores, 1)* + + **real(8) tallies(i) % scores(j,k) % sum** + + Accumulated sum for the j-th score and k-th filter of the + i-th tally + + **real(8) tallies(i) % scores(j,k) % sum_sq** + + Accumulated sum of squares for the j-th score and k-th + filter of the i-th tally + +if (run_mode == MODE_CRITICALITY) + + *do i = 1, n_particles* + + **real(8) source_bank(i) % wgt** + + Weight of the i-th source particle + + **real(8) source_bank(i) % xyz(1:3)** + + Coordinates of the i-th source particle. + + **real(8) source_bank(i) % uvw(1:3)** + + Direction of the i-th source particle + + **real(8) source_bank(i) % E** + + Energy of the i-th source particle. + ---------- Revision 5 ---------- diff --git a/_sources/devguide/structures.txt b/_sources/devguide/structures.txt index aa22c40fe0..15777f6065 100644 --- a/_sources/devguide/structures.txt +++ b/_sources/devguide/structures.txt @@ -80,6 +80,71 @@ low-energy scattering, a :math:`S(\alpha,\beta)` can be associated with that material through the ``sab_table`` component. Again, this component contains the index in the ``sab_tables`` array from the `global module`_. +------- +Nuclide +------- + +The Nuclide derived type stores cross section and interaction data for a nucleus +and is defined in the `ace_header module`_. The ``energy`` component is an array +that gives the discrete energies at which microscopic cross sections are +tabulated. The actual microscopic cross sections are stored in a separate +derived type, Reaction. An arrays of Reactions is present in the ``reactions`` +component. There are a few summary microscopic cross sections stored in other +components, such as ``total``, ``elastic``, ``fission``, and ``nu_fission``. + +If a Nuclide is fissionable, the prompt and delayed neutron yield and energy +distributions are also stored on the Nuclide type. Many nuclides also have +unresolved resonance probability table data. If present, this data is stored in +the component ``urr_data`` of derived type UrrData. A complete description of +the probability table method is given in :ref:`probability_tables`. + +The list of nuclides present in a problem is stored in the ``nuclides`` array +defined in the `global module`_. + +---------- +SAlphaBeta +---------- + +The SAlphaBeta derived type stores :math:`S(\alpha,\beta)` data to account for +molecular binding effects when treating thermal scattering. Each SAlphaBeta +table is associated with a specific nuclide as identified in the ``zaid`` +component. A complete description of the :math:`S(\alpha,\beta)` treatment can +be found in :ref:`sab_tables`. + +--------- +XsListing +--------- + +The XsListing derived type stores information on the location of an ACE cross +section table based on the data in cross_sections.xml and is defined in the +`ace_header module`_. For each ```` you see in cross_sections.xml, +there is a XsListing with its information. When the user input is read, the +array ``xs_listings`` in the `global module`_ that is of derived type XsListing +is used to locate the ACE data to parse. + +-------------- +NuclideMicroXS +-------------- + +The NuclideMicroXS derived type, defined in the `ace_header module`_, acts as a +'cache' for microscopic cross sections. As a particle is traveling through +different materials, cross sections can be reused if the energy of the particle +hasn't changed. The components ``total``, ``elastic``, ``absorption``, +``fission``, and ``nu_fission`` represent those microscopic cross sections at +the current energy of the particle for a given nuclide. An array ``micro_xs`` in +the `global module`_ that is the same length as the ``nuclides`` array stores +these cached cross sections for each nuclide in the problem. + +--------------- +MaterialMacroXS +--------------- + +In addition to the NuclideMicroXS type, there is also a MaterialMacroXS derived +type, defined in the `ace_header module`_ that stored cached *macroscopic* cross +sections for the current material. These macroscopic cross sections are used for +both physics and tallying purposes. The variable ``material_xs`` in the `global +module`_ is of type MaterialMacroXS. + .. _derived types: http://nf.nci.org.au/training/FortranAdvanced/slides/slides.025.html .. _global module: https://github.com/mit-crpg/openmc/blob/master/src/global.F90 @@ -87,3 +152,4 @@ index in the ``sab_tables`` array from the `global module`_. .. _geometry_header module: https://github.com/mit-crpg/openmc/blob/master/src/geometry_header.F90 .. _constants module: https://github.com/mit-crpg/openmc/blob/master/src/constants.F90 .. _material_header module: https://github.com/mit-crpg/openmc/blob/master/src/material_header.F90 +.. _ace_header module: https://github.com/mit-crpg/openmc/blob/master/src/ace_header.F90 diff --git a/_sources/methods/cross_sections.txt b/_sources/methods/cross_sections.txt new file mode 100644 index 0000000000..c564896c79 --- /dev/null +++ b/_sources/methods/cross_sections.txt @@ -0,0 +1,94 @@ +.. _methods_cross_sections: + +============================ +Cross Section Representation +============================ + +The data governing the interaction of neutrons with various nuclei are +represented using the ACE format which is used by MCNP_ and Serpent_. ACE-format +data can be generated with the NJOY_ nuclear data processing system which +converts raw `ENDF/B data`_ into linearly-interpolable data as required by most +Monte Carlo codes. The use of a standard cross section format allows for a +direct comparison of OpenMC with other codes since the same cross section +libraries can be used. + +The ACE format contains continuous-energy cross sections for the following types +of reactions: elastic scattering, fission (or first-chance fission, +second-chance fission, etc.), inelastic scattering, :math:`(n,xn)`, +:math:`(n,\gamma)`, and various other absorption reactions. For those reactions +with one or more neutrons in the exit channel, secondary angle and energy +distributions may be provided. In addition, fissionable nuclides have total, +prompt, and/or delayed :math:`\nu` as a function of energy and neutron precursor +distributions. Many nuclides also have probability tables to be used for +accurate treatment of self-shielding in the unresolved resonance range. For +bound scatterers, separate tables with :math:`S(\alpha,\beta,T)` scattering law +data can be used. + +------------------- +Energy Grid Methods +------------------- + +The method by which continuous energy cross sections for each nuclide in a +problem are stored as a function of energy can have a substantial effect on the +performance of a Monte Carlo simulation. Since the ACE format is based on +linearly-interpolable cross sections, each nuclide has cross sections tabulated +over a wide range of energies. Some nuclides may only have a few points +tabulated (e.g. H-1) whereas other nuclides may have hundreds or thousands of +points tabulated (e.g. U-238). + +At each collision, it is necessary to sample the probability of having a +particular type of interaction whether it be elastic scattering, :math:`(n,2n)`, +level inelastic scattering, etc. This requires looking up the microscopic cross +sections for these reactions for each nuclide within the target material. Since +each nuclide has a unique energy grid, it would be necessary to search for the +appropriate index for each nuclide at every collision. This can become a very +time-consuming process, especially if there are many nuclides in a problem as +there would be for burnup calculations. Thus, there is a strong motive to +implement a method of reducing the number of energy grid searches in order to +speed up the calculation. + +Unionized Energy Grid +--------------------- + +The most naïve method to reduce the number of energy grid searches is to +construct a new energy grid that consists of the union of the energy points of +each nuclide and use this energy grid for all nuclides. This method is +computationally very efficient as it only requires one energy grid search at +each collision as well as one interpolation between cross section values since +the interpolation factor can be used for all nuclides. However, it requires +redundant storage of cross section values at points which were added to each +nuclide grid. This additional burden on memory storage can become quite +prohibitive. To lessen that burden, the unionized energy grid can be thinned +with cross sections reconstructed on the thinned energy grid. This method is +currently used by default in the Serpent Monte Carlo code. + +Unionized Energy Grid with Nuclide Pointers +------------------------------------------- + +While having a unionized grid that is used for all nuclides allows for very fast +lookup of cross sections, the burden on memory is in many circumstances +unacceptable. The OpenMC Monte Carlo code utilizes a method that allows for a +single energy grid search to be performed at every collision while avoiding the +redundant storage of cross section values. Instead of using the unionized grid +for every nuclide, the original energy grid of each nuclide is kept and a list +of pointers (of the same length as the unionized energy grid) is constructed for +each nuclide that gives the corresponding grid index on the nuclide grid for a +given grid index on the unionized grid. One must still interpolate on cross +section values for each nuclide since the interpolation factors will generally +be different. The figure below illustrates this method. All values within the +dashed box would need to be stored on a per-nuclide basis, and the union grid +would need to be stored once. This method is also referred to as *double +indexing* and is available as an option in Serpent (see paper by Leppanen_). + +.. figure:: ../../img/uniongrid.svg + :width: 600px + :align: center + :figclass: align-center + + Mapping of union energy grid to nuclide energy grid through pointers. + +.. _MCNP: http://mcnp.lanl.gov +.. _Serpent: http://montecarlo.vtt.fi +.. _NJOY: http://t2.lanl.gov/codes.shtml +.. _ENDF/B data: http://www.nndc.bnl.gov/endf +.. _Leppanen: http://dx.doi.org/10.1016/j.anucene.2009.03.019 diff --git a/_sources/methods/criticality.txt b/_sources/methods/eigenvalue.txt similarity index 84% rename from _sources/methods/criticality.txt rename to _sources/methods/eigenvalue.txt index 7959a58841..a5ba0bf459 100644 --- a/_sources/methods/criticality.txt +++ b/_sources/methods/eigenvalue.txt @@ -1,20 +1,20 @@ -.. _methods_criticality: +.. _methods_eigenvalue: -======================== -Criticality Calculations -======================== +======================= +Eigenvalue Calculations +======================= -A criticality calculation is a transport simulation wherein the source of -neutrons includes a fissionable material. Some common criticality calculations -include the simulation of nuclear reactors, spent fuel pools, nuclear weapons, -and other fissile systems. The term criticality calculation is also synonymous -with the term eigenvalue calculation. The reason for this is that the transport -equation becomes an eigenvalue equation if a fissionable source is present since -then the source of neutrons will depend on the flux of neutrons -itself. Criticality simulations using Monte Carlo methods are becoming -increasingly common with the advent of high-performance computing. +An eigenvalue calculation, also referred to as a criticality calculation, is a +transport simulation wherein the source of neutrons includes a fissionable +material. Some common eigenvalue calculations include the simulation of nuclear +reactors, spent fuel pools, nuclear weapons, and other fissile systems. The +reason they are called *eigenvalue* calculations is that the transport equation +becomes an eigenvalue equation if a fissionable source is present since then the +source of neutrons will depend on the flux of neutrons itself. Eigenvalue +simulations using Monte Carlo methods are becoming increasingly common with the +advent of high-performance computing. -This section will explore the theory behind and implementation of criticality +This section will explore the theory behind and implementation of eigenvalue calculations in a Monte Carlo code. .. _method-successive-generations: @@ -23,7 +23,7 @@ calculations in a Monte Carlo code. Method of Successive Generations -------------------------------- -The method used to converge on the fission source distribution in a criticality +The method used to converge on the fission source distribution in an eigenvalue calculation, known as the method of successive generations, was first introduced by [Lieberoth]_. In this method, a finite number of neutron histories, :math:`N`, are tracked through their lifetime iteratively. If fission occurs, @@ -48,7 +48,7 @@ source distribution converges, tallies should not be scored to since they will otherwise include contributions from an unconverged source distribution. The method by which the fission source iterations are parallelized can have a -large impact on the achiable parallel scaling. This topic is discussed at length +large impact on the achievable parallel scaling. This topic is discussed at length in :ref:`fission-bank-algorithms`. ------------------------- @@ -74,7 +74,7 @@ finite set of coordinates in Euclidean space. In order to analyze the convergence, we would either need to use a method for assessing convergence of an N-dimensional quantity or transform our set of coordinates into a scalar metric. The latter approach has been developed considerably over the last decade -and a method now commonly used in Monte Carlo criticality calculations is to use +and a method now commonly used in Monte Carlo eigenvalue calculations is to use a metric called the `Shannon entropy`_, a concept borrowed from information theory. diff --git a/_sources/methods/geometry.txt b/_sources/methods/geometry.txt index 7b70c1d305..e9f1e09547 100644 --- a/_sources/methods/geometry.txt +++ b/_sources/methods/geometry.txt @@ -11,12 +11,13 @@ Constructive Solid Geometry OpenMC uses a technique known as `constructive solid geometry`_ (CSG) to build arbitrarily complex three-dimensional models in Euclidean space. In a CSG model, every unique object is described as the union, intersection, or difference of -half-spaces created by bounding `surfaces`_. Every surface divides all of space -into exactly two half-spaces. We can mathematically define a surface as a +*half-spaces* created by bounding `surfaces`_. Every surface divides all of +space into exactly two half-spaces. We can mathematically define a surface as a collection of points that satisfy an equation of the form :math:`f(x,y,z) = 0` -where :math:`f(x,y,z)` is a given function. The region for which :math:`f(x,y,z) -< 0` can be called the negative half-space (or simply the "negative side") and -the region for which :math:`f(x,y,z) > 0` can be called the positive half-space. +where :math:`f(x,y,z)` is a given function. All coordinates for which +:math:`f(x,y,z) < 0` are referred to as the negative half-space (or simply the +*negative side*) and coordinates for which :math:`f(x,y,z) > 0` are referred to +as the positive half-space. Let us take the example of a sphere centered at the point :math:`(x_0,y_0,z_0)` with radius :math:`R`. One would normally write the equation of the sphere as @@ -41,28 +42,77 @@ One can confirm that any point inside this sphere will correspond to In OpenMC, every surface defined by the user is assigned an integer to uniquely identify it. We can then refer to either of the two half-spaces created by a surface by a combination of the unique ID of the surface and a positive/negative -sign. For example, to refer to the negative half-space of a sphere (the volume -inside the sphere) with unique ID 35, the reference would be -35. These -references to half-spaces are used in created regions in space of homogeneous -material, known as "cells". - +sign. The following illustration shows an example of an ellipse with unique ID 1 +dividing space into two half-spaces. .. figure:: ../../img/halfspace.svg :align: center :figclass: align-center + + Example of an ellipse and its associated half-spaces. + +References to half-spaces created by surfaces are used to define regions of +space of uniform composition, known as *cells*. While some codes allow regions +to be defined by intersections, unions, and differences or half-spaces, OpenMC +is currently limited to cells defined only as intersections of +half-spaces. Thus, the specification of the cell must include a list of +half-space references whose intersection defines the region. The region is then +assigned a material defined elsewhere. The following illustration shows an +example of a cell defined as the intersection of an ellipse and two planes. .. figure:: ../../img/union.svg :align: center :figclass: align-center -In OpenMC, any second-order surface of the form + The shaded region represents a cell bounded by three surfaces. -.. math:: +The ability to form regions based on bounding quadratic surfaces enables OpenMC +to model arbitrarily complex three-dimensional objects. In practice, one is +limited only by the different surface types available in OpenMC. The following +table lists the available surface types, the identifier used to specify them in +input files, the corresponding surface equation, and the input parameters needed +to fully define the surface. - f(x,y,z) = Ax^2 + By^2 + Cz^2 + Dxy + Eyz + Fxz + Gx + Hy + Jz + K = 0 +.. table:: Surface types available in OpenMC. -can be modeled in OpenMC. For example, the equation for a sphere centered at -:math:`(\bar{x},\bar{y},\bar{z})` and of radius :math:`R` can be written as + +----------------------+------------+------------------------------+-------------------------+ + | Surface | Identifier | Equation | Parameters | + +======================+============+==============================+=========================+ + | Plane perpendicular | x-plane | :math:`x - x_0 = 0` | :math:`x_0` | + | to :math:`x`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Plane perpendicular | y-plane | :math:`x - x_0 = 0` | :math:`y_0` | + | to :math:`y`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Plane perpendicular | z-plane | :math:`x - x_0 = 0` | :math:`z_0` | + | to :math:`z`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Arbitrary plane | plane | :math:`Ax + By + Cz = D` | :math:`A\;B\;C\;D` | + +----------------------+------------+------------------------------+-------------------------+ + | Infinite cylinder | x-cylinder | :math:`(y-y_0)^2 + (z-z_0)^2 | :math:`y_0\;z_0\;R` | + | parallel to | | = R^2` | | + | :math:`x`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Infinite cylinder | y-cylinder | :math:`(x-x_0)^2 + (z-z_0)^2 | :math:`x_0\;z_0\;R` | + | parallel to | | = R^2` | | + | :math:`y`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Infinite cylinder | z-cylinder | :math:`(x-x_0)^2 + (y-y_0)^2 | :math:`x_0\;y_0\;R` | + | parallel to | | = R^2` | | + | :math:`z`-axis | | | | + +----------------------+------------+------------------------------+-------------------------+ + | Sphere | sphere | :math:`(x-x_0)^2 + (y-y_0)^2 | :math:`x_0 \; y_0 \; | + | | | + (z-z_0)^2 = R^2` | z_0 \; R` | + +----------------------+------------+------------------------------+-------------------------+ + | Cone parallel to the | x-cone | :math:`(y-y_0)^2 + (z-z_0)^2 | :math:`x_0 \; y_0 \; | + | :math:`x`-axis | | = R^2(x-x_0)^2` | z_0 \; R^2` | + +----------------------+------------+------------------------------+-------------------------+ + | Cone parallel to the | y-cone | :math:`(x-x_0)^2 + (z-z_0)^2 | :math:`x_0 \; y_0 \; | + | :math:`y`-axis | | = R^2(y-y_0)^2` | z_0 \; R^2` | + +----------------------+------------+------------------------------+-------------------------+ + | Cone parallel to the | z-cone | :math:`(x-x_0)^2 + (y-y_0)^2 | :math:`x_0 \; y_0 \; | + | :math:`z`-axis | | = R^2(z-z_0)^2` | z_0 \; R^2` | + +----------------------+------------+------------------------------+-------------------------+ .. _universes: @@ -75,13 +125,12 @@ structures once and then fill them in various spots in the geometry. A prototypical example of a repeated structure would be a fuel pin within a fuel assembly or a fuel assembly within a core. -Each closed volume, or cell, in OpenMC can either be filled with a normal -material or with a universe. If the cell is filled with a univese, only the -region of the universe that is within the defined boundaries of the parent cell -will be present in the geometry. That is to say, even though a collection of -cells in a universe may extend to infinity, not all of the universe will be -"visible" in the geometry since it will be truncated by the boundaries of the -cell that contains it. +Each cell in OpenMC can either be filled with a normal material or with a +universe. If the cell is filled with a universe, only the region of the universe +that is within the defined boundaries of the parent cell will be present in the +geometry. That is to say, even though a collection of cells in a universe may +extend to infinity, not all of the universe will be "visible" in the geometry +since it will be truncated by the boundaries of the cell that contains it. When a cell is filled with a universe, it is possible to specify that the universe filling the cell should be rotated and translated. This is done through @@ -91,7 +140,7 @@ a material). It is not necessary to use or assign universes in a geometry if there are no repeated structures. Any cell in the geometry that is not assigned to a -specified universe is automatically part of the "base" universe whose +specified universe is automatically part of the *base universe* whose coordinates are just the normal coordinates in Euclidean space. Lattices @@ -103,7 +152,7 @@ for a user to have to define the boundaries of each of the cells to be filled with a universe. Thus, OpenMC provides a lattice capability similar to that used in MCNP_ and Serpent_. -The implementation of lattices is similar in principle to universes -- instead +The implementation of lattices is similar in principle to universes --- instead of a cell being filled with a universe, the user can specify that it is filled with a finite lattice. The lattice is then defined by a two-dimensional array of universes that are to fill each position in the lattice. A good example of the @@ -127,17 +176,19 @@ necessary to check the distance to the surfaces bounding the cell in each level. This should be done starting the highest (most global) level going down to the lowest (most local) level. That ensures that if two surfaces on different levels are coincident, by default the one on the higher level will be selected -as the nearest surface. +as the nearest surface. Although they are not explicitly defined, it is also +necessary to check the distance to surfaces representing lattice boundaries if a +lattice exists on a given level. The following procedure is used to calculate the distance to each bounding -surface. Suppose we have a particle at :math:`(x,y,z)` traveling in the -direction :math:`u,v,w`. To find the distance :math:`d` to a surface +surface. Suppose we have a particle at :math:`(x_0,y_0,z_0)` traveling in the +direction :math:`u_0,v_0,w_0`. To find the distance :math:`d` to a surface :math:`f(x,y,z) = 0`, we need to solve the equation: .. math:: :label: dist-to-boundary-1 - f(x + du, y + dv, z + dw) = 0 + f(x_0 + du_0, y_0 + dv_0, z_0 + dw_0) = 0 If no solutions to equation :eq:`dist-to-boundary-1` exist or the only solutions are complex, then the particle's direction of travel will not intersect the @@ -147,6 +198,15 @@ traveling in its current direction, it will not hit the surface. The complete derivation for different types of surfaces used in OpenMC will be presented in the following sections. +Since :math:f(x,y,z)` in general is quadratic in :math:`x`, :math:`y`, and +:math:`z`, this implies that :math:`f(x_0 + du_0, y + dv_0, z + dw_0)` is +quadratic in :math:`d`. Thus we expect at most two real solutions to +:eq:`dist-to-boundary-1`. If no solutions to :eq:`dist-to-boundary-1` exist or +the only solutions are complex, then the particle's direction of travel will not +intersect the surface. If the solution to :eq:`dist-to-boundary-1` is negative, +this means that the surface is "behind" the particle, i.e. if the particle +continues traveling in its current direction, it will not hit the surface. + Once a distance has been computed to a surface, we need to check if it is closer than previously-computed distances to surfaces. Unfortunately, we cannot just use the minimum function because some of the calculated distances, which should @@ -165,10 +225,6 @@ the minimum distance found thus far, and :math:`\epsilon` is a small number. In OpenMC, this parameter is set to :math:`\epsilon = 10^{-14}` since all floating calculations are done on 8-byte floating point numbers. -Although they are not explicitly defined, it is also necessary to check the -distance to surfaces representing lattice boundaries if a lattice exists on a -given level. - Plane Perpendicular to an Axis ------------------------------ @@ -303,6 +359,8 @@ will then be either both positive or both negative. If they are both positive, the smaller (closer) one will be the solution with a negative sign on the square root of the discriminant. +.. TODO: Need to add derivation for x-cone, y-cone, and z-cone. + .. _find-cell: ---------------------------- @@ -314,7 +372,7 @@ global coordinate system, i.e. if the particle's position is :math:`(x,y,z)`, what cell is it currently in. This is done in the following manner in OpenMC. With the possibility of multiple levels of coordinates, we must perform a recursive search for the cell. First, we start in the highest (most global) -universe which we call the base universe and do a loop over each cell within +universe, which we call the base universe, and loop over each cell within that universe. For each cell, we check whether the specified point is inside the cell using the algorithm described in :ref:`cell-contains`. If the cell is filled with a normal material, the search is done and we have identified the @@ -331,30 +389,27 @@ is found that contains the specified point. Determining if a Coordinate is in a Cell ---------------------------------------- -One aspect of being able to determine what cell a particle is in is determining -if a particle's coordinates lie within a given cell. The current geometry -implementation in OpenMC limits all cells to being simple cells, i.e. they are -defined only with intersection of half-spaces and not unions, differences, -etc. This makes the job of determining if a point is in a cell quite simple. - -The algorithm for determining if a cell contains a point is as follows. For each -surface that bounds a cell, we determine the particle's sense with respect to -the surface. As explained earlier, if we have a point :math:`(x_0,y_0,z_0)` and -a surface :math:`f(x,y,z) = 0`, the point is said to have negative sense if +To determine which cell a particle is in given its coordinates, we need to be +able to check whether a given cell contains a point. The algorithm for +determining if a cell contains a point is as follows. For each surface that +bounds a cell, we determine the particle's sense with respect to the surface. As +explained earlier, if we have a point :math:`(x_0,y_0,z_0)` and a surface +:math:`f(x,y,z) = 0`, the point is said to have negative sense if :math:`f(x_0,y_0,z_0) < 0` and positive sense if :math:`f(x_0,y_0,z_0) > 0`. If for all surfaces, the sense of the particle with respect to the surface matches the specified sense that defines the half-space within the cell, then the point -is inside the cell. +is inside the cell. Note that this algorithm works only for *simple cells* +defined as intersections of half-spaces. -Let us illustrate this idea with a concept. Let's say we have a cell defined as +It may help to illustrate this algorithm using a simple example. Let's say we +have a cell defined as .. code-block:: xml - - + This means that the cell is defined as the intersection of the negative half space of a sphere, the positive half-space of an x-plane, and the negative @@ -368,9 +423,9 @@ satisfy the following equations x - (-3) > 0 \\ x - 2 < 0 -So in order to determine if a point is inside the cell, we would plug its -coordinates into equation :eq:`cell-contains-example` and if the inequalities -are satisfied, than the point is indeed inside the cell. +In order to determine if a point is inside the cell, we would substitute its +coordinates into equation :eq:`cell-contains-example`. If the inequalities are +satisfied, than the point is indeed inside the cell. -------------------------- Handling Surface Crossings @@ -390,9 +445,9 @@ travel of the particle so that we can evaluate cross sections based on its material properties. At initialization, a list of neighboring cells is created for each surface in the problem as described in :ref:`neighbor-lists`. The algorithm outlined in :ref:`find-cell` is used to find a cell containing the -particle except rather than searching all cells in the base universe, only the -list of neighboring cells is searched. If this search is unsuccessful, then a -search is done over every cell in the base universe. +particle with one minor modification; rather than searching all cells in the +base universe, only the list of neighboring cells is searched. If this search is +unsuccessful, then a search is done over every cell in the base universe. .. _neighbor-lists: @@ -401,15 +456,15 @@ Building Neighbor Lists ----------------------- After the geometry has been loaded and stored in memory from an input file, -OpenMC builds a list for each surface containing any cells that contain the -surface in their specification in order to speed up processing of surface -crossings. The algorithm to build these lists is as follows. First, we loop over -all cells in the geometry and count up how many times each surface appears in a -specification as bounding a negative half-space and bounding a positive -half-space. Two arrays are then allocated for each surface, one that lists each -cell that contains the negative half-space of the surface and one that lists -each cell that contains the positive half-space of the surface. Another loop is -performed over all cells and the neighbor lists are populated for each surface. +OpenMC builds a list for each surface containing any cells that are bounded by +that surface in order to speed up processing of surface crossings. The algorithm +to build these lists is as follows. First, we loop over all cells in the +geometry and count up how many times each surface appears in a specification as +bounding a negative half-space and bounding a positive half-space. Two arrays +are then allocated for each surface, one that lists each cell that contains the +negative half-space of the surface and one that lists each cell that contains +the positive half-space of the surface. Another loop is performed over all cells +and the neighbor lists are populated for each surface. .. _reflection: @@ -432,9 +487,9 @@ point of the surface crossing. The rationale for this can be understood by noting that :math:`(\mathbf{v} \cdot \hat{\mathbf{n}}) \hat{\mathbf{n}}` is the projection of the velocity vector onto the normal vector. By subtracting two times this projection, the velocity is reflected with respect to the surface -normal. Since the velocity of the particle will not change as it undergoes -reflection, we can work with the direction of the particle instead, simplifying -equation :eq:`reflection-v` to +normal. Since the magnitude of the velocity of the particle will not change as +it undergoes reflection, we can work with the direction of the particle instead, +simplifying equation :eq:`reflection-v` to .. math:: :label: reflection-omega @@ -442,10 +497,10 @@ equation :eq:`reflection-v` to \mathbf{\Omega'} = \mathbf{\Omega} - 2 (\mathbf{\Omega} \cdot \hat{\mathbf{n}}) \hat{\mathbf{n}} - -The direction of the surface normal will be the gradient to the surface at the -point of crossing, i.e. :math:`\mathbf{n} = \nabla f(x,y,z)`. Substituting this -into equation :eq:`reflection-omega`, we get +where :math:`\mathbf{v} = || \mathbf{v} || \mathbf{\Omega}`. The direction of +the surface normal will be the gradient of the surface at the point of crossing, +i.e. :math:`\mathbf{n} = \nabla f(x,y,z)`. Substituting this into equation +:eq:`reflection-omega`, we get .. math:: :label: reflection-omega-2 @@ -471,8 +526,8 @@ series of equations: w' = w - \frac{2 ( \mathbf{\Omega} \cdot \nabla f )}{|| \nabla f ||^2} \frac{\partial f}{\partial z} -We can now use this form to develop rules for how to transform a particle's -direction for different types of surfaces. +One can then use equation :eq:`reflection-system` to develop equations for +transforming a particle's direction given the equation of the surface. Plane Perpendicular to an Axis ------------------------------ @@ -523,7 +578,8 @@ Cylinder Parallel to an Axis A cylinder parallel to, for example, the x-axis has the form :math:`f(x,y,z) = (y - y_0)^2 + (z - z_0)^2 - R^2 = 0`. Thus, the gradient to the surface is -.. math:: :label: reflection-cylinder-grad +.. math:: + :label: reflection-cylinder-grad \nabla f = 2 \left ( \begin{array}{c} 0 \\ y - y_0 \\ z - z_0 \end{array} \right ) = 2 \left ( \begin{array}{c} 0 \\ \bar{y} \\ \bar{z} \end{array} @@ -532,13 +588,15 @@ A cylinder parallel to, for example, the x-axis has the form :math:`f(x,y,z) = where we have introduced the constants :math:`\bar{y}` and :math:`\bar{z}`. Taking the square of the norm of the gradient, we find that -.. math:: :label: reflection-cylinder-norm +.. math:: + :label: reflection-cylinder-norm || \nabla f ||^2 = 4 \bar{y}^2 + 4 \bar{z}^2 = 4 R^2 This implies that -.. math:: :label: reflection-cylinder-constant +.. math:: + :label: reflection-cylinder-constant \frac{2 (\mathbf{\Omega} \cdot \nabla f)}{|| \nabla f ||^2} = \frac{\bar{y}v + \bar{z}w}{R^2} @@ -548,7 +606,8 @@ Substituting equations :eq:`reflection-cylinder-constant` and the form of the solution. In this case, the x-component will not change. The y- and z-components of the reflected direction will be -.. math:: :label: reflection-cylinder +.. math:: + :label: reflection-cylinder v' = v - \frac{2 ( \bar{y}v + \bar{z}w ) \bar{y}}{R^2} \\ @@ -561,7 +620,8 @@ Sphere The surface equation for a sphere has the form :math:`f(x,y,z) = (x - x_0)^2 + (y - y_0)^2 + (z - z_0)^2 - R^2 = 0`. Thus, the gradient to the surface is -.. math:: :label: reflection-sphere-grad +.. math:: + :label: reflection-sphere-grad \nabla f = 2 \left ( \begin{array}{c} x - x_0 \\ y - y_0 \\ z - z_0 \end{array} \right ) = 2 \left ( \begin{array}{c} \bar{x} \\ \bar{y} \\ @@ -570,13 +630,15 @@ The surface equation for a sphere has the form :math:`f(x,y,z) = (x - x_0)^2 + where we have introduced the constants :math:`\bar{x}, \bar{y}, \bar{z}`. Taking the square of the norm of the gradient, we find that -.. math:: :label: reflection-sphere-norm +.. math:: + :label: reflection-sphere-norm || \nabla f ||^2 = 4 \bar{x}^2 + 4 \bar{y}^2 + 4 \bar{z}^2 = 4 R^2 This implies that -.. math:: :label: reflection-sphere-constant +.. math:: + :label: reflection-sphere-constant \frac{2 (\mathbf{\Omega} \cdot \nabla f)}{|| \nabla f ||^2} = \frac{\bar{x}u + \bar{y}v + \bar{z}w}{R^2} @@ -585,14 +647,16 @@ Substituting equations :eq:`reflection-sphere-constant` and :eq:`reflection-sphere-grad` into equation :eq:`reflection-system` gives us the form of the solution: -.. math:: :label: reflection-sphere +.. math:: + :label: reflection-sphere u' = u - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{x} }{R^2} \\ v' = v - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{y} }{R^2} \\ - w' = w - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{z} }{R^2} \\ + w' = w - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{z} }{R^2} +.. TODO: Add in derivation for cone surfaces. .. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry .. _surfaces: http://en.wikipedia.org/wiki/Surface diff --git a/_sources/methods/index.txt b/_sources/methods/index.txt index 56de78a169..0ff4fb1988 100644 --- a/_sources/methods/index.txt +++ b/_sources/methods/index.txt @@ -9,9 +9,10 @@ Theory and Methodology :maxdepth: 3 introduction - criticality - statistics geometry + cross_sections + random_numbers physics tallies + eigenvalue parallelization diff --git a/_sources/methods/introduction.txt b/_sources/methods/introduction.txt index 806ed9b371..508ac99193 100644 --- a/_sources/methods/introduction.txt +++ b/_sources/methods/introduction.txt @@ -45,13 +45,13 @@ following steps: - Initialize the pseudorandom number generator. - - Read ACE format cross-sections specified in the problem. + - Read ACE format cross sections specified in the problem. - If using a special energy grid treatment such as a union energy grid or lethargy bins, that must be initialized as well. - In a fixed source problem, source sites are sampled from the specified - source. In a criticality problem, source sites are sampled from some initial + source. In an eigenvalue problem, source sites are sampled from some initial source distribution or from a source file. The source sites consist of coordinates, a direction, and an energy. @@ -64,15 +64,15 @@ proceed. The life of a single particle will proceed as follows: 2. Based on the particle's coordinates, the current cell in which the particle resides is determined. - 3. The energy-dependent cross-sections for the material that the particle is + 3. The energy-dependent cross sections for the material that the particle is currently in are determined. Note that this includes the total - cross-section, which is not pre-calculated. + cross section, which is not pre-calculated. 4. The distance to the nearest boundary of the particle's cell is determined based on the bounding surfaces to the cell. 5. The distance to the next collision is sampled. If the total material - cross-section is :math:`\Sigma_t`, this can be shown to be + cross section is :math:`\Sigma_t`, this can be shown to be .. math:: @@ -88,7 +88,7 @@ proceed. The life of a single particle will proceed as follows: 7. The material at the collision site may consist of multiple nuclides. First, the nuclide with which the collision will happen is sampled based on the - total cross-sections. If the total cross section of material :math:`i` is + total cross sections. If the total cross section of material :math:`i` is :math:`\Sigma_{t,i}`, then the probability that any nuclide is sampled is .. math:: @@ -97,7 +97,7 @@ proceed. The life of a single particle will proceed as follows: 8. Once the specific nuclide is sampled, the random samples a reaction for that nuclide based on the microscopic cross sections. If the microscopic - cross-section for some reaction :math:`x` is :math:`\sigma_x` and the total + cross section for some reaction :math:`x` is :math:`\sigma_x` and the total microscopic cross section for the nuclide is :math:`\sigma_t`, then the probability that reaction :math:`x` will occur is @@ -106,8 +106,8 @@ proceed. The life of a single particle will proceed as follows: P(x) = \frac{\sigma_x}{\sigma_t}. 9. If the sampled reaction is elastic or inelastic scattering, the outgoing - energy and angle is sampled from the appropriate distribution. If the - reaction is (n,xn), it's also treated as scattering and the weight of the + energy and angle is sampled from the appropriate distribution. Reactions + of type :math:`(n,xn)` are treated as scattering and the weight of the particle is increased by the multiplicity of the reaction. The particle then continues from step 3. If the reaction is absorption or fission, the particle dies and if necessary, fission sites are created and stored in the @@ -121,7 +121,7 @@ be performed before the run is finished. This include the following: - All tallies and other results are written to disk. - - If requested, a source file is written to disk + - If requested, a source file is written to disk. - All allocatable arrays are deallocated. diff --git a/_sources/methods/physics.txt b/_sources/methods/physics.txt index 865329fee2..c79144dfe3 100644 --- a/_sources/methods/physics.txt +++ b/_sources/methods/physics.txt @@ -18,16 +18,15 @@ distribution function for the distance to its next collision :math:`\ell` is where :math:`\Sigma_t` is the total macroscopic cross section of the material. Equation :eq:`distance-pdf` tells us that the further the distance is -to the next collision, the less likely the particle will travel that distance, -which should agree with your intuition. In order to sample the probability -distribution function, we first need to convert it to a cumulative distribution -function +to the next collision, the less likely the particle will travel that +distance. In order to sample the probability distribution function, we first +need to convert it to a cumulative distribution function .. math:: :label: distance-cdf \int_0^{\ell} d\ell' p(\ell') = \int_0^{\ell} d\ell' \Sigma_t e^{-\Sigma_t - \ell'} = 1 - e^{-\Sigma_t \ell} + \ell'} = 1 - e^{-\Sigma_t \ell}. By setting the cumulative distribution function equal to :math:`\xi`, a random number on the unit interval, and solving for the distance :math:`\ell`, we @@ -36,7 +35,7 @@ obtain a formula for sampling the distance to next collision: .. math:: :label: sample-distance-1 - \ell = -\frac{\ln (1 - \xi)}{\Sigma_t} + \ell = -\frac{\ln (1 - \xi)}{\Sigma_t}. Since :math:`\xi` is uniformly distributed on :math:`[0,1)`, this implies that :math:`1 - \xi` is also uniformly distributed on :math:`[0,1)` as well. Thus, @@ -47,17 +46,242 @@ the formula usually used to calculate the distance to next collision is \ell = -\frac{\ln \xi}{\Sigma_t} +---------------------------------------------------- +:math:`(n,\gamma)` and Other Disappearance Reactions +---------------------------------------------------- + +All absorption reactions other than fission do not produce any secondary +neutrons. As a result, these are the easiest type of reactions to handle. When a +collision occurs, the first step is to sample a nuclide within a material. Once +the nuclide has been sampled, then a specific reaction for that nuclide is +sampled. Since the total absorption cross section is pre-calculated at the +beginning of a simulation, the first step in sampling a reaction is to determine +whether a "disappearance" reaction occurs where no secondary neutrons are +produced. This is done by sampling a random number :math:`\xi` on the interval +:math:`[0,1)` and checking whether + +.. math:: + :label: disappearance + + \xi \sigma_t (E) < \sigma_a (E) - \sigma_f (E) + +where :math:`\sigma_t` is the total cross section, :math:`\sigma_a` is the +absorption cross section (this includes fission), and :math:`\sigma_f` is the +total fission cross section. If this condition is met, then the neutron is +killed and we proceed to simulate the next neutron from the source bank. + +No secondary particles from disappearance reactions such as photons or +alpha-particles are produced or tracked. To truly capture the affects of gamma +heating in a problem, it would be necessary to explicitly track photons +originating from :math:`(n,\gamma)` and other reactions. + +------------------ +Elastic Scattering +------------------ + +Elastic scattering refers to the process by which a neutron scatters off a +nucleus and does not leave it in an excited. It is referred to as "elastic" +because in the center-of-mass system, the neutron does not actually lose +energy. However, in lab coordinates, the neutron does indeed lose +energy. Elastic scattering can be treated exactly in a Monte Carlo code thanks +to its simplicity. + +Let us discuss how OpenMC handles two-body elastic scattering kinematics. The +first step is to determine whether the target nucleus has any associated +motion. Above a certain energy threshold (400 kT by default), all scattering is +assumed to take place with the target at rest. Below this threshold though, we +must account for the thermal motion of the target nucleus. Methods to sample the +velocity of the target nucleus are described later in section +:ref:`freegas`. For the time being, let us assume that we have sampled the +target velocity :math:`\mathbf{v}_t`. The velocity of the center-of-mass system +is calculated as + +.. math:: + :label: velocity-com + + \mathbf{v}_{cm} = \frac{\mathbf{v}_n + A \mathbf{v}_t}{A + 1} + +where :math:`\mathbf{v}_n` is the velocity of the neutron and :math:`A` is the +atomic mass of the target nucleus measured in neutron masses (commonly referred +to as the *atomic weight ratio*). With the velocity of the center-of-mass +calculated, we can then determine the neutron's velocity in the center-of-mass +system: + +.. math:: + :label: velocity-neutron-com + + \mathbf{V}_n = \mathbf{v}_n - \mathbf{v}_{cm} + +where we have used uppercase :math:`\mathbf{V}` to denote the center-of-mass +system. The direction of the neutron in the center-of-mass system is + +.. math:: + :label: angle-neutron-com + + \mathbf{\Omega}_n = \frac{\mathbf{V}_n}{|| \mathbf{V}_n ||}. + +At low energies, elastic scattering will be isotropic in the center-of-mass +system, but for higher energies, there may be p-wave and higher order scattering +that leads to anisotropic scattering. Thus, in general, we need to sample a +cosine of the scattering angle which we will refer to as :math:`\mu`. For +elastic scattering, the secondary angle distribution is always given in the +center-of-mass system and is sampled according to the procedure outlined in +:ref:`sample-angle`. After the cosine of the angle of scattering has been +sampled, we need to determine the neutron's new direction +:math:`\mathbf{\Omega}'_n` in the center-of-mass system. This is done with the +procedure in :ref:`transform-coordinates`. The new direction is multiplied by +the speed of the neutron in the center-of-mass system to obtain the new velocity +vector in the center-of-mass: + +.. math:: + :label: velocity-neutron-com-2 + + \mathbf{V}'_n = || \mathbf{V}_n || \mathbf{\Omega}'_n. + +Finally, we transform the velocity in the center-of-mass system back to lab +coordinates: + +.. math:: + :label: velocity-neutron-lab + + \mathbf{v}'_n = \mathbf{V}'_n + \mathbf{v}_{cm} + +In OpenMC, the angle and energy of the neutron are stored rather than the +velocity vector itself, so the post-collision angle and energy can be inferred +from the post-collision velocity of the neutron in the lab system. + +For tallies that require the scattering cosine, it is important to store the +scattering cosine in the lab system. If we know the scattering cosine in the +center-of-mass, the scattering cosine in the lab system can be calculated as + +.. math:: + :label: cosine-lab + + \mu_{lab} = \frac{1 + A\mu}{\sqrt{A^2 + 2A\mu + 1}}. + +However, equation :eq:`cosine-lab` is only valid if the target was at rest. When +the target nucleus does have thermal motion, the cosine of the scattering angle +can be determined by simply taking the dot product of the neutron's initial and +final direction in the lab system. + +.. _inelastic-scatter: + +-------------------- +Inelastic Scattering +-------------------- + +The major algorithms for inelastic scattering were described in previous +sections. First, a scattering cosine is sampled using the algorithms in +:ref:`sample-angle`. Then an outgoing energy is sampled using the algorithms in +:ref:`sample-energy`. If the outgoing energy and scattering cosine were given in +the center-of-mass system, they are transformed to laboratory coordinates using +the algorithm described in :ref:`transform-coordinates`. Finally, the direction +of the particle is changed also using the procedure in +:ref:`transform-coordinates`. + +Although inelastic scattering leaves the target nucleus in an excited state, no +secondary photons from nuclear de-excitation are tracked in OpenMC. + +------------------------ +:math:`(n,xn)` Reactions +------------------------ + +These types of reactions are just treated as inelastic scattering and as such +are subject to the same procedure as described in +:ref:`inelastic-scatter`. Rather than tracking multiple secondary neutrons, the +weight of the outgoing neutron is multiplied by the number of secondary +neutrons, e.g. for :math:`(n,2n)`, only one outgoing neutron is tracked but its +weight is doubled. + +.. _fission: + +------- +Fission +------- + +While fission is normally considered an absorption reaction, as far as it +concerns a Monte Carlo simulation it actually bears more similarities to +inelastic scattering since fission results in secondary neutrons in the exit +channel. Other absorption reactions like :math:`(n,\gamma)` or +:math:`(n,\alpha)`, on the contrary, produce no neutrons. There are a few other +idiosyncrasies in treating fission. In an eigenvalue calculation, secondary +neutrons from fission are only "banked" for use in the next generation rather +than being tracked as secondary neutrons from elastic and inelastic scattering +would be. On top of this, fission is sometimes broken into first-chance fission, +second-chance fission, etc. An ACE table either lists the partial fission +reactions with secondary energy distributions for each one, or a total fission +reaction with a single secondary energy distribution. + +When a fission reaction is sampled in OpenMC (either total fission or, if data +exists, first- or second-chance fission), the following algorithm is used to +create and store fission sites for the following generation. First, the average +number of prompt and delayed neutrons must be determined to decide whether the +secondary neutrons will be prompt or delayed. This is important because delayed +neutrons have a markedly different spectrum from prompt neutrons, one that has a +lower average energy of emission. The total number of neutrons emitted +:math:`\nu_t` is given as a function of incident energy in the ACE format. Two +representations exist for :math:`\nu_t`. The first is a polynomial of order +:math:`N` with coefficients :math:`c_0,c_1,\dots,c_N`. If :math:`\nu_t` has this +format, we can evaluate it at incoming energy :math:`E` by using the equation + +.. math:: + :label: nu-polynomial + + \nu_t (E) = \sum_{i = 0}^N c_i E^i. + +The other representation is just a tabulated function with a specified +interpolation law. The number of prompt neutrons released per fission event +:math:`\nu_p` is also given as a function of incident energy and can be +specified in a polynomial or tabular format. The number of delayed neutrons +released per fission event :math:`\nu_d` can only be specified in a tabular +format. In practice, we only need to determine :math:`nu_t` and +:math:`nu_d`. Once these have been determined, we can calculated the delayed +neutron fraction + +.. math:: + :label: beta + + \beta = \frac{\nu_d}{\nu_t}. + +We then need to determine how many total neutrons should be emitted from +fission. If no survival biasing is being used, then the number of neutrons +emitted is + +.. math:: + :label: fission-neutrons + + \nu = \frac{w \nu_t}{k_{eff}} + +where :math:`w` is the statistical weight and :math:`k_{eff}` is the effective +multiplication factor from the previous generation. The number of neutrons +produced is biased in this manner so that the expected number of fission +neutrons produced is the number of source particles that we started with in the +generation. Since :math:`\nu` is not an integer, we use the following procedure +to obtain an integral number of fission neutrons to produce. If :math:`\xi > +\nu - \lfloor \nu \rfloor`, then we produce :math:`\lfloor \nu \rfloor` +neutrons. Otherwise, we produce :math:`\lfloor \nu \rfloor + 1` neutrons. Then, +for each fission site produced, we sample the outgoing angle and energy +according to the algorithms given in :ref:`sample-angle` and +:ref:`sample-energy` respectively. If the neutron is to be born delayed, then +there is an extra step of sampling a delayed neutron precursor group since they +each have an associated secondary energy distribution. + +The sampled outgoing angle and energy of fission neutrons along with the +position of the collision site are stored in an array called the fission +bank. In a subsequent generation, these fission bank sites are used as starting +source sites. + ----------------------------------------- Secondary Angles and Energy Distributions ----------------------------------------- For any reactions with secondary neutrons, it is necessary to sample secondary angle and energy distributions. This includes elastic and inelastic scattering, -fission, and (n,xn) reactions. In some cases, the distributions may be specified -separately, and in other cases, they may be specified as a correlated -angle-energy distribution. In this section, we will outline the methods used to -sample secondary distributions as well as how they are used to modify the state -of a particle. +fission, and :math:`(n,xn)` reactions. In some cases, the angle and energy +distributions may be specified separately, and in other cases, they may be +specified as a correlated angle-energy distribution. In the following sections, +we will outline the methods used to sample secondary distributions as well as +how they are used to modify the state of a particle. .. _sample-angle: @@ -85,19 +309,19 @@ of the scattering angle is simply calculated as \mu = 2\xi - 1 -where :math:`\xi` is a random number sampled uniformly on :math:`[0,1)`. +where :math:`\mu` is the cosine of the scattering angle and :math:`\xi` is a +random number sampled uniformly on :math:`[0,1)`. Equiprobable Angle Bin Distribution +++++++++++++++++++++++++++++++++++ -For a 32 equiprobable bin distribution, the procedure to determine the -scattering cosine is as follows. First, we select a random number :math:`\xi` to +For a 32 equiprobable bin distribution, we select a random number :math:`\xi` to sample a cosine bin :math:`i` such that .. math:: :label: equiprobable-bin - i = 1 + \lfloor 32\xi \rfloor + i = 1 + \lfloor 32\xi \rfloor. The same random number can then also be used to interpolate between neighboring :math:`\mu` values to get the final scattering cosine: @@ -107,17 +331,19 @@ The same random number can then also be used to interpolate between neighboring \mu = \mu_i + (32\xi - i) (\mu_{i+1} - \mu_i) +where :math:`\mu_i` is the :math:`i`-th scattering cosine. + .. _angle-tabular: Tabular Angular Distribution ++++++++++++++++++++++++++++ -As the MCNP Manual points out, using an equiprobable bin distribution works well -for high-probability regions of the scattering cosine probability, but for -low-probability regions it is not very accurate. Thus, a more typical treatment -is to represent the scattering cosine with a tabular distribution. In this case, -we have a table of cosines and their corresponding values for a probability -distributions function and cumulative distribution function. For each incoming +As the `MCNP Manual`_ points out, using an equiprobable bin distribution works +well for high-probability regions of the scattering cosine probability, but for +low-probability regions it is not very accurate. Thus, a more accurate method is +to represent the scattering cosine with a tabular distribution. In this case, we +have a table of cosines and their corresponding values for a probability +distribution function and cumulative distribution function. For each incoming neutron energy :math:`E_i`, let us call :math:`p_{i,j}` the j-th value in the probability distribution function and :math:`c_{i,j}` the j-th value in the cumulative distribution function. We first find the interpolation factor on the @@ -132,7 +358,7 @@ where :math:`E` is the incoming energy of the particle. Then, statistical interpolation is performed to choose between using the cosines and distribution functions corresponding to energy :math:`E_i` and :math:`E_{i+1}`. Let :math:`\ell` be the chosen table where :math:`\ell = i` if :math:`\xi_1 > f` and -:math:`\ell = i + 1` otherwise where :math:`\xi_1` is a random number. Another +:math:`\ell = i + 1` otherwise, where :math:`\xi_1` is a random number. Another random number :math:`\xi_2` is used to sample a scattering cosine bin :math:`j` using the cumulative distribution function: @@ -160,8 +386,9 @@ is the probability distribution function. Since we know that c(\mu) = c_{\ell,j} + \int_{\mu_{\ell,j}}^{\mu} p(\mu') d\mu' -For histogram interpolation, we have that :math:`p(\mu') = p_{\ell,j}`. Thus, -after integration we have that +For histogram interpolation, we have that :math:`p(\mu') = p_{\ell,j}` for +:math:`\mu_{\ell,j} \le \mu' < \mu_{\ell,j+1}`. Thus, after integrating +:eq:`cdf-2` we have that .. math:: :label: cumulative-dist-histogram @@ -174,7 +401,7 @@ interpolation: .. math:: :label: cosine-histogram - \mu = \mu_{\ell,j} + \frac{\xi_2 - c_{\ell,j}}{p_{\ell,j}} + \mu = \mu_{\ell,j} + \frac{\xi_2 - c_{\ell,j}}{p_{\ell,j}}. For linear-linear interpolation, we represent the function :math:`p(\mu')` as a first-order polynomial in :math:`\mu'`. If we interpolate between successive @@ -194,7 +421,7 @@ into equation :eq:`cdf-2`, we obtain c(\mu) = c_{\ell,j} + \int_{\mu_{\ell,j}}^{\mu} \left [ \frac{p_{\ell,j+1} - p_{\ell,j}}{\mu_{\ell,j+1} - \mu_{\ell,j}} (\mu' - \mu_{\ell,j}) + - p_{\ell,j} \right ] d\mu' + p_{\ell,j} \right ] d\mu'. Let us now make a change of variables using @@ -202,7 +429,7 @@ Let us now make a change of variables using :label: introduce-eta \eta = \frac{p_{\ell,j+1} - p_{\ell,j}}{\mu_{\ell,j+1} - \mu_{\ell,j}} - (\mu' - \mu_{\ell,j}) + p_{\ell,j} + (\mu' - \mu_{\ell,j}) + p_{\ell,j}. Equation :eq:`cdf-linlin` then becomes @@ -217,7 +444,7 @@ where we have used .. math:: :label: slope - m = \frac{p_{\ell,j+1} - p_{\ell,j}}{\mu_{\ell,j+1} - \mu_{\ell,j}} + m = \frac{p_{\ell,j+1} - p_{\ell,j}}{\mu_{\ell,j+1} - \mu_{\ell,j}}. Integrating equation :eq:`cdf-linlin-eta`, we have @@ -242,9 +469,9 @@ Sampling Secondary Energy and Correlated Angle/Energy Distributions ------------------------------------------------------------------- For a reaction with secondary neutrons, it is necessary to determine the -outgoing energy of the neutrons. For anything other than elastic scattering, the -outgoing energy must be determined based on tabulated or parameterized data. The -`ENDF-6 Format`_ specifies a variety of ways that the secondary energy +outgoing energy of the neutrons. For any reaction other than elastic scattering, +the outgoing energy must be determined based on tabulated or parameterized +data. The `ENDF-6 Format`_ specifies a variety of ways that the secondary energy distribution can be represented. ENDF File 5 contains uncorrelated energy distribution where ENDF File 6 contains correlated energy-angle distributions. The ACE format specifies its own representations based loosely on @@ -253,12 +480,12 @@ energy of secondary particles is determined based on each ACE law. One of the subtleties in the ACE format is the fact that a single reaction can have multiple secondary energy distributions. This is mainly useful for -reactions with multiple neutrons in the exit channel such as (n,2n) or -(n,3n). In these types of reactions, each neutron is emitted corresponding to a -different excitation level of the compound nucleus, and thus in general the -neutrons will originate from different energy distributions. The first step in -sampling a secondary energy is to sample between multiple energy distributions -if more than one is present. +reactions with multiple neutrons in the exit channel such as :math:`(n,2n)` or +:math:`(n,3n)`. In these types of reactions, each neutron is emitted +corresponding to a different excitation level of the compound nucleus, and thus +in general the neutrons will originate from different energy distributions. If +multiple energy distributions are present, they are assigned probabilities that +can then be used to randomly select one. Once a secondary energy distribution has been sampled, the procedure for determining the outgoing energy will depend on which ACE law has been specified @@ -272,11 +499,11 @@ ACE Law 1 - Tabular Equiprobable Energy Bins In the tabular equiprobable bin representation, an array of equiprobable outgoing energy bins is given for a number of incident energies. While the representation itself is simple, the complexity lies in how one interpolates -between incident as well as outgoing energies on such a table. If one does +between incident as well as outgoing energies on such a table. If one performs simple interpolation between tables for neighboring incident energies, it is -possible for the resulting energies to violate laws governing the kinematics, -i.e. the outgoing energy may be outside the range of available energy in the -reaction. +possible that the resulting energies would violate laws governing the +kinematics, i.e. the outgoing energy may be outside the range of available +energy in the reaction. To avoid this situation, the accepted practice is to use a process known as scaled interpolation [Doyas]_. First, we find the tabulated incident energies @@ -298,7 +525,7 @@ corresponding to the incoming energy :math:`E_i`, and :math:`M` is the number of outgoing energy bins. Next, statistical interpolation is performed to choose between using the outgoing energy distributions corresponding to energy :math:`E_i` and :math:`E_{i+1}`. Let :math:`\ell` be the chosen table where -:math:`\ell = i` if :math:`\xi_1 > f` and :math:`\ell = i + 1` otherwise where +:math:`\ell = i` if :math:`\xi_1 > f` and :math:`\ell = i + 1` otherwise, and :math:`\xi_1` is a random number. Now, we randomly sample an equiprobable outgoing energy bin :math:`j` and interpolate between successive values on the outgoing energy distribution: @@ -322,7 +549,7 @@ energy: ACE Law 3 - Inelastic Level Scattering ++++++++++++++++++++++++++++++++++++++ -It can be shown [Foderaro]_ that in inelastic level scattering, the outgoing +It can be shown (see Foderaro_) that in inelastic level scattering, the outgoing energy of the neutron :math:`E'` can be related to the Q-value of the reaction and the incoming energy: @@ -352,7 +579,7 @@ calculating an interpolation factor :math:`f` with equation :eq:`interpolation-factor`. Next, statistical interpolation is performed to choose between using the outgoing energy distributions corresponding to energy :math:`E_i` and :math:`E_{i+1}`. Let :math:`\ell` be the chosen table where -:math:`\ell = i` if :math:`\xi_1 > f` and :math:`\ell = i + 1` otherwise where +:math:`\ell = i` if :math:`\xi_1 > f` and :math:`\ell = i + 1` otherwise, and :math:`\xi_1` is a random number. Then, we sample an outgoing energy bin :math:`j` using the cumulative distribution function: @@ -371,7 +598,7 @@ energy on the :math:`\ell`-th distribution is .. math:: :label: energy-histogram - \hat{E} = E_{\ell,j} + \frac{\xi_2 - c_{\ell,j}}{p_{\ell,j}} + \hat{E} = E_{\ell,j} + \frac{\xi_2 - c_{\ell,j}}{p_{\ell,j}}. If linear-linear interpolation is to be used, the outgoing energy on the :math:`\ell`-th distribution is @@ -382,7 +609,7 @@ If linear-linear interpolation is to be used, the outgoing energy on the \hat{E} = E_{\ell,j} + \frac{E_{\ell,j+1} - E_{\ell,j}}{p_{\ell,j+1} - p_{\ell,j}} \left ( \sqrt{p_{\ell,j}^2 + 2 \frac{p_{\ell,j+1} - p_{\ell,j}}{E_{\ell,j+1} - E_{\ell,j}} ( \xi_2 - c_{\ell,j} )} - p_{\ell,j} - \right ) + \right ). Since this outgoing energy may violate reaction kinematics, we then scale it to minimum and maximum energies interpolated between the neighboring outgoing @@ -479,12 +706,12 @@ form p(E') dE' = c e^{-E'/a(E)} \sinh \sqrt{b(E) \, E'} dE' where :math:`a` and :math:`b` are parameters for the distribution and are given -as tabulated functions of the incoming energy of the neutron in the ACE -format. These two parameters are interpolated on the incoming energy grid using -a specified interpolation law. Once the parameters have been determined, we -sample a Maxwellian spectrum with nuclear temperature :math:`a` using the -algorithm described in :ref:`maxwell` to get an energy :math:`W`. Then, the -outgoing energy is calculated as +as tabulated functions of the incoming energy of the neutron. These two +parameters are interpolated on the incoming energy grid using a specified +interpolation law. Once the parameters have been determined, we sample a +Maxwellian spectrum with nuclear temperature :math:`a` using the algorithm +described in :ref:`maxwell` to get an energy :math:`W`. Then, the outgoing +energy is calculated as .. math:: :label: watt-E @@ -523,7 +750,7 @@ outgoing energy grid. For histogram interpolation, the parameters are :label: KM-parameters-histogram R = R_{\ell,j} \\ - A = A_{\ell,j} + A = A_{\ell,j}. If linear-linear interpolation is specified, the parameters are @@ -543,7 +770,7 @@ the scattering angle is :label: KM-pdf-angle p(\mu) d\mu = \frac{A}{2 \sinh (A)} \left [ \cosh (A\mu) + R \sinh (A\mu) - \right ] d\mu + \right ] d\mu. The rules for sampling this probability distribution function can be derived based on rules C39 and C40 in the `Monte Carlo Sampler`_. First, we sample two @@ -561,7 +788,7 @@ outgoing angle is .. math:: :label: KM-angle-2 - \mu = \frac{1}{A} \ln \left ( \xi_4 e^A + (1 - \xi_4) e^{-A} \right ) + \mu = \frac{1}{A} \ln \left ( \xi_4 e^A + (1 - \xi_4) e^{-A} \right ). ACE Law 61 - Correlated Energy and Angle Distribution @@ -646,15 +873,16 @@ calculated as E' = \frac{x}{x + y} E_i^{max} There are two important notes to make regarding the N-body phase space -distribution. First, the documentation (and code) for MCNP5 has a mistake in the -algorithm for :math:`n = 4`. That being said, there are no existing nuclear data -evaluations which use an N-body phase space distribution with :math:`n = 4`, so -the error would not affect any calculations. In the ENDF/B-VII.0 nuclear data -evaluation, only one reaction uses an N-body phase space distribution at all, -the (n,2n) reaction with H-2. +distribution. First, the documentation (and code) for MCNP5-1.60 has a mistake +in the algorithm for :math:`n = 4`. That being said, there are no existing +nuclear data evaluations which use an N-body phase space distribution with +:math:`n = 4`, so the error would not affect any calculations. In the +ENDF/B-VII.0 nuclear data evaluation, only one reaction uses an N-body phase +space distribution at all, the :math:`(n,2n)` reaction with H-2. .. _transform-coordinates: +------------------------------------- Transforming a Particle's Coordinates ------------------------------------- @@ -680,7 +908,7 @@ center-of-mass and laboratory is :label: angle-com-to-lab \mu = \mu_{cm} \sqrt{\frac{E'_{cm}}{E'}} + \frac{1}{A + 1} - \sqrt{\frac{E}{E'}}. + \sqrt{\frac{E}{E'}} where :math:`\mu` is the scattering cosine in the laboratory system. The scattering cosine still only tells us the cosine of the angle between the @@ -701,292 +929,18 @@ the post-collision direction is calculated as v' = \mu v + \frac{\sqrt{1 - \mu^2} ( vw \cos\phi + u \sin\phi )}{\sqrt{1 - w^2}} \\ - w' = \mu w - \sqrt{1 - \mu^2} \sqrt{1 - w^2} \cos\phi - ------------------- -Elastic Scattering ------------------- - -Elastic scattering refers to the process by which a neutron scatters off a -nucleus and does not leave it in an excited. It is referred to as "elastic" -because in the center-of-mass system, the neutron does not actually lose -energy. However, in lab coordinates, the neutron does indeed lose -energy. Elastic scattering can be treated exactly in a Monte Carlo code thanks -to its simplicity. - -Let us discuss how OpenMC handles two-body elastic scattering kinematics. The -first step is to determine whether the target nucleus has any associated -motion. Above a certain energy threshold (400 kT by default), all scattering is -assumed to take place with the target at rest. Below this threshold though, we -must account for the thermal motion of the target nucleus. Methods to sample the -velocity of the target nucleus are described later in section -:ref:`freegas`. For the time being, let us assume that we have sampled the -target velocity :math:`v_t`. The velocity of the center-of-mass system is -calculated as - -.. math:: - :label: velocity-com - - \mathbf{v}_{cm} = \frac{\mathbf{v}_n + A \mathbf{v}_t}{A + 1} - -where :math:`\mathbf{v}_n` is the velocity of the neutron and :math:`A` is the -atomic mass of the target nucleus measured in neutron masses (commonly referred -to as the atomic weight ratio). With the velocity of the center-of-mass -calculated, we can then determine the neutron's velocity in the center-of-mass -system: - -.. math:: - :label: velocity-neutron-com - - \mathbf{V}_n = \mathbf{v}_n - \mathbf{v}_{cm} - -where we have used uppercase :math:`\mathbf{V}` to denote the center-of-mass -system. The direction of the neutron in the center-of-mass system is - -.. math:: - :label: angle-neutron-com - - \mathbf{\Omega}_n = \frac{\mathbf{V}_n}{|| \mathbf{V}_n ||} - -At low energies, elastic scattering will be isotropic in the center-of-mass -system, but for higher energies, there may be p-wave and higher order scattering -that leads to anisotropic scattering. Thus, in general, we need to sample a -cosine of the scattering angle which we will refer to as :math:`\mu`. For -elastic scattering, the secondary angle distribution is always given in the -center-of-mass system and is sampled according to the procedure outlined in -:ref:`sample-angle`. After the cosine of the angle of scattering has been -sampled, we need to determine the neutron's new direction -:math:`\mathbf{\Omega}'_n` in the center-of-mass system. This is done with the -procedure in :ref:`transform-coordinates`. The new direction is multiplied by -the speed of the neutron in the center-of-mass system to obtain the new velocity -vector in the center-of-mass: - -.. math:: - :label: velocity-neutron-com-2 - - \mathbf{V}'_n = || \mathbf{V}_n || \mathbf{\Omega}'_n. - -Finally, we transform the velocity in the center-of-mass system back to lab -coordinates: - -.. math:: - :label: velocity-neutron-lab - - \mathbf{v}'_n = \mathbf{V}'_n + \mathbf{v}_{cm} - -In OpenMC, the angle and energy of the neutron are stored rather than the -velocity vector itself, so the post-collision angle and energy can be inferred -from the post-collision velocity of the neutron in the lab system. - -For tally purposes, it is also important to keep track of the scattering cosine -in the lab system. If we know the scattering cosine in the center-of-mass, the -scattering cosine in the lab system can be calculated as - -.. math:: - :label: cosine-lab - - \mu_{lab} = \frac{1 + A\mu}{\sqrt{A^2 + 2A\mu + 1}}. - -However, this formula is only valid if the target was at rest. When the target -nucleus does have thermal motion, the cosine of the scattering angle can be -determined by simply taking the dot product of the neutron's initial and final -direction in the lab system. - -.. _inelastic-scatter: - --------------------- -Inelastic Scattering --------------------- - -The major algorithms for inelastic scattering were described in previous -sections. First, a scattering cosine is sampled using the algorithms in -:ref:`sample-angle`. Then an outgoing energy is sampled using the algorithms in -:ref:`sample-energy`. If the outgoing energy and scattering cosine were given in -the center-of-mass system, they are transformed to laboratory coordinates using -the algorithm described in :ref:`transform-coordinates`. Finally, the direction -of the particle is changed also using the procedure in -:ref:`transform-coordinates`. - -Although inelastic scattering leaves the target nucleus in an excited state, no -secondary photons from nuclear de-excitation are tracked in OpenMC. - ------------------------- -:math:`(n,xn)` Reactions ------------------------- - -These types of reactions are just treated as inelastic scattering and as such -are subject to the same procedure as described in -:ref:`inelastic-scatter`. Rather than tracking multiple secondary neutrons, the -weight of the outgoing neutron is multiplied by the number of secondary -neutrons, e.g. for (n,2n), only one outgoing neutron is tracked but its weight -is doubled. - -.. _fission: - -------- -Fission -------- - -While fission is normally considered an absorption reaction, as far as it -concerns a Monte Carlo simulation it actually bears more similarities to -inelastic scattering since fission results in secondary neutrons in the exit -channel. Other absorption reactions like :math:`(n,\gamma)` or -:math:`(n,\alpha)`, on the contrary, produce no neutrons. There are a few other -idiosyncrasies in treating fission. In a criticality calculation, secondary -neutrons from fission are only "banked" for use in the next generation rather -than being tracked as secondary neutrons from elastic and inelastic scattering -would be. On top of this, fission is sometimes broken into first-chance fission, -second-chance fission, etc. An ACE table either lists the partial fission -reactions with secondary energy distributions for each one, or a total fission -reaction with a single secondary energy distribution. - -When a fission reaction is sampled in OpenMC (either total fission or, if data -exists, first- or second-chance fission), the following algorithm is used to -create and store fission sites for the following generation. First, the average -number of prompt and delayed neutrons must be determined to decide whether the -secondary neutrons will be prompt or delayed. This is important because delayed -neutrons have a markedly different spectrum from prompt neutrons, one that has a -lower average energy of emission. The total number of neutrons emitted -:math:`\nu_t` is given as a function of incident energy in the ACE format. Two -representations exist for :math:`\nu_t`. The first is a polynomial of arbitrary -order with coefficients :math:`c_0,c_1,\dots`. If :math:`\nu_t` has this format, -we can evaluate it at incoming energy :math:`E` by using the equation - -.. math:: - :label: nu-polynomial - - \nu_t (E) = \sum_{i = 0}^N c_i E^i - -where :math:`N` is the order of the polynomial. The other representation is just -a tabulated function with a specified interpolation law. The number of prompt -neutrons released per fission event :math:`\nu_p` is also given as a function of -incident energy and can be specified in a polynomial or tabular format. The -number of delayed neutrons released per fission event :math:`\nu_d` can only be -specified in a tabular format. In practice, we only need to determine -:math:`nu_t` and :math:`nu_d`. Once these have been determined, we can -calculated the delayed neutron fraction - -.. math:: - :label: beta - - \beta = \frac{\nu_d}{\nu_t} - -We then need to determine how many total neutrons should be emitted from -fission. If no survival biasing is being used, then the number of neutrons -emitted is - -.. math:: - :label: fission-neutrons - - \nu = \frac{w \nu_t}{k_{eff}} - -where :math:`w` is the statistical weight and :math:`k_{eff}` is the effective -multiplication factor from the previous generation. The number of neutrons -produced is biased in this manner so that the expected number of fission -neutrons produced is the number of source particles that we started with in the -generation. Since :math:`\nu` is not an integer, we use the following procedure -to obtain an integral number of fission neutrons to produce. If :math:`\xi > -\nu - \lfloor \nu \rfloor`, then we produce :math:`\lfloor \nu \rfloor` -neutrons. Otherwise, we produce :math:`\lfloor \nu \rfloor + 1` neutrons. Then, -for each fission site produced, we sample the outgoing angle and energy -according to the algorithms given in :ref:`sample-angle` and -:ref:`sample-energy` respectively. If the neutron is to be born delayed, then -there is an extra step of sampling a delayed neutron precursor group since they -each have an associated secondary energy distribution. - -The sampled outgoing angle and energy of fission neutrons along with the -position of the collision site are stored in an array called the fission -bank. In a subsequent generation, these fission bank sites are used as starting -source sites. - ----------------------------------------------------- -:math:`(n,\gamma)` and Other Disappearance Reactions ----------------------------------------------------- - -All absorption reactions other than fission do not produce any secondary -neutrons. As a result, these are the easiest type of reactions to handle. When a -collision occurs, the first step is to sample a nuclide within a material. Once -the nuclide has been sampled, then a specific reaction for that nuclide is -sampled. Since the total absorption cross section is pre-calculated at the -beginning of a simulation, the first step in sampling a reaction is to determine -whether a "disappearance" reaction occurs where no secondary neutrons are -produced. This is done by sampling a random number :math:`\xi` on the interval -:math:`[0,1)` and checking whether - -.. math:: - :label: disappearance - - \xi \sigma_t (E) < \sigma_a (E) - \sigma_f (E) - -where :math:`\sigma_t` is the total cross section, :math:`\sigma_a` is the -absorption cross section (this includes fission), and :math:`\sigma_f` is the -total fission cross section. If this condition is met, then the neutron is -killed and we proceed to simulate the next neutron from the source bank. - -No secondary particles from disappearance reactions such as photons or -alpha-particles are produced or tracked. To truly capture the affects of gamma -heating in a problem, it would be necessary to explicitly track photons -originating from :math:`(n,\gamma)` and other reactions. - ----------------- -Survival Biasing ----------------- - -In problems with highly absorbing materials, a large fraction of neutrons may be -killed through absorption reactions thus leading to tallies with very few events -scoring in them. To remedy this situation, an algorithm known as survival -biasing or implicit absorption (or sometimes implicit capture, even though this -is a misnomer) is commonly used. - -In survival biasing, rather than ever sample absorption reactions, at every -collision, the weight of neutron is reduced by probability of absorption -occurring, i.e. - -.. math:: - :label: survival-biasing-weight - - w' = w \left ( 1 - \frac{\sigma_a (E)}{\sigma_t (E)} \right ) - -where :math:`w'` is the weight of the neutron after adjustment and :math:`w` is -the weight of the neutron before adjustment. A few other things need to be -handled differently if survival biasing is turned on. Although fission reactions -never actually occur with survival biasing, we still need to create fission -sites to preserve the basic criticality algorithm. The algorithm for sampling -fission sites is the same as that described in :ref:`fission`. The only -difference is in equation :eq:`fission-neutrons`. We now need to produce - -.. math:: - :label: fission-neutrons-survival - - \nu = \frac{w}{k} \frac{\nu_t \sigma_f(E)}{\sigma_t (E)} - -fission sites, where :math:`w` is the weight of the neutron before being -adjusted. One should note this is just the expected number of neutrons produced -*per collision* rather than the expected number of neutrons produced given that -fission has already occurred. - -Additionally, since survival biasing can reduce the weight of the neutron to -very low values, it is always used in conjunction with a weight cutoff and -Russian rouletting. Two user adjustable parameters :math:`w_c` and :math:`w_s` -are given which are the weight below which neutrons should undergo Russian -roulette and the weight should they survive Russian roulette. The algorithm for -Russian rouletting is as follows. After a collision if :math:`w < w_c`, then the -neutron is killed with probability :math:`1 - w/w_s`. If it survives, the weight -is set equal to :math:`w_s`. One can confirm that the average weight following -Russian roulette is simply :math:`w`, so the game can be considered "fair". By -default, the cutoff weight in OpenMC is :math:`w_c = 0.25` and the survival -weight is :math:`w_s = 1.0`. These parameters vary from one Monte Carlo code to -another. + w' = \mu w - \sqrt{1 - \mu^2} \sqrt{1 - w^2} \cos\phi. .. _freegas: ------------------------------------------ -Effect of Thermal Motion on Cross-Sections +Effect of Thermal Motion on Cross Sections ------------------------------------------ -When a neutron scatters off of a nucleus, many times it is assumed that the -target nucleus is at rest. However, if the material is at a temperature greater -than 0 K, it will have motion associated with the thermal vibration. Thus, the +When a neutron scatters off of a nucleus, it may often be assumed that the +target nucleus is at rest. However, the target nucleus will have motion +associated with its thermal vibration, even at absolute zero (This is due to the +zero-point energy arising from quantum mechanical considerations). Thus, the velocity of the neutron relative to the target nucleus is in general not the same as the velocity of the neutron entering the collision. @@ -1006,9 +960,9 @@ nucleus, :math:`v_r = || \mathbf{v}_n - \mathbf{v}_T ||` is the magnitude of the relative velocity, :math:`\sigma` is the cross section at 0 K, and :math:`M (\mathbf{v}_T)` is the probability distribution for the target nucleus velocity at temperature :math:`T` (a Maxwellian). In a Monte Carlo code, one must account -for the effect of the thermal motion on both the integrated cross-section as -well as secondary angle and energy distributions. For integrated cross-sections, -it is possible to calculate thermally-averaged cross-sections by applying a +for the effect of the thermal motion on both the integrated cross section as +well as secondary angle and energy distributions. For integrated cross sections, +it is possible to calculate thermally-averaged cross sections by applying a kernel Doppler broadening algorithm to data at 0 K (or some temperature lower than the desired temperature). The most ubiquitous algorithm for this purpose is the [SIGMA1]_ method developed by Red Cullen and subsequently refined by @@ -1034,7 +988,7 @@ tells us that target velocities that produce relative velocities which correspond to high cross sections will have a greater contribution to the effective reaction rate. This is most important when the velocity of the incoming neutron is close to a resonance. For example, if the neutron's velocity -corresponds to a trough in a resonance elastic scattering cross-section, a very +corresponds to a trough in a resonance elastic scattering cross section, a very small target velocity can cause the relative velocity to correspond to the peak of the resonance, thus making a disproportionate contribution to the reaction rate. The conclusion is that if we are to sample a target velocity in the Monte @@ -1074,10 +1028,11 @@ relative velocities of interest. This is a good assumption for almost all cases since the elastic scattering cross section varies slowly with velocity for light nuclei, and for heavy nuclei where large variations can occur due to resonance scattering, the moderating effect is rather small. Nonetheless, this assumption -may cause incorrect answers in systems with U-238 where the low-lying resonances -can cause a significant amount of up-scatter that would be ignored by this -assumption. Nevertheless, with this assumption, we write :math:`\sigma (v_r) = -\sigma_s` which simplifies :eq:`target-pdf-1` to +may cause incorrect answers in systems with low-lying resonances that can cause +a significant amount of up-scatter that would be ignored by this assumption +(e.g. U-238 in commercial light-water reactors). Nevertheless, with this +assumption, we write :math:`\sigma (v_r) = \sigma_s` which simplifies +:eq:`target-pdf-1` to .. math:: :label: target-pdf-2 @@ -1111,22 +1066,23 @@ Let us define the Maxwellian distribution in speed as M (v_T) dv_T = \int_{-1}^1 d\mu \int_{0}^{2\pi} d\phi \, dv_T \, v_T^2 M(\mathbf{v}_T) = \sqrt{ \frac{2}{\pi} \left ( \frac{m}{kT} \right )^3} - v_T^2 \exp \left ( \frac{-m v_T}{2kT} \right ) dv_T + v_T^2 \exp \left ( \frac{-m v_T}{2kT} \right ) dv_T. To simplify things a bit, we'll define a parameter .. math:: :label: maxwellian-beta - \beta = \sqrt{\frac{m}{2kT}} + \beta = \sqrt{\frac{m}{2kT}}. -Substituting this into equation :eq:`maxwellian-speed`, we get +Substituting equation :eq:`maxwellian-beta` into equation +:eq:`maxwellian-speed`, we obtain .. math:: :label: maxwellian-speed2 M (v_T) dv_T = \frac{4}{\sqrt{\pi}} \beta^3 v_T^2 \exp \left ( -\beta^2 - v_T^2 \right ) dv_T + v_T^2 \right ) dv_T. Now, changing variables in equation :eq:`target-pdf-2` by using the result from equation :eq:`maxwellian-speed`, our new probability distribution function is @@ -1148,7 +1104,7 @@ tells us that .. math:: :label: lawcosine - 2 v_n v_T \mu = v_n^2 + v_T^2 - v_r^2 + 2 v_n v_T \mu = v_n^2 + v_T^2 - v_r^2. Thus, we can infer that @@ -1156,7 +1112,7 @@ Thus, we can infer that :label: change-terms || \mathbf{v}_n - \mathbf{v}_T || = || \mathbf{v}_r || = v_r = \sqrt{v_n^2 + - v_T^2 - 2v_n v_T \mu} + v_T^2 - 2v_n v_T \mu}. Inserting equation :eq:`change-terms` into :eq:`target-pdf-3`, we obtain @@ -1179,7 +1135,7 @@ parts as such: f_1(v_T, \mu) &= \frac{4\sigma_s}{\sqrt{\pi} C'} \frac{ \sqrt{v_n^2 + v_T^2 - 2v_n v_T \mu}}{v_n + v_T} \\ - f_2(v_T) &= (v_n + v_T) \beta^3 v_T^2 \exp \left ( -\beta^2 v_T^2 \right ) + f_2(v_T) &= (v_n + v_T) \beta^3 v_T^2 \exp \left ( -\beta^2 v_T^2 \right ). In general, any probability distribution function of the form :math:`p(x) = f_1(x) f_2(x)` with :math:`f_1(x)` bounded can be sampled by sampling @@ -1209,7 +1165,7 @@ in equation :eq:`divide-pdf`. Doing so we find that :label: integrate-f2 \int_0^{\infty} dv_T (v_n + v_T) \beta^3 v_T^2 \exp \left ( -\beta^2 v_T^2 - \right ) = \frac{1}{4\beta} \left ( \sqrt{\pi} \beta v_n + 2 \right ) + \right ) = \frac{1}{4\beta} \left ( \sqrt{\pi} \beta v_n + 2 \right ). Thus, we need to sample the probability distribution function @@ -1218,7 +1174,7 @@ Thus, we need to sample the probability distribution function q(v_T) dv_T = \left ( \frac{4\beta^2 v_n v_T^2}{\sqrt{\pi} \beta v_n + 2} + \frac{4\beta^4 v_T^3}{\sqrt{\pi} \beta v_n + 2} \right ) exp \left ( - -\beta^2 v_T^2 \right ) + -\beta^2 v_T^2 \right ). Now, let us do a change of variables with the following definitions @@ -1236,7 +1192,7 @@ with :math:`dx = \beta dv_T` and doing some crafty rearranging of terms yields q(x) dx = \left [ \left ( \frac{\sqrt{\pi} y}{\sqrt{\pi} y + 2} \right ) \frac{4}{\sqrt{\pi}} x^2 e^{-x^2} + \left ( \frac{2}{\sqrt{\pi} y + 2} - \right ) 2x^3 e^{-x^2} \right ] dx + \right ) 2x^3 e^{-x^2} \right ] dx. It's important to make note of the following two facts. First, the terms outside the parentheses are properly normalized probability distribution functions that @@ -1266,12 +1222,14 @@ on the unit interval. Since the maximum value of :math:`f_1(v_T, \mu)` is .. math:: :label: freegas-accept-2 - \xi_3 < \frac{\sqrt{v_n^2 + v_T^2 - 2 v_n v_T \mu}}{v_n + v_T} + \xi_3 < \frac{\sqrt{v_n^2 + v_T^2 - 2 v_n v_T \mu}}{v_n + v_T}. If is not accepted, then we repeat the process and resample a target speed and cosine until a combination is found that satisfies equation :eq:`freegas-accept-2`. +.. _sab_tables: + ------------ |sab| Tables ------------ @@ -1282,9 +1240,10 @@ target molecule. If these effects are not accounted for in a simulation, the reported results may be highly inaccurate. There is no general analytic treatment for the scattering kinematics at low energies, and thus when nuclear data is processed for use in a Monte Carlo code, special tables are created that -give altered cross-sections and secondary angle/energy distributions for thermal -scattering. These tables are mainly used for moderating materials such as light -or heavy water, graphite, hydrogen in ZrH, beryllium, etc. +give cross sections and secondary angle/energy distributions for thermal +scattering that account for thermal binding effects. These tables are mainly +used for moderating materials such as light or heavy water, graphite, hydrogen +in ZrH, beryllium, etc. The theory behind |sab| is rooted in quantum mechanics and is quite complex. Those interested in first principles derivations for formulae relating @@ -1294,23 +1253,23 @@ processed data as it appears in the ACE format. Each |sab| table can contain the following: -- Thermal inelastic scattering cross section -- Thermal elastic scattering cross section +- Thermal inelastic scattering cross section; +- Thermal elastic scattering cross section; - Correlated energy-angle distributions for thermal inelastic and elastic - scattering + scattering. Note that when we refer to "inelastic" and "elastic" scattering now, we are actually using these terms with respect to the *scattering system*. Thermal inelastic scattering means that the scattering system is left in an excited -state, not any particular nucleus as is the case in inelastic level -scattering. In a crystalline material, the excitation could be the production of -phonons. In a molecule, it could be the excitation of rotational or vibrational -modes. +state; no particular nucleus is left in an excited state as would be the case +for inelastic level scattering. In a crystalline material, the excitation of the +scattering could correspond to the production of phonons. In a molecule, it +could correspond to the excitation of rotational or vibrational modes. Both thermal elastic and thermal inelastic scattering are generally divided into incoherent and coherent parts. Coherent elastic scattering refers to scattering -in crystalline solids like graphite or beryllium. These cross-sections are -characterized by the presence of "Bragg edges" that relate to the crystal +in crystalline solids like graphite or beryllium. These cross sections are +characterized by the presence of *Bragg edges* that relate to the crystal structure of the scattering material. Incoherent elastic scattering refers to scattering in hydrogenous solids such as polyethylene. As it occurs in ACE data, thermal inelastic scattering includes both coherent and incoherent effects and @@ -1319,30 +1278,30 @@ is dominant for most other materials including hydrogen in water. Calculating Integrated Cross Sections ------------------------------------- -The first aspect of using |sab| tables is calculating cross-sections to replace +The first aspect of using |sab| tables is calculating cross sections to replace the data that would normally appear on the incident neutron data, which do not account for thermal binding effects. For incoherent elastic and inelastic -scattering, the cross-sections are stored as linearly interpolable functions on +scattering, the cross sections are stored as linearly interpolable functions on a specified energy grid. For coherent elastic data, the cross section can be expressed as .. math:: :label: coherent-elastic-xs - \sigma(E) = \frac{\sigma_c}{E} \sum_{E_i < E} f_i e^{-4WE_i}. + \sigma(E) = \frac{\sigma_c}{E} \sum_{E_i < E} f_i e^{-4WE_i} where :math:`\sigma_c` is the effective bound coherent scattering cross section, :math:`W` is the effective Debye-Waller coefficient, :math:`E_i` are the energies of the Bragg edges, and :math:`f_i` are related to crystallographic -structure factors. Since the functional form of the cross-section is just 1/E +structure factors. Since the functional form of the cross section is just 1/E and the proportionality constant changes only at Bragg edges, the -proportionality constants are stored and then the cross-section can be +proportionality constants are stored and then the cross section can be calculated analytically based on equation :eq:`coherent-elastic-xs`. Outgoing Angle for Coherent Elastic Scattering ---------------------------------------------- -The other aspect of using |sab| tables is determining the outgoing energy and +Another aspect of using |sab| tables is determining the outgoing energy and angle of the neutron after scattering. For incoherent and coherent elastic scattering, the energy of the neutron does not actually change, but the angle does change. For coherent elastic scattering, the angle will depend on which @@ -1399,9 +1358,9 @@ second to last energies have a relative probability of 4, and all other energies have a relative probability of 10. The procedure to determine the outgoing energy and angle is as such. First, the interpolation factor is determined from equation :eq:`sab-interpolation-factor`. Then, an outgoing energy bin is sampled -either from a uniform distribution or from a skewed distribution as -discussed. The outgoing energy is then interpolated between values corresponding -to neighboring incoming energies: +either from a uniform distribution or from the aforementioned skewed +distribution. The outgoing energy is then interpolated between values +corresponding to neighboring incoming energies: .. math:: :label: inelastic-energy @@ -1419,7 +1378,9 @@ uniformly and then the final cosine is interpolated on the incoming energy grid: \mu = \mu_{i,j,k} + f (\mu_{i+1,j,k} - \mu_{i,j,k}) where :math:`\mu_{i,j,k}` is the k-th outgoing cosine corresponding to the j-th -outgoing energy and the i-th incoming energy. +outgoing energy and the i-th incoming energy. + +.. _probability_tables: ---------------------------------------------- Unresolved Resonance Region Probability Tables @@ -1443,12 +1404,12 @@ appears in the ACE format. Each probability table for a nuclide contains the following information at a number of incoming energies within the unresolved resonance range: -- Cumulative probabilities for cross section bands -- Total cross section (or factor) in each band -- Elastic scattering cross section (or factor) in each band -- Fission cross section (or factor) in each band -- :math:`(n,\gamma)` cross section (or factor) in each band -- Neutron heating number (or factor) in each band +- Cumulative probabilities for cross section bands; +- Total cross section (or factor) in each band; +- Elastic scattering cross section (or factor) in each band; +- Fission cross section (or factor) in each band; +- :math:`(n,\gamma)` cross section (or factor) in each band; and +- Neutron heating number (or factor) in each band. It should be noted that unresolved resonance probability tables affect only integrated cross sections and no extra data need be given for secondary @@ -1460,7 +1421,7 @@ probability tables is as follows. First, the bounding incoming energies are determined, i.e. find :math:`i` such that :math:`E_i < E < E_{i+1}`. We then sample a cross section band :math:`j` using the cumulative probabilities for table :math:`i`. This allows us to then calculate the elastic, fission, and -capture cross-sections from the probability tables interpolating between +capture cross sections from the probability tables interpolating between neighboring incoming energies. If interpolation is specified, then the cross sections are calculated as @@ -1469,9 +1430,10 @@ the cross sections are calculated as \sigma = \sigma_{i,j} + f (\sigma_{i+1,j} - \sigma{i,j}) -where :math:`f` is the interpolation factor defined in the same manner as -:eq:`sab-interpolation-factor`. If logarithmic interpolation is specified, the -cross sections are calculated as +where :math:`\sigma_{i,j}` is the j-th band cross section corresponding to the +i-th incoming neutron energy and :math:`f` is the interpolation factor defined +in the same manner as :eq:`sab-interpolation-factor`. If logarithmic +interpolation is specified, the cross sections are calculated as .. math:: :label: ptables-loglog @@ -1484,17 +1446,71 @@ where the interpolation factor is now defined as .. math:: :label: log-interpolation-factor - f = \frac{\log \frac{E}{E_i}}{\log \frac{E_{i+1}}{E_i}} + f = \frac{\log \frac{E}{E_i}}{\log \frac{E_{i+1}}{E_i}}. A flag is also present in the probability table that specifies whether an inelastic cross section should be calculated. If so, this is done from a normal reaction cross section (either MT=51 or a special MT). Finally, if the -cross-sections defined are above are specified to be factors and not true -cross-sections, they are multiplied by the underlying smooth cross section in +cross sections defined are above are specified to be factors and not true +cross sections, they are multiplied by the underlying smooth cross section in the unresolved range to get the actual cross sections. Lastly, the total cross section is calculated as the sum of the elastic, fission, capture, and inelastic cross sections. +----------------------------- +Variance Reduction Techniques +----------------------------- + +Survival Biasing +---------------- + +In problems with highly absorbing materials, a large fraction of neutrons may be +killed through absorption reactions, thus leading to tallies with very few +scoring events. To remedy this situation, an algorithm known as *survival +biasing* or *implicit absorption* (or sometimes *implicit capture*, even though +this is a misnomer) is commonly used. + +In survival biasing, absorption reactions are prohibited from occurring and +instead, at every collision, the weight of neutron is reduced by probability of +absorption occurring, i.e. + +.. math:: + :label: survival-biasing-weight + + w' = w \left ( 1 - \frac{\sigma_a (E)}{\sigma_t (E)} \right ) + +where :math:`w'` is the weight of the neutron after adjustment and :math:`w` is +the weight of the neutron before adjustment. A few other things need to be +handled differently if survival biasing is turned on. Although fission reactions +never actually occur with survival biasing, we still need to create fission +sites to serve as source sites for the next generation in the method of +successive generations. The algorithm for sampling fission sites is the same as +that described in :ref:`fission`. The only difference is in equation +:eq:`fission-neutrons`. We now need to produce + +.. math:: + :label: fission-neutrons-survival + + \nu = \frac{w}{k} \frac{\nu_t \sigma_f(E)}{\sigma_t (E)} + +fission sites, where :math:`w` is the weight of the neutron before being +adjusted. One should note this is just the expected number of neutrons produced +*per collision* rather than the expected number of neutrons produced given that +fission has already occurred. + +Additionally, since survival biasing can reduce the weight of the neutron to +very low values, it is always used in conjunction with a weight cutoff and +Russian rouletting. Two user adjustable parameters :math:`w_c` and :math:`w_s` +are given which are the weight below which neutrons should undergo Russian +roulette and the weight should they survive Russian roulette. The algorithm for +Russian rouletting is as follows. After a collision if :math:`w < w_c`, then the +neutron is killed with probability :math:`1 - w/w_s`. If it survives, the weight +is set equal to :math:`w_s`. One can confirm that the average weight following +Russian roulette is simply :math:`w`, so the game can be considered "fair". By +default, the cutoff weight in OpenMC is :math:`w_c = 0.25` and the survival +weight is :math:`w_s = 1.0`. These parameters vary from one Monte Carlo code to +another. + ---------- References ---------- @@ -1503,11 +1519,6 @@ References Secondary Neutron and Photon Energy Distributions," *Nucl. Sci. Eng.*, **50**, 390-392 (1972). -.. [Foderaro] Anthony Foderaro, *The Elements of Neutron Interaction Theory*, - MIT Press, Cambridge, Massachusetts (1971). **Note:** Students, faculty, and - staff at MIT can obtain a PDF copy of this book for free from the `MIT - Press`_. - .. [Gelbard] Ely M. Gelbard, "Epithermal Scattering in VIM," FRA-TM-123, Argonne National Laboratory (1979). @@ -1528,7 +1539,9 @@ References Neutrons*, North-Holland Publishing Co., Amsterdam (1966). **Note:** This book can be obtained for free from the OECD_. -.. |sab| replace:: S(:math:`\alpha,\beta`) +.. |sab| replace:: S(:math:`\alpha,\beta,T`) + +.. _Foderaro: http://hdl.handle.net/1721.1/1716 .. _OECD: http://www.oecd-nea.org/dbprog/MMRW-BOOKS.html @@ -1544,6 +1557,6 @@ References .. _Sutton and Brown: http://www.osti.gov/bridge/product.biblio.jsp?osti_id=307911 -.. _MIT Press: http://hdl.handle.net/1721.1/1716 - .. _lectures: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-05-4983.pdf + +.. _MCNP Manual: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/MCNP5_Manual_Volume_I_LA-UR-03-1987.pdf diff --git a/_sources/methods/random_numbers.txt b/_sources/methods/random_numbers.txt new file mode 100644 index 0000000000..88c4d65d52 --- /dev/null +++ b/_sources/methods/random_numbers.txt @@ -0,0 +1,74 @@ +.. _methods_random_numbers: + +======================== +Random Number Generation +======================== + +In order to sample probability distributions, one must be able to produce random +numbers. The standard technique to do this is to generate numbers on the +interval :math:`[0,1)` from a deterministic sequence that has properties that +make it appear to be random, e.g. being uniformly distributed and not exhibiting +correlation between successive terms. Since the numbers produced this way are +not truly "random" in a strict sense, they are typically referred to as +pseudorandom numbers, and the techniques used to generate them are pseudorandom +number generators (PRNGs). Numbers sampled on the unit interval can then be +transformed for the purpose of sampling other continuous or discrete probability +distributions. + +------------------------------ +Linear Congruential Generators +------------------------------ + +There are a great number of algorithms for generating random numbers. One of the +simplest and commonly used algorithms is called a `linear congruential +generator`_. We start with a random number *seed* :math:`\xi_0` and a sequence +of random numbers can then be generated using the following recurrence relation: + +.. math:: + :label: lcg + + \xi_{i+1} = g \xi_i + c \mod M + +where :math:`g`, :math:`c`, and :math:`M` are constants. The choice of these +constants will have a profound effect on the quality and performance of the +generator, so they should not be chosen arbitrarily. As Donald Knuth stated in +his seminal work *The Art of Computer Programming*, "random numbers should not +be generated with a method chosen at random. Some theory should be used." +Typically, :math:`M` is chosen to be a power of two as this enables :math:`x +\mod M` to be performed using the bitwise AND operator with a bit mask. The +constants for the linear congruential generator used by default in OpenMC are +:math:`g = 2806196910506780709`, :math:`c = 1`, and :math:`M = 2^{63}` (see +[LEcuyer]_). + +Skip-ahead Capability +--------------------- + +One of the important capabilities for a random number generator is to be able to +skip ahead in the sequence of random numbers. Without this capability, it would +be very difficult to maintain reproducibility in a parallel calculation. If we +want to skip ahead :math:`N` random numbers and :math:`N` is large, the cost of +sampling :math:`N` random numbers to get to that position may be prohibitively +expensive. Fortunately, algorithms have been developed that allow us to skip +ahead in :math:`O(\log_2 N)` operations instead of :math:`O(N)`. One algorithm +to do so is described in a paper by Brown_. This algorithm relies on the following +relationship: + +.. math:: + :label: lcg-skipahead + + \xi_{i+k} = g^k \xi_i + c \frac{g^k - 1}{g - 1} \mod M + +Note that :eq:`lcg-skipahead` has the same general form as \eqref{eq:lcg}, so +the idea is to determine the new multiplicative and additive constants in +:math:`O(\log_2 N)` operations. + +---------- +References +---------- + +.. [LEcuyer] P. L’Ecuyer, "Tables of Linear Congruential Generators of + Different Sizes and Good Lattice Structures," *Math. Comput.*, **68**, 249 + (1999). + +.. _Brown: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/anl_rn_arb-strides_1994.pdf +.. _linear congruential generator: http://en.wikipedia.org/wiki/Linear_congruential_generator diff --git a/_sources/methods/statistics.txt b/_sources/methods/statistics.txt deleted file mode 100644 index 946da066ba..0000000000 --- a/_sources/methods/statistics.txt +++ /dev/null @@ -1,369 +0,0 @@ -.. _methods_statistics: - -========== -Statistics -========== - -As was discussed briefly in :ref:`methods_introduction`, any given result from a -Monte Carlo calculation, colloquially known as a "tally", represents an estimate -of the mean of some `random variable`_ of interest. This random variable -typically corresponds to some physical quantity like a reaction rate, a net -current across some surface, or the neutron flux in a region. Given that all -tallies are produced by a `stochastic process`_, there is an associated -uncertainty with each value reported. It is important to understand how the -uncertainty is calculated and what it tells us about our results. To that end, -we will introduce a number of theorems and results from statistics that should -shed some light on the interpretation of uncertainties. - --------------------- -Law of Large Numbers --------------------- - -The `law of large numbers`_ is an important statistical result that tells us -that the average value of the result a large number of repeated experiments -should be close to the `expected value`_. Let :math:`X_1, X_2, \dots, X_n` be an -infinite sequence of `independent, identically-distributed random variables`_ -with expected values :math:`E(X_1) = E(X_2) = \mu`. One form of the law of large -numbers states that the sample mean :math:`\bar{X_n} = \frac{X_1 + \dots + -X_n}{n}` `converges in probability`_ to the true mean, i.e. for all -:math:`\epsilon > 0` - -.. math:: - - \lim\limits_{n\rightarrow\infty} P \left ( \left | \bar{X}_n - \mu \right | - \ge \epsilon \right ) = 0. - -.. _central-limit-theorem: - ---------------------- -Central Limit Theorem ---------------------- - -The `central limit theorem`_ (CLT) is perhaps the most well-known and ubiquitous -statistical theorem that has far-reaching implications across many -disciplines. The CLT is similar to the law of large numbers in that it tells us -the limiting behavior of the sample mean. Whereas the law of large numbers tells -us only that the value of the sample mean will converge to the expected value of -the distribution, the CLT says that the distribution of the sample mean will -converge to a `normal distribution`_. As we defined before, let :math:`X_1, X_2, -\dots, X_n` be an infinite sequence of independent, identically-distributed -random variables with expected values :math:`E(X_i) = \mu` and variances -:math:`\text{Var} (X_i) = \sigma^2 < \infty`. Note that we don't require that -these random variables take on any particular distribution -- they can be -normal, log-normal, Weibull, etc. The central limit theorem states that as -:math:`n \rightarrow \infty`, the random variable :math:`\sqrt{n} (\bar{X}_n - -\mu)` `converges in distribution`_ to the standard normal distribution: - -.. math:: - :label: central-limit-theorem - - \sqrt{n} \left ( \frac{1}{n} \sum_{i=1}^n X_i - \mu \right ) \xrightarrow{d} - \mathcal{N} (0, \sigma^2) - ------------------------------------------- -Estimating Statistics of a Random Variable ------------------------------------------- - -Mean ----- - -Given independent samples drawn from a random variable, the sample mean is -simply an estimate of the average value of the random variable. In a Monte Carlo -simulation, the random variable represents physical quantities that we want -tallied. If :math:`X` is the random variable with :math:`N` observations -:math:`x_1, x_2, \dots, x_N`, then an unbiased estimator for the population mean -is the sample mean, defined as - -.. math:: - :label: sample-mean - - \bar{x} = \frac{1}{N} \sum_{i=1}^N x_i. - -Variance --------- - -The variance of a population indicates how spread out different members of the -population are. For a Monte Carlo simulation, the variance of a tally is a -measure of how precisely we know the tally value, with a lower variance -indicating a higher precision. There are a few different estimators for the -population variance. One of these is the second central moment of the -distribution also known as the biased sample variance: - -.. math:: - :label: biased-variance - - s_N^2 = \frac{1}{N} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = \left ( - \frac{1}{N} \sum_{i=1}^N x_i^2 \right ) - \bar{x}^2. - -This estimator is biased because its expected value is actually not equal to the -population variance: - -.. math:: - :label: biased-variance-expectation - - E[s_N^2] = \frac{N - 1}{N} \sigma^2 - -where :math:`\sigma^2` is the actual population variance. As a result, this -estimator should not be used in practice. Instead, one can use `Bessel's -correction`_ to come up with an unbiased sample variance estimator: - -.. math:: - :label: unbiased-variance - - s^2 = \frac{1}{N - 1} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = - \frac{1}{N - 1} \left ( \sum_{i=1}^N x_i^2 - N\bar{x}^2 \right ). - -This is the estimator normally used to calculate sample variance. The final form -in equation :eq:`unbiased-variance` is especially suitable for computation since -we do not need to store the values at every realization of the random variable -as the simulation proceeds. Instead, we can simply keep a running sum and sum of -squares of the values at each realization of the random variable and use that to -calculate the variance. - -Variance of the Mean --------------------- - -The previous sections discussed how to estimate the mean and variance of a -random variable using statistics on a finite sample. However, we are generally -not interested in the *variance of the random variable* itself; we are more -interested in the *variance of the estimated mean*. The sample mean is the -result of our simulation, and the variance of the sample mean will tell us how -confident we should be in our answers. - -Fortunately, it is quite easy to estimate the variance of the mean if we are -able to estimate the variance of the random variable. We start with the -observation that if we have a series of uncorrelated random variables, we can -write the variance of their sum as the sum of their variances: - -.. math:: - :label: bienayme-formula - - \text{Var} \left ( \sum_{i=1}^N X_i \right ) = \sum_{i=1}^N \text{Var} \left - ( X_i \right ) - -This result is known as the Bienaymé formula. We can use this result to -determine a formula for the variance of the sample mean. Assuming that the -realizations of our random variable are again identical, -independently-distributed samples, then we have that - -.. math:: - :label: sample-variance-mean - - \text{Var} \left ( \bar{X} \right ) = \text{Var} \left ( \frac{1}{N} - \sum_{i=1}^N X_i \right ) = \frac{1}{N^2} \sum_{i=1}^N \text{Var} \left ( - X_i \right ) = \frac{1}{N^2} \left ( N\sigma^2 \right ) = - \frac{\sigma^2}{N}. - -We can combine this result with equation :eq:`unbiased-variance` to come up with -an unbiased estimator for the variance of the sample mean: - -.. math:: - :label: sample-variance-mean-formula - - s_{\bar{X}}^2 = \frac{1}{N - 1} \left ( \frac{1}{N} \sum_{i=1}^N x_i^2 - - \bar{x}^2 \right ). - -At this point, an important distinction should be made between the estimator for -the variance of the population and the estimator for the variance of the -mean. As the number of realizations increases, the estimated variance of the -population based on equation :eq:`unbiased-variance` will tend to the true -population variance. On the other hand, the estimated variance of the mean will -tend to zero as the number of realizations increases. A practical interpretation -of this is that the longer you run a simulation, the better you know your -results. Therefore, by running a simulation long enough, it is possible to -reduce the stochastic uncertainty to arbitrarily low levels. - -Confidence Intervals --------------------- - -While the sample variance and standard deviation gives us some idea about the -variability of the estimate of the mean of whatever quantities we've tallied, it -does not help us interpret how confidence we should be in the results. To -quantity the reliability of our estimates, we can use `confidence intervals`_ -based on the calculated sample variance. - -A :math:`1-\alpha` confidence interval for a population parameter is defined as -such: if we repeat the same experiment many times and calculate the confidence -interval for each experiment, then :math:`1 - \alpha` percent of the calculated -intervals would encompass the true population parameter. Let :math:`x_1, x_2, -\dots, x_N` be samples from a set of independent, identically-distributed random -variables each with population mean :math:`\mu` and variance -:math:`\sigma^2`. The t-statistic is defined as - -.. math:: - :label: t-statistic - - t = \frac{\bar{x} - \mu}{s/\sqrt{N}} - -where :math:`\bar{x}` is the sample mean from equation :eq:`sample-mean` and -:math:`s` is the standard deviation based on equation -:eq:`unbiased-variance`. If the random variables :math:`X_i` are -normally-distributed, then the t-statistic has a `Student's t-distribution`_ -with :math:`N-1` degrees of freedom. This implies that - -.. math:: - :label: t-probability - - Pr \left ( -t_{1 - \alpha/2, N - 1} \le \frac{\bar{x} - \mu}{s/\sqrt{N}} \le - t_{1 - \alpha/2, N - 1} \right ) = 1 - \alpha - -where :math:`t_{1-\alpha/2, N-1}` is the :math:`1 - \alpha/2` percentile of a -t-distribution with :math:`N-1` degrees of freedom. Thus, the :math:`1 - \alpha` -two sided confidence interval for the sample mean is - -.. math:: - :label: two-sided-ci - - \bar{x} \pm t_{1 - \alpha/2, N-1} \frac{s}{\sqrt{N}}. - -One should be cautioned that equation :eq:`two-sided-ci` **only applies if the -underlying random variables are normally-distributed!** In general, this may not -be true for a tally random variable -- the central limit theorem guarantees only -that the sample mean is normally distributed, not the underlying random -variable. If batching is used, then the underlying random variable, which would -then be the averages from each batch, will be normally distributed as long as -the conditions of the central limit theorem are met. - -Let us now outline the method used to calculate the percentile of the Student's -t-distribution. For one or two degrees of freedom, the percentile can be written -analytically. For one degree of freedom, the t-distribution becomes a standard -`Cauchy distribution`_ whose cumulative distribution function is - -.. math:: - :label: cauchy-cdf - - c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}. - -Thus, inverting the cumulative distribution function, we find the :math:`x` -percentile of the standard Cauchy distribution to be - -.. math:: - :label: percentile-1 - - t_{x,1} = \tan \left ( \pi \left ( x - \frac{1}{2} \right ) \right ). - -For two degrees of freedom, the cumulative distribution function is the -second-degree polynomial - -.. math:: - :label: t-2-polynomial - - c(x) = \frac{1}{2} + \frac{x}{2\sqrt{x^2 + 2}} - -Solving for :math:`x`, we find the :math:`x` percentile to be - -.. math:: - :label: percentile-2 - - t_{x,2} = \frac{2\sqrt{2} (x - 1/2)}{\sqrt{1 - 4 (x - 1/2)^2}} - -For degrees of freedom greater than two, it is not possible to obtain an -analytical formula for the inverse of the cumulative distribution function. We -must resort to either numerically solving for the inverse or to an -approximation. Approximations for percentiles of the t-distribution have been -found with high levels of accuracy. OpenMC uses the approximation from -[George]_: - -.. math:: - :label: percentile-n - - t_{x,n} = \sqrt{\frac{n}{n-2}} \left ( z_x + \frac{1}{4} \frac{z_x^3 - - 3z_x}{n-2} + \frac{1}{96} \frac{5z_x^5 - 56z_x^3 + 75z_x}{(n-2)^2} + - \frac{1}{384} \frac{3z_x^7 - 81z_x^5 + 417z_x^3 - 315z_x}{(n-2)^3} \right ) - -where :math:`z_x` is the :math:`x` percentile of the standard normal -distribution. In order to determine an arbitrary percentile of the standard -normal distribution, we use an `unpublished rational approximation`_. After -using the rational approximation, one iteration of Newton's method is applied to -improve the estimate of the percentile. - ------------------------- -Random Number Generation ------------------------- - -In order to sample probability distributions, one must be able to produce random -numbers. The standard technique to do this is to generate numbers on the -interval :math:`[0,1)` from a deterministic sequence that has a properties that -make it appear to be random, e.g. being uniformly distributed and not exhibiting -correlation between successive terms. Since the numbers are not truly "random" -in the strict sense, they are typically referred to as pseudo-random numbers, -and the techniques used to generate them are pseudo-random number generators -(PRNGs). Numbers sampled on the unit interval can then be used transformed for -the purpose of sampling other continuous or discrete probability distributions. - -There are a great number of algorithms for generating random numbers. One of the -simplest and commonly used algorithms is called a `linear congruential -generator`_. We start with some random number seed :math:`\xi_0` and a sequence -of random numbers is generated using the following recurrence relation: - -.. math:: - :label: lcg - - \xi_{i+1} = g \xi_i + c \mod M - -where :math:`g`, :math:`c`, and :math:`M` are constants. The choice of these -constants will have a profound effect on the quality and performance of the -generator, so they should not be chosen arbitrarily. As Donald Knuth said in his -seminal work *The Art of Computer Programming*, "random numbers should not be -generated with a method chosen at random. Some theory should be used." -Typically, :math:`M` is chosen to be a power of two as this enables :math:`x -\mod M` to be performed using the binary AND operator with a bit mask. The -constants for the linear congruential generator used by default in OpenMC are -:math:`g = 2806196910506780709`, :math:`c = 1`, and :math:`M = 2^{63}`. - -One of the important capabilities for a random number generator is to be able to -skip ahead in the sequence of random numbers. Without this capability, it would -be very difficult to maintain reproducibility in a parallel calculation. If we -want to skip ahead :math:`N` random numbers and :math:`N` is large, the cost of -just sampling :math:`N` random numbers to get to that position may be -prohibitively expensive. Fortunately, algorithms have been developed that allow -us to skip ahead in :math:`O(\log N)` operations instead of :math:`O(N)`. One -algorithm to do so is described in a paper by Brown_. This algorithm relies on -the following relationship: - -.. math:: - :label: lcg-skipahead - - \xi_{i+k} = g^k \xi_i + c \frac{g^k - 1}{g - 1} \mod M - -Note that equation :eq:`lcg-skipahead` has the same form as equation :eq:`lcg` -so the idea is to determine the new multiplicative and additive constants in -:math:`O(\log N)` operations. - ----------- -References ----------- - -.. [George] E. E. Olusegun George and Meenakshi Sivaram, "A modification of the - Fisher-Cornish approximation for the student t percentiles," Communication - in Statistics - Simulation and Computation, 16 (4), pp. 1123-1132 (1987). - -.. _linear congruential generator: http://en.wikipedia.org/wiki/Linear_congruential_generator - -.. _Brown: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/anl_rn_arb-strides_1994.pdf - -.. _Bessel's correction: http://en.wikipedia.org/wiki/Bessel's_correction - -.. _random variable: http://en.wikipedia.org/wiki/Random_variable - -.. _stochastic process: http://en.wikipedia.org/wiki/Stochastic_process - -.. _independent, identically-distributed random variables: http://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables - -.. _law of large numbers: http://en.wikipedia.org/wiki/Law_of_large_numbers - -.. _expected value: http://en.wikipedia.org/wiki/Expected_value - -.. _converges in probability: http://en.wikipedia.org/wiki/Convergence_of_random_variables#Convergence_in_probability - -.. _normal distribution: http://en.wikipedia.org/wiki/Normal_distribution - -.. _converges in distribution: http://en.wikipedia.org/wiki/Convergence_of_random_variables#Convergence_in_distribution - -.. _confidence intervals: http://en.wikipedia.org/wiki/Confidence_interval - -.. _Student's t-distribution: http://en.wikipedia.org/wiki/Student%27s_t-distribution - -.. _Cauchy distribution: http://en.wikipedia.org/wiki/Cauchy_distribution - -.. _unpublished rational approximation: http://home.online.no/~pjacklam/notes/invnorm/ diff --git a/_sources/methods/tallies.txt b/_sources/methods/tallies.txt index 4e38477a6a..6c16f08136 100644 --- a/_sources/methods/tallies.txt +++ b/_sources/methods/tallies.txt @@ -29,16 +29,16 @@ equation :eq:`tally-integral`). For example, if the desired tally was the cell which contains the fuel pin and the scoring function would be the radiative capture macroscopic cross section. The following quantities can be scored in OpenMC: flux, total reaction rate, scattering reaction rate, neutron production -from scattering, higher scattering moments, (n,xn) reaction rates, absorption -reaction rate, fission reaction rate, neutron production rate from fission, and -surface currents. The following variables can be used as filters: universe, -material, cell, birth cell, surface, mesh, pre-collision energy, and +from scattering, higher scattering moments, :math:`(n,xn)` reaction rates, +absorption reaction rate, fission reaction rate, neutron production rate from +fission, and surface currents. The following variables can be used as filters: +universe, material, cell, birth cell, surface, mesh, pre-collision energy, and post-collision energy. With filters for pre- and post-collision energy and scoring functions for scattering and fission production, it is possible to use OpenMC to generate cross sections with user-defined group structures. These multigroup cross -sections can subsequently be used in deterministic solvers such as coarse-mesh +sections can subsequently be used in deterministic solvers such as coarse mesh finite difference (CMFD) diffusion. ------------------------------ @@ -87,7 +87,9 @@ reaction :math:`x`, and :math:`W` is the total starting weight of the particles, and :math:`w_i` is the pre-collision weight of the particle as it enters event :math:`i`. One should note that equation :eq:`analog-estimator` is volume-integrated so if we want a volume-averaged quantity, we need to divided -by the volume of the region of integration. +by the volume of the region of integration. If survival biasing is employed, the +analog estimator cannot be used for any reactions with zero neutrons in the exit +channel. Collision Estimator ------------------- @@ -145,7 +147,7 @@ start with an expression for the volume integrated flux, which can be written as :label: flux-integrated V \phi = \int d\mathbf{r} \int dE \int d\mathbf{\Omega} \int dt \, - \psi(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t). + \psi(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t) where :math:`V` is the volume, :math:`\psi` is the angular flux, :math:`\mathbf{r}` is the position of the particle, :math:`\mathbf{\hat{\Omega}}` @@ -159,7 +161,7 @@ where :math:`n` is the angular neutron density, we can rewrite equation :label: flux-integrated-2 V \phi = \int d\mathbf{r} \int dE \int dt v \int d\mathbf{\Omega} \, n(\mathbf{r}, - \mathbf{\hat{\Omega}}, E, t)) + \mathbf{\hat{\Omega}}, E, t)). Using the relations :math:`N(\mathbf{r}, E, t) = \int d\mathbf{\Omega} n(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t)` and :math:`d\ell = v \, dt` where @@ -168,7 +170,7 @@ n(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t)` and :math:`d\ell = v \, dt` where .. math:: :label: track-length-integral - V \phi = \int d\mathbf{r} \int dE \int d\ell N(\mathbf{r}, E, t) + V \phi = \int d\mathbf{r} \int dE \int d\ell N(\mathbf{r}, E, t). Equation :eq:`track-length-integral` indicates that we can use the length of a particle's trajectory as an estimate for the flux, i.e. the track-length @@ -188,7 +190,7 @@ macroscopic reaction cross section: .. math:: :label: track-length-estimator - R_x = \frac{1}{W} \sum_{i \in T} w_i \ell_i \Sigma_x (E_i) + R_x = \frac{1}{W} \sum_{i \in T} w_i \ell_i \Sigma_x (E_i). One important fact to take into consideration is that the use of a track-length estimator precludes us from using any filter that requires knowledge of the @@ -197,8 +199,314 @@ had a collision at every event. Thus, for tallies with outgoing-energy filters (which require the post-collision energy) or for tallies of scattering moments (which require the scattering cosine), we must use an analog estimator. ---------------- -Surface Current ---------------- +.. TODO: Add description of surface current tallies + +---------- +Statistics +---------- + +As was discussed briefly in :ref:`methods_introduction`, any given result from a +Monte Carlo calculation, colloquially known as a "tally", represents an estimate +of the mean of some `random variable`_ of interest. This random variable +typically corresponds to some physical quantity like a reaction rate, a net +current across some surface, or the neutron flux in a region. Given that all +tallies are produced by a `stochastic process`_, there is an associated +uncertainty with each value reported. It is important to understand how the +uncertainty is calculated and what it tells us about our results. To that end, +we will introduce a number of theorems and results from statistics that should +shed some light on the interpretation of uncertainties. + +Law of Large Numbers +-------------------- + +The `law of large numbers`_ is an important statistical result that tells us +that the average value of the result a large number of repeated experiments +should be close to the `expected value`_. Let :math:`X_1, X_2, \dots, X_n` be an +infinite sequence of `independent, identically-distributed random variables`_ +with expected values :math:`E(X_1) = E(X_2) = \mu`. One form of the law of large +numbers states that the sample mean :math:`\bar{X_n} = \frac{X_1 + \dots + +X_n}{n}` `converges in probability`_ to the true mean, i.e. for all +:math:`\epsilon > 0` + +.. math:: + + \lim\limits_{n\rightarrow\infty} P \left ( \left | \bar{X}_n - \mu \right | + \ge \epsilon \right ) = 0. + +.. _central-limit-theorem: + +Central Limit Theorem +--------------------- + +The `central limit theorem`_ (CLT) is perhaps the most well-known and ubiquitous +statistical theorem that has far-reaching implications across many +disciplines. The CLT is similar to the law of large numbers in that it tells us +the limiting behavior of the sample mean. Whereas the law of large numbers tells +us only that the value of the sample mean will converge to the expected value of +the distribution, the CLT says that the distribution of the sample mean will +converge to a `normal distribution`_. As we defined before, let :math:`X_1, X_2, +\dots, X_n` be an infinite sequence of independent, identically-distributed +random variables with expected values :math:`E(X_i) = \mu` and variances +:math:`\text{Var} (X_i) = \sigma^2 < \infty`. Note that we don't require that +these random variables take on any particular distribution -- they can be +normal, log-normal, Weibull, etc. The central limit theorem states that as +:math:`n \rightarrow \infty`, the random variable :math:`\sqrt{n} (\bar{X}_n - +\mu)` `converges in distribution`_ to the standard normal distribution: + +.. math:: + :label: central-limit-theorem + + \sqrt{n} \left ( \frac{1}{n} \sum_{i=1}^n X_i - \mu \right ) \xrightarrow{d} + \mathcal{N} (0, \sigma^2) + +Estimating Statistics of a Random Variable +------------------------------------------ + +Mean +++++ + +Given independent samples drawn from a random variable, the sample mean is +simply an estimate of the average value of the random variable. In a Monte Carlo +simulation, the random variable represents physical quantities that we want +tallied. If :math:`X` is the random variable with :math:`N` observations +:math:`x_1, x_2, \dots, x_N`, then an unbiased estimator for the population mean +is the sample mean, defined as + +.. math:: + :label: sample-mean + + \bar{x} = \frac{1}{N} \sum_{i=1}^N x_i. + +Variance +++++++++ + +The variance of a population indicates how spread out different members of the +population are. For a Monte Carlo simulation, the variance of a tally is a +measure of how precisely we know the tally value, with a lower variance +indicating a higher precision. There are a few different estimators for the +population variance. One of these is the second central moment of the +distribution also known as the biased sample variance: + +.. math:: + :label: biased-variance + + s_N^2 = \frac{1}{N} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = \left ( + \frac{1}{N} \sum_{i=1}^N x_i^2 \right ) - \bar{x}^2. + +This estimator is biased because its expected value is actually not equal to the +population variance: + +.. math:: + :label: biased-variance-expectation + + E[s_N^2] = \frac{N - 1}{N} \sigma^2 + +where :math:`\sigma^2` is the actual population variance. As a result, this +estimator should not be used in practice. Instead, one can use `Bessel's +correction`_ to come up with an unbiased sample variance estimator: + +.. math:: + :label: unbiased-variance + + s^2 = \frac{1}{N - 1} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = + \frac{1}{N - 1} \left ( \sum_{i=1}^N x_i^2 - N\bar{x}^2 \right ). + +This is the estimator normally used to calculate sample variance. The final form +in equation :eq:`unbiased-variance` is especially suitable for computation since +we do not need to store the values at every realization of the random variable +as the simulation proceeds. Instead, we can simply keep a running sum and sum of +squares of the values at each realization of the random variable and use that to +calculate the variance. + +Variance of the Mean +++++++++++++++++++++ + +The previous sections discussed how to estimate the mean and variance of a +random variable using statistics on a finite sample. However, we are generally +not interested in the *variance of the random variable* itself; we are more +interested in the *variance of the estimated mean*. The sample mean is the +result of our simulation, and the variance of the sample mean will tell us how +confident we should be in our answers. + +Fortunately, it is quite easy to estimate the variance of the mean if we are +able to estimate the variance of the random variable. We start with the +observation that if we have a series of uncorrelated random variables, we can +write the variance of their sum as the sum of their variances: + +.. math:: + :label: bienayme-formula + + \text{Var} \left ( \sum_{i=1}^N X_i \right ) = \sum_{i=1}^N \text{Var} \left + ( X_i \right ) + +This result is known as the Bienaymé formula. We can use this result to +determine a formula for the variance of the sample mean. Assuming that the +realizations of our random variable are again identical, +independently-distributed samples, then we have that + +.. math:: + :label: sample-variance-mean + + \text{Var} \left ( \bar{X} \right ) = \text{Var} \left ( \frac{1}{N} + \sum_{i=1}^N X_i \right ) = \frac{1}{N^2} \sum_{i=1}^N \text{Var} \left ( + X_i \right ) = \frac{1}{N^2} \left ( N\sigma^2 \right ) = + \frac{\sigma^2}{N}. + +We can combine this result with equation :eq:`unbiased-variance` to come up with +an unbiased estimator for the variance of the sample mean: + +.. math:: + :label: sample-variance-mean-formula + + s_{\bar{X}}^2 = \frac{1}{N - 1} \left ( \frac{1}{N} \sum_{i=1}^N x_i^2 - + \bar{x}^2 \right ). + +At this point, an important distinction should be made between the estimator for +the variance of the population and the estimator for the variance of the +mean. As the number of realizations increases, the estimated variance of the +population based on equation :eq:`unbiased-variance` will tend to the true +population variance. On the other hand, the estimated variance of the mean will +tend to zero as the number of realizations increases. A practical interpretation +of this is that the longer you run a simulation, the better you know your +results. Therefore, by running a simulation long enough, it is possible to +reduce the stochastic uncertainty to arbitrarily low levels. + +Confidence Intervals +++++++++++++++++++++ + +While the sample variance and standard deviation gives us some idea about the +variability of the estimate of the mean of whatever quantities we've tallied, it +does not help us interpret how confidence we should be in the results. To +quantity the reliability of our estimates, we can use `confidence intervals`_ +based on the calculated sample variance. + +A :math:`1-\alpha` confidence interval for a population parameter is defined as +such: if we repeat the same experiment many times and calculate the confidence +interval for each experiment, then :math:`1 - \alpha` percent of the calculated +intervals would encompass the true population parameter. Let :math:`x_1, x_2, +\dots, x_N` be samples from a set of independent, identically-distributed random +variables each with population mean :math:`\mu` and variance +:math:`\sigma^2`. The t-statistic is defined as + +.. math:: + :label: t-statistic + + t = \frac{\bar{x} - \mu}{s/\sqrt{N}} + +where :math:`\bar{x}` is the sample mean from equation :eq:`sample-mean` and +:math:`s` is the standard deviation based on equation +:eq:`unbiased-variance`. If the random variables :math:`X_i` are +normally-distributed, then the t-statistic has a `Student's t-distribution`_ +with :math:`N-1` degrees of freedom. This implies that + +.. math:: + :label: t-probability + + Pr \left ( -t_{1 - \alpha/2, N - 1} \le \frac{\bar{x} - \mu}{s/\sqrt{N}} \le + t_{1 - \alpha/2, N - 1} \right ) = 1 - \alpha + +where :math:`t_{1-\alpha/2, N-1}` is the :math:`1 - \alpha/2` percentile of a +t-distribution with :math:`N-1` degrees of freedom. Thus, the :math:`1 - \alpha` +two sided confidence interval for the sample mean is + +.. math:: + :label: two-sided-ci + + \bar{x} \pm t_{1 - \alpha/2, N-1} \frac{s}{\sqrt{N}}. + +One should be cautioned that equation :eq:`two-sided-ci` only applies if the +*underlying random variables* are normally-distributed. In general, this may not +be true for a tally random variable --- the central limit theorem guarantees +only that the sample mean is normally distributed, not the underlying random +variable. If batching is used, then the underlying random variable, which would +then be the averages from each batch, will be normally distributed as long as +the conditions of the central limit theorem are met. + +Let us now outline the method used to calculate the percentile of the Student's +t-distribution. For one or two degrees of freedom, the percentile can be written +analytically. For one degree of freedom, the t-distribution becomes a standard +`Cauchy distribution`_ whose cumulative distribution function is + +.. math:: + :label: cauchy-cdf + + c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}. + +Thus, inverting the cumulative distribution function, we find the :math:`x` +percentile of the standard Cauchy distribution to be + +.. math:: + :label: percentile-1 + + t_{x,1} = \tan \left ( \pi \left ( x - \frac{1}{2} \right ) \right ). + +For two degrees of freedom, the cumulative distribution function is the +second-degree polynomial + +.. math:: + :label: t-2-polynomial + + c(x) = \frac{1}{2} + \frac{x}{2\sqrt{x^2 + 2}} + +Solving for :math:`x`, we find the :math:`x` percentile to be + +.. math:: + :label: percentile-2 + + t_{x,2} = \frac{2\sqrt{2} (x - 1/2)}{\sqrt{1 - 4 (x - 1/2)^2}} + +For degrees of freedom greater than two, it is not possible to obtain an +analytical formula for the inverse of the cumulative distribution function. We +must resort to either numerically solving for the inverse or to an +approximation. Approximations for percentiles of the t-distribution have been +found with high levels of accuracy. OpenMC uses the approximation from +[George]_: + +.. math:: + :label: percentile-n + + t_{x,n} = \sqrt{\frac{n}{n-2}} \left ( z_x + \frac{1}{4} \frac{z_x^3 - + 3z_x}{n-2} + \frac{1}{96} \frac{5z_x^5 - 56z_x^3 + 75z_x}{(n-2)^2} + + \frac{1}{384} \frac{3z_x^7 - 81z_x^5 + 417z_x^3 - 315z_x}{(n-2)^3} \right ) + +where :math:`z_x` is the :math:`x` percentile of the standard normal +distribution. In order to determine an arbitrary percentile of the standard +normal distribution, we use an `unpublished rational approximation`_. After +using the rational approximation, one iteration of Newton's method is applied to +improve the estimate of the percentile. + +---------- +References +---------- + +.. [George] E. E. Olusegun George and Meenakshi Sivaram, "A modification of the + Fisher-Cornish approximation for the student t percentiles," Communication + in Statistics - Simulation and Computation, 16 (4), pp. 1123-1132 (1987). + +.. _Bessel's correction: http://en.wikipedia.org/wiki/Bessel's_correction + +.. _random variable: http://en.wikipedia.org/wiki/Random_variable + +.. _stochastic process: http://en.wikipedia.org/wiki/Stochastic_process + +.. _independent, identically-distributed random variables: http://en.wikipedia.org/wiki/Independent_and_identically_distributed_random_variables + +.. _law of large numbers: http://en.wikipedia.org/wiki/Law_of_large_numbers + +.. _expected value: http://en.wikipedia.org/wiki/Expected_value + +.. _converges in probability: http://en.wikipedia.org/wiki/Convergence_of_random_variables#Convergence_in_probability + +.. _normal distribution: http://en.wikipedia.org/wiki/Normal_distribution + +.. _converges in distribution: http://en.wikipedia.org/wiki/Convergence_of_random_variables#Convergence_in_distribution + +.. _confidence intervals: http://en.wikipedia.org/wiki/Confidence_interval + +.. _Student's t-distribution: http://en.wikipedia.org/wiki/Student%27s_t-distribution + +.. _Cauchy distribution: http://en.wikipedia.org/wiki/Cauchy_distribution + +.. _unpublished rational approximation: http://home.online.no/~pjacklam/notes/invnorm/ .. _MC21: http://www.osti.gov/bridge/servlets/purl/903083-HT5p1o/903083.pdf diff --git a/_sources/publications.txt b/_sources/publications.txt index 9c9deabc12..1b4f404425 100644 --- a/_sources/publications.txt +++ b/_sources/publications.txt @@ -6,7 +6,7 @@ Publications - Paul K. Romano and Benoit Forget, "Reducing Parallel Communication in Monte Carlo Simulations via Batch Statistics," *Trans. Am. Nucl. Soc.*, **107**, - xxx--xxx (2012). + 519--522 (2012). - Paul K. Romano and Benoit Forget, "The OpenMC Monte Carlo Particle Transport Code," *Ann. Nucl. Energy*, **51**, 274--281 diff --git a/_sources/releasenotes/index.txt b/_sources/releasenotes/index.txt index 6424aebbe0..e00b199f82 100644 --- a/_sources/releasenotes/index.txt +++ b/_sources/releasenotes/index.txt @@ -10,6 +10,7 @@ bugs fixed, and known issues for each successive release. .. toctree:: :maxdepth: 1 + notes_0.5.0 notes_0.4.4 notes_0.4.3 notes_0.4.2 diff --git a/_sources/releasenotes/notes_0.4.4.txt b/_sources/releasenotes/notes_0.4.4.txt index c6cf6fed87..55a0c3f6f8 100644 --- a/_sources/releasenotes/notes_0.4.4.txt +++ b/_sources/releasenotes/notes_0.4.4.txt @@ -33,13 +33,13 @@ Bug Fixes --------- - 4654ee_: Fixed plotting with void cells. -- 7ee416_: Fixed bug with multi-line input using type='word'. +- 7ee461_: Fixed bug with multi-line input using type='word'. - 792eb3_: Fixed degrees of freedom for confidence intervals. - 7fd617_: Fixed bug with restart runs in parallel. - dc4a8f_: Fixed bug with fixed source restart runs. .. _4654ee: https://github.com/mit-crpg/openmc/commit/4654ee -.. _7ee416: https://github.com/mit-crpg/openmc/commit/7ee416 +.. _7ee461: https://github.com/mit-crpg/openmc/commit/7ee461 .. _792eb3: https://github.com/mit-crpg/openmc/commit/792eb3 .. _7fd617: https://github.com/mit-crpg/openmc/commit/7fd617 .. _dc4a8f: https://github.com/mit-crpg/openmc/commit/dc4a8f diff --git a/_sources/releasenotes/notes_0.5.0.txt b/_sources/releasenotes/notes_0.5.0.txt new file mode 100644 index 0000000000..16be1b063b --- /dev/null +++ b/_sources/releasenotes/notes_0.5.0.txt @@ -0,0 +1,52 @@ +.. _notes_0.5.0: + +============================== +Release Notes for OpenMC 0.5.0 +============================== + +------------------- +System Requirements +------------------- + +There are no special requirements for running the OpenMC code. As of this +release, OpenMC has been tested on a variety of Linux distributions, Mac OS X, +and Microsoft Windows 7. Memory requirements will vary depending on the size of +the problem at hand (mostly on the number of nuclides in the problem). + +------------ +New Features +------------ + +- All user input options that formerly accepted "off" or "on" should now be + "false" or "true" (the proper XML schema datatype). +- The element is deprecated and was replaced with . +- Added 'events' score that returns number of events that scored to a tally. +- Restructured tally filter implementation and user input. +- Source convergence acceleration via CMFD (implemented with PETSc). +- Ability to read source files in parallel when number of particles is greater + than that number of source sites. +- Cone surface types. + +--------- +Bug Fixes +--------- + +- 737b90_: Coincident surfaces from separate universes / particle traveling + tangent to a surface. +- a819b4_: Output of surface neighbors in summary.out file. +- b11696_: Reading long attribute lists in XML input. +- 2bd46a_: Search for tallying nuclides when no default_xs specified. +- 7a1f08_: Fix word wrapping when writing messages. +- c0e3ec_: Prevent underflow when compiling with MPI=yes and DEBUG=yes. +- 6f8d9d_: Set default tally labels. +- 6a3a5e_: Fix problem with corner-crossing in lattices. + +.. _737b90: https://github.com/mit-crpg/openmc/commit/737b90 +.. _a819b4: https://github.com/mit-crpg/openmc/commit/a819b4 +.. _b11696: https://github.com/mit-crpg/openmc/commit/b11696 +.. _2bd46a: https://github.com/mit-crpg/openmc/commit/2bd46a +.. _7a1f08: https://github.com/mit-crpg/openmc/commit/7a1f08 +.. _c0e3ec: https://github.com/mit-crpg/openmc/commit/c0e3ec +.. _6f8d9d: https://github.com/mit-crpg/openmc/commit/6f8d9d +.. _6a3a5e: https://github.com/mit-crpg/openmc/commit/6a3a5e + diff --git a/_sources/usersguide/input.txt b/_sources/usersguide/input.txt index 2a5b146899..0f9d516a15 100644 --- a/_sources/usersguide/input.txt +++ b/_sources/usersguide/input.txt @@ -62,43 +62,12 @@ settings.xml file. ---------------------------------- The ```` element has no attributes and has an accepted -value of "on" or "off". If set to "on", uncertainties on tally results will be -reported as the half-width of the 95% two-sided confidence interval. If set to -"off", uncertainties on tally results will be reported as the sample standard -deviation. +value of "true" or "flase". If set to "true", uncertainties on tally results +will be reported as the half-width of the 95% two-sided confidence interval. If +set to "false", uncertainties on tally results will be reported as the sample +standard deviation. - *Default*: off - -```` Element -------------------------- - -The ```` element indicates that a criticality calculation should be -performed. It has the following attributes/sub-elements: - - :batches: - The total number of batches, where each batch corresponds to multiple - fission source iterations. Batching is done to eliminate correlation between - realizations of random variables. - - *Default*: None - - :generations_per_batch: - The number of total fission source iterations per batch. - - *Default*: 1 - - :inactive: - The number of inactive batches. In general, the starting cycles in a - criticality calculation can not be used to contribute to tallies since the - fission source distribution and eigenvalue are generally not converged - immediately. - - *Default*: None - - :particles: - The number of neutrons to simulate per fission source iteration. - - *Default*: None + *Default*: false .. _cross_sections: @@ -130,6 +99,37 @@ default. This element has the following attributes/sub-elements: *Default*: 1.0 +```` Element +------------------------ + +The ```` element indicates that a :math:`k`-eigenvalue calculation +should be performed. It has the following attributes/sub-elements: + + :batches: + The total number of batches, where each batch corresponds to multiple + fission source iterations. Batching is done to eliminate correlation between + realizations of random variables. + + *Default*: None + + :generations_per_batch: + The number of total fission source iterations per batch. + + *Default*: 1 + + :inactive: + The number of inactive batches. In general, the starting cycles in a + criticality calculation can not be used to contribute to tallies since the + fission source distribution and eigenvalue are generally not converged + immediately. + + *Default*: None + + :particles: + The number of neutrons to simulate per fission source iteration. + + *Default*: None + ```` Element ------------------------- @@ -185,14 +185,14 @@ performed. It has the following attributes/sub-elements: ```` Element ----------------------- -The ```` element has no attributes and has an accepted value of "on" -or "off". If set to "on", all user-defined tallies and global tallies will not -be reduced across processors in a parallel calculation. This means that the -accumulate score in one batch on a single processor is considered as an +The ```` element has no attributes and has an accepted value of +"true" or "false". If set to "true", all user-defined tallies and global tallies +will not be reduced across processors in a parallel calculation. This means that +the accumulate score in one batch on a single processor is considered as an independent realization for the tally random variable. For a problem with large tally data, this option can significantly improve the parallel efficiency. - *Default*: off + *Default*: false ```` Element -------------------- @@ -217,9 +217,18 @@ sections summary file to be written, this element should be given as: The ```` element determines whether probability tables should be used in the unresolved resonance range if available. This element has no attributes -or sub-elements and can be set to either "off" or "on". +or sub-elements and can be set to either "false" or "true". - *Default*: on + *Default*: true + +```` Element +---------------------- + +The ```` element indicates whether or not CMFD acceleration should be +turned on or off. This element has no attributes or sub-elements and can be set +to either "false" or "true". + + *Defualt*: false ```` Element ------------------ @@ -340,20 +349,20 @@ attributes/sub-elements: *Default*: None :source_separate: - If this element is set to "on", a separate binary source file will be + If this element is set to "true", a separate binary source file will be written. Otherwise, the source sites will be written in the state point directly. - *Default*: "off" + *Default*: false ```` Element ------------------------------ The ```` element has no attributes and has an accepted value -of "on" or "off". If set to "on", this option will enable the use of survival -biasing, otherwise known as implicit capture or absorption. +of "true" or "false". If set to "true", this option will enable the use of +survival biasing, otherwise known as implicit capture or absorption. - *Default*: off + *Default*: false .. _trace: @@ -798,13 +807,19 @@ The following responses can be tallied. Total reaction rate :scatter: - Total scattering rate + Total scattering rate. Can also be identified with the ``scatter-0`` + response type. :nu-scatter: Total production of neutrons due to scattering. This accounts for multiplicity from (n,2n), (n,3n), and (n,4n) reactions and should be slightly higher than the scattering rate. + :scatter-0: + Zeroth scattering moment. Can also be identified with the ``scatter`` + response type, but is provided for consistency with the higher order + scattering moments. + :scatter-1: First scattering moment @@ -813,6 +828,12 @@ The following responses can be tallied. :scatter-3: Third scattering moment + + :scatter-4: + Fourth scattering moment + + :scatter-5: + Fifth scattering moment :absorption: Total absorption rate. This accounts for all reactions which do not produce @@ -824,6 +845,9 @@ The following responses can be tallied. :nu-fission: Total production of neutrons due to fission + :events: + Number of scoring events + ```` Element ------------------ @@ -983,14 +1007,14 @@ sub-elements: *Default*: None --------------------------------------------- +------------------------------ CMFD Specification -- cmfd.xml --------------------------------------------- +------------------------------ Coarse mesh finite difference acceleration method has been implemented in OpenMC. Currently, it allows users to accelerate fission source convergence during inactive neutron batches. To run CMFD, the ```` element in -``settings.xml`` should be set to ``.true.``. +``settings.xml`` should be set to "true". ```` Element -------------------------- @@ -1011,11 +1035,11 @@ The ```` element controls what batch CMFD calculations should begin. ```` Element ---------------------- -The ```` element controls whether or not the CMFD diffusion result is -used to adjust the weight of fission source neutrons on the next OpenMC batch. -It can be turned on with ".true." and off with ".false.". +The ```` element controls whether or not the CMFD diffusion result is +used to adjust the weight of fission source neutrons on the next OpenMC batch. +It can be turned on with "true" and off with "false". - *Default*: .false. + *Default*: false ```` Element ---------------------- @@ -1023,9 +1047,9 @@ It can be turned on with ".true." and off with ".false.". The ```` element controls if cmfd tallies should be accumulated during inactive batches. For some applications, CMFD tallies may not be needed until the start of active batches. This option can be turned on -with ".true." and off with ".false." +with "true" and off with "false" - *Default*: .true. + *Default*: true ```` Element ---------------------- @@ -1040,11 +1064,11 @@ CMFD is allowed to modify source neutron weights. ------------------------- The ```` element is used to view the convergence of linear GMRES -iterations in PETSc. This option can be turned on with ".true." and turned off -with ".false.". +iterations in PETSc. This option can be turned on with "true" and turned off +with "false". - *Default*: .false. + *Default*: false ```` Element ------------------ @@ -1131,28 +1155,28 @@ processors used during OpenMC. --------------------------- The ```` element is used to view the convergence of power iteration. -This option can be turned on with ".true." and turned off with ".false.". +This option can be turned on with "true" and turned off with "false". - *Default*: .false. + *Default*: false ```` Element --------------------------- The ```` element is used to view the balance of OpenMC tally residuals for every coarse mesh region and energy group. This option can be -turned on with ".true." and off with ".false.". +turned on with "true" and off with "false". - *Default*: .false. + *Default*: false ```` Element ------------------------ -The ```` element can be turned on with ".true." to get an +The ```` element can be turned on with "true" to get an HDF5 output file of CMFD results. - *Default*: .false. + *Default*: false ```` Element ---------------------------- @@ -1160,6 +1184,6 @@ HDF5 output file of CMFD results. The ```` element is used to view the PETSc sparse matrices created when solving CMFD equations. These binary output files can be imported into MATLAB using PETSc-MATLAB utilities. This option can be -turned on with ".true." and off with ".false.". +turned on with "true" and off with "false". - *Default*: .false. + *Default*: false diff --git a/_sources/usersguide/install.txt b/_sources/usersguide/install.txt index aea509ad3e..fe50dd87fe 100644 --- a/_sources/usersguide/install.txt +++ b/_sources/usersguide/install.txt @@ -9,8 +9,8 @@ Prerequisites ------------- In order to compile OpenMC, you will need to have a Fortran compiler installed -on your machine. Since a number of Fortran 2003 features are used in the code, -it is recommended that you use the latest version of whatever compiler you +on your machine. Since a number of Fortran 2003/2008 features are used in the +code, it is recommended that you use the latest version of whatever compiler you choose. For gfortran_, it is recommended that you use version 4.5.0 or above. If you are using Debian or a Debian derivative such as Ubuntu, you can install @@ -21,9 +21,10 @@ the gfortran compiler using the following command:: To compile with support for parallel runs on a distributed-memory architecture, you will need to have a valid implementation of MPI installed on your machine. The code has been tested and is known to work with the latest versions -of both OpenMPI_ and MPICH2_. You may use older versions of MPI implementations -at your own risk. OpenMPI and/or MPICH2 can be installed on Debian derivatives -with:: +of both OpenMPI_ and MPICH2_. Note that if using OpenMPI, make sure that +--with-mpi-f90-size is not set to medium or large since this may prevent MPI +calls from completing successfully in OpenMC. OpenMPI and/or MPICH2 can be +installed on Debian derivatives with:: sudo apt-get install mpich2 sudo apt-get install openmpi-bin @@ -75,7 +76,7 @@ Options sections in the Makefile: COMPILER This variable tells the Makefile which compiler to use. Valid options are - gfortran, intel, pgi, ibm, and cray. + gnu, intel, pgi, ibm, and cray. The default is gnu (gfortran). DEBUG Enables debugging when compiling. The flags added are dependent on which @@ -85,17 +86,21 @@ PROFILE Enables profiling using the GNU profiler, gprof. OPTIMIZE - Enables high-optimization using compiler-dependent flags. For gfortran, - this compiles with -O3. For Intel Fortran, this compiles with -O3 as well as - interprocedural optimization. + Enables high-optimization using compiler-dependent flags. For gfortran and + Intel Fortran, this compiles with -O3. -USE_MPI - Enables parallel runs using the Message Passing Interface. Users should also - set the MPI_ROOT directory further down in the Makefile. +MPI + Enables parallel runs using the Message Passing Interface. The MPI_DIR + variable should be set to the base directory of the MPI implementation. -USE_HDF5 - Enables HDF5 output in addition to normal screen and text file output. Users - should also set the HDF5_ROOT directory further down in the Makefile. +HDF5 + Enables HDF5 output in addition to normal screen and text file output. The + HDF5_DIR variable should be set to the base directory of the HDF5 + installation. + +PETSC + Enables PETSc for use in CMFD acceleration. The PETSC_DIR variable should be + set to the base directory of the PETSc installation. It is also possible to change these options from the command line itself. For example, if you want to compile with DEBUG turned on without actually change the diff --git a/developers.html b/developers.html index 5dfc54f4f2..b748a4c00c 100644 --- a/developers.html +++ b/developers.html @@ -17,7 +17,7 @@ + + + + + + + + + + +
+ + + +
+
+ +

+ «  2. Geometry +   ::   + Contents +   ::   + 4. Random Number Generation  » +

+ +
+
+ + +
+

3. Cross Section Representation

+

The data governing the interaction of neutrons with various nuclei are +represented using the ACE format which is used by MCNP and Serpent. ACE-format +data can be generated with the NJOY nuclear data processing system which +converts raw ENDF/B data into linearly-interpolable data as required by most +Monte Carlo codes. The use of a standard cross section format allows for a +direct comparison of OpenMC with other codes since the same cross section +libraries can be used.

+

The ACE format contains continuous-energy cross sections for the following types +of reactions: elastic scattering, fission (or first-chance fission, +second-chance fission, etc.), inelastic scattering, (n,xn), +(n,\gamma), and various other absorption reactions. For those reactions +with one or more neutrons in the exit channel, secondary angle and energy +distributions may be provided. In addition, fissionable nuclides have total, +prompt, and/or delayed \nu as a function of energy and neutron precursor +distributions. Many nuclides also have probability tables to be used for +accurate treatment of self-shielding in the unresolved resonance range. For +bound scatterers, separate tables with S(\alpha,\beta,T) scattering law +data can be used.

+
+

3.1. Energy Grid Methods

+

The method by which continuous energy cross sections for each nuclide in a +problem are stored as a function of energy can have a substantial effect on the +performance of a Monte Carlo simulation. Since the ACE format is based on +linearly-interpolable cross sections, each nuclide has cross sections tabulated +over a wide range of energies. Some nuclides may only have a few points +tabulated (e.g. H-1) whereas other nuclides may have hundreds or thousands of +points tabulated (e.g. U-238).

+

At each collision, it is necessary to sample the probability of having a +particular type of interaction whether it be elastic scattering, (n,2n), +level inelastic scattering, etc. This requires looking up the microscopic cross +sections for these reactions for each nuclide within the target material. Since +each nuclide has a unique energy grid, it would be necessary to search for the +appropriate index for each nuclide at every collision. This can become a very +time-consuming process, especially if there are many nuclides in a problem as +there would be for burnup calculations. Thus, there is a strong motive to +implement a method of reducing the number of energy grid searches in order to +speed up the calculation.

+
+

3.1.1. Unionized Energy Grid

+

The most naïve method to reduce the number of energy grid searches is to +construct a new energy grid that consists of the union of the energy points of +each nuclide and use this energy grid for all nuclides. This method is +computationally very efficient as it only requires one energy grid search at +each collision as well as one interpolation between cross section values since +the interpolation factor can be used for all nuclides. However, it requires +redundant storage of cross section values at points which were added to each +nuclide grid. This additional burden on memory storage can become quite +prohibitive. To lessen that burden, the unionized energy grid can be thinned +with cross sections reconstructed on the thinned energy grid. This method is +currently used by default in the Serpent Monte Carlo code.

+
+
+

3.1.2. Unionized Energy Grid with Nuclide Pointers

+

While having a unionized grid that is used for all nuclides allows for very fast +lookup of cross sections, the burden on memory is in many circumstances +unacceptable. The OpenMC Monte Carlo code utilizes a method that allows for a +single energy grid search to be performed at every collision while avoiding the +redundant storage of cross section values. Instead of using the unionized grid +for every nuclide, the original energy grid of each nuclide is kept and a list +of pointers (of the same length as the unionized energy grid) is constructed for +each nuclide that gives the corresponding grid index on the nuclide grid for a +given grid index on the unionized grid. One must still interpolate on cross +section values for each nuclide since the interpolation factors will generally +be different. The figure below illustrates this method. All values within the +dashed box would need to be stored on a per-nuclide basis, and the union grid +would need to be stored once. This method is also referred to as double +indexing and is available as an option in Serpent (see paper by Leppanen).

+
+

Mapping of union energy grid to nuclide energy grid through pointers.

+
+
+
+
+ + +
+
+ +

+ «  2. Geometry +   ::   + Contents +   ::   + 4. Random Number Generation  » +

+ +
+ + + + + + + \ No newline at end of file diff --git a/methods/criticality.html b/methods/eigenvalue.html similarity index 84% rename from methods/criticality.html rename to methods/eigenvalue.html index 8012927441..13760cbac0 100644 --- a/methods/criticality.html +++ b/methods/eigenvalue.html @@ -8,7 +8,7 @@ - 2. Criticality Calculations — OpenMC Documentation + 7. Eigenvalue Calculations — OpenMC Documentation @@ -17,7 +17,7 @@ - - + +
@@ -41,33 +41,33 @@

- «  1. Introduction + «  6. Tallies   ::   Contents   ::   - 3. Statistics  » + 8. Parallelization  »

-
-

2. Criticality Calculations

-

A criticality calculation is a transport simulation wherein the source of -neutrons includes a fissionable material. Some common criticality calculations -include the simulation of nuclear reactors, spent fuel pools, nuclear weapons, -and other fissile systems. The term criticality calculation is also synonymous -with the term eigenvalue calculation. The reason for this is that the transport -equation becomes an eigenvalue equation if a fissionable source is present since -then the source of neutrons will depend on the flux of neutrons -itself. Criticality simulations using Monte Carlo methods are becoming -increasingly common with the advent of high-performance computing.

-

This section will explore the theory behind and implementation of criticality +

+

7. Eigenvalue Calculations

+

An eigenvalue calculation, also referred to as a criticality calculation, is a +transport simulation wherein the source of neutrons includes a fissionable +material. Some common eigenvalue calculations include the simulation of nuclear +reactors, spent fuel pools, nuclear weapons, and other fissile systems. The +reason they are called eigenvalue calculations is that the transport equation +becomes an eigenvalue equation if a fissionable source is present since then the +source of neutrons will depend on the flux of neutrons itself. Eigenvalue +simulations using Monte Carlo methods are becoming increasingly common with the +advent of high-performance computing.

+

This section will explore the theory behind and implementation of eigenvalue calculations in a Monte Carlo code.

-

2.1. Method of Successive Generations

-

The method used to converge on the fission source distribution in a criticality +

7.1. Method of Successive Generations

+

The method used to converge on the fission source distribution in an eigenvalue calculation, known as the method of successive generations, was first introduced by [Lieberoth]. In this method, a finite number of neutron histories, N, are tracked through their lifetime iteratively. If fission occurs, @@ -90,13 +90,13 @@ the method is guaranteed to converge to the true source distribution. Until the source distribution converges, tallies should not be scored to since they will otherwise include contributions from an unconverged source distribution.

The method by which the fission source iterations are parallelized can have a -large impact on the achiable parallel scaling. This topic is discussed at length +large impact on the achievable parallel scaling. This topic is discussed at length in Fission Bank Algorithms.

-

2.2. Source Convergence Issues

+

7.2. Source Convergence Issues

-

2.2.1. Diagnosing Convergence with Shannon Entropy

+

7.2.1. Diagnosing Convergence with Shannon Entropy

As discussed earlier, it is necessary to converge both k_{eff} and the source distribution before any tallies can begin. Moreover, the convergence rate of the source distribution is in general slower than that of @@ -112,7 +112,7 @@ finite set of coordinates in Euclidean space. In order to analyze the convergence, we would either need to use a method for assessing convergence of an N-dimensional quantity or transform our set of coordinates into a scalar metric. The latter approach has been developed considerably over the last decade -and a method now commonly used in Monte Carlo criticality calculations is to use +and a method now commonly used in Monte Carlo eigenvalue calculations is to use a metric called the Shannon entropy, a concept borrowed from information theory.

To compute the Shannon entropy of the source distribution, we first need to @@ -168,11 +168,11 @@ Convergence,” Trans. Am. Nucl. Soc., 98, 512 (20

- «  1. Introduction + «  6. Tallies   ::   Contents   ::   - 3. Statistics  » + 8. Parallelization  »

diff --git a/methods/geometry.html b/methods/geometry.html index fab9ee551c..1bb67d365a 100644 --- a/methods/geometry.html +++ b/methods/geometry.html @@ -8,7 +8,7 @@ - 4. Geometry — OpenMC Documentation + 2. Geometry — OpenMC Documentation @@ -17,7 +17,7 @@ - - + +
@@ -41,11 +41,11 @@

- «  3. Statistics + «  1. Introduction   ::   Contents   ::   - 5. Physics  » + 3. Cross Section Representation  »

@@ -53,18 +53,19 @@
-

4. Geometry

+

2. Geometry

-

4.1. Constructive Solid Geometry

+

2.1. Constructive Solid Geometry

OpenMC uses a technique known as constructive solid geometry (CSG) to build arbitrarily complex three-dimensional models in Euclidean space. In a CSG model, every unique object is described as the union, intersection, or difference of -half-spaces created by bounding surfaces. Every surface divides all of space -into exactly two half-spaces. We can mathematically define a surface as a +half-spaces created by bounding surfaces. Every surface divides all of +space into exactly two half-spaces. We can mathematically define a surface as a collection of points that satisfy an equation of the form f(x,y,z) = 0 -where f(x,y,z) is a given function. The region for which f(x,y,z)
-< 0 can be called the negative half-space (or simply the “negative side”) and -the region for which f(x,y,z) > 0 can be called the positive half-space.

+where f(x,y,z) is a given function. All coordinates for which +f(x,y,z) < 0 are referred to as the negative half-space (or simply the +negative side) and coordinates for which f(x,y,z) > 0 are referred to +as the positive half-space.

Let us take the example of a sphere centered at the point (x_0,y_0,z_0) with radius R. One would normally write the equation of the sphere as

@@ -79,33 +80,137 @@ with radius -
+

Example of an ellipse and its associated half-spaces.

+
+

References to half-spaces created by surfaces are used to define regions of +space of uniform composition, known as cells. While some codes allow regions +to be defined by intersections, unions, and differences or half-spaces, OpenMC +is currently limited to cells defined only as intersections of +half-spaces. Thus, the specification of the cell must include a list of +half-space references whose intersection defines the region. The region is then +assigned a material defined elsewhere. The following illustration shows an +example of a cell defined as the intersection of an ellipse and two planes.

-
-

In OpenMC, any second-order surface of the form

-
-

f(x,y,z) = Ax^2 + By^2 + Cz^2 + Dxy + Eyz + Fxz + Gx + Hy + Jz + K = 0

-

can be modeled in OpenMC. For example, the equation for a sphere centered at -(\bar{x},\bar{y},\bar{z}) and of radius R can be written as

+

The shaded region represents a cell bounded by three surfaces.

+
+

The ability to form regions based on bounding quadratic surfaces enables OpenMC +to model arbitrarily complex three-dimensional objects. In practice, one is +limited only by the different surface types available in OpenMC. The following +table lists the available surface types, the identifier used to specify them in +input files, the corresponding surface equation, and the input parameters needed +to fully define the surface.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Surface types available in OpenMC.
SurfaceIdentifierEquationParameters
Plane perpendicular +to x-axisx-planex - x_0 = 0x_0
Plane perpendicular +to y-axisy-planex - x_0 = 0y_0
Plane perpendicular +to z-axisz-planex - x_0 = 0z_0
Arbitrary planeplaneAx + By + Cz = DA\;B\;C\;D
Infinite cylinder +parallel to +x-axisx-cylinder(y-y_0)^2 + (z-z_0)^2
+= R^2y_0\;z_0\;R
Infinite cylinder +parallel to +y-axisy-cylinder(x-x_0)^2 + (z-z_0)^2
+= R^2x_0\;z_0\;R
Infinite cylinder +parallel to +z-axisz-cylinder(x-x_0)^2 + (y-y_0)^2
+= R^2x_0\;y_0\;R
Spheresphere(x-x_0)^2 + (y-y_0)^2
++ (z-z_0)^2 = R^2x_0 \; y_0 \;
+z_0 \; R
Cone parallel to the +x-axisx-cone(y-y_0)^2 + (z-z_0)^2
+= R^2(x-x_0)^2x_0 \; y_0 \;
+z_0 \; R^2
Cone parallel to the +y-axisy-cone(x-x_0)^2 + (z-z_0)^2
+= R^2(y-y_0)^2x_0 \; y_0 \;
+z_0 \; R^2
Cone parallel to the +z-axisz-cone(x-x_0)^2 + (y-y_0)^2
+= R^2(z-z_0)^2x_0 \; y_0 \;
+z_0 \; R^2
-

4.1.1. Universes

+

2.1.1. Universes

OpenMC supports universe-based geometry similar to the likes of MCNP and Serpent. This capability enables user to model any identical repeated structures once and then fill them in various spots in the geometry. A prototypical example of a repeated structure would be a fuel pin within a fuel assembly or a fuel assembly within a core.

-

Each closed volume, or cell, in OpenMC can either be filled with a normal -material or with a universe. If the cell is filled with a univese, only the -region of the universe that is within the defined boundaries of the parent cell -will be present in the geometry. That is to say, even though a collection of -cells in a universe may extend to infinity, not all of the universe will be -“visible” in the geometry since it will be truncated by the boundaries of the -cell that contains it.

+

Each cell in OpenMC can either be filled with a normal material or with a +universe. If the cell is filled with a universe, only the region of the universe +that is within the defined boundaries of the parent cell will be present in the +geometry. That is to say, even though a collection of cells in a universe may +extend to infinity, not all of the universe will be “visible” in the geometry +since it will be truncated by the boundaries of the cell that contains it.

When a cell is filled with a universe, it is possible to specify that the universe filling the cell should be rotated and translated. This is done through the rotation and translation attributes on a cell (note though that @@ -113,17 +218,17 @@ these can only be specified on a cell that is filled with another universe, not a material).

It is not necessary to use or assign universes in a geometry if there are no repeated structures. Any cell in the geometry that is not assigned to a -specified universe is automatically part of the “base” universe whose +specified universe is automatically part of the base universe whose coordinates are just the normal coordinates in Euclidean space.

-

4.1.2. Lattices

+

2.1.2. Lattices

Often times, repeated structures in a geometry occur in a regular pattern such as a rectangular or hexagonal lattice. In such a case, it would be cumbersome for a user to have to define the boundaries of each of the cells to be filled with a universe. Thus, OpenMC provides a lattice capability similar to that used in MCNP and Serpent.

-

The implementation of lattices is similar in principle to universes – instead +

The implementation of lattices is similar in principle to universes — instead of a cell being filled with a universe, the user can specify that it is filled with a finite lattice. The lattice is then defined by a two-dimensional array of universes that are to fill each position in the lattice. A good example of the @@ -132,7 +237,7 @@ Carlo Performance benchmark.

-

4.2. Computing the Distance to Nearest Boundary

+

2.2. Computing the Distance to Nearest Boundary

One of the most basic algorithms in any Monte Carlo code is determining the distance to the nearest surface within a cell. Since each cell is defined by the surfaces that bound it, if we compute the distance to all surfaces bounding @@ -145,13 +250,15 @@ necessary to check the distance to the surfaces bounding the cell in each level. This should be done starting the highest (most global) level going down to the lowest (most local) level. That ensures that if two surfaces on different levels are coincident, by default the one on the higher level will be selected -as the nearest surface.

+as the nearest surface. Although they are not explicitly defined, it is also +necessary to check the distance to surfaces representing lattice boundaries if a +lattice exists on a given level.

The following procedure is used to calculate the distance to each bounding -surface. Suppose we have a particle at (x,y,z) traveling in the -direction u,v,w. To find the distance d to a surface +surface. Suppose we have a particle at (x_0,y_0,z_0) traveling in the +direction u_0,v_0,w_0. To find the distance d to a surface f(x,y,z) = 0, we need to solve the equation:

-

(3)f(x + du, y + dv, z + dw) = 0

+

(3)f(x_0 + du_0, y_0 + dv_0, z_0 + dw_0) = 0

If no solutions to equation (3) exist or the only solutions are complex, then the particle’s direction of travel will not intersect the surface. If the solution to equation (3) is negative, this @@ -159,6 +266,14 @@ means that the surface is “behind” the particle, i.e. if the particl traveling in its current direction, it will not hit the surface. The complete derivation for different types of surfaces used in OpenMC will be presented in the following sections.

+

Since :math:f(x,y,z)` in general is quadratic in x, y, and +z, this implies that f(x_0 + du_0, y + dv_0, z + dw_0) is +quadratic in d. Thus we expect at most two real solutions to +(3). If no solutions to (3) exist or +the only solutions are complex, then the particle’s direction of travel will not +intersect the surface. If the solution to (3) is negative, +this means that the surface is “behind” the particle, i.e. if the particle +continues traveling in its current direction, it will not hit the surface.

Once a distance has been computed to a surface, we need to check if it is closer than previously-computed distances to surfaces. Unfortunately, we cannot just use the minimum function because some of the calculated distances, which should @@ -172,11 +287,8 @@ thus far. This is done by checking if

the minimum distance found thus far, and \epsilon is a small number. In OpenMC, this parameter is set to \epsilon = 10^{-14} since all floating calculations are done on 8-byte floating point numbers.

-

Although they are not explicitly defined, it is also necessary to check the -distance to surfaces representing lattice boundaries if a lattice exists on a -given level.

-

4.2.1. Plane Perpendicular to an Axis

+

2.2.1. Plane Perpendicular to an Axis

The equation for a plane perpendicular to, for example, the x-axis is simply x - x_0 = 0. As such, we need to solve x + du - x_0 = 0. The solution for the distance is

@@ -188,7 +300,7 @@ example here was for a plane perpendicular to the x-axis, the same formula can be applied for the surfaces y = y_0 and z = z_0.

-

4.2.2. Generic Plane

+

2.2.2. Generic Plane

The equation for a generic plane is Ax + By + Cz = D. Thus, we need to solve the equation A(x + du) + B(y + dv) + C(z + dw) = D. The solution to this equation for the distance is

@@ -199,7 +311,7 @@ the particle’s direction of flight is parallel to the plane and it will therefore never hit the plane.

-

4.2.3. Cylinder Parallel to an Axis

+

2.2.3. Cylinder Parallel to an Axis

The equation for a cylinder parallel to, for example, the x-axis is (y -
 y_0)^2 + (z - z_0)^2 = R^2. Thus, we need to solve (y + dv - y_0)^2 +
 (z + dw - z_0)^2 = R^2. Let us define \bar{y} = y - y_0 and @@ -234,7 +346,7 @@ discriminant.

the y- or z-axis with appropriate substitution of constants.

-

4.2.4. Sphere

+

2.2.4. Sphere

The equation for a sphere is (x - x_0)^2 + (y - y_0)^2 + (z - z_0)^2 =
 R^2. Thus, we need to solve the equation

@@ -267,13 +379,13 @@ root of the discriminant.

-

4.3. Finding a Cell Given a Point

+

2.3. Finding a Cell Given a Point

Another basic algorithm is to determine which cell contains a given point in the global coordinate system, i.e. if the particle’s position is (x,y,z), what cell is it currently in. This is done in the following manner in OpenMC. With the possibility of multiple levels of coordinates, we must perform a recursive search for the cell. First, we start in the highest (most global) -universe which we call the base universe and do a loop over each cell within +universe, which we call the base universe, and loop over each cell within that universe. For each cell, we check whether the specified point is inside the cell using the algorithm described in Determining if a Coordinate is in a Cell. If the cell is filled with a normal material, the search is done and we have identified the @@ -285,26 +397,24 @@ recursively searched. The search ends once a cell containing a normal material is found that contains the specified point.

-

4.4. Determining if a Coordinate is in a Cell

-

One aspect of being able to determine what cell a particle is in is determining -if a particle’s coordinates lie within a given cell. The current geometry -implementation in OpenMC limits all cells to being simple cells, i.e. they are -defined only with intersection of half-spaces and not unions, differences, -etc. This makes the job of determining if a point is in a cell quite simple.

-

The algorithm for determining if a cell contains a point is as follows. For each -surface that bounds a cell, we determine the particle’s sense with respect to -the surface. As explained earlier, if we have a point (x_0,y_0,z_0) and -a surface f(x,y,z) = 0, the point is said to have negative sense if +

2.4. Determining if a Coordinate is in a Cell

+

To determine which cell a particle is in given its coordinates, we need to be +able to check whether a given cell contains a point. The algorithm for +determining if a cell contains a point is as follows. For each surface that +bounds a cell, we determine the particle’s sense with respect to the surface. As +explained earlier, if we have a point (x_0,y_0,z_0) and a surface +f(x,y,z) = 0, the point is said to have negative sense if f(x_0,y_0,z_0) < 0 and positive sense if f(x_0,y_0,z_0) > 0. If for all surfaces, the sense of the particle with respect to the surface matches the specified sense that defines the half-space within the cell, then the point -is inside the cell.

-

Let us illustrate this idea with a concept. Let’s say we have a cell defined as

-
<cell id="1" surfaces="-1 2 -3" />
-
-<surface id="1" type="sphere"  coeffs="0 0 0 10" />
+is inside the cell. Note that this algorithm works only for simple cells
+defined as intersections of half-spaces.

+

It may help to illustrate this algorithm using a simple example. Let’s say we +have a cell defined as

+
<surface id="1" type="sphere"  coeffs="0 0 0 10" />
 <surface id="2" type="x-plane" coeffs="-3" />
 <surface id="3" type="y-plane" coeffs="2" />
+<cell id="1" surfaces="-1 2 -3" />
 

This means that the cell is defined as the intersection of the negative half @@ -315,12 +425,12 @@ satisfy the following equations

(14)x^2 + y^2 + z^2 - 10^2 < 0 \\
 x - (-3) > 0 \\
 x - 2 < 0

-

So in order to determine if a point is inside the cell, we would plug its -coordinates into equation (14) and if the inequalities -are satisfied, than the point is indeed inside the cell.

+

In order to determine if a point is inside the cell, we would substitute its +coordinates into equation (14). If the inequalities are +satisfied, than the point is indeed inside the cell.

-

4.5. Handling Surface Crossings

+

2.5. Handling Surface Crossings

A particle will cross a surface if the distance to the nearest surface is closer than the distance sampled to the next collision. A number of things happen when a particle hits a surface. First, we need to check if a non-transmissive @@ -334,25 +444,25 @@ travel of the particle so that we can evaluate cross sections based on its material properties. At initialization, a list of neighboring cells is created for each surface in the problem as described in Building Neighbor Lists. The algorithm outlined in Finding a Cell Given a Point is used to find a cell containing the -particle except rather than searching all cells in the base universe, only the -list of neighboring cells is searched. If this search is unsuccessful, then a -search is done over every cell in the base universe.

+particle with one minor modification; rather than searching all cells in the +base universe, only the list of neighboring cells is searched. If this search is +unsuccessful, then a search is done over every cell in the base universe.

-

4.6. Building Neighbor Lists

+

2.6. Building Neighbor Lists

After the geometry has been loaded and stored in memory from an input file, -OpenMC builds a list for each surface containing any cells that contain the -surface in their specification in order to speed up processing of surface -crossings. The algorithm to build these lists is as follows. First, we loop over -all cells in the geometry and count up how many times each surface appears in a -specification as bounding a negative half-space and bounding a positive -half-space. Two arrays are then allocated for each surface, one that lists each -cell that contains the negative half-space of the surface and one that lists -each cell that contains the positive half-space of the surface. Another loop is -performed over all cells and the neighbor lists are populated for each surface.

+OpenMC builds a list for each surface containing any cells that are bounded by +that surface in order to speed up processing of surface crossings. The algorithm +to build these lists is as follows. First, we loop over all cells in the +geometry and count up how many times each surface appears in a specification as +bounding a negative half-space and bounding a positive half-space. Two arrays +are then allocated for each surface, one that lists each cell that contains the +negative half-space of the surface and one that lists each cell that contains +the positive half-space of the surface. Another loop is performed over all cells +and the neighbor lists are populated for each surface.

-

4.7. Reflective Boundary Conditions

+

2.7. Reflective Boundary Conditions

If the velocity of a particle is \mathbf{v} and it crosses a surface of the form f(x,y,z) = 0 with a reflective boundary condition, it can be shown based on geometric arguments that the velocity vector will then become

@@ -364,15 +474,16 @@ point of the surface crossing. The rationale for this can be understood by noting that (\mathbf{v} \cdot \hat{\mathbf{n}}) \hat{\mathbf{n}} is the projection of the velocity vector onto the normal vector. By subtracting two times this projection, the velocity is reflected with respect to the surface -normal. Since the velocity of the particle will not change as it undergoes -reflection, we can work with the direction of the particle instead, simplifying -equation (15) to

+normal. Since the magnitude of the velocity of the particle will not change as +it undergoes reflection, we can work with the direction of the particle instead, +simplifying equation (15) to

(16)\mathbf{\Omega'} = \mathbf{\Omega} - 2 (\mathbf{\Omega} \cdot
 \hat{\mathbf{n}}) \hat{\mathbf{n}}

-

The direction of the surface normal will be the gradient to the surface at the -point of crossing, i.e. \mathbf{n} = \nabla f(x,y,z). Substituting this -into equation (16), we get

+

where \mathbf{v} = || \mathbf{v} || \mathbf{\Omega}. The direction of +the surface normal will be the gradient of the surface at the point of crossing, +i.e. \mathbf{n} = \nabla f(x,y,z). Substituting this into equation +(16), we get

(17)\mathbf{\Omega'} = \mathbf{\Omega} - \frac{2 ( \mathbf{\Omega} \cdot \nabla
 f )}{|| \nabla f ||^2} \nabla f

@@ -389,10 +500,10 @@ v' = v - \frac{2 ( \mathbf{\Omega} \cdot \nabla f )}{|| \nabla f ||^2} w' = w - \frac{2 ( \mathbf{\Omega} \cdot \nabla f )}{|| \nabla f ||^2} \frac{\partial f}{\partial z}"/>

-

We can now use this form to develop rules for how to transform a particle’s -direction for different types of surfaces.

+

One can then use equation (18) to develop equations for +transforming a particle’s direction given the equation of the surface.

-

4.7.1. Plane Perpendicular to an Axis

+

2.7.1. Plane Perpendicular to an Axis

For a plane that is perpendicular to an axis, the rule for reflection is almost so simple that no derivation is needed at all. Nevertheless, we will proceed with the derivation to confirm that the rules of geometry agree with our @@ -407,7 +518,7 @@ the first tell us that

negating the directional cosine for that axis.

-

4.7.2. Generic Plane

+

2.7.2. Generic Plane

A generic plane has the form f(x,y,z) = Ax + By + Cz - D = 0. Thus, the gradient to the surface is simply \nabla f = (A,B,C) whose norm squared is A^2 + B^2 + C^2. This implies that

@@ -421,7 +532,7 @@ x-component of the reflected direction will be

(21)u' = u - \frac{2A(Au + Bv + Cw)}{A^2 + B^2 + C^2}

-

4.7.3. Cylinder Parallel to an Axis

+

2.7.3. Cylinder Parallel to an Axis

A cylinder parallel to, for example, the x-axis has the form f(x,y,z) =
 (y - y_0)^2 + (z - z_0)^2 - R^2 = 0. Thus, the gradient to the surface is

@@ -446,7 +557,7 @@ and z-components of the reflected direction will be

w' = w - \frac{2 ( \bar{y}v + \bar{z}w ) \bar{z}}{R^2}"/>

-

4.7.4. Sphere

+

2.7.4. Sphere

The surface equation for a sphere has the form f(x,y,z) = (x - x_0)^2 +
 (y - y_0)^2 + (z - z_0)^2 - R^2 = 0. Thus, the gradient to the surface is

@@ -465,11 +576,11 @@ the square of the norm of the gradient, we find that

(26) into equation (18) gives us the form of the solution:

-

(29)u' = u - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{x} }{R^2} \\
+<p><span class=(29)u' = u - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{x} }{R^2} \\
 
 v' = v - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{y} }{R^2} \\
 
-w' = w - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{z} }{R^2} \\

+w' = w - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{z} }{R^2}"/>

@@ -479,11 +590,11 @@ w' = w - \frac{2 ( \bar{x}u + \bar{y}v + \bar{z}w ) \bar{z} }{R^2} \\"/>

- «  3. Statistics + «  1. Introduction   ::   Contents   ::   - 5. Physics  » + 3. Cross Section Representation  »

diff --git a/methods/index.html b/methods/index.html index 2b0703a266..23c4e314e5 100644 --- a/methods/index.html +++ b/methods/index.html @@ -17,7 +17,7 @@ - + @@ -45,7 +45,7 @@   ::   Contents   ::   - 2. Criticality Calculations  » + 2. Geometry  »

@@ -87,11 +87,11 @@ following steps:

  • Read input files and building data structures for the geometry, materials, tallies, and other associated variables.
  • Initialize the pseudorandom number generator.
  • -
  • Read ACE format cross-sections specified in the problem.
  • +
  • Read ACE format cross sections specified in the problem.
  • If using a special energy grid treatment such as a union energy grid or lethargy bins, that must be initialized as well.
  • In a fixed source problem, source sites are sampled from the specified -source. In a criticality problem, source sites are sampled from some initial +source. In an eigenvalue problem, source sites are sampled from some initial source distribution or from a source file. The source sites consist of coordinates, a direction, and an energy.
  • @@ -106,15 +106,15 @@ sampled.

  • Based on the particle’s coordinates, the current cell in which the particle resides is determined.

  • -
  • The energy-dependent cross-sections for the material that the particle is +

  • The energy-dependent cross sections for the material that the particle is currently in are determined. Note that this includes the total -cross-section, which is not pre-calculated.

    +cross section, which is not pre-calculated.

  • The distance to the nearest boundary of the particle’s cell is determined based on the bounding surfaces to the cell.

  • The distance to the next collision is sampled. If the total material -cross-section is \Sigma_t, this can be shown to be

    +cross section is \Sigma_t, this can be shown to be

    d = -\frac{\ln \xi}{\Sigma_t}

    where \xi is a pseudorandom number sampled from a uniform @@ -127,22 +127,22 @@ distance to the nearest boundary, then the particle will undergo a collision.

  • The material at the collision site may consist of multiple nuclides. First, the nuclide with which the collision will happen is sampled based on the -total cross-sections. If the total cross section of material i is +total cross sections. If the total cross section of material i is \Sigma_{t,i}, then the probability that any nuclide is sampled is

    P(i) = \frac{\Sigma_{t,i}}{\Sigma_t}.

  • Once the specific nuclide is sampled, the random samples a reaction for that nuclide based on the microscopic cross sections. If the microscopic -cross-section for some reaction x is \sigma_x and the total +cross section for some reaction x is \sigma_x and the total microscopic cross section for the nuclide is \sigma_t, then the probability that reaction x will occur is

    P(x) = \frac{\sigma_x}{\sigma_t}.

  • If the sampled reaction is elastic or inelastic scattering, the outgoing -energy and angle is sampled from the appropriate distribution. If the -reaction is (n,xn), it’s also treated as scattering and the weight of the +energy and angle is sampled from the appropriate distribution. Reactions +of type (n,xn) are treated as scattering and the weight of the particle is increased by the multiplicity of the reaction. The particle then continues from step 3. If the reaction is absorption or fission, the particle dies and if necessary, fission sites are created and stored in the @@ -157,7 +157,7 @@ be performed before the run is finished. This include the following:

  • With the accumulated sum and sum of squares for each tally, the sample mean and its variance is calculated.
  • All tallies and other results are written to disk.
  • -
  • If requested, a source file is written to disk
  • +
  • If requested, a source file is written to disk.
  • All allocatable arrays are deallocated.
  • @@ -173,7 +173,7 @@ and its variance is calculated.   ::   Contents   ::   - 2. Criticality Calculations  » + 2. Geometry  »

    diff --git a/methods/parallelization.html b/methods/parallelization.html index f5b867c994..1da0e1c2b1 100644 --- a/methods/parallelization.html +++ b/methods/parallelization.html @@ -8,7 +8,7 @@ - 7. Parallelization — OpenMC Documentation + 8. Parallelization — OpenMC Documentation @@ -17,7 +17,7 @@ + + + + + + + + + + +
    + + + +
    +
    + +

    + «  3. Cross Section Representation +   ::   + Contents +   ::   + 5. Physics  » +

    + +
    +
    + + +
    +

    4. Random Number Generation

    +

    In order to sample probability distributions, one must be able to produce random +numbers. The standard technique to do this is to generate numbers on the +interval [0,1) from a deterministic sequence that has properties that +make it appear to be random, e.g. being uniformly distributed and not exhibiting +correlation between successive terms. Since the numbers produced this way are +not truly “random” in a strict sense, they are typically referred to as +pseudorandom numbers, and the techniques used to generate them are pseudorandom +number generators (PRNGs). Numbers sampled on the unit interval can then be +transformed for the purpose of sampling other continuous or discrete probability +distributions.

    +
    +

    4.1. Linear Congruential Generators

    +

    There are a great number of algorithms for generating random numbers. One of the +simplest and commonly used algorithms is called a linear congruential +generator. We start with a random number seed \xi_0 and a sequence +of random numbers can then be generated using the following recurrence relation:

    +
    +

    (1)\xi_{i+1} = g \xi_i + c \mod M

    +

    where g, c, and M are constants. The choice of these +constants will have a profound effect on the quality and performance of the +generator, so they should not be chosen arbitrarily. As Donald Knuth stated in +his seminal work The Art of Computer Programming, “random numbers should not +be generated with a method chosen at random. Some theory should be used.” +Typically, M is chosen to be a power of two as this enables x
+\mod M to be performed using the bitwise AND operator with a bit mask. The +constants for the linear congruential generator used by default in OpenMC are +g = 2806196910506780709, c = 1, and M = 2^{63} (see +[LEcuyer]).

    +
    +

    4.1.1. Skip-ahead Capability

    +

    One of the important capabilities for a random number generator is to be able to +skip ahead in the sequence of random numbers. Without this capability, it would +be very difficult to maintain reproducibility in a parallel calculation. If we +want to skip ahead N random numbers and N is large, the cost of +sampling N random numbers to get to that position may be prohibitively +expensive. Fortunately, algorithms have been developed that allow us to skip +ahead in O(\log_2 N) operations instead of O(N). One algorithm +to do so is described in a paper by Brown. This algorithm relies on the following +relationship:

    +
    +

    (2)\xi_{i+k} = g^k \xi_i + c \frac{g^k - 1}{g - 1} \mod M

    +

    Note that (2) has the same general form as eqref{eq:lcg}, so +the idea is to determine the new multiplicative and additive constants in +O(\log_2 N) operations.

    +
    +
    +
    +

    4.2. References

    + + + + + +
    [LEcuyer]P. L’Ecuyer, “Tables of Linear Congruential Generators of +Different Sizes and Good Lattice Structures,” Math. Comput., 68, 249 +(1999).
    +
    +
    + + +
    +
    + +

    + «  3. Cross Section Representation +   ::   + Contents +   ::   + 5. Physics  » +

    + +
    + + + + + + + \ No newline at end of file diff --git a/methods/statistics.html b/methods/statistics.html deleted file mode 100644 index e5ebd027fb..0000000000 --- a/methods/statistics.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - - - - 3. Statistics — OpenMC Documentation - - - - - - - - - - - - - - - - -
    - - - -
    -
    - -

    - «  2. Criticality Calculations -   ::   - Contents -   ::   - 4. Geometry  » -

    - -
    -
    - - -
    -

    3. Statistics

    -

    As was discussed briefly in Introduction, any given result from a -Monte Carlo calculation, colloquially known as a “tally”, represents an estimate -of the mean of some random variable of interest. This random variable -typically corresponds to some physical quantity like a reaction rate, a net -current across some surface, or the neutron flux in a region. Given that all -tallies are produced by a stochastic process, there is an associated -uncertainty with each value reported. It is important to understand how the -uncertainty is calculated and what it tells us about our results. To that end, -we will introduce a number of theorems and results from statistics that should -shed some light on the interpretation of uncertainties.

    -
    -

    3.1. Law of Large Numbers

    -

    The law of large numbers is an important statistical result that tells us -that the average value of the result a large number of repeated experiments -should be close to the expected value. Let X_1, X_2, \dots, X_n be an -infinite sequence of independent, identically-distributed random variables -with expected values E(X_1) = E(X_2) = \mu. One form of the law of large -numbers states that the sample mean \bar{X_n} = \frac{X_1 + \dots +
-X_n}{n} converges in probability to the true mean, i.e. for all -\epsilon > 0

    -
    -

    \lim\limits_{n\rightarrow\infty} P \left ( \left | \bar{X}_n - \mu \right |
-\ge \epsilon \right ) = 0.

    -
    -
    -

    3.2. Central Limit Theorem

    -

    The central limit theorem (CLT) is perhaps the most well-known and ubiquitous -statistical theorem that has far-reaching implications across many -disciplines. The CLT is similar to the law of large numbers in that it tells us -the limiting behavior of the sample mean. Whereas the law of large numbers tells -us only that the value of the sample mean will converge to the expected value of -the distribution, the CLT says that the distribution of the sample mean will -converge to a normal distribution. As we defined before, let X_1, X_2,
-\dots, X_n be an infinite sequence of independent, identically-distributed -random variables with expected values E(X_i) = \mu and variances -\text{Var} (X_i) = \sigma^2 < \infty. Note that we don’t require that -these random variables take on any particular distribution – they can be -normal, log-normal, Weibull, etc. The central limit theorem states that as -n \rightarrow \infty, the random variable \sqrt{n} (\bar{X}_n -
-\mu) converges in distribution to the standard normal distribution:

    -
    -

    (1)\sqrt{n} \left ( \frac{1}{n} \sum_{i=1}^n X_i - \mu \right ) \xrightarrow{d}
-\mathcal{N} (0, \sigma^2)

    -
    -
    -

    3.3. Estimating Statistics of a Random Variable

    -
    -

    3.3.1. Mean

    -

    Given independent samples drawn from a random variable, the sample mean is -simply an estimate of the average value of the random variable. In a Monte Carlo -simulation, the random variable represents physical quantities that we want -tallied. If X is the random variable with N observations -x_1, x_2, \dots, x_N, then an unbiased estimator for the population mean -is the sample mean, defined as

    -
    -

    (2)\bar{x} = \frac{1}{N} \sum_{i=1}^N x_i.

    -
    -
    -

    3.3.2. Variance

    -

    The variance of a population indicates how spread out different members of the -population are. For a Monte Carlo simulation, the variance of a tally is a -measure of how precisely we know the tally value, with a lower variance -indicating a higher precision. There are a few different estimators for the -population variance. One of these is the second central moment of the -distribution also known as the biased sample variance:

    -
    -

    (3)s_N^2 = \frac{1}{N} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = \left (
-\frac{1}{N} \sum_{i=1}^N x_i^2 \right ) - \bar{x}^2.

    -

    This estimator is biased because its expected value is actually not equal to the -population variance:

    -
    -

    (4)E[s_N^2] = \frac{N - 1}{N} \sigma^2

    -

    where \sigma^2 is the actual population variance. As a result, this -estimator should not be used in practice. Instead, one can use Bessel’s -correction to come up with an unbiased sample variance estimator:

    -
    -

    (5)s^2 = \frac{1}{N - 1} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 =
-\frac{1}{N - 1} \left ( \sum_{i=1}^N x_i^2 - N\bar{x}^2 \right ).

    -

    This is the estimator normally used to calculate sample variance. The final form -in equation (5) is especially suitable for computation since -we do not need to store the values at every realization of the random variable -as the simulation proceeds. Instead, we can simply keep a running sum and sum of -squares of the values at each realization of the random variable and use that to -calculate the variance.

    -
    -
    -

    3.3.3. Variance of the Mean

    -

    The previous sections discussed how to estimate the mean and variance of a -random variable using statistics on a finite sample. However, we are generally -not interested in the variance of the random variable itself; we are more -interested in the variance of the estimated mean. The sample mean is the -result of our simulation, and the variance of the sample mean will tell us how -confident we should be in our answers.

    -

    Fortunately, it is quite easy to estimate the variance of the mean if we are -able to estimate the variance of the random variable. We start with the -observation that if we have a series of uncorrelated random variables, we can -write the variance of their sum as the sum of their variances:

    -
    -

    (6)\text{Var} \left ( \sum_{i=1}^N X_i \right ) = \sum_{i=1}^N \text{Var} \left
-( X_i \right )

    -

    This result is known as the Bienaymé formula. We can use this result to -determine a formula for the variance of the sample mean. Assuming that the -realizations of our random variable are again identical, -independently-distributed samples, then we have that

    -
    -

    (7)\text{Var} \left ( \bar{X} \right ) = \text{Var} \left ( \frac{1}{N}
-\sum_{i=1}^N X_i \right ) = \frac{1}{N^2} \sum_{i=1}^N \text{Var} \left (
-X_i \right ) = \frac{1}{N^2} \left ( N\sigma^2 \right ) =
-\frac{\sigma^2}{N}.

    -

    We can combine this result with equation (5) to come up with -an unbiased estimator for the variance of the sample mean:

    -
    -

    (8)s_{\bar{X}}^2 = \frac{1}{N - 1} \left ( \frac{1}{N} \sum_{i=1}^N x_i^2 -
-\bar{x}^2 \right ).

    -

    At this point, an important distinction should be made between the estimator for -the variance of the population and the estimator for the variance of the -mean. As the number of realizations increases, the estimated variance of the -population based on equation (5) will tend to the true -population variance. On the other hand, the estimated variance of the mean will -tend to zero as the number of realizations increases. A practical interpretation -of this is that the longer you run a simulation, the better you know your -results. Therefore, by running a simulation long enough, it is possible to -reduce the stochastic uncertainty to arbitrarily low levels.

    -
    -
    -

    3.3.4. Confidence Intervals

    -

    While the sample variance and standard deviation gives us some idea about the -variability of the estimate of the mean of whatever quantities we’ve tallied, it -does not help us interpret how confidence we should be in the results. To -quantity the reliability of our estimates, we can use confidence intervals -based on the calculated sample variance.

    -

    A 1-\alpha confidence interval for a population parameter is defined as -such: if we repeat the same experiment many times and calculate the confidence -interval for each experiment, then 1 - \alpha percent of the calculated -intervals would encompass the true population parameter. Let x_1, x_2,
-\dots, x_N be samples from a set of independent, identically-distributed random -variables each with population mean \mu and variance -\sigma^2. The t-statistic is defined as

    -
    -

    (9)t = \frac{\bar{x} - \mu}{s/\sqrt{N}}

    -

    where \bar{x} is the sample mean from equation (2) and -s is the standard deviation based on equation -(5). If the random variables X_i are -normally-distributed, then the t-statistic has a Student’s t-distribution -with N-1 degrees of freedom. This implies that

    -
    -

    (10)Pr \left ( -t_{1 - \alpha/2, N - 1} \le \frac{\bar{x} - \mu}{s/\sqrt{N}} \le
-t_{1 - \alpha/2, N - 1} \right ) = 1 - \alpha

    -

    where t_{1-\alpha/2, N-1} is the 1 - \alpha/2 percentile of a -t-distribution with N-1 degrees of freedom. Thus, the 1 - \alpha -two sided confidence interval for the sample mean is

    -
    -

    (11)\bar{x} \pm t_{1 - \alpha/2, N-1} \frac{s}{\sqrt{N}}.

    -

    One should be cautioned that equation (11) only applies if the -underlying random variables are normally-distributed! In general, this may not -be true for a tally random variable – the central limit theorem guarantees only -that the sample mean is normally distributed, not the underlying random -variable. If batching is used, then the underlying random variable, which would -then be the averages from each batch, will be normally distributed as long as -the conditions of the central limit theorem are met.

    -

    Let us now outline the method used to calculate the percentile of the Student’s -t-distribution. For one or two degrees of freedom, the percentile can be written -analytically. For one degree of freedom, the t-distribution becomes a standard -Cauchy distribution whose cumulative distribution function is

    -
    -

    (12)c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}.

    -

    Thus, inverting the cumulative distribution function, we find the x -percentile of the standard Cauchy distribution to be

    -
    -

    (13)t_{x,1} = \tan \left ( \pi \left ( x - \frac{1}{2} \right ) \right ).

    -

    For two degrees of freedom, the cumulative distribution function is the -second-degree polynomial

    -
    -

    (14)c(x) = \frac{1}{2} + \frac{x}{2\sqrt{x^2 + 2}}

    -

    Solving for x, we find the x percentile to be

    -
    -

    (15)t_{x,2} = \frac{2\sqrt{2} (x - 1/2)}{\sqrt{1 - 4 (x - 1/2)^2}}

    -

    For degrees of freedom greater than two, it is not possible to obtain an -analytical formula for the inverse of the cumulative distribution function. We -must resort to either numerically solving for the inverse or to an -approximation. Approximations for percentiles of the t-distribution have been -found with high levels of accuracy. OpenMC uses the approximation from -[George]:

    -
    -

    (16)t_{x,n} = \sqrt{\frac{n}{n-2}} \left ( z_x + \frac{1}{4} \frac{z_x^3 -
-3z_x}{n-2} + \frac{1}{96} \frac{5z_x^5 - 56z_x^3 + 75z_x}{(n-2)^2} +
-\frac{1}{384} \frac{3z_x^7 - 81z_x^5 + 417z_x^3 - 315z_x}{(n-2)^3} \right )

    -

    where z_x is the x percentile of the standard normal -distribution. In order to determine an arbitrary percentile of the standard -normal distribution, we use an unpublished rational approximation. After -using the rational approximation, one iteration of Newton’s method is applied to -improve the estimate of the percentile.

    -
    -
    -
    -

    3.4. Random Number Generation

    -

    In order to sample probability distributions, one must be able to produce random -numbers. The standard technique to do this is to generate numbers on the -interval [0,1) from a deterministic sequence that has a properties that -make it appear to be random, e.g. being uniformly distributed and not exhibiting -correlation between successive terms. Since the numbers are not truly “random” -in the strict sense, they are typically referred to as pseudo-random numbers, -and the techniques used to generate them are pseudo-random number generators -(PRNGs). Numbers sampled on the unit interval can then be used transformed for -the purpose of sampling other continuous or discrete probability distributions.

    -

    There are a great number of algorithms for generating random numbers. One of the -simplest and commonly used algorithms is called a linear congruential -generator. We start with some random number seed \xi_0 and a sequence -of random numbers is generated using the following recurrence relation:

    -
    -

    (17)\xi_{i+1} = g \xi_i + c \mod M

    -

    where g, c, and M are constants. The choice of these -constants will have a profound effect on the quality and performance of the -generator, so they should not be chosen arbitrarily. As Donald Knuth said in his -seminal work The Art of Computer Programming, “random numbers should not be -generated with a method chosen at random. Some theory should be used.” -Typically, M is chosen to be a power of two as this enables x
-\mod M to be performed using the binary AND operator with a bit mask. The -constants for the linear congruential generator used by default in OpenMC are -g = 2806196910506780709, c = 1, and M = 2^{63}.

    -

    One of the important capabilities for a random number generator is to be able to -skip ahead in the sequence of random numbers. Without this capability, it would -be very difficult to maintain reproducibility in a parallel calculation. If we -want to skip ahead N random numbers and N is large, the cost of -just sampling N random numbers to get to that position may be -prohibitively expensive. Fortunately, algorithms have been developed that allow -us to skip ahead in O(\log N) operations instead of O(N). One -algorithm to do so is described in a paper by Brown. This algorithm relies on -the following relationship:

    -
    -

    (18)\xi_{i+k} = g^k \xi_i + c \frac{g^k - 1}{g - 1} \mod M

    -

    Note that equation (18) has the same form as equation (17) -so the idea is to determine the new multiplicative and additive constants in -O(\log N) operations.

    -
    -
    -

    3.5. References

    - - - - - -
    [George]E. E. Olusegun George and Meenakshi Sivaram, “A modification of the -Fisher-Cornish approximation for the student t percentiles,” Communication -in Statistics - Simulation and Computation, 16 (4), pp. 1123-1132 (1987).
    -
    -
    - - -
    -
    - -

    - «  2. Criticality Calculations -   ::   - Contents -   ::   - 4. Geometry  » -

    - -
    - - - - - - - \ No newline at end of file diff --git a/methods/tallies.html b/methods/tallies.html index 4eafa186c6..2335646511 100644 --- a/methods/tallies.html +++ b/methods/tallies.html @@ -17,7 +17,7 @@ - + @@ -45,7 +45,7 @@   ::   Contents   ::   - 7. Parallelization  » + 7. Eigenvalue Calculations  »

    @@ -72,15 +72,15 @@ equation (1)). For example, if the desire cell which contains the fuel pin and the scoring function would be the radiative capture macroscopic cross section. The following quantities can be scored in OpenMC: flux, total reaction rate, scattering reaction rate, neutron production -from scattering, higher scattering moments, (n,xn) reaction rates, absorption -reaction rate, fission reaction rate, neutron production rate from fission, and -surface currents. The following variables can be used as filters: universe, -material, cell, birth cell, surface, mesh, pre-collision energy, and +from scattering, higher scattering moments, (n,xn) reaction rates, +absorption reaction rate, fission reaction rate, neutron production rate from +fission, and surface currents. The following variables can be used as filters: +universe, material, cell, birth cell, surface, mesh, pre-collision energy, and post-collision energy.

    With filters for pre- and post-collision energy and scoring functions for scattering and fission production, it is possible to use OpenMC to generate cross sections with user-defined group structures. These multigroup cross -sections can subsequently be used in deterministic solvers such as coarse-mesh +sections can subsequently be used in deterministic solvers such as coarse mesh finite difference (CMFD) diffusion.

    @@ -119,7 +119,9 @@ reaction w_i is the pre-collision weight of the particle as it enters event i. One should note that equation (2) is volume-integrated so if we want a volume-averaged quantity, we need to divided -by the volume of the region of integration.

    +by the volume of the region of integration. If survival biasing is employed, the +analog estimator cannot be used for any reactions with zero neutrons in the exit +channel.

    6.3.2. Collision Estimator

    @@ -161,8 +163,8 @@ track for the particle rather than every collision. This is known as a track-length estimator, sometimes also called a path-length estimator. We first start with an expression for the volume integrated flux, which can be written as

    -

    (5)V \phi = \int d\mathbf{r} \int dE \int d\mathbf{\Omega} \int dt \,
-\psi(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t).

    +

    (5)V \phi = \int d\mathbf{r} \int dE \int d\mathbf{\Omega} \int dt \,
+\psi(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t)

    where V is the volume, \psi is the angular flux, \mathbf{r} is the position of the particle, \mathbf{\hat{\Omega}} is the direction of the particle, E is the energy of the particle, and @@ -171,13 +173,13 @@ is the direction of the particle, n is the angular neutron density, we can rewrite equation (5) as

    -

    (6)V \phi = \int d\mathbf{r} \int dE \int dt v \int d\mathbf{\Omega} \, n(\mathbf{r},
-\mathbf{\hat{\Omega}}, E, t))

    +

    (6)V \phi = \int d\mathbf{r} \int dE \int dt v \int d\mathbf{\Omega} \, n(\mathbf{r},
+\mathbf{\hat{\Omega}}, E, t)).

    Using the relations N(\mathbf{r}, E, t) = \int d\mathbf{\Omega}
 n(\mathbf{r}, \mathbf{\hat{\Omega}}, E, t) and d\ell = v \, dt where d\ell is the differential unit of track length, we then obtain

    -

    (7)V \phi = \int d\mathbf{r} \int dE \int d\ell N(\mathbf{r}, E, t)

    +

    (7)V \phi = \int d\mathbf{r} \int dE \int d\ell N(\mathbf{r}, E, t).

    Equation (7) indicates that we can use the length of a particle’s trajectory as an estimate for the flux, i.e. the track-length estimator of the flux would be

    @@ -189,7 +191,7 @@ same vein as equation (4), the track reaction rate is found by multiplying equation (8) by a macroscopic reaction cross section:

    -

    (9)R_x = \frac{1}{W} \sum_{i \in T} w_i \ell_i \Sigma_x (E_i)

    +

    (9)R_x = \frac{1}{W} \sum_{i \in T} w_i \ell_i \Sigma_x (E_i).

    One important fact to take into consideration is that the use of a track-length estimator precludes us from using any filter that requires knowledge of the particle’s state following a collision because by definition, it will not have @@ -198,8 +200,213 @@ had a collision at every event. Thus, for tallies with outgoing-energy filters (which require the scattering cosine), we must use an analog estimator.

    -
    -

    6.4. Surface Current

    +
    +

    6.4. Statistics

    +

    As was discussed briefly in Introduction, any given result from a +Monte Carlo calculation, colloquially known as a “tally”, represents an estimate +of the mean of some random variable of interest. This random variable +typically corresponds to some physical quantity like a reaction rate, a net +current across some surface, or the neutron flux in a region. Given that all +tallies are produced by a stochastic process, there is an associated +uncertainty with each value reported. It is important to understand how the +uncertainty is calculated and what it tells us about our results. To that end, +we will introduce a number of theorems and results from statistics that should +shed some light on the interpretation of uncertainties.

    +
    +

    6.4.1. Law of Large Numbers

    +

    The law of large numbers is an important statistical result that tells us +that the average value of the result a large number of repeated experiments +should be close to the expected value. Let X_1, X_2, \dots, X_n be an +infinite sequence of independent, identically-distributed random variables +with expected values E(X_1) = E(X_2) = \mu. One form of the law of large +numbers states that the sample mean \bar{X_n} = \frac{X_1 + \dots +
+X_n}{n} converges in probability to the true mean, i.e. for all +\epsilon > 0

    +
    +

    \lim\limits_{n\rightarrow\infty} P \left ( \left | \bar{X}_n - \mu \right |
+\ge \epsilon \right ) = 0.

    +
    +
    +

    6.4.2. Central Limit Theorem

    +

    The central limit theorem (CLT) is perhaps the most well-known and ubiquitous +statistical theorem that has far-reaching implications across many +disciplines. The CLT is similar to the law of large numbers in that it tells us +the limiting behavior of the sample mean. Whereas the law of large numbers tells +us only that the value of the sample mean will converge to the expected value of +the distribution, the CLT says that the distribution of the sample mean will +converge to a normal distribution. As we defined before, let X_1, X_2,
+\dots, X_n be an infinite sequence of independent, identically-distributed +random variables with expected values E(X_i) = \mu and variances +\text{Var} (X_i) = \sigma^2 < \infty. Note that we don’t require that +these random variables take on any particular distribution – they can be +normal, log-normal, Weibull, etc. The central limit theorem states that as +n \rightarrow \infty, the random variable \sqrt{n} (\bar{X}_n -
+\mu) converges in distribution to the standard normal distribution:

    +
    +

    (10)\sqrt{n} \left ( \frac{1}{n} \sum_{i=1}^n X_i - \mu \right ) \xrightarrow{d}
+\mathcal{N} (0, \sigma^2)

    +
    +
    +

    6.4.3. Estimating Statistics of a Random Variable

    +
    +

    6.4.3.1. Mean

    +

    Given independent samples drawn from a random variable, the sample mean is +simply an estimate of the average value of the random variable. In a Monte Carlo +simulation, the random variable represents physical quantities that we want +tallied. If X is the random variable with N observations +x_1, x_2, \dots, x_N, then an unbiased estimator for the population mean +is the sample mean, defined as

    +
    +

    (11)\bar{x} = \frac{1}{N} \sum_{i=1}^N x_i.

    +
    +
    +

    6.4.3.2. Variance

    +

    The variance of a population indicates how spread out different members of the +population are. For a Monte Carlo simulation, the variance of a tally is a +measure of how precisely we know the tally value, with a lower variance +indicating a higher precision. There are a few different estimators for the +population variance. One of these is the second central moment of the +distribution also known as the biased sample variance:

    +
    +

    (12)s_N^2 = \frac{1}{N} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 = \left (
+\frac{1}{N} \sum_{i=1}^N x_i^2 \right ) - \bar{x}^2.

    +

    This estimator is biased because its expected value is actually not equal to the +population variance:

    +
    +

    (13)E[s_N^2] = \frac{N - 1}{N} \sigma^2

    +

    where \sigma^2 is the actual population variance. As a result, this +estimator should not be used in practice. Instead, one can use Bessel’s +correction to come up with an unbiased sample variance estimator:

    +
    +

    (14)s^2 = \frac{1}{N - 1} \sum_{i=1}^N \left ( x_i - \bar{x} \right )^2 =
+\frac{1}{N - 1} \left ( \sum_{i=1}^N x_i^2 - N\bar{x}^2 \right ).

    +

    This is the estimator normally used to calculate sample variance. The final form +in equation (14) is especially suitable for computation since +we do not need to store the values at every realization of the random variable +as the simulation proceeds. Instead, we can simply keep a running sum and sum of +squares of the values at each realization of the random variable and use that to +calculate the variance.

    +
    +
    +

    6.4.3.3. Variance of the Mean

    +

    The previous sections discussed how to estimate the mean and variance of a +random variable using statistics on a finite sample. However, we are generally +not interested in the variance of the random variable itself; we are more +interested in the variance of the estimated mean. The sample mean is the +result of our simulation, and the variance of the sample mean will tell us how +confident we should be in our answers.

    +

    Fortunately, it is quite easy to estimate the variance of the mean if we are +able to estimate the variance of the random variable. We start with the +observation that if we have a series of uncorrelated random variables, we can +write the variance of their sum as the sum of their variances:

    +
    +

    (15)\text{Var} \left ( \sum_{i=1}^N X_i \right ) = \sum_{i=1}^N \text{Var} \left
+( X_i \right )

    +

    This result is known as the Bienaymé formula. We can use this result to +determine a formula for the variance of the sample mean. Assuming that the +realizations of our random variable are again identical, +independently-distributed samples, then we have that

    +
    +

    (16)\text{Var} \left ( \bar{X} \right ) = \text{Var} \left ( \frac{1}{N}
+\sum_{i=1}^N X_i \right ) = \frac{1}{N^2} \sum_{i=1}^N \text{Var} \left (
+X_i \right ) = \frac{1}{N^2} \left ( N\sigma^2 \right ) =
+\frac{\sigma^2}{N}.

    +

    We can combine this result with equation (14) to come up with +an unbiased estimator for the variance of the sample mean:

    +
    +

    (17)s_{\bar{X}}^2 = \frac{1}{N - 1} \left ( \frac{1}{N} \sum_{i=1}^N x_i^2 -
+\bar{x}^2 \right ).

    +

    At this point, an important distinction should be made between the estimator for +the variance of the population and the estimator for the variance of the +mean. As the number of realizations increases, the estimated variance of the +population based on equation (14) will tend to the true +population variance. On the other hand, the estimated variance of the mean will +tend to zero as the number of realizations increases. A practical interpretation +of this is that the longer you run a simulation, the better you know your +results. Therefore, by running a simulation long enough, it is possible to +reduce the stochastic uncertainty to arbitrarily low levels.

    +
    +
    +

    6.4.3.4. Confidence Intervals

    +

    While the sample variance and standard deviation gives us some idea about the +variability of the estimate of the mean of whatever quantities we’ve tallied, it +does not help us interpret how confidence we should be in the results. To +quantity the reliability of our estimates, we can use confidence intervals +based on the calculated sample variance.

    +

    A 1-\alpha confidence interval for a population parameter is defined as +such: if we repeat the same experiment many times and calculate the confidence +interval for each experiment, then 1 - \alpha percent of the calculated +intervals would encompass the true population parameter. Let x_1, x_2,
+\dots, x_N be samples from a set of independent, identically-distributed random +variables each with population mean \mu and variance +\sigma^2. The t-statistic is defined as

    +
    +

    (18)t = \frac{\bar{x} - \mu}{s/\sqrt{N}}

    +

    where \bar{x} is the sample mean from equation (11) and +s is the standard deviation based on equation +(14). If the random variables X_i are +normally-distributed, then the t-statistic has a Student’s t-distribution +with N-1 degrees of freedom. This implies that

    +
    +

    (19)Pr \left ( -t_{1 - \alpha/2, N - 1} \le \frac{\bar{x} - \mu}{s/\sqrt{N}} \le
+t_{1 - \alpha/2, N - 1} \right ) = 1 - \alpha

    +

    where t_{1-\alpha/2, N-1} is the 1 - \alpha/2 percentile of a +t-distribution with N-1 degrees of freedom. Thus, the 1 - \alpha +two sided confidence interval for the sample mean is

    +
    +

    (20)\bar{x} \pm t_{1 - \alpha/2, N-1} \frac{s}{\sqrt{N}}.

    +

    One should be cautioned that equation (20) only applies if the +underlying random variables are normally-distributed. In general, this may not +be true for a tally random variable — the central limit theorem guarantees +only that the sample mean is normally distributed, not the underlying random +variable. If batching is used, then the underlying random variable, which would +then be the averages from each batch, will be normally distributed as long as +the conditions of the central limit theorem are met.

    +

    Let us now outline the method used to calculate the percentile of the Student’s +t-distribution. For one or two degrees of freedom, the percentile can be written +analytically. For one degree of freedom, the t-distribution becomes a standard +Cauchy distribution whose cumulative distribution function is

    +
    +

    (21)c(x) = \frac{1}{\pi} \arctan x + \frac{1}{2}.

    +

    Thus, inverting the cumulative distribution function, we find the x +percentile of the standard Cauchy distribution to be

    +
    +

    (22)t_{x,1} = \tan \left ( \pi \left ( x - \frac{1}{2} \right ) \right ).

    +

    For two degrees of freedom, the cumulative distribution function is the +second-degree polynomial

    +
    +

    (23)c(x) = \frac{1}{2} + \frac{x}{2\sqrt{x^2 + 2}}

    +

    Solving for x, we find the x percentile to be

    +
    +

    (24)t_{x,2} = \frac{2\sqrt{2} (x - 1/2)}{\sqrt{1 - 4 (x - 1/2)^2}}

    +

    For degrees of freedom greater than two, it is not possible to obtain an +analytical formula for the inverse of the cumulative distribution function. We +must resort to either numerically solving for the inverse or to an +approximation. Approximations for percentiles of the t-distribution have been +found with high levels of accuracy. OpenMC uses the approximation from +[George]:

    +
    +

    (25)t_{x,n} = \sqrt{\frac{n}{n-2}} \left ( z_x + \frac{1}{4} \frac{z_x^3 -
+3z_x}{n-2} + \frac{1}{96} \frac{5z_x^5 - 56z_x^3 + 75z_x}{(n-2)^2} +
+\frac{1}{384} \frac{3z_x^7 - 81z_x^5 + 417z_x^3 - 315z_x}{(n-2)^3} \right )

    +

    where z_x is the x percentile of the standard normal +distribution. In order to determine an arbitrary percentile of the standard +normal distribution, we use an unpublished rational approximation. After +using the rational approximation, one iteration of Newton’s method is applied to +improve the estimate of the percentile.

    +
    +
    +
    +
    +

    6.5. References

    + + + + + +
    [George]E. E. Olusegun George and Meenakshi Sivaram, “A modification of the +Fisher-Cornish approximation for the student t percentiles,” Communication +in Statistics - Simulation and Computation, 16 (4), pp. 1123-1132 (1987).
    @@ -212,7 +419,7 @@ had a collision at every event. Thus, for tallies with outgoing-energy filters   ::   Contents   ::   - 7. Parallelization  » + 7. Eigenvalue Calculations  »

    diff --git a/objects.inv b/objects.inv index b8b24e4d5baa852d5b1d20470a7a6155505fb9c5..366fe418868f47d5c5b6adda2b4c01c494d9974a 100644 GIT binary patch delta 1531 zcmV|pt1-SVT(Vm3{mT!Kc62xq)?e9>q^+{XxMQ4$x zhGb^P*IY8Z_AST58+Ctt#ZzWIlWa=0WJ@l1wOdqdDL@anP{c$%)2l2&E3t))JmWwz znF5Y-bHiCnPF^f|B7x`Yr7Ef5x;mgT2Zh6O7mRpabAj&2$&+U$4~E&hpXxeI0ZqCE znuCOreGt4sGztK@Wuk^4+=T;CD>857kh@k+vf_DN0+qnIstQU;xFlXaY2-7JtCCmi;xs{qEoKM|wAX7O$Fti|qe~`# z&_j?Z>}ra%VP4rO00!kdKp) z>KLj*@I!|1n@)d+U!;NK#r?P0_NK}oE1}*F~^16vSkV@uO_znJu+M7LJ| zl+mAjG=zxPt>qKVij4ruWR6)qqzKIogUO#cq)KL{B3xPK8%(2;FKZX*B^FwyL8_{6 z-*~56SD)Puc`{oeRSKpts;L%i3qO-4qa$h3ksYOokMw^*_V5wi#FXD2z#C#JaLn9) zlnX~1TV%FZ-3EDL&AK={9iM(ZV)ls2NwEv`jE?Eot{cb-tA|S)V(F8AYo7k#Qkzuh zs)%>O;r=#j*y|j*J7d(M$~vvkOZs4o3IuyCs^Pq06~jIi=8Yq;WtG@zEp|B6)LV+K zOFF#w(Zqk8-6ZN>d1}|g&Eu4Q0cKKdIlMU{acGM3-+pfzUgNj%An%U*-W?zJ?zr{M zdm$+9Rwa`MoD)&>yc6@r<9mb0$c&X53rJ$%m|$-x@-yIPgy09QQ43a*DMp+_5m7XN!Y)lWPuw02 z{Lgkup6oQjJ#BIHrTPAw5U#P>l&o_K5&t_mcMgN0-+!Vr2H@*ptplQkB#O-ro*mHj(oHXK_w!;Y%X)XM-BB%)9eF(G<;v1ej zKS(s1KV5faxHVrn=Z;{;a!68qg<|PMQ*k-)NpS-hk61NLV(=A~&bD3>t_?85B@~Mw zawXtM1Mdrd_VkG6u2t>w4O2Md&Psx(Aa&3Beldu6@HAI>39eSIaFDZMEn&J^p?-f8 z!Y^yQA`|%7x5vj{C&F|Lf_4Iqg;z_k2Z9>Txf%L*PTSKlLuE$OgWnhW_Pa%L*UXIh z$sHQf_`*K_BkVC6ggr)m>@hlyJw}m+vq2ip`WnuTYdDKEoDb4)-q&z`T*Eo01ENJH zsNe;!Xl1?>K{4Qgd4eXloEU+~>Ar63LZ>Mj zp6^(8O-TIn_~7B2`To-)(ThR8y6F4r;<&GnK0ZF;@7mzswNi&~5fklQrX%4cnwYzV huL99)5G$IlKGn!3h5-}*(Mg%xH)Z?I{vT{mpuR|r>SF)^ delta 1411 zcmV-}1$_G74Co7xJOMP3JwAWyI1ql%uduX8`xI!Q(n<)e1f?J(VA<0ioqa=YGD$5Q zyBj+|_t)<@wi72MRf>d!>$%x;`DUD?luErSNHmi|5v9{hPS?OmJSCNaQsos(;f#rG zrB64y;J+nCB5owEl8%Ny$$~=xLPrJYjZBfEsb)&Eq^I4{&sw_G@AiM=KyKMABUP0d zP2d%*l`#i)BC!{_avOU`{rY@Nr0{7qosiWAWVs_$q~xilOD^+WRLHbu>uT8UVo$L0 z2l7&{ZijvOQ|%bmCO)3f8*>*&O5D&FEop*nx^>^8zTsDoTLI-)ku zU)PW`A@Jv5B{UpXYfFh+*=us+*1s!qZ-_)o^4Au`)4YkW#v`&JM>t|PuwG(i|F;SH zA7l-=!d0{XG027;s7KD(mz!j zYoDv5Zsc;Zt$RxzA={L@lX$WJeU%qfVL`@<(|7nzg-;Juct>|o-L+d^C#SR1^8;=V zxU9{3Bc8;w_`Dkik|BE7vLQ8p^l!zIHzt%Rg|3N^;;(=5x7ow?VA*YO0#q-nMB`P} zAgX(YJydTbZ>gpT?f!QYMnw4%n^WDyhx%a4(G6%v_96IT&Ta~I51!h6fAg@US3rv( zG_z5mne{_6I~>)6kN$4J#B6$73PIC`!PWyAG@nLkWJQ&|0x89zAvK$XWd`zbd2 z69Q^5nywK%76{b&&U9rJX+=2QNjIR?4KfYmH!2 z^P9cVCARfPiIt9dmD-MZ=4joLC%BW9RY1~o?Hc_*Wc%r6st^yNQKj}Cjxu-=Yb1Hjgq32r?qH-kaYdv+WSDQX$^ zdQT&{G)p&LwrJe6AYX-JYSg!$M&{lvB88q#HeDTd&tc)xGQ7|nq6FVj2!=vaCPrez zEnvbU4jN~(48gEPK*E$6HgF5o;!KxuIM9Dj`-*=!ek{=&S=o9(P)M20bj}hGs^@;U z=~X;Bp6k2>i+&j{ayky=7g>h(O}64Iw=5{f=W2a?{F~R0{-t~5Hz5l!XCx^3z=e|Y za7}qqaR*Nsre~ZCzLEPLyhC=|piBVBJ-X6Fqkh5$^Tc%2JTdLh6Vt=<#5Axl8D)22 z(zh@B>!8!3kYGGyAr$&Q9q@WZ5xhoaz}fViOaQOG|x0$4sz RR?D(}ZM2Wa{{e^R3Ve=mxFG-l diff --git a/publications.html b/publications.html index 55c1e97ecf..9e0031643a 100644 --- a/publications.html +++ b/publications.html @@ -17,7 +17,7 @@ - + @@ -44,7 +44,7 @@   ::   Contents   ::   - Release Notes for OpenMC 0.4.4  » + Release Notes for OpenMC 0.5.0  »

    @@ -57,6 +57,7 @@ bugs fixed, and known issues for each successive release.

    diff --git a/releasenotes/notes_0.4.0.html b/releasenotes/notes_0.4.0.html index 5ac71d307a..c0335958bd 100644 --- a/releasenotes/notes_0.4.0.html +++ b/releasenotes/notes_0.4.0.html @@ -17,7 +17,7 @@ + + + + + + + + + + +
    + + + +
    +
    + +

    + «  Release Notes +   ::   + Contents +   ::   + Release Notes for OpenMC 0.4.4  » +

    + +
    +
    + + +
    +

    Release Notes for OpenMC 0.5.0

    +
    +

    System Requirements

    +

    There are no special requirements for running the OpenMC code. As of this +release, OpenMC has been tested on a variety of Linux distributions, Mac OS X, +and Microsoft Windows 7. Memory requirements will vary depending on the size of +the problem at hand (mostly on the number of nuclides in the problem).

    +
    +
    +

    New Features

    +
      +
    • All user input options that formerly accepted “off” or “on” should now be +“false” or “true” (the proper XML schema datatype).
    • +
    • The <criticality> element is deprecated and was replaced with <eigenvalue>.
    • +
    • Added ‘events’ score that returns number of events that scored to a tally.
    • +
    • Restructured tally filter implementation and user input.
    • +
    • Source convergence acceleration via CMFD (implemented with PETSc).
    • +
    • Ability to read source files in parallel when number of particles is greater +than that number of source sites.
    • +
    • Cone surface types.
    • +
    +
    +
    +

    Bug Fixes

    +
      +
    • 737b90: Coincident surfaces from separate universes / particle traveling +tangent to a surface.
    • +
    • a819b4: Output of surface neighbors in summary.out file.
    • +
    • b11696: Reading long attribute lists in XML input.
    • +
    • 2bd46a: Search for tallying nuclides when no default_xs specified.
    • +
    • 7a1f08: Fix word wrapping when writing messages.
    • +
    • c0e3ec: Prevent underflow when compiling with MPI=yes and DEBUG=yes.
    • +
    • 6f8d9d: Set default tally labels.
    • +
    • 6a3a5e: Fix problem with corner-crossing in lattices.
    • +
    +
    +
    + + +
    +
    + +

    + «  Release Notes +   ::   + Contents +   ::   + Release Notes for OpenMC 0.4.4  » +

    + +
    + + + + + + + \ No newline at end of file diff --git a/search.html b/search.html index 49bed1b4ac..de9fa4a175 100644 --- a/search.html +++ b/search.html @@ -17,7 +17,7 @@ - +
    @@ -40,7 +40,7 @@

    - «  7. Parallelization + «  8. Parallelization   ::   Contents   ::   @@ -78,22 +78,23 @@ essential aspects of using OpenMC to perform neutronic simulations.

  • 3.1. Overview of Files
  • 3.2. Settings Specification – settings.xml
  • 3.3. Geometry Specification – geometry.xml
      @@ -161,7 +162,7 @@ essential aspects of using OpenMC to perform neutronic simulations.

      - «  7. Parallelization + «  8. Parallelization   ::   Contents   ::   diff --git a/usersguide/input.html b/usersguide/input.html index 5e6e9d0404..7feab69577 100644 --- a/usersguide/input.html +++ b/usersguide/input.html @@ -17,7 +17,7 @@