Задание: определение констант ковалентных взаимодействий для молекулярной механики на основе квантово-химических расчётов.
Необходимые сведения о работе с GAMESS см. здесь. Сведения о работе с Gnuplot см. здесь. Введения о скриптовании в Bash здесь. Ведения о awk здесь. Вся работа по расчётам будет проходить на kodomo через терминал putty, а для работы с графическим выводом Gnuplot понадобится Xming. Пример подобной работы представлен в статье о разработке поля gaff.
Дана оптимизированная структура этана в виде z-matrix :
$DATA eth C1 C C 1 cc H 2 ch 1 cchv H 2 ch 1 cch 3 d1 0 H 2 ch 1 cch 3 d2 0 H 1 ch 2 cch 3 d3 0 H 1 ch 2 cch 5 d3 0 H 1 chv 2 cch 4 d3 0 cc=1.52986 ch=1.08439 chv=1.08439 cch=111.200 cchv=111.200 d1=120 d2=-120 d3=180 $ENDВ ней с помощью переменных заданы значения длин и углов связей. Создадим порядка 20 разных файлов для расчёта энергии в Gamess с разными значениями по длине одной из связей. Для этого в представленных координатах одна связь будет в каждом файле отличаться значением переменной. Процесс варьирования длины будем проводить с помощью скрипта на bash.
Bash это интерпретатор командной строки, который автоматически запускается при присоединении к kodomo.
Для этого к координатам добавим шапку: $CONTRL COORD=ZMT UNITS=ANGS dfttyp=b3lyp RUNTYP=ENERGY $END $BASIS GBASIS=N31 NGAUSS=6 POLAR=POPN31 NDFUNC=1 $END $GUESS GUESS=HUCKEL $END $system mwords=2 $end $DATA Проверим работает ли файл-заготовка (запустим GAMESS, и проверим выходной файл на наличие ошибок).
Теперь создадим файл скрипта make_b.bash со следующим содержанием:
#!/bin/bash ### делаем цикл от -10 до 10 ##### for i in {-10..10}; do #### нам надо рассчитать новую длину связи ##### #### с шагом 0.02 ангстрема, ##### #### воспользуемся калькулятором bc ##### #### и результат поместим в переменную nb ##### nb=$(echo "scale=5; 1.001 + $i/50" | bc -l) #### пролистаем файл et.inp и заменим указание переменной ### #### на новое значение и пере направим результат в файл ### sed "s/cc=1.001/cc=$nb/" et.inp > b_${i}.inp doneВ скрипте стартовая длина изменяемой связи соответствовует файлу et.inp. Запустим скрипт :
bash ./make_b.bashВ результате получаем 21 inp файл и в каждом разное значение для переменной сс.
Теперь запустим расчёт для этих файлов, для этого перед строчкой с
doneвставим запуск Gamess:
gms b_${i}.inp 1 > b_${i}.logЗапустим скрипт и через какое-то время расчёт закончится. Теперь надо извлечь значение энергии из log файла. Удобно воспользоваться awk.
awk '/TOTAL ENERGY =/{print $4}' b_${i}.logЗапустим скрипт. На экране должно появится 21 значение энергии. Теперь удобно выводить и значение длины связи, для этого добавьте перед вызовом awk распечатку переменой nb. Распечатаем переменную и несколько пробелов без переноса строки:
echo -n "$nb "Запустим скрипт и перенаправим поток в файл : bash ./make_b.bash > bond
У нас есть зависимость энергии молекулы от длины одной связи. Эту зависимость можно построить в gnuplot.
Для этого запустим Xming->XLaunch. Выберем тип расположения окон, удобно использовать Multiple windows. Next. Выберем Start Program. Run Remote-> Putty.
Дальше всё как обычно: kodomo, username.
Перейдем в рабочую директорию.
Запустим Gnuplot:
gnuplotПостроим зависимость энергии от длины связи, просто введем : plot "bond"
f(x)=a + k*x*x - 2*k*x*b + k*b*bИ зададим стартовые значения коэффициентов:
a=-80 k=1 b=1.5Проведём подгонку коэффициентов под имеющиеся точки в файле bond:
fit f(x) "bond" via a,k,bСохраните значения коэффициентов. Постройте графики функции и значений энергии из Gamess.
plot "bond", f(x)Параметры подгонки. Причиной неточного совпадения точек и функции возможно является большая ошибка в определении параметра k.
Выполним аналогичные операции для валентного угла HCH, его значения должны изменяться от 109.2 до 113.2.
Для этого запустим скрипт и перенаправим поток в файл.
Построим графики функции и значений энергии из Gamess:
Проделаем аналогичные операции для торсионного угла d3, его значения должны изменяться от -180 до 180 c шагом 12.
Для этого запустим скрипт и перенаправим поток в файл.
Построим графики функции и значений энергии из Gamess:
Увеличим шаг до 0.1 ангстрема при расчёте связи сс. Для этого запустим скрипт и перенаправим поток в файл. Построим зависимость значений энергии из Gamess: