- Исследование электронной структуры молекул с помощью большого разнообразия методов - от Хартри-Фока и теории функционала плотности до различных вариаций связанных кластеров и конфигурационного взаимодействия;
- Изучение больших молекулярных систем путем использования модуля QM/MM;
- Для твердых тел и иных периодических структур можно применять плосковолновой модуль, который позволяет проводить расчеты на уровне теории функционала плотности как в плосковолновом базисе с использованием псевдопотенциалов, так и по линеаризованному методу присоединенных плоских волн с проектор-функцией (PAW);
- Молекулярная динамика с использованием классических силовых полей AMBER и CHARMM или квантово-механического и смешанного подхода.
В современном мире суперкомпьютерные технологии получили большое распространение, однако, бюрократические сложности отталкивают исследователей от применения многопользовательских сверхмощных машин в специализированных центрах в сторону лабораторных рабочих станций, на которых удельное количество вычислительных ресурсов на человека, как правило, больше, чем на суперкомпьютере. Поэтому рассмотрим несколько вариантов установки NWChem на рабочую станцию под управлением операционной системы GNU/Linux.
Итак, что понадобится:
1. Исходный код NWChem. На момент написания поста номер последнего релиза 6.8.
2. Компиляторы C++ и FORTRAN. В целом, здесь есть два разумных варианта: GNU GCC и Intel C++/Fortran. Первый вариант бесплатный и присутствует в любом дистрибутиве GNU/Linux, второй коммерческий, скорость исполнения генерируемого кода которого чуть выше, а надежность ниже, лично я предпочитаю GCC (хотя во многих научных коллективах принято использовать Intel, поскольку в стародавние времена качество их компиляторов значительно превосходило свободные от GNU).
3. Одна из реализаций Message Passing Interface, он же MPI (мы же хотим использовать все процессорные ядра, правильно?). Количество вариантов растет: среди свободных есть два - OpenMPI и MPICH, OpenMPI находится в большинстве репозиториев GNU/Linux, MPICH придется собирать самостоятельно из исходных кодов (его надежность и удобство в использовании, как показывает практика, несколько выше, чем у OpenMPI). Впрочем, при использовании компиляторов от Intel любой из этих реализаций MPI придется собирать самому. Но есть еще одна опция: коммерческий Intel MPI, который поставляется в кластерной версии Intel Studio и является вариацией на тему MVAPICH (японский MPICH).
4. Математические библиотеки BLAS, LAPACK, SCALAPACK. Тоже два варианта, от сообщества - OpenBLAS + SCALAPACK и от Intel - Math Kernel Libraries. Также существуют нетлибовские библиотеки, с которых, собственно, и началось существование рутин BLAS и LAPACK, но их рассматривать не будем ввиду довольно серьезного отставания в производительности от OpenBLAS и MKL. Здесь я бы порекомендовал использовать MKL, которые бесплатны и быстры. Для скачивания версии 2018.2.199 ткнуть здесь.
Из обязательного это всё. Также если хотим использовать скрипты на Python понадобится оный версии 2.7; CUDA для ускорения расчетов CCSD(T) лишней не будет.
Далее последовательность действий такова:
1. Открываем терминал, распаковываем NWChem в любое удобное место и идем туда.
2. Сохраняем скрипт с набором переменных прямо в директорию NWChem под каким угодно именем, у меня config.sh
Код: Выделить всё
#===================================================#
# GA Settings #
#===================================================#
export CC=gcc
export CXX=g++
export FC=gfortran
export F77=gfortran
export USE_MPI=yes
export MPI_LOC=/usr
export MPI_LIB=$MPI_LOC/lib
export MPI_INCLUDE=$MPI_LOC/include
export LIBMPI="-lmpifort -lmpi"
export ARMCI_NETWORK=MPI-TS
export MSG_COMMS=MPI
#===================================================#
# NWChem Settings #
#===================================================#
export TARGET=LINUX64
export NWCHEM_TARGET=LINUX64
export NWCHEM_MODULES="all nwxc python"
export NWCHEM_TOP=$(pwd)
export NWCHEM_LONG_PATHS=Y
export NWCHEM_MPIF_WRAP=$MPI_LOC/bin/mpifort
export NWCHEM_MPIC_WRAP=$MPI_LOC/bin/mpicc
export NWCHEM_MPICXX_WRAP=$MPI_LOC/bin/mpicxx
export LARGE_FILES=TRUE
export USE_NOFSCHECK=TRUE
export MRCC_METHODS=TRUE
#===================================================#
# Python Settings #
#===================================================#
export PYTHONVERSION=2.7
export PYTHONHOME=/usr
export PYTHONLIBTYPE=so
export USE_PYTHON64=y
#===================================================#
# BLAS/LAPACK Settings #
#===================================================#
export BLAS_SIZE=8
export LAPACK_SIZE=8
export SCALAPACK_SIZE=8
export HAS_BLAS=yes
export USE_SCALAPACK=y
export MKLLIB=$MKLROOT/lib/intel64
export MKLINC=$MKLROOT/include
export BLASOPT="-L$MKLLIB -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export LAPACK_LIB="-L$MKLLIB -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_intelmpi_ilp64 -lpthread -lm"
#===================================================#
# CUDA Settings #
#===================================================#
#export TCE_CUDA=y
#export CUDA_HOME=/opt/cuda
#export CUDA_LIBS="-L$CUDA_HOME/lib64 -lcudart"
#export CUDA_INCLUDE="-I. -I$CUDA_HOME/include"
Если хотите скомпилировать NWChem с помощью Intel FORTRAN, то делаем следующие изменения:
Код: Выделить всё
export CC=icc
export CXX=icpc
export FC=ifort
export F77=ifort
# ...
export MPI_LOC=/opt/intel/composerxe/linux/mpi/intel64
# ...
export LIBMPI="-lmpifort -lmpi -lmpigi"
# ...
export NWCHEM_MPIF_WRAP=$MPI_LOC/bin/mpiifort
export NWCHEM_MPIC_WRAP=$MPI_LOC/bin/mpiicc
export NWCHEM_MPICXX_WRAP=$MPI_LOC/bin/mpiicpc
# ...
export BLASOPT="-L$MKLLIB -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export LAPACK_LIB="-L$MKLLIB -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_intelmpi_ilp64 -lpthread -lm"
Код: Выделить всё
export MPI_LIB=$MPI_LOC/lib/openmpi
# ...
export LIBMPI="-lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi"
# ...
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_openmpi_ilp64 -lpthread -lm"
3. Задаем переменные из скрипта и идем в директорию с исходниками:
Код: Выделить всё
source config.sh && cd src
Код: Выделить всё
make nwchem_config && make -j1
Код: Выделить всё
../contrib/getmem.nwchem
4. Проверяем то, что получилось.
Код: Выделить всё
cd ../QA
./doafewqmtests.mpi # Через пробел указать количество доступных ядер процессора
5. Запускать NWChem при заданной переменной NWCHEM_TOP на четырех ядрах так:
Код: Выделить всё
mpirun -np 4 $NWCHEM_TOP/bin/LINUX64/nwchem INPUT | tee OUT