diff --git a/Enrich_methods/example.py b/Enrich_methods/example.py new file mode 100644 index 0000000..bd0489b --- /dev/null +++ b/Enrich_methods/example.py @@ -0,0 +1,210 @@ +import argparse +from pyne import material +from pyne.material import Material, MultiMaterial +from pyne.material_library import MaterialLibrary +from material_db_tools import mix_by_volume +import material_db_tools as mdbt +from material_library import ( + mat_data as pure, +) # this is importing the material dictionaries + +mat_lib_test = MaterialLibrary() +# you may need to adjust this path for your setup +mat_lib_test.from_json("material_library.json") + + +simulation_lib = MaterialLibrary() + + +################################### Method 3 + + +# Currently how Edgar and I are enriching out materials +def enriched_lithium(enrichment): + enriched_li = Material({"Li6": enrichment, "Li7": 1 - enrichment}) + return enriched_li + + +def Li2TiO3Li_mat(enrichment=0.60): + Li2TiO3Li60 = Material() + Li2TiO3Li60.from_atom_frac( + {enriched_lithium(enrichment): 2, 80000000: 3, 220000000: 1} + ) + Li2TiO3Li60.density = 3.43 + Li2TiO3Li60 = Li2TiO3Li60.expand_elements() + Li2TiO3Li60.metadata["citation"] = "HernandezFusEngDes_2018" + return Li2TiO3Li60 + + +def Li4SiO4Li_mat(enrichment=0.60): + Li2TiO3Li60 = Material() + Li2TiO3Li60.from_atom_frac( + {enriched_lithium(enrichment): 4, 80000000: 4, 140000000: 1} + ) + Li2TiO3Li60.density = 2.40 + Li2TiO3Li60 = Li2TiO3Li60.expand_elements() + Li2TiO3Li60.metadata["citation"] = "HernandezFusEngDes_2018" + return Li2TiO3Li60 + + +# I also need to have another version of this function for the pin breeder zone. +# I will if need to either make a version of this for each material I'm testing +# or I will need a universial function that will require me to pass all the arugments in hcpb_pin_bw() +# plus whatever material I'm testing for the case. Currently I'm testing around 8 different materials +# How I make the universal function will depend on how I can import the library or if I can use enrich +def hcpb_pin_bw( + enrichment=0.6, + Li4SiO4_frac=0.065, + Li2TiO3_frac=0.035, + he_frac=0.482, + EUROFER97_frac=0.418, +): + + Li4SiO4Li = Li4SiO4Li_mat(enrichment) + Li2TiO3Li = Li2TiO3Li_mat(enrichment) + + mix = MultiMaterial( + { + mat_lib_test["EUROFER97"]: EUROFER97_frac, + Li4SiO4Li: Li4SiO4_frac, + mat_lib_test["HeT410P80"]: he_frac, + Li2TiO3Li: Li2TiO3_frac, + } + ) + hcpb_pin_bw = mix.mix_by_volume() + hcpb_pin_bw.metadata["constituentcitation"] = "HernandezFusEngDes_2018" + return hcpb_pin_bw + + +################################### Method 2 + +# Method if you want to use enrich function without it being called in mix_by_volume or in make_mat_from_atom +# But this version uses the output json file which will give you the same answer as rebuiling the material to the second last decimal +# Earlier you said that you wanted to avoid that method since you don't trust it +enriched_mat = mdbt.Material({30060000: 0.6, 30070000: 0.4}) +collapsed = mat_lib_test["Li2TiO3nat"].collapse_elements({3}) +atom_frac_enriched = mdbt.enrich( + collapsed.to_atom_frac(), 30000000, enriched_mat.to_atom_frac() +) + +mat_input2 = { + "atom_frac": atom_frac_enriched, + "density": 3.42, + "citation": "HernandezFusEngDes_2018", +} +material2 = mdbt.make_mat_from_atom(**mat_input2) +# From here you can either add it to the input library or call it in def hcpb_pin_bw +# Benefit of adding to input library you can have it included in your output material library like ss 316 currently + + +################################### Method 3 + +# You can either use "from material_library import mat_data as pure" or just redefine the material which would be the same as the current method + +enriched_mat = mdbt.Material({30060000: 0.6, 30070000: 0.4}) +atom_frac_enriched = mdbt.enrich( + pure["Li2TiO3nat"]["atom_frac"], 30000000, enriched_mat.to_atom_frac() +) +# I would need to call enrich() each time I wanted to enrich a different element +mat_input3 = { + "atom_frac": atom_frac_enriched, + "density": 3.42, + "citation": "HernandezFusEngDes_2018", +} +material3 = mdbt.make_mat_from_atom(**mat_input3) +# From here you can either add it to the input library or call it in def hcpb_pin_bw + + +################################### Method 4 + +# In this method make_mat_from_atom can call the enrich function +# I can enrich multiple isotopes at the same time with this method + +pure["Li2TiO3nat"]["mass_enrichment"] = {30000000: {30060000: 0.6, 30070000: 0.4}} +# I can enrich multiple isotopes at the same time with this method +material4 = mdbt.make_mat_from_atom(**pure["Li2TiO3nat"]) +mat_lib_test["material4_Li2TiO3"] = material4 + +# Can also be either added to the input library or call it in def hcpb_pin_bw +# Inputting to the library allows for the mix +pure["Li4SiO4nat"]["mass_enrichment"] = {30000000: {30060000: 0.6, 30070000: 0.4}} +mat_lib_test["material4_Li3SiO4"] = mdbt.make_mat_from_atom(**pure["Li4SiO4nat"]) + +# You can theoretically enrich the material with one line +#mat_lib_test["material4_Li3SiO4"] = mdbt.make_mat_from_atom(**{**pure.setdefault("Li4SiO4nat", {}), "mass_enrichment": {30000000: {30060000: 0.6, 30070000: 0.4}}}}) + +mixed_materials = {} + +mixed_materials["hcpb_enrich_method_4"] = { + "vol_fracs": { + "EUROFER97": 0.418, + "material4_Li3SiO4": 0.065, + "material4_Li2TiO3": 0.035, + "HeT410P80": 0.482, + }, + "mixture_citation": "ZhouEnergies_2023 and ???", +} + +# If added to the input library you can quite easily combine it with Method 5 but not need to call the mass enrichment function + +################################### Method 5 + +# In this method make_mat_from_atom can be called by mix_by_volume, and make_mat_from_atom can call the the enrich function +# Using Method I'm suggesting, one issue is that it requires the mdbt to import the library that has the materials before they have been created +# With this method I can enrich multiple materials and multiple elements in those materials at the same time. +# It also makes it trivial to add other materials and enrich them +# It would be also fairly easy to add some of the other features such as adjusting the density of materials in this format + + +mixed_materials["hcpb_enrich_method_5"] = { + "vol_fracs": { + "EUROFER97": 0.418, + "Li4SiO4nat": 0.065, + "Li2TiO3nat": 0.035, + "HeT410P80": 0.482, + }, + "mixture_citation": "ZhouEnergies_2023 and ???", + "mass_enrichment": { + "Li2TiO3nat": {30000000: {30060000: 0.6, 30070000: 0.4}}, + "Li4SiO4nat": {30000000: {30060000: 0.6, 30070000: 0.4}}, + }, +} + + +# running results +# I looked at using enrich() to enrich mixed materials after they were made. +# But theres a pretty big difference between making a material and multmaterial even with the same input fraction and overall density. +# I didn't spend a ton of time on it but I could get it to work +def main(): + # Need this function for method 1 + simulation_lib["HCPB_Pin_BW"] = hcpb_pin_bw( + enrichment=0.6, + Li4SiO4_frac=0.065, + Li2TiO3_frac=0.035, + he_frac=0.482, + EUROFER97_frac=0.418, + ) + + for material, material_def in mixed_materials.items(): + mat = mix_by_volume( + mat_lib_test, + material_def["vol_fracs"], + citation=material_def.get("citation"), + mass_enrichment=material_def.get("mass_enrichment"), + ) + simulation_lib[material] = mat + + # Proof that all methods produce the same enriched material + + # Base comparison from json input + simulation_lib["Li2TiO3Li60.0"] = mat_lib_test["Li2TiO3Li60.0"] + # Created from methods 2-4 + simulation_lib["material2"] = material2 + simulation_lib["material3"] = material3 + simulation_lib["material4"] = material4 + + simulation_lib.write_openmc("materials_example.xml") + + +if __name__ == "__main__": + main() diff --git a/Enrich_methods/material_db_tools.py b/Enrich_methods/material_db_tools.py new file mode 100644 index 0000000..e2d48a1 --- /dev/null +++ b/Enrich_methods/material_db_tools.py @@ -0,0 +1,444 @@ +from typing import Dict, Union, Optional +from pyne import material +from pyne.material import Material, MultiMaterial +from pyne.material_library import MaterialLibrary +from pyne import nucname +from decimal import Decimal, getcontext + + +def make_mat( + nucvec: Dict[int, float], + density: float, + citation: str, + molecular_mass: Optional[float] = None, + mass_enrichment: Optional[Dict[int, Dict[int, float]]] = None, +) -> Material: + """ + Create a Material object from nuclear vector data. + + Args: + nucvec (Dict[int, float]): The nuclear mass composition vector, with keys as nuclide IDs (zas) + or the pyne specified element name and values as their fractions (float). + density (float): The density of the material. + citation (str): A citation or reference for the material data. + molecular_mass (Optional[float]): The molecular mass of the material, if applicable. + mass_enrichment (Optional[Dict[int, Dict[int, float]]]): A dictionary containing the + enrichment information for elements, where keys are element IDs (int) and values are + dictionaries with nuclide IDs (int) as keys and enrichment fractions (float) as values. + + Returns: + Material: The created Material object with the specified properties, based on mass fractions. + """ + if mass_enrichment: + for element, enrichment_vector in mass_enrichment.items(): + enriched_mat = Material(enrichment_vector) + nucvec = enrich(nucvec, element, enriched_mat.comp) + mat = Material(nucvec, density=density, metadata={"citation": citation}) + if molecular_mass: + mat.molecular_mass = molecular_mass + return mat.expand_elements() + + +def make_mat_from_atom( + atom_frac: Dict[Union[int, str], float], + density: float, + citation: str, + mass_enrichment: Optional[Dict[int, Dict[int, float]]] = None, +) -> Material: + """ + Create a Material object from atom fraction data. + + Args: + atom_frac (Dict[Union[int, str], float]): The atomic fraction composition, with keys as + nuclide IDs (zas) or the pyne specified element name and values as their fractions (float). + density (float): The density of the material. + citation (str): A citation or reference for the material data. + mass_enrichment (Optional[Dict[int, Dict[int, float]]]): A dictionary containing the + enrichment information for elements, where keys are element IDs (int) and values are + dictionaries with nuclide IDs (int) as keys and enrichment fractions (float) as values. + + Returns: + Material: The created Material object with the specified properties, based on atomic fractions. + """ + if mass_enrichment: + for element, enrichment_vector in mass_enrichment.items(): + enriched_mat = Material(enrichment_vector) + atom_frac = enrich(atom_frac, element, enriched_mat.to_atom_frac()) + + mat = Material() + mat.from_atom_frac(atom_frac) + mat.density = density + mat.metadata["citation"] = citation + return mat.expand_elements() + + +def get_consituent_citations(materials): + """ + Retrieve citations from a list of materials. + + Args: + materials (list): A list of Material objects. + + Returns: + str: A comma-separated string of citations. + """ + citation_list = [] + for mat in materials: + citation_list.append(mat.metadata["citation"]) + + return ", ".join(citation_list) + + +# Mix Materials by Volume +def mix_by_volume(material_library, vol_fracs, citation, mass_enrichment=None): + from material_library import mat_data as pure + + mix_dict = {} + + for name, volume_fraction in vol_fracs.items(): + material = material_library[name] + + if mass_enrichment and name in mass_enrichment: + # Will update later so things are less explicit, seems easier to read like this + + material = material.collapse_elements({1}) + + nucvec = dict(material.to_atom_frac()) + + mat_input = pure[name] + + if "atom_frac" in mat_input: + + atom_frac = mat_input["atom_frac"] + mat_atom_input = dict(atom_frac) + # Which of the two methods is better? + enriched_material = make_mat_from_atom( + atom_frac=mat_atom_input, + density=mat_input["density"], + citation=mat_input["citation"], + mass_enrichment=mass_enrichment[name], + ) + + else: + nucvec = mat_input["nucvec"] + mat_mass_input = dict(nucvec) + enriched_material_params = { + "nucvec": mat_mass_input, + "density": mat_input["density"], + "citation": mat_input["citation"], + "mass_enrichment": mass_enrichment[name], + } + + enriched_material = make_mat(**enriched_material_params) + + mix_dict[enriched_material.expand_elements()] = volume_fraction + else: + mix_dict[material.expand_elements()] = volume_fraction + mix = MultiMaterial(mix_dict) + mat = mix.mix_by_volume() + mat.metadata["mixture_citation"] = citation + mat.metadata["constituent_citation"] = get_consituent_citations( + list(mix_dict.keys()) + ) + return mat.expand_elements() + + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + element_to_enrich_id = nucname.id(element_to_enrich) + isotope_enrichments = { + nucname.id(k): Decimal(str(v)) for k, v in isotope_enrichments.items() + } + + new_composition = {} + + for nuclide, fraction in material_composition.items(): + nuclide_id = nucname.id(nuclide) + fraction = Decimal(str(fraction)) + + if nuclide_id == element_to_enrich_id: + # Replace with enriched isotopes + for isotope, enrich_frac in isotope_enrichments.items(): + new_composition[isotope] = fraction * enrich_frac + else: + # Keep the original nuclide + new_composition[nuclide_id] = fraction + + # Convert back to float for consistency with the original function signature + return {k: float(v) for k, v in new_composition.items()} + + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + enriched_material_composition = {} + element_to_enrich_id = nucname.id(element_to_enrich) + + for k, v in material_composition.items(): + nuclide_id = nucname.id(k) + fract = Decimal(str(v)) + + if nuclide_id == element_to_enrich_id: + for iso_k, iso_v in isotope_enrichments.items(): + isotope_id = nucname.id(iso_k) + enriched_material_composition[isotope_id] = Decimal(str(iso_v)) * fract + else: + enriched_material_composition[nuclide_id] = fract + + # Convert back to float for consistency with the original function signature + return {k: float(v) for k, v in enriched_material_composition.items()} + + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + # Convert all keys to PyNE nuclide IDs + material_composition = { + nucname.id(k): Decimal(str(v)) for k, v in material_composition.items() + } + isotope_enrichments = { + nucname.id(k): Decimal(str(v)) for k, v in isotope_enrichments.items() + } + element_to_enrich_id = nucname.id(element_to_enrich) + + if element_to_enrich_id in material_composition: + fract = Decimal(material_composition.pop(element_to_enrich_id)) + for nuclide, enrich_frac in isotope_enrichments.items(): + material_composition[nuclide] = Decimal(enrich_frac) * fract + + # return material_composition + # Convert back to float for consistency with the original function signature + return {k: float(v) for k, v in material_composition.items()} + + +"""def enrich(material_composition, element_to_enrich, isotope_enrichments): + element_to_enrich_id = nucname.id(element_to_enrich) + for key in list(material_composition.keys()): + if nucname.id(key) == element_to_enrich_id: + fract = Decimal(material_composition.pop(key)) + for nuclide, enrich_frac in isotope_enrichments.items(): + material_composition[nuclide] = Decimal(enrich_frac) * fract + return material_composition""" + + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + # Convert all isotope enrichment keys to PyNE nuclide IDs + isotope_enrichments = { + nucname.id(k): Decimal(str(v)) for k, v in isotope_enrichments.items() + } + element_to_enrich_id = nucname.id(element_to_enrich) + + enriched_material_composition = {} + + for k, v in material_composition.items(): + nuclide_id = nucname.id(k) + if nuclide_id == element_to_enrich_id: + fract = Decimal(str(v)) + for isotope_id, enrich_frac in isotope_enrichments.items(): + enriched_material_composition[isotope_id] = Decimal(enrich_frac) * fract + else: + enriched_material_composition[nuclide_id] = Decimal(str(v)) + + # Convert back to float for consistency with the original function signature + return {k: float(v) for k, v in enriched_material_composition.items()} + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + element_to_enrich_id = nucname.id(element_to_enrich) + isotope_enrichments = { + nucname.id(k): Decimal(str(v)) for k, v in isotope_enrichments.items() + } + + enriched_material_composition = {} + + for nuclide, fraction in material_composition.items(): + nuclide_id = nucname.id(nuclide) + fraction = Decimal(str(fraction)) + + if nuclide_id == element_to_enrich_id: + for isotope, enrich_frac in isotope_enrichments.items(): + enriched_material_composition[isotope] = fraction * enrich_frac + else: + enriched_material_composition[nuclide_id] = fraction + + return {k: float(v) for k, v in enriched_material_composition.items()} + + +def enrich( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + + enriched_material_composition = {} + element_to_enrich_id = nucname.id(element_to_enrich) + + for k, v in material_composition.items(): + nuclide_id = nucname.id(k) + fract = Decimal(str(v)) + + if nuclide_id == element_to_enrich_id: + for iso_k, iso_v in isotope_enrichments.items(): + isotope_id = nucname.id(iso_k) + enriched_material_composition[isotope_id] = Decimal(str(iso_v)) * fract + else: + enriched_material_composition[nuclide_id] = fract + + # Convert back to float for consistency with the original function signature + + return {k: float(v) for k, v in enriched_material_composition.items()} + +def enrichment( + material_composition: Dict[int, float], + element_to_enrich: int, + isotope_enrichments: Dict[int, float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + Args: + material_composition: The original material composition. + element_to_enrich: The ID of the element to be enriched. + isotope_enrichments: The isotopic composition and ID's for element_to_enrich. + Returns: + Dict: The updated material composition with the enriched element. + """ + element_to_enrich_id = nucname.id(element_to_enrich) + if element_to_enrich_id in list(material_composition.keys()): + fract = material_composition.pop(element_to_enrich_id) + for nuclide, enrich_frac in isotope_enrichments.items(): + material_composition[nuclide] = enrich_frac * fract + return material_composition + +def enrichment( + material_composition: Dict[Union[int, str], float], + element_to_enrich: Union[int, str], + isotope_enrichments: Dict[Union[int, str], float], +) -> Dict[int, float]: + """ + Enrich a specific element in a material composition by replacing it with its isotopes. + + Args: + material_composition (Dict[Union[int, str], float]): The original material composition. + Keys can be nuclide IDs (int) or element symbols (str), and values are their fractions (float). + element_to_enrich (Union[int, str]): The ID or symbol of the element to be enriched. + isotope_enrichments (Dict[Union[int, str], float]): The isotopic composition for element_to_enrich. + Keys can be isotope IDs (int) or isotope symbols (str), and values are their enrichment fractions (float). + + Returns: + Dict[int, float]: The updated material composition with the enriched element. + Keys are nuclide IDs (int) and values are their fractions (float). + """ + + enriched_material_composition = {} + element_to_enrich_id = nucname.id(element_to_enrich) + + for k, v in material_composition.items(): + nuclide_id = nucname.id(k) + fract = float(v) + + if nuclide_id == element_to_enrich_id: + for iso_k, iso_v in isotope_enrichments.items(): + isotope_id = nucname.id(iso_k) + enriched_material_composition[isotope_id] = float(iso_v) * fract + else: + enriched_material_composition[nuclide_id] = fract + + return enriched_material_composition \ No newline at end of file diff --git a/Enrich_methods/material_db_toolss2.py b/Enrich_methods/material_db_toolss2.py new file mode 100644 index 0000000..990b2ea --- /dev/null +++ b/Enrich_methods/material_db_toolss2.py @@ -0,0 +1,54 @@ +from pyne import material +from pyne.material import Material, MultiMaterial +from pyne.material_library import MaterialLibrary + +def make_mat(nucvec, density, citation, molecular_mass = None): + mat = Material(nucvec, density = density, metadata = {'citation' : citation}) + if molecular_mass: + mat.molecular_mass = molecular_mass + return mat.expand_elements() + +def make_mat_from_atom(atom_frac, density, citation): + mat = Material() + mat.from_atom_frac(atom_frac) + mat.density = density + mat.metadata['citation'] = citation + return mat.expand_elements() + + +def get_consituent_citations(materials): + citation_str = "" + for mat in materials: + citation_str = " ".join([citation_str, mat.metadata["citation"]]) + return citation_str + + +# Mix Materials by Volume +def mix_by_volume(material_library, vol_fracs, citation, density_factor=1): + """ + Mixes materials by volume, adds list of constituent citations to the + metadata + + Arguments: + material_library (PyNE material library): library containing constituent + materials. + vol_fracs (dict): dictionary where the keys are names of materials (str) + and values are the volume fraction (float) + citation (str): citation for the mixture + density_factor (float): Value by which to scale the volume of the + mixed material. Defaults to 1. + """ + + mix_dict = {} + + for name, volume_fraction in vol_fracs.items(): + mix_dict[material_library[name]] = volume_fraction + + mix = MultiMaterial(mix_dict) + mat = mix.mix_by_volume() + mat.density *= density_factor + mat.metadata["mixture_citation"] = citation + mat.metadata["constituent_citation"] = get_consituent_citations( + list(mix_dict.keys()) + ) + return mat \ No newline at end of file diff --git a/Enrich_methods/material_library.json b/Enrich_methods/material_library.json new file mode 100644 index 0000000..b915747 --- /dev/null +++ b/Enrich_methods/material_library.json @@ -0,0 +1,1253 @@ +{ + "AirSTP" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Ar36" : 3.852734503729190e-05, + "Ar38" : 7.667262798148067e-06, + "Ar40" : 0.01278080539216456, + "C12" : 0.0001225635475341653, + "C13" : 1.436452465834682e-06, + "N14" : 0.7523238430802965, + "N15" : 0.002944156919703498, + "O16" : 0.2311528798652452, + "O17" : 9.358027970415838e-05, + "O18" : 0.0005345398550506979 + }, + "density" : 0.0012050, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 21, + "name" : "AirSTP" + } + }, + "Aluminum6061" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Al27" : 0.9719902800971990, + "Cr50" : 8.138607359969574e-05, + "Cr52" : 0.001632121244663344, + "Cr53" : 0.0001886330579677798, + "Cr54" : 4.784012396417810e-05, + "Cu63" : 0.001883159037556751, + "Cu65" : 0.0008668134627182462, + "Fe54" : 0.0002309010224495383, + "Fe56" : 0.003758734939416421, + "Fe57" : 8.835819286906067e-05, + "Fe58" : 1.196494567397473e-05, + "Mg24" : 0.007794920692834717, + "Mg25" : 0.001027999754941085, + "Mg26" : 0.001176979553224186, + "Mn55" : 0.0008799912000879989, + "Si28" : 0.005511934087990272, + "Si29" : 0.0002900148323354959, + "Si30" : 0.0001979910802742261, + "Ti46" : 6.969614129875859e-05, + "Ti47" : 6.421984223687247e-05, + "Ti48" : 0.0006498299613059842, + "Ti49" : 4.868278986540076e-05, + "Ti50" : 4.756246538098284e-05, + "Zn64" : 0.0007019681547876869, + "Zn66" : 0.0004082490151892050, + "Zn67" : 6.038121929419132e-05, + "Zn68" : 0.0002798616240692032, + "Zn70" : 9.525386805711897e-06 + }, + "density" : 2.70, + "mass" : 100.0010, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 46, + "name" : "Aluminum6061" + } + }, + "AluminumOxide" : { + "atoms_per_molecule" : 5.0, + "comp" : { + "Al27" : 0.5292506202598763, + "O16" : 0.4694736618692104, + "O17" : 0.0001900624236958156, + "O18" : 0.001085655447217380 + }, + "density" : 3.970, + "mass" : 101.9612915890446, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 49, + "name" : "AluminumOxide" + } + }, + "BMF82H" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "B10" : 0.005529283040019153, + "B11" : 0.02447071695998084, + "C12" : 0.0009884157059206879, + "C13" : 1.158429407931195e-05, + "Cr50" : 0.003130264902324298, + "Cr52" : 0.06277452176445351, + "Cr53" : 0.007255190165321519, + "Cr54" : 0.001840023167900682, + "Fe54" : 0.04921797661775582, + "Fe56" : 0.8011975278323811, + "Fe57" : 0.01883409360635025, + "Fe58" : 0.002550401943512851, + "Ta180" : 2.388720006373263e-08, + "Ta181" : 0.0001999761127999363, + "V50" : 4.902406711105496e-06, + "V51" : 0.001995097593288895, + "W180" : 2.349151063466683e-05, + "W182" : 0.005245409895410040, + "W183" : 0.002848120505749374, + "W184" : 0.006131638417457124, + "W186" : 0.005751339670748796 + }, + "density" : 7.890, + "mass" : 100.0, + "metadata" : { + "citation" : "KluehJNM_2000", + "mat_number" : 4, + "name" : "BMF82H" + } + }, + "Be" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Be9" : 1.0 + }, + "density" : 1.850, + "mass" : 1.0, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 32, + "name" : "Be" + } + }, + "Be12Ti" : { + "atoms_per_molecule" : 13.0, + "comp" : { + "Be9" : 0.6931873490196786, + "Ti46" : 0.02429985421767038, + "Ti47" : 0.02239051940549237, + "Ti48" : 0.2265659623582499, + "Ti49" : 0.01697346043259057, + "Ti50" : 0.01658285456631821 + }, + "density" : 2.280, + "mass" : 156.0129407222201, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 33, + "name" : "Be12Ti" + } + }, + "Be12V" : { + "atoms_per_molecule" : 13.0, + "comp" : { + "Be9" : 0.6797899702966610, + "V50" : 0.0007848998992904697, + "V51" : 0.3194251298040485 + }, + "density" : 2.390, + "mass" : 159.0876616564450, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 34, + "name" : "Be12V" + } + }, + "C" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.9884157059206881, + "C13" : 0.01158429407931195 + }, + "density" : 1.70, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 26, + "name" : "C" + } + }, + "Concrete" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Al27" : 0.04574604574604575, + "Ca40" : 0.08017233800922421, + "Ca42" : 0.0005618092311226244, + "Ca43" : 0.0001200187190201692, + "Ca44" : 0.001897539228386041, + "Ca46" : 3.804028650010022e-06, + "Ca48" : 0.0001855737246798945, + "Fe54" : 0.0006999370088460896, + "Fe56" : 0.01139396293108826, + "Fe57" : 0.0002678427690259882, + "Fe58" : 3.626968905206153e-05, + "H1" : 0.005556728345316542, + "H2" : 1.277212689016125e-06, + "K39" : 0.01788017933728963, + "K40" : 2.300805126230926e-06, + "K41" : 0.001356539096603378, + "Mg24" : 0.001999419151102834, + "Mg25" : 0.0002636848376465976, + "Mg26" : 0.0003018985762531342, + "Na23" : 0.01710101710101710, + "O16" : 0.4967267244665385, + "O17" : 0.0002010955945658462, + "O18" : 0.001148678015393714, + "S32" : 0.001215198947223511, + "S33" : 9.894597977716467e-06, + "S34" : 5.776382351146931e-05, + "S36" : 1.439142885858669e-07, + "Si28" : 0.2894642400169712, + "Si29" : 0.01523039312435839, + "Si30" : 0.01039768195098547 + }, + "density" : 2.350, + "mass" : 99.99990000000001, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 22, + "name" : "Concrete" + } + }, + "Cr3FS" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.0009884157059206881, + "C13" : 1.158429407931195e-05, + "Cr50" : 0.001252105960929719, + "Cr52" : 0.02510980870578141, + "Cr53" : 0.002902076066128607, + "Cr54" : 0.0007360092671602731, + "Fe54" : 0.05250933706374707, + "Fe56" : 0.8547761191063291, + "Fe57" : 0.02009358851028490, + "Fe58" : 0.002720955319639026, + "Mn55" : 0.005000000000000001, + "Si28" : 0.001286130815043936, + "Si29" : 6.767080424622452e-05, + "Si30" : 4.619838070984010e-05, + "V50" : 6.128008388881871e-06, + "V51" : 0.002493871991611119, + "W180" : 3.523726595200026e-05, + "W182" : 0.007868114843115061, + "W183" : 0.004272180758624062, + "W184" : 0.009197457626185688, + "W186" : 0.008627009506123195 + }, + "density" : 7.890, + "mass" : 100.0, + "metadata" : { + "citation" : "JawadORNL_2005 and ???", + "mat_number" : 15, + "name" : "Cr3FS" + } + }, + "Cu" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Cu63" : 0.6847919524171371, + "Cu65" : 0.3152080475828630 + }, + "density" : 8.960000000000001, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 28, + "name" : "Cu" + } + }, + "D2O" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "H2" : 0.2011330, + "O16" : 0.7967020924032117, + "O17" : 0.0003225380738991630, + "O18" : 0.001842369522889218 + }, + "density" : 1.105340, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 17, + "name" : "D2O" + } + }, + "EUROFER97" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.001087257276512757, + "C13" : 1.274272348724315e-05, + "Cr50" : 0.003714581017424833, + "Cr52" : 0.07449243249381818, + "Cr53" : 0.008609492329514870, + "Cr54" : 0.002183494159242144, + "Fe54" : 0.05032450603013023, + "Fe56" : 0.819210227471650, + "Fe57" : 0.01925752585535744, + "Fe58" : 0.002607740642862302, + "Mn55" : 0.00420, + "Ta180" : 1.672104004461284e-07, + "Ta181" : 0.001399832789599554, + "V50" : 4.657286375550221e-06, + "V51" : 0.001895342713624450, + "W180" : 1.292033084906676e-05, + "W182" : 0.002884975442475522, + "W183" : 0.001566466278162156, + "W184" : 0.003372401129601418, + "W186" : 0.003163236818911838 + }, + "density" : 7.750, + "mass" : 100.0, + "metadata" : { + "citation" : "MergiaJNM_2008", + "mat_number" : 3, + "name" : "EUROFER97" + } + }, + "Eins" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Al27" : 0.08599999999999999, + "C12" : 0.238405868268070, + "C13" : 0.002794131731930043, + "H1" : 0.0195954959799080, + "H2" : 4.504020092002043e-06, + "Mg24" : 0.03055639467680326, + "Mg25" : 0.004029799336959449, + "Mg26" : 0.004613805986237299, + "N14" : 0.01454308683668887, + "N15" : 5.691316331113071e-05, + "O16" : 0.4008108620544480, + "O17" : 0.0001622648725007712, + "O18" : 0.0009268730730511796, + "Si28" : 0.1814363114079837, + "Si29" : 0.009546417027592385, + "Si30" : 0.006517271564423869 + }, + "density" : 1.80, + "mass" : 100.0, + "metadata" : { + "citation" : "FESS-FNSF and ARIES GFFpolyimide", + "mat_number" : 10, + "name" : "Eins" + } + }, + "EthyleneGlycol" : { + "atoms_per_molecule" : 10.0, + "comp" : { + "C12" : 0.3825357389303309, + "C13" : 0.004483342857738278, + "H1" : 0.09741351399339676, + "H2" : 2.239047303057042e-05, + "O16" : 0.5141479009385607, + "O17" : 0.0002081484098627083, + "O18" : 0.001188964397080138 + }, + "density" : 1.1140, + "mass" : 62.06792616656458, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 48, + "name" : "EthyleneGlycol" + } + }, + "Fe" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Fe54" : 0.05645558226400071, + "Fe56" : 0.9190152877178035, + "Fe57" : 0.02160368617383604, + "Fe58" : 0.002925443844359774 + }, + "density" : 7.8740, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 24, + "name" : "Fe" + } + }, + "FlibeLi60.0" : { + "atoms_per_molecule" : 7.0, + "comp" : { + "Be9" : 0.09218298421965840, + "F19" : 0.7773164331602028, + "Li6" : 0.07830034957208326, + "Li7" : 0.05220023304805553 + }, + "density" : 1.940, + "mass" : 97.76406288307290, + "metadata" : { + "citation" : "SohalINLEXT-10-18297_2013", + "mat_number" : 40, + "name" : "FlibeLi60.0" + } + }, + "FlibeNat" : { + "atoms_per_molecule" : 7.0, + "comp" : { + "Be9" : 0.09113721873622968, + "F19" : 0.7684982038266430, + "Li6" : 0.009233833552264823, + "Li7" : 0.1311307438848624 + }, + "density" : 1.940, + "mass" : 98.88586892346537, + "metadata" : { + "citation" : "SohalINLEXT-10-18297_2013", + "mat_number" : 39, + "name" : "FlibeNat" + } + }, + "HT9" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.001976831411841376, + "C13" : 2.316858815862390e-05, + "Cr50" : 0.005008423843718876, + "Cr52" : 0.1004392348231256, + "Cr53" : 0.01160830426451443, + "Cr54" : 0.002944037068641092, + "Fe54" : 0.04829775062685260, + "Fe56" : 0.7862175786425808, + "Fe57" : 0.01848195352171673, + "Fe58" : 0.002502717208849787, + "Mo100" : 0.001022398408082629, + "Mo92" : 0.001391630753435387, + "Mo94" : 0.0008954079005343189, + "Mo95" : 0.001566602543416451, + "Mo96" : 0.001666042596696172, + "Mo97" : 0.0009694662634831474, + "Mo98" : 0.002488451534351895, + "Ni58" : 0.003359890429131619, + "Ni60" : 0.001338793130577794, + "Ni61" : 5.916795828494564e-05, + "Ni62" : 0.0001917464037556326, + "Ni64" : 5.040207825000851e-05, + "V50" : 6.128008388881870e-06, + "V51" : 0.002493871991611118, + "W180" : 5.872877658666708e-06, + "W182" : 0.001311352473852510, + "W183" : 0.0007120301264373436, + "W184" : 0.001532909604364281, + "W186" : 0.001437834917687199 + }, + "density" : 7.80, + "mass" : 100.0, + "metadata" : { + "citation" : "KluehJNM_2000 and SmithBCSSANLvol2_1984", + "mat_number" : 2, + "name" : "HT9" + } + }, + "HeNIST" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "He3" : 1.009713021901598e-06, + "He4" : 0.9999989902869781 + }, + "density" : 0.000166470, + "mass" : 100.0, + "metadata" : { + "citation" : "WidodoJoPCS_2018 and pnnl-15870rev1", + "mat_number" : 18, + "name" : "HeNIST" + } + }, + "HeT410P1" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "He3" : 1.009713021901598e-06, + "He4" : 0.9999989902869781 + }, + "density" : 7.048000000000000e-05, + "mass" : 100.0, + "metadata" : { + "citation" : "WidodoJoPCS_2018", + "mat_number" : 19, + "name" : "HeT410P1" + } + }, + "HeT410P80" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "He3" : 1.009713021901598e-06, + "He4" : 0.9999989902869781 + }, + "density" : 0.005716980, + "mass" : 100.0, + "metadata" : { + "citation" : "WidodoJoPCS_2018", + "mat_number" : 20, + "name" : "HeT410P80" + } + }, + "Inconel718" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Al27" : 0.005000000000000001, + "B10" : 9.215471733365257e-06, + "B11" : 4.078452826663476e-05, + "C12" : 0.0007215434653221023, + "C13" : 8.456534677897726e-06, + "Co59" : 0.009100000000000002, + "Cr50" : 0.007930004419221556, + "Cr52" : 0.1590287884699489, + "Cr53" : 0.01837981508548118, + "Cr54" : 0.004661392025348397, + "Cu63" : 0.001869482030098785, + "Cu65" : 0.0008605179699012163, + "Fe54" : 0.009597448984880120, + "Fe56" : 0.1562325989120266, + "Fe57" : 0.003672626649552126, + "Fe58" : 0.0004973254535411615, + "Mn55" : 0.003180000000000001, + "Mo100" : 0.003118315144652020, + "Mo92" : 0.004244473797977932, + "Mo94" : 0.002730994096629673, + "Mo95" : 0.004778137757420174, + "Mo96" : 0.005081429919923326, + "Mo97" : 0.00295687210362360, + "Mo98" : 0.007589777179773279, + "Nb93" : 0.051250, + "Ni58" : 0.352788495058820, + "Ni60" : 0.1405732787106684, + "Ni61" : 0.006212635619919291, + "Ni62" : 0.02013337239434142, + "Ni64" : 0.005292218216250894, + "P31" : 0.000140, + "S32" : 0.0001326014672513164, + "S33" : 1.079690048040989e-06, + "S34" : 6.303138896859245e-06, + "S36" : 1.570380378333669e-08, + "Si28" : 0.002921354279885511, + "Si29" : 0.0001537093982164242, + "Si30" : 0.0001049363218980653, + "Ti46" : 0.0007128085731153913, + "Ti47" : 0.0006568004089973337, + "Ti48" : 0.006646054700511793, + "Ti49" : 0.0004978971479996533, + "Ti50" : 0.0004864391693758297 + }, + "density" : 8.190, + "mass" : 99.99999999999999, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 52, + "name" : "Inconel718" + } + }, + "JK2LBSteel" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "B10" : 3.686188693346102e-06, + "B11" : 1.631381130665390e-05, + "C12" : 0.0001976831411841376, + "C13" : 2.316858815862390e-06, + "Cr50" : 0.005425792497362115, + "Cr52" : 0.1088091710583860, + "Cr53" : 0.01257566295322396, + "Cr54" : 0.003189373491027850, + "Fe54" : 0.03131591148184118, + "Fe56" : 0.5097777800970654, + "Fe57" : 0.01198356472062685, + "Fe58" : 0.001622743700466366, + "Mn55" : 0.2099999999999999, + "Mo100" : 0.001022398408082629, + "Mo92" : 0.001391630753435387, + "Mo94" : 0.0008954079005343186, + "Mo95" : 0.001566602543416450, + "Mo96" : 0.001666042596696172, + "Mo97" : 0.0009694662634831472, + "Mo98" : 0.002488451534351895, + "N14" : 0.001992203676258749, + "N15" : 7.796323741250782e-06, + "Ni58" : 0.06047802772436914, + "Ni60" : 0.02409827635040029, + "Ni61" : 0.001065023249129021, + "Ni62" : 0.003451435267601385, + "Ni64" : 0.0009072374085001528, + "P31" : 4.000000000000000e-05, + "S32" : 3.788613350037611e-05, + "S33" : 3.084828708688539e-07, + "S34" : 1.800896827674069e-06, + "S36" : 4.486801080953338e-09, + "Si28" : 0.002755994603665575, + "Si29" : 0.0001450088662419096, + "Si30" : 9.899653009251445e-05 + }, + "density" : 8.0, + "mass" : 100.0, + "metadata" : { + "citation" : "ElGuebalyARIESCSFTI_2006", + "mat_number" : 12, + "name" : "JK2LBSteel" + } + }, + "LHe" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "He3" : 1.009713021901598e-06, + "He4" : 0.9999989902869781 + }, + "density" : 0.1490, + "mass" : 100.0, + "metadata" : { + "citation" : "CRChandbook64B117", + "mat_number" : 14, + "name" : "LHe" + } + }, + "Li2TiO3Li60.0" : { + "atoms_per_molecule" : 6.0, + "comp" : { + "Li6" : 0.07047259219291184, + "Li7" : 0.04698172812860791, + "O16" : 0.4406805317035293, + "O17" : 0.0001784057695540481, + "O18" : 0.001019071480648624, + "Ti46" : 0.03490129928748788, + "Ti47" : 0.03215896737376856, + "Ti48" : 0.3254112715981995, + "Ti49" : 0.02437857516327805, + "Ti50" : 0.02381755730201424 + }, + "density" : 3.430, + "mass" : 108.6232258688177, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 38, + "name" : "Li2TiO3Li60.0" + } + }, + "Li2TiO3nat" : { + "atoms_per_molecule" : 6.0, + "comp" : { + "Li6" : 0.008320154802686119, + "Li7" : 0.1181554857295256, + "O16" : 0.4361759261305193, + "O17" : 0.0001765821182557172, + "O18" : 0.001008654603249299, + "Ti46" : 0.03454454064723673, + "Ti47" : 0.03183024065853536, + "Ti48" : 0.3220849403398274, + "Ti49" : 0.02412937907304454, + "Ti50" : 0.02357409589711987 + }, + "density" : 3.430, + "mass" : 109.7450319092101, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 36, + "name" : "Li2TiO3nat" + } + }, + "Li4SiO4Li60.0" : { + "atoms_per_molecule" : 9.0, + "comp" : { + "Li6" : 0.1301867840819527, + "Li7" : 0.08679118938796852, + "O16" : 0.5427242889260229, + "O17" : 0.0002197173177749101, + "O18" : 0.001255047148467858, + "Si28" : 0.2193982750663940, + "Si29" : 0.01154381618907878, + "Si30" : 0.007880881882340434 + }, + "density" : 2.40, + "mass" : 117.5996527345346, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 37, + "name" : "Li4SiO4Li60.0" + } + }, + "Li4SiO4nat" : { + "atoms_per_molecule" : 9.0, + "comp" : { + "Li6" : 0.01523816387541597, + "Li7" : 0.2163989369217760, + "O16" : 0.5325638283190268, + "O17" : 0.0002156039416141628, + "O18" : 0.001231551135165847, + "Si28" : 0.2152908717742616, + "Si29" : 0.01132770187093090, + "Si30" : 0.007733342161808737 + }, + "density" : 2.40, + "mass" : 119.8432648153195, + "metadata" : { + "citation" : "HernandezFusEngDes_2018", + "mat_number" : 35, + "name" : "Li4SiO4nat" + } + }, + "Li60.0" : { + "atoms_per_molecule" : 1.0, + "comp" : { + "Li6" : 0.60, + "Li7" : 0.4000000000000001 + }, + "density" : 0.5340, + "mass" : 6.379133582776449, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 43, + "name" : "Li60.0" + } + }, + "Li60.0T500" : { + "atoms_per_molecule" : 1.0, + "comp" : { + "Li6" : 0.60, + "Li7" : 0.4000000000000001 + }, + "density" : 0.4850, + "mass" : 6.379133582776449, + "metadata" : { + "citation" : "BohmFusSciTec_2019", + "mat_number" : 44, + "name" : "Li60.0T500" + } + }, + "LiNat" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Li6" : 0.06578464254203227, + "Li7" : 0.9342153574579678 + }, + "density" : 0.5340, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 41, + "name" : "LiNat" + } + }, + "LiNatT500" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Li6" : 0.06578464254203227, + "Li7" : 0.9342153574579678 + }, + "density" : 0.4850, + "mass" : 1.0, + "metadata" : { + "citation" : "BohmFusSciTec_2019", + "mat_number" : 42, + "name" : "LiNatT500" + } + }, + "MF82H" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.0009884157059206881, + "C13" : 1.158429407931195e-05, + "Cr50" : 0.003130264902324298, + "Cr52" : 0.06277452176445353, + "Cr53" : 0.007255190165321519, + "Cr54" : 0.001840023167900683, + "Fe54" : 0.05091164408567585, + "Fe56" : 0.8287679864639153, + "Fe57" : 0.01948220419156534, + "Fe58" : 0.002638165258843644, + "Ta180" : 2.388720006373263e-08, + "Ta181" : 0.0001999761127999363, + "V50" : 4.902406711105497e-06, + "V51" : 0.001995097593288895, + "W180" : 2.349151063466684e-05, + "W182" : 0.005245409895410041, + "W183" : 0.002848120505749375, + "W184" : 0.006131638417457125, + "W186" : 0.005751339670748797 + }, + "density" : 7.890, + "mass" : 100.0, + "metadata" : { + "citation" : "KluehJNM_2000", + "mat_number" : 1, + "name" : "MF82H" + } + }, + "Mo" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Mo100" : 0.1022398408082629, + "Mo92" : 0.1391630753435388, + "Mo94" : 0.08954079005343189, + "Mo95" : 0.1566602543416450, + "Mo96" : 0.1666042596696172, + "Mo97" : 0.09694662634831470, + "Mo98" : 0.2488451534351894 + }, + "density" : 10.220, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 45, + "name" : "Mo" + } + }, + "Na" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Na23" : 1.0 + }, + "density" : 0.9710, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 25, + "name" : "Na" + } + }, + "ODS125Y" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Al27" : 0.0480, + "C12" : 0.0003755979682498614, + "C13" : 4.402031750138540e-06, + "Cr50" : 0.004758002651532933, + "Cr52" : 0.09541727308196932, + "Cr53" : 0.01102788905128871, + "Cr54" : 0.002796835215209038, + "Fe54" : 0.04663372233962118, + "Fe56" : 0.7591296030370985, + "Fe57" : 0.01784518487174291, + "Fe58" : 0.002416489751537282, + "N14" : 0.0004532263363488655, + "N15" : 1.773663651134553e-06, + "O16" : 0.008397182031596052, + "O17" : 3.399527809048254e-06, + "O18" : 1.941844059490155e-05, + "S32" : 1.894306675018806e-05, + "S33" : 1.542414354344270e-07, + "S34" : 9.004484138370349e-07, + "S36" : 2.243400540476669e-09, + "Si28" : 0.0001837329735777050, + "Si29" : 9.667257749460644e-06, + "Si30" : 6.599768672834299e-06, + "Ti46" : 7.920095256837680e-06, + "Ti47" : 7.297782322192597e-06, + "Ti48" : 7.384505222790880e-05, + "Ti49" : 5.532190533329480e-06, + "Ti50" : 5.404879659731440e-06, + "W180" : 5.872877658666709e-07, + "W182" : 0.0001311352473852510, + "W183" : 7.120301264373436e-05, + "W184" : 0.0001532909604364281, + "W186" : 0.0001437834917687199, + "Y89" : 0.00190 + }, + "density" : 7.7990, + "mass" : 100.0, + "metadata" : { + "citation" : "PintDOE_ER_0313_57_2014 and KluehJNM_2000 ", + "mat_number" : 16, + "name" : "ODS125Y" + } + }, + "OilTexasCrude" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.8423326605810946, + "C13" : 0.009872191623757584, + "H1" : 0.1232178016637068, + "H2" : 2.832158241642342e-05, + "N14" : 0.006986665279304713, + "N15" : 2.734173470230120e-05, + "S32" : 0.01660835038157776, + "S33" : 0.0001352313137484476, + "S34" : 0.0007894689363005566, + "S36" : 1.966903390766311e-06 + }, + "density" : 0.8750, + "mass" : 99.99990000000001, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 47, + "name" : "OilTexasCrude" + } + }, + "Pb" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Pb204" : 0.01378083787911828, + "Pb206" : 0.2395549991410930, + "Pb207" : 0.2207429583489678, + "Pb208" : 0.5259212046308210 + }, + "density" : 11.350, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 31, + "name" : "Pb" + } + }, + "Pb157Li90" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Li6" : 0.004905000000000001, + "Li7" : 0.0005450000000000001, + "Pb204" : 0.01370573231267708, + "Pb206" : 0.2382494243957740, + "Pb207" : 0.2195399092259659, + "Pb208" : 0.5230549340655830 + }, + "density" : 9.320, + "mass" : 100.0, + "metadata" : { + "citation" : "BohmFusSciTec_2019", + "mat_number" : 11, + "name" : "Pb157Li90" + } + }, + "SS316L" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "B10" : 1.843094346673051e-06, + "B11" : 8.156905653326949e-06, + "C12" : 0.0002965247117762064, + "C13" : 3.475288223793585e-06, + "Cr50" : 0.007095267111935075, + "Cr52" : 0.1422889159994279, + "Cr53" : 0.01644509770806211, + "Cr54" : 0.004170719180574880, + "Fe54" : 0.03691856346572063, + "Fe56" : 0.6009808572501805, + "Fe57" : 0.01412751453651834, + "Fe58" : 0.001913064747580631, + "Mn55" : 0.020, + "Mo100" : 0.002555996020206574, + "Mo92" : 0.003479076883588469, + "Mo94" : 0.002238519751335797, + "Mo95" : 0.003916506358541127, + "Mo96" : 0.004165106491740431, + "Mo97" : 0.002423665658707869, + "Mo98" : 0.006221128835879738, + "Ni58" : 0.08063737029915886, + "Ni60" : 0.03213103513386706, + "Ni61" : 0.001420030998838695, + "Ni62" : 0.004601913690135182, + "Ni64" : 0.001209649878000204, + "P31" : 0.000450, + "S32" : 0.0002841460012528209, + "S33" : 2.313621531516404e-06, + "S34" : 1.350672620755552e-05, + "S36" : 3.365100810715004e-08, + "Si28" : 0.009186648678885254, + "Si29" : 0.0004833628874730321, + "Si30" : 0.0003299884336417150 + }, + "density" : 8.0, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 9, + "name" : "SS316L" + } + }, + "SS316LN" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "B10" : 5.529283040019153e-05, + "B11" : 0.0002447071695998085, + "C12" : 0.0002965247117762064, + "C13" : 3.475288223793585e-06, + "Co59" : 0.0010, + "Cr50" : 0.007199609275345884, + "Cr52" : 0.1443814000582430, + "Cr53" : 0.01668693738023949, + "Cr54" : 0.004232053286171569, + "Fe54" : 0.03660015398175166, + "Fe56" : 0.5957976110274520, + "Fe57" : 0.01400566974649790, + "Fe58" : 0.001896565244298441, + "Mn55" : 0.020, + "Mo100" : 0.002555996020206573, + "Mo92" : 0.003479076883588469, + "Mo94" : 0.002238519751335797, + "Mo95" : 0.003916506358541126, + "Mo96" : 0.004165106491740431, + "Mo97" : 0.002423665658707869, + "Mo98" : 0.006221128835879737, + "N14" : 0.001593762941006999, + "N15" : 6.237058993000627e-06, + "Nb93" : 0.00050, + "Ni58" : 0.08063737029915886, + "Ni60" : 0.03213103513386706, + "Ni61" : 0.001420030998838695, + "Ni62" : 0.004601913690135182, + "Ni64" : 0.001209649878000204, + "P31" : 0.00030, + "S32" : 0.0001894306675018806, + "S33" : 1.542414354344270e-06, + "S34" : 9.004484138370348e-06, + "S36" : 2.243400540476669e-08, + "Si28" : 0.009186648678885252, + "Si29" : 0.0004833628874730321, + "Si30" : 0.0003299884336417149 + }, + "density" : 7.930, + "mass" : 99.99999999999999, + "metadata" : { + "citation" : "GilbertHandbookITERCCFE_2016", + "mat_number" : 7, + "name" : "SS316LN" + } + }, + "SS316LNIG" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "B10" : 1.843094346673052e-06, + "B11" : 8.156905653326951e-06, + "C12" : 0.0002965247117762065, + "C13" : 3.475288223793586e-06, + "Co59" : 0.0005000000000000001, + "Cr50" : 0.007303951438756695, + "Cr52" : 0.1464738841170582, + "Cr53" : 0.01692877705241688, + "Cr54" : 0.004293387391768259, + "Cu63" : 0.002054375857251412, + "Cu65" : 0.0009456241427485894, + "Fe54" : 0.03660805776326861, + "Fe56" : 0.5959262731677324, + "Fe57" : 0.01400869426256224, + "Fe58" : 0.001896974806436652, + "Mn55" : 0.01800000000000001, + "Mo100" : 0.002555996020206574, + "Mo92" : 0.003479076883588470, + "Mo94" : 0.002238519751335798, + "Mo95" : 0.003916506358541127, + "Mo96" : 0.004165106491740432, + "Mo97" : 0.002423665658707869, + "Mo98" : 0.006221128835879740, + "N14" : 0.0006972712866905624, + "N15" : 2.728713309437775e-06, + "Nb93" : 0.00010, + "Ni58" : 0.08231731551372469, + "Ni60" : 0.03280043169915597, + "Ni61" : 0.001449614977981168, + "Ni62" : 0.004697786892012998, + "Ni64" : 0.001234850917125208, + "P31" : 0.0002500000000000001, + "S32" : 9.471533375094034e-05, + "S33" : 7.712071771721352e-07, + "S34" : 4.502242069185176e-06, + "S36" : 1.121700270238335e-08, + "Si28" : 0.004593324339442628, + "Si29" : 0.0002416814437365161, + "Si30" : 0.0001649942168208575, + "Ta180" : 1.194360003186632e-08, + "Ta181" : 9.998805639996816e-05, + "Ti46" : 7.920095256837681e-05, + "Ti47" : 7.297782322192597e-05, + "Ti48" : 0.0007384505222790883, + "Ti49" : 5.532190533329482e-05, + "Ti50" : 5.404879659731441e-05 + }, + "density" : 7.930, + "mass" : 100.0, + "metadata" : { + "citation" : "GilbertHandbookITERCCFE_2016", + "mat_number" : 8, + "name" : "SS316LNIG" + } + }, + "Si" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Si28" : 0.9186648678885253, + "Si29" : 0.04833628874730321, + "Si30" : 0.03299884336417149 + }, + "density" : 2.330, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 27, + "name" : "Si" + } + }, + "SiC" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "C12" : 0.2960769594614244, + "C13" : 0.003470040538575657, + "Si28" : 0.6434815627071212, + "Si29" : 0.03385729846191478, + "Si30" : 0.02311413883096402 + }, + "density" : 3.210, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 6, + "name" : "SiC" + } + }, + "Sn" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Sn112" : 0.009143928656322546, + "Sn114" : 0.006332723740016232, + "Sn115" : 0.003290969598851427, + "Sn116" : 0.1419602174019445, + "Sn117" : 0.07563085119162281, + "Sn118" : 0.2405504339215007, + "Sn119" : 0.08603980066400865, + "Sn120" : 0.3290716896980593, + "Sn122" : 0.04754548141606663, + "Sn124" : 0.06043390371160732 + }, + "density" : 7.310, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 29, + "name" : "Sn" + } + }, + "Ta" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Ta180" : 0.0001194360003186631, + "Ta181" : 0.9998805639996814 + }, + "density" : 16.6540, + "mass" : 1.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 30, + "name" : "Ta" + } + }, + "TernaryNb3Sn" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Nb93" : 0.6895000000000001, + "Sn112" : 0.002743178596896764, + "Sn114" : 0.001899817122004869, + "Sn115" : 0.0009872908796554282, + "Sn116" : 0.04258806522058336, + "Sn117" : 0.02268925535748684, + "Sn118" : 0.07216513017645021, + "Sn119" : 0.02581194019920259, + "Sn120" : 0.09872150690941778, + "Sn122" : 0.01426364442481999, + "Sn124" : 0.01813017111348220, + "Ti46" : 0.0008316100019679564, + "Ti47" : 0.0007662671438302229, + "Ti48" : 0.007753730483930425, + "Ti49" : 0.0005808800059995956, + "Ti50" : 0.0005675123642718014 + }, + "density" : 8.90, + "mass" : 100.0, + "metadata" : { + "citation" : "FESS-FNSF and ???", + "mat_number" : 13, + "name" : "TernaryNb3Sn" + } + }, + "V4Cr4Ti" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "Cr50" : 0.001669474614572959, + "Cr52" : 0.03347974494104187, + "Cr53" : 0.003869434754838143, + "Cr54" : 0.0009813456895470308, + "Ti46" : 0.003168038102735072, + "Ti47" : 0.002919112928877038, + "Ti48" : 0.02953802089116352, + "Ti49" : 0.002212876213331792, + "Ti50" : 0.002161951863892576, + "V50" : 0.002255107087108528, + "V51" : 0.9177448929128914 + }, + "density" : 6.050, + "mass" : 100.0, + "metadata" : { + "citation" : "GrossbeckJNM_1998 and density ARIES_PropertiesArchive and MetalsHandbook_1979", + "mat_number" : 50, + "name" : "V4Cr4Ti" + } + }, + "W" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "W180" : 0.001174575531733342, + "W182" : 0.2622704947705020, + "W183" : 0.1424060252874687, + "W184" : 0.3065819208728562, + "W186" : 0.2875669835374398 + }, + "density" : 19.30, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 23, + "name" : "W" + } + }, + "WC" : { + "atoms_per_molecule" : 2.0, + "comp" : { + "C12" : 0.06061499881716507, + "C13" : 0.0007104115886757574, + "W180" : 0.001102544205197136, + "W182" : 0.2461866490413581, + "W183" : 0.1336729173424502, + "W184" : 0.2877806587523173, + "W186" : 0.2699318202528366 + }, + "density" : 15.630, + "mass" : 195.8525155763622, + "metadata" : { + "citation" : "CRChandbook64B152", + "mat_number" : 53, + "name" : "WC" + } + }, + "Water" : { + "atoms_per_molecule" : -1.0, + "comp" : { + "H1" : 0.1118682871008074, + "H2" : 2.571289919257534e-05, + "O16" : 0.8856992571677722, + "O17" : 0.0003585678199979346, + "O18" : 0.002048175012229886 + }, + "density" : 1.0, + "mass" : 100.0, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 5, + "name" : "Water" + } + }, + "ZrH2" : { + "atoms_per_molecule" : 3.0, + "comp" : { + "H1" : 0.02161549278436418, + "H2" : 4.968315877236527e-06, + "Zr90" : 0.4960982786891807, + "Zr91" : 0.1093915151284053, + "Zr92" : 0.1690454094019398, + "Zr94" : 0.1750429041676724, + "Zr96" : 0.02880143151256027 + }, + "density" : 5.610, + "mass" : 93.23952429992536, + "metadata" : { + "citation" : "pnnl-15870rev1", + "mat_number" : 51, + "name" : "ZrH2" + } + } +} + diff --git a/Enrich_methods/material_library.py b/Enrich_methods/material_library.py new file mode 100644 index 0000000..dadf4f7 --- /dev/null +++ b/Enrich_methods/material_library.py @@ -0,0 +1,601 @@ +from material_db_toolss2 import make_mat, make_mat_from_atom +from pyne.material import Material +from pyne.material_library import MaterialLibrary + +mat_data = {} + +# fullreference: KluehJNM_2000 R.L. Klueh et al. jnm 2000 DOI:10.1016/S0022-3115(00)00060-X +mat_data["MF82H"] = { + "nucvec": { + 60000000: 0.1, + 230000000: 0.2, + 240000000: 7.5, + 260000000: 90.18, + 730000000: 0.02, + 740000000: 2.0, + }, + "density": 7.89, + "citation": "KluehJNM_2000", +} + +# fullreference: ChenNucEngTech_2013 Y. Chen Nuclear and Engineering Technology, vol. 45, 2013. https://doi.org/10.5516/NET.07.2013.706 +# fullreference: SmithBCSSANLvol2_1984, D.L. Smith et al., "Blanket Comparison and Selection Study Final Report", ANL/FPP-84-1, volume 2, Chapter 6, 1984. (HT-9 density pdf page 32 and 49) +mat_data["HT9"] = { + "nucvec": { + 60000000: 0.2, + 230000000: 0.25, + 240000000: 12.0, + 260000000: 85.55, + 280000000: 0.5, + 420000000: 1.0, + 740000000: 0.5, + }, + "density": 7.8, # density BCSSvol2 pdf page 32 and page 49 + "citation": "KluehJNM_2000 and SmithBCSSANLvol2_1984", +} + +# fullreference: MergiaJNM_2008 K. Mergia, N. Boukos jnm 2008 https://doi.org/10.1016/j.jnucmat.2007.03.267 +# wt percent 0.11C, 8.9Cr, 0.42Mn, 0.19V, 1.10W, 0.14Ta, balance Fe +mat_data["EUROFER97"] = { + "nucvec": { + 60000000: 0.11, + 230000000: 0.19, + 240000000: 8.9, + 250000000: 0.42, + 260000000: 89.14, + 730000000: 0.14, + 740000000: 1.10, + }, + "density": 7.75, + "citation": "MergiaJNM_2008", +} + +# reference: KluehJNM_2000 MF82H with 3 wt. percent B replacing some Fe +mat_data["BMF82H"] = { + "nucvec": { + 50000000: 3.0, + 60000000: 0.1, + 230000000: 0.2, + 240000000: 7.5, + 260000000: 87.18, + 730000000: 0.02, + 740000000: 2.0, + }, + "density": 7.89, + "citation": "KluehJNM_2000", +} + +# fullreference: pnnl-15870rev1 R.J. McConn, et al. "Compendium of Material Composition Data for Radiation Transport Modeling", PNNL-15870 Rev. 1, 2011. +mat_data["Water"] = { + "nucvec": {10000000: 11.1894, 80000000: 88.8106}, + "density": 1.0, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["SiC"] = { + "nucvec": {60000000: 29.9547, 140000000: 70.0453}, + "density": 3.21, + "citation": "pnnl-15870rev1", +} + +# note SS-316L(N)-IG and EUROFER composition (but not density) in +# reference: GilbertNucFus_2017 +# M. Gilbert et al., Nucl. Fusion 57 (2017) 046015 +# https://doi.org/10.1088/1741-4326/aa5bd7 +# +# more extensive collection of ITER materials composition but not density +# fullreference: GilbertHandbookITERCCFE_2016 M. Gilbert, et al., "Handbook of activation, transmutation, and radiation damage properties of the elements and of ITER materials simulated using FISPACT-II & TENDL-2015; ITER FW armour focus", CCFE-R(16)37, September 2016. https://fispact.ukaea.uk/wp-content/uploads/2016/10/CCFE-R1637.pdf + +# reference: GilbertHandbookITERCCFE_2016 +# contains 300 wppm B which is important to assess typical He production level +mat_data["SS316LN"] = { + "nucvec": { + 50000000: 0.030, + 60000000: 0.030, + 70000000: 0.160, + 140000000: 1.0, + 150000000: 0.030, + 160000000: 0.020, + 240000000: 17.250, + 250000000: 2.00, + 260000000: 64.830, + 270000000: 0.100, + 280000000: 12.00, + 410000000: 0.050, + 420000000: 2.5, + }, + "density": 7.93, + "citation": "GilbertHandbookITERCCFE_2016", +} + +# reference: GilbertHandbookITERCCFE_2016 10 wppm B which is important to assess typical He production level +mat_data["SS316LNIG"] = { + "nucvec": { + 50000000: 0.001, + 60000000: 0.03, + 70000000: 0.070, + 140000000: 0.50, + 150000000: 0.025, + 160000000: 0.010, + 220000000: 0.10, + 240000000: 17.50, + 250000000: 1.80, + 260000000: 64.844, + 270000000: 0.05, + 280000000: 12.25, + 290000000: 0.30, + 410000000: 0.010, + 420000000: 2.5, + 730000000: 0.01, + }, + "density": 7.93, + "citation": "GilbertHandbookITERCCFE_2016", +} + +# reference: pnnl-15870rev1 +# added 10 wppm B which is important to assess typical He production level +mat_data["SS316L"] = { + "nucvec": { + 50000000: 0.001, + 60000000: 0.03, + 140000000: 1.0, + 150000000: 0.045, + 160000000: 0.03, + 240000000: 17, + 250000000: 2, + 260000000: 65.394, + 280000000: 12, + 420000000: 2.5, + }, + "density": 8.00, + "citation": "pnnl-15870rev1", +} + +# reference: FESS-FNSF very similar to GFFpolyimide from ARIES +mat_data["Eins"] = { + "nucvec": { + 10000000: 1.96, + 60000000: 24.12, + 70000000: 1.46, + 80000000: 40.19, + 120000000: 3.92, + 130000000: 8.6, + 140000000: 19.75, + }, + "density": 1.8, + "citation": "FESS-FNSF and ARIES GFFpolyimide", +} + +# fullreference: BohmFusSciTec_2019 https://doi.org/10.1080/15361055.2019.1600930 +# fullreference: MartelliFusEngDes_2019 https://doi.org/10.1016/j.fusengdes.2018.11.028 +mat_data["Pb157Li90"] = { + "nucvec": {30060000: 0.4905, 30070000: 0.0545, 820000000: 99.455}, + "density": 9.32, # not sure of Temperature + "molecular_mass": 175.6273, + "citation": "BohmFusSciTec_2019", +} + + +# fullreference: ElGuebalyARIESCSFTI_2006 L. El-Guebaly, "Final Radial Build and Composition for LiPb/FS/He System", Sep. 2006. https://fti.neep.wisc.edu/fti.neep.wisc.edu/aries/BUILD-CS/build092606.pdf +# fullreference: HeizenroederComments2005 P. Heizenroeder and R. Reed "Comments on Selection of U.S. ITER CS Coil Jacket Material", Sep. 12, 2005 +mat_data["JK2LBSteel"] = { + "nucvec": { + 50000000: 0.002, + 60000000: 0.02, + 70000000: 0.2, + 140000000: 0.3, + 150000000: 0.004, + 160000000: 0.004, + 240000000: 13, + 250000000: 21, + 260000000: 55.47, + 280000000: 9, + 420000000: 1, + }, + "density": 8.0, + "citation": "ElGuebalyARIESCSFTI_2006", +} + +# reference: FESS-FNSF and ??? +mat_data["TernaryNb3Sn"] = { + "nucvec": {410000000: 68.95, 500000000: 30, 220000000: 1.05}, + "density": 8.9, + "citation": "FESS-FNSF and ???", +} + +# reference: ITER and CRC Handbook of Chemistry and Physics density at 4 K +# fullreference: CRChandbook64 64th CRC Handbook of Chemistry and Physics page B-117, density at 4 K +mat_data["LHe"] = { + "nucvec": {20000000: 100}, + "density": 0.149, + "citation": "CRChandbook64B117", +} + +# fullreference: JawadORNL_2005 M. Jawad et al. , "Development of a New Class of Fe-3Cr-W(V) Ferritic Steels for Industrial Process Applications", ORNL/TM-2005/82, 2005. https://doi.org/10.2172/838517 +mat_data["Cr3FS"] = { + "nucvec": { + 60000: 0.1, + 140000: 0.14, + 230000: 0.25, + 240000: 3.0, + 250000: 0.5, + 260000: 93.01, + 740000: 3.0, + }, + "density": 7.89, + "citation": "JawadORNL_2005 and ???", +} + +# ODS LiPb-corrosion-resistant steel with Present impurities removed +# fullreference: PintDOE_ER_0313_57_2014 B. Pint et al., DEVELOPMENT OF ODS FeCrAl FOR FUSION REACTOR APPLICATIONS, Fusion Reactor Materials Program Semi-annual Report, Dec. 2014, DOE/ER- 0313/57 Section 2.1, https://fmp.ornl.gov/semiannual-progress-reports/fusion-materials-semiannual-progress-report-57.pdf +# reference: KluehJNM_2000 (for some impurities) +# Density = 7.799 g/cm3, as determined for 14YWT alloy, per David Hoelzer +# +mat_data["ODS125Y"] = { + "nucvec": { + 60000000: 0.0380, + 70000000: 0.0455, + 80000000: 0.8420, + 130000000: 4.8, + 140000000: 0.02, + 160000000: 0.0020, + 220000000: 0.01, + 240000000: 11.4, + 260000000: 82.6025, + 390000000: 0.19, + 740000000: 0.05, + }, + "density": 7.799, + "citation": "PintDOE_ER_0313_57_2014 and KluehJNM_2000 ", +} + +# reference: pnnl-15870rev1 at T=20C +mat_data["D2O"] = { + "nucvec": {10020000: 20.1133, 80000000: 79.8867}, + "density": 1.10534, + "citation": "pnnl-15870rev1", +} + +# fullreference: WidodoJoPCS_2018 Journal of Physics Conference Series doi:10.1088/1742-6596/962/1/012039 and KTA Standards 1986 +# also reference: pnnl-15870rev1 +mat_data["HeNIST"] = { + "nucvec": {20000000: 100}, + "density": 0.00016647, # at 20 C (293.15 K), 1 atm (1.01325 bar) + "citation": "WidodoJoPCS_2018 and pnnl-15870rev1", +} + +# high pressure He gas ref. +# reference: WidodoJoPCS_2018 doi:10.1088/1742-6596/962/1/012039 and KTA Standards 1986 +mat_data["HeT410P1"] = { + "nucvec": {20000000: 100}, + "density": 0.00007048, # at 410 C, 1 bar + "citation": "WidodoJoPCS_2018", +} + +mat_data["HeT410P80"] = { + "nucvec": {20000000: 100}, + "density": 0.00571698, # at 410 C, 80 bar + "citation": "WidodoJoPCS_2018", +} + +# air (Dry, Near Sea Level) +# reference: pnnl-15870rev1 +mat_data["AirSTP"] = { + "nucvec": { + 60000000: 0.0124, + 70000000: 75.5268, + 80000000: 23.1781, + 180000000: 1.2827, + }, + "density": 0.001205, + "citation": "pnnl-15870rev1", +} + +# concrete (Ordinary NBS 04) +# reference: pnnl-15870rev1 +mat_data["Concrete"] = { + "nucvec": { + 10000000: 0.5558, + 80000000: 49.8076, + 110000000: 1.7101, + 120000000: 0.2565, + 130000000: 4.5746, + 140000000: 31.5092, + 160000000: 0.1283, + 190000000: 1.9239, + 200000000: 8.2941, + 260000000: 1.2398, + }, + "density": 2.35, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["W"] = { + "nucvec": {740000000: 100.0}, + "density": 19.30, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Fe"] = { + "nucvec": {260000000: 100.0}, + "density": 7.874, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Na"] = { + "nucvec": {110000000: 100.0}, + "density": 0.971, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 reactor graphite without boron impurity +mat_data["C"] = { + "nucvec": {60000000: 1.0}, + "density": 1.7, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Si"] = { + "nucvec": {140000000: 1.0}, + "density": 2.33, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Cu"] = { + "nucvec": {290000000: 1.0}, + "density": 8.96, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Sn"] = { + "nucvec": {500000000: 1.0}, + "density": 7.31, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Ta"] = { + "nucvec": {730000000: 1.0}, + "density": 16.654, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Pb"] = { + "nucvec": {820000000: 100.0}, + "density": 11.35, + "citation": "pnnl-15870rev1", +} + +# fullreference: HernandezFusEngDes_2018 F.A. Hernandez, P. Pereslavtsev, Fusion Engineering and Design vol. 137, 2018 https://doi.org/10.1016/j.fusengdes.2018.09.014 +mat_data["Be"] = { + "nucvec": {40000000: 1.0}, + "density": 1.85, + "citation": "HernandezFusEngDes_2018", +} + +# reference: HernandezFusEngDes_2018 +# F.A. Hernandez, P. Pereslavtsev, Fusion Engineering and Design vol. 137, 2018 +# https://doi.org/10.1016/j.fusengdes.2018.09.014 +mat_data["Be12Ti"] = { + "atom_frac": {40000000: 12, 220000000: 1}, + "density": 2.28, + "citation": "HernandezFusEngDes_2018", +} + +# reference: HernandezFusEngDes_2018 +# F.A. Hernandez, P. Pereslavtsev, Fusion Engineering and Design vol. 137, 2018 +# https://doi.org/10.1016/j.fusengdes.2018.09.014 +mat_data["Be12V"] = { + "atom_frac": {40000000: 12, 230000000: 1}, + "density": 2.39, + "citation": "HernandezFusEngDes_2018", +} + +li6enrichment = 0.60 # weight fraction enrichment of Li-6 desired +li6enrichStr = f"Li{li6enrichment * 100}" +liXweightfraction = Material( + {"Li6": li6enrichment, "Li7": (1.0 - li6enrichment)} +) + +# Li ceramics +# reference: HernandezFusEngDes_2018 F.A. Hernandez, P. Pereslavtsev, Fusion Engineering and Design vol. 137, 2018 https://doi.org/10.1016/j.fusengdes.2018.09.014 +# F.A. Hernandez, et al., Fusion Engineering and Design, Volume 157, 2020, 111614 +# https://doi.org/10.1016/j.fusengdes.2020.111614 +# ceramic breeders Li4SiO4 and Li2TiO3 at 60 wt. percent Li-6 EU-DEMO +# note manufacturing may result in lower density of 80-90% of theoretical + +mat_data["Li4SiO4nat"] = { + "atom_frac": {30000000: 4, 80000000: 4, 140000000: 1}, + "density": 2.40, + "citation": "HernandezFusEngDes_2018", +} + +mat_data["Li2TiO3nat"] = { + "atom_frac": {30000000: 2, 80000000: 3, 220000000: 1}, + "density": 3.43, + "citation": "HernandezFusEngDes_2018", +} + +mat_data["Li4SiO4" + li6enrichStr] = { + "atom_frac": {liXweightfraction: 4, 80000000: 4, 140000000: 1}, + "density": 2.40, + "citation": "HernandezFusEngDes_2018", +} + +mat_data["Li2TiO3" + li6enrichStr] = { + "atom_frac": {liXweightfraction: 2, 80000000: 3, 220000000: 1}, + "density": 3.43, + "citation": "HernandezFusEngDes_2018", +} + +# fullreference: SohalINLEXT-10-18297_2013 M. Sohal et al., "Engineering Database of Liquid Salt Thermophysical and Thermochemical Properties", INL/EXT-10-18297, June 2013. https://inldigitallibrary.inl.gov/sites/STI/STI/5698704.pdf +mat_data["FlibeNat"] = { + "atom_frac": {30000000: 2, 40000000: 1, 90000000: 4}, + "density": 1.94, + "citation": "SohalINLEXT-10-18297_2013", +} + +# reference: SohalINLEXT-10-18297_2013 M. Sohal et al., "Engineering Database of Liquid Salt Thermophysical and Thermochemical Properties", INL/EXT-10-18297, June 2013. https://inldigitallibrary.inl.gov/sites/STI/STI/5698704.pdf +mat_data["Flibe" + li6enrichStr] = { + "atom_frac": {liXweightfraction: 2, 40000000: 1, 90000000: 4}, + "density": 1.94, + "citation": "SohalINLEXT-10-18297_2013", +} + +# reference: pnnl-15870rev1 at STP +mat_data["LiNat"] = { + "nucvec": {30000000: 1.0}, + "density": 0.534, # at STP + "citation": "pnnl-15870rev1", +} + +# reference: BohmFusSciTec_2019 rho=0.485 g/cm3 at T=500 C +mat_data["LiNatT500"] = { + "nucvec": {30000000: 1.0}, + "density": 0.485, # at T=500 C + "citation": "BohmFusSciTec_2019", +} + +# reference: pnnl-15870rev1 +mat_data[li6enrichStr] = { + "atom_frac": {liXweightfraction: 1}, + "density": 0.534, # at STP + "citation": "pnnl-15870rev1", +} + +# reference: BohmFusSciTec_2019 rho=0.485 g/cm3 at T=500 C +mat_data[li6enrichStr + "T500"] = { + "atom_frac": {liXweightfraction: 1}, + "density": 0.485, # at T=500 C + "citation": "BohmFusSciTec_2019", +} + +# reference: pnnl-15870rev1 +mat_data["Mo"] = { + "nucvec": {420000000: 100.0}, + "density": 10.22, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["Aluminum6061"] = { + "nucvec": { + 120000000: 1.0, + 130000000: 97.2, + 140000000: 0.6, + 220000000: 0.088, + 240000000: 0.195, + 250000000: 0.088, + 260000000: 0.4090, + 290000000: 0.275, + 300000000: 0.146, + }, + "density": 2.70, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["OilTexasCrude"] = { + "nucvec": { + 10000000: 12.3246, + 60000000: 85.2204, + 70000000: 0.7014, + 160000000: 1.7535, + }, + "density": 0.875, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["EthyleneGlycol"] = { + "atom_frac": {10000000: 6, 60000000: 2, 80000000: 2}, + "density": 1.114, + "citation": "pnnl-15870rev1", +} + +# reference: pnnl-15870rev1 +mat_data["AluminumOxide"] = { + "atom_frac": {80000000: 3, 130000000: 2}, + "density": 3.97, + "citation": "pnnl-15870rev1", +} + +# fullreference: GrossbeckJNM_1998 M.L. Grossbeck et al.,"Analysis of V-Cr-Ti alloys in terms of activation of impurities", Journal of Nuclear Materials, vol. 258-263, page 1778-1783 1998. https://doi.org/10.1016/S0022-3115(98)00228-1 +# fullreference: ARIES_PropertiesArchive http://qedfusion.org/LIB/PROPS/ +# fullreference: MetalsHandbook_1979 Metals Handbook, Ninth Edition, Vol. 2: "Properties and SelectionNonferrous Alloys and Pure Metals," ASM, Metals Park OH (1979) +mat_data["V4Cr4Ti"] = { + "nucvec": {220000000: 4.0, 230000000: 92.0, 240000000: 4.0}, + "density": 6.05, # room temperature + "citation": "GrossbeckJNM_1998 and density ARIES_PropertiesArchive and MetalsHandbook_1979", +} + +mat_data["ZrH2"] = { + "atom_frac": {10000000: 2, 400000000: 1}, + "density": 5.61, # this is at room temperature + "citation": "pnnl-15870rev1", +} + +# +mat_data["Inconel718"] = { + "nucvec": { + 50000000: 0.0050, + 60000000: 0.0730, + 130000000: 0.5000, + 140000000: 0.3180, + 150000000: 0.0140, + 160000000: 0.0140, + 220000000: 0.9000, + 240000000: 19.0000, + 250000000: 0.3180, + 260000000: 17.0000, + 280000000: 52.5000, + 270000000: 0.9100, + 290000000: 0.2730, + 410000000: 5.1250, + 420000000: 3.0500, + }, + "density": 8.19, # room temperature + "citation": "pnnl-15870rev1", +} + +# reference: aries.ucsd.edu/PROPS/ITER/AM01/AM01-1100.html +# fullreference: CRChandbook64 Bulk density of WC: 64th CRC Handbook of Chemistry and Physics, B-152 +mat_data["WC"] = { + "atom_frac": {60000000: 1, 740000000: 1}, + "density": 15.63, + "citation": "CRChandbook64B152", +} + +mat_lib = MaterialLibrary() + +for mat_name, mat_input in mat_data.items(): + if "nucvec" in mat_input: + mat_lib[mat_name] = make_mat( + mat_input["nucvec"], + mat_input["density"], + mat_input["citation"], + mat_input.get("molecular_mass"), + ) + if "atom_frac" in mat_input: + mat_lib[mat_name] = make_mat_from_atom( + mat_input["atom_frac"], + mat_input["density"], + mat_input["citation"], + ) + +def main(): + + + mat_lib.write_json("material_library.json") + + +if __name__ == "__main__": + main() diff --git a/Enrich_methods/materials_example.xml b/Enrich_methods/materials_example.xml new file mode 100644 index 0000000..3749ad2 --- /dev/null +++ b/Enrich_methods/materials_example.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file