Source code for festim.concentration.traps.neutron_induced_trap
from festim import ExtrinsicTrapBase, k_B
import fenics as f
[docs]
class NeutronInducedTrap(ExtrinsicTrapBase):
"""
Class for neutron induced trap creation with annealing.
The temporal evolution of the trap density is given by
dn_t/dt = phi*K*(1 - n_t/n_max) - A_0*exp(-E_A/(k_B*T))*n_t
Args:
k_0 (float, list): trapping pre-exponential factor (m3 s-1)
E_k (float, list): trapping activation energy (eV)
p_0 (float, list): detrapping pre-exponential factor (s-1)
E_p (float, list): detrapping activation energy (eV)
materials (list or int): the materials ids the trap is living in
phi (float, sympy.Expr, f.Expression, f.UserExpression):
damage rate (dpa s-1),
K (float, sympy.Expr, f.Expression, f.UserExpression):
trap creation factor (m-3 dpa-1),
n_max (float, sympy.Expr, f.Expression, f.UserExpression):
maximum trap density (m-3),
A_0 (float, sympy.Expr, f.Expression, f.UserExpression):
trap_annealing_factor (s-1),
E_A (float, sympy.Expr, f.Expression, f.UserExpression):
annealing activation energy (eV).
id (int, optional): The trap id. Defaults to None.
"""
def __init__(
self,
k_0,
E_k,
p_0,
E_p,
materials,
phi,
K,
n_max,
A_0,
E_A,
id=None,
**kwargs,
):
super().__init__(
k_0,
E_k,
p_0,
E_p,
materials,
phi=phi,
K=K,
n_max=n_max,
A_0=A_0,
E_A=E_A,
id=id,
**kwargs,
)
[docs]
def create_form_density(self, dx, dt, T):
"""
Creates the variational formulation for the extrinsic trap density.
Args:
dx (fenics.Measure): the dx measure of the sim
dt (festim.Stepsize): the stepsize of the simulation.
T (festim.Temperature): the temperature of the
simulation
"""
density = self.density[0]
T = T.T
F = (
((density - self.density_previous_solution) / dt.value)
* self.density_test_function
* dx
)
F += (
-self.phi
* self.K
* (1 - (density / self.n_max))
* self.density_test_function
* dx
)
F += (
self.A_0
* f.exp(-self.E_A / (k_B * T))
* density
* self.density_test_function
* dx
)
self.form_density = F