Исходные SMILES-файлы для азулена и нафталина были переконвертированы с помощью babel в mol-файлы. При этом структуры получились плоскими только при оптимизации с использованием силового поля UFF:
Azulene : C1=CC=C2C=CC=C2C=C1 Napthalene: c1ccc2ccccc2c1
obgen azu.smi -ff UFF > azu.mol
obgen nap.smi -ff UFF > nap.mol
from xmlrpclib import ServerProxy
from IPython.display import Image, display
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
util = ServerProxy(uri="http://localhost:9123/RPC2")
cmd.bg_color('white')
cmd.delete('all')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode", '3')
cmd.set('antialias', 3)
cmd.set('ray_shadow', 0)
cmd.bg_color('white')
cmd.load('azu.mol')
cmd.orient()
cmd.show_as('sticks')
cmd.show('spheres')
cmd.set('stick_radius', 0.1)
cmd.set('sphere_scale', 0.15)
cmd.ray()
cmd.png('azu.png')
cmd.delete('all')
cmd.load('nap.mol')
cmd.orient()
cmd.show_as('sticks')
cmd.show('spheres')
cmd.ray()
cmd.png('nap.png')
azu1 = Image(filename='azu.png')
nap1 = Image(filename='nap.png')
display(azu1, nap1)
Затем полученные файлы были переконвертированы в формат gamess, к ним был добавлен соответствующий заголовок и, наконец, геометрия этих структур была оптимизирована с помощью gamess. Для оптимизации используется базис N31 (6-31G). Это значит, что внутренние орбитали обсчитываются шестью гауссовскими функциями, а для описания валентных орбиталей используется три и одна функции в каждом слагаемом, соответственно.
gamess -imol nap.mol -ogamin nap_out.inp gamess -imol nap.mol -ogamin nap_out.inp
gms nap_opt.inp 1 >& nap_opt.log
gms azu_opt.inp 1 >& azu_opt.log
На основе полученных координат были составлены новые файлы для расчета энергии. Для этого сначала log-файлы после GAMESS были переформатированы с помощью babel в gamin, а затем для каждого способа расчета были добавлены соответствующие заголовки. Для расчета по Хартри-Фоку:
$CONTRL COORD=CART UNITS=ANGS SCFTYP=RHF RUNTYP=ENERGY$END
$BASIS GBASIS=N31 NGAUSS=6$POLAR=POPN31 NDFUNC=1 $END$GUESS GUESS=HUCKEL $END$system mwords=2 $end$DATA
В случае теории функционала плотности:
$CONTRL COORD=CART 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
babel -ilog nap_opt.log -ogamin nap_hf.inp babel -ilog azu_opt.log -ogamin azu_hf.inp
gms nap_hf.inp 1 >& nap_hf.log gms azu_hf.inp 1 >& azu_hf.log gms nap_dft.inp 1 >& nap_dft.log gms azu_dft.inp 1 >& azu_dft.log ```
После оптимизации с помощью GAMESS были найдены энергии обеих молекул, найдено и переведено в привычные единицы измерения ΔE.
Вещество | E(Naptalene) | E(Azulene) | ΔE, Hartree | ΔE, kCal/mol |
---|---|---|---|---|
Хартри-Фок | -383.3549 | -383.2825 | 0.0724 | 45,4317 |
DFT | -385.6401 | -385.5857 | 0.0544 | 34,1365 |
Как видно, энергия изомеризации нафталина в азулен, полученная с помощью теории функциональной плотности, соответствует реальной (35.3±2.2 kCal/mol). Из этого эксперимента можно сделать вывод, что этот метод лучше, чем Хартри-Фока.
napLUMO = Image(filename='nap_dft_LOMO.png')
napHOMO = Image(filename='nap_dft_HOMO.png')
azuLUMO = Image(filename='azu_dft_LOMO.png')
azuHOMO = Image(filename='azu_dft_HOMO.png')
display('Napthalene - LUMO', napLOMO, 'Napthalene - HOMO', napHOMO, 'Azulene - LUMO', azuLOMO, 'Azulene - HOMO', azuHOMO)