Defining a property
Contents
Defining a property#
Most - if not all - H transport properties are thermally activated. Meaning they follow the Arrhenius law:
\(X = X_0 \ \exp{\left( \frac{-E_X}{k_B \ T} \right)}\)
Here, \(X_0\) is called the pre-exponential factor and \(E_X\) is the activation energy. \(T\) is the temperature and \(k_B\) is the Boltzman constant.
The Arrhenius law is sometimes written as: \(X = X_0 \ \exp{\left( \frac{-E_X}{R_g \ T} \right)}\) with \(R_g\) the gas constant.
Note, \(R_g\) and \(k_B\) are linked by Avogadro’s number \(N_A\).
\(R_g = N_A \ k_B\)
Arrhenius parameters#
Properties can be defined in HTM by using the ArrheniusProperty() class.
from h_transport_materials import ArrheniusProperty
my_property = ArrheniusProperty(pre_exp=1, act_energy=0.2)
More precise classes can also be used like Diffusivity(), Solubility(), Permeability(), RecombinationCoeff(), DissociationCoeff().
from h_transport_materials import Diffusivity, Solubility, Permeability
my_diff = Diffusivity(D_0=1, E_D=0.2)
my_sol = Solubility(units="m-3 Pa-1/2", S_0=1, E_S=0.2)
my_perm = Permeability(pre_exp=1, act_energy=0.2)
Note, Solubility() has a units argument because depending on the material, the units can be m-3 Pa-1/2 (Sievert’s law of solubility) or m-3 Pa-1 (Henry’s law of solubility).
Temperature range#
A temperature range can be associated with a property.
from h_transport_materials import ArrheniusProperty
my_property = ArrheniusProperty(pre_exp=1, act_energy=0.2, range=(300, 400))
In this example, the property is defined over the 300-400 K temperature range (see Units for more information on units).
Property from experimental data#
It is possible to define an ArrheniusProperty() directly from (T,y) points.
In this case, the Arrhenius parameters will be fitted automatically from the data points.
from h_transport_materials import ArrheniusProperty
my_property = ArrheniusProperty(
data_T=[400, 500, 600, 700],
data_y=[200, 300, 400, 500]
)
print(my_property)
Author:
Material:
Year: None
Isotope: None
Pre-exponential factor: 1.67×10³
Activation energy: 7.34×10⁻² eV/particle
Attach a material#
A material can be attached to a property. The simple case is to give the material as a string:
from h_transport_materials import ArrheniusProperty
my_property = ArrheniusProperty(
pre_exp=1,
act_energy=0.2,
material="tungsten"
)
If the material already exists in the material database, the HTM object can be used instead:
from h_transport_materials import ArrheniusProperty, TUNGSTEN
my_property = ArrheniusProperty(
pre_exp=1,
act_energy=0.2,
material=TUNGSTEN
)
Units#
HTM uses pint to automatically converts units.
If no units are given, defaults units are assumed.
The units are stored in a pint.UnitRegistry that can be accessed by h_transport_materials.ureg.
from h_transport_materials import Diffusivity, ureg
my_property = Diffusivity(
D_0=1 * ureg.cm**2 * ureg.s**-1,
E_D=20 * ureg.kJ * ureg.mol**-1,
)
print(my_property.pre_exp)
print(my_property.act_energy)
0.0001 meter ** 2 / second
0.20728539312524347 electron_volt / particle
This is extremely useful when units start getting complicated:
from h_transport_materials import Permeability, ureg
my_perm = Permeability(
pre_exp=1 * ureg.mol * ureg.cm**-1 * ureg.hour**-1 * ureg.bar**-0.5,
act_energy=20 * ureg.kcal * ureg.mol**-1,
)
print(my_perm.pre_exp)
print(my_perm.act_energy)
5.289911442149285e+19 particle / meter / pascal ** 0.5 / second
0.8672820848360187 electron_volt / particle
Most attributes of properties in HTM are pint.Quantity objects: pre-exponential factors, activation energies, temperature range.
Visit the pint documentation to learn more.
Evaluate property at a given temperature#
It is possible to evaluate the value of a property at a given temperature.
from h_transport_materials import Diffusivity, ureg
D = Diffusivity(
D_0=1 * ureg.cm**2 * ureg.s**-1,
E_D=20 * ureg.kJ * ureg.mol**-1,
)
print(D.value(400 * ureg.K))
2.4446573022139513e-07 meter ** 2 / second
To visualise the temperature dependency of an Arrhenius property, see Plotting.
Add a reference#
import h_transport_materials as htm
D = htm.Diffusivity(
D_0=1,
E_D=0.2,
author="Shrek",
year=2023,
source="name of book"
)
Alternatively, one can provide a source in the Bib format.
import h_transport_materials as htm
bibsource = """@article{my_shrek_reference,
title = {Name of Book},
doi = {10.1016/awesome.journal.2023.1234},
journal = {An Awesome Journal},
author = {Shrek},
year = {2023},
pages = {1--2},
}"""
D = htm.Diffusivity(
D_0=1,
E_D=0.2,
source=bibsource
)
print(D.author)
print(D.year)
print(D.doi)
shrek
2023
10.1016/awesome.journal.2023.1234
Add notes#
Sometimes it is useful to add custom notes to a property.
import h_transport_materials as htm
D = htm.Diffusivity(
D_0=1,
E_D=0.2,
note="this was measured under atmospheric pressure",
)