自动生成测试位置吸附脚本设计思路

前言

计算一个异质结需要测试对比不同吸附位置之间的能量差异,可以直接手动建模,但是人太懒了,能交给机器的自己就别动手

问题描述

在这里插入图片描述

如图上所示是我计算吸附用的衬底,当原子在上面吸附时我考虑了25个(可以随便取,看需求)位置,如下表矩阵,手动弄却是有点头痛,

x、y0.10.350.50.70.9
0.10.1, 0.10.1, 0.35
0.350.35, 0.10.35, 0.35
0.5
0.7
0.90.9, 0.9

脚本处理思路

先贴出我的POSCAR

3D\Atomistic
1.03.6405000687         0.0000000000         0.0000000000-1.8202500343         3.1527655419         0.00000000000.0000000000         0.0000000000        32.8615989685Br      Ru   Ga    S1        1    2    3
Direct0.748189991         0.421450019         0.6179900170.103529994         0.109910011         0.6656600240.359649986         0.670469999         0.4959400000.708169997         0.353230000         0.3821200130.356599987         0.667739987         0.4282900090.025920033         0.023759961         0.5277299880.021280050         0.019580007         0.347180009
1,POSCAR分析

我POSCAR分两部分,Ga2S3是我的衬底,BrRu是我的吸附原子,其中要考虑的就是Ru原子在Ga2S3上的吸附,当Ru原子移动时,Br原子也得跟着一起移动

所以我需要修改的是第9段和第10段,其他的段不变,

2,处理流程

1.1,Ru的x坐标设置为0.1,Y依次设置为0.1,计算随动的Br原子的x,y坐标。保存POSCAR
1.2, Ru的x坐标设置为0.1,Y依次设置为0.2,计算随动的Br原子的x,y坐标,保存POSCAR
。。。。。
。。。。。
。。。。。
51.2, Ru的x坐标设置为0.9,Y依次设置为0.9,计算随动的Br原子的x,y坐标,保存POSCAR

3代码解释

这只是一个脚本思路,在使用时应该根据自己的实际情况改动

# 目标坐标值 ---这个值需要根据你需要的位置自行修改
POSX=(0.1 0.35 0.5 0.7 0.9)
POSY=(0.1 0.35 0.5 0.7 0.9)#读取不动段
firstpostion=$(sed -n '1,8p' POSCAR)  ##我读取了前8段,这是不需要修改的部分
endpostion=$(sed -n '11,15p' POSCAR)  ##我的POSCAR里12到16段是固定的衬底不需要修改# 读取需要修改的原子坐标值,如果你的体系大有需要可以添加更多行
read -r x9 y9 z9 <<< "$(sed -n '9p' POSCAR)"
read -r x10 y10 z10 <<< "$(sed -n '10p' POSCAR)"for ((i=0; i<5; i++)); #每行的值
dofor ((j=0; j<5; j++));  #每列的值do# 计算你需要的新坐标的位置,到Ru原子目前位置之间的距离差diff_x=$(echo "${POSX[$i]} - $x11" | bc)diff_y=$(echo "${POSY[$j]} - $y11" | bc)#Br(第9行)原子的新位置new_x9=$(awk " BEGIN{ printf \"%.8f\", $x9 + $diff_x}" )new_y9=$(awk " BEGIN{ printf \"%.8f\", $y9 + $diff_y}" )# 处理超出边界的情况()if (( $(echo "$new_x9 > 1" | bc -l) )); thennew_x9=$(awk " BEGIN{ printf \"%.8f\", $new_x9 - 1}" )fiif (( $(echo "$new_y9 > 1" | bc -l) )); thennew_y9=$(awk " BEGIN{ printf \"%.8f\", $new_y9 - 1}" )fi        # 将坐标值乘以10X=$(echo "${POSX[$i]} * 10" | bc)Y=$(echo "${POSY[$j]} * 10" | bc)# 创建一个以坐标位置命名的文件夹,并且将准备好的INCAR, KPOINTS, POTCAR一起复制进去。folder_name="${X}_${Y}"mkdir "$folder_name"cp INCAR KPOINTS POTCAR "$folder_name/"# 将计算得到的更新的POSCAR写入echo -e "$firstpostion" > "$folder_name/POSCAR"echo -e "$new_x9 $new_y9 $z9" >> "$folder_name/POSCAR"echo -e "${POSX[$i]} ${POSY[$j]} $z11" >> "$folder_name/POSCAR"echo -e "$endpostion" >> "$folder_name/POSCAR"done
done

我将脚本命名为pos.sh
使用前需要

chmod 777 pos.sh
./pos.sh

这样就可以得到一系列的文件
在这里插入图片描述

这文件夹有点多,如果懒的一个个投,我们可以使用vasp.pbs进行遍历计算

!/bin/bash
# just for reference
path=`pwd`
for c in *.*
docd $path/$cecho `pwd`mpirun -np 24 vasp_ncl > logrelax   #   ! vasp_job_soc.sh为vasp_ncl作业脚本cd ${path}
done

计算完成后,如果懒得一个个查能量,可以使用我写的read.sh读取数据
对于不同的情况需要做修改。

###############loactions###############################################end###################
cat >f_date<< !
坐标    磁矩        能量          优化步数     收敛情况    
!for q  in 1.0 3.50 5.0 7.0 9.0 
do
for i in 1.0 3.50 5.0 7.0 9.0 
do
X=$(echo "$q" | bc)
Y=$(echo "$i" | bc)
folder_name="${X}_${Y}"cd  $folder_name/long_log=`echo | wc -l logscf| awk '{print$1}'`situation=`echo|awk NR==$long_log logscf`log_max=$(tail -n 3 logscf | awk '{print $2}')#cd scf/magnetic=`echo |grep F OSZICAR| sed -n '$p' | awk '{print$10}'`enegry=`echo|grep 'energy(sigma->0) =' OUTCAR| sed -n '$p' | awk '{print$7}'`cd ..#echo $tall_date >> f_date
cat >f_date1<< !
$q  $i   $magnetic    $enegry         $log_max             $situation   
!
head -1 f_date1 >> f_date
done
done
rm f_date1

得到结果如下

在这里插入图片描述

处理数据

接着对坐标进行简单的处理,把他用ecel转化成平面坐标,在导入orign即可得图
在这里插入图片描述

结语

只是临时弄得还很粗糙,后续慢慢改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/288711.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tensorflow2.0笔记 - 使用compile,fit,evaluate,predict简化流程

本笔记主要用compile, fit, evalutate和predict来简化整体代码&#xff0c;使用这些高层API可以减少很多重复代码。具体内容请自行百度&#xff0c;本笔记基于FashionMnist的训练笔记&#xff0c;原始笔记如下&#xff1a; Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…

OSPF-区域间路由计算

一、概述 前面学习了我们学习了Router-LSA和Network-LSA&#xff0c;它们都只能在区域内进行泛洪&#xff0c;而且我们之前一直主要是单区域学习。OSPF的核心是骨干区域Area 0&#xff0c;其它都为非骨干区域。但是在大型网络中&#xff0c;单区域OSPF会存在一定的问题&#xf…

[BT]BUUCTF刷题第9天(3.27)

第9天&#xff08;共2题&#xff09; [护网杯 2018]easy_tornado 打开网站就是三个txt文件 /flag.txt flag in /fllllllllllllag/welcome.txt render/hints.txt md5(cookie_secretmd5(filename))当点进flag.txt时&#xff0c;url变为 http://b9e52e06-e591-46ad-953e-7e8c5f…

gopher伪协议

基础知识 基本格式 基本格式&#xff1a;URL:gopher://<host>:<port>/<gopher-path>web也需要加端口号80gophert协议默认端口为70gopheri请求不转发第一个字符 get请求 问号&#xff08;&#xff1f;)需要转码为URL编码&#xff0c;也就是%3f回车换行要变…

【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}

文章目录 0.对于信号捕捉的理解1.信号处理的时机1.1 何时处理信号&#xff1f;1.2 内核态和用户态1.3 内核态和用户态的切换 2.了解寄存器3.信号捕捉的原理4.信号操作函数4.1sighandler_t signal(int signum, sighandler_t handler);4.2int sigaction(int signum, const struct…

IP如何异地共享文件?

【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因&#xff0c;被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。采用穿透技术&#xff0c;简单易用&#xff0c;不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…

基于SpringBoot和Vue的校园管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的校园管理系统的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f…

vscode上编辑vba

安装xvba插件更换vscode的工作目录启动扩展服务器在config.json中添加目标工作簿的名称加载excel文件&#xff08;必须带宏的xlsm&#xff09;这个扩展就会自动提取出Excel文件中的代码Export VBA&#xff08;编辑完成的VBA代码保存到 Excel文件 &#xff09;再打开excel文件可…

【LVGL-键盘部件,实体按键控制】

LVGL-二维码库 ■ LVGL-键盘部件■ 示例一&#xff1a;键盘弹窗提示■ 示例二&#xff1a;设置键盘模式■ 综合示例&#xff1a; ■ LVGL-实体按键控制■ 简介 ■ LVGL-键盘部件 ■ 示例一&#xff1a;键盘弹窗提示 lv_keyboard_set_popovers(kb,true);■ 示例二&#xff1a;设…

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时&#xff0c;HouseHolder变换…

开源AI引擎|企业合同管理:自然语言处理与OCR技术深度融合

一、企业应用&#xff1a;合同智能管理 结合NLP和OCR技术&#xff0c;企业可以构建智能化的合同管理系统&#xff0c;实现合同的自动化审查、风险评估和知识抽取。这样的系统不仅能够提高合同处理的效率&#xff0c;还能够降低人为错误&#xff0c;加强风险控制。 例如&#x…

【React】vite + react 项目,进行配置 eslint

安装与配置 eslint 1 安装 eslint babel/eslint-parser2 初始化配置 eslint3 安装 vite-plugin-eslint4 配置 vite.config.js 文件5 修改 eslint 默认配置 1 安装 eslint babel/eslint-parser npm i -D eslint babel/eslint-parser2 初始化配置 eslint npx eslint --init相关…

iOS - Runtime-消息机制-objc_msgSend()

iOS - Runtime-消息机制-objc_msgSend() 前言 本章主要介绍消息机制-objc_msgSend的执行流程&#xff0c;分为消息发送、动态方法解析、消息转发三个阶段&#xff0c;每个阶段可以做什么。还介绍了super的本质是什么&#xff0c;如何调用的 1. objc_msgSend执行流程 OC中的…

USART发送单字节数据原理及程序实现

硬件接线&#xff1a; 显示屏的SCA接在B11&#xff0c;SCL接在B10&#xff0c;串口的RX连接A9&#xff0c;TX连接A10。 新建Serial.c和Serial.h文件 在Serial.c文件中&#xff0c;实现初始化函数&#xff0c;等需要的函数&#xff0c;首先对串口进行初始化&#xff0c;只需要…

【深度学习|基础算法】2.AlexNet学习记录

AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 5、模型训练6、导出onnx模型 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计&#xff0c;模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠…

每日一题 --- 链表相交[力扣][Go]

链表相交 题目&#xff1a;面试题 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链式结…

神经网络:梯度下降法更新模型参数

作者&#xff1a;CSDN _养乐多_ 在神经网络领域&#xff0c;梯度下降是一种核心的优化算法&#xff0c;本文将介绍神经网络中梯度下降法更新参数的公式&#xff0c;并通过实例演示其在模型训练中的应用。通过本博客&#xff0c;读者将能够更好地理解深度学习中的优化算法和损…

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言&#xff0c;制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点&#xff0c;美摄科技凭借其深厚的技术积累和创新能力&#xff0c;推出了面向企业的H5/小程序视频方案解决方案&#xff0c;为企业提供了一种轻量化、高效、便捷的视频制作方式…

线程局部存储(TLS)

线程局部存储&#xff08;Thread Local Storage&#xff0c;TLS&#xff09;&#xff0c;是一种变量的存储方法&#xff0c;这个变量在它所在的线程内是全局可访问的&#xff0c;但是不能被其他线程访问到&#xff0c;这样就保持了数据的线程独立性。而熟知的全局变量&#xff…

mac-git上传至github(ssh版本,个人tokens总出错)

第一步 git clone https://github.com/用户名/项目名.git 第二步 cd 项目名 第三步 将本地的文件移动到项目下 第四步 git add . 第五步 git commit -m "添加****文件夹" 第六步 git push origin main 报错&#xff1a; 采用ssh验证 本地文件链接公钥 …