Task4

Version 2 (Andrey Golovin, 02.10.2017 21:03)

1 1 Andrey Golovin
h1. Вычисление атомных орбиталей водорода 
2 1 Andrey Golovin
3 1 Andrey Golovin
Цель занятия: опираясь на уравнение построить электронную плотность в одно-электронном атоме и сравнить с известными программами
4 1 Andrey Golovin
5 1 Andrey Golovin
Работа разделена на две части: расчёт плотности в Ipython Notebook с сохранением в формате CUBE и визуализация в Pymol. 
6 1 Andrey Golovin
7 1 Andrey Golovin
* Запустите Jupiter Notebook на kodomo и если надо настройте туннель (см занятие Хемоинформатика) .
8 1 Andrey Golovin
* В нашем notebook cначала загрузим модули scipy и numpy для эффективной работы с массивами и содержащими нужные функции
9 1 Andrey Golovin
10 1 Andrey Golovin
11 1 Andrey Golovin
<pre><code class="python"> 
12 1 Andrey Golovin
import numpy
13 1 Andrey Golovin
import scipy.special
14 1 Andrey Golovin
import scipy.misc
15 1 Andrey Golovin
</code></pre>
16 1 Andrey Golovin
17 2 Andrey Golovin
* Также вам понадобиться функция от Андрея Демкива http://kodomo.fbb.msu.ru/~golovin/ipynb/npy2cube.py , скачайте его в рабочую директорию и подключите.
18 1 Andrey Golovin
19 1 Andrey Golovin
<pre><code class="python"> 
20 1 Andrey Golovin
import npy2cube
21 1 Andrey Golovin
</code></pre>
22 1 Andrey Golovin
 
23 2 Andrey Golovin
* Давайте зададим волновую функцию, попробуйте предоставить формулу в отчёте
24 1 Andrey Golovin
25 1 Andrey Golovin
<pre><code class="python"> 
26 1 Andrey Golovin
def w(n,l,m,d):
27 1 Andrey Golovin
    
28 1 Andrey Golovin
    x,y,z = numpy.mgrid[-d:d:30j,-d:d:30j,-d:d:30j]
29 1 Andrey Golovin
    
30 1 Andrey Golovin
    r = lambda x,y,z: numpy.sqrt(x**2+y**2+z**2)
31 1 Andrey Golovin
    theta = lambda x,y,z: numpy.arccos(z/r(x,y,z))
32 1 Andrey Golovin
    phi = lambda x,y,z: numpy.arctan(y/x)
33 1 Andrey Golovin
    
34 1 Andrey Golovin
    a0 = 1.
35 1 Andrey Golovin
    
36 1 Andrey Golovin
    R = lambda r,n,l: (2*r/n/a0)**l * numpy.exp(-r/n/a0) * scipy.special.genlaguerre(n-l-1,2*l+1)(2*r/n/a0)
37 1 Andrey Golovin
    WF = lambda r,theta,phi,n,l,m: R(r,n,l) * scipy.special.sph_harm(m,l,phi,theta)
38 1 Andrey Golovin
    absWF = lambda r,theta,phi,n,l,m: numpy.absolute(WF(r,theta,phi,n,l,m))**2
39 1 Andrey Golovin
      
40 1 Andrey Golovin
    return WF(r(x,y,z),theta(x,y,z),phi(x,y,z),n,l,m)
41 1 Andrey Golovin
</code></pre>
42 1 Andrey Golovin
43 1 Andrey Golovin
* Вставьте в код комментарии про каждую внутреннюю функцию (lambda)
44 1 Andrey Golovin
45 1 Andrey Golovin
* Давайте рассчитаем значения для первых трех уровней. Функция w выдает трехмерный массив из 30*30*30 элементов с неким шагом (или grid). 
46 1 Andrey Golovin
47 1 Andrey Golovin
48 1 Andrey Golovin
* определите шаг grid при заданном диапозоне от -d до d
49 1 Andrey Golovin
50 1 Andrey Golovin
<pre><code class="python"> 
51 1 Andrey Golovin
d=.....
52 1 Andrey Golovin
step= .....
53 1 Andrey Golovin
54 1 Andrey Golovin
# Зададим цикл по перебору квантовых чисел
55 1 Andrey Golovin
56 1 Andrey Golovin
for n in range(0,4):
57 1 Andrey Golovin
    for l in range(0,n):
58 1 Andrey Golovin
        for m in range(0,l+1,1):
59 1 Andrey Golovin
            grid= .... 
60 1 Andrey Golovin
            name='%s-%s-%s' % (n,l,m)
61 1 Andrey Golovin
            # для сохранения нужно задать координаты старта grid и шаг по каждому направлению
62 1 Andrey Golovin
            npy2cube.npy2cube(grid,(-d,....),(step,.....),name+'.cube')
63 1 Andrey Golovin
</code></pre>  
64 1 Andrey Golovin
      
65 1 Andrey Golovin
* В результате работы скрипта появятся cube файлы, попробуйте их открыть в PyMol и построить volume для них или воспользуйтесь  Ipyvolume (https://github.com/maartenbreddels/ipyvolume).
66 1 Andrey Golovin
67 1 Andrey Golovin
68 1 Andrey Golovin
* Попробуйте изменить окраску с помощью panel в colors
69 1 Andrey Golovin
70 1 Andrey Golovin
* Давайте создадим скрипт для PyMol для визуализации всех файлов
71 1 Andrey Golovin
72 1 Andrey Golovin
<pre><code class="python"> 
73 1 Andrey Golovin
### Откуда эти цифры? 
74 1 Andrey Golovin
pml='''
75 1 Andrey Golovin
### cut below here and paste into script ###
76 1 Andrey Golovin
cmd.volume_ramp_new('ramp007', [\
77 1 Andrey Golovin
      0.005, 0.00, 0.00, 1.00, 0.00, \
78 1 Andrey Golovin
      0.01,  0.00, 1.00, 1.00, 0.20, \
79 1 Andrey Golovin
      0.015, 0.00, 0.00, 1.00, 0.00, \
80 1 Andrey Golovin
    ])
81 1 Andrey Golovin
### cut above here and paste into script ###
82 1 Andrey Golovin
'''
83 1 Andrey Golovin
84 1 Andrey Golovin
for n in range(0,4):
85 1 Andrey Golovin
    for l in range(0,n):
86 1 Andrey Golovin
        for m in range(0,l+1,1):
87 1 Andrey Golovin
            name='%s-%s-%s' % (n,l,m)
88 1 Andrey Golovin
            # Загрузить cube файл
89 1 Andrey Golovin
            # Отобразить электронную плотность (hint: volume)
90 1 Andrey Golovin
            # Покрасить ее разумным образом 
91 1 Andrey Golovin
92 1 Andrey Golovin
# запишите переменную в файл
93 1 Andrey Golovin
v=open(.....
94 1 Andrey Golovin
</code></pre>
95 1 Andrey Golovin
96 1 Andrey Golovin
97 1 Andrey Golovin
* Модифицируйте скрипт как Вам нравится для наилучшего отображения
98 1 Andrey Golovin
99 1 Andrey Golovin
* Загрузите изображения в Ipython Notebook
100 1 Andrey Golovin
101 1 Andrey Golovin
102 1 Andrey Golovin
<pre><code class="python"> 
103 1 Andrey Golovin
from IPython.display import display,Image
104 1 Andrey Golovin
display(Image=(file))
105 1 Andrey Golovin
</code></pre>
106 1 Andrey Golovin
  
107 2 Andrey Golovin
* Рассчитаем орбитали в программе Orca. Создадим текстовый файл h.inp:
108 1 Andrey Golovin
109 1 Andrey Golovin
<pre>
110 1 Andrey Golovin
! UHF SVP XYZFile
111 1 Andrey Golovin
%plots Format Cube
112 1 Andrey Golovin
 MO("H-1.cube",1,0);
113 1 Andrey Golovin
 MO("H-2.cube",2,0);
114 1 Andrey Golovin
 MO("H-3.cube",3,0);
115 1 Andrey Golovin
 MO("H-4.cube",4,0);
116 1 Andrey Golovin
end
117 1 Andrey Golovin
* xyz 0 4
118 1 Andrey Golovin
 H 0 0 0
119 1 Andrey Golovin
*
120 1 Andrey Golovin
</pre>
121 1 Andrey Golovin
122 1 Andrey Golovin
 запустим Orca
123 1 Andrey Golovin
124 1 Andrey Golovin
125 1 Andrey Golovin
<pre><code class="bash"> 
126 1 Andrey Golovin
export PATH=${PATH}:/tmp
127 1 Andrey Golovin
orca h.inp
128 1 Andrey Golovin
</code></pre>
129 1 Andrey Golovin
 * Сравните визуально Ваши орбитали и рассчитанные программой Orca