计算化学公社

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

[Multiwfn资源与经验] 一个自动输出HOMO-LUMO分子轨道以及附近轨道的脚本

[复制链接 Copy URL]

362

帖子

1

威望

4376

eV
积分
4758

Level 6 (一方通行)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 exity 于 2021-3-30 22:47 编辑

2021.03.30 更新了脚本,实现如下功能1 更清楚的屏幕输出
2 批量处理多个fchk文件并将生成的cub文件移入同名文件夹
3 输出的cub文件按照分子轨道顺序编号并对homo lumo轨道进行额外标记
4 改变屏幕输出的字体和背景颜色.......没什么用的功能






===================================================

#!/bin/bash
abovelumo=2
belowhomo=2
frontcolor=36               #字体颜色 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
backgroundcolor=40          #背景颜色 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色
for inf in *.fchk
    do (
    echo 0 > tmp.mf                                                                                                                                 #建立内容为0的mf文件,供multiwfn使用输出含有HOMO LUMO编号内容的txt
    Multiwfn ${inf} < tmp.mf > ${inf//.fchk}.tmp
    h=$(grep "is HOMO" ${inf//.fchk}.tmp | awk '{print $3}')  #抓取含有is HOMO字段的行并提取第3列数据
    l=$(grep "is LUMO" ${inf//.fchk}.tmp | awk '{print $2}')  #抓取含有is LUMO字段的行并提取第2列数据
    range=$[$h-$belowhomo]'-'$[$l+$abovelumo]
    echo -e "\033[1;${frontcolor};${backgroundcolor}mThe file being processed is ${inf}, all cube files will be moved into the folder with same name.\033[0m"
    printf "%-4s %-7s %-2s \033[1;${frontcolor};${backgroundcolor}m%-15s\n\033[0m" Your highest is $[$l+$abovelumo]
    printf "%-4s %-7s %-2s \033[1;${frontcolor};${backgroundcolor}m%-15s\n\033[0m" Your lumo    is $l
    printf "%-4s %-7s %-2s \033[1;${frontcolor};${backgroundcolor}m%-15s\n\033[0m" Your homo    is $h
    printf "%-4s %-7s %-2s \033[1;${frontcolor};${backgroundcolor}m%-15s\n\033[0m" Your lowest  is $[$h-$belowhomo]
    printf "%-4s %-7s %-2s \033[1;${frontcolor};${backgroundcolor}m%-5s %-2s \033[0m%-8s %-2s %-5s\n" Your range is $range, $[$abovelumo+$belowhomo+2] orbitals in total.
    echo -e "\033[1;${frontcolor};${backgroundcolor}mMoment please, cube files are be generated by Multiwfn...\033[0m"
    echo $range > tmp3.txt
    echo 200 >> tmp2.mf                 #进入主功能200
    echo 3 >> tmp2.mf                   #生成轨道波函数文件
    cat tmp3.txt >> tmp2.mf             #不知道为什么这里echo $range >> 不能用
    echo 3 >> tmp2.mf                   #输出高质量格点,1,2分别对应低和中等质量
    echo 1 >> tmp2.mf                   #分别输出轨道cub文件
    Multiwfn ${inf} < tmp2.mf >> null
    rm ${inf//.fchk}.tmp tmp.mf tmp3.txt tmp2.mf null
    mv "orb$(printf "%06d" ${h}).cub" "orb$(printf "%06d" ${h})_homo.cub"                #输出6位自动补0的HOMO轨道编号
    mv "orb$(printf "%06d" ${l}).cub" "orb$(printf "%06d" ${l})_lumo.cub"                #输出6位自动补0的HOMO轨道编号
    mkdir ${inf//.fchk}
    mv *cub ${inf//.fchk}
    # ####test code####
    # #echo h=$(sed -n 1p homo.txt)
    # #echo l=$(sed -n 1p lumo.txt)
    )
done

===================================================

缘起:有次考察分子轨道的时候,想批量输出HOMOLUMO附近正负3的轨道,脑洞一开,在输入分子轨道编号的时候在Multiwfn里输入了如下命令
h-3,h-2,h-1,h,l,l+1,l+2,l+3
当然运行失败,恳请社长修改代码未遂之后,受社长提示用脚本来干这个事情。

跌跌撞撞写了一个功能上能用的,但是语法很啰嗦的sh脚本,现在发出来供大家批评,如果有人能提供一样功能又简洁优美的脚本那就太好了。
使用方法
和fchk文件放在同一目录,修开头两行的数字,分别代表输入高于LUMO的几个轨道,低于HOMO的几个轨道,我测试过正整数和零,没有什么问题,没有测试负数以及其他奇怪的字符,请读者自行尝试。
例如,如果你要输出LUMO以上3个轨道,HOMO以下4个轨道,就改为下面这样。
abovelumo=3
belowhomo=4


非要说这个脚本有什么好处,恐怕就是不需要每次都点0功能,肉眼看HOMO LUMO对应的编号了吧。
感觉也没什么用的样子.....

#!/bin/bash
abovelumo=2
belowhomo=2
for ((l=1;l<=${abovelumo};l++))
do
echo l+$[$[${abovelumo}+1]-${l}] >> tmp.txt
done
echo l >> tmp.txt
echo h >> tmp.txt
for ((h=-1;h>=-${belowhomo};h--))
do
echo h${h} >> tmp.txt
done
for ((n=1;n<=$[${abovelumo}+${belowhomo}+2];n++))
do
touch tmp2.mf
echo 200 >> tmp2.mf                 #进入主功能200
echo 3 >> tmp2.mf                   #生成轨道波函数文件
echo replacedwithx >> tmp2.mf       #输入轨道序号,这里使用随意字符,后续会用变量代替
echo 3 >> tmp2.mf                   #输出高质量格点,1,2分别对应低和中等质量
echo 1 >> tmp2.mf                   #分别输出轨道cub文件
x=$(sed -n ${n}p tmp.txt)
cp tmp2.mf ${x}_showorb.mf
sed -i "3c ${x}" ${x}_showorb.mf
    for inf in *.fchk
    do (
    Multiwfn ${inf} < ${x}_showorb.mf
    )
    done
done
mkdir ${inf//.fchk}_orbs
mv *.cub ${inf//.fchk}_orbs
rm *.mf tmp.txt








around_homolumo.sh

2.6 KB, 下载次数 Times of downloads: 69

评分 Rate

参与人数
Participants 12
eV +56 收起 理由
Reason
Novice + 5
liuzl + 3 好物!
LQY + 4 牛!
ChunLinX + 5 GJ!
cyx98 + 5 谢谢
YuhangJ + 5 谢谢
hcy002 + 1
ggdh + 5 MCubegen可以实现一样的功能,不过并不简洁.
sobereva + 8
函数与激情 + 5 好物!
didi_dudu + 5
lonemen + 5 赞!

查看全部评分 View all ratings

286

帖子

0

威望

2685

eV
积分
2971

Level 5 (御坂)

计算化学路人甲

5#
发表于 Post on 2023-5-17 17:34:12 | 只看该作者 Only view this author
exity 发表于 2023-5-17 16:55
万万没想到,我这小破脚本还能被二次开发!

您写的很好,我一看就喜欢上了。实际用了下发现些许不足,所以又简单修改了一下

362

帖子

1

威望

4376

eV
积分
4758

Level 6 (一方通行)

4#
 楼主 Author| 发表于 Post on 2023-5-17 16:55:37 | 只看该作者 Only view this author
Novice 发表于 2023-5-17 14:04
2023.5.17 优化了脚本:
1. 使得Multiwfn不弹窗;
2. 屏幕不输出非优雅退出Multiwfn的报错信息;

万万没想到,我这小破脚本还能被二次开发!

286

帖子

0

威望

2685

eV
积分
2971

Level 5 (御坂)

计算化学路人甲

3#
发表于 Post on 2023-5-17 14:04:13 | 只看该作者 Only view this author
本帖最后由 Novice 于 2023-5-17 17:49 编辑

2023.5.17 优化了脚本:
1. 使得运行脚本时Multiwfn不弹窗;
2. 屏幕不输出非优雅退出Multiwfn的报错信息;
3. 将所有分子的HOMO/LUMO能级值输出到Orb_Val_Sum.txt文件中。

around_homolumo.sh

3.03 KB, 下载次数 Times of downloads: 77

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
exity + 5 GJ!

查看全部评分 View all ratings

245

帖子

0

威望

2576

eV
积分
2821

Level 5 (御坂)

2#
发表于 Post on 2021-6-23 09:25:39 | 只看该作者 Only view this author
厉害厉害,谢谢分享!

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

GMT+8, 2024-11-27 18:32 , Processed in 0.270642 second(s), 26 queries , Gzip On.

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