IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> AlmaBTE使用和FORCE_CONSTANT原子排列转换 -> 正文阅读

[Python知识库]AlmaBTE使用和FORCE_CONSTANT原子排列转换

AlmaBTE可看作是材料热导率计算程序shengBTE的升级版本,不仅包含了shengBTE的全部公共能,而且能够实现超晶格、合金等复合结构热导率的计算。AlmaBTE的主页介绍链接如下:

Home - almaBTE - First-principles thermal transport simulation

AlmaBTE的计算速度相较于shengBTE要快很多,并且shengBTE安装如果没有intel编译包等,在安装比较困难,而且计算中格点大则速度很慢,而AlmaBTE安装使用cmake,对于无intel编译器或AMD的u非常方便,实测对于单晶非复合材料计算速度非常快。

对于单晶材料的计算,同样需要输入:

1. FORCE_CONSTANTS

即2阶力常数IFC文件,格式同phononpy

2. FORCE_CONSTANTS_3RD

即3阶力常数IFC文件,格式同shengBTE的thirdorder.py脚本制作格式。

3. _metadata文件

可参考安装后test_resources/中的示例,其实就是给出针对原胞的超胞扩胞倍数等信息。

4.BORN

对于极化材料,给出介电和BORN电荷,如果没有则认为无有极化,一般此项对热导率计算的影响很小。仅对色散中LO和TO的劈裂。

5. POSCAR

原胞晶格和原子坐标的描述,参考VASP介绍。只要有上述文件,AlmaBTE就能够产生“材料.h5“的结果输出,以此.h5文件就能够进一步计算声子谐振信息、散射空间、cumulative结果、热导率等。或者通过多种材料的.h文件,就能实现超晶格等热导计算。

上述POSCA文件中,一般将原胞内同种元素的原子放在一起,因此如果利用非VASP的第一性程序计算,则可能原胞内原子的排序与之不否,导致2阶和3阶力常数文件需要调整次序。因此,这里提供一个python脚本,用于实现原胞原子次序改变后,2结合3阶力常数文件的调整。

#############################################################

#####此脚本注意python的缩进,

? ? #shengBTE的2阶和3阶force_constant文件中,改变原胞内原子次序后的相应文件转换
? ? #220318
? ? #输入1:所在总路径
? ? filepath=R"./alamode_cp2k_InP3sc441_odin3_220311"
? ? #输入2:原力常数文件名
? ? ifc2_filename=filepath+'/'+'FORCE_CONSTANTS_2ND'
? ? ifc3_filename=filepath+'/'+'FORCE_CONSTANTS_3RD'
? ? #输入3:更改后文件名
? ? ifc2_new_filename=filepath+'/'+'FORCE_CONSTANTS_2ND'+'_vaspnew'
? ? ifc3_new_filename=filepath+'/'+'FORCE_CONSTANTS_3RD'+'_vaspnew'
? ? #输入4:超胞原子次序更改:索引为输入2中原胞内的原子次序
? ? #######原胞原子排列次序?
? ? uc_ind0=[0,1,2,3,4,5,6,7]
? ? uc_ind1=[0,1,2,5,6,7,3,4]
? ? #输入5:2阶力常数的扩胞倍数
? ? sc_mul=[4,4,1]
? ? ########
? ? #扩胞次序:uc_atom*x*y*z
? ? uc_atom=len(uc_ind0)
? ? sc_atom=uc_atom*sc_mul[0]*sc_mul[1]*sc_mul[2]
? ? #1读取
? ? ifc2_file=open(ifc2_filename,'r')
? ? ifc2_line=ifc2_file.readlines()
? ? ifc2_file.close()
? ? ifc3_file=open(ifc3_filename,'r')
? ? ifc3_line=ifc3_file.readlines()
? ? ifc3_file.close()
? ? #2超胞对应list: uc_atom*x*y*z 按照标签匹配
? ? ifc2_ind0=[]
? ? ifc2_ind1=[]
? ? for k1 in range(uc_atom):
? ? ? ? for k2 in range(sc_mul[0]):
? ? ? ? ? ? for k3 in range(sc_mul[1]):
? ? ? ? ? ? ? ? for k4 in range(sc_mul[2]):
? ? ? ? ? ? ? ? ? ? ifc2_ind0.append([uc_ind0[k1],k2,k3,k4])
? ? ? ? ? ? ? ? ? ? ifc2_ind1.append([uc_ind1[k1],k2,k3,k4])
? ? #索引对应list
? ? sc_tran=[]
? ? for k1 in range(sc_atom):
? ? ? ? s_v=-1 ?#默认值
? ? ? ? for k2 in range(sc_atom):
? ? ? ? ? ? if ifc2_ind0[k1][0]==ifc2_ind1[k2][0] and ifc2_ind0[k1][1]==ifc2_ind1[k2][1] \
? ? ? ? ? ? ? ? and ifc2_ind0[k1][2]==ifc2_ind1[k2][2] and ifc2_ind0[k1][3]==ifc2_ind1[k2][3]:
? ? ? ? ? ? ? ? #
? ? ? ? ? ? ? ? s_v=k2
? ? ? ? sc_tran.append(s_v)
? ? #3更改2阶力常数文件
? ? #格式:第一行为注释128 ?128,接着为每个原子对 1 2 以及3行3列值 ? ?
? ? #初始化最终结果:2重列表,1重为原子对,2重为3*3=9个取值
? ? ifc2_new_val=[]
? ? for k1 in range(sc_atom):
? ? ? ? for k2 in range(sc_atom):
? ? ? ? ? ? ifc2_new_val.append([0 for x in range(9)])
? ? #读取ifc2原有文件中每条数据,放入新的ifc2_new_val值中:
? ? r_num=0 #当前读取块数
? ? r_beg=1 #当前行索引,0行为注释行
? ? for k1 in range(sc_atom):
? ? ? ? for k2 in range(sc_atom):
? ? ? ? ? ? r_now=r_beg+r_num*4
? ? ? ? ? ? templine=ifc2_line[r_now].split()
? ? ? ? ? ? atom1=int(templine[0])
? ? ? ? ? ? atom2=int(templine[1])
? ? ? ? ? ? templine1=ifc2_line[r_now+1]
? ? ? ? ? ? templine2=ifc2_line[r_now+2]
? ? ? ? ? ? templine3=ifc2_line[r_now+3].strip()
? ? ? ? ? ? r_val=templine1+templine2+templine3
? ? ? ? ? ? #放入新ifc2_new_val
? ? ? ? ? ? m1=sc_tran[k1]
? ? ? ? ? ? m2=sc_tran[k2]
? ? ? ? ? ? m_new=m1*sc_atom+m2
? ? ? ? ? ? ifc2_new_val[m_new]=r_val
? ? ? ? ? ? r_num=r_num+1
? ? #4输出
? ? ifc2_new_file=open(ifc2_new_filename,'w')
? ? print("%d "%(sc_atom),file=ifc2_new_file)
? ? k0=0
? ? for k1 in range(sc_atom):
? ? ? ? for k2 in range(sc_atom):
? ? ? ? ? ? print("%d %d"%(k1+1,k2+1),file=ifc2_new_file)
? ? ? ? ? ? print("%s"%(ifc2_new_val[k0]),file=ifc2_new_file)
? ? ? ? ? ? k0=k0+1
? ? ifc2_new_file.close()
? ? #5ifc3的修改
? ? #格式1行为总块数,空行,块(1序号2行3列超胞索引1行原胞原子索引27行4值)
? ? #块数目
? ? temp_line=ifc3_line[0].split()
? ? force1_b_num=int(temp_line[0])
? ? #读取块,转为同输入1的ifc_res列表
? ? ifc3_res_name1=[] #为原胞3原子索引
? ? ifc3_res_sc_ang1=[] ?#2重列表,每个sc索引为1*3,共有2重
? ? ifc3_res_val1=[] ?#改为string
? ? for m1 in range(len(ifc3_line)-1): ?#排除第一行的总数目
? ? ? ? temp_line=ifc3_line[m1+1].split()
? ? ? ? if temp_line and len(temp_line)==1:
? ? ? ? ? ? #块的开始
? ? ? ? ? ? temp_line1=ifc3_line[m1+1+3].split()
? ? ? ? ? ? ifc3_res_name1.append([int(temp_line1[0]),int(temp_line1[1]),int(temp_line1[2])])
? ? ? ? ? ? temp_line2=ifc3_line[m1+1+1].split()
? ? ? ? ? ? temp_line3=ifc3_line[m1+1+2].split()
? ? ? ? ? ? ifc3_res_sc_ang1.append([[float(temp_line2[0]),float(temp_line2[1]),float(temp_line2[2])],[float(temp_line3[0]),float(temp_line3[1]),float(temp_line3[2])]])
? ? ? ? ? ? val_temp=''
? ? ? ? ? ? for m2 in range(27):
? ? ? ? ? ? ? ? temp_line4=ifc3_line[m1+1+4+m2]
? ? ? ? ? ? ? ? val_temp=val_temp+temp_line4
? ? ? ? ? ? ifc3_res_val1.append(val_temp)
? ? ###转换ifc3_res_name1内原胞索引,使用uc_ind1,默认原始原胞为uc_ind1的索引
? ? #输出ifc3
? ? ifc3_new_file=open(ifc3_new_filename,'w')
? ? #
? ? print("%d "%(force1_b_num),file=ifc3_new_file)
? ? print(" ",file=ifc3_new_file)
? ? for k1 in range(force1_b_num):
? ? ? ? print("%d"%(k1+1),file=ifc3_new_file)
? ? ? ? print("%.14f %.14f %.14f"%(ifc3_res_sc_ang1[k1][0][0],ifc3_res_sc_ang1[k1][0][1],ifc3_res_sc_ang1[k1][0][2]),file=ifc3_new_file)
? ? ? ? print("%.14f %.14f %.14f"%(ifc3_res_sc_ang1[k1][1][0],ifc3_res_sc_ang1[k1][1][1],ifc3_res_sc_ang1[k1][1][2]),file=ifc3_new_file)
? ? ? ? #uc索引输出
? ? ? ? uc_new=[uc_ind1[ifc3_res_name1[k1][0]-1]+1,uc_ind1[ifc3_res_name1[k1][1]-1]+1,uc_ind1[ifc3_res_name1[k1][2]-1]+1]
? ? ? ? print("%d ?%d ?%d"%(uc_new[0],uc_new[1],uc_new[2]),file=ifc3_new_file)
? ? ? ? #27值输出字符串
? ? ? ? print("%s"%(ifc3_res_val1[k1]),file=ifc3_new_file)
? ? ? ? #print("",file=ifc3_new_file)
? ? ifc3_new_file.close()
?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:30:34  更:2022-03-24 00:30:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:04:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码