Source code for festim.trap

from festim.reaction import Reaction as _Reaction
from festim.species import ImplicitSpecies as _ImplicitSpecies
from festim.species import Species as _Species


[docs] class Trap(_Species): """Trap species class for H transport simulation. This class only works for 1 mobile species and 1 trapping level and is for convenience, for more details see notes. Args: name (str, optional): a name given to the trap. Defaults to None. mobile_species (_Species): the mobile species to be trapped k_0 (float): the trapping rate constant pre-exponential factor (m3 s-1) E_k (float): the trapping rate constant activation energy (eV) p_0 (float): the detrapping rate constant pre-exponential factor (s-1) E_p (float): the detrapping rate constant activation energy (eV) volume (F.VolumeSubdomain1D): The volume subdomain where the trap is. Attributes: name (str, optional): a name given to the trap. Defaults to None. mobile_species (_Species): the mobile species to be trapped k_0 (float): the trapping rate constant pre-exponential factor (m3 s-1) E_k (float): the trapping rate constant activation energy (eV) p_0 (float): the detrapping rate constant pre-exponential factor (s-1) E_p (float): the detrapping rate constant activation energy (eV) volume (F.VolumeSubdomain1D): The volume subdomain where the trap is. trapped_concentration (_Species): The immobile trapped concentration trap_reaction (_Reaction): The reaction for trapping the mobile conc. empty_trap_sites (F.ImplicitSpecies): The implicit species for the empty trap sites Examples: .. testsetup:: Trap from festim import Trap, Species, VolumeSubdomain, Material from festim import HydrogenTransportProblem my_mat = Material(D_0=1, E_D=1, name="test_mat") my_vol = VolumeSubdomain(id=1, material=my_mat) H = Species(name="H") .. testcode:: Trap trap = Trap(name="Trap", mobile_species=H, k_0=1.0, E_k=0.2, p_0=0.1, E_p=0.3, n=100, volume=my_vol) my_model = HydrogenTransportProblem() my_model.traps = [trap] Notes: This convenience class replaces the need to specify an implicit species and the associated reaction, thus: .. code:: python cm = _Species("mobile") my_trap = F.Trap( name="trapped", mobile_species=cm, k_0=1, E_k=1, p_0=1, E_p=1, n=1, volume=my_vol, ) my_model.species = [cm] my_model.traps = [my_trap] is equivalent to: .. code:: python cm = _Species("mobile") ct = _Species("trapped") trap_sites = F.ImplicitSpecies(n=1, others=[ct]) trap_reaction = _Reaction( reactant=[cm, trap_sites], product=ct, k_0=1, E_k=1, p_0=1, E_p=1, volume=my_vol, ) my_model.species = [cm, ct] my_model.reactions = [trap_reaction] """ def __init__( self, name: str, mobile_species, k_0, E_k, p_0, E_p, n, volume ) -> None: super().__init__(name) self.mobile_species = mobile_species self.k_0 = k_0 self.E_k = E_k self.p_0 = p_0 self.E_p = E_p self.n = n self.volume = volume self.trapped_concentration = None self.reaction = None
[docs] def create_species_and_reaction(self): """Create the immobile trapped species object and the reaction for trapping.""" self.trapped_concentration = _Species(name=self.name, mobile=False) self.empty_trap_sites = _ImplicitSpecies( n=self.n, others=[self.trapped_concentration] ) self.reaction = _Reaction( reactant=[self.mobile_species, self.empty_trap_sites], product=self.trapped_concentration, k_0=self.k_0, E_k=self.E_k, p_0=self.p_0, E_p=self.E_p, volume=self.volume, )