wasserstrahl's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Saturday, November 14th, 2015

    Time Event
    12:13a
    CP2K: квантовая химия "для кающихся грешников"(с)
    Разгребаюсь потихоньку с CP2K.

    Совершенно примечательная программа для квантовохимических расчетов. Свободная и бесплатная, от перечня возможностей начинается бурное слюноотделение, но уровень документирования... просто катастрофически ужасен. Есть reference manual с кратким описанием параметров, есть набор собственных тестов, несколько туториалов и упражнений по отдельным вопросам, плюс гугл-группа (весьма живая). Влазить в этот трэш без предварительного опыта с какой-нибудь более вменяемой программой настоятельно не рекомендуется.

    Ну а я попробую изобразить небольшую серию постов с примерами и объяснениями, по мотивам и итогам, может кому поможет.

    Итак, для начала о том, как поставить это себе на комп. В Debian и особо мною любимом LMDE делается, как и полагается, линейно через apt-get install cp2k (cp2k есть в стандартном репозитории Debian).

    Однако, если нужна более свежая версия (в том числе экспериментальная), а также если хочется использовать CUDA (да, cp2k это умеет), то нужно ставиться из исходников.

    В системе нужно поставить следующие пакеты: subversion gfortran gcc make libopenblas-dev libfftw3-dev libint-dev libxc-dev g++ (названия указаны для пакетной базы Debian, все присутствуют в репозитории. UPD 16.01.2016: добавил g++). Для CUDA нужен также nvidia-cuda-toolkit. На самом деле часть этих пакетов опциональна, кроме того, можно использовать еще некоторые дополнительные библиотеки, которых нет в репозитории --- я перечислил все, что можно выжать из обычного репозитория Debian.

    Отдельное замечание о libopenblas-dev: при установке этот пакет через механизм update-alternatives изменяет конфигурацию системы таким образом, чтобы функции динамически подключаемой библиотеки BLAS на системе выполняла именно OpenBLAS. Если вы устанавливали OpenBLAS ранее или пользуетесь другими библиотеками --- трахайтесь с компиляцией самивнимательно настройте параметры под себя.

    Инструкции по получению исходников приведены на оф.сайте: http://www.cp2k.org/download Для получения текущей экспериментальной версии нужно выполнить команду svn checkout http://svn.code.sf.net/p/cp2k/code/trunk cp2k

    Настройка параметров компиляции производится с помощью файлов в подкаталоге cp2k/cp2k/arch полученного дерева исходников. Название файла в этом каталоге соответствует представляемой им "платформе" --- важнейшим параметрам системы: ОС, компилятор, набор инструкций процессора, а также способ параллелизации. CP2K поддерживает параллельность через MPI и через OpenMP, а также через комбинацию двух этих вариантов. По опыту работы на однопроцессорных многоядерных системах --- OpenMP в CP2K работает быстрее и [естественно] жрет меньше памяти, чем MPI. Потому править будем файл Linux-x86-64-gfortran.ssmp.

    Мой конфиг, удачно прошедший компиляцию, выглядит так:

    Без CUDA:


    CC = gcc
    CPP =
    FC = gfortran
    LD = gfortran
    AR = ar -r
    OPENBLAS_INC = /usr/include/openblas
    OPENBLAS_LIB = /usr/lib
    GCC_DIR=
    FFTW_INC = /usr/include
    FFTW_LIB = /usr/lib/x86_64-linux-gnu
    LIBINT_INC = /usr/include/libint
    LIBINT_LIB = /usr/lib
    DFLAGS = -D__FFTW3 -D__LIBINT\
    -D__LIBINT_MAX_AM=7 -D__LIBDERIV_MAX_AM1=6 -D__MAX_CONTR=4
    #-D__PW_CUDA
    CPPFLAGS =
    FCFLAGS = $(DFLAGS) -O2 -ffast-math -ffree-form -ffree-line-length-none\
    -fopenmp -ftree-vectorize -funroll-loops\
    -mtune=native\
    -I$(OPENBLAS_INC) -I$(FFTW_INC) -I$(LIBINT_INC)
    LDFLAGS = $(FCFLAGS) -static-libgfortran
    LIBS = $(OPENBLAS_LIB)/libopenblas.a\
    $(FFTW_LIB)/libfftw3.a\
    $(FFTW_LIB)/libfftw3_threads.a\
    $(LIBINT_LIB)/libderiv.a\
    $(LIBINT_LIB)/libint.a


    С CUDA:

    CC = gcc
    CPP =
    FC = gfortran
    LD = gfortran
    AR = ar -r
    OPENBLAS_INC = /usr/include/openblas
    OPENBLAS_LIB = /usr/lib
    GCC_DIR=
    FFTW_INC = /usr/include
    FFTW_LIB = /usr/lib/x86_64-linux-gnu
    LIBINT_INC = /usr/include/libint
    LIBINT_LIB = /usr/lib
    DFLAGS = -D__FFTW3 -D__LIBINT\
    -D__LIBINT_MAX_AM=7 -D__LIBDERIV_MAX_AM1=6 -D__MAX_CONTR=4
    CPPFLAGS =
    FCFLAGS = $(DFLAGS) -O2 -ffast-math -ffree-form -ffree-line-length-none\
    -fopenmp -ftree-vectorize -funroll-loops\
    -mtune=native\
    -I$(OPENBLAS_INC) -I$(FFTW_INC) -I$(LIBINT_INC)
    LDFLAGS = $(FCFLAGS) -static-libgfortran
    LIBS = $(OPENBLAS_LIB)/libopenblas.a\
    $(FFTW_LIB)/libfftw3.a\
    $(FFTW_LIB)/libfftw3_threads.a\
    $(LIBINT_LIB)/libderiv.a\
    $(LIBINT_LIB)/libint.a

    NVCC = /usr/bin/nvcc
    DFLAGS += -D__ACC -D__DBCSR_ACC -D__PW_CUDA
    NVFLAGS = $(DFLAGS) --gpu-architecture=compute_30
    CUDAPATH = /usr/lib/x86_64-linux-gnu
    LIBS += -L$(CUDAPATH) -lcudart -lcublas -lcufft -lrt



    Особо обращаю внимание, что $NVFLAGS обязательно должны содержать $(DFLAGS) --- инструкции по сборке этого не упоминают, но без этого компиляция не удастся.

    Поместив нужный файл в подкаталог cp2k/cp2k/arch, переходим в подкаталог cp2k/cp2k/makefiles и выполняем make ARCH=Linux-x86-64-gfortran VERSION=ssmp

    Если используете версию с CUDA, я бы рекомендовал отдельно собрать версию без CUDA, и держать рядом на всякий случай. Например, на карте с 1 Гб видеопамяти CP2K периодически ругается на невозможность выделить видеопамять и вылетает, приходится запускать без GPU. Названия версий стандартные, но принципиально не ограничены --- скажем, для конфигурации без CUDA можно создать конфигурационный файл Linux-x86-64-gfortran.ssmpnc (nc всмысле no-CUDA) или как-то так.

    Результат компиляции будет в подкаталоге cp2k/cp2k/exe, там будет ряд файлов, реально нужен только cp2k.ssmp (ну и cp2k.ssmpnc), который можно копировать куда угодно и использовать.

    Отдельное замечание об очистке каталога при неудачной сборке. Авторы наделали много разных опций для очистки, до конца там не совсем понятно, что следует использовать в каких случаях, я использую make clean ; make veryclean ; make realclean ; make distclean --- упорото, но вроде работает.
    3:15p
    CP2K: первый пример. Полуэмпирическая оптимизация молекулы LSD
    Итак, начнем разбирать примеры с простого и приятного -- полуэмпирики. Почему именно с архаичного и забытого многими метода? Прежде всего потому, что для запуска рабочего примера нам понадобится настроить минимальное количество опций, т.к. многие из них определяются методом. Соответственно, меньше теории перед тем, как запустить реальное вычисление и посмотреть на его работу.

    Все файлы я выкладываю на облачное хранилище MEGA, они будут доступны по ссылкам в постах. Если удобнее куда-то в другое место --- напишите.

    В частности, файлы для данного расчета лежат здесь: https://mega.nz/#F!oQJ00bjY!wAFcNt6f5eCJIKFJczFFDg

    Для работы CP2K в минимальном варианте нужен только один файл, содержащий управляющие опции для работы программы. Этот файл также должен содержать исходную геометрию исследуемой системы --- координаты атомов. В принципе, координаты атомов могут быть размещены в дополнительном внешнем файле, но не будем пока что усложнять конструкцию.

    Конфигурационный файл CP2K состоит из секций (вкладываемых друг в друга) и параметров. Начало секции объявляется амперсандром & с названием секции, завершение -- амперсандом со словом end и необязательным названием секции, например:
    &global

    &end global

    Или:
    &global

    &end


    Несмотря на то, что название секции после &end необязательно, его лучше указывать, чтобы не запутаться.

    Параметры указываются как имя и значение (для некоторых параметров необязательное), разделенные пробелами.

    &global
    print_level medium
    &end global


    Восклицательный знак используется для объявления комментариев (все содержимое от восклицательного знака до конца строки игнорируется). Регистр букв не имеет значения --- по традиции почему-то обычно пишут прописными, но я лично предпочитаю строчные.

    Набор возможных настроек обширный, но настраивать, разумеется, нужно не все. Большинство параметров имеют относительно разумные значения по умолчанию. Таким образом, мы изменяем параметры там, где:
    --- Мы непосредственно хотим поменять поведение программы;
    --- Где значения по умолчанию нас не устраивают;
    --- Где значения по умолчанию не совместимы с другими настройками расчета, которые нам нужны (к сожалению, CP2K не умеет менять одни параметры в зависимости от значений других).

    Обычно для учебных расчетов пользователи CP2K почему-то предпочитают кластеры воды, но оставим это уныние и попробуем оптимизировать что-то повеселее --- например, молекулу LSD-25.

    Для получения начальных координат молекулы воспользуемся свободной программой-редактором Avogadro, которую можно скачать с официального сайта или установить из репозитория. В Avogadro нужно нарисовать молекулу по структурной формуле, после чего оптимизировать ее геометрию молекулярной механикой (Меню -- Расширения -- Оптимизировать геометрические параметры, повторять пока молекула не перестанет изменяться), результат сохранить в файл в формате XYZ (*.xyz) (в каталоге с файлами расчета результат сохранен как LSD_mm.xyz).

    Ниже привожу комментированный файл конфигурации (input-файл). Звездочки означают пояснения после текста файла.

    Конфиг и пояснения )

    << Previous Day 2015/11/14
    [Calendar]
    Next Day >>

About LJ.Rossia.org