libra-toolbox 0.8__tar.gz → 0.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. {libra_toolbox-0.8/libra_toolbox.egg-info → libra_toolbox-0.9}/PKG-INFO +1 -1
  2. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/_version.py +2 -2
  3. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/compass.py +37 -13
  4. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutronics/__init__.py +1 -0
  5. libra_toolbox-0.9/libra_toolbox/neutronics/materials.py +312 -0
  6. libra_toolbox-0.9/libra_toolbox/neutronics/vault.py +457 -0
  7. {libra_toolbox-0.8 → libra_toolbox-0.9/libra_toolbox.egg-info}/PKG-INFO +1 -1
  8. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox.egg-info/SOURCES.txt +6 -3
  9. libra_toolbox-0.9/test/neutron_detection/compass_test_data/events/waveforms/Data_CH4@DT5725_1360_Co60_0_872uCi_19Mar2014_20241213_4in.CSV +7 -0
  10. libra_toolbox-0.9/test/neutron_detection/compass_test_data/events/waveforms/Data_CH4@DT5725_1360_Co60_0_872uCi_19Mar2014_20241213_4in_1.CSV +2 -0
  11. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/test_compass.py +14 -11
  12. libra_toolbox-0.8/libra_toolbox/neutronics/vault.py +0 -773
  13. {libra_toolbox-0.8 → libra_toolbox-0.9}/.github/workflows/ci.yml +0 -0
  14. {libra_toolbox-0.8 → libra_toolbox-0.9}/.github/workflows/python-publish.yml +0 -0
  15. {libra_toolbox-0.8 → libra_toolbox-0.9}/.gitignore +0 -0
  16. {libra_toolbox-0.8 → libra_toolbox-0.9}/.readthedocs.yaml +0 -0
  17. {libra_toolbox-0.8 → libra_toolbox-0.9}/LICENSE +0 -0
  18. {libra_toolbox-0.8 → libra_toolbox-0.9}/README.md +0 -0
  19. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/Makefile +0 -0
  20. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/_static/css/custom.css +0 -0
  21. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/_static/neutron_spectrum.png +0 -0
  22. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/_static/optimisation.png +0 -0
  23. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/_static/prt.png +0 -0
  24. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/_static/tritium_model.png +0 -0
  25. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/conf.py +0 -0
  26. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/diamond_detector.ipynb +0 -0
  27. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/fit_tritium_release.ipynb +0 -0
  28. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/foil_analysis/data.py +0 -0
  29. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/foil_analysis/main.ipynb +0 -0
  30. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/index.rst +0 -0
  31. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/prt.ipynb +0 -0
  32. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/examples/tritium_model.ipynb +0 -0
  33. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/index.rst +0 -0
  34. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/installation.rst +0 -0
  35. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/make.bat +0 -0
  36. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/index.rst +0 -0
  37. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/libra_toolbox.neutron_detection.activation_foils.rst +0 -0
  38. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/libra_toolbox.neutron_detection.diamond.rst +0 -0
  39. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/libra_toolbox.neutron_detection.rst +0 -0
  40. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/libra_toolbox.rst +0 -0
  41. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/modules/libra_toolbox.tritium.rst +0 -0
  42. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/non_tested_examples/example.ipynb +0 -0
  43. {libra_toolbox-0.8 → libra_toolbox-0.9}/docs/requirements.txt +0 -0
  44. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/__init__.py +0 -0
  45. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/__init__.py +0 -0
  46. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/__init__.py +0 -0
  47. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/calculations.py +0 -0
  48. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/calibration.py +0 -0
  49. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/explicit.py +0 -0
  50. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/activation_foils/settings.py +0 -0
  51. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/diamond/__init__.py +0 -0
  52. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/diamond/process_data.py +0 -0
  53. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutron_detection/diamond/prt.py +0 -0
  54. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutronics/A325_generator_diamond.h5 +0 -0
  55. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/neutronics/neutron_source.py +0 -0
  56. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/tritium/__init__.py +0 -0
  57. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/tritium/lsc_measurements.py +0 -0
  58. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/tritium/model.py +0 -0
  59. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox/tritium/plotting.py +0 -0
  60. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox.egg-info/dependency_links.txt +0 -0
  61. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox.egg-info/requires.txt +0 -0
  62. {libra_toolbox-0.8 → libra_toolbox-0.9}/libra_toolbox.egg-info/top_level.txt +0 -0
  63. {libra_toolbox-0.8 → libra_toolbox-0.9}/pyproject.toml +0 -0
  64. {libra_toolbox-0.8 → libra_toolbox-0.9}/setup.cfg +0 -0
  65. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement/data/Data_CH1@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2.csv +0 -0
  66. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement/data/Data_CH1@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2_1.csv +0 -0
  67. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement/data/Hcompass_Co60_20241107.root +0 -0
  68. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement/run.info +0 -0
  69. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement_no_root/data/Data_CH1@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2.csv +0 -0
  70. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement_no_root/data/Data_CH1@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2_1.csv +0 -0
  71. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/complete_measurement_no_root/run.info +0 -0
  72. {libra_toolbox-0.8/test/neutron_detection/compass_test_data/events → libra_toolbox-0.9/test/neutron_detection/compass_test_data/events/no_waveforms}/Data_CH15@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2.csv +0 -0
  73. {libra_toolbox-0.8/test/neutron_detection/compass_test_data/events → libra_toolbox-0.9/test/neutron_detection/compass_test_data/events/no_waveforms}/Data_CH5@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2.csv +0 -0
  74. {libra_toolbox-0.8/test/neutron_detection/compass_test_data/events → libra_toolbox-0.9/test/neutron_detection/compass_test_data/events/no_waveforms}/Data_CH5@V1725_292_Co60_0_872uCi_19Mar2014_250318_run2_1.csv +0 -0
  75. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/times/Hcompass_Co60_20241107.root +0 -0
  76. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/compass_test_data/times/Hcompass_Zirconium_20250319.root +0 -0
  77. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/test_diamond.py +0 -0
  78. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutron_detection/test_prt.py +0 -0
  79. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutronics/test_neutron_source.py +0 -0
  80. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/neutronics/test_vault.py +0 -0
  81. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/TEST_CSV.csv +0 -0
  82. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_conversion.py +0 -0
  83. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_libra_run_samples.py +0 -0
  84. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_libra_samples.py +0 -0
  85. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_lsc_file_with_labels.csv +0 -0
  86. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_lsc_reader.py +0 -0
  87. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_lsc_samples.py +0 -0
  88. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_mass_conservation.py +0 -0
  89. {libra_toolbox-0.8 → libra_toolbox-0.9}/test/tritium/test_plotting.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libra-toolbox
3
- Version: 0.8
3
+ Version: 0.9
4
4
  Summary: Design and analysis tools for LIBRA project
5
5
  Author-email: Remi Delaporte-Mathurin <remidm@mit.edu>
6
6
  License: MIT License
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.8'
21
- __version_tuple__ = version_tuple = (0, 8)
20
+ __version__ = version = '0.9'
21
+ __version_tuple__ = version_tuple = (0, 9)
@@ -938,26 +938,50 @@ def get_events(directory: str) -> Tuple[Dict[int, np.ndarray], Dict[int, np.ndar
938
938
  time_values[ch] = np.empty(0)
939
939
  energy_values[ch] = np.empty(0)
940
940
  for i, filename in enumerate(data_filenames[ch]):
941
+ print(f'Processing File {i}')
942
+
943
+ csv_file_path = os.path.join(directory, filename)
941
944
 
942
945
  # only the first file has a header
943
946
  if i == 0:
944
- header = 0
947
+ # determine the column names
948
+ #
949
+ # Typically, setting the header argument to 1
950
+ # would normally work, but on some CoMPASS csv
951
+ # files, specifically those with waveform data,
952
+ # the column header has far fewer entries
953
+ # than the number of columns in the csv file.
954
+ # This is due to the "SAMPLES" column, which
955
+ # contains the waveform data actually being made
956
+ # up of the 7th-nth column of an n column csv file.
957
+ #
958
+ # So to mitigate this, we will read in the header
959
+ # manually and determine which column of
960
+ # the dataset to read in.
961
+ first_row_df = pd.read_csv(csv_file_path,
962
+ delimiter=";",
963
+ header=None,
964
+ nrows=1)
965
+ column_names = first_row_df.to_numpy()[0]
966
+ # Determine which column applies to time and energy
967
+ time_col = np.where(column_names=="TIMETAG")[0][0]
968
+ energy_col = np.where(column_names=="ENERGY")[0][0]
969
+ # First csv file has header, so skip it
970
+ # because we already read it in
971
+ skiprows=1
945
972
  else:
946
- header = None
947
-
948
- csv_file_path = os.path.join(directory, filename)
973
+ # For subsequent csv files, don't skip any rows
974
+ # as there won't be any header
975
+ skiprows=0
949
976
 
950
- df = pd.read_csv(csv_file_path, delimiter=";", header=header)
951
977
 
952
- # read the header and store in names
953
- if i == 0:
954
- names = df.columns.values
955
- else:
956
- # apply the column names if not the first file
957
- df.columns = names
978
+ df = pd.read_csv(csv_file_path,
979
+ delimiter=";",
980
+ header=None,
981
+ skiprows=skiprows)
958
982
 
959
- time_data = df["TIMETAG"].to_numpy()
960
- energy_data = df["ENERGY"].to_numpy()
983
+ time_data = df[time_col].to_numpy()
984
+ energy_data = df[energy_col].to_numpy()
961
985
 
962
986
  # Extract and append the energy data to the list
963
987
  time_values[ch] = np.concatenate([time_values[ch], time_data])
@@ -1,2 +1,3 @@
1
1
  from .neutron_source import *
2
2
  from .vault import *
3
+ from . import materials
@@ -0,0 +1,312 @@
1
+ import openmc
2
+
3
+
4
+ def get_exp_cllif_density(temp, LiCl_frac=0.695):
5
+ """Calculates density of ClLiF [g/cc] from temperature in Celsius
6
+ and molar concentration of LiCl. Valid for 660 C - 1000 C.
7
+ Source:
8
+ G. J. Janz, R. P. T. Tomkins, C. B. Allen;
9
+ Molten Salts: Volume 4, Part 4
10
+ Mixed Halide Melts Electrical Conductance, Density, Viscosity, and Surface Tension Data.
11
+ J. Phys. Chem. Ref. Data 1 January 1979; 8 (1): 125–302.
12
+ https://doi.org/10.1063/1.555590
13
+ """
14
+ temp = temp + 273.15 # Convert temperature from Celsius to Kelvin
15
+ C = LiCl_frac * 100 # Convert molar concentration to molar percent
16
+
17
+ a = 2.25621
18
+ b = -8.20475e-3
19
+ c = -4.09235e-4
20
+ d = 6.37250e-5
21
+ e = -2.52846e-7
22
+ f = 8.73570e-9
23
+ g = -5.11184e-10
24
+
25
+ rho = a + b * C + c * temp + d * C**2 + e * C**3 + f * temp * C**2 + g * C * temp**2
26
+
27
+ return rho
28
+
29
+
30
+ # Define Materials
31
+ # Source: PNNL Materials Compendium April 2021
32
+ # PNNL-15870, Rev. 2
33
+ Inconel625 = openmc.Material(name="Inconel 625")
34
+ Inconel625.set_density("g/cm3", 8.44)
35
+ Inconel625.add_element("C", 0.000990, "wo")
36
+ Inconel625.add_element("Al", 0.003960, "wo")
37
+ Inconel625.add_element("Si", 0.004950, "wo")
38
+ Inconel625.add_element("P", 0.000148, "wo")
39
+ Inconel625.add_element("S", 0.000148, "wo")
40
+ Inconel625.add_element("Ti", 0.003960, "wo")
41
+ Inconel625.add_element("Cr", 0.215000, "wo")
42
+ Inconel625.add_element("Mn", 0.004950, "wo")
43
+ Inconel625.add_element("Fe", 0.049495, "wo")
44
+ Inconel625.add_element("Co", 0.009899, "wo")
45
+ Inconel625.add_element("Ni", 0.580000, "wo")
46
+ Inconel625.add_element("Nb", 0.036500, "wo")
47
+ Inconel625.add_element("Mo", 0.090000, "wo")
48
+
49
+ # alumina insulation
50
+ # data from https://precision-ceramics.com/materials/alumina/
51
+ Alumina = openmc.Material(name="Alumina insulation")
52
+ Alumina.add_element("O", 0.6, "ao")
53
+ Alumina.add_element("Al", 0.4, "ao")
54
+ Alumina.set_density("g/cm3", 3.98)
55
+
56
+ # epoxy
57
+ Epoxy = openmc.Material(name="Epoxy")
58
+ Epoxy.add_element("C", 0.70, "wo")
59
+ Epoxy.add_element("H", 0.08, "wo")
60
+ Epoxy.add_element("O", 0.15, "wo")
61
+ Epoxy.add_element("N", 0.07, "wo")
62
+ Epoxy.set_density("g/cm3", 1.2)
63
+
64
+ # helium @5psig
65
+ pressure = 34473.8 # Pa ~ 5 psig
66
+ temperature = 300 # K
67
+ R_he = 2077 # J/(kg*K)
68
+ density = pressure / (R_he * temperature) # in kg/cm^3
69
+ density *= 1 / 1000 # in g/cm^3
70
+ Helium = openmc.Material(name="Helium")
71
+ Helium.add_element("He", 1.0, "ao")
72
+ Helium.set_density("g/cm3", density)
73
+
74
+ # PbLi - eutectic - natural - pure
75
+ Pbli = openmc.Material(name="pbli")
76
+ Pbli.add_element("Pb", 84.2, "ao")
77
+ Pbli.add_element("Li", 15.2, "ao")
78
+ Pbli.set_density("g/cm3", 11)
79
+
80
+ # lif-licl - eutectic - natural - pure
81
+ Cllif = openmc.Material(name="ClLiF")
82
+ LiCl_frac = 0.695 # at.fr.
83
+
84
+ Cllif.add_element("F", 0.5 * (1 - LiCl_frac), "ao")
85
+ Cllif.add_element("Li", 1.0, "ao")
86
+ Cllif.add_element("Cl", 0.5 * LiCl_frac, "ao")
87
+ Cllif.set_density("g/cm3", get_exp_cllif_density(650)) # 69.5 at. % LiCL at 650 C
88
+
89
+ # lif-licl - eutectic - natural - EuF3 spiced
90
+ Spicyclif = openmc.Material(name="spicyclif")
91
+ Spicyclif.add_element("F", 0.15935, "wo")
92
+ Spicyclif.add_element("Li", 0.17857, "wo")
93
+ Spicyclif.add_element("Cl", 0.6340, "wo")
94
+ Spicyclif.add_element("Eu", 0.0279, "wo")
95
+
96
+ # FLiNaK - eutectic - natural - pure
97
+ Flinak = openmc.Material(name="flinak")
98
+ Flinak.add_element("F", 50, "ao")
99
+ Flinak.add_element("Li", 23.25, "ao")
100
+ Flinak.add_element("Na", 5.75, "ao")
101
+ Flinak.add_element("K", 21, "ao")
102
+ Flinak.set_density("g/cm3", 2.020)
103
+
104
+
105
+ # Aluminum : 2.6989 g/cm3
106
+ Aluminum = openmc.Material()
107
+ Aluminum.set_density("g/cm3", 2.6989)
108
+ Aluminum.add_nuclide("Al27", 1.0, "ao")
109
+
110
+ # Name: Air
111
+ # Density : 0.001205 g/cm3
112
+ # Reference: None
113
+ # Describes: All atmospheric, non-object chambers
114
+ Air = openmc.Material(name="Air")
115
+ Air.set_density("g/cm3", 0.001205)
116
+ Air.add_element("C", 0.00015, "ao")
117
+ Air.add_nuclide("N14", 0.784431, "ao")
118
+ Air.add_nuclide("O16", 0.210748, "ao")
119
+ Air.add_nuclide("Ar40", 0.004671, "ao")
120
+
121
+ # Name: Portland concrete
122
+ # Density: 2.3 g/cm3
123
+ # Reference: PNNL Report 15870 (Rev. 1)
124
+ # Describes: facility foundation, floors, walls
125
+ Concrete = openmc.Material()
126
+ Concrete.set_density("g/cm3", 2.3)
127
+ Concrete.add_nuclide("H1", 0.168759, "ao")
128
+ Concrete.add_element("C", 0.001416, "ao")
129
+ Concrete.add_nuclide("O16", 0.562524, "ao")
130
+ Concrete.add_nuclide("Na23", 0.011838, "ao")
131
+ Concrete.add_element("Mg", 0.0014, "ao")
132
+ Concrete.add_nuclide("Al27", 0.021354, "ao")
133
+ Concrete.add_element("Si", 0.204115, "ao")
134
+ Concrete.add_element("K", 0.005656, "ao")
135
+ Concrete.add_element("Ca", 0.018674, "ao")
136
+ Concrete.add_element("Fe", 0.004264, "ao")
137
+
138
+ # Name: Portland iron concrete
139
+ # Density: 3.8 g/cm3 as roughly measured using scale and assuming rectangular prism
140
+ # Reference: PNNL Report 15870 (Rev. 1)
141
+ # Describes: Potential new walls, shielding doors
142
+ IronConcrete = openmc.Material()
143
+ IronConcrete.set_density("g/cm3", 3.8)
144
+ IronConcrete.add_nuclide("H1", 0.135585, "ao")
145
+ IronConcrete.add_nuclide("O16", 0.150644, "ao")
146
+ IronConcrete.add_element("Mg", 0.002215, "ao")
147
+ IronConcrete.add_nuclide("Al27", 0.005065, "ao")
148
+ IronConcrete.add_element("Si", 0.013418, "ao")
149
+ IronConcrete.add_element("S", 0.000646, "ao")
150
+ IronConcrete.add_element("Ca", 0.040919, "ao")
151
+ IronConcrete.add_nuclide("Mn55", 0.002638, "ao")
152
+ IronConcrete.add_element("Fe", 0.648869, "ao")
153
+
154
+ #
155
+ # Lead : 11.34 g/cm3
156
+ Lead = openmc.Material()
157
+ Lead.set_density("g/cm3", 11.34)
158
+ Lead.add_nuclide("Pb204", 0.014, "ao")
159
+ Lead.add_nuclide("Pb206", 0.241, "ao")
160
+ Lead.add_nuclide("Pb207", 0.221, "ao")
161
+ Lead.add_nuclide("Pb208", 0.524, "ao")
162
+
163
+ # Name: Borated Polyethylene (5% B in via B4C additive)
164
+ # Density: 0.95 g/cm3
165
+ # Reference: PNNL Report 15870 (Rev. 1) but revised to make it 5 wt.% B
166
+ # Describes: General purpose neutron shielding
167
+ BPE = openmc.Material()
168
+ BPE.set_density("g/cm3", 0.95)
169
+ BPE.add_nuclide("H1", 0.1345, "wo")
170
+ BPE.add_element("B", 0.0500, "wo")
171
+ BPE.add_element("C", 0.8155, "wo")
172
+
173
+ # High Density Polyethylene
174
+ # Reference: PNNL Report 15870 (Rev. 1)
175
+ HDPE = openmc.Material(name="HDPE")
176
+ HDPE.set_density("g/cm3", 0.95)
177
+ HDPE.add_element("H", 0.143724, "wo")
178
+ HDPE.add_element("C", 0.856276, "wo")
179
+
180
+ # Soil material taken from PNNL Materials Compendium for Earth, U.S. Average
181
+ Soil = openmc.Material(name="Soil")
182
+ Soil.set_density("g/cm3", 1.52)
183
+ Soil.add_element("O", 0.670604, percent_type="ao")
184
+ Soil.add_element("Na", 0.005578, percent_type="ao")
185
+ Soil.add_element("Mg", 0.011432, percent_type="ao")
186
+ Soil.add_element("Al", 0.053073, percent_type="ao")
187
+ Soil.add_element("Si", 0.201665, percent_type="ao")
188
+ Soil.add_element("K", 0.007653, percent_type="ao")
189
+ Soil.add_element("Ca", 0.026664, percent_type="ao")
190
+ Soil.add_element("Ti", 0.002009, percent_type="ao")
191
+ Soil.add_element("Mn", 0.000272, percent_type="ao")
192
+ Soil.add_element("Fe", 0.021050, percent_type="ao")
193
+
194
+ # Brick material taken from "Brick, Common Silica" from the PNNL Materials Compendium
195
+ # PNNL-15870, Rev. 2
196
+ Brick = openmc.Material(name="Brick")
197
+ Brick.set_density("g/cm3", 1.8)
198
+ Brick.add_element("O", 0.663427, percent_type="ao")
199
+ Brick.add_element("Al", 0.003747, percent_type="ao")
200
+ Brick.add_element("Si", 0.323229, percent_type="ao")
201
+ Brick.add_element("Ca", 0.007063, percent_type="ao")
202
+ Brick.add_element("Fe", 0.002534, percent_type="ao")
203
+
204
+ RicoRad = openmc.Material(name="RicoRad")
205
+ RicoRad.set_density("g/cm3", 0.945)
206
+ RicoRad.add_element("H", 0.14, percent_type="wo")
207
+ RicoRad.add_element("C", 0.84, percent_type="wo")
208
+ RicoRad.add_element("B", 0.02, percent_type="wo")
209
+
210
+ # LIBRA Materials
211
+ Steel = openmc.Material(name="Steel")
212
+ Steel.add_element("C", 0.005, "wo")
213
+ Steel.add_element("Fe", 0.995, "wo")
214
+ Steel.set_density("g/cm3", 7.82)
215
+
216
+ # Stainless Steel 304 from PNNL Materials Compendium (PNNL-15870 Rev2)
217
+ SS304 = openmc.Material(name="Stainless Steel 304")
218
+ # SS304.temperature = 700 + 273
219
+ SS304.add_element("C", 0.000800, "wo")
220
+ SS304.add_element("Mn", 0.020000, "wo")
221
+ SS304.add_element("P", 0.000450, "wo")
222
+ SS304.add_element("S", 0.000300, "wo")
223
+ SS304.add_element("Si", 0.010000, "wo")
224
+ SS304.add_element("Cr", 0.190000, "wo")
225
+ SS304.add_element("Ni", 0.095000, "wo")
226
+ SS304.add_element("Fe", 0.683450, "wo")
227
+ SS304.set_density("g/cm3", 8.00)
228
+
229
+ # Using Microtherm with 1 a% Al2O3, 27 a% ZrO2, and 72 a% SiO2
230
+ # https://www.foundryservice.com/product/microporous-silica-insulating-boards-mintherm-microtherm-1925of-grades/
231
+ Firebrick = openmc.Material(name="Firebrick")
232
+ # Estimate average temperature of Firebrick to be around 300 C
233
+ # Firebrick.temperature = 273 + 300
234
+ Firebrick.add_element("Al", 0.004, "ao")
235
+ Firebrick.add_element("O", 0.666, "ao")
236
+ Firebrick.add_element("Si", 0.240, "ao")
237
+ Firebrick.add_element("Zr", 0.090, "ao")
238
+ Firebrick.set_density("g/cm3", 0.30)
239
+
240
+ # Using 2:1 atom ratio of LiF to BeF2, similar to values in
241
+ # Seifried, Jeffrey E., et al. ‘A General Approach for Determination of
242
+ # Acceptable FLiBe Impurity Concentrations in Fluoride-Salt Cooled High
243
+ # Temperature Reactors (FHRs)’. Nuclear Engineering and Design, vol. 343, 2019,
244
+ # pp. 85–95, https://doi.org10.1016/j.nucengdes.2018.09.038.
245
+ # Also using natural lithium enrichment (~7.5 a% Li6)
246
+ Flibe_nat = openmc.Material(name="Flibe_nat")
247
+ # Flibe_nat.temperature = 700 + 273
248
+ Flibe_nat.add_element("Be", 0.142857, "ao")
249
+ Flibe_nat.add_nuclide("Li6", 0.021685, "ao")
250
+ Flibe_nat.add_nuclide("Li7", 0.264029, "ao")
251
+ Flibe_nat.add_element("F", 0.571429, "ao")
252
+ Flibe_nat.set_density("g/cm3", 1.94)
253
+
254
+ Copper = openmc.Material(name="Copper")
255
+ # Estimate copper temperature to be around 100 C
256
+ # Copper.temperature = 100 + 273
257
+ Copper.add_element("Cu", 1.0, "ao")
258
+ Copper.set_density("g/cm3", 8.96)
259
+
260
+ Beryllium = openmc.Material(name="Beryllium")
261
+ # Estimate Be temperature to be around 100 C
262
+ # Be.temperature = 100 + 273
263
+ Beryllium.add_element("Be", 1.0, "ao")
264
+ Beryllium.set_density("g/cm3", 1.848)
265
+
266
+ # Heater
267
+ Heater_mat = openmc.Material(name="heater")
268
+ Heater_mat.add_element("C", 0.000990, "wo")
269
+ Heater_mat.add_element("Al", 0.003960, "wo")
270
+ Heater_mat.add_element("Si", 0.004950, "wo")
271
+ Heater_mat.add_element("P", 0.000148, "wo")
272
+ Heater_mat.add_element("S", 0.000148, "wo")
273
+ Heater_mat.add_element("Ti", 0.003960, "wo")
274
+ Heater_mat.add_element("Cr", 0.215000, "wo")
275
+ Heater_mat.add_element("Mn", 0.004950, "wo")
276
+ Heater_mat.add_element("Fe", 0.049495, "wo")
277
+ Heater_mat.add_element("Co", 0.009899, "wo")
278
+ Heater_mat.add_element("Ni", 0.580000, "wo")
279
+ Heater_mat.add_element("Nb", 0.036500, "wo")
280
+ Heater_mat.add_element("Mo", 0.090000, "wo")
281
+ Heater_mat.set_density("g/cm3", 2.44)
282
+
283
+ # Lithium-Lead
284
+ # Composition from certificate of analysis provided with Lithium-Lead from Camex
285
+ Lithium_lead = openmc.Material(name="Lithium Lead")
286
+ Lithium_lead.add_element("Pb", 0.993479, "wo")
287
+ Lithium_lead.add_element("Li", 0.0064, "wo")
288
+ Lithium_lead.add_element("Tl", 0.00002, "wo")
289
+ Lithium_lead.add_element("Zn", 0.000002, "wo")
290
+ Lithium_lead.add_element("Sn", 0.000002, "wo")
291
+ Lithium_lead.add_element("Sb", 0.000002, "wo")
292
+ Lithium_lead.add_element("Ni", 0.000001, "wo")
293
+ Lithium_lead.add_element("Cu", 0.000002, "wo")
294
+ Lithium_lead.add_element("Cd", 0.000002, "wo")
295
+ Lithium_lead.add_element("Bi", 0.00008, "wo")
296
+ Lithium_lead.add_element("As", 0.000002, "wo")
297
+ Lithium_lead.add_element("Ag", 0.000008, "wo")
298
+ Lithium_lead.set_density("g/cm3", 9.10411395) # Density at 600C
299
+
300
+ # 316L Stainless Steel
301
+ # Data from https://www.thyssenkrupp-materials.co.uk/stainless-steel-316l-14404.html
302
+ SS316L = openmc.Material(name="316L Steel")
303
+ SS316L.add_element("C", 0.0003, "wo")
304
+ SS316L.add_element("Si", 0.01, "wo")
305
+ SS316L.add_element("Mn", 0.02, "wo")
306
+ SS316L.add_element("P", 0.00045, "wo")
307
+ SS316L.add_element("S", 0.000151, "wo")
308
+ SS316L.add_element("Cr", 0.175, "wo")
309
+ SS316L.add_element("Ni", 0.115, "wo")
310
+ SS316L.add_element("N", 0.001, "wo")
311
+ SS316L.add_element("Mo", 0.00225, "wo")
312
+ SS316L.add_element("Fe", 0.655599, "wo")