.. index:: CrystalFieldMoment
This function calculates the crystal field contribution to the magnetic moment as a function of temperature at a constant applied magnetic field in a specified direction, in either atomic (\mu_B//ion), SI (Am2/mol) or cgs (erg/Gauss/mol == emu/mol) units.
The magnetic moment is calculated as the thermal expectation value of the magnetic moment operator \mathbf{\mu} = g_J \mu_B \mathbf{J}:
M(B) = \frac{1}{Z} \sum_n \langle V_n(H) | g_J \mathbf{J} | V_n(H) \rangle \exp(-\beta E_n(H))
where B is the magnetic field in Tesla, g_J is the Landé g-factor, and \mu_B is the Bohr magneton. The moment operator is defined as \mathbf{J} = \hat{J}_x B_x + \hat{J}_y B_y + \hat{J}_z B_z where \hat{J}_x, \hat{J}_y, and \hat{J}_z are the angular momentum operators in Cartesian coordinates, with z defined to be along the quantisation axis of the crystal field (which is usually defined to be the highest symmetry rotation axis). B_x, B_y, and B_z are the components of the unit vector pointing in the direction of the applied magnetic field in this coordinate system. V_n(B) and E_n(B) are the nth eigenvector and eigenvalue (wavefunction and energy) obtained by diagonalising the Hamiltonian:
\mathcal{H} = \mathcal{H}_{\mathrm{cf}} + \mathcal{H}_{\mathrm{Zeeman}} = \sum_{k,q} B_k^q \hat{O}_k^q - g_J \mu_B \mathbf{J}\cdot\mathbf{B}
where in this case the magnetic field \mathbf{B} is not normalised. Finally, \beta = 1/(k_B T) with k_B the Boltzmann constant and T the temperature, and Z is the partition sum Z = \sum_n \exp(-\beta E_n(H)).
Here is an example of how to fit M(T) to a measured dataset. All parameters disallowed by symmetry are fixed automatically. The "data" here is generated from the function itself.
The x-axis is the temperature in Kelvin, and the magnetic moment (y-axis) is in Am2/mol (SI units), and the "measurement" was done with a field of 0.01 Tesla along the [110] direction of the crystal field (not necessarily the crystallographic [110] direction).
.. testcode:: ExampleCrystalFieldMoment import numpy as np # Build a reference data set fun = 'name=CrystalFieldMoment,Ion=Ce,B20=0.37737,B22=0.039770,B40=-0.031787,B42=-0.11611,B44=-0.12544,' fun += 'Hmag=0.01, Hdir=(1,1,0), Unit=SI,' # This creates a (empty) workspace to use with EvaluateFunction x = np.linspace(1, 300, 300) y = x * 0 e = y + 1 ws = CreateWorkspace(x, y, e) # The calculated data will be in 'data', WorkspaceIndex=1 EvaluateFunction(fun, ws, OutputWorkspace='data') # Change parameters slightly and fit to the reference data fun = 'name=CrystalFieldMoment,Ion=Ce,Symmetry=C2v,B20=0.37,B22=0.04,B40=-0.032,B42=-0.12,B44=-0.13,' fun += 'Hmag=0.01, Hdir=(1,1,0), Unit=SI,' fun += 'ties=(B60=0,B62=0,B64=0,B66=0,BmolX=0,BmolY=0,BmolZ=0,BextX=0,BextY=0,BextZ=0)' # (set MaxIterations=0 to see the starting point) Fit(fun, 'data', WorkspaceIndex=1, Output='fit',MaxIterations=100, CostFunction='Unweighted least squares') # Using Unweighted least squares fit because the data has no errors. # Extract fitted parameters parws = mtd['fit_Parameters'] for i in range(parws.rowCount()): row = parws.row(i) if row['Value'] != 0: print("%7s = % 7.5g" % (row['Name'], row['Value']))
.. testcleanup:: ExampleCrystalFieldMoment
.. testoutput:: ExampleCrystalFieldMoment :hide: :options: +ELLIPSIS, +NORMALIZE_WHITESPACE B20 = 0... B22 = 0... B40 = -0... B42 = -0... B44 = -0... Cost function value = ...
Output (the numbers you see on your machine may vary):
B20 = 0.37745 B22 = 0.016732 B40 = -0.032093 B42 = -0.11298 B44 = -0.12685 Cost function value = 9.7067e-18
.. attributes:: Ion;String;Mandatory;An element name for a rare earth ion. Possible values are: Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb. Symmetry;String;C1;A symbol for a symmetry group. Setting `Symmetry` automatically zeros and fixes all forbidden parameters. Possible values are: C1, Ci, C2, Cs, C2h, C2v, D2, D2h, C4, S4, C4h, D4, C4v, D2d, D4h, C3, S6, D3, C3v, D3d, C6, C3h, C6h, D6, C6v, D3h, D6h, T, Td, Th, O, Oh powder;Boolean;false; Whether to calculate the powder averaged magnetisation or not. Hmag;Double;1.0; The applied magnetic field magnitude in Tesla (for 'bohr' or 'SI' units) or Gauss (for 'cgs' units). Hdir;Vector;(0.,0.,1.); The direction of the applied field w.r.t. the crystal field parameters Unit;String;'bohr'; The desired units of the output, either: 'bohr' (muB/ion), 'SI' (Am^2/mol) or 'cgs' (erg/G/mol). inverse;Boolean;false; Whether to output 1/M(T) instead of M(T).
.. properties::
.. categories::
.. sourcelink::