# Fe BCC¶

In this example the local field at the tetrahedral site(s) in bcc-Fe is calculated.

In [1]:

import numpy as np
from muesr.core.sample import Sample                   # Retains all the sample info.
from muesr.utilities import mago_add, show_structure   # For magnetic structure description and visualization
from muesr.utilities import muon_find_equiv            # For finding and including the symmetry equivalent muon positions in the calculation

from muesr.engines.clfc import locfield, find_largest_sphere # Does the sum and returns the local field in its various contributions

np.set_printoptions(suppress=True,precision=5)



Create a Sample instance and load lattice structure from a CIF file.

In [2]:

fe=Sample()


In [3]:

fe.add_muon([0.50,0.25,0.0]);


and find the symmetry equivalent positions. In BCC Fe there are 12 symmetry equivalent sites for the position provided above. These are automatically added with the following command.

In [4]:

muon_find_equiv(fe);
fe

Out[4]:

Sample status:

Crystal structure:           [92mYes[0m
Magnetic structure:          [93mNo[0m
Muon position(s):            [92m12 site(s)[0m
Symmetry data:               [92mYes[0m


The definition of the magnetic structure of Fe is created with fe.new_mm() (new magnetic model). The experimental magnetic moment at the Fe atoms is 2.22 Bohr magneton and the propagation vector is 0 (ferromagnetic order).

In [5]:

fe.new_mm()
fe.mm.k=np.array([0.0,0.0,0.0])
fe.mm.fc= np.array([[0.0+0.j, 0.0+0.j, 2.22+0.j],
[0.0+0.j, 0.0+0.j, 2.22+0.j]])


There is another way to define the magnetic structure especially useful when using the interactive session:

mago_add(fe)


It should appear like this on the interactive screen

>>> mago_add(fe)
... Propagation vector (w.r.t. conv. rec. cell): 0.0 0.0 0.0
... Magnetic moments in bohr magnetons and cartesian coordinates.
... Which atom? (enter for all)Fe
... Lattice vectors:
...   a    2.868018200000000    0.000000000000000    0.000000000000000
...   b    0.000000000000000    2.868018200000000    0.000000000000000
...   c    0.000000000000000    0.000000000000000    2.868018200000000
... Atomic positions (fractional):
...     1 Fe  0.00000000000000  0.00000000000000  0.00000000000000  55.845
...     2 Fe  0.50000000000000  0.50000000000000  0.50000000000000  55.845
... FC for atom 1 Fe (3 real, [3 imag]): 0.00 0.00 2.22
... FC for atom 2 Fe (3 real, [3 imag]): 0.00 0.00 2.22


The following commands may be used to visualize the lattice structure, the muon position and the magnetic order with XCrysDen.

In [6]:

#show_structure(fe, [2,2,2]);


The function find_largest_sphere can be used to find the largest sphere with center at the muon site(s) that can be inscribed in a 100x100x100 supercell.

In [7]:

radius=find_largest_sphere(fe,[100, 100, 100])


With the following call, the local field at the muon sites is finally evaluated. The first argument is the sample object, the second argument spcifies that a simple sum should be performed, the third argument is the supercell dimension along the three lattice vectors and the last argument is the radius of the Lorentz sphere.

In [8]:

r=locfield(fe, 's', [100, 100, 100] ,radius)


All the local fied contributions are contained in r, the dipolar contribution in r[i].D, the Lorentz contribution in r[i].L, the Fermi contact contribution in r[i].C, and the sum of all contributions in r[i].T where i runs on the muon sites.

If r[i].ACont (isotropic contact coupling term) is not defined r[i].C is zero. For the details on the contact coupling term see the documentation (http://muesr.readthedocs.io/en/latest/ContactTerm.html)

In [9]:

B_dip=np.zeros([len(fe.muons),3])
B_Lor=np.zeros([len(fe.muons),3])
B_Cont=np.zeros([len(fe.muons),3])
B_Tot=np.zeros([len(fe.muons),3])

for i in range(len(fe.muons)):
B_dip[i]=r[i].D
B_Lor[i]=r[i].L
r[i].ACont = 0.0644
B_Cont[i]=r[i].C
B_Tot[i]=r[i].T


As discussed in M. Schmolz et.al (Hyperfine Interactions 31 (1986) 199-204), in BCC Fe the muon jumps between the tetrahedral sites and “the field contribution at each equivalent site is either parallel or antiparallel to the magnetization of the domains” such that B_dip(parallel)=-2B_dip(antiparallel) […] the average of the dipolar field at these three sites vanishes”

In [10]:

print("Dipolar Field for all the 12 tetrahedral equivalent sites")
print(B_dip)

# This is and should be same for all the equivalent sites
print("The Lorentz field is {:4.3f} {:4.3f} {:4.3f}".format(*tuple(B_Lor[0])))

print("The contact field is {:4.3f} T".format(np.linalg.norm(B_Cont[0])))

print("Dipolar average of 1 parallel site and 2 antiparallel sites is {:4.5f} T".format(np.linalg.norm(B_dip[3]+B_dip[10]+B_dip[11])))

Dipolar Field for all the 12 tetrahedral equivalent sites
[[ 0.       0.       0.26498]
[-0.      -0.       0.26498]
[-0.       0.      -0.52995]
[ 0.       0.      -0.52995]
[ 0.       0.       0.26498]
[-0.      -0.       0.26498]
[ 0.      -0.       0.26498]
[-0.      -0.       0.26498]
[ 0.       0.      -0.52995]
[ 0.       0.      -0.52995]
[-0.      -0.       0.26498]
[-0.      -0.       0.26498]]
The Lorentz field is 0.000 0.000 0.731
The contact field is 1.111 T
Dipolar average of 1 parallel site and 2 antiparallel sites is 0.00000 T