一、 背景介绍
Gaussian是目前计算化学领域内最流行、应用范围最广的商业化量子化学计算程序包。它最早是由美国卡内基梅隆大学的约翰·波普(John A Pople, 1998年诺贝尔化学奖)在60年度末、70年代初主导开发的。其名称来自于该软件中所使用的高斯型基组。最初,Gaussian的著作权属于约翰·波普供职的卡内基梅隆大学;1986年,约翰·波普进入美国西北大学后,其版权由Gaussian,Inc.公司所持有。Gaussian软件的出现降低了量子化学计算的门槛,使得从头计算方法可以广泛使用,从而极大地推动了其在方法学上的进展。
到目前为止,Gaussian已经推出了12个版本,包括Gaussian70、Gaussian76、Gaussian80、Gaussian82、Gaussian86、Gaussian88、Gaussian90、Gaussian92、Gaussian92/DFT、Gaussian94、Gaussian98、Gaussian03等,其版本数字也是该版本发布的年份。其中,每个版本发布后,还陆续发布了一些这些版本的修订版。目前最新的版本是Gaussian03 Revision D.01/D.02。
Gaussian程序是用FORTRAN语言编写的,它从量子力学的基本原理出发,可计算能量、分子结构、分子体系的振动频率以及大量从这些基本计算方法中导出的分子性质。它能用于研究不同条件下的分子和反应,包括稳定的粒子和实验上难以观测的化合物,例如瞬时的反应中间物和过渡结构。
Gaussian的并行模式是采用OpenMP来实现的。OPENMP的并行实现是针对共享内存的机器的,实现方法简单。因此Gaussian在共享内存的机器上,能获得很好的性能。对于跨节点的计算,Gaussian使用TCP Linda软件来实现。TCP Linda是一个虚拟共享内存的并行执行环境,它可以把一个通过网络连接的分布式内存的机群或工作站虚拟成共享内存环境,从而使像Gaussian这样的用OPENMP实现并行的程序能够在分布式内存的机器上运行。
二、 软件的安装设置
1、将压缩包解开
# tar zxf OPT-900N.taz //g03 E01以上版本支持上海处理器 (可以查看文件日期在2007年以后的)
2、准备环境变量文件g03.sh
放入g03源代码目录,如/home/users/mjhe/g03/
#cat g03.sh
g03root="/home/users/mjhe"
GAUSS_SCRDIR="/scratch"
export g03root GAUSS_SCRDIR
. $g03root/g03/bsd/g03.profile
3、准备运行脚本
放入算例目录,如g03test
> cat g03.pbs
###########################################################################
# Script for submitting parallel Gaussian 03 jobs to Dawning cluster.
# Lines that begin with #PBS are PBS directives (not comments).
# True comments begin with "# " (i,e., # followed by a space).
###########################################################################
#PBS -S /bin/bash
#PBS -N gaussian
#PBS -j oe
#PBS -l nodes=1:ppn=8
##PBS -l walltime=860:00:00
#PBS -V
##PBS -q middle
#############################################################################
# -S: shell the job will run under
# -o: name of the queue error filename
# -j: merges stdout and stderr to the same file
# -l: resources required by the job: number of nodes and processors per node
# -l: resources required by the job: maximun job time length
#############################################################################
INFILE=$file
# Define variable "jobname".
jobname=`echo $INFILE | awk -F. '{printf $1}'`
username=`whoami`
# Define the location where Gaussian was installed and run a setup script, g03.profile.
g03root="/data/users/ceszhcy/"
GAUSS_SCRDIR="/state/partition1/tmp/"
export g03root GAUSS_SCRDIR
. $g03root/g03/bsd/g03.profile
# Make a directory in scr and copy .com and .g03 file to there.
GAUSS_RUNDIR=${GAUSS_SCRDIR}/${username}.${PBS_JOBID}
if [ ! -a $GAUSS_RUNDIR ]; then
echo "Scratch directory $GAUSS_RUNDIR created."
mkdir -p $GAUSS_RUNDIR
fi
cp $PBS_O_WORKDIR/${jobname}.* $GAUSS_RUNDIR
ORIG_PBS_O_WORKDIR=${PBS_O_WORKDIR}
cd $PBS_O_WORKDIR
# Setup for Gaussian 03:
# =======================
# Make a scratch directory if it doesn't already exist.
GAUSS_SCRDIR=${GAUSS_SCRDIR}/${username}.${PBS_JOBID}/${jobname}
if [ ! -a $GAUSS_SCRDIR ]; then
echo "Scratch directory $GAUSS_SCRDIR created."
mkdir -p $GAUSS_SCRDIR
fi
export GAUSS_SCRDIR
echo "Using $GAUSS_SCRDIR for temporary Gaussian 03 files."
# Define node list
cat $PBS_NODEFILE|uniq > $GAUSS_SCRDIR/tsnet.nodes
NODE_NUM=`cat $PBS_NODEFILE|uniq |wc -l`
NP=`cat $PBS_NODEFILE|wc -l`
nodes=`cat $PBS_NODEFILE |uniq| awk '{printf("%s,",$1)}'`
sharecpu=`expr $NP / $NODE_NUM`
G03_NODEFILE="$GAUSS_SCRDIR/tsnet.nodes"
GAUSS_LFLAGS=" -mp 2 -nodefile $G03_NODEFILE"
export GAUSS_LFLAGS
echo pbs nodefile:
cat $G03_NODEFILE
#Run a Gaussian command file, water03.com, redirecting output to a file, water03.log
cd $GAUSS_RUNDIR
echo "%NProcShared=$sharecpu" > ${jobname}.Input.${PBS_JOBID}
if [ $NODE_NUM -ne 1 ];
then
echo "%LindaWorker=$nodes" >> ${jobname}.Input.${PBS_JOBID}
fi
grep -v nproc $INFILE |grep -v NProcShared |grep -v LindaWorker >>${jobname}.Input.${PBS_JOBID}
echo "Starting Gaussian run at" `date`
if [ $NODE_NUM -eq 1 ];
then
time g03 < ${jobname}.Input.${PBS_JOBID} > $GAUSS_RUNDIR/${jobname}.log
fi
else
time g03l < ${jobname}.Input.${PBS_JOBID} > $GAUSS_RUNDIR/${jobname}.log
fi
#time g03 < ${jobname}.Input.${PBS_JOBID} > ${jobname}.log
echo "Finished Gaussian run at" `date`
PBS_O_WORKDIR=${ORIG_PBS_O_WORKDIR}
echo $PBS_O_WORKDIR
mv $GAUSS_RUNDIR/${jobname}.* $PBS_O_WORKDIR
mv $GAUSS_SCRDIR/*.chk $PBS_O_WORKDIR
echo "$GAUSS_SCRDIR"
rm -Rf $GAUSS_SCRDIR
4、测试安装是否成功
准备算例test397.com
在算例目录下修改g03.pbs,然后执行qsub g03.pbs -v file=test397.com
cd ~/g03test
qsub g03.pbs -v file=test397.com
5、其他
三、 注意事项
1、本文命令、代码和超链接采用斜体五号字表示
2、算例文件名必须有两部分组成,前缀+后缀,中间用 . 隔开
3、需要修改一下两个文件以适应linda并行时的配置情况:
#vi /data2/home/test/g03/linda7.2/opteron-linux-I8/bin/LindaLauncher
/mf/giovanni/static/g03/linda7.2/opteron-linux-I8/bin/cLindaLauncher
#vi /data2/home/test//g03/ntsnet
/mf/giovanni/static/g03/linda7.2/opteron-linux-I8/bin/true_ntsnet
4、在所以参与计算的节点根目录上增加/scratch/,并设置开放的权限
mkdir /scratch
chmod 777 /scratch
5、其他
四、 参考文献
1 量子化学计算程序包GAUSSIAN 王涛 上海超级计算中心 上海 201203 [email protected]
2