Начало задания был выполнено с помощью указанных ниже команд в консоли, так как так удобнее "общаться" с программами
make_ndx -f box_38.gro -o 1.ndx
editconf -f box_38.gro -o et1.gro -n 1.ndx
editconf -f et1.gro -o et.gro -d 2 -c
Построили файл топологии et.top для этана, изменив типы атомов согласно /usr/share/gromacs/top/oplsaa.ff/atomtypes.atp
Создадим скрипт, чтобы получить 5 файлов с разными параметрами контроля температуры:
◦be.mdp - метод Берендсена для контроля температуры;
◦vr.mdp - метод "Velocity rescale" для контроля температуры;
◦nh.mdp - метод Нуза-Хувера для контроля температуры;
◦an.mdp - метод Андерсена для контроля температуры;
◦sd.mdp - метод стохастической молекулярной динамики.
%%bash
for i in {'be','vr','nh','an','sd'}; do
wget http://kodomo.fbb.msu.ru/FBB/year_08/term6/${i}.mdp
grompp -f ${i}.mdp -c et.gro -p et.top -o et_${i}.tpr
mdrun -deffnm et_${i} -v -nt 1
echo "2" | trjconv -f et_${i}.trr -s et_${i}.tpr -o et_${i}.pdb
done
Результат в pdb получился. Все молекулы этана действительно молекулы этана. С разными параметрами контроля температуры по-разному выглядят возможные положения молекул (разрешены те или иные степени свободы)
Сравним потенциальную энергию связи и кинетическую энергию для каждой из 5 систем.
%%bash
for i in {'be','vr','nh','an','sd'}; do
g_energy -f et_${i}.edr -o et_${i}_en.xvg -xvg none
done
Получили пять файлов в тремя столбиками время, потенциальная и кинетическая энергии
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
a = np.loadtxt("et_be_en.xvg")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x=a[:,0]
y=a[:,1]
z=a[:,2]
print y, z
ax.scatter(x, y, z, alpha=0.5)
ax.set_xlabel('time, ps')
ax.set_ylabel('Potential, kJ/mol')
ax.set_zlabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_be_en.xvg")
x=a[:,0]
y=a[:,1]
print y
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('Potential, kJ/mol')
plt.show()
a = np.loadtxt("et_be_en.xvg")
x=a[:,0]
y=a[:,2]
print y
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_vr_en.xvg")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x=a[:,0]
y=a[:,1]
z=a[:,2]
print y, z
ax.scatter(x, y, z, alpha=0.5)
ax.set_xlabel('time, ps')
ax.set_ylabel('Potential, kJ/mol')
ax.set_zlabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_be_en.xvg")
x=a[:,0]
y=a[:,2]
print y
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_nh_en.xvg")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x=a[:,0]
y=a[:,1]
z=a[:,2]
print y, z
ax.scatter(x, y, z, alpha=0.5)
ax.set_xlabel('time, ps')
ax.set_ylabel('Potential, kJ/mol')
ax.set_zlabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_an_en.xvg")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x=a[:,0]
y=a[:,1]
z=a[:,2]
print y, z
ax.scatter(x, y, z, alpha=0.5)
ax.set_xlabel('time, ps')
ax.set_ylabel('Potential, kJ/mol')
ax.set_zlabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_an_en.xvg")
x=a[:,0]
y=a[:,1]
print y
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('Potential, kJ/mol')
plt.show()
a = np.loadtxt("et_an_en.xvg")
x=a[:,0]
y=a[:,2]
print y
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('Kinetic, kJ/mol')
plt.show()
a = np.loadtxt("et_sd_en.xvg")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x=a[:,0]
y=a[:,1]
z=a[:,2]
print y, z
ax.scatter(x, y, z, alpha=0.5)
ax.set_xlabel('time, ps')
ax.set_ylabel('Potential, kJ/mol')
ax.set_zlabel('Kinetic, kJ/mol')
plt.show()
Рассмотрим распределение длинны связи С-С за время моделирования
Создадим индекс файл b.ndx с одной связью в текстовом редакторе и запустим утилиту по анализу связей g_bond:
%%bash
for i in {'be','vr','nh','an','sd'}; do
g_bond -f et_${i}.trr -s et_${i}.tpr -o bond_${i}.xvg -n b.ndx -xvg none
done
a = np.loadtxt("distance.xvg")#sp
plt.grid(True)
plt.subplot(211)
x=a[:,1]
n, bins, patches = plt.hist(x, 50, facecolor='m', alpha=0.75)
plt.xlabel('Distance')
plt.subplot(212)
x=a[:,0]
y=a[:,1]
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('dist')
plt.show()
a = np.loadtxt("#distance.xvg.1#")#be
plt.grid(True)
plt.subplot(211)
x=a[:,1]
n, bins, patches = plt.hist(x, 50, facecolor='m', alpha=0.75)
plt.xlabel('Distance')
plt.subplot(212)
x=a[:,0]
y=a[:,1]
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('dist')
plt.show()
a = np.loadtxt("#distance.xvg.2#")#vr
plt.grid(True)
plt.subplot(211)
x=a[:,1]
n, bins, patches = plt.hist(x, 50, facecolor='m', alpha=0.75)
plt.xlabel('Distance')
plt.subplot(212)
x=a[:,0]
y=a[:,1]
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('dist')
plt.show()
a = np.loadtxt("#distance.xvg.3#")#nh
plt.grid(True)
plt.subplot(211)
x=a[:,1]
n, bins, patches = plt.hist(x, 50, facecolor='m', alpha=0.75)
plt.xlabel('Distance')
plt.subplot(212)
x=a[:,0]
y=a[:,1]
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('dist')
plt.show()
a = np.loadtxt("#distance.xvg.4#")#an
plt.grid(True)
plt.subplot(211)
x=a[:,1]
n, bins, patches = plt.hist(x, 50, facecolor='m', alpha=0.75)
plt.xlabel('Distance')
plt.subplot(212)
x=a[:,0]
y=a[:,1]
plt.scatter(x, y)
plt.xlabel('time, ps')
plt.ylabel('dist')
plt.show()