计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1347|回复 Reply: 10

[Multiwfn资源与经验] 介绍两个优雅地调用Multiwfn的方法(Linux)

[复制链接 Copy URL]

80

帖子

2

威望

556

eV
积分
676

Level 4 (黑子)

发表于 Post on 2022-10-26 15:55:18 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 pika02 于 2022-10-26 16:29 编辑

官方的安装方式推荐把一些命令丢进.bashrc,包括

  1. export OMP_STACKSIZE=200M
  2. ulimit -s unlimited
  3. export Multiwfnpath=/home/你的用户名/你的Multiwfn目录
  4. export PATH=$PATH:/home/你的用户名/你的Multiwfn目录
复制代码

(按照实际情况修改)

.bashrc是一个特殊的脚本文件,每次打开一个bash终端窗口时,便会新建一个bash shell(非登录shell)并且执行这些命令,用来初始化环境。
这几个export设置了几个环境变量,以及堆栈大小为无限

然而这样做可能会出现问题,比如在已经设置了ulimit -s unlimited的情况下,一些其他程序可能会翻车,比如winecfg
我当年就踩过这个坑,我说怎么winecfg老是报错


那么能不能只在想调用Multiwfn时才执行这些命令来初始化shell环境呢?

方法1
把上面这些语句包装成函数,也就是在.bashrc里把它们修改成:
  1. mtf(){
  2.     export OMP_STACKSIZE=200M
  3.     ulimit -s unlimited
  4.     export Multiwfnpath=/home/你的用户名/你的Multiwfn目录
  5.     export PATH=$PATH:/home/你的用户名/你的Multiwfn目录
  6. }
复制代码

这个函数名mtf是任意的,你可以改成任何你喜欢的名字,甚至改成emoji都可以,只要不跟别的命令冲突
如果你想用Multiwfn干一些活,只需要打开终端,输入mtf,你的环境就初始化好了,Multiwfn可执行文件也在你的PATH里面了,你可以跟往常一样干活。


方法2
每次打开终端后想用Multiwfn干活儿都得敲mtf,那有没有更懒的方法呢?

答案就是用一个脚本,代替Multiwfn主程序被调用。
创建一个脚本,内容如下
  1. export OMP_STACKSIZE=200M
  2. ulimit -s unlimited
  3. export Multiwfnpath=/home/你的用户名/你的Multiwfn目录
  4. /home/你的用户名/你的Multiwfn目录/Multiwfn "$@"
复制代码

调用脚本时,bash会生一个“孩子”,称为子shell,脚本前3行执行子shell的环境初始化,最后一行用绝对路径调用真正的Multiwfn可执行文件来干活,"$@"(包括双引号!)用来传递参数给Multiwfn
Linux有一个好,脚本能不能运行跟有没有后缀没关系,你可以给脚本取名叫不带后缀的Multiwfn(便于兼容已经写好的脚本),放在任何PATH目录里,然后.bashrc里面那些初始化Multiwfn环境的东西就可以删掉了,保持.bashrc的干净
如果你给脚本取名叫Multiwfn,那么你直接在终端里敲Multiwfn就能干活儿了,还能把要打开的文件名作为参数直接打开,比如Multiwfn file.xyz
整个脚本就是一个套娃,对于用户或者其他脚本而言,外面的娃看上去是一个可执行的Multiwfn,实际上外面的娃只负责创建工作环境,真正干活儿的是里面的娃
个人建议,你可以在自己的家目录里创建一个bin文件夹,然后.bashrc里面加上
  1. export PATH=$PATH:/home/你的用户名/bin
复制代码
这样把一些常用脚本或者别处下载来的二进制可执行文件扔到这个bin里,想运行谁就运行谁


评分 Rate

参与人数
Participants 7
威望 +1 eV +28 收起 理由
Reason
renzhogn424 + 3 精品内容
LittlePupil + 5 赞!
naoki + 5 你太可爱
zsu007 + 5 赞!
冰释之川 + 5 我很赞同
sobereva + 1
丁越 + 5 赞!

查看全部评分 View all ratings

80

帖子

2

威望

556

eV
积分
676

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2022-10-26 15:58:03 | 显示全部楼层 Show all
plus
按照这样的方法,还可以轻松实现g09和g16,orca4和orca5的共存

214

帖子

0

威望

4840

eV
积分
5054

Level 6 (一方通行)

跳跳猪

发表于 Post on 2022-10-26 20:39:05 | 显示全部楼层 Show all
这个。在超算交作业不都是这么搞么
流年似水,浮生如梦。

228

帖子

0

威望

1921

eV
积分
2149

Level 5 (御坂)

发表于 Post on 2022-10-26 21:09:23 | 显示全部楼层 Show all
感觉每次手动输入Multiwfn,也没啥麻烦的样子?

865

帖子

0

威望

2477

eV
积分
3342

Level 5 (御坂)

发表于 Post on 2022-10-26 21:12:59 | 显示全部楼层 Show all
lonemen 发表于 2022-10-26 21:09
感觉每次手动输入Multiwfn,也没啥麻烦的样子?

作为懒癌晚期的我,要拼写挺长一串,还要切换大小写,很容易错。

所以,我直接复制一个Multiwfn,命名为m,所以,直接输入m也唤起Multiwfn

228

帖子

0

威望

1921

eV
积分
2149

Level 5 (御坂)

发表于 Post on 2022-10-26 21:23:11 | 显示全部楼层 Show all
牧生 发表于 2022-10-26 21:12
作为懒癌晚期的我,要拼写挺长一串,还要切换大小写,很容易错。

所以,我直接复制一个Multiwfn,命名 ...

哈哈,我是把首字母改成了小写m,你这,这,这,更牛。佩服

80

帖子

2

威望

556

eV
积分
676

Level 4 (黑子)

 楼主 Author| 发表于 Post on 2022-10-28 20:25:54 | 显示全部楼层 Show all
牧生 发表于 2022-10-26 21:12
作为懒癌晚期的我,要拼写挺长一串,还要切换大小写,很容易错。

所以,我直接复制一个Multiwfn,命名 ...

还是阁下比较懒,鄙人甘拜下风

347

帖子

0

威望

1387

eV
积分
1734

Level 5 (御坂)

发表于 Post on 2022-10-28 22:47:39 | 显示全部楼层 Show all
牧生 发表于 2022-10-26 21:12
作为懒癌晚期的我,要拼写挺长一串,还要切换大小写,很容易错。

所以,我直接复制一个Multiwfn,命名 ...

用 Linux 系统不会用 Tab 键的么……

249

帖子

1

威望

2342

eV
积分
2611

Level 5 (御坂)

发表于 Post on 2022-10-29 03:39:40 | 显示全部楼层 Show all
第一眼把mtf看成了wtf,我心想你为啥对这程序有这么大意见

865

帖子

0

威望

2477

eV
积分
3342

Level 5 (御坂)

发表于 Post on 2022-10-29 07:21:03 | 显示全部楼层 Show all
乐平 发表于 2022-10-28 22:47
用 Linux 系统不会用 Tab 键的么……

会用,但终究还是因为懒

18

帖子

2

威望

578

eV
积分
636

Level 4 (黑子)

发表于 Post on 2022-11-23 15:56:50 | 显示全部楼层 Show all
想隔离环境也可试试我做的 Multiwfn Docker Image。
参见 Multiwfn on macOS

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
pika02 + 5 docker可太行了

查看全部评分 View all ratings

本版积分规则 Credits rule

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

GMT+8, 2023-2-7 03:02 , Processed in 0.903897 second(s), 23 queries .

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