def test_get_nucs_u(self): mat_data = MaterialData() nuclides = mat_data.get_nucs(92000) self.assertEqual(len(nuclides), 3) self.assertEqual(92234 in nuclides, True) self.assertEqual(92235 in nuclides, True) self.assertEqual(92238 in nuclides, True)
def test_aa_zaid(self): mat_data = MaterialData() aa = mat_data.get_aa(1001) self.assertEqual(aa, 1) aa = mat_data.get_aa(26000) self.assertEqual(aa, 0) aa = mat_data.get_aa(92235) self.assertEqual(aa, 235)
def test_zz_zaid(self): mat_data = MaterialData() zz = mat_data.get_zz(1001) self.assertEqual(zz, 1) zz = mat_data.get_zz(26000) self.assertEqual(zz, 26) zz = mat_data.get_zz(92000) self.assertEqual(zz, 92)
def test_get_nucs_fe(self): mat_data = MaterialData() nuclides = mat_data.get_nucs(26000) self.assertEqual(len(nuclides), 4) self.assertEqual(26054 in nuclides, True) self.assertEqual(26056 in nuclides, True) self.assertEqual(26057 in nuclides, True) self.assertEqual(26058 in nuclides, True)
def test_atomic_mass_calc(self): mat_data = MaterialData() atomic_mass = mat_data.atomic_mass(1000) self.assertEqual(atomic_mass, 1.0079407540557772) atomic_mass = mat_data.atomic_mass(2000) self.assertEqual(atomic_mass, 4.002601932120928) atomic_mass = mat_data.atomic_mass(26000) self.assertEqual(atomic_mass, 55.84514442998594)
def test_get_nucs(self): mat_data = MaterialData() nuclides = mat_data.get_nucs(1000) self.assertEqual(len(nuclides), 2) self.assertEqual(1001 in nuclides, True) self.assertEqual(1002 in nuclides, True)
class MaterialCard(Card): """ A fully defined material card should have a name, a material number, a density, a composition dictionary, and optionally a xsid dictionary. MCNP being an exception, most MC codes define the density of a material belonging to the material definition as opposed to a given cell. This approach is taken here for maximal compability amongst codes. """ material_name = "" material_number = 0 composition_dictionary = {} xsid_dictionary = {} density = 0 mat_data = 0 material_colour = 0 # constructor def __init__(self, material_number=0, card_string=""): Card.__init__(self, card_string) self.material_number = material_number self.mat_data = MaterialData() def __str__(self): string = "Material: " + self.material_name + "\n" string += "Material num: " + str(self.material_number) + "\n" string += "Density: " + str(self.density) + "\n" string += "Colour: " + str(self.material_colour) + "\n" string += "Composition \n" for item in self.composition_dictionary.keys(): string += item + " " + str( self.composition_dictionary[item]) + "\n" return string # normalise the material composition such that the sum is 1.0 def normalise(self): sum = 0. # get the sum for nuc in self.composition_dictionary: sum += float(self.composition_dictionary[nuc]) # dont divide by -ve number ! mass->atom sum = abs(sum) for nuc in self.composition_dictionary: self.composition_dictionary[nuc] = float( self.composition_dictionary[nuc]) / sum # all done return # explode elements loop through the dictionary and any material that has elements # and explode it into its nuclidewise definition def explode_elements(self): keys_to_remove = [] new_nuclides = {} for nuc in self.composition_dictionary: if int(nuc) % 1000 == 0: keys_to_remove.append(nuc) nuclides = self.mat_data.get_nucs(int(nuc)) # loop over the nuclides for nuclide in nuclides: if self.composition_dictionary[ nuc] < 0: # if its mass fraction then new_nuclides[str(nuclide)] = self.composition_dictionary[nuc] * \ self.mat_data.natural_abund_map[nuclide*10000] \ / 100 * self.mat_data.atomic_mass(int(nuc))/self.mat_data.get_aa(nuclide) else: #its atom fraction pure multiplication new_nuclides[str( nuclide)] = self.composition_dictionary[ nuc] * self.mat_data.natural_abund_map[ nuclide * 10000] / 100 #print(self.composition_dictionary) for key in keys_to_remove: del self.composition_dictionary[key] for key in new_nuclides.keys(): self.composition_dictionary[key] = new_nuclides[key] self.xsid_dictionary[key] = ""
def __init__(self, material_number=0, card_string=""): Card.__init__(self, card_string) self.material_number = material_number self.mat_data = MaterialData()