|
本帖最后由 beefly 于 2022-8-28 15:34 编辑
ParaGauss是LCAO-GTO DFT计算程序,几乎是和ADF同时开发,不过ParaGauss没有发展起来,特别是十年前推出4.0版以后,后续的开发已经几乎停滞。2014年,经过一些删减的ParaGauss 3.2.1版被提交到Github上,实现了开源,但是没有讲如何编译,运行脚本似乎也已经过时,而且发布者已经离开了学术领域,不提供任何支持。今天花了一天时间,初步摸索出编译和运行方法。
- (可选)装GNU guile库( https://www.gnu.org/software/guile/ )。因为担心2014年的ParaGauss和现在的guile不兼容,故用了比较老的guile 2.2版。从源代码编译guile的方法见自带的README文件,要预装很多库。因为用Ubuntu系统,可以一键安装:
sudo apt-get install guile-2.2-dev
然后把头文件libguile.h的地址加入环境变量:
export C_INCLUDE_PATH=/usr/include/guile/2.2:$C_INCLUDE_PATH
目前没感觉出guile包装后的优越性,因此这一步可以跳过。 - 编译和安装OpenMPI。既可以用intel编译器,也可以用gnu编译器,网上有很多介绍。需要注意的是,运行configure的时候要加上参数 --enable-mpi-fortran 和 --enable-static 。安装后设置环境变量:
export PATH=$openmpi_install_dir/bin:$PATH
export LIBRARY_PATH=$openmpi_install_dir/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$openmpi_install_dir/lib:$LD_LIBRARY_PATH
export CPATH=$openmpi_install_dir/include:$CPATH (由于有Fortran代码调用头文件,必须设置CPATH) - 如果用gnu编译器,需要自行安装blas+lapack库。Ubuntu可以用命令:
- sudo apt-get install libblas-dev liblapack-dev
复制代码 然后写入环境变量:
- export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/blas:/usr/lib/x86_64-linux-gnu/lapack:$LIBRARY_PATH
- export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/blas:/usr/lib/x86_64-linux-gnu/lapack:$LD_LIBRARY_PATH
复制代码
- 到Github下载ParaGauss源代码( https://github.com/alexei-matveev/paragauss-gpl ),位于Code -- Download ZIP 。解压缩,cd进入主目录paragauss-gpl-master。现在需要针对编译环境写一个machine.mk文件。根据上面第2步所用的编译器:
a) 如果用的是Intel编译器(2020版),从paragauss-gpl-master/make里复制最接近的ifc13local.mk,放到主目录下:
cp make/ifc13local.mk ./machine.mk
然后编辑machine.mk中的两行:
MPIINCLUDE = -I$openmpi_install_dir/include
MPILIBS = -lmpi_usempif08 -lmpi -lmpi_mpifh
b) 如果用gnu编译器,则复制paragauss-gpl-master/make/krsk-gfortran-openmpi.mk:
cp make/krsk-gfortran-openmpi.mk ./machine.mk
然后编辑machine.mk:
删除这两行的“-x f95”
- F90BASEFLAGS = -x f95 -Wall #-fbounds-check #-pedantic-errors -Werror
- FBASEFLAGS = -x f95 -Wall #-fbounds-check #-pedantic-errors -Werror
复制代码 删除这一行的-lf77blas和-latlas(根据blas和lapack库文件的实际名称,必要的话可以修改LAPACKLIBS和BLASLIBS两个环境变量):
- BLASLIBS = -lf77blas -lblas -latlas
复制代码 在环境变量COMMINCLUDE之前定义MPIINCLUDE。例如:
- MPIINCLUDE = -I/$openmpi_path_dir/include
- COMMINCLUDE = $(MPIINCLUDE)
复制代码 如果用guile(见第1步),则把文件结尾的以下几行
- ifeq ($(WITH_GUILE),1)
- INCLUDE += -I$(BASEDIR)/guile
- LIBS += -lguile
- endif
复制代码 改为
- ifeq ($(WITH_GUILE),1)
- LIBS += $(shell guile-config link)
- CINCLUDE += $(shell guile-config compile)
- LINKFLAGS += -Wno-main
- endif
复制代码 c) machine.mk中其他的路径可酌情修改,但是似乎用不到。 - 如果不用guile(见第1步),修改Makefile,把其中的“WITH_GUILE = 1”改为“WITH_GUILE = 0”。
- 修改molmech/hess_and_opt_module.f90,1087-1089行有语法错误:
- str=rstep(nvar+1:nvar+3)
- call use_vect_s()
- call renew_slab(str)
复制代码 改为
- str_s=rstep(nvar+1:nvar+3)
- call use_vect_s()
- call renew_slab(str_s)
复制代码
- 如果用ifort编译器,修改文件modules/xc_func.f90,1388行会导致ifort编译器出现内部错误:
改为:
- type(scm_t) :: f1, f2, f0
- (略)
- f0 = f
- f = scm_list (f0, f1, f2)
复制代码
用 make 编译。编译成功后,
a) 若使用guile,会出现可执行程序 guile-qm 以及运行脚本 runqm
b) 若不使用guile,会出现可执行程序 mainscf_V3.2.1-yyyyymmdd(后缀中的yyyy、mm、dd分别是编译那天的年月日)
在其它位置另建一个目录,准备一个运行脚本run.sh。
a) 如果使用guile,运行脚本run.sh的内容如下:
- #!/bin/bash
- export PATH=$openmpi_install_dir/bin:$PATH
- export LD_LIBRARY_PATH=$openmpi_install_dir/lib:$LD_LIBRARY_PATH
- export PATH=$path_of_paragauss-gpl-master:$PATH
- # serial calculation:
- # runqm job-1
- # parallel calculation
- mpirun -np 4 runqm job-1
复制代码
b) 如果不使用guile,运行脚本run.sh的内容如下:
- #!/bin/bash
- export PATH=$openmpi_install_dir/bin:$PATH
- export LD_LIBRARY_PATH=$openmpi_install_dir/lib:$LD_LIBRARY_PATH
- export PATH=$path_of_paragauss-gpl-master:$PATH
- cp job-1 input
- # serial calculation:
- # mainscf_V3.2.1-yyyyymmdd
- # parallel calculation
- mpirun -np 4 mainscf_V3.2.1-yyyyymmdd
复制代码
“yyyyymmdd”要换成实际的后缀。job-1是输入文件名,可以从 paragauss-gpl-master/qa 里面找。复制的时候,要连同基组文件一起复制。
如果用intel编译器+mkl库,还要在run.sh中把相应的环境变量加上。例如:
- source $intel_compilers_path/bin/compilervars.sh intel64
- source $intel_compilers_path/mkl/bin/mklvars.sh intel64
复制代码
|
评分 Rate
-
查看全部评分 View all ratings
|