计算化学公社

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

[Quantum ESPRESSO] 整合Environ插件的Quantum Espresso安装经验

[复制链接 Copy URL]

111

帖子

0

威望

4243

eV
积分
4354

Level 6 (一方通行)

本帖最后由 qczgzly 于 2022-11-4 10:13 编辑

       很多周期性体系的计算需要考虑溶剂效应。CP2K程序有自带的SCCS方法进行隐式溶剂化处理,而QE则依赖于外部插件Environ。environ使用并不容易,需要与QE一起进行安装编译。经过几天的折腾,总算是安装成功。由于QE的安装也不是很容易,所以我把安装过程写在这里,供各位群友参考。[url=]Undo[/url]

       0. 准备工作
       系统为CentOS7.6。之前Sob社长有篇文章介绍用OpenMP编译QE,本文采用MPI方式。设已安装好intel编译器,依次执行以下语句能够得到相应信息:
  1. $ source ~/intel/parallel_studio_xe_2019.1.053/bin/psxevars.sh
  2. $ ifort -v
  3. $ icc -v
复制代码
      下载Environ3.0和Quantum ESPRESSO7.1安装包,解压到安装目录/opt(或其它任意路径)。

       1. 安装Environ3.0
       解压后的Environ路径为/opt/environ3.0。进入该路径,进行环境配置,输入
  1. $ ./configure --with-qe=/opt/QE7.1 --prefix=/opt/environ3.0 MPIF90=mpiifort CC=mpiicc F90=ifort F77=mpiifort
复制代码
其中--with-qe=/opt/QE7.1似可不写,但我没试。--prefix=/opt/environ3.0指安装路径,MPIF90、CC、F90、F77为调用编译器。回车后出现大量输出信息,最后有success即说明完成。
       接下来用vim打开make.inc文件,找到下列大写字母字段所在行,改成如下结果:
  1. FFLAGS         =   -O3 -assume byterecl -g -traceback
  2. BLAS_LIBS      =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  3. LAPACK_LIBS    =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  4. SCALAPACK_LIBS =  -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  5. FFT_LIBS       =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  6. MPI_LIBS       =  -L/home/aries/intel/impi/2019.1.144/intel64/lib/ -lmpi
复制代码
第02~05行等号后面的一串内容是怎么来的呢?需要进入https://www.intel.com/content/ww ... isor.html#gs.hhfnvn网页,在一系列下拉列表中选择正确的参数,如下图所示:
              
修改完毕,保存退出。然后执行下列语句,进行编译:
  1. $ source ~/intel/parallel_studio_xe_2019.1.053/bin/psxevars.sh
  2. $ make compile -j4
复制代码

       2. 安装QE7.1
       QE的安装方式与Environ基本相同。解压后的QE路径为/opt/qe-7.1,进入该路径,进行环境配置,输入
  1. $ source ~/intel/parallel_studio_xe_2019.1.053/bin/psxevars.sh
  2. $ ./configure --with-environ=/opt/environ3.0 --prefix=/opt/QE7.1 MPIF90=mpiifort CC=mpiicc F90=ifort F77=mpiifort
复制代码
注意此处--with-environ=/opt/envirorn3.0为关键参数,将environ插件加入QE安装。--prefix=/opt/QE7.1指安装路径,也可改为其它。后面的编译器指定与之前一样。
       执行完后打开make.inc文件,注意到与environ有关的字段
  1. ENVIRON_LIBS = -L/opt/environ3.0/libs -lenvsrc -lenvfft -lenvutil
复制代码

并对其它字段做出与上一节相同的修改:
  1. FFLAGS         =   -O3 -assume byterecl -g -traceback
  2. BLAS_LIBS      =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  3. LAPACK_LIBS    =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  4. SCALAPACK_LIBS =  -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  5. FFT_LIBS       =   -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
  6. MPI_LIBS       =  -L/home/aries/intel/impi/2019.1.144/intel64/lib/ -lmpi
复制代码
保存退出。执行下列语句,进行安装:
  1. $ source ~/intel/parallel_studio_xe_2019.1.053/bin/psxevars.sh
  2. $ make all install -j4
复制代码
安装完毕可看到/opt/QE7.1路径下多了一个bin文件夹,里面有很多可执行文件,如pw.x、ph.x等。我个人的情况是提示安装成功,但没有看到这些文件。于是上翻安装过程输出信息,发现有很多“没有写入权限”的提示。于是提高文件夹权限,并sudo一下:
  1. $ chmod g+w /opt/QE7.1
  2. $ sudo make all install -j4
复制代码
成功。

       3. 使用QE+Environ
       在QE的输入文件中加入environ相关字段,下面是一个添加隐式水溶剂的简单示例:
  1. &environ
  2.   verbose = 1
  3.   environ_thr = 1.d2
  4.   environ_type = 'water'
  5. /
  6. &boundary
  7. /
  8. &electrostatic
复制代码
字段的详细说明见environ官网。值得一提的是,通过对&boundary和EXTERNAL_CHARGES字段的设置,还可添加一定形式的电荷分布,这对于模拟一些特殊的界面体系非常有帮助。       输入文件写好后,将文件名改为environ.in,否则安装程序不认。输入下述命令进行计算:
  1. $ source ~/intel/parallel_studio_xe_2019.1.053/bin/psxevars.sh
  2. $ mpirun -np 4 pw.x - --environ -inp environ.in > task-environ.out
复制代码
我在执行时遇到一个小问题,退出登录时任务自动停止。解决办法是在mpirun命令前添加sleep 20 && ,然后立马退出登录。这样20秒后再登录服务器,就能看到pw.x已运行,且反复登录退出都不影响进程。打开task-environ.out,看到如下信息:
  1.         Reading input from environ.in
  2. Warning: card &ENVIRON ignored
  3. Warning: card  VERBOSE = 1 ignored
  4. Warning: card  ENVIRON_THR = 1.D2 ignored
  5. Warning: card  ENVIRON_TYPE = 'WATER' ignored
  6. Warning: card / ignored
  7. Warning: card &BOUNDARY ignored
  8. Warning: card / ignored
  9. Warning: card &ELECTROSTATIC ignored
  10. Warning: card  PBC_AIXS= 3 ignored
  11. Warning: card  PBC_DIM= 3 ignored
  12. Warning: card / ignored

  13.         Current dimensions of program PWSCF are:
  14.         Max number of different atomic species (ntypx) = 10
  15.         Max number of k-points (npk) =  40000
  16.         Max angular momentum in pseudopotentials (lmaxx) =  4

  17.         Reading input from environ.in:
  18.         * setting up water environment
  19.         * using electronic solvent mode
  20.         * setting boundary derivatives method to SCCS default
  21.         * ignoring &electrostatic namelist
复制代码
先是警告忽略&environ等字段,然后又读取了这些字段,不太理解。不过再往后看,又出现了很多关于environ的信息,表明隐式溶剂效应已被纳入计算。注意到输入输出文件所在目录下多了一个environ.debug文件。如果发现一段时间内task-environ.out没有变化,有可能是environ正在运行,输出信息在environ.debug里。
       计算完成后输出文件显示JOB DONE,即成功结束。与未考虑溶剂效应的计算相比,total energy略有降低,计算时长增加了约一倍。

       4. 后记
       以上为参考网络资料加实践的结果。因为我不太懂编译相关知识,很多地方只能说明如何操作,不能说明原理。也可能存在很多概念错误、描述不当等问题,欢迎大家提出宝贵意见或建议。

       5. 参考资料
       https://environ.readthedocs.io/en/latest/index.html
       https://www.bilibili.com/video/B ... 5305272976cf64ad808

屏幕快照 2022-11-04 10.11.59.png (178.95 KB, 下载次数 Times of downloads: 28)

oneMKL Link Line

oneMKL Link Line

评分 Rate

参与人数
Participants 5
eV +25 收起 理由
Reason
snljty2 + 5 好物!
chever + 5 精品内容
WilliamH + 5 谢谢
卡开发发 + 5 好物!
ChemG + 5 赞!

查看全部评分 View all ratings

gcq#413: "I know poetry is not dead, nor genius lost; nor has Mammon gained power over either, to bind or slay; they will both assert their existence, their presence, their liberty and strength again one day." (Jane Eyre in Jane Eyre by Charlotte Bronte)

111

帖子

0

威望

4243

eV
积分
4354

Level 6 (一方通行)

5#
 楼主 Author| 发表于 Post on 2023-9-29 15:04:49 | 只看该作者 Only view this author
丁越 发表于 2023-9-28 13:20
我纠正几点内容:

这里面--with-qe=/opt/QE7.1是必须要写的参数,而--prefix=/opt/environ3.0没有必要写 ...

非常感谢您的指导!
gcq#413: "I know poetry is not dead, nor genius lost; nor has Mammon gained power over either, to bind or slay; they will both assert their existence, their presence, their liberty and strength again one day." (Jane Eyre in Jane Eyre by Charlotte Bronte)

432

帖子

11

威望

3428

eV
积分
4080

Level 6 (一方通行)

4#
发表于 Post on 2023-9-28 13:20:30 | 只看该作者 Only view this author
我纠正几点内容:
其中--with-qe=/opt/QE7.1似可不写,但我没试。--prefix=/opt/environ3.0指安装路径,MPIF90、CC、F90、F77为调用编译器。回车后出现大量输出信息,最后有success即说明完成。

这里面--with-qe=/opt/QE7.1是必须要写的参数,而--prefix=/opt/environ3.0没有必要写。

执行完后打开make.inc文件,注意到与environ有关的字段

这些手动添加的内容不是必须的。假如你的oneAPI里的模块都是标准安装的,那么程序就会自动找到这些参数。

在QE的输入文件中加入environ相关字段,下面是一个添加隐式水溶剂的简单示例:

pw.x和Environ的输入文件都是单独的,pw.x输入文件正常该怎么写就怎么写。Environ的输入文件文件名必须是envion.in,然后提交任务时的命令应该是:inf="cell.relax.in" ;mpirun -np 64 pw.x -i ${inf} --environ &> ${inf//in/out}

评分 Rate

参与人数
Participants 1
eV +4 收起 理由
Reason
snljty2 + 4 谢谢分享

查看全部评分 View all ratings

自由发挥,野蛮生长

3622

帖子

3

威望

1万

eV
积分
18440

Level 6 (一方通行)

第一原理惨品小作坊

3#
发表于 Post on 2022-12-13 21:50:39 | 只看该作者 Only view this author
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

353

帖子

0

威望

2029

eV
积分
2382

Level 5 (御坂)

真 掘墓者

2#
发表于 Post on 2022-12-13 09:56:28 | 只看该作者 Only view this author
xjb改 environ不支持7.x 只支持6
圣诞刨坟忙

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

GMT+8, 2024-11-26 11:45 , Processed in 0.214073 second(s), 25 queries , Gzip On.

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