Результаты, полученные разными алгоритмами контроля температуры
from IPython.display import Image
print('Метод Андерсена')
display(Image("/home/masha/Документы/Головин/прак7/et_an.png", format='png'))
print('Метод Берендсена')
display(Image("/home/masha/Документы/Головин/прак7/at_be.png", format='png'))
print('Метод Нуза-Хувера')
display(Image("/home/masha/Документы/Головин/прак7/et_nh.png", format='png'))
print('Метод стохастической молекулярной динамики')
display(Image("/home/masha/Документы/Головин/прак7/et_sd.png", format='png'))
print('Метод "Velocity rescale"')
display(Image("/home/masha/Документы/Головин/прак7/et_vr.png", format='png'))
Метод Андерсена
Метод Берендсена
Метод Нуза-Хувера
Метод стохастической молекулярной динамики
Метод "Velocity rescale"
Методы Андерсена и стохастики представляют собой две крайности (либо молекула "заморожена" и еле колеблется, либо мы ее "перегреваем", то есть даем слишком много энергии, в итоге ее "колбасит"). Метод Брендсена сообщает молекуле столько энергии, что она перестает различать свои заслоненные и незаслоненные конформации (получается вентилятор, что не сильно лучше, чем при стохастике). Самые разумные результаты дают методы Нуза-Хувера и "Velocity rescale".
Далее мы посчитали потенциальную и кинетическую энергию и построили графики изменения энергий.
import numpy as np
import matplotlib.pyplot as plt
print('Голубым обозначена потенциальная энергия, красным - кинетическая')
print('Метод Андерсена')
display(Image('/home/masha/Документы/Головин/прак7/et_an_ne.png'))
print('Метод Берендсена')
display(Image('/home/masha/Документы/Головин/прак7/et_be_ne.png'))
print('Метод Нуза-Хувера')
display(Image('/home/masha/Документы/Головин/прак7/et_nh_ne.png'))
print('Метод стохастической молекулярной динамики')
display(Image('/home/masha/Документы/Головин/прак7/et_sd_ne.png'))
print("Метод Velocity rescale")
display(Image('/home/masha/Документы/Головин/прак7/et_vr_ne.png'))
Голубым обозначена потенциальная энергия, красным - кинетическая Метод Андерсена
Метод Берендсена
Метод Нуза-Хувера
Метод стохастической молекулярной динамики
Метод Velocity rescale
В методе Андерсена молекула имеет энергии, близкие к нулю. В отличие от методов "Velocity rescale", Берендсена и стохастической молекулярной динамики, где энергии меняются в довольно большом диапазоне. Хороший результат дает метод Нуза-Хувера, который во-первых исследует больший диапазон энергий, а во-вторых постепенно "остужается" (то есть со временем молекула все чаще пребывает в состояниях с меньшими энергиями).
Рассмотрим распределение длинны связи С-С в зависимости от метода
import numpy as np
import matplotlib.pyplot as plt
print('Метод Андерсена')
display(Image('/home/masha/Документы/Головин/прак7/et_an_ln.png'))
print('Метод Берендсена')
display(Image('/home/masha/Документы/Головин/прак7/et_be_ln.png'))
print('Метод Нуза-Хувера')
display(Image('/home/masha/Документы/Головин/прак7/et_nh_ln.png'))
print('Метод стохастической молекулярной динамики')
display(Image('/home/masha/Документы/Головин/прак7/et_sd_ln.png'))
print("Метод Velocity rescale")
display(Image('/home/masha/Документы/Головин/прак7/et_vr_ln.png'))
Метод Андерсена
Метод Берендсена
Метод Нуза-Хувера
Метод стохастической молекулярной динамики
Метод Velocity rescale
Нарисуем распределения молекул по их потенциальным энергиям и сравим получившиеся распределения с распределением Больцмана.
print('Метод Андерсена')
display(Image('/home/masha/Документы/Головин/прак7/et_na_tt.png'))
print('Метод Берендсена')
display(Image('/home/masha/Документы/Головин/прак7/et_be_tt.png'))
print('Метод Нуза-Хувера')
display(Image('/home/masha/Документы/Головин/прак7/et_nh_tt.png'))
print('Метод стохастической молекулярной динамики')
display(Image('/home/masha/Документы/Головин/прак7/et_sd_tt.png'))
print("Метод Velocity rescale")
display(Image('/home/masha/Документы/Головин/прак7/et_vr_tt.png'))
Метод Андерсена
Метод Берендсена
Метод Нуза-Хувера
Метод стохастической молекулярной динамики
Метод Velocity rescale
Метод Нуза-Хувера дает картину, больше всего напоминающую больцмановское распределение. На самом деле такой вид гистограмме придает тот факт, что при данном методе мы пробуем больший диапазон энергий (поэтому ось х идет вплоть до 250 кДЖ/моль). Тем не менее, большинство молекул тут действительно имеет низкие значения энергий (в отличии от других методов).
Сравним разные методы по количеству времени, затраченного на выполнение команды mdrun (real time, выдаваемое самим GROMACS).
import pandas as pd
data = [[3.801, 4.105, 4.245, 4.662, 4.193]]
pd.DataFrame(data, columns=["An", "Be", "Nh", "Sd", "Vr"])
An | Be | Nh | Sd | Vr | |
---|---|---|---|---|---|
0 | 3.801 | 4.105 | 4.245 | 4.662 | 4.193 |
Сильной разницы, как мы видим, между методами нет, однако самым быстрым оказался метод Андерсена, а самым медленным - стохастический. Это и не удивительно (колебания молекулы при малых изменениях энергии вычислить проще, чем ее довольно хаотичные движения при больших изменениях энергии).