Создание структуры и топологии системы для моделирования (газ аргон)

PDF versionPDF version

Описание задачи

Данная задача посвящена созданию и минимизации системы для моделирования на примере газа аргона.

Цель.

Создание структуры и топологии системы для моделирования, а затем минимизация системы и расчет молекулярной динамики в микроканоническом ансамбле.
Расчеты осуществляются при помощи программного пакета Gromacs.

Подготовка к работе

Для выполнения задачи необходим компьютер, работающий под OS Linux, либо родственными ОС. Расчеты молекулярной динамики рекомендуется выполнять на высокопроизводительных компьютерных кластерах.
Необходимое ПО :
1 Gromacs - осуществляет расчеты молекулярной динамики (в данной статье использована версия 4.5.4) как в обычной, так и в MPI версиях (для распределенных вычислений на кластере)
2 Gnuplot - используется для построения графиков (в статье рассмотрена версия 5)
3 LAM-MPI - драйвер, необходимый для распределенных вычислений
Для удобства работы рекомендуем использовать файловые менеджеры, например, Midnigt Commander.

Описание системы и ее подготовка.

Система представляет собой инертный газ аргон в коробке 10х10х10 нм.
Cкачайте архив в интересующую Вас директорию

wget http://molsim.org/sites/default/files/tutor01.tar_0.gz 

Распакуйте его

tar -xvf file.tar.gz

Создаем систему с помощью файла argongen.pl, в качестве аргумента выступает необходимое количество атомов. Argongen.pl создает .gro-файл и файл топологии (*.top).
Например, мы вводим

./argongen.pl 1000

На выходе мы получим файлы argon1000.gro и topol1000.top
Рассмотрим скрипт Argongen.pl, создающий эти файлы.

#!/usr/bin/perl
$number=$ARGV[0];     #считывает аргумент, в данном случае это 1000
use POSIX;            #подключает модуль работы с числами

#считаем грань куба с округлением, если корень не целый:
$box_size=POSIX::ceil($number**(1/3));	
printf ("The size of the cub's edge = $box_size\n");

#считает исправленное количество атомов для целочисленной грани:
$num=($box_size**3); 
printf ("corrected number of atoms = $num\n");

#создаст и откроет gro-файл на запись и пишет необходимые строки
{open(TE,">argon$num.gro") || die "Can't create the main file"; 
$i=1;$h=0;$r=1;
print(TE "ARGON\n");
print(TE "$num\n");

#откроет файл топологии на запись и пишт необходимые строки
open(TT,">topol$num.top") ||  die "I can't create topology file";#создаем 
print TT ("\#include \"oplsaa.ff/forcefield.itp\" \n");
print TT (" \n");
print TT ("[ moleculetype ]\n");
print TT ("; Name            nrexcl\n");
print TT ("ARGON             5 \n");
print TT (" \n");
print TT (" \n");

#цикл для генерации координат
for ($xi=0; $xi<=($box_size-1); $xi++) 
{for ($yi=0; $yi<=($box_size-1); $yi++)
{for ($zi=0; $zi<=($box_size-1); $zi++)
{
$l="GRO";	              #имя остатка
$ar="Ar";	              #тип атома
$c=0;		              #заряд
$m=40;		              #масса
$x=($xi/$box_size*10);        #координаты в соответствии с пропорциями
$y=($yi/$box_size*10);
$z=($zi/$box_size*10);
if ($r==10){$h=$h+1;$r=1}else{$r=$r+1}

#печать данных в файл в нужном формате
print TE sprintf "%5u%5s%5s%5u%8.3f%8.3f%8.3f\n",$h,$l,$ar,$i,$x,$y,$z; 
print TT sprintf "%5u%5s%5u%6s%5s%6u%5u%5u\n",$i,$ar,$h,$l,$ar,$i,$c,$m;
$i=$i+1}}}

#печать необходимых строк в файл топологии
print TT ("[ system ]\n"); 
print TT ("; Name\n");
print TT ("ARGON\n");
print TT (" \n");
print TT ("[ molecules ]\n");
print TT ("; Compound        #mols\n");
print TT ("ARGON     1\n");
close(TT);                    #закрытие файлов
close(TE);
}

Формат gro-файла:

Номер_остатка  название_остатка  тип_атома  номер_атома координаты_x_y_z

Формат файла топологии:

Номер_атома  тип_атома  номер_остатка  название_остатка  атом  зарядовая_группа  заряд  масса

Поместите наш газ в необходимую коробку:

editconf -f argon1000.gro -o argon1000_newbox.gro -c -box 10 10 10 -bt cubic

Будет использован файл argon1000.gro, запись данных пойдет в argon1000_neewbox.gro, опция -с говорит, что система будет помещена в центр коробки, -box позволяет установить размеры коробки, -bt cubic задает форму коробки, в данном случае — куб.

Затем необходимо подготовить систему, а именно — минимизировать ее энергию. Для этого используйте следующую команду:

grompp -f en_minim.mdp -c argon1000_newbox.gro -p topol1000.top -o em1000.tpr

Опция -f указывает на файл, в котором прописаны параметры действия, совершаемого над сиcтемой, -с входной файл системы, -p файл топологии, -о выходной файл.
Для запуска МД используется:

mdrun -v -deffnm em1000

Опция -v принуждает печатать всю возможную информацию в лог, -deffnm общее имя группы файлов, которые мы используем.
Далее запустите МД в NVE-ансамбле, то есть cохраняется количество вещества, объем и энергия системы. Делается это аналогично минимизации энергии системы.

grompp -f nve_conf.mdp -c em1000.gro -p topol1000.top -o nve1000.tpr
mdrun -deffnm nve1000