diff options
Diffstat (limited to 'Source/Utils/Physics')
-rw-r--r-- | Source/Utils/Physics/IonizationEnergiesTable.H | 226 | ||||
-rw-r--r-- | Source/Utils/Physics/Make.package | 1 | ||||
-rw-r--r-- | Source/Utils/Physics/atomic_data.txt | 462 | ||||
-rw-r--r-- | Source/Utils/Physics/write_atomic_data_cpp.py | 90 |
4 files changed, 779 insertions, 0 deletions
diff --git a/Source/Utils/Physics/IonizationEnergiesTable.H b/Source/Utils/Physics/IonizationEnergiesTable.H new file mode 100644 index 000000000..b806340ca --- /dev/null +++ b/Source/Utils/Physics/IonizationEnergiesTable.H @@ -0,0 +1,226 @@ +// This script was automatically generated! +// Edit dev/Source/Utils/Physics/write_atomic_data_cpp.py instead! + +#ifndef WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_ +#define WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_ + +#include <AMReX_REAL.H> + +#include <map> +#include <string> + +namespace utils::physics +{ + static std::map<std::string, int> const ion_map_ids = { + {"H", 0}, + {"He", 1}, + {"Li", 2}, + {"Be", 3}, + {"B", 4}, + {"C", 5}, + {"N", 6}, + {"O", 7}, + {"F", 8}, + {"Ne", 9}, + {"Na", 10}, + {"Mg", 11}, + {"Al", 12}, + {"Si", 13}, + {"P", 14}, + {"S", 15}, + {"Cl", 16}, + {"Ar", 17}, + {"Cu", 18}, + {"Kr", 19}, + {"Rb", 20}, + {"Xe", 21}, + {"Rn", 22} }; + + constexpr int nelements = 23; + + constexpr int ion_atomic_numbers[nelements] = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 29, 36, + 37, 54, 86}; + + constexpr int ion_energy_offsets[nelements] = { + 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, + 55, 66, 78, 91, 105, 120, 136, 153, 171, 200, + 236, 273, 327}; + + constexpr int energies_tab_length = 413; + + constexpr amrex::Real table_ionization_energies[energies_tab_length]{ + // H + amrex::Real(13.59843449), + // He + amrex::Real(24.58738880), amrex::Real(54.4177650), + // Li + amrex::Real(5.39171495), amrex::Real(75.6400964), amrex::Real(122.4543581), + // Be + amrex::Real(9.322699), amrex::Real(18.21115), amrex::Real(153.896203), + amrex::Real(217.7185843), + // B + amrex::Real(8.298019), amrex::Real(25.15483), amrex::Real(37.93058), + amrex::Real(259.3715), amrex::Real(340.226020), + // C + amrex::Real(11.2602880), amrex::Real(24.383154), amrex::Real(47.88778), + amrex::Real(64.49352), amrex::Real(392.090515), amrex::Real(489.993194), + // N + amrex::Real(14.53413), amrex::Real(29.60125), amrex::Real(47.4453), + amrex::Real(77.4735), amrex::Real(97.8901), amrex::Real(552.06732), + amrex::Real(667.046116), + // O + amrex::Real(13.618055), amrex::Real(35.12112), amrex::Real(54.93554), + amrex::Real(77.41350), amrex::Real(113.8990), amrex::Real(138.1189), + amrex::Real(739.32682), amrex::Real(871.40988), + // F + amrex::Real(17.42282), amrex::Real(34.97081), amrex::Real(62.70798), + amrex::Real(87.175), amrex::Real(114.249), amrex::Real(157.16311), + amrex::Real(185.1868), amrex::Real(953.89804), amrex::Real(1103.11747), + // Ne + amrex::Real(21.564540), amrex::Real(40.96297), amrex::Real(63.4233), + amrex::Real(97.1900), amrex::Real(126.247), amrex::Real(157.934), + amrex::Real(207.271), amrex::Real(239.0970), amrex::Real(1195.80783), + amrex::Real(1362.19915), + // Na + amrex::Real(5.1390769), amrex::Real(47.28636), amrex::Real(71.6200), + amrex::Real(98.936), amrex::Real(138.404), amrex::Real(172.23), + amrex::Real(208.504), amrex::Real(264.192), amrex::Real(299.856), + amrex::Real(1465.13449), amrex::Real(1648.70218), + // Mg + amrex::Real(7.646236), amrex::Real(15.035271), amrex::Real(80.1436), + amrex::Real(109.2654), amrex::Real(141.33), amrex::Real(186.76), + amrex::Real(225.02), amrex::Real(265.924), amrex::Real(327.99), + amrex::Real(367.489), amrex::Real(1761.80487), amrex::Real(1962.66365), + // Al + amrex::Real(5.985769), amrex::Real(18.82855), amrex::Real(28.447642), + amrex::Real(119.9924), amrex::Real(153.8252), amrex::Real(190.49), + amrex::Real(241.76), amrex::Real(284.64), amrex::Real(330.21), + amrex::Real(398.65), amrex::Real(442.005), amrex::Real(2085.97700), + amrex::Real(2304.14005), + // Si + amrex::Real(8.15168), amrex::Real(16.34585), amrex::Real(33.49300), + amrex::Real(45.14179), amrex::Real(166.767), amrex::Real(205.279), + amrex::Real(246.57), amrex::Real(303.59), amrex::Real(351.28), + amrex::Real(401.38), amrex::Real(476.273), amrex::Real(523.415), + amrex::Real(2437.65813), amrex::Real(2673.17753), + // P + amrex::Real(10.486686), amrex::Real(19.76949), amrex::Real(30.20264), + amrex::Real(51.44387), amrex::Real(65.02511), amrex::Real(220.430), + amrex::Real(263.57), amrex::Real(309.60), amrex::Real(372.31), + amrex::Real(424.40), amrex::Real(479.44), amrex::Real(560.62), + amrex::Real(611.741), amrex::Real(2816.90876), amrex::Real(3069.8415), + // S + amrex::Real(10.36001), amrex::Real(23.33788), amrex::Real(34.86), + amrex::Real(47.222), amrex::Real(72.5945), amrex::Real(88.0529), + amrex::Real(280.954), amrex::Real(328.794), amrex::Real(379.84), + amrex::Real(447.7), amrex::Real(504.55), amrex::Real(564.41), + amrex::Real(651.96), amrex::Real(706.994), amrex::Real(3223.7807), + amrex::Real(3494.1879), + // Cl + amrex::Real(12.967632), amrex::Real(23.81364), amrex::Real(39.80), + amrex::Real(53.24), amrex::Real(67.68), amrex::Real(96.94), + amrex::Real(114.2013), amrex::Real(348.306), amrex::Real(400.851), + amrex::Real(456.7), amrex::Real(530.0), amrex::Real(591.58), + amrex::Real(656.30), amrex::Real(750.23), amrex::Real(809.198), + amrex::Real(3658.3437), amrex::Real(3946.2909), + // Ar + amrex::Real(15.7596117), amrex::Real(27.62967), amrex::Real(40.735), + amrex::Real(59.58), amrex::Real(74.84), amrex::Real(91.290), + amrex::Real(124.41), amrex::Real(143.4567), amrex::Real(422.60), + amrex::Real(479.76), amrex::Real(540.4), amrex::Real(619.0), + amrex::Real(685.5), amrex::Real(755.13), amrex::Real(855.5), + amrex::Real(918.375), amrex::Real(4120.6656), amrex::Real(4426.2228), + // Cu + amrex::Real(7.726380), amrex::Real(20.29239), amrex::Real(36.841), + amrex::Real(57.38), amrex::Real(79.8), amrex::Real(103.0), + amrex::Real(139.0), amrex::Real(166.0), amrex::Real(198.0), + amrex::Real(232.2), amrex::Real(265.33), amrex::Real(367.0), + amrex::Real(401.0), amrex::Real(436.0), amrex::Real(483.1), + amrex::Real(518.7), amrex::Real(552.8), amrex::Real(632.5), + amrex::Real(670.608), amrex::Real(1690.5), amrex::Real(1800), + amrex::Real(1918), amrex::Real(2044), amrex::Real(2179.4), + amrex::Real(2307.3), amrex::Real(2479.1), amrex::Real(2586.954), + amrex::Real(11062.4313), amrex::Real(11567.613), + // Kr + amrex::Real(13.9996053), amrex::Real(24.35984), amrex::Real(35.838), + amrex::Real(50.85), amrex::Real(64.69), amrex::Real(78.49), + amrex::Real(109.13), amrex::Real(125.802), amrex::Real(233.0), + amrex::Real(268), amrex::Real(308), amrex::Real(350), + amrex::Real(391), amrex::Real(446), amrex::Real(492), + amrex::Real(540), amrex::Real(591), amrex::Real(640), + amrex::Real(785), amrex::Real(831.6), amrex::Real(882.8), + amrex::Real(945), amrex::Real(999.0), amrex::Real(1042), + amrex::Real(1155.0), amrex::Real(1205.23), amrex::Real(2928.9), + amrex::Real(3072), amrex::Real(3228), amrex::Real(3380), + amrex::Real(3584), amrex::Real(3752.0), amrex::Real(3971), + amrex::Real(4109.083), amrex::Real(17296.420), amrex::Real(17936.209), + // Rb + amrex::Real(4.1771280), amrex::Real(27.28954), amrex::Real(39.247), + amrex::Real(52.20), amrex::Real(68.44), amrex::Real(82.9), + amrex::Real(98.67), amrex::Real(132.79), amrex::Real(150.628), + amrex::Real(277.12), amrex::Real(313.1), amrex::Real(356.0), + amrex::Real(400), amrex::Real(443), amrex::Real(502), + amrex::Real(550), amrex::Real(601), amrex::Real(654), + amrex::Real(706.0), amrex::Real(857), amrex::Real(905.3), + amrex::Real(958.9), amrex::Real(1024), amrex::Real(1080), + amrex::Real(1125), amrex::Real(1242.5), amrex::Real(1294.57), + amrex::Real(3133.3), amrex::Real(3281), amrex::Real(3443), + amrex::Real(3600), amrex::Real(3815), amrex::Real(3988), + amrex::Real(4214), amrex::Real(4356.865), amrex::Real(18305.884), + amrex::Real(18965.516), + // Xe + amrex::Real(12.1298436), amrex::Real(20.975), amrex::Real(31.05), + amrex::Real(42.20), amrex::Real(54.1), amrex::Real(66.703), + amrex::Real(91.6), amrex::Real(105.9778), amrex::Real(179.84), + amrex::Real(202.0), amrex::Real(229.02), amrex::Real(255.0), + amrex::Real(281), amrex::Real(314), amrex::Real(343), + amrex::Real(374), amrex::Real(404), amrex::Real(434), + amrex::Real(549), amrex::Real(582), amrex::Real(616), + amrex::Real(650), amrex::Real(700), amrex::Real(736), + amrex::Real(818), amrex::Real(857.0), amrex::Real(1493), + amrex::Real(1571), amrex::Real(1653), amrex::Real(1742), + amrex::Real(1826), amrex::Real(1919), amrex::Real(2023), + amrex::Real(2113), amrex::Real(2209), amrex::Real(2300), + amrex::Real(2556), amrex::Real(2637), amrex::Real(2726), + amrex::Real(2811), amrex::Real(2975), amrex::Real(3068), + amrex::Real(3243), amrex::Real(3333.8), amrex::Real(7660), + amrex::Real(7889), amrex::Real(8144), amrex::Real(8382), + amrex::Real(8971), amrex::Real(9243), amrex::Real(9581), + amrex::Real(9810.37), amrex::Real(40271.724), amrex::Real(41299.71), + // Rn + amrex::Real(10.74850), amrex::Real(21.4), amrex::Real(29.4), + amrex::Real(36.9), amrex::Real(52.9), amrex::Real(64.0), + amrex::Real(88.0), amrex::Real(102.0), amrex::Real(154.0), + amrex::Real(173.9), amrex::Real(195.0), amrex::Real(218.0), + amrex::Real(240), amrex::Real(264), amrex::Real(293), + amrex::Real(317), amrex::Real(342), amrex::Real(367), + amrex::Real(488), amrex::Real(520), amrex::Real(550), + amrex::Real(580), amrex::Real(640), amrex::Real(680), + amrex::Real(760), amrex::Real(800), amrex::Real(850), + amrex::Real(920), amrex::Real(980), amrex::Real(1050), + amrex::Real(1110), amrex::Real(1180), amrex::Real(1250), + amrex::Real(1310), amrex::Real(1390), amrex::Real(1460), + amrex::Real(1520), amrex::Real(1590), amrex::Real(1660), + amrex::Real(1720), amrex::Real(2033), amrex::Real(2094), + amrex::Real(2158), amrex::Real(2227), amrex::Real(2293), + amrex::Real(2357), amrex::Real(2467), amrex::Real(2535), + amrex::Real(2606), amrex::Real(2674), amrex::Real(2944), + amrex::Real(3010), amrex::Real(3082), amrex::Real(3149), + amrex::Real(3433), amrex::Real(3510), amrex::Real(3699), + amrex::Real(3777), amrex::Real(6169), amrex::Real(6318), + amrex::Real(6476), amrex::Real(6646), amrex::Real(6807), + amrex::Real(6964), amrex::Real(7283), amrex::Real(7450), + amrex::Real(7630), amrex::Real(7800), amrex::Real(8260), + amrex::Real(8410), amrex::Real(8570), amrex::Real(8710), + amrex::Real(9610), amrex::Real(9780), amrex::Real(10120), + amrex::Real(10290), amrex::Real(21770), amrex::Real(22160), + amrex::Real(22600), amrex::Real(22990), amrex::Real(26310), + amrex::Real(26830), amrex::Real(27490), amrex::Real(27903.1), + amrex::Real(110842.0), amrex::Real(112843.7) + }; + +} + +#endif // #ifndef WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_ diff --git a/Source/Utils/Physics/Make.package b/Source/Utils/Physics/Make.package new file mode 100644 index 000000000..d8f7bab32 --- /dev/null +++ b/Source/Utils/Physics/Make.package @@ -0,0 +1 @@ +VPATH_LOCATIONS += $(WARPX_HOME)/Source/Utils/Physics diff --git a/Source/Utils/Physics/atomic_data.txt b/Source/Utils/Physics/atomic_data.txt new file mode 100644 index 000000000..ead20a623 --- /dev/null +++ b/Source/Utils/Physics/atomic_data.txt @@ -0,0 +1,462 @@ +# Copyright 2019 Maxence Thevenet +# +# This file is part of WarpX. +# +# License: BSD-3-Clause-LBNL + +# Reference: +# Kramida, A., Ralchenko, Yu., Reader, J., and NIST ASD Team (2014). +# NIST Atomic Spectra Database (ver. 5.2), [Online]. +# Available: http://physics.nist.gov/asd [2017, March 3]. + +# License (from https://www.nist.gov/director/licensing): +# This data was developed by employees of the National Institute of Standards +# and Technology (NIST), an agency of the Federal Government. Pursuant to title +# 17 United States Code Section 105, works of NIST employees are not subject to +# copyright protection in the United States and are considered to be in the +# public domain. +# The data is provided by NIST as a public service and is expressly provided +# "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR STATUTORY, +# INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT AND DATA ACCURACY. NIST +# does not warrant or make any representations regarding the use of the data or +# the results thereof, including but not limited to the correctness, accuracy, +# reliability or usefulness of the data. NIST SHALL NOT BE LIABLE AND YOU +# HEREBY RELEASE NIST FROM LIABILITY FOR ANY INDIRECT, CONSEQUENTIAL, SPECIAL, +# OR INCIDENTAL DAMAGES (INCLUDING DAMAGES FOR LOSS OF BUSINESS PROFITS, +# BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, AND THE LIKE), WHETHER +# ARISING IN TORT, CONTRACT, OR OTHERWISE, ARISING FROM OR RELATING TO THE DATA +# (OR THE USE OF OR INABILITY TO USE THIS DATA), EVEN IF NIST HAS BEEN ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGES. +# To the extent that NIST may hold copyright in countries other than the United +# States, you are hereby granted the non-exclusive irrevocable and unconditional +# right to print, publish, prepare derivative works and distribute the NIST +# data, in any medium, or authorize others to do so on your behalf, on a +# royalty-free basis throughout the world. +# You may improve, modify, and create derivative works of the data or any +# portion of the data, and you may copy and distribute such modifications or +# works. Modified works should carry a notice stating that you changed the data +# and should note the date and nature of any such change. Please explicitly +# acknowledge the National Institute of Standards and Technology as the source +# of the data: Data citation recommendations are provided below. +# Permission to use this data is contingent upon your acceptance of the terms +# of this agreement and upon your providing appropriate acknowledgments of +# NIST's creation of the data. + +----------------------------------------------------------------------------- +At. num | Sp. Name | Ion Charge | Ionization Energy (eV) | +--------|---------------|------------|--------------------------------------| + 1 | H I | 0 | (13.59843449) | + 2 | He I | 0 | 24.58738880 | + 2 | He II | +1 | (54.4177650) | + 3 | Li I | 0 | 5.39171495 | + 3 | Li II | +1 | [75.6400964] | + 3 | Li III | +2 | (122.4543581) | + 4 | Be I | 0 | 9.322699 | + 4 | Be II | +1 | 18.21115 | + 4 | Be III | +2 | [153.896203] | + 4 | Be IV | +3 | (217.7185843) | + 5 | B I | 0 | 8.298019 | + 5 | B II | +1 | 25.15483 | + 5 | B III | +2 | 37.93058 | + 5 | B IV | +3 | 259.3715 | + 5 | B V | +4 | (340.226020) | + 6 | C I | 0 | 11.2602880 | + 6 | C II | +1 | 24.383154 | + 6 | C III | +2 | 47.88778 | + 6 | C IV | +3 | 64.49352 | + 6 | C V | +4 | [392.090515] | + 6 | C VI | +5 | (489.993194) | + 7 | N I | 0 | 14.53413 | + 7 | N II | +1 | [29.60125] | + 7 | N III | +2 | [47.4453] | + 7 | N IV | +3 | 77.4735 | + 7 | N V | +4 | 97.8901 | + 7 | N VI | +5 | [552.06732] | + 7 | N VII | +6 | (667.046116) | + 8 | O I | 0 | 13.618055 | + 8 | O II | +1 | 35.12112 | + 8 | O III | +2 | [54.93554] | + 8 | O IV | +3 | 77.41350 | + 8 | O V | +4 | 113.8990 | + 8 | O VI | +5 | [138.1189] | + 8 | O VII | +6 | [739.32682] | + 8 | O VIII | +7 | (871.40988) | + 9 | F I | 0 | 17.42282 | + 9 | F II | +1 | 34.97081 | + 9 | F III | +2 | [62.70798] | + 9 | F IV | +3 | [87.175] | + 9 | F V | +4 | [114.249] | + 9 | F VI | +5 | 157.16311 | + 9 | F VII | +6 | [185.1868] | + 9 | F VIII | +7 | [953.89804] | + 9 | F IX | +8 | (1103.11747) | + 10 | Ne I | 0 | 21.564540 | + 10 | Ne II | +1 | 40.96297 | + 10 | Ne III | +2 | 63.4233 | + 10 | Ne IV | +3 | [97.1900] | + 10 | Ne V | +4 | 126.247 | + 10 | Ne VI | +5 | 157.934 | + 10 | Ne VII | +6 | 207.271 | + 10 | Ne VIII | +7 | [239.0970] | + 10 | Ne IX | +8 | [1195.80783] | + 10 | Ne X | +9 | (1362.19915) | + 11 | Na I | 0 | 5.1390769 | + 11 | Na II | +1 | 47.28636 | + 11 | Na III | +2 | [71.6200] | + 11 | Na IV | +3 | [98.936] | + 11 | Na V | +4 | 138.404 | + 11 | Na VI | +5 | [172.23] | + 11 | Na VII | +6 | [208.504] | + 11 | Na VIII | +7 | [264.192] | + 11 | Na IX | +8 | (299.856) | + 11 | Na X | +9 | (1465.13449) | + 11 | Na XI | +10 | (1648.70218) | + 12 | Mg I | 0 | 7.646236 | + 12 | Mg II | +1 | 15.035271 | + 12 | Mg III | +2 | 80.1436 | + 12 | Mg IV | +3 | [109.2654] | + 12 | Mg V | +4 | [141.33] | + 12 | Mg VI | +5 | [186.76] | + 12 | Mg VII | +6 | [225.02] | + 12 | Mg VIII | +7 | [265.924] | + 12 | Mg IX | +8 | [327.99] | + 12 | Mg X | +9 | (367.489) | + 12 | Mg XI | +10 | (1761.80487) | + 12 | Mg XII | +11 | (1962.66365) | + 13 | Al I | 0 | 5.985769 | + 13 | Al II | +1 | 18.82855 | + 13 | Al III | +2 | 28.447642 | + 13 | Al IV | +3 | 119.9924 | + 13 | Al V | +4 | [153.8252] | + 13 | Al VI | +5 | [190.49] | + 13 | Al VII | +6 | [241.76] | + 13 | Al VIII | +7 | [284.64] | + 13 | Al IX | +8 | [330.21] | + 13 | Al X | +9 | [398.65] | + 13 | Al XI | +10 | (442.005) | + 13 | Al XII | +11 | (2085.97700) | + 13 | Al XIII | +12 | (2304.14005) | + 14 | Si I | 0 | 8.15168 | + 14 | Si II | +1 | 16.34585 | + 14 | Si III | +2 | 33.49300 | + 14 | Si IV | +3 | 45.14179 | + 14 | Si V | +4 | 166.767 | + 14 | Si VI | +5 | [205.279] | + 14 | Si VII | +6 | [246.57] | + 14 | Si VIII | +7 | [303.59] | + 14 | Si IX | +8 | [351.28] | + 14 | Si X | +9 | [401.38] | + 14 | Si XI | +10 | [476.273] | + 14 | Si XII | +11 | (523.415) | + 14 | Si XIII | +12 | (2437.65813) | + 14 | Si XIV | +13 | (2673.17753) | + 15 | P I | 0 | 10.486686 | + 15 | P II | +1 | [19.76949] | + 15 | P III | +2 | 30.20264 | + 15 | P IV | +3 | 51.44387 | + 15 | P V | +4 | 65.02511 | + 15 | P VI | +5 | [220.430] | + 15 | P VII | +6 | [263.57] | + 15 | P VIII | +7 | [309.60] | + 15 | P IX | +8 | [372.31] | + 15 | P X | +9 | [424.40] | + 15 | P XI | +10 | [479.44] | + 15 | P XII | +11 | [560.62] | + 15 | P XIII | +12 | (611.741) | + 15 | P XIV | +13 | (2816.90876) | + 15 | P XV | +14 | (3069.8415) | + 16 | S I | 0 | 10.36001 | + 16 | S II | +1 | 23.33788 | + 16 | S III | +2 | [34.86] | + 16 | S IV | +3 | [47.222] | + 16 | S V | +4 | 72.5945 | + 16 | S VI | +5 | 88.0529 | + 16 | S VII | +6 | 280.954 | + 16 | S VIII | +7 | 328.794 | + 16 | S IX | +8 | [379.84] | + 16 | S X | +9 | [447.7] | + 16 | S XI | +10 | [504.55] | + 16 | S XII | +11 | [564.41] | + 16 | S XIII | +12 | [651.96] | + 16 | S XIV | +13 | (706.994) | + 16 | S XV | +14 | (3223.7807) | + 16 | S XVI | +15 | (3494.1879) | + 17 | Cl I | 0 | 12.967632 | + 17 | Cl II | +1 | 23.81364 | + 17 | Cl III | +2 | [39.80] | + 17 | Cl IV | +3 | [53.24] | + 17 | Cl V | +4 | [67.68] | + 17 | Cl VI | +5 | [96.94] | + 17 | Cl VII | +6 | 114.2013 | + 17 | Cl VIII | +7 | 348.306 | + 17 | Cl IX | +8 | 400.851 | + 17 | Cl X | +9 | [456.7] | + 17 | Cl XI | +10 | [530.0] | + 17 | Cl XII | +11 | [591.58] | + 17 | Cl XIII | +12 | [656.30] | + 17 | Cl XIV | +13 | [750.23] | + 17 | Cl XV | +14 | (809.198) | + 17 | Cl XVI | +15 | (3658.3437) | + 17 | Cl XVII | +16 | (3946.2909) | + 18 | Ar I | 0 | 15.7596117 | + 18 | Ar II | +1 | 27.62967 | + 18 | Ar III | +2 | [40.735] | + 18 | Ar IV | +3 | [59.58] | + 18 | Ar V | +4 | [74.84] | + 18 | Ar VI | +5 | 91.290 | + 18 | Ar VII | +6 | [124.41] | + 18 | Ar VIII | +7 | [143.4567] | + 18 | Ar IX | +8 | [422.60] | + 18 | Ar X | +9 | [479.76] | + 18 | Ar XI | +10 | [540.4] | + 18 | Ar XII | +11 | [619.0] | + 18 | Ar XIII | +12 | [685.5] | + 18 | Ar XIV | +13 | [755.13] | + 18 | Ar XV | +14 | [855.5] | + 18 | Ar XVI | +15 | (918.375) | + 18 | Ar XVII | +16 | (4120.6656) | + 18 | Ar XVIII | +17 | (4426.2228) | + 29 | Cu I | 0 | 7.726380 | + 29 | Cu II | +1 | 20.29239 | + 29 | Cu III | +2 | 36.841 | + 29 | Cu IV | +3 | [57.38] | + 29 | Cu V | +4 | [79.8] | + 29 | Cu VI | +5 | [103.0] | + 29 | Cu VII | +6 | [139.0] | + 29 | Cu VIII | +7 | (166.0) | + 29 | Cu IX | +8 | (198.0) | + 29 | Cu X | +9 | [232.2] | + 29 | Cu XI | +10 | 265.33 | + 29 | Cu XII | +11 | [367.0] | + 29 | Cu XIII | +12 | [401.0] | + 29 | Cu XIV | +13 | [436.0] | + 29 | Cu XV | +14 | [483.1] | + 29 | Cu XVI | +15 | [518.7] | + 29 | Cu XVII | +16 | [552.8] | + 29 | Cu XVIII | +17 | [632.5] | + 29 | Cu XIX | +18 | [670.608] | + 29 | Cu XX | +19 | [1690.5] | + 29 | Cu XXI | +20 | [1800] | + 29 | Cu XXII | +21 | [1918] | + 29 | Cu XXIII | +22 | [2044] | + 29 | Cu XXIV | +23 | [2179.4] | + 29 | Cu XXV | +24 | [2307.3] | + 29 | Cu XXVI | +25 | [2479.1] | + 29 | Cu XXVII | +26 | (2586.954) | + 29 | Cu XXVIII | +27 | (11062.4313) | + 29 | Cu XXIX | +28 | (11567.613) | + 36 | Kr I | 0 | 13.9996053 | + 36 | Kr II | +1 | 24.35984 | + 36 | Kr III | +2 | 35.838 | + 36 | Kr IV | +3 | 50.85 | + 36 | Kr V | +4 | [64.69] | + 36 | Kr VI | +5 | [78.49] | + 36 | Kr VII | +6 | (109.13) | + 36 | Kr VIII | +7 | 125.802 | + 36 | Kr IX | +8 | [233.0] | + 36 | Kr X | +9 | (268) | + 36 | Kr XI | +10 | (308) | + 36 | Kr XII | +11 | (350) | + 36 | Kr XIII | +12 | (391) | + 36 | Kr XIV | +13 | (446) | + 36 | Kr XV | +14 | (492) | + 36 | Kr XVI | +15 | (540) | + 36 | Kr XVII | +16 | (591) | + 36 | Kr XVIII | +17 | (640) | + 36 | Kr XIX | +18 | [785] | + 36 | Kr XX | +19 | [831.6] | + 36 | Kr XXI | +20 | [882.8] | + 36 | Kr XXII | +21 | [945] | + 36 | Kr XXIII | +22 | [999.0] | + 36 | Kr XXIV | +23 | [1042] | + 36 | Kr XXV | +24 | [1155.0] | + 36 | Kr XXVI | +25 | [1205.23] | + 36 | Kr XXVII | +26 | [2928.9] | + 36 | Kr XXVIII | +27 | [3072] | + 36 | Kr XXIX | +28 | [3228] | + 36 | Kr XXX | +29 | [3380] | + 36 | Kr XXXI | +30 | [3584] | + 36 | Kr XXXII | +31 | [3752.0] | + 36 | Kr XXXIII | +32 | [3971] | + 36 | Kr XXXIV | +33 | (4109.083) | + 36 | Kr XXXV | +34 | (17296.420) | + 36 | Kr XXXVI | +35 | (17936.209) | + 37 | Rb I | 0 | 4.1771280 | + 37 | Rb II | +1 | 27.28954 | + 37 | Rb III | +2 | [39.247] | + 37 | Rb IV | +3 | [52.20] | + 37 | Rb V | +4 | (68.44) | + 37 | Rb VI | +5 | (82.9) | + 37 | Rb VII | +6 | [98.67] | + 37 | Rb VIII | +7 | [132.79] | + 37 | Rb IX | +8 | 150.628 | + 37 | Rb X | +9 | 277.12 | + 37 | Rb XI | +10 | (313.1) | + 37 | Rb XII | +11 | (356.0) | + 37 | Rb XIII | +12 | (400) | + 37 | Rb XIV | +13 | (443) | + 37 | Rb XV | +14 | (502) | + 37 | Rb XVI | +15 | (550) | + 37 | Rb XVII | +16 | (601) | + 37 | Rb XVIII | +17 | (654) | + 37 | Rb XIX | +18 | (706.0) | + 37 | Rb XX | +19 | [857] | + 37 | Rb XXI | +20 | [905.3] | + 37 | Rb XXII | +21 | [958.9] | + 37 | Rb XXIII | +22 | [1024] | + 37 | Rb XXIV | +23 | [1080] | + 37 | Rb XXV | +24 | [1125] | + 37 | Rb XXVI | +25 | [1242.5] | + 37 | Rb XXVII | +26 | [1294.57] | + 37 | Rb XXVIII | +27 | [3133.3] | + 37 | Rb XXIX | +28 | [3281] | + 37 | Rb XXX | +29 | [3443] | + 37 | Rb XXXI | +30 | [3600] | + 37 | Rb XXXII | +31 | [3815] | + 37 | Rb XXXIII | +32 | [3988] | + 37 | Rb XXXIV | +33 | [4214] | + 37 | Rb XXXV | +34 | (4356.865) | + 37 | Rb XXXVI | +35 | (18305.884) | + 37 | Rb XXXVII | +36 | (18965.516) | + 54 | Xe I | 0 | 12.1298436 | + 54 | Xe II | +1 | [20.975] | + 54 | Xe III | +2 | [31.05] | + 54 | Xe IV | +3 | 42.20 | + 54 | Xe V | +4 | [54.1] | + 54 | Xe VI | +5 | 66.703 | + 54 | Xe VII | +6 | [91.6] | + 54 | Xe VIII | +7 | 105.9778 | + 54 | Xe IX | +8 | 179.84 | + 54 | Xe X | +9 | (202.0) | + 54 | Xe XI | +10 | [229.02] | + 54 | Xe XII | +11 | (255.0) | + 54 | Xe XIII | +12 | (281) | + 54 | Xe XIV | +13 | (314) | + 54 | Xe XV | +14 | (343) | + 54 | Xe XVI | +15 | (374) | + 54 | Xe XVII | +16 | (404) | + 54 | Xe XVIII | +17 | (434) | + 54 | Xe XIX | +18 | (549) | + 54 | Xe XX | +19 | (582) | + 54 | Xe XXI | +20 | (616) | + 54 | Xe XXII | +21 | (650) | + 54 | Xe XXIII | +22 | (700) | + 54 | Xe XXIV | +23 | (736) | + 54 | Xe XXV | +24 | (818) | + 54 | Xe XXVI | +25 | [857.0] | + 54 | Xe XXVII | +26 | (1493) | + 54 | Xe XXVIII | +27 | (1571) | + 54 | Xe XXIX | +28 | (1653) | + 54 | Xe XXX | +29 | (1742) | + 54 | Xe XXXI | +30 | (1826) | + 54 | Xe XXXII | +31 | (1919) | + 54 | Xe XXXIII | +32 | (2023) | + 54 | Xe XXXIV | +33 | (2113) | + 54 | Xe XXXV | +34 | (2209) | + 54 | Xe XXXVI | +35 | (2300) | + 54 | Xe XXXVII | +36 | (2556) | + 54 | Xe XXXVIII | +37 | (2637) | + 54 | Xe XXXIX | +38 | (2726) | + 54 | Xe XL | +39 | (2811) | + 54 | Xe XLI | +40 | (2975) | + 54 | Xe XLII | +41 | (3068) | + 54 | Xe XLIII | +42 | (3243) | + 54 | Xe XLIV | +43 | [3333.8] | + 54 | Xe XLV | +44 | (7660) | + 54 | Xe XLVI | +45 | (7889) | + 54 | Xe XLVII | +46 | (8144) | + 54 | Xe XLVIII | +47 | (8382) | + 54 | Xe XLIX | +48 | (8971) | + 54 | Xe L | +49 | (9243) | + 54 | Xe LI | +50 | (9581) | + 54 | Xe LII | +51 | (9810.37) | + 54 | Xe LIII | +52 | (40271.724) | + 54 | Xe LIV | +53 | (41299.71) | + 86 | Rn I | 0 | 10.74850 | + 86 | Rn II | +1 | [21.4] | + 86 | Rn III | +2 | [29.4] | + 86 | Rn IV | +3 | (36.9) | + 86 | Rn V | +4 | (52.9) | + 86 | Rn VI | +5 | (64.0) | + 86 | Rn VII | +6 | (88.0) | + 86 | Rn VIII | +7 | (102.0) | + 86 | Rn IX | +8 | (154.0) | + 86 | Rn X | +9 | (173.9) | + 86 | Rn XI | +10 | (195.0) | + 86 | Rn XII | +11 | (218.0) | + 86 | Rn XIII | +12 | (240) | + 86 | Rn XIV | +13 | (264) | + 86 | Rn XV | +14 | (293) | + 86 | Rn XVI | +15 | (317) | + 86 | Rn XVII | +16 | (342) | + 86 | Rn XVIII | +17 | (367) | + 86 | Rn XIX | +18 | (488) | + 86 | Rn XX | +19 | (520) | + 86 | Rn XXI | +20 | (550) | + 86 | Rn XXII | +21 | (580) | + 86 | Rn XXIII | +22 | (640) | + 86 | Rn XXIV | +23 | (680) | + 86 | Rn XXV | +24 | (760) | + 86 | Rn XXVI | +25 | (800) | + 86 | Rn XXVII | +26 | (850) | + 86 | Rn XXVIII | +27 | (920) | + 86 | Rn XXIX | +28 | (980) | + 86 | Rn XXX | +29 | (1050) | + 86 | Rn XXXI | +30 | (1110) | + 86 | Rn XXXII | +31 | (1180) | + 86 | Rn XXXIII | +32 | (1250) | + 86 | Rn XXXIV | +33 | (1310) | + 86 | Rn XXXV | +34 | (1390) | + 86 | Rn XXXVI | +35 | (1460) | + 86 | Rn XXXVII | +36 | (1520) | + 86 | Rn XXXVIII | +37 | (1590) | + 86 | Rn XXXIX | +38 | (1660) | + 86 | Rn XL | +39 | (1720) | + 86 | Rn XLI | +40 | (2033) | + 86 | Rn XLII | +41 | (2094) | + 86 | Rn XLIII | +42 | (2158) | + 86 | Rn XLIV | +43 | (2227) | + 86 | Rn XLV | +44 | (2293) | + 86 | Rn XLVI | +45 | (2357) | + 86 | Rn XLVII | +46 | (2467) | + 86 | Rn XLVIII | +47 | (2535) | + 86 | Rn XLIX | +48 | (2606) | + 86 | Rn L | +49 | (2674) | + 86 | Rn LI | +50 | (2944) | + 86 | Rn LII | +51 | (3010) | + 86 | Rn LIII | +52 | (3082) | + 86 | Rn LIV | +53 | (3149) | + 86 | Rn LV | +54 | (3433) | + 86 | Rn LVI | +55 | (3510) | + 86 | Rn LVII | +56 | (3699) | + 86 | Rn LVIII | +57 | [3777] | + 86 | Rn LIX | +58 | (6169) | + 86 | Rn LX | +59 | (6318) | + 86 | Rn LXI | +60 | (6476) | + 86 | Rn LXII | +61 | (6646) | + 86 | Rn LXIII | +62 | (6807) | + 86 | Rn LXIV | +63 | (6964) | + 86 | Rn LXV | +64 | (7283) | + 86 | Rn LXVI | +65 | (7450) | + 86 | Rn LXVII | +66 | (7630) | + 86 | Rn LXVIII | +67 | (7800) | + 86 | Rn LXIX | +68 | (8260) | + 86 | Rn LXX | +69 | (8410) | + 86 | Rn LXXI | +70 | (8570) | + 86 | Rn LXXII | +71 | (8710) | + 86 | Rn LXXIII | +72 | (9610) | + 86 | Rn LXXIV | +73 | (9780) | + 86 | Rn LXXV | +74 | (10120) | + 86 | Rn LXXVI | +75 | (10290) | + 86 | Rn LXXVII | +76 | (21770) | + 86 | Rn LXXVIII | +77 | (22160) | + 86 | Rn LXXIX | +78 | (22600) | + 86 | Rn LXXX | +79 | (22990) | + 86 | Rn LXXXI | +80 | (26310) | + 86 | Rn LXXXII | +81 | (26830) | + 86 | Rn LXXXIII | +82 | (27490) | + 86 | Rn LXXXIV | +83 | (27903.1) | + 86 | Rn LXXXV | +84 | (110842.0) | + 86 | Rn LXXXVI | +85 | (112843.7) | +----------------------------------------------------------------------------- diff --git a/Source/Utils/Physics/write_atomic_data_cpp.py b/Source/Utils/Physics/write_atomic_data_cpp.py new file mode 100644 index 000000000..11cd3b2c0 --- /dev/null +++ b/Source/Utils/Physics/write_atomic_data_cpp.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# +# Copyright 2019-2021 Axel Huebl, Luca Fedeli, Maxence Thevenet +# +# +# This file is part of WarpX. +# +# License: BSD-3-Clause-LBNL + +''' +This python script reads ionization tables in atomic_data.txt (generated from +the NIST website) and extracts ionization levels into C++ file +IonizationEnergiesTable.H, which contains tables + metadata. +''' + +import os +import re + +import numpy as np + +filename = os.path.join( '.', 'atomic_data.txt' ) +with open(filename) as f: + text_data = f.read() + +# Read full table from file and get names, atomic numbers and offsets +# position in table of ionization energies for all species +regex_command = '\n\s+(\d+)\s+\|\s+([A-Z]+[a-z]*)\s+\w+\s+\|\s+\+*(\d+)\s+\|\s+\(*\[*(\d+\.*\d*)' +list_of_tuples = re.findall( regex_command, text_data ) +ion_atom_numbers = [int(i) for i in list(dict.fromkeys( [x[0] for x in list_of_tuples] ))] +ion_names = list(dict.fromkeys( [x[1] for x in list_of_tuples] )) +ion_offsets = np.concatenate(([0], np.cumsum(np.array(ion_atom_numbers)[:-1])), axis=0) + +# Head of CPP file +cpp_string = '// This script was automatically generated!\n' +cpp_string += '// Edit dev/Source/Utils/Physics/write_atomic_data_cpp.py instead!\n\n' +cpp_string += '#ifndef WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_\n' +cpp_string += '#define WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_\n\n' +cpp_string += '#include <AMReX_REAL.H>\n\n' +cpp_string += '#include <map>\n' +cpp_string += '#include <string>\n\n' +cpp_string += 'namespace utils::physics\n' +cpp_string += '{\n' + +# Map each element to ID in table +cpp_string += ' static std::map<std::string, int> const ion_map_ids = {' +for count, name in enumerate(ion_names): + cpp_string += '\n {"' + name + '", ' + str(count) + '},' +cpp_string = cpp_string[:-1] +cpp_string += ' };\n\n' + +# Atomic number of each species +cpp_string += ' constexpr int nelements = ' + str(len(ion_names)) + ';\n\n' +cpp_string += ' constexpr int ion_atomic_numbers[nelements] = {\n ' +for count, atom_num in enumerate(ion_atom_numbers): + if count%10==0 and count>0: cpp_string = cpp_string[:-2] + ',\n ' + cpp_string += str(atom_num) + ', ' +cpp_string = cpp_string[:-2] +cpp_string += '};\n\n' + +# Offset of each element in table of ionization energies +cpp_string += ' constexpr int ion_energy_offsets[nelements] = {\n ' +for count, offset in enumerate(ion_offsets): + if count%10==0 and count>0: cpp_string = cpp_string[:-2] + ',\n ' + cpp_string += str(offset) + ', ' +cpp_string = cpp_string[:-2] +cpp_string += '};\n\n' + +# Table of ionization energies +cpp_string += ' constexpr int energies_tab_length = ' + str(len(list_of_tuples)) + ';\n\n' +cpp_string += ' constexpr amrex::Real table_ionization_energies[energies_tab_length]{' +for element in ion_names: + cpp_string += '\n // ' + element + '\n ' + regex_command = \ + '\n\s+(\d+)\s+\|\s+%s\s+\w+\s+\|\s+\+*(\d+)\s+\|\s+\(*\[*(\d+\.*\d*)' \ + %element + list_of_tuples = re.findall( regex_command, text_data ) + for count, energy in enumerate([x[2] for x in list_of_tuples]): + if count%3==0 and count>0: cpp_string = cpp_string[:-2] + ',\n ' + cpp_string += "amrex::Real(" + energy + '), ' + cpp_string = cpp_string[:-1] +cpp_string = cpp_string[:-1] +cpp_string += '\n };\n\n' + +cpp_string += '}\n\n' + +# Write the string to file +cpp_string += '#endif // #ifndef WARPX_UTILS_PHYSICS_IONIZATION_TABLE_H_\n' +f= open("IonizationEnergiesTable.H","w") +f.write(cpp_string) +f.close() |