Source code for mrfmsim.formula.magnetization

import numba as nb
import numpy as np

HBAR = 1.054571628e-7  # aN nm s - reduced Planck constant
KB = 1.3806504e4  # aN nm K^{-1} - Boltzmann constant


[docs] @nb.jit(nopython=True, parallel=True) def mz_eq(B_tot, Gamma, J, temperature): r"""Magnetization per spin at the thermal equilibrium using the Brillouin function. :param float gamma: the gyromagnetic ratio. [rad/s.mT] :param float j: total spin angular momentum :param float temperature: the spin temperature [K] :param float spin_density: the sample spin density :math:`\rho` [1/nm^3] :param float b0: the external magnetic field [mT] :param float bz: tip magnetic field in z [mT] :return: equilibrium per-spin magnetization [aN.nm/mT] The outputs are calculated from the sample properties .. math:: J &= \text{spin angular momentum quantum number}\: [\mathrm{unitless}]\\ \gamma & = \text{gyromagnetic ratio} \: [\mathrm{s}^{-1} \mathrm{mT}^{-1}] \\ B_0 &= \text{applied magnetic field} \: [\mathrm{mT}] \\ T &= \text{temperature} \: [\mathrm{K}] \\ \rho &= \text{spin density} \: [\mathrm{nm}^{-1}] as follows. From the sample properties, we compute the magnetic moment :math:`\mu` of the state with the largest :math:`m_J` quantum number, .. math:: \mu = \hbar\gamma J \: [\mathrm{aN} \: \mathrm{nm} \: \mathrm{mT}^{-1}] We calculate the ratio of the energy level splitting of spin states to the thermal energy, .. math:: x = \dfrac{\mu B_0}{k_b T} \: [\mathrm{unitless}], and define the following two unitless numbers: .. math:: a &= \dfrac{2 \: J + 1}{2 \: J} \\ b &= \dfrac{1}{2 \: J} In terms of these intermediate quantities, the thermal-equilibrium polarization is given by .. math:: p_{\text{eq}} = a \coth{(a x)} - b \coth{(b x)} \: [\mathrm{unitless}]. The equilibrium magnetization is given by .. math:: {\cal M}_{z}^{\text{eq}} = p_{\text{eq}} \: \mu \: [\mathrm{aN} \: \mathrm{nm} \: \mathrm{mT}^{-1}]. In the limit of low field or high temperature, the equilibrium magnetization tends towards the Curie-Weiss law, .. math:: {\cal M}_{z}^{\text{eq}} \approx \dfrac{\hbar^2 \gamma^2 \: J (J + 1)}{3 \: k_b T} B_0 """ mu_z = HBAR * Gamma * J # aN nm s * rad/s mT = aN nm/mT x = (mu_z * B_tot) / (KB * temperature) # unitless a = (2.0 * J + 1.0) / (2.0 * J) # unitless b = 1.0 / (2.0 * J) # unitless pol_eq = a / np.tanh(a * x) - b / np.tanh(b * x) return mu_z * pol_eq # [aN.nm/mT]
[docs] def mz2_eq(Gamma, J): r"""Compute the magnetization variance per spin. :param float gamma: the gyromagnetic ratio. [rad/s.mT] :param float J: total spin angular momentum :return: Mz2_eq, rhoMz_eq """ mu = HBAR * Gamma * np.sqrt(J * (J + 1) / 3.0) # aN.nm/mT return mu**2 # aN^2