脚本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文件。
|