Skip to main content

Metallurgy

Tests Documentation Status

The Metallurgy package enables calculation of approximate properties of alloy mixtures, based on the linear mixture of elemental properties.

Installation

The metallurgy package can be installed from pypi using pip:

pip install metallurgy

Usage

Alloys

Most of the features of metallurgy are based on the concept of an alloy, a mixture of elements:

import metallurgy as mg

Bronze = mg.Alloy("Cu88Sn12")

An alloy can be defined in several ways:

>>> mg.Alloy("Cu50Zr50")
Cu50Zr50

>>> mg.Alloy("CuZr")
Cu50Zr50

>>> mg.Alloy("CuZrFeCo")
Cu25Zr25Fe25Co25

>>> mg.Alloy("(Fe70Co30)50Ni50")
Ni50Fe35Co15

>>> mg.Alloy("(FeCo)50Ni50")
Ni50Fe25Co25

>>> mg.Alloy({"Pt": 30, "Al": 45, "Ag": 25})
Al45Pt30Ag25

While formally, an alloy is defined as "a mixture of chemical elements of which at least one is a metal", no such limitation is enforced in this package -- you can create any mixture you want.

An Alloy object has access to properties containing the percentage values of the composition, the elements in the composition, and has helper functions which can convert the composition to a simple string or even a LaTeX formatted string:

>>> Bronze.composition
{'Cu': 0.88, 'Sn': 0.12}

>>> Bronze.elements
['Cu', 'Sn']

>>> Bronze.to_string()
'Cu88Sn12'

>>> Bronze.to_pretty_string()
'Cu$_{88}$Sn$_{12}$'

Calculating alloy properties

Properties of alloys may be approximated from the properties of their constituent elements via the linear mixture rule:

$$\Sigma A = \sum_{i=1}^{N} c_i A_i $$

where $\Sigma A$ is the approximate mixed value of a property $A$ for an alloy that contains $N$ elements with percentages $c_i$. Similarly, the deviation of these elemental property values for the elements present in an alloy can be calculated:

$$\delta A = \sqrt{\sum_{i=1}^{N} c_i \left(1 - \frac{A_i}{\Sigma A}\right)^2} $$

The metallurgy package can be used to calculate a variety of approximate alloy properties:

Bronze = mg.Alloy("Cu88Sn12")

>>> mg.linear_mixture(Bronze, "mass")
70.16568

>>> mg.linear_mixture(Bronze, "density")
8.7566

>>> mg.linear_mixture(Bronze, "valence")
2.24

>>> mg.deviation(Bronze, "mass")
17.926178182133523

>>> mg.deviation(Bronze, "density")
0.5508098038343185

>>> mg.deviation(Bronze, "valence")
0.6499230723708769

Elemental data is provided by the elementy package. Metallurgy can calculate a variety of other alloy properties that are more complex than simple linear mixture or deviations of elemental properties:

>>> mg.enthalpy.mixing_Gibbs_free_energy(Bronze)
-2039.0961905675026

>>> mg.entropy.ideal_entropy(Bronze)
0.3669249912727096

>>> mg.density.theoretical_density(Bronze)
8.554783679490685

>>> mg.valence.d_valence(Bronze)
0.8661417322834646

See our June 2022 paper "Machine-learning improves understanding of glass formation in metallic systems" that used code which later became the metallurgy package for definitions of these alloy properties.

Generating alloy datasets

Metallurgy can also be used to generate collections of alloys, either randomly or across a composition-space.

>>> mg.generate.binary(["Fe", "Co"], step=10)
[Fe100, Fe90Co10, Fe80Co20, Fe70Co30, Fe60Co40,
Fe50Co50, Co60Fe40, Co70Fe30, Co80Fe20, Co90Fe10, Co100]

>>> mg.generate.ternary(["Fe", "Co", "Al"], step=20)
[Fe100, Fe80Co20, Fe80Al20, Fe60Co40, Fe60Co20Al20,
Fe60Al40, Co60Fe40, Fe40Co40Al20, Fe40Al40Co20, Al60Fe40,
Co80Fe20, Co60Fe20Al20, Co40Al40Fe20, Al60Fe20Co20,
Al80Fe20, Co100, Co80Al20, Co60Al40, Al60Co40, Al80Co20, Al100]

>>> mg.generate.random_alloy()
Cs28.9Db25.4Hs12Ce11.9La10.6Cu9.6Kr1.6

>>> mg.generate.random_alloy()
Ba94.5Y5.5

We can apply constraints to the randomly generated alloy, such as limits on the maximum and minimum number of constituent elements, requirements on the percentage range that particular elements must be within, and whitelists of allowed elements:

>>> mg.generate.random_alloy(min_elements=2, max_elements=3)
Au50.7Hf36.3Ru13

>>> mg.generate.random_alloy(min_elements=2, max_elements=3, percentage_constraints={"Cu":{"min":0.3, "max":0.8}})
Cu63.9Sr23.9Be12.2

>>> mg.generate.random_alloy(min_elements=2, max_elements=3, percentage_constraints={"Cu":{"min":0.3, "max":0.8}}, allowed_elements=["Fe", "Cu", "Co", "Ni", "Yb"])
Yb64.8Cu30Ni5.2

The process of generating random alloys can be performed in bulk to create datasets of random alloys:

>>> mg.generate.random_alloys(10, min_elements=2, max_elements=3)
[Fl94.6Xe5.4, Po64.2Tl23.3Np12.5, Tb61.6Ta38.4, Lu50.8Ho38.1In11.1, Rn69Es31, S70.4Ts29.6, Pr79.3He13.4Cm7.3, As84.3V15.7, Ge45.3Xe41.2Na13.5, Ra70.4He29.6]

Plotting alloy information

Once you have created a dataset of alloys, you may wish to view graphically a particular material property on a population level:

>>> binary, percentages = mg.generate.binary(["Cu", "Zr"])
>>> mixing_enthalpies = mg.enthalpy.mixing_enthalpy(binary)
>>> mg.plots.binary(binary, mixing_enthalpies, ylabel="Mixing enthalpy (kJ/mol)")

CuZr binary mixing enthalpy

>>> ternary, percentages = mg.generate.ternary(["Cu", "Zr", "Al"])
>>> mixing_enthalpies = mg.enthalpy.mixing_enthalpy(ternary)
>>> mg.plots.ternary(ternary, mixing_enthalpies, label="Mixing enthalpy (kJ/mol)")

CuZrAl ternary mixing enthalpy

>>> import matplotlib.pyplot as plt
>>> alloys = mg.generate.random_alloys(10000)
>>> plt.hist(mg.linear_mixture(alloys, "density"))

Histogram of densities

Documentation

Documentation is available here.

Metadata

Release files for metallurgy 0.0.33

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metallurgy 0.0.33
File Size Uploaded
metallurgy-0.0.33.tar.gz 217.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for metallurgy 0.0.33
File Interpreter ABI Platform
metallurgy-0.0.33-py3-none-any.whl Python 3 none any Details

Total release size: 263.3 kB

Release files / metallurgy-0.0.33.tar.gz

Download URL metallurgy-0.0.33.tar.gz
Size 217.1 kB
Tags Source
SHA-256 checksum
How to use checksums
597b4131e47f82edfd7e9ce259d6f93c4f13641b396d233b1f92404a2d41fa1a
BLAKE2b-256 checksum
How to use checksums
411c3ea9b100f797f5b33ad06e6a952a0564847c3f6215c11b5be097fa6e8e39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.4

Release files / metallurgy-0.0.33-py3-none-any.whl

Download URL metallurgy-0.0.33-py3-none-any.whl
Size 46.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
604a51413ba67a9754fb7795c8af285abe4c4819f60bccfe09bafdf9ab283296
BLAKE2b-256 checksum
How to use checksums
c6ec7492fc69b81e580d6bce38c6ce516c273dea5c46d43b8dc845315a7398d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.4

Release history Release notifications | RSS feed

This release

0.0.33 This release

2 release files

0.0.31

2 release files

0.0.30

2 release files

0.0.29

2 release files

0.0.28

2 release files

0.0.27

2 release files

0.0.26

2 release files

0.0.25

2 release files

0.0.24

2 release files

0.0.23

2 release files

0.0.22

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page