BCC Iron

This example shows how to calculate the local field at the tetrahedral site(s) in bcc-Fe as described in Ref. [Schmolz1986].

Let’s first load some useful tools.

 6
 7
 8
 9
10
11
12
13
14
import numpy as np
from muesr.core import Sample                   # Retains all the sample info.
from muesr.i_o import load_cif, load_xsf        # For loading the structure from cif and xsf files
from muesr.utilities import show_structure      # For visualisation with xcrysden (http://www.xcrysden.org/) or VESTA
from muesr.utilities import muon_find_equiv     # For finding and including the symmetry equivalent muon positions in the calculation 
from muesr.utilities import mago_add            # For magnetic structure description
from muesr.engines import locfield              # Does the sum and returns the local field in its diff. contributions
from muesr.engines import find_largest_sphere   # Aids in the calculation of the sphere's radius for the lattice sum.

The lattice structure and one of the twelve tetrahedral muon sites are added to our sample object:

20
21
22
23
24
fe= Sample()                          
load_cif(fe,"./Fe.cif")

#    To add the muon position
fe.add_muon([0.50,0.25,0.0])    

Since the lattice structure was parsed from a CIF file, symmetry information are already present in the Sample object. This allows to obtain all the twelve tetrahedral sites with the command

29
muon_find_equiv(fe)  

Finally, we define the ferromagnetic structure with local moments parallel to z in Cartesian coordinates.

32
33
34
35
36
37
#   Description of the propagation vector k and fourier components fc 
#   with a new magnetic structure declared with fe.new_mm()
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]])

The local fields at the muon sites are obtained with the following commands

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

By default, for each muon site the contact coupling is set to 0. To obtain the total contribution at the muon sites the parameter ACont must be set for all the twelse muon sites (can be different in general).

 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
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

In the above lines we collected the results in numpy arrays to simplify the output statements.

As discussed in [Schmolz1986], “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 “

The final print statements shows that this result is actually verified by our calculations.

115
116
117
118
119
120
121
122
123
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])))
[Schmolz1986](1, 2)
  1. Schmolz et.al, Hyperfine Interactions 31 199 (1986)