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.i_o.cif.cif import load_cif # For loading the structure from cif files
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()
load_cif(fe,"./Fe.cif");
Add the muon position
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