计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1053|回复 Reply: 10
打印 Print 上一主题 Last thread 下一主题 Next thread

[ORCA] ORCA脚本分享

[复制链接 Copy URL]

10

帖子

1

威望

219

eV
积分
249

Level 3 能力者

脚本1  使用gunplot绘制scan过程中的能量和键长变化,是直接读取的test.relaxscanact.dat进行的绘图:
#!/bin/sh
# 检查数据文件是否存在
if [ ! -f "test.relaxscanact.dat" ]; then
    echo "错误: 找不到 test.relaxscanact.dat 文件!"
    exit 1
fi
# 计算总行数作为步数
steps=$(wc -l < test.relaxscanact.dat)
# 生成带有步数的临时数据文件
awk '{print NR, $0}' test.relaxscanact.dat > temp.plot
# 使用gnuplot绘制数据
gnuplot <<EOF
set term dumb
set title '能量随距离变化曲线'
set xlabel '步数'
set ylabel '能量 (eV)'
plot 'temp.plot' u 1:3 w l t "能量 vs 步数"
set title '能量 vs 距离'
set xlabel '距离 (Å)'
set ylabel '能量 (eV)'
plot 'temp.plot' u 2:3 w l t "能量 vs 距离"
EOF
# 查找最小能量及其对应的距离
min_energy_line=$(awk 'NR == 1 || $2 < min {min = $2; line = NR} END {print line}' test.relaxscanact.dat)
min_energy=$(sed -n "${min_energy_line}p" test.relaxscanact.dat | awk '{print $2}')
distance_at_min=$(sed -n "${min_energy_line}p" test.relaxscanact.dat | awk '{print $1}')
echo "\n最小能量: ${min_energy} eV (步数 ${min_energy_line}, 距离 ${distance_at_min} Å)"
# 清理临时文件
rm temp.plot


就可以直接看到能量最高点,作为过渡态初猜结构

脚本2 结构优化过程中能量的可视化

#!/bin/sh
#created by qingqingzhang 2025.11.20
num_out_files=$(find . -maxdepth 1 -type f-regex './[0-9]+\.out' | sort -n)
if [ -z "$num_out_files" ]; then
   echo "错误: 未找到数字.out文件!"
   exit 1
fi
temp_data="temp_energy_data.dat"
> "$temp_data"  
echo "处理的文件:"
for file in $num_out_files; do
   echo "  $file"
done
echo
total_step=1
for file in $num_out_files; do
   grep "FINAL SINGLE POINT ENERGY" "$file" | awk'{print $5}' | while read -r energy; do
       if [ -n "$energy" ] && echo "$energy" | grep-qE '^-?[0-9]+\.[0-9]+$'; then
           echo "$total_step $energy" >> "$temp_data"
           total_step=$((total_step + 1))
       fi
   done
done
if [ ! -s "$temp_data" ]; then
   echo "错误: 没有从任何文件中提取到有效能量数据!"
   rm -f "$temp_data"
   exit 1
fi
gnuplot <<EOF
set term dumb enhanced
set title '能量随步数变化曲线'
set xlabel '步数'
set ylabel '能量 (eV)'
unset grid
unset key  
plot '$temp_data' using 1:2 with lines lw 2lc rgb 'blue'  
EOF
# 清理临时文件
rm -f "$temp_data"


脚本3 查看优化步数 读取最后电子能量 能量修正项 自由能项(均读取最后一个数值)

#!/bin/bash
# created by zhangqingqing 2025/07/12
set +f
NUM_OUT_FILES=$(ls -1d [0-9]*.out2>/dev/null | grep -E '^[0-9]+\.out$')
echo"=========================================================================="
echo "$(pwd)"
echo -e "\n优化日志:"
grep OPTI $NUM_OUT_FILES 2>/dev/null ||echo "未找到相关数据"
echo -e "\n电子能量项:"
grep "FINAL" $NUM_OUT_FILES2>/dev/null | tail -n 1 || echo "未找到相关数据"
echo -e "\n修正项:"
grep "G-E(el)" $NUM_OUT_FILES2>/dev/null | tail -n 1 || echo "未找到相关数据"
echo -e "\n运行时间:"
grep RUN $NUM_OUT_FILES 2>/dev/null |tail -n 1 || echo "未找到相关数据"
echo -e "\n吉布斯自由能:"
grep "Final Gibbs free energy"$NUM_OUT_FILES 2>/dev/null| tail -n 1 || echo "未找到相关数据"
echo"=========================================================================="


脚本4 查看振动状态,我主要是看虚频

#!/bin/bash
LINES=20
if [ ! -z "$1" ]; then
   LINES=$1
fi
SED_COMMAND=""
for ((i=1; i<=LINES; i++)); do
   SED_COMMAND="${SED_COMMAND}n; p;"
done
if [ $(ls *.out 2>/dev/null | wc -l) -eq0 ]; then
   echo "当前目录下没有找到.out文件"
   exit 1
fi
for file in *.out; do
   echo "===========================$file-FREQUENCIES============================="
   sed -n "/VIBRATIONAL FREQUENCIES/{${SED_COMMAND}}""$file"
   
   echo
done
   echo "..."
   echo "-----------------------"
   grep "G-E(el)" *.out
   echo"-----------------------------------------------------------------------"
   pwd
   grep "TOTAL RUN TIME" *.out
   echo"==========================================================================="


使用方法:脚本1和2需要安装gunplot。在根目录下创建bin/exc文件夹,在exc文件夹写入脚本,把bin/exc路径添加到~/.bashrc中,记得source一下,使用指令chmod 755 脚本 赋予可执行权限,即可在任何的目录下敲除对应指令。如果不知道怎么做可以发给ai问问怎么添加路径。如果无法使用,可以发给ai解读脚本,我读取的文件是以数字命名的.out文件。

微信图片_20251120104758_140_64.png (55.49 KB, 下载次数 Times of downloads: 0)

微信图片_20251120104758_140_64.png

微信图片_20251120104822_142_64.png (61.92 KB, 下载次数 Times of downloads: 1)

脚本1scan可视化

脚本1scan可视化

微信图片_20251120104835_143_64.png (61.48 KB, 下载次数 Times of downloads: 0)

微信图片_20251120104835_143_64.png

微信图片_20251120104911_144_64.png (28.88 KB, 下载次数 Times of downloads: 0)

脚本2能量可视化

脚本2能量可视化

评分 Rate

参与人数
Participants 5
威望 +1 eV +12 收起 理由
Reason
cyh时代 + 3 谢谢分享
SharkYYX2025 + 3 好物!
Novice + 3 赞!
sobereva + 1
wal + 3

查看全部评分 View all ratings

683

帖子

12

威望

2820

eV
积分
3743

Level 5 (御坂)

鸩羽

2#
发表于 Post on 2025-11-20 11:08:06 | 只看该作者 Only view this author
gnuplot的终端绘图步数一多就看不清了 实际用起来有点花瓶 我之前捣鼓过 最终还是转向了别的手法 (然而我的xyz剪切板艺术无人欣赏

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
SharkYYX2025 + 1 233333

查看全部评分 View all ratings

某不知名实验组从苞米地里长出来的计算选手

849

帖子

4

威望

1917

eV
积分
2846

Level 5 (御坂)

A Student

3#
发表于 Post on 2025-11-20 14:30:08 | 只看该作者 Only view this author
建议代码用<>插入代码放,更清晰。
  1. 就是这个
复制代码
敬仰一针见血的指责,厌倦别有用心的赞美。

92

帖子

0

威望

394

eV
积分
486

Level 3 能力者

4#
发表于 Post on 2025-11-20 14:40:54 | 只看该作者 Only view this author
标题可以更具体一点 方便检索之类的

517

帖子

1

威望

2412

eV
积分
2949

Level 5 (御坂)

5#
发表于 Post on 2025-11-20 15:35:51 | 只看该作者 Only view this author
本帖最后由 Daniel_Arndt 于 2025-11-21 09:51 编辑

我稍微看了一下你的脚本1,有两个可以改进的地方,一是gnuplot其实是提供了跟Linux Shell简单交互的功能,你可能不清楚,所以使用了一个temp.plot文件,你看看 https://www.plumed.org/doc-v2.5/user-doc/html/belfast-2.html 中“p "<head -400 HILLS" u 2:3:4:5 w xyer”、“spl "<paste negative_bias.dat correction.dat " u 1:2:($3+$8) w pm3d”那两行就大概能明白了。二是查找最小能量及其相应的距离其实可以用一个awk脚本来完成,我在 http://bbs.keinsci.com/thread-36574-1-1.html 中讲解FNR和NR时提到了这个小技巧。

1208

帖子

6

威望

2432

eV
积分
3760

Level 5 (御坂)

傻傻的木瓜

6#
发表于 Post on 2025-11-20 16:16:12 | 只看该作者 Only view this author
如果脚本为AI辅助编写,请在帖中声明AI生成内容与人工复核修改内容占最终代码的比例。

注意到四个脚本用了三种寻找文件的方式,不是很统一呢。
  1. if [ ! -f "test.relaxscanact.dat" ]; then
  2.     echo "错误: 找不到 test.relaxscanact.dat 文件!"
  3.     exit 1
  4. fi
复制代码
  1. num_out_files=$(find . -maxdepth 1 -type f-regex './[0-9]+\.out' | sort -n)
  2. if [ -z "$num_out_files" ]; then
  3.    echo "错误: 未找到数字.out文件!"
  4.    exit 1
  5. fi
复制代码
  1. if [ $(ls *.out 2>/dev/null | wc -l) -eq0 ]; then
  2.    echo "当前目录下没有找到.out文件"
  3.    exit 1
  4. fi
复制代码


感觉很多sed | awk或者grep | awk之类的指令都可以把pipeline简化成纯awk的。
√546=23.36664289109

330

帖子

0

威望

3006

eV
积分
3336

Level 5 (御坂)

计算化学路人甲

7#
发表于 Post on 2025-11-21 14:35:34 | 只看该作者 Only view this author
Uus/pMeC6H4-/キ 发表于 2025-11-20 16:16
如果脚本为AI辅助编写,请在帖中声明AI生成内容与人工复核修改内容占最终代码的比例。

注意到四个脚本用 ...

我觉得其实AI写也没什么,毕竟脚本他需要花费时间去检验和排除bug。作为一个不会写代码的人,我自己子平时让AI帮写代码时就不知花费了多少时间去让AI解决他写的代码的问题,这就是AI时代不会写代码的人的贡献。

至于写出更优的代码,这个就需要专业的人去做了。但是这个即使不是最优的代码,在目前的应用场景下,资源需求也不大,还是很有使用价值的

62

帖子

0

威望

1615

eV
积分
1677

Level 5 (御坂)

8#
发表于 Post on 2025-11-21 16:15:34 | 只看该作者 Only view this author
wal 发表于 2025-11-20 11:08
gnuplot的终端绘图步数一多就看不清了 实际用起来有点花瓶 我之前捣鼓过 最终还是转向了别的手法 (然而我的 ...

哈哈哈哈哈哈哈,你发出来的时候我看了,算是行为艺术吗

330

帖子

0

威望

3006

eV
积分
3336

Level 5 (御坂)

计算化学路人甲

9#
发表于 Post on 2025-11-21 17:29:39 | 只看该作者 Only view this author
wal 发表于 2025-11-20 11:08
gnuplot的终端绘图步数一多就看不清了 实际用起来有点花瓶 我之前捣鼓过 最终还是转向了别的手法 (然而我的 ...

也可以分享一下

683

帖子

12

威望

2820

eV
积分
3743

Level 5 (御坂)

鸩羽

10#
发表于 Post on 2025-11-21 19:37:46 | 只看该作者 Only view this author
玉米猫 发表于 2025-11-21 16:15
哈哈哈哈哈哈哈,你发出来的时候我看了,算是行为艺术吗

算是吧(
毕竟些那个的时候PNG的功能已经用了很久,用着挺舒服运行也很平稳,只是发现能终端绘图,感觉很好玩,就捣鼓了一下加上了,hhh
自加上到现在,用的次数一双手都数的过来
某不知名实验组从苞米地里长出来的计算选手

683

帖子

12

威望

2820

eV
积分
3743

Level 5 (御坂)

鸩羽

11#
发表于 Post on 2025-11-21 19:39:28 | 只看该作者 Only view this author
Novice 发表于 2025-11-21 17:29
也可以分享一下

过一段时间整理下发,我对它目前的形态不是特别满意><
某不知名实验组从苞米地里长出来的计算选手

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-1-24 07:41 , Processed in 0.184701 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list