Полуэмпирические и Ab initio вычисления молекулярных систем

Часть 1. Полуэмпирические вычисления в Mopac

Задача - сравнить структуры порфирина, полученные с помощью pybel и двумя способами (PM6 и AM1) в Mopac.

In [1]:
import pybel
from os import system
from IPython.display import display, Image
In [2]:
mol=pybel.readstring('smi','C1=CC2=CC3=CC=C(N3)C=C4C=CC(=N4)C=C5C=CC(=N5)C=C1N2')
mol.addh()
mol.make3D(steps=500)
mol.write(format='pdb', filename='porph_pybel.pdb', overwrite=True)
mol
Out[2]:
H N N H H H H H H H H H H H H H N N

Рис. 1. Структура порфирина по мнению pybel.

Pybel не смог понять, как на самом деле должна выглядеть структура порфирина (до плоскости и ароматичности всех 4 циклов далековато), поэтому ее необходимо оптимизировать с помощью Mopac.

In [3]:
def do_mopac(mol, name, ham="PM6", charge=False, option=''):
    command = "export MOPAC_LICENSE='/home/preps/golovin/progs/mopac/'\n"
    
    if type(charge) == int or type(charge) == str:
        ch = charge
    else:
        ch = mol.charge
        
    mop = mol.write(format='mopin', filename='%s.mop' % name, 
                    opt={'k':'%s PRECISE EF CHARGE=%s %s' % (ham, ch, option)}, 
                    overwrite=True)
    
    system("echo | /home/preps/golovin/progs/mopac/MOPAC2016.exe %s.mop" % name)
    
    opt = pybel.readfile('mopout','%s.out' % name)
    
    for c,i in enumerate(opt):
        i.write(format='pdb', filename='%s_%d.pdb' % (name,c), overwrite=True)
        

Сначала оптимизируем с использованием гамильтонианов PM6.

In [5]:
do_mopac(mol, "mopac_PM6_2")

Рис. 2. Сравнение структур порфирина, полученных pybel (цветом salmon) и Mopac с использованием метода PM6 (оранжевым).

Почему-то Морас не справился с уплощением порфирина, однако все 4 кольца стали ароматичными - в отличие от структуры, сгенерированной pybel.

In [6]:
do_mopac(mol, "mopac_AM1", ham="AM1")

Рис. 3. Слева: сравнение структур порфирина, полученных pybel (цветом salmon) и Mopac с использованием метода AM1 (голубым). Справа: сравнение структур порфирина, полученных Mopac методами PM6 (оранжевым цветом) и АМ1 (голубым).

С помощью метода PM6 удалось добиться идеальной структуры порфирина - плоской, с 4 ароматическими циклами. Морас с гамильтонианами АМ1 тоже справился с задачей неплохо, хотя структура получилась не совсем плоской (Рис. 3).

Далее нужно было рассчитать возбужденные состояния порфирина и оценить его спектр поглощения.

Для этого была сделана копия mop файла, и в его конец для расчета возбужденных состояний были добавлены 2 строчки:

In [3]:
%%bash
cp mopac_PM6_2.mop mopac_PM6_exited.mop
echo '' >> mopac_PM6_exited.mop
echo 'cis c.i.=4 meci oldgeo' >> mopac_PM6_exited.mop
echo 'some description' >> mopac_PM6_exited.mop
In [4]:
%%bash
export MOPAC_LICENSE='/home/preps/golovin/progs/mopac/'
echo | /home/preps/golovin/progs/mopac/MOPAC2016.exe mopac_PM6_exited.mop


           Your MOPAC executable, Version: 17.048L, has expired.
           Please go to web-site: http://openmopac.net/Download_MOPAC_Executable_Step2.html to get a new version of MOPAC.
           Do NOT request a new license key.  Academic license keys do not include time limits - the limit is in the program.
           
           Press (enter) to continue.



          MOPAC Job: "mopac_PM6_exited.mop" ended normally on Apr 26, 2018, at 22:35.

In [12]:
por_energ = [1.763459, 2.168394, 2.323063, 2.690530, 3.087475, 3.139846, 3.755972, 3.765160]

def wavelen(x):
    wl = 1239.842 / x    #1239.842 = постоянная Планка, эВ*с, * скорость света, м/с - для перевода длины волны в нм
    return (wl)

por_wvlen = list(map(wavelen, por_energ))
print 'State\tWavelength, nm'
for c in range(len(por_wvlen)):
    print '%s\t%.2f' % (c+2,por_wvlen[c])
State	Wavelength, nm
2	703.07
3	571.78
4	533.71
5	460.82
6	401.57
7	394.87
8	330.10
9	329.29

В полученном списке для 8 возбужденных состояний с известными энергиями приведены длины волн, при которых происходят соответствующие переходы.

В следующем задании нужно было пронаблюдать переход тиминов из димерного состояния в обычное.

In [4]:
! wget http://kodomo.fbb.msu.ru/FBB/year_08/term6/td.pdb
--2018-05-16 11:45:15--  http://kodomo.fbb.msu.ru/FBB/year_08/term6/td.pdb
Resolving kodomo.fbb.msu.ru... 192.168.180.1
Connecting to kodomo.fbb.msu.ru|192.168.180.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2010 (2.0K) [chemical/x-pdb]
Saving to: `td.pdb.4'

100%[======================================>] 2,010       --.-K/s   in 0s      

2018-05-16 11:45:15 (143 MB/s) - `td.pdb.4' saved [2010/2010]

Исходный тиминовый димер выглядит как на Рис.4.

Рис. 4. Структура тиминового димера.

Далее проведем последовательную оптимизацию системы с разными зарядами: 0, +2 и снова 0.

In [5]:
td_0 = pybel.readfile("pdb", "td.pdb").next()
do_mopac(td_0, "thymine_1", ham='PM6', charge='0', option='XYZ')
In [6]:
td_1 = pybel.readfile("pdb", "thymine_1_0.pdb").next()
do_mopac(td_1, "thymine_2", ham='PM6', charge='+2', option='XYZ')
In [7]:
td_2 = pybel.readfile("pdb", "thymine_2_0.pdb").next()
do_mopac(td_2, "thymine_3", ham='PM6', charge='0', option='XYZ')

Рис. 4. Структура тиминового димера при заряде системы +2 (сверху) и пара отдельных тиминов при заряде 0 (снизу).

В возбужденном состоянии при заряде системы +2 рвется одна С-С связь, и ставшие неспаренными атомы С становятся карбокатионами -[CH+]-. При оптимизации такой системы при заряде 0 димер распадается на два тимина вместо того, чтобы вернуться в димерную форму с двумя связями.

In [12]:
%%bash
grep "TOTAL ENERGY" thymine_*.out >> td.log
In [14]:
with open("td.log", "r") as f:
    for num, val in enumerate(f):
        print "State %s " % str(num+1), val.split()[-2], "eV"
State 1  -3273.57895 eV
State 2  -3253.90542 eV
State 3  -3273.70603 eV

Невозбужденные состояния (1 и 3) близки по энергиям, но в состоянии 3 - отдельные мономеры тиминов - энергия немного более выгодна, и из-за этого в это состояние сваливается система из возбужденного состояния при сообщении достаточного количества энергии.

Часть 2. Ab initio вычисления: Orca

В этой части практикума надо найти оптимальную геометрию нафталина и азулена и теплоты их образования.

In [ ]: