fdbermrock.py
Go to the documentation of this file.
1 from atomicdata import *
2 from util import *
3 
4 # FD side shields
5 
6 compositions = {
7  'SiO2': { 'Si' : 1, 'O': 2 },
8  'Al2O3': { 'Al' : 2, 'O': 3 },
9  'K2O': { 'K' : 2, 'O': 1 },
10  'Na2O': { 'Na' : 2, 'O': 1 },
11  'CaO' : { 'Ca' : 1, 'O': 1 },
12  'FeO': { 'Fe' : 1, 'O': 1 },
13  'Fe2O3': { 'Fe' : 2, 'O': 3 },
14  'MgO': { 'Mg' : 1, 'O': 1 },
15  'TiO2': { 'Ti' : 1, 'O': 2 },
16  'P2O5': { 'P' : 2, 'O': 5 },
17  'MnO': { 'Mn' : 1, 'O': 1 },
18  'water': { 'H' : 2, 'O': 1 },
19 }
20 
21 matrix_density = 2.81 # doc-637 measurement of NOvA granite
22 water_density = 1.00
23 
24 # doc-5348
25 void_volume_fraction = 0.268
26 
27 rock_volume_fraction = 1 - void_volume_fraction
28 
29 # Should be mostly dry since it's a triangle shape above grade, right?
30 # So 25%, to pick a semi-random reasonable number. But add 13% to
31 # roughly account for snow cover as well without having to explicitly
32 # simulate snow on the berm. (Mean 18" of snow over the year, divided by
33 # 2 to make it water, as a fraction of mean berm height.)
34 water_volume_fraction = void_volume_fraction * (0.25 + 0.13)
35 
36 air_volume_fraction = void_volume_fraction - water_volume_fraction
37 
38 water_mass_fraction = water_volume_fraction * water_density /(
39 water_volume_fraction*water_density + rock_volume_fraction*matrix_density)
40 
41 # Mass of air in the voids is neglected
42 rock_mass_fraction = 1 - water_mass_fraction
43 
44 density = (matrix_density * rock_volume_fraction
45  + water_density * water_volume_fraction)
46 
47 print('<D value="{0:.2f}" unit="g/cm3"/>'.format(density))
48 
49 fractions = {
50  'water': water_mass_fraction,
51 
52  # From Wikipedia "Granite": Mineralogy: Chemical composition on 2017-11-27.
53  # This is the worldwide average for dry granite.
54 
55  'SiO2': 0.7204 * rock_mass_fraction,
56  'Al2O3': 0.1442 * rock_mass_fraction,
57  'K2O': 0.0412 * rock_mass_fraction,
58  'Na2O': 0.0369 * rock_mass_fraction,
59  'CaO' : 0.0182 * rock_mass_fraction,
60  'FeO': 0.0168 * rock_mass_fraction,
61  'Fe2O3': 0.0122 * rock_mass_fraction,
62  # Omit to avoid needing magnesium, which isn't in the path_length_list
63  # file, and doesn't seem worth adding at ~0.4% with an unremarkable
64  # properties: near-average Z/A and neutron capture cross sections.
65  #'MgO': 0.0071,
66 
67  'TiO2': 0.0030 * rock_mass_fraction,
68  'P2O5': 0.0012 * rock_mass_fraction,
69  'MnO': 0.0005 * rock_mass_fraction,
70 }
71 
72 
73 def tot_weight(compos):
74  weight = 0
75  for element, number in compos.items():
76  weight += number * atomic_weight[element]
77  return weight
78 
80  tions = 0
81  for material, fraction in fractions.items():
82  tions += fraction
83  return tions
84 
85 def elem_frac(compos, elem):
86  if elem in compos:
87  return compos[elem] * atomic_weight[elem] / tot_weight(compos)
88  else:
89  return 0
90 
91 def elem_frac_total(elem):
92  frac = 0
93  for material, compos in compositions.items():
94  frac += elem_frac(compos, elem) * fractions[material]
95  return frac / tot_fractions()
96 
98  return make_composition("fdbermrock", fractions, compositions)
bool print
def fdbermrock_composition()
Definition: fdbermrock.py:97
std::string format(const int32_t &value, const int &ndigits=8)
Definition: HexUtils.cpp:14
def tot_weight(compos)
Definition: fdbermrock.py:73
def elem_frac_total(elem)
Definition: fdbermrock.py:91
def elem_frac(compos, elem)
Definition: fdbermrock.py:85
def tot_fractions()
Definition: fdbermrock.py:79
def make_composition(name, fractions, compositions)
Definition: util.py:46