外延薄膜峰位拟合(动力学)

晶格的构建

衬底晶格

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)

检查一下输出的矩阵是否文献中或第一性原理计算的结果一致。

spyder 中显示的值

现在开始构建薄膜的晶体结构,同样在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