montepy.materials module#
Classes:
- class montepy.materials.Materials(objects=None, problem=None)#
Bases:
NumberedDataObjectCollection
A container of multiple
Material
instances.Notes
When items are added to this (and this object is linked to a problem), they will also be added to
montepy.mcnp_problem.MCNP_Problem.data_inputs()
.Notes
For examples see the
NumberedObjectCollection
Examples.- Parameters:
objects (list) – the list of materials to start with if needed
Methods:
add
(obj)Add the given object to this collection.
append
(obj, **kwargs)Appends the given object to the end of this collection.
append_renumber
(obj[, step])Appends the object, but will renumber the object if collision occurs.
check_number
(number)Checks if the number is already in use, and if so raises an error.
clear
()Removes all objects from this collection.
clone
([starting_number, step])Create a new instance of this collection, with all new independent objects with new numbers.
difference
(*others)Return a new collection with elements from collection, that are not in the others.
difference_update
(*others)Update the new collection removing all elements from others.
discard
(obj)Remove the object from the collection if it is present.
extend
(other_list)Extends this collection with another list.
get
(i[, default])Get
i
if possible, or else returndefault
.get_containing_all
(*nuclides[, threshold, ...])Get all materials that contain all of these nuclides.
get_containing_any
(*nuclides[, threshold, ...])Get all materials that contain any of these these nuclides.
intersection
(*others)Return a new collection with all elements in common in collection, and all others.
intersection_update
(*others)Update the collection keeping all elements in common in collection, and all others.
isdisjoint
(other)Test if there are no elements in common between the collection, and other.
issubset
(other)Test whether every element in the collection is in other.
issuperset
(other)Test whether every element in other is in the collection.
items
()Get iterator of the collections (number, object) pairs.
keys
()Get iterator of the collection's numbers.
link_to_problem
(problem)Links the card to the parent problem for this card.
mix
(materials, fractions[, starting_number, ...])Mix the given materials in the provided fractions to create a new material.
next_number
([step])Get the next available number, based on the maximum number.
pop
([pos])Pop the final items off of the collection
remove
(delete)Removes the given object from the collection.
request_number
([start_num, step])Requests a new available number.
symmetric_difference
(other)Return a new collection with elements in either the collection or the other, but not both.
symmetric_difference_update
(other)Update the collection, keeping only elements found in either collection, but not in both.
union
(*others)Return a new collection with all elements from collection, and all others.
update
(*objs)Add the given objects to this collection.
values
()Get iterator of the collection's objects.
Attributes:
The default libraries for this problem defined by
M0
.A generator of the numbers being used.
Returns a shallow copy of the internal objects list.
The starting number to use when an object is cloned.
The step size to use to find a valid number during cloning.
- add(obj: Numbered_MCNP_Object)#
Add the given object to this collection.
- Parameters:
obj (Numbered_MCNP_Object) – The object to add.
- Raises:
TypeError – if the object is of the wrong type.
NumberConflictError – if this object’s number is already in use in the collection.
- append(obj, **kwargs)#
Appends the given object to the end of this collection.
- Parameters:
obj (Numbered_MCNP_Object) – the object to add.
**kwargs – extra arguments that are used internally.
- Raises:
NumberConflictError – if this object has a number that is already in use.
- append_renumber(obj, step=1)#
Appends the object, but will renumber the object if collision occurs.
This behaves like append, except if there is a number collision the object will be renumbered to an available number. The number will be incremented by step until an available number is found.
- Parameters:
obj (Numbered_MCNP_Object) – The MCNP object being added to the collection.
step (int) – the incrementing step to use to find a new number.
- Returns:
the number for the object.
- Return type:
int
- check_number(number)#
Checks if the number is already in use, and if so raises an error.
- Parameters:
number (int) – The number to check.
- Raises:
NumberConflictError – if this number is in use.
- clear()#
Removes all objects from this collection.
- clone(starting_number=None, step=None)#
Create a new instance of this collection, with all new independent objects with new numbers.
This relies mostly on
copy.deepcopy
.Notes
If starting_number, or step are not specified
starting_number()
, andstep()
are used as default values.Added in version 0.5.0.
- Parameters:
starting_number (int) – The starting number to request for a new object numbers.
step (int) – the step size to use to find a new valid number.
- Returns:
a cloned copy of this object.
- Return type:
type(self)
- difference(*others: Self)#
Return a new collection with elements from collection, that are not in the others.
collection - other - ...
Added in version 1.0.0.
- Parameters:
*others (Self) – the other collections to compare to.
- Return type:
Self
- difference_update(*others: Self)#
Update the new collection removing all elements from others.
collection -= other | ...
Added in version 1.0.0.
- Parameters:
*others (Self) – the other collections to compare to.
- discard(obj: Numbered_MCNP_Object)#
Remove the object from the collection if it is present.
Added in version 1.0.0.
- Parameters:
obj (Numbered_MCNP_Object) – the object to remove.
- extend(other_list)#
Extends this collection with another list.
- Parameters:
other_list (list) – the list of objects to add.
- Raises:
NumberConflictError – if these items conflict with existing elements.
- get(i, default=None)#
Get
i
if possible, or else returndefault
.- Parameters:
i (int) – number of the object to get, not it’s location in the internal list
default (object) – value to return if not found
- Return type:
- get_containing_all(*nuclides: montepy.data_inputs.nuclide.Nuclide | montepy.data_inputs.nuclide.Nucleus | montepy.Element | str | int, threshold: float = 0.0, strict: bool = False) Generator[Material] #
Get all materials that contain all of these nuclides.
This uses
contains()
under the hood. See that documentation for more guidance.Examples
One example would to be find all water bearing materials:
import montepy problem = montepy.read_input("foo.imcnp") for mat in problem.materials.get_containing_all("H-1", "O-16", threshold = 0.3): print(mat)
MATERIAL: 1, ['hydrogen', 'oxygen']
Added in version 1.0.0.
- Parameters:
*nuclides (Union[Nuclide, Nucleus, Element, str, int]) – a plurality of nuclides to check for.
threshold (float) – the minimum concentration of a nuclide to be considered. The material components are not first normalized.
strict (bool) – If True this does not let an elemental nuclide match all child isotopes, isomers, nor will an isotope match all isomers, nor will a blank library match all libraries.
- Returns:
A generator of all matching materials
- Return type:
Generator[Material]
- Raises:
TypeError – if any argument is of the wrong type.
ValueError – if the fraction is not positive or zero, or if nuclide cannot be interpreted as a Nuclide.
- get_containing_any(*nuclides: montepy.data_inputs.nuclide.Nuclide | montepy.data_inputs.nuclide.Nucleus | montepy.Element | str | int, threshold: float = 0.0, strict: bool = False) Generator[Material] #
Get all materials that contain any of these these nuclides.
This uses
contains()
under the hood. See that documentation for more guidance.Examples
One example would to be find all water bearing materials:
import montepy problem = montepy.read_input("foo.imcnp") for mat in problem.materials.get_containing_any("H-1", "U-235", threshold = 0.3): print(mat)
MATERIAL: 1, ['hydrogen', 'oxygen']
Added in version 1.0.0.
- Parameters:
*nuclides (Union[Nuclide, Nucleus, Element, str, int]) – a plurality of nuclides to check for.
threshold (float) – the minimum concentration of a nuclide to be considered. The material components are not first normalized.
strict (bool) – If True this does not let an elemental nuclide match all child isotopes, isomers, nor will an isotope match all isomers, nor will a blank library match all libraries.
- Returns:
A generator of all matching materials
- Return type:
Generator[Material]
- Raises:
TypeError – if any argument is of the wrong type.
ValueError – if the fraction is not positive or zero, or if nuclide cannot be interpreted as a Nuclide.
- intersection(*others: Self)#
Return a new collection with all elements in common in collection, and all others.
collection & other & ...
Added in version 1.0.0.
- Parameters:
*others (Self) – the other collections to compare to.
- Return type:
Self
- intersection_update(*others: Self)#
Update the collection keeping all elements in common in collection, and all others.
collection &= other & ...
Added in version 1.0.0.
- Parameters:
*others (Self) – the other collections to compare to.
- isdisjoint(other: Self)#
Test if there are no elements in common between the collection, and other.
Collections are disjoint if and only if their intersection is the empty set.
Added in version 1.0.0.
- Parameters:
other (Self) – the set to compare to.
- Return type:
bool
- issubset(other: Self)#
Test whether every element in the collection is in other.
collection <= other
Added in version 1.0.0.
- Parameters:
other (Self) – the set to compare to.
- Return type:
bool
- issuperset(other: Self)#
Test whether every element in other is in the collection.
collection >= other
Added in version 1.0.0.
- Parameters:
other (Self) – the set to compare to.
- Return type:
bool
- items() Generator[Tuple[int, Numbered_MCNP_Object], None, None] #
Get iterator of the collections (number, object) pairs.
- Return type:
tuple(int, MCNP_Object)
- keys() Generator[int, None, None] #
Get iterator of the collection’s numbers.
- Return type:
int
- link_to_problem(problem)#
Links the card to the parent problem for this card.
This is done so that cards can find links to other objects.
- Parameters:
problem (MCNP_Problem) – The problem to link this card to.
- mix(materials: list[Material], fractions: list[float], starting_number=None, step=None) Material #
Mix the given materials in the provided fractions to create a new material.
All materials must use the same fraction type, either atom fraction or mass fraction. The fractions given to this method are interpreted in that way as well.
This new material will automatically be added to this collection.
Examples
An example way to mix materials is to first create the materials to mix:
import montepy mats = montepy.Materials() h2o = montepy.Material() h2o.number = 1 h2o.add_nuclide("1001.80c", 2.0) h2o.add_nuclide("8016.80c", 1.0) boric_acid = montepy.Material() boric_acid.number = 2 for nuclide, fraction in { "1001.80c": 3.0, "B-10.80c": 1.0 * 0.189, "B-11.80c": 1.0 * 0.796, "O-16.80c": 3.0 }.items(): boric_acid.add_nuclide(nuclide, fraction)
Then to make the material mixture you just need to specify the fractions:
boron_ppm = 10 boric_conc = boron_ppm * 1e-6 borated_water = mats.mix([h2o, boric_acid], [1 - boric_conc, boric_conc])
- Parameters:
materials (list[Material]) – the materials to mix.
fractions (
list
[float
]) – the corresponding fractions for each material in either atom or mass fractions, depending on the materials fraction type.starting_number (Union[int, None]) – the starting number to assign this new material.
step (Union[int, None]) – the step size to take when finding a new number.
- Returns:
a new material with the mixed components of the given materials
- Return type:
- Raises:
TypeError – if invalid objects are given.
ValueError – if the number of elements in the two lists mismatch, or if not all the materials are of the same fraction type, or if a negative starting_number or step are given.
- next_number(step=1)#
Get the next available number, based on the maximum number.
This works by finding the current maximum number, and then adding the stepsize to it.
- Parameters:
step (int) – how much to increase the last number by
- pop(pos=-1)#
Pop the final items off of the collection
- Parameters:
pos (int) – The index of the element to pop from the internal list.
- Returns:
the final elements
- Return type:
- remove(delete)#
Removes the given object from the collection.
- Parameters:
delete (Numbered_MCNP_Object) – the object to delete
- request_number(start_num=None, step=None)#
Requests a new available number.
This method does not “reserve” this number. Objects should be immediately added to avoid possible collisions caused by shifting numbers of other objects in the collection.
Notes
If starting_number, or step are not specified
starting_number()
, andstep()
are used as default values.Changed in version 0.5.0: In 0.5.0 the default values were changed to reference
starting_number()
andstep()
.- Parameters:
start_num (int) – the starting number to check.
step (int) – the increment to jump by to find new numbers.
- Returns:
an available number
- Return type:
int
- symmetric_difference(other: Self)#
Return a new collection with elements in either the collection or the other, but not both.
collection ^ other
Added in version 1.0.0.
- Parameters:
others (Self) – the other collections to compare to.
other (Self)
- Return type:
Self
- symmetric_difference_update(other: Self)#
Update the collection, keeping only elements found in either collection, but not in both.
collection ^= other
Added in version 1.0.0.
- Parameters:
others (Self) – the other collections to compare to.
other (Self)
- union(*others: Self)#
Return a new collection with all elements from collection, and all others.
collection | other | ...
Added in version 1.0.0.
- Parameters:
*others (Self) – the other collections to compare to.
- Return type:
Self
- update(*objs: Self)#
Add the given objects to this collection.
Notes
This is not a thread-safe method.
Changed in version 1.0.0: Changed to be more set like. Accepts multiple arguments. If there is a number conflict, the current object will be kept.
- Parameters:
*objs (list[Numbered_MCNP_Object]) – The objects to add.
- Raises:
TypeError – if the object is of the wrong type.
NumberConflictError – if this object’s number is already in use in the collection.
- values() Generator[Numbered_MCNP_Object, None, None] #
Get iterator of the collection’s objects.
- Return type:
- property default_libraries: dict[LibraryType, Library]#
The default libraries for this problem defined by
M0
.Examples
To set the default libraries for a problem you need to set this dictionary to a Library or string.
import montepy problem = montepy.read_input("foo.imcnp") # set neutron default to ENDF/B-VIII.0 problem.materials.default_libraries["nlib"] = "00c" # set photo-atomic problem.materials.default_libraries[montepy.LibraryType.PHOTO_ATOMIC] = montepy.Library("80p")
Added in version 1.0.0.
- Returns:
the default libraries in use
- Return type:
dict[LibraryType, Library]
- property numbers#
A generator of the numbers being used.
- Return type:
generator
- property objects#
Returns a shallow copy of the internal objects list.
The list object is a new instance, but the underlying objects are the same.
- Return type:
list
- property starting_number#
The starting number to use when an object is cloned.
- Returns:
the starting number
- Return type:
int
- property step#
The step size to use to find a valid number during cloning.
- Returns:
the step size
- Return type:
int