计算化学公社

 找回密码 Forget password
 注册 Register
Views: 2528|回复 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: 29)

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)

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
圣诞刨坟忙

3622

帖子

3

威望

1万

eV
积分
18440

Level 6 (一方通行)

第一原理惨品小作坊

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

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

自由发挥,野蛮生长

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)

本版积分规则 Credits rule

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

GMT+8, 2024-11-26 13:27 , Processed in 0.173049 second(s), 24 queries , Gzip On.

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