Source code for mcnpy.materials

from abc import ABC
from .wrap import wrappers, overrides
from .mixin import IDManagerMixin
from metapy.zaid_helper import element_to_zaid, zaid_to_element, library_check

globals().update({name+'Base': wrapper for name, wrapper in wrappers.items()})

[docs]class MaterialSetting(ABC): """ """
[docs]class Material(IDManagerMixin, MaterialBase): """ A representation of the model object `Material`. Parameters ---------- name : int Name for `Material`. nuclides : iterable of mcnpy.Nuclide Nuclides for `Material`. gas : int Gas for `Material`. electron_substep_count : int ElectronSubstepCount for `Material`. heavy_ion_substep_count : int HeavyIonSubstepCount for `Material`. neutron_library : mcnpy.Library NeutronLibrary for `Material`. photoatomic_library : mcnpy.Library PhotoatomicLibrary for `Material`. photonuclear_library : mcnpy.Library PhotonuclearLibrary for `Material`. electron_library : mcnpy.Library ElectronLibrary for `Material`. proton_library : mcnpy.Library ProtonLibrary for `Material`. conductor : float Conductor for `Material`. a : float A for `Material`. b : float B for `Material`. c : float C for `Material`. d : float D for `Material`. b1 : float B1 for `Material`. c1 : float C1 for `Material`. b2 : float B2 for `Material`. c2 : float C2 for `Material`. b3 : float B3 for `Material`. c3 : float C3 for `Material`. comment : str Comment for `Material`. """ next_id = 1 used_ids = set() def _init(self, name=None, nuclides=[], unit=None, comment=None, **kwargs): try: self.name = name self.nuclides = nuclides except: self.name = None self.nuclides = name.nuclides(Nuclide) if comment is not None: self.comment = comment self._unit = unit self._density = None self._density_unit = None self._s_alpha_beta = None for k in kwargs: setattr(self, k.lower(), kwargs[k]) def __add__(self, nuclide): #new = Material(self) self += nuclide return self def __iadd__(self, nuclide): #if self.unit is None: if isinstance(nuclide, list): self.nuclides.extend(nuclide) elif isinstance(nuclide, Material): self.nuclides.extend(nuclide.nuclides) else: self.nuclides.addUnique(nuclide._e_object) """else: if isinstance(nuclide, list): for i in nuclide: i.unit = self.unit self.nuclides.addUnique(i._e_object) self.nuclides.extend(nuclide) elif isinstance(nuclide, Material): for i in nuclide.nuclides: i.unit = self.unit self.nuclides.addUnique(i._e_object) else: nuclide.unit = self.unit self.nuclides.addUnique(nuclide._e_object)""" return self def __sub__(self, nuclide): new = Material(self) new -= nuclide return new def __isub__(self, nuclide): if isinstance(nuclide, list): for i in nuclide: self.nuclides.remove(i) else: self.nuclides.remove(nuclide) return self def __mul__(self, density): self.density = density self.density_unit = 'G_CM3' return self def __matmul__(self, density): self.density = density self.density_unit = 'A_BCM' return self """@property def name(self): if self._e_object.getName() is None: return None else: return int(self._e_object.getName()) @name.setter def name(self, name): self._e_object.setName(str(name))""" @property def s_alpha_beta(self): return self._s_alpha_beta @s_alpha_beta.setter def s_alpha_beta(self, libraries): try: self._s_alpha_beta = Sab(self, libraries) except: self._s_alpha_beta = Sab(self, [libraries]) @property def unit(self): if self.nuclides is not None: if len(self.nuclides) > 0: return self.nuclides[0].unit else: return self._unit @unit.setter def unit(self, unit): #self.unit = unit if self.unit is not None: for nuclide in self.nuclides: nuclide.unit = unit @property def density(self): """ """ return self._density @density.setter def density(self, density): if density is not None: self._density = abs(density) if density < 0: self.density_unit = 'G_CM3' else: self.density_unit = 'A_BCM' @property def _alt_densities(self): """""" return self._stored_density @_alt_densities.setter def _alt_densities(self): """""" @property def density_unit(self): """ """ return self._density_unit @density_unit.setter def density_unit(self, unit): self._density_unit = unit @property def nuclides(self): return self._e_object.getNuclides() @nuclides.setter def nuclides(self, nuclides): _nucides = self._e_object.getNuclides() del _nucides[:] if isinstance(nuclides, (list, tuple)): for i in nuclides: _nucides.addUnique(i) else: try: for i in nuclides.nuclides(): _nucides.addUnique(i) except: _nucides.addUnique(nuclides)
[docs]class Nuclide(NuclideBase): """ A representation of the model object `Nuclide`. Parameters ---------- name : int Name for `Nuclide`. library : mcnpy.Library Library for `Nuclide`. unit : mcnpy.FractionUnit Unit for `Nuclide`. fraction : float Fraction for `Nuclide`. """ def _init(self, name, fraction, unit='ATOM', library=None): self.name = name self.unit = unit self.fraction = fraction if library is not None: self.library = library def __add__(self, other): if isinstance(other, list): new = Material() new.nuclides = [self] + other elif isinstance(other, Material): other.nuclides.addUnique(self._e_object) return other else: new = Material() new.nuclides = [self, other] return new @property def name(self): return zaid_to_element(self._e_object.getName()) @name.setter def name(self, name): self._e_object.setName(element_to_zaid(name)) @property def library(self): return self._e_object.getLibrary() @property def fraction(self): return self._e_object.getFraction() @fraction.setter def fraction(self, fraction): if fraction < 0: self.unit = 'WEIGHT' self._e_object.setFraction(abs(float(fraction))) @library.setter def library(self, lib): if isinstance(lib, Library): self._e_object.setLibrary(library_check(self.name, lib)) elif isinstance(lib, (list, tuple)): self._e_object.setLibrary(library_check(self.name, Library(lib[0], lib[1]))) else: self._e_object.setLibrary(library_check(self.name, Library(lib)))
[docs] def element_name(self): return zaid_to_element(self.name)
def __str__(self): #string = 'ZAID = ' + self.name + ', Fraction = ' + str(self.unit) + str(self.fraction) string = 'Nuclide ' + str(self.name) return string def __repr__(self): return str(self)
[docs]class Library(LibraryBase): """ A representation of the model object `Library`. Parameters ---------- """ def _init(self, library, quantity=None): self.library = library if quantity is not None: self.quantity = quantity def __str__(self): if self.quantity is not None: return self.library + str(self.quantity) else: return str(self.library) @property def library(self): return self._e_object.getLibrary() @library.setter def library(self, lib): if isinstance(lib, str): try: int(lib) self._e_object.setLibrary(lib) except: try: int(lib[:-1]) self._e_object.setLibrary(lib[:-1]) self.quantity = lib[-1] except: self._e_object.setLibrary(lib[:-2]) self.quantity = lib[-2:] else: self._e_object.setLibrary(str(lib))
[docs]class Sab(SabBase, MaterialSetting): """ A representation of the model object `Sab`. Parameters ---------- material : mcnpy.Material Material for `Sab`. libraries : iterable of mcnpy.SabLibrary Libraries for `Sab`. """ def _init(self, material, libraries): self.material = material self.libraries = libraries @property def libraries(self): return self._e_object.getLibraries() @libraries.setter def libraries(self, _libraries): libraries = self._e_object.getLibraries() for lib in _libraries: if isinstance(lib, SabLibrary): libraries.append(lib) elif isinstance(lib, (list, tuple)): libraries.append(SabLibrary(lib[0], lib[1])) else: libraries.append(SabLibrary(lib)) @property def material(self): return self._e_object.getMaterial() @material.setter def material(self, material): self._e_object.setMaterial(material._e_object) material._s_alpha_beta = self
[docs]class SabLibrary(SabLibraryBase): """ A representation of the model object `SabLibrary`. Parameters ---------- nuclide : mcnpy.SabNuclide Nuclide for `SabLibrary`. library : mcnpy.Sablib Library for `SabLibrary`. """ def _init(self, nuclide, library=None): self.nuclide = nuclide if library is not None: self.library = library @property def library(self): return self._e_object.getLibrary() @library.setter def library(self, lib): if isinstance(lib, Sablib): self._e_object.setLibrary(lib) else: self._e_object.setLibrary(Sablib(lib))
[docs]class Sablib(SablibBase): """ A representation of the model object `Sablib`. Parameters ---------- lib : str Lib for `Sablib`. t : str T for `Sablib`. """ def _init(self, lib): self.lib = lib @property def lib(self): if self.t is not None: return self._e_object.getLib() + 't' else: return self._e_object.getLib() @lib.setter def lib(self, _lib): if isinstance(_lib, str) is False: self._e_object.setLib(str(_lib)) else: if _lib[-1].lower() == 't': self._e_object.setLib(_lib[:-1]) self.t = _lib[-1] else: self._e_object.setLib(_lib)
[docs]class NuclideSubstitution(NuclideSubstitutionBase, MaterialSetting): """ A representation of the model object `NuclideSubstitution`. Parameters ---------- material : mcnpy.Material Material for `NuclideSubstitution`. nuclides : iterable of str Nuclides for `NuclideSubstitution`. particles : iterable of mcnpy.Particle Particles for `NuclideSubstitution`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class PhotonuclearNuclideSelection(PhotonuclearNuclideSelectionBase, MaterialSetting): """ A representation of the model object `PhotonuclearNuclideSelection`. Parameters ---------- material : mcnpy.Material Material for `PhotonuclearNuclideSelection`. zaids : iterable of str Zaids for `PhotonuclearNuclideSelection`. particles : iterable of mcnpy.Particle Particles for `PhotonuclearNuclideSelection`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class OnTheFlyDopplerBroadening(OnTheFlyDopplerBroadeningBase, MaterialSetting): """ A representation of the model object `OnTheFlyDopplerBroadening`. Parameters ---------- zaids : iterable of str Zaids for `OnTheFlyDopplerBroadening`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class TotalFission(TotalFissionBase, MaterialSetting): """ A representation of the model object `TotalFission`. Parameters ---------- prompt_only : mcnpy.Boolean PromptOnly for `TotalFission`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class FissionTurnoff(FissionTurnoffBase, MaterialSetting): """ A representation of the model object `FissionTurnoff`. Parameters ---------- options : iterable of str Options for `FissionTurnoff`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class AtomicWeight(AtomicWeightBase, MaterialSetting): """ A representation of the model object `AtomicWeight`. Parameters ---------- nuclides : iterable of str Nuclides for `AtomicWeight`. library : iterable of mcnpy.Library Library for `AtomicWeight`. ratios : iterable of float Ratios for `AtomicWeight`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class CrossSectionFile(CrossSectionFileBase, MaterialSetting): """ A representation of the model object `CrossSectionFile`. Parameters ---------- name : int Name for `CrossSectionFile`. nuclides : mcnpy.Nuclide Nuclides for `CrossSectionFile`. x_s_file : str XSFile for `CrossSectionFile`. entries : iterable of float Entries for `CrossSectionFile`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class Void(VoidBase, MaterialSetting): """ A representation of the model object `Void`. Parameters ---------- cells : iterable of mcnpy.Cell Cells for `Void`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class MultigroupTransport(MultigroupTransportBase, MaterialSetting): """ A representation of the model object `MultigroupTransport`. Parameters ---------- mode : mcnpy.MultigroupTransportMode Mode for `MultigroupTransport`. combined_electron_photon_xsecs : str CombinedElectronPhotonXsecs for `MultigroupTransport`. energy_group_count : int EnergyGroupCount for `MultigroupTransport`. importances : str Importances for `MultigroupTransport`. adjoint_biasing : str AdjointBiasing for `MultigroupTransport`. reference_cell : mcnpy.Cell ReferenceCell for `MultigroupTransport`. weight_window_normalization : float WeightWindowNormalization for `MultigroupTransport`. compression_limit : str CompressionLimit for `MultigroupTransport`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
[docs]class DiscreteReactionCrossSection(DiscreteReactionCrossSectionBase, MaterialSetting): """ A representation of the model object `DiscreteReactionCrossSection`. Parameters ---------- nuclides : iterable of str Nuclides for `DiscreteReactionCrossSection`. library : iterable of mcnpy.Library Library for `DiscreteReactionCrossSection`. """ def _init(self, **kwargs): """ """ for k in kwargs: setattr(self, k.lower(), kwargs[k])
for name, wrapper in overrides.items(): override = globals().get(name, None) if override is not None: overrides[name] = override