Julia 读取Wannier90hr数据

 

最近准备完全使用Julia进行科研了,所以就学习一下用该语言进行文件数据的读写如何进行,这里先是一个简单的尝试,就像用Julia读取紧束缚的hr数据来构建模型,顺便熟悉一下julia。

最近准备完全使用Julia进行科研了,所以就学习一下用该语言进行文件数据的读写如何进行,这里先是一个简单的尝试,就像用Julia读取紧束缚的hr数据来构建模型,顺便熟悉一下julia

代码展示

function Wannier90Read(filenam)
    f1 = open(filenam)
    data = readlines(f1)
    Hr = zeros(Float64,length(data[5:end]),7)
    hn = 0
    hopnum = 0
    degen = []
    i0 = 1
    for da in data[2:end] # 直接读取hr的主体数据
        if i0 == 1
            temp = strip(da) # 先去除左右两端空格
            temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号
            temp = split(temp,[',']) # 按照逗号进行分割
            hn = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数
        elseif i0 == 2
            temp = strip(da) # 先去除左右两端空格
            temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号
            temp = split(temp,[',']) # 按照逗号进行分割
            hopnum = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数
        elseif i0==3
            temp = strip(da) # 先去除左右两端空格
            temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号
            temp = split(temp,[',']) # 按照逗号进行分割
            degen = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数
        else
            temp = strip(da) # 先去除左右两端空格
            temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号
            temp = split(temp,[',']) # 按照逗号进行分割
            temp = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数
            Hr[i0 - 3,:] = temp[:]
        end
        i0 += 1
    end
    return hn,hopnum,degen,Hr
end
#-------------------------------------------------------------
function hamset(kx::Float64,ky::Float64,kz::Float64)
    hn,hopnum,degen,Hr = Wannier90Read("wannier90_hr.dat")
    for i0 in 1:hopnum
        H += exp(im*Hr[i0*hn^2,1:3]*[kx,ky,kz])*Hr[i0*hn^2,7:8] # 构建动量空间哈密顿量
    end
end
#-------------------------------------------------------------
a1,a2,a3,a4 = Wannier90Read("wannier90_hr.dat")
hamset(0.1,0.1,0.0)

公众号

相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。

png