外延薄膜峰位拟合(动力学)
晶格的构建
衬底晶格
LaSrAlO4 = predefined_materials.LaSrAlO4
layer_LaSrAlO4 = xu.simpack.Layer(LaSrAlO4, inf)
薄膜晶格
对于没有预定义弹性张量cij的需要在material中自己定义,对于我所需要的定义如下:
def TetragonalElasticTensor(c11, c12, c13, c33, c44, c66):
"""
Assemble the 6x6 matrix of elastic constants for a Tetragonal material from the
six independent components of a Tetragonal crystal
Parameters
----------
c11, c12, c13, c33, c44, c66 : float
independent components of the elastic tensor of cubic materials
Returns
-------
cij : ndarray
6x6 matrix with elastic constants
"""
m = numpy.zeros((6, 6), dtype=numpy.double)
m[0, 0] = c11
m[1, 1] = c11
m[2, 2] = c33
m[3, 3] = c44
m[4, 4] = c44
m[5, 5] = c66
m[0, 1] = m[1, 0] = c12
m[0, 2] = m[2, 0] = c13
m[1, 2] = m[2, 1] = c13
return m
然后在自己的代码中输入对应的值(文献中或第一性原理计算的结果),此处我采用的第一性原理计算出的结果(感谢帮我计算的师弟)。
from xrayutilities.materials import predefined_materials, material
cij_LaSrCuO4_x15 = material.TetragonalElasticTensor(292.6724, 78.577,
109.0409, 273.2590,
45.8345, 52.4724)
检查一下输出的矩阵是否文献中或第一性原理计算的结果一致。

现在开始构建薄膜的晶体结构,同样在predefined_materials.py定义(注意导入定义的cij函数)。
LaSrCuO4 = Crystal("LaSrCuO4", SGLattice(139, 3.7793, 13.20000, #x =0.15
atoms=[e.La, e.Sr, e.Al, e.O, e.O],
pos=[('4e',0.3609),
('4e',0.3609),
'2a',
'4c',
('4e',0.18400)],
occ=[0.925, 0.075, 1, 1, 1]),
TetragonalElasticTensor(292.6724, 78.577,
109.0409, 273.2590,
45.8345, 52.4724))
样品的构建与模拟参量的设置
pstack = xu.simpack.PseudomorphicStack001('list', layer_LaSrAlO4, layer_LaSrCuO4)
正如函数名称所示,PseudomorphicStack 目前仅适用于 (001) 表面和立方材料。模块作者计划实现其他表面方向,但目前还没有太多进展。
下面进行模拟参量的构建
thetaMono = arcsin(wavelength/(2 * xu.materials.Ge.planeDistance(2, 2, 0)))
Cmono = cos(2 * thetaMono)
dyn = xu.simpack.DynamicalModel(pstack, I0=15e6, background=0,
resolution_width=2e-3, polarization='both',
Cmono=Cmono)
fitmdyn = xu.simpack.FitModel(dyn)
fitmdyn.set_param_hint('LaSrCuO4_c', vary=True, min=13.1, max=13.3)
fitmdyn.set_param_hint('LaSrCuO4_a', vary=True, min=3.6, max=3.9)
fitmdyn.set_param_hint('LaSrAlO4_a', vary=True)
fitmdyn.set_param_hint('resolution_width', vary=True)
params = fitmdyn.make_params()
执行模拟并绘图
f = figure(figsize=(7, 5))
semilogy(x1, y1, 'o-', ms=3, label='data')
# perform fit and plot the result
fitmdyn.lmodel.set_hkl((0, 0, 6))
ai = (x1)/2
fitr = fitmdyn.fit(y1, params, ai)
print(fitr.fit_report())
simdyn = fitmdyn.eval(fitr.params, x=x1/2)
plot(x1, simdyn, label='sim')
# label the plot
ylabel('Intensity (counts)')
xlabel('2Theta (deg)')
legend()
#ylim(2e1, 1e9)
xlim(36, 47)
tight_layout()
show()
Last updated