-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
637 lines (305 loc) · 342 KB
/
Copy pathsearch.xml
File metadata and controls
637 lines (305 loc) · 342 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>常用物理单位与物理常数</title>
<link href="/2020/07/12/chang-yong-wu-li-dan-wei-yu-wu-li-chang-shu/"/>
<url>/2020/07/12/chang-yong-wu-li-dan-wei-yu-wu-li-chang-shu/</url>
<content type="html"><![CDATA[<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });</script><h1 id="计算中常见单位换算及部分物理常数"><a href="#计算中常见单位换算及部分物理常数" class="headerlink" title="计算中常见单位换算及部分物理常数"></a><strong>计算中常见单位换算及部分物理常数</strong></h1><h2 id="物理常数"><a href="#物理常数" class="headerlink" title="物理常数"></a><strong>物理常数</strong></h2><p>普朗克常数: $h = 6.62607015\times 10^{-34} <del>J\cdot{s}$<br>约化普朗克常数:$\hbar=h/{2\pi}=1.054571818\times10^{-34}</del>J\cdot{s}$<br>玻尔兹曼常数: $k_B=1.380649\times10^{-23}<del>J/K$<br>$1</del>mol=6.02214179\times10^{23}$<br>光速:$299792458~ m/s$</p><h2 id="单位换算"><a href="#单位换算" class="headerlink" title="单位换算"></a><strong>单位换算</strong></h2><h3 id="压强单位"><a href="#压强单位" class="headerlink" title="压强单位"></a><strong>压强单位</strong></h3><p>$1<del>eV/{\dot{A}}^3=160.21766208</del>GPa$<br>$1<del>Ha/Bohr^3=29421.02648438959</del>GPa$<br>$1<del>GPa=10</del>kbar=145037.738007218<del>pound/(square</del>inch)$<br>$1<del>Gbar=100000</del>GPa$<br>$1<del>Mbar=100</del>GPa$<br>$1<del>kbar=0.1</del>GPa$<br>$1<del>atm=1.01325</del>kbar=0.000101325<del>GPa$<br>$1</del>pascar=10^{-9}<del>GPa$<br>$1</del>TPa=1000<del>GPa=10</del>Mbar$</p><h3 id="力单位"><a href="#力单位" class="headerlink" title="力单位"></a><strong>力单位</strong></h3><p>$1<del>Ry/Bohr=25.71104309541616</del>eV/\dot{A}$<br>$1<del>Ha/Bohr=51.442208619083232</del>eV/\dot{A}$ </p><h3 id="能量单位"><a href="#能量单位" class="headerlink" title="能量单位"></a><strong>能量单位</strong></h3><p>$1<del>Hatree=2</del>Ryd=27.211396<del>eV$<br>$1</del>kJ/mol=0.0103642688<del>eV/atom$<br>$1</del>eV=1.6021766208\times10^{-19}~J$ </p><h3 id="长度单位"><a href="#长度单位" class="headerlink" title="长度单位"></a><strong>长度单位</strong></h3><p>$1<del>Bohr=0.529177208</del>\dot{A}$</p><h3 id="晶胞体积"><a href="#晶胞体积" class="headerlink" title="晶胞体积"></a><strong>晶胞体积</strong></h3><p>Simple Cubic volume: $a^3$<br>FCC volume: $a^{\frac{3}{4}}$<br>BCC volume: $a^{\frac{3}{2}}$<br>HCP volume: $\frac{\sqrt{3}}{2}\times{a^2}\times{c}$</p><h3 id="VASP电子温度换算"><a href="#VASP电子温度换算" class="headerlink" title="VASP电子温度换算"></a><strong>VASP电子温度换算</strong></h3><p>unit: $eV$<br>$k_B\times{T}=\frac{1.380649\times10^{-23}}{1.6021766208\times10^{-19}}\times{T}=8.6173333331\times10^{-5}\times{T}$ </p><h3 id="声子频率的换算"><a href="#声子频率的换算" class="headerlink" title="声子频率的换算"></a><strong>声子频率的换算</strong></h3><p>光速*f(cm-1)=f(Hz)</p><p>$1~THz=33.35640952 ~cm^{-1}$ </p><p>$1~THz=4.13566553859598 ~meV$</p>]]></content>
</entry>
<entry>
<title>vasprun.xml to json file</title>
<link href="/2020/07/10/grep-config-to-json-from-vasprunxml/"/>
<url>/2020/07/10/grep-config-to-json-from-vasprunxml/</url>
<content type="html"><![CDATA[<h2 id="将vasprun-xml-的configuration-转为-json-file"><a href="#将vasprun-xml-的configuration-转为-json-file" class="headerlink" title="将vasprun.xml 的configuration 转为 json file"></a><strong>将vasprun.xml 的configuration 转为 json file</strong></h2><p><strong>主要用于FitSNAP程序的前期数据集的获取</strong></p><pre class=" language-python"><code class="language-python"><span class="token keyword">import</span> json<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np<span class="token comment" spellcheck="true">#read energy lattice pos force stress from vasprun</span>i<span class="token operator">=</span><span class="token number">0</span>j<span class="token operator">=</span><span class="token number">0</span>k<span class="token operator">=</span><span class="token number">0</span>num_atom<span class="token operator">=</span><span class="token number">0</span>force<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">]</span>s_step<span class="token operator">=</span><span class="token number">1</span><span class="token comment" spellcheck="true">#int(input("starting step:\n"))</span>d_step<span class="token operator">=</span><span class="token number">1</span><span class="token comment" spellcheck="true">#int(input("interval of steps:\n"))</span><span class="token comment" spellcheck="true">#Dataset-->struc_inf-->data</span>Dataset<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">}</span>struc_inf<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">}</span>struc_data<span class="token operator">=</span><span class="token punctuation">{</span><span class="token punctuation">}</span>struc_inf<span class="token punctuation">[</span><span class="token string">"Label:"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"SNAP dataset"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"LatticeStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"angstrom"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"EnergyStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"electronvolt"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"StressStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"bar"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"AtomTypeStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"chemicalsymbol"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"PositionsStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"bar"</span>struc_inf<span class="token punctuation">[</span><span class="token string">"ForcesStyle"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string">"electronvoltperangstrom"</span><span class="token keyword">with</span> open<span class="token punctuation">(</span><span class="token string">'PPOSCAR'</span><span class="token punctuation">,</span><span class="token string">'r'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> pposcar<span class="token punctuation">:</span> text<span class="token operator">=</span>pposcar<span class="token punctuation">.</span>readlines<span class="token punctuation">(</span><span class="token punctuation">)</span> atom_list<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">]</span> atom_dict<span class="token operator">=</span><span class="token punctuation">[</span><span class="token punctuation">]</span> one_list<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">'one'</span><span class="token punctuation">]</span> <span class="token keyword">if</span> text<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> text<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'please check the input format of PPOSCAR'</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># for n in range(num_atom):</span> <span class="token comment" spellcheck="true"># position0.append(text[n+7].split())</span> <span class="token keyword">else</span><span class="token punctuation">:</span> num_class<span class="token operator">=</span>text<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>num_class<span class="token punctuation">)</span> <span class="token keyword">for</span> c <span class="token keyword">in</span> range<span class="token punctuation">(</span>len<span class="token punctuation">(</span>num_class<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> num_atom<span class="token operator">=</span>num_atom<span class="token operator">+</span>int<span class="token punctuation">(</span>text<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>int<span class="token punctuation">(</span>text<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> one_list<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span>num_class<span class="token punctuation">[</span>c<span class="token punctuation">]</span> atom_dict<span class="token operator">=</span>one_list<span class="token operator">*</span><span class="token punctuation">(</span>int<span class="token punctuation">(</span>text<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">' '</span><span class="token punctuation">)</span><span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> atom_list<span class="token operator">=</span>atom_list<span class="token operator">+</span>atom_dict <span class="token comment" spellcheck="true"># for n in range(num_atom):</span> <span class="token comment" spellcheck="true"># position0.append(text[n+8].split())</span> <span class="token comment" spellcheck="true"># print(num_atom)</span><span class="token keyword">with</span> open<span class="token punctuation">(</span><span class="token string">'vasprun.xml'</span><span class="token punctuation">,</span><span class="token string">'r'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> vasprun<span class="token punctuation">:</span> text<span class="token operator">=</span>vasprun<span class="token punctuation">.</span>readlines<span class="token punctuation">(</span><span class="token punctuation">)</span> num_lines<span class="token operator">=</span>len<span class="token punctuation">(</span>text<span class="token punctuation">)</span> <span class="token keyword">for</span> n <span class="token keyword">in</span> range<span class="token punctuation">(</span>num_lines<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment" spellcheck="true"># the original positions of atoms</span> <span class="token comment" spellcheck="true"># if text[n] == " <varray name=\"positions\" >\n":</span> <span class="token comment" spellcheck="true"># for m in range(num_atom):</span> <span class="token comment" spellcheck="true"># position0.append(text[n+m+1].split())</span> <span class="token keyword">if</span> text<span class="token punctuation">[</span>n<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">" <varray name=\"forces\" >\n"</span><span class="token punctuation">:</span> lattice<span class="token operator">=</span>np<span class="token punctuation">.</span>mat<span class="token punctuation">(</span>np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> position<span class="token operator">=</span>np<span class="token punctuation">.</span>mat<span class="token punctuation">(</span>np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span>num_atom<span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> force<span class="token operator">=</span>np<span class="token punctuation">.</span>mat<span class="token punctuation">(</span>np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span>num_atom<span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> stress<span class="token operator">=</span>np<span class="token punctuation">.</span>mat<span class="token punctuation">(</span>np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> i<span class="token operator">=</span>i<span class="token operator">+</span><span class="token number">1</span> <span class="token keyword">if</span> i <span class="token operator">></span> s_step<span class="token number">-1</span><span class="token punctuation">:</span> j<span class="token operator">=</span>j<span class="token operator">+</span><span class="token number">1</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>j<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">-</span>d_step<span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span>j<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">//</span>d_step<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">:</span> k<span class="token operator">=</span>k<span class="token operator">+</span><span class="token number">1</span> <span class="token comment" spellcheck="true">#force.append(i)</span> <span class="token keyword">for</span> lindex <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> lattice_str<span class="token operator">=</span><span class="token punctuation">[</span>float<span class="token punctuation">(</span>lat<span class="token punctuation">)</span> <span class="token keyword">for</span> lat <span class="token keyword">in</span> text<span class="token punctuation">[</span>n<span class="token operator">-</span>num_atom<span class="token number">-14</span><span class="token operator">+</span>lindex<span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">]</span> lattice<span class="token punctuation">[</span>lindex<span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token operator">=</span>np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>lattice_str<span class="token punctuation">)</span> stress_str<span class="token operator">=</span><span class="token punctuation">[</span>float<span class="token punctuation">(</span>stre<span class="token punctuation">)</span> <span class="token keyword">for</span> stre <span class="token keyword">in</span> text<span class="token punctuation">[</span>n<span class="token operator">+</span>num_atom<span class="token operator">+</span><span class="token number">3</span><span class="token operator">+</span>lindex<span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token comment" spellcheck="true">#print(stress_str)</span> stress<span class="token punctuation">[</span>lindex<span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token operator">=</span>np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>stress_str<span class="token punctuation">)</span><span class="token operator">*</span><span class="token number">1000</span> <span class="token keyword">for</span> m <span class="token keyword">in</span> range<span class="token punctuation">(</span>num_atom<span class="token punctuation">)</span><span class="token punctuation">:</span> force_str<span class="token operator">=</span><span class="token punctuation">[</span>float<span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token keyword">for</span> f <span class="token keyword">in</span> text<span class="token punctuation">[</span>n<span class="token operator">+</span>m<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">]</span> force<span class="token punctuation">[</span>m<span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token operator">=</span>np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>force_str<span class="token punctuation">)</span> position_str<span class="token operator">=</span><span class="token punctuation">[</span>float<span class="token punctuation">(</span>postr<span class="token punctuation">)</span> <span class="token keyword">for</span> postr <span class="token keyword">in</span> text<span class="token punctuation">[</span>n<span class="token operator">+</span>m<span class="token operator">-</span>num_atom<span class="token number">-2</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">]</span> position_frac<span class="token operator">=</span>np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>position_str<span class="token punctuation">)</span> position_cart<span class="token operator">=</span>np<span class="token punctuation">.</span>dot<span class="token punctuation">(</span>lattice<span class="token punctuation">,</span>position_frac<span class="token punctuation">.</span>T<span class="token punctuation">)</span> position<span class="token punctuation">[</span>m<span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token operator">=</span>position_cart struc_data<span class="token punctuation">[</span><span class="token string">"NumAtoms"</span><span class="token punctuation">]</span><span class="token operator">=</span>num_atom struc_data<span class="token punctuation">[</span><span class="token string">"Lattice"</span><span class="token punctuation">]</span><span class="token operator">=</span>lattice<span class="token punctuation">.</span>tolist<span class="token punctuation">(</span><span class="token punctuation">)</span> struc_data<span class="token punctuation">[</span><span class="token string">"Energy"</span><span class="token punctuation">]</span><span class="token operator">=</span>float<span class="token punctuation">(</span>text<span class="token punctuation">[</span>n<span class="token operator">+</span>num_atom<span class="token operator">+</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span> struc_data<span class="token punctuation">[</span><span class="token string">"Stress"</span><span class="token punctuation">]</span><span class="token operator">=</span>stress<span class="token punctuation">.</span>tolist<span class="token punctuation">(</span><span class="token punctuation">)</span> struc_data<span class="token punctuation">[</span><span class="token string">"AtomTypes"</span><span class="token punctuation">]</span><span class="token operator">=</span>atom_list struc_data<span class="token punctuation">[</span><span class="token string">"Positions"</span><span class="token punctuation">]</span><span class="token operator">=</span>position<span class="token punctuation">.</span>tolist<span class="token punctuation">(</span><span class="token punctuation">)</span> struc_data<span class="token punctuation">[</span><span class="token string">"Forces"</span><span class="token punctuation">]</span><span class="token operator">=</span>force<span class="token punctuation">.</span>tolist<span class="token punctuation">(</span><span class="token punctuation">)</span> struc_inf<span class="token punctuation">[</span><span class="token string">"Data"</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">[</span>struc_data<span class="token punctuation">]</span> Dataset<span class="token punctuation">[</span><span class="token string">"Dataset"</span><span class="token punctuation">]</span><span class="token operator">=</span>struc_inf config<span class="token operator">=</span>json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span>Dataset<span class="token punctuation">)</span> config_json<span class="token operator">=</span>open<span class="token punctuation">(</span><span class="token string">"MD_{}.json"</span><span class="token punctuation">.</span>format<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span>mode<span class="token operator">=</span><span class="token string">"w"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'# SNAP datasets'</span><span class="token punctuation">,</span>file<span class="token operator">=</span>config_json<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>config<span class="token punctuation">,</span> file<span class="token operator">=</span>config_json<span class="token punctuation">)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"total_steps="</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token comment" spellcheck="true">#print(j)</span><span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"output_steps="</span><span class="token punctuation">,</span>k<span class="token punctuation">)</span></code></pre>]]></content>
<categories>
<category> 机器学习 </category>
</categories>
<tags>
<tag> 计算脚本 </tag>
</tags>
</entry>
<entry>
<title>alamode_scph计算高温声子谱</title>
<link href="/2020/07/04/alamode-scph/"/>
<url>/2020/07/04/alamode-scph/</url>
<content type="html"><![CDATA[<h2 id="Alamode计算高温声子色散"><a href="#Alamode计算高温声子色散" class="headerlink" title="Alamode计算高温声子色散"></a><strong>Alamode计算高温声子色散</strong></h2><h3 id="Anharmonic-Phonons-self-consistent-phonon-theory"><a href="#Anharmonic-Phonons-self-consistent-phonon-theory" class="headerlink" title="Anharmonic Phonons (self-consistent phonon theory)"></a><strong>Anharmonic Phonons (self-consistent phonon theory)</strong></h3><p>主要使用alamode软件。 版本:alamode-1.1.0</p><p>输入文件</p><pre class=" language-txt"><code class="language-txt">vasprun.xml #分子动力学输出文件Dfile #包含原子的力和位移extract_disp.py #选取结构,并计算位移extract_force.py #选取结构,并获得受力PPOSCAR #初始超胞alm.in #提取力常数的输入文件anphono.in #计算声子谱的输入文件</code></pre><p>1 从分子动力学数据中选取一定数量的结构,并提取它们的力和计算与初始状态相比的位移,输出到Dfile文件当中</p><pre class=" language-bash"><code class="language-bash">python extract_disp.py <span class="token comment" spellcheck="true">#运行后根据提示输入开始的步数和间隔步数</span><span class="token comment" spellcheck="true">#例如总共1000步,从第一步开始提取,每间隔五步提取一次</span><span class="token comment" spellcheck="true">#得到disp.dat</span>python extract_force.py <span class="token comment" spellcheck="true">#方法同上</span><span class="token comment" spellcheck="true">#得到force.dat</span></code></pre><p>将disp.dat和force.dat文件按如下形式合并到一起</p><pre class=" language-dat"><code class="language-dat">disp1x disp1y disp1z force1x force1y force1z ...... ......dispNx dispNy dispNz forceNx forceNy forceNz</code></pre><p>2 获取力常数</p><p>提取四阶力常数的alm.in文件如下(使用LASSO方法):</p><p>二阶力常数可以通过有限位移法提取(详见官网手册)</p><pre class=" language-bash"><code class="language-bash"><span class="token operator">&</span>general PREFIX <span class="token operator">=</span> ThO2_ENET MODE <span class="token operator">=</span> optimize NAT <span class="token operator">=</span> 81<span class="token punctuation">;</span> NKD <span class="token operator">=</span> 2 KD <span class="token operator">=</span> Th O<span class="token comment" spellcheck="true"># PRINTSYM=1</span>/<span class="token operator">&</span>interaction NORDER <span class="token operator">=</span> 5 <span class="token comment" spellcheck="true"># 1: harmonic, 2: cubic, ..</span> NBODY <span class="token operator">=</span> 2 3 3 2 2/<span class="token operator">&</span>cell 1 <span class="token comment" spellcheck="true"># factor in Bohr unit</span> 0.0000000000000 15.919498944104 15.919498944104 15.919498944104 0.0000000000000 15.919498944104 15.919498944104 15.919498944104 0.0000000000000/<span class="token operator">&</span>optimize LMODEL<span class="token operator">=</span> enet FC2XML <span class="token operator">=</span> ThO2_2nd.xml DFSET<span class="token operator">=</span>ThO2_dffile CV <span class="token operator">=</span> 0 L1_RATIO <span class="token operator">=</span> 1.0 L1_ALPHA <span class="token operator">=</span> 1.0e-06 CV_MINALPHA <span class="token operator">=</span> 1.0e-6 CV_MAXALPHA <span class="token operator">=</span> 0.02 CV_NALPHA <span class="token operator">=</span> 100 STANDARDIZE <span class="token operator">=</span> 1 CONV_TOL <span class="token operator">=</span> 1.0e-9/<span class="token operator">&</span>cutoff *-* None None 12.0 12.0 12.0/<span class="token operator">&</span>position1 0.0000000000000000 0.0000000000000000 0.00000000000000001 0.3333333333333333 0.0000000000000000 0.00000000000000001 0.6666666666666666 0.0000000000000000 0.00000000000000001 0.0000000000000000 0.3333333333333333 0.00000000000000001 0.3333333333333333 0.3333333333333333 0.00000000000000001 0.6666666666666666 0.3333333333333333 0.00000000000000001 0.0000000000000000 0.6666666666666666 0.00000000000000001 0.3333333333333333 0.6666666666666666 0.00000000000000001 0.6666666666666666 0.6666666666666666 0.00000000000000001 0.0000000000000000 0.0000000000000000 0.33333333333333331 0.3333333333333333 0.0000000000000000 0.33333333333333331 0.6666666666666666 0.0000000000000000 0.33333333333333331 0.0000000000000000 0.3333333333333333 0.33333333333333331 0.3333333333333333 0.3333333333333333 0.33333333333333331 0.6666666666666666 0.3333333333333333 0.33333333333333331 0.0000000000000000 0.6666666666666666 0.33333333333333331 0.3333333333333333 0.6666666666666666 0.33333333333333331 0.6666666666666666 0.6666666666666666 0.33333333333333331 0.0000000000000000 0.0000000000000000 0.66666666666666661 0.3333333333333333 0.0000000000000000 0.66666666666666661 0.6666666666666666 0.0000000000000000 0.66666666666666661 0.0000000000000000 0.3333333333333333 0.66666666666666661 0.3333333333333333 0.3333333333333333 0.66666666666666661 0.6666666666666666 0.3333333333333333 0.66666666666666661 0.0000000000000000 0.6666666666666666 0.66666666666666661 0.3333333333333333 0.6666666666666666 0.66666666666666661 0.6666666666666666 0.6666666666666666 0.66666666666666662 0.0833333333333333 0.0833333333333333 0.08333333333333332 0.4166666666666666 0.0833333333333333 0.08333333333333332 0.7500000000000000 0.0833333333333333 0.08333333333333332 0.0833333333333333 0.4166666666666666 0.08333333333333332 0.4166666666666666 0.4166666666666666 0.08333333333333332 0.7500000000000000 0.4166666666666666 0.08333333333333332 0.0833333333333333 0.7500000000000000 0.08333333333333332 0.4166666666666666 0.7500000000000000 0.08333333333333332 0.7500000000000000 0.7500000000000000 0.08333333333333332 0.0833333333333333 0.0833333333333333 0.41666666666666662 0.4166666666666666 0.0833333333333333 0.41666666666666662 0.7500000000000000 0.0833333333333333 0.41666666666666662 0.0833333333333333 0.4166666666666666 0.41666666666666662 0.4166666666666666 0.4166666666666666 0.41666666666666662 0.7500000000000000 0.4166666666666666 0.41666666666666662 0.0833333333333333 0.7500000000000000 0.41666666666666662 0.4166666666666666 0.7500000000000000 0.41666666666666662 0.7500000000000000 0.7500000000000000 0.41666666666666662 0.0833333333333333 0.0833333333333333 0.75000000000000002 0.4166666666666666 0.0833333333333333 0.75000000000000002 0.7500000000000000 0.0833333333333333 0.75000000000000002 0.0833333333333333 0.4166666666666666 0.75000000000000002 0.4166666666666666 0.4166666666666666 0.75000000000000002 0.7500000000000000 0.4166666666666666 0.75000000000000002 0.0833333333333333 0.7500000000000000 0.75000000000000002 0.4166666666666666 0.7500000000000000 0.75000000000000002 0.7500000000000000 0.7500000000000000 0.75000000000000002 0.2500000000000000 0.2500000000000000 0.25000000000000002 0.5833333333333333 0.2500000000000000 0.25000000000000002 0.9166666666666666 0.2500000000000000 0.25000000000000002 0.2500000000000000 0.5833333333333333 0.25000000000000002 0.5833333333333333 0.5833333333333333 0.25000000000000002 0.9166666666666666 0.5833333333333333 0.25000000000000002 0.2500000000000000 0.9166666666666666 0.25000000000000002 0.5833333333333333 0.9166666666666666 0.25000000000000002 0.9166666666666666 0.9166666666666666 0.25000000000000002 0.2500000000000000 0.2500000000000000 0.58333333333333332 0.5833333333333333 0.2500000000000000 0.58333333333333332 0.9166666666666666 0.2500000000000000 0.58333333333333332 0.2500000000000000 0.5833333333333333 0.58333333333333332 0.5833333333333333 0.5833333333333333 0.58333333333333332 0.9166666666666666 0.5833333333333333 0.58333333333333332 0.2500000000000000 0.9166666666666666 0.58333333333333332 0.5833333333333333 0.9166666666666666 0.58333333333333332 0.9166666666666666 0.9166666666666666 0.58333333333333332 0.2500000000000000 0.2500000000000000 0.91666666666666662 0.5833333333333333 0.2500000000000000 0.91666666666666662 0.9166666666666666 0.2500000000000000 0.91666666666666662 0.2500000000000000 0.5833333333333333 0.91666666666666662 0.5833333333333333 0.5833333333333333 0.91666666666666662 0.9166666666666666 0.5833333333333333 0.91666666666666662 0.2500000000000000 0.9166666666666666 0.91666666666666662 0.5833333333333333 0.9166666666666666 0.91666666666666662 0.9166666666666666 0.9166666666666666 0.9166666666666666/</code></pre><p>注意晶格常数单位的转换 $1 Bohr= 0.529177208 Angstrom$</p><p>在终端运行:</p><pre class=" language-bash"><code class="language-bash">alm alm.in <span class="token operator">></span> alm.log</code></pre><p>得到Nb.xml</p><p>3 Anharmonic Phonon</p><p>anphono.in输入文件如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token operator">&</span>general PREFIX <span class="token operator">=</span>scph MODE <span class="token operator">=</span> SCPH FCSXML <span class="token operator">=</span>Nb.xml <span class="token comment" spellcheck="true">#forceconstant file</span> NKD <span class="token operator">=</span> 1<span class="token punctuation">;</span> KD <span class="token operator">=</span> Nb MASS <span class="token operator">=</span> 92.90638 <span class="token comment" spellcheck="true">#NONANALYTIC = 0; BORNINFO = PbTe.born</span> TMIN <span class="token operator">=</span> 0<span class="token punctuation">;</span> TMAX <span class="token operator">=</span> 300<span class="token punctuation">;</span> DT <span class="token operator">=</span> 100 <span class="token comment" spellcheck="true">#Temperature and step</span>/<span class="token operator">&</span>scph KMESH_SCPH <span class="token operator">=</span> 6 6 6 KMESH_INTERPOLATE <span class="token operator">=</span> 6 6 6 SELF_OFFDIAG <span class="token operator">=</span> 0 RESTART_SCPH <span class="token operator">=</span> 0 MIXALPHA <span class="token operator">=</span> 0.1 MAXITER <span class="token operator">=</span> 500 TOL_SCPH <span class="token operator">=</span> 1.0e-10/<span class="token operator">&</span>cell <span class="token comment" spellcheck="true">## primitive cell is best</span> 6.2507550151332 -0.5 0.5 0.5 0.5 -0.5 0.5 0.5 0.5 -0.5/<span class="token operator">&</span>kpoint 1 <span class="token comment" spellcheck="true"># KPMODE = 1: get phonon band 2: get others properties</span> G 0.0 0.0 0.0 H 0.5 -0.5 0.5 201 H 0.5 -0.5 0.5 P 0.25 0.25 0.25 201 P 0.25 0.25 0.25 G 0.0 0.0 0.0 201 G 0.0 0.0 0.0 N 0.0 0.0 0.5 201/</code></pre><p>在终端运行:</p><pre class=" language-bash"><code class="language-bash">anphon anphono.in <span class="token operator">></span> anphono.log</code></pre><p>得到scph.scph_bands,里面有不同温度下的声子谱</p><img src="/img/ThO2_Phonon.png" width = "100%" height = "100%" div align=center/>]]></content>
<categories>
<category> 计算笔记 </category>
</categories>
<tags>
<tag> Anharmonic phonon </tag>
</tags>
</entry>
<entry>
<title>TDEP计算高温声子谱</title>
<link href="/2020/06/28/tdep-ji-suan-sheng-zi-pu/"/>
<url>/2020/06/28/tdep-ji-suan-sheng-zi-pu/</url>
<content type="html"><![CDATA[<h2 id="TDEP计算高温声子色散"><a href="#TDEP计算高温声子色散" class="headerlink" title="TDEP计算高温声子色散"></a><strong>TDEP计算高温声子色散</strong></h2><h3 id="lammps"><a href="#lammps" class="headerlink" title="lammps"></a><strong>lammps</strong></h3><p>输入文件</p><pre class=" language-bash"><code class="language-bash">in.lammps <span class="token comment" spellcheck="true">#lammps计算的输入文件</span>data.cell <span class="token comment" spellcheck="true">#lammps计算需要的超胞文件,可以直接在in.lammps中设置</span>grep_dump.sh <span class="token comment" spellcheck="true">#处理lammps输出的dump信息,得到TDEP需要的输入文件</span>MTP100.mtp <span class="token comment" spellcheck="true">#LAMMPS计算需要的势文件,根据需要选取不同种类,不唯一</span><span class="token comment" spellcheck="true">#TDEP所需要的文件</span>infile.ucposcar <span class="token comment" spellcheck="true">#原胞</span>infile.meta <span class="token comment" spellcheck="true">#TDEP需要的分子动力学的一些信息,结构数目,温度,步长等</span>infile.ssposcar <span class="token comment" spellcheck="true">#TDEP计算需要的初始超胞</span>infile.positions <span class="token comment" spellcheck="true">#TDEP计算需要的每步的原子坐标信息</span>infile.forces <span class="token comment" spellcheck="true">#TDEP计算需要的每步的原子受力</span>infile.stat <span class="token comment" spellcheck="true">#TDEP计算需要的每步的能量 温度 压强 应力等信息</span></code></pre><p><strong>1 LAMMPS计算</strong></p><pre class=" language-lammps"><code class="language-lammps"># molecular dynamics NVTunits metalboundary p p patom_style atomicread_data data.pospair_style MLIP mlip.inipair_coeff * * variable t equal 1113neighbor 0.3 bintimestep 0.001thermo_style custom step etotal temp vol pressthermo 1000velocity all create $t 3627941 dist gaussian mom yesvelocity all scale $tfix int all nvt temp $t $t 0.5 #between 0.2-2.0run 5000variable st equal stepvariable tm equal stepvariable Et equal etotalvariable Ep equal pevariable Ek equal kevariable tmp equal tempvariable pr equal press/10000variable sxx equal pxx/10000variable syy equal pyy/10000variable szz equal pzz/10000variable sxy equal pxy/10000variable sxz equal pxz/10000variable syz equal pyz/10000fix statdump all print 100 "${st} ${tm} ${Et} ${Ep} ${Ek} ${tmp} ${pr} ${sxx} ${syy} ${szz} ${sxy} ${sxz} ${syz}" screen no file dump.statdump posdump all custom 100 dump.positions xs ys zsdump_modify posdump sort id format line "%20.15e %20.15e %20.15e"dump forcedump all custom 100 dump.forces fx fy fzdump_modify forcedump sort id format line "%20.15e %20.15e %20.15e"run 20000</code></pre><pre class=" language-lammps"><code class="language-lammps"># molecular dynamics NVEvariable a index 3.4333879460894972variable baseline equal 0.0variable st equal step-5000variable tm equal step-5000variable Et equal etotal-v_baselinevariable Ep equal pe-v_baselinevariable Ek equal kevariable tmp equal tempvariable pr equal press/10000variable sxx equal pxx/10000variable syy equal pyy/10000variable szz equal pzz/10000variable sxy equal pxy/10000variable sxz equal pxz/10000variable syz equal pyz/10000units metaldimension 3boundary p p p # periodic boundary conditions (f ? aperiodic/ p - periodic)atom_style atomic # Define what style of atoms to use in a simulation. http://lammps.sandia.gov/doc/atom_style.htmlvariable temperature equal 1113variable temperature_x2 equal ${temperature}lattice bcc ${a}read_data data.pospair_style MLIP mlip.inipair_coeff * *mass 1 238.029neighbor 0.3 binneigh_modify every 20 delay 0 check no#---------------------------------------thermo 1thermo_style custom step time temp etotal pe ke pxx pyy pzz pxy pxz pyzvelocity all create ${temperature_x2} 32000 rot yes mom yestimestep 0.0005fix 1 all nvefix 2 all langevin ${temperature} ${temperature} 0.1 12345 zero yesrun 5000unfix 2fix statdump all print 100 "${st} ${tm} ${Et} ${Ep} ${Ek} ${tmp} ${pr} ${sxx} ${syy} ${szz} ${sxy} ${sxz} ${syz}" screen no file dump.statdump posdump all custom 100 dump.positions xs ys zsdump forcedump all custom 100 dump.forces fx fy fzdump_modify posdump sort id format line "%20.15e %20.15e %20.15e"dump_modify forcedump sort id format line "%20.15e %20.15e %20.15e"run 20000</code></pre><p><strong>注:需仔细检查infile.ssposcar 和 MD运行时的POSCAR是否一致,尤其是坐标。</strong></p><p>运行命令</p><pre class=" language-bash"><code class="language-bash">mpirun -np 16 lmp_mpi -in in.lammps</code></pre><p>得到 dump.stat dump.positions, dump.forces</p><p>运行 grep_dump.sh OR grep_dump2.sh</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true"># figure out how many atoms there are</span>na<span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">head</span> -n 4 dump.forces <span class="token operator">|</span> <span class="token function">tail</span> -n 1<span class="token variable">`</span></span><span class="token comment" spellcheck="true"># remove the header from the stat file</span><span class="token function">grep</span> -v <span class="token string">'^#'</span> dump.stat <span class="token operator">></span> infile.stat<span class="token comment" spellcheck="true"># figure out how many timesteps there are</span>nt<span class="token operator">=</span>`wc -l infile.stat <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{print <span class="token variable">$1</span>}'</span>`<span class="token comment" spellcheck="true"># create the positions and force files</span><span class="token punctuation">[</span> -f infile.forces <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token function">rm</span> infile.forces<span class="token punctuation">[</span> -f infile.positions <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token function">rm</span> infile.positions<span class="token keyword">for</span> t <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">seq</span> 1 $<span class="token punctuation">{</span>nt<span class="token punctuation">}</span><span class="token variable">`</span></span><span class="token keyword">do</span> nl<span class="token operator">=</span><span class="token variable"><span class="token variable">$((</span> ${na}<span class="token operator">+</span><span class="token number">9</span><span class="token variable">))</span></span> nll<span class="token operator">=</span><span class="token variable"><span class="token variable">$((</span> ${nl}<span class="token operator">*</span>${t} <span class="token variable">))</span></span> <span class="token keyword">echo</span> <span class="token string">"t <span class="token variable">${t}</span> <span class="token variable">${nl}</span> <span class="token variable">${nll}</span>"</span> <span class="token function">head</span> -n <span class="token variable">${nll}</span> dump.forces <span class="token operator">|</span> <span class="token function">tail</span> -n <span class="token variable">${na}</span> <span class="token operator">>></span> infile.forces <span class="token function">head</span> -n <span class="token variable">${nll}</span> dump.positions <span class="token operator">|</span> <span class="token function">tail</span> -n <span class="token variable">${na}</span> <span class="token operator">>></span> infile.positions<span class="token keyword">done</span><span class="token comment" spellcheck="true">#grep_dump2.sh</span><span class="token comment" spellcheck="true">#!/bin/bash</span><span class="token comment" spellcheck="true">#number of atoms</span>Nat<span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token function">head</span> -n 4 dump.forces <span class="token operator">|</span> <span class="token function">tail</span> -n 1<span class="token variable">)</span></span><span class="token comment" spellcheck="true">#copy dump.stat to infile.stat</span><span class="token function">grep</span> -v <span class="token string">'^#'</span> dump.stat <span class="token operator">></span> infile.stat<span class="token comment" spellcheck="true">#number of timesteps</span>Nt<span class="token operator">=</span><span class="token punctuation">$(</span>gawk <span class="token string">'END{print FNR}'</span> infile.stat<span class="token punctuation">)</span><span class="token comment" spellcheck="true"># create the positions and forces files</span><span class="token punctuation">[</span> -f infile.forces <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token function">rm</span> infile.forces<span class="token punctuation">[</span> -f infile.positions <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token function">rm</span> infile.positions<span class="token comment" spellcheck="true">#prepare input files. Mind that first configuration in dump.forces and dump.positions should be excluded</span><span class="token variable"><span class="token punctuation">((</span>Nl<span class="token operator">=</span>$Nt<span class="token operator">*</span><span class="token punctuation">(</span>Nat<span class="token operator">+</span><span class="token number">9</span><span class="token punctuation">))</span></span><span class="token punctuation">)</span><span class="token function">tail</span> -n <span class="token variable">$Nl</span> dump.forces <span class="token operator">|</span> <span class="token function">grep</span> -A <span class="token variable">$Nat</span> <span class="token string">'ITEM: ATOM'</span> <span class="token operator">|</span> <span class="token function">grep</span> -v <span class="token string">'ITEM: ATOM'</span> <span class="token operator">|</span> <span class="token function">grep</span> -v <span class="token string">'^--$'</span> <span class="token operator">>></span> infile.forces<span class="token function">tail</span> -n <span class="token variable">$Nl</span> dump.positions <span class="token operator">|</span> <span class="token function">grep</span> -A <span class="token variable">$Nat</span> <span class="token string">'ITEM: ATOM'</span> <span class="token operator">|</span> <span class="token function">grep</span> -v <span class="token string">'ITEM: ATOM'</span> <span class="token operator">|</span> <span class="token function">grep</span> -v <span class="token string">'^--$'</span> <span class="token operator">>></span> infile.positions</code></pre><p>得到infile.stat infile.positions infile.forces; 修改infile.meta的相关信息</p><p>自定义高对称点路径的脚本 infile.qpoints_dispersion</p><pre class=" language-in"><code class="language-in">CUSTOM ! 100 ! Number of points on each path 4 ! Number paths between special points0.000 0.000 0.000 0.000 0.500 0.500 GM X0.000 0.500 0.500 0.000 0.625 0.375 X U0.375 0.750 0.375 0.000 0.000 0.000 K GM0.000 0.000 0.000 0.000 0.500 0.000 GM L</code></pre><p>OR</p><pre class=" language-in"><code class="language-in">FCC ! Bravais lattice type 100 ! Number of points on each path 4 ! Number paths between special pointsGM X ! Starting and ending special pointX U !K GM !GM L !</code></pre><p><strong>2 TDEP计算处理得到声子色散</strong></p><p>简单的命令流程</p><pre class=" language-bash"><code class="language-bash">extract_forceconstants -rc2 5<span class="token function">mv</span> outfile.forceconstant infile.forceconstantphonon_dispersion_relationsgnuplot outfile.dispersion_relations.gnuplot</code></pre><h3 id="Si的例子-VASP-MD"><a href="#Si的例子-VASP-MD" class="headerlink" title="Si的例子 VASP_MD"></a><strong>Si的例子 VASP_MD</strong></h3><p>INCAR</p><pre class=" language-in"><code class="language-in">Global Parameters ISTART = 0 (Read existing wavefunction; if there) # ISPIN = 2 (Spin polarised DFT) # ICHARG = 11 (Non-self-consistent: GGA/LDA band structures) LREAL = Auto (Projection operators: automatic) ENCUT = 400 (Cut-off energy for plane wave basis set, in eV) PREC = Normal (Precision level) LWAVE = .FALSE. (Write WAVECAR or not) LCHARG = .FALSE. (Write CHGCAR or not) #ADDGRID= .TRUE. (Increase grid; helps GGA convergence) # LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not) # LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not) # NELECT = (No. of electrons: charged cells; be careful) # LPLANE = .TRUE. (Real space distribution; supercells) # NPAR = 4 (Max is no. nodes; don't set for hybrids) # NWRITE = 2 (Medium-level output) # KPAR = 2 (Divides k-grid into separate groups) # NGX = 500 (FFT grid mesh density for nice charge/potential plots) # NGY = 500 (FFT grid mesh density for nice charge/potential plots) # NGZ = 500 (FFT grid mesh density for nice charge/potential plots) GGA = PE KPAR = 2Electronic Relaxation ISMEAR = -1 SIGMA = 0.02585201664 EDIFF = 1E-05 IALGO = 38 NELMIN = 4 Molecular Dynamics IBRION = 0 (Activate MD) NSW = 20000 (Max ionic steps) #EDIFFG = -1E-03 (Ionic convergence; eV/A) POTIM = 1 (Timestep in fs) SMASS = 0 (MD Algorithm: -3-microcanonical ensemble; 0-canonical ensemble) TEBEG = 300 (Start temperature K) TEEND = 300 (Start temperature K) MDALGO = 2 (Andersen Thermostat) ISYM = 0 (Symmetry: 0=none; 2=GGA; 3=hybrids) ISIF = 2</code></pre><p>初始原胞</p><pre class=" language-TXT"><code class="language-TXT">Primitive Cell 1.000000 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 Si 2DIRECT 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000</code></pre><p>超胞为3x3x3</p><p>运行VASP进行分子动力学计算</p><p>运行process_outcar_5.3.py 提取产生TDEP输入文件</p><pre class=" language-bash"><code class="language-bash">mpirun -np 16 vasp_stdprocess_outcar_5.3.py OUTCAR --skip n <span class="token comment" spellcheck="true"># n为第几步开始提取</span></code></pre><p><strong>注:需仔细检查infile.ssposcar 和 MD运行时的POSCAR是否一致,尤其是坐标。</strong></p><p>TDEP步骤</p><pre class=" language-bash"><code class="language-bash">extract_forceconstants -rc2 5 -rc3 3<span class="token function">mv</span> outfile.forceconstant infile.forceconstant <span class="token comment" spellcheck="true">#phonon dispersion</span>phonon_dispersion_relations <span class="token comment" spellcheck="true">#phonon lineshape</span><span class="token function">mv</span> outfile.infile.forceconstant_thirdorder infile.forceconstant_thirdorderlineshape --path -qg 12 12 12 -ne 600 --temperature 300</code></pre><p>lineshape的画图脚本</p><pre class=" language-python"><code class="language-python"><span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np<span class="token keyword">import</span> h5py <span class="token keyword">as</span> h5<span class="token keyword">from</span> matplotlib<span class="token punctuation">.</span>colors <span class="token keyword">import</span> LogNorm<span class="token comment" spellcheck="true"># open the sqe file</span>f <span class="token operator">=</span> h5<span class="token punctuation">.</span>File<span class="token punctuation">(</span><span class="token string">'outfile.sqe.hdf5'</span><span class="token punctuation">,</span><span class="token string">'r'</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true"># get axes and intensity</span>x <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>f<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'q_values'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>y <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>f<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'energy_values'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>gz <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>f<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'intensity'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true"># add a little bit so that the logscale does not go nuts</span>gz<span class="token operator">=</span>gz<span class="token operator">+</span><span class="token number">1E</span><span class="token operator">-</span><span class="token number">2</span><span class="token comment" spellcheck="true"># for plotting, turn the axes into 2d arrays</span>gx<span class="token punctuation">,</span> gy <span class="token operator">=</span> np<span class="token punctuation">.</span>meshgrid<span class="token punctuation">(</span>x<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token comment" spellcheck="true"># x-ticks</span>xt <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>f<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'q_ticks'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true"># labels for the x-ticks</span>xl <span class="token operator">=</span> f<span class="token punctuation">.</span>attrs<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">'q_tick_labels'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true"># label for y-axis</span>plt<span class="token punctuation">.</span>pcolormesh<span class="token punctuation">(</span>gx<span class="token punctuation">,</span> gy<span class="token punctuation">,</span> gz<span class="token punctuation">,</span> norm<span class="token operator">=</span>LogNorm<span class="token punctuation">(</span>vmin<span class="token operator">=</span>gz<span class="token punctuation">.</span>min<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> vmax<span class="token operator">=</span>gz<span class="token punctuation">.</span>max<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> cmap<span class="token operator">=</span><span class="token string">'afmhot'</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true"># set the limits of the plot to the limits of the data</span>plt<span class="token punctuation">.</span>axis<span class="token punctuation">(</span><span class="token punctuation">[</span>x<span class="token punctuation">.</span>min<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> x<span class="token punctuation">.</span>max<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> y<span class="token punctuation">.</span>min<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> y<span class="token punctuation">.</span>max<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>xticks<span class="token punctuation">(</span>xt<span class="token punctuation">,</span>xl<span class="token punctuation">)</span>plt<span class="token punctuation">.</span>tight_layout<span class="token punctuation">(</span><span class="token punctuation">)</span>plt<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre><img src="/img/Si_300K.png" width = "70%" height = "70%" div align=center/>]]></content>
<categories>
<category> 计算笔记 </category>
</categories>
<tags>
<tag> Anharmonic phonon </tag>
</tags>
</entry>
<entry>
<title>TDEP安装教程</title>
<link href="/2020/06/24/tdep-an-zhuang/"/>
<url>/2020/06/24/tdep-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="TDEP安装"><a href="#TDEP安装" class="headerlink" title="TDEP安装"></a><strong>TDEP安装</strong></h2><p>主要基于gfortran环境</p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>暂无</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压文件</p><pre class=" language-bash"><code class="language-bash">unzip tdep-devel-master.zip<span class="token function">cd</span> tdep-devel-master</code></pre><p>2 安装</p><p>important_settings 文件设置参考如下</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true">#</span><span class="token comment" spellcheck="true"># Hi Dr. Hellman,</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># Attached is my important_settings. I use Ubuntu 16.04</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For fortran flags, I used:</span><span class="token comment" spellcheck="true"># FCFLAGS="-ffree-line-length-none -std=f2008 -fall-intrinsics -cpp -fopenmp"</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For gnuplot:</span><span class="token comment" spellcheck="true"># GNUPLOTTERMINAL="x11"</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For blas and lapack:</span><span class="token comment" spellcheck="true"># BLASLAPACK_LIBS="-lblas -llapack"</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For gfortran-6, I installed in such way:</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># sudo add-apt-repository ppa:ubuntu-toolchain-r/test</span><span class="token comment" spellcheck="true"># sudo apt-get update</span><span class="token comment" spellcheck="true"># sudo apt-get install gfortran-6</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For openmpi:</span><span class="token comment" spellcheck="true"># sudo apt-get install openmpi-bin</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For fftw, i'm not sure which is really working, but I installed:</span><span class="token comment" spellcheck="true"># sudo apt-get install fftw-dev</span><span class="token comment" spellcheck="true"># sudo apt-get install libfftw3-dev </span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># For hdf5, I installed both parallel version and serial version:</span><span class="token comment" spellcheck="true"># sudo apt-get install libhdf5-mpi-dev</span><span class="token comment" spellcheck="true"># sudo apt-get install libhdf5-serial-dev</span><span class="token comment" spellcheck="true"># </span><span class="token comment" spellcheck="true"># I think that's all I did to make it work.</span><span class="token comment" spellcheck="true"># the fortran compiler</span>FORTRAN_COMPILER<span class="token operator">=</span><span class="token string">"gfortran"</span><span class="token comment" spellcheck="true"># optimization stuff. Go all in.</span>OPTIMIZATION_LEVEL<span class="token operator">=</span><span class="token string">"-Ofast"</span><span class="token comment" spellcheck="true"># the flag that sets the default real to a double.</span>DOUBLE_FLAG<span class="token operator">=</span><span class="token string">"-fdefault-real-8"</span><span class="token comment" spellcheck="true"># The flag that tells the compiler where to put .o and .mod files.</span>MODULE_FLAG<span class="token operator">=</span><span class="token string">"-J"</span><span class="token comment" spellcheck="true"># the header to put in python scripts.</span>PYTHONHEADER<span class="token operator">=</span><span class="token string">"#!/home/anaconda3/bin/python"</span><span class="token comment" spellcheck="true"># Which gnuplot terminal to use by default.</span><span class="token comment" spellcheck="true">#GNUPLOTTERMINAL="aqua" # nice on OSX, needs aquaterm installed and gnuplot compiled with support for it.</span><span class="token comment" spellcheck="true">#GNUPLOTTERMINAL="wxt" # nice on linux.</span>GNUPLOTTERMINAL<span class="token operator">=</span><span class="token string">"wxt"</span> <span class="token comment" spellcheck="true"># fallback that works but looks kind of bad</span><span class="token comment" spellcheck="true"># Precompiler flags. Selecting default gnuplot terminal, and make the progressbars work.</span>PRECOMPILER_FLAGS<span class="token operator">=</span><span class="token string">"-DGP<span class="token variable">${GNUPLOTTERMINAL}</span> -Dgfortranprogressbar"</span> <span class="token comment" spellcheck="true"># for gfortran</span><span class="token comment" spellcheck="true">#PRECOMPILER_FLAGS="-DGP${GNUPLOTTERMINAL} -Difortprogressbar" # for ifort</span><span class="token comment" spellcheck="true"># these are the flags that are needed for gfortran</span><span class="token comment" spellcheck="true">#FCFLAGS="-Wl,-commons,use_dylibs -ffree-line-length-none -std=f2008 -fall-intrinsics -cpp -fopenmp"</span>FCFLAGS<span class="token operator">=</span><span class="token string">"-ffree-line-length-none -std=f2008 -fall-intrinsics -cpp -fopenmp"</span><span class="token comment" spellcheck="true"># These are the BLAS/LAPACK libraries. On OSX with gfortran, use the built-in</span><span class="token comment" spellcheck="true"># where you just specify -framework accelerate and everything works. On other systems</span><span class="token comment" spellcheck="true"># you might have to specify this manally</span>PATH_TO_BLASLAPACK_LIB<span class="token operator">=</span><span class="token string">"-L/usr/local/lib"</span>PATH_TO_BLASLAPACK_INC<span class="token operator">=</span><span class="token string">"-I/usr/local/include"</span>BLASLAPACK_LIBS<span class="token operator">=</span><span class="token string">"-llapack -lblas"</span><span class="token comment" spellcheck="true"># For the autocorrelation code, I use fast Fourier transforms. fftw needs to be installed and</span><span class="token comment" spellcheck="true"># linked. This is where homebrew installed mine on osx</span>PATH_TO_FFTW_LIB<span class="token operator">=</span><span class="token string">"-L/usr/local/fftw/lib"</span>PATH_TO_FFTW_INC<span class="token operator">=</span><span class="token string">"-I/usr/local/fftw/include"</span>FFTW_LIBS<span class="token operator">=</span><span class="token string">"-lfftw3"</span><span class="token comment" spellcheck="true"># The thermal conductivity is MPI parallel. Then you need an mpi installation. This one points to</span><span class="token comment" spellcheck="true"># openmpi installed by homebrew in it's default location</span>PATH_TO_MPI_LIB<span class="token operator">=</span><span class="token string">"-L/usr/local/openmpi/lib"</span>PATH_TO_MPI_INC<span class="token operator">=</span><span class="token string">"-I/usr/local/openmpi/include"</span>MPI_LIBS<span class="token operator">=</span><span class="token string">"-lmpi_mpifh -lmpi"</span><span class="token comment" spellcheck="true"># I also use HDF5 every now and then</span>PATH_TO_HDF5_LIB<span class="token operator">=</span><span class="token string">"-L/usr/local/hdf5/lib"</span>PATH_TO_HDF5_INC<span class="token operator">=</span><span class="token string">"-I/usr/local/hdf5/include"</span>HDF5_LIBS<span class="token operator">=</span><span class="token string">"-lhdf5 -lhdf5_fortran"</span><span class="token comment" spellcheck="true"># We also need a C-compiler</span>C_COMPILER<span class="token operator">=</span><span class="token string">"gcc"</span><span class="token comment" spellcheck="true"># If you want to try and use CGAL. Not recommended for people who do not like to sort out compiler errors.</span>USECGAL<span class="token operator">=</span><span class="token string">"no"</span></code></pre><p>运行安装命令</p><pre class=" language-bash"><code class="language-bash"><span class="token function">bash</span> build_things.sh</code></pre><p>3 添加环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc<span class="token function">export</span> MANPATH<span class="token operator">=</span><span class="token variable">$MANPATH</span>:/Users/olle/tdep-devel/man<span class="token function">export</span> PATH<span class="token operator">=</span><span class="token variable">$PATH</span>:/Users/olle/tdep-devel/bin<span class="token function">alias</span> gnuplot<span class="token operator">=</span><span class="token string">'gnuplot -persist'</span></code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>LAPACK+BLAS安装教程</title>
<link href="/2020/06/24/blas-lapack-an-zhuang/"/>
<url>/2020/06/24/blas-lapack-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="安装-BLAS-和-LAPACK-库"><a href="#安装-BLAS-和-LAPACK-库" class="headerlink" title="安装 BLAS 和 LAPACK 库"></a><strong>安装 BLAS 和 LAPACK 库</strong></h2><p>注:使用 gfortran编译</p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>官网: <a href="http://www.netlib.org/lapack/" target="_blank" rel="noopener">http://www.netlib.org/lapack/</a></p><p>注:BLAS库包含在LAPACK文件夹中,无需另外下载</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -zxvf lapack-3.8.0<span class="token function">cd</span> lapack-3.8.0<span class="token function">cp</span> make.inc.example make.inc</code></pre><p>修改Makefile 中某几行如下:</p><pre class=" language-makefile"><code class="language-makefile"><span class="token comment" spellcheck="true">#</span><span class="token comment" spellcheck="true"># Top Level Makefile for LAPACK</span><span class="token comment" spellcheck="true"># Version 3.4.1</span><span class="token comment" spellcheck="true"># April 2012</span><span class="token comment" spellcheck="true">#</span><span class="token keyword">include</span> make.inc<span class="token symbol">all</span><span class="token punctuation">:</span> lapack_install lib blas_testing lapack_testing<span class="token comment" spellcheck="true">#lib: lapacklib tmglib</span><span class="token symbol">lib</span><span class="token punctuation">:</span> blaslib variants lapacklib tmglib</code></pre><p>修改make.inc 最后几行如下:</p><pre class=" language-makefile"><code class="language-makefile">BLASLIB <span class="token operator">=</span> ../../libblas.aCBLASLIB <span class="token operator">=</span> ../../libcblas.aLAPACKLIB <span class="token operator">=</span> liblapack.aTMGLIB <span class="token operator">=</span> libtmglib.aLAPACKELIB <span class="token operator">=</span> liblapacke.a</code></pre><p>编译</p><pre class=" language-bash"><code class="language-bash"><span class="token function">make</span> -j8 </code></pre><p>注:编译时可能会在TESTING时出错。不用管这个错误。只要生成了所需要的libblas.a等文件就好。</p><p>进如LAPACKE文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">cd</span> LAPACKE<span class="token function">make</span> -j8<span class="token comment" spellcheck="true">#进入LAPACKE文件中的include文件夹,将所有文件复制到 /usr/local/include</span><span class="token function">cd</span> include<span class="token function">sudo</span> <span class="token function">cp</span> *.h /usr/local/include<span class="token function">sudo</span> <span class="token function">cp</span> *.in /usr/local/include</code></pre><p>返回到lapack-3.8.0文件夹,将所有 .a文件复制到/usr/local/lib 中</p><pre class=" language-bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">cp</span> *.a /usr/local/lib</code></pre><p>将文件放到/usr/local文件夹,方便以后调用库时可以默认,不用额外添加路径。</p>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>Python四维图</title>
<link href="/2020/05/11/python-hua-si-wei-tou-ying-de-san-wei-tu/"/>
<url>/2020/05/11/python-hua-si-wei-tou-ying-de-san-wei-tu/</url>
<content type="html"><![CDATA[<h2 id="Python画四维投影的三维图像"><a href="#Python画四维投影的三维图像" class="headerlink" title="Python画四维投影的三维图像"></a><strong>Python画四维投影的三维图像</strong></h2><pre class=" language-python"><code class="language-python"><span class="token keyword">from</span> mpl_toolkits<span class="token punctuation">.</span>mplot3d <span class="token keyword">import</span> Axes3D<span class="token keyword">import</span> matplotlib<span class="token punctuation">.</span>pyplot <span class="token keyword">as</span> plt<span class="token keyword">import</span> numpy <span class="token keyword">as</span> npfig <span class="token operator">=</span> plt<span class="token punctuation">.</span>figure<span class="token punctuation">(</span><span class="token punctuation">)</span>ax <span class="token operator">=</span> fig<span class="token punctuation">.</span>add_subplot<span class="token punctuation">(</span><span class="token number">111</span><span class="token punctuation">,</span> projection<span class="token operator">=</span><span class="token string">'3d'</span><span class="token punctuation">)</span>u <span class="token operator">=</span> np<span class="token punctuation">.</span>linspace<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>pi<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span>v <span class="token operator">=</span> np<span class="token punctuation">.</span>linspace<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>pi<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span>x <span class="token operator">=</span> <span class="token number">10</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>outer<span class="token punctuation">(</span>np<span class="token punctuation">.</span>cos<span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>sin<span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">)</span>y <span class="token operator">=</span> <span class="token number">10</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>outer<span class="token punctuation">(</span>np<span class="token punctuation">.</span>sin<span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>sin<span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">)</span>z <span class="token operator">=</span> <span class="token number">10</span> <span class="token operator">*</span> np<span class="token punctuation">.</span>outer<span class="token punctuation">(</span>np<span class="token punctuation">.</span>ones<span class="token punctuation">(</span>np<span class="token punctuation">.</span>size<span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>cos<span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">)</span>z1 <span class="token operator">=</span> z <span class="token operator">*</span> np<span class="token punctuation">.</span>cos<span class="token punctuation">(</span><span class="token number">0.5</span><span class="token operator">*</span>x<span class="token punctuation">)</span>N <span class="token operator">=</span> z1 <span class="token operator">/</span> z1<span class="token punctuation">.</span>max<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># normalize 0..1</span><span class="token comment" spellcheck="true">#plt.cm.颜色类型</span>surf <span class="token operator">=</span> ax<span class="token punctuation">.</span>plot_surface<span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">,</span> rstride<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span> cstride<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span> facecolors<span class="token operator">=</span>plt<span class="token punctuation">.</span>cm<span class="token punctuation">.</span>hot<span class="token punctuation">(</span>N<span class="token punctuation">)</span><span class="token punctuation">,</span> linewidth<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span> antialiased<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> shade<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span>m <span class="token operator">=</span> plt<span class="token punctuation">.</span>cm<span class="token punctuation">.</span>ScalarMappable<span class="token punctuation">(</span>cmap<span class="token operator">=</span>plt<span class="token punctuation">.</span>cm<span class="token punctuation">.</span>hot<span class="token punctuation">)</span>m<span class="token punctuation">.</span>set_array<span class="token punctuation">(</span>z1<span class="token punctuation">)</span>plt<span class="token punctuation">.</span>colorbar<span class="token punctuation">(</span>m<span class="token punctuation">)</span>plt<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre><p>img/<br><img src="/img/4D.png" width = "60%" height = "60%" div align=center/></p>]]></content>
<categories>
<category> Python学习 </category>
</categories>
<tags>
<tag> Python_learn </tag>
</tags>
</entry>
<entry>
<title>晶体的单晶声速</title>
<link href="/2020/05/05/jing-ti-de-dan-jing-sheng-su-ji-suan-gong-shi/"/>
<url>/2020/05/05/jing-ti-de-dan-jing-sheng-su-ji-suan-gong-shi/</url>
<content type="html"><![CDATA[<h1 id="晶体的单晶声速计算公式"><a href="#晶体的单晶声速计算公式" class="headerlink" title="晶体的单晶声速计算公式"></a><strong>晶体的单晶声速计算公式</strong></h1><p>Christoffel’s equation relates acoustic velocitics to crystallo-graphic direction and elastic constants.<br>$$<br>det|C_{ijkl}n_{l}n_{j}-\rho v^{2}\delta_{ik}|=0 \<br>det|F_{ik}n_{l}n_{j}-\rho v^{2}\delta_{ik}|=0 \<br>i,j,k,l=1,2,3; \<br>when\ i=k; then\ \delta=1; others\ \delta=0<br>$$<br>So, the Kelvin-Christoffel stiffness $\Gamma_{ik}$ is:<br>$$<br>\Gamma_{ik}=\sum_{j,l=1}^{n=3} C_{ijkl}n_{j}n_{l},\ i,k=1,2,3 \<br>\Gamma = \begin{bmatrix} \Gamma_{11} & \Gamma_{12} & \Gamma_{13} \ \Gamma_{12} & \Gamma_{22} & \Gamma_{23} \ \Gamma_{13} & \Gamma_{23} & \Gamma_{33}\end{bmatrix}<br>$$<br>For $n_{j}(\phi,\theta,\chi),n_{l}(\phi,\theta,\chi)$ :<br>$$<br>n_1=cos(\phi)cos(\theta)cos(\chi)-sin(\phi)sin(\chi) \<br>n_2=-cos(\phi)cos(\theta)sin(\chi)-sin(\phi)cos(\chi) \<br>n_3=-cos(\phi)sin(\theta)<br>$$<br>then, we can calculate the eigenvalues of matrix equation ($\lambda_i,i=1,2,3$).<br>$$<br>\lambda_1=\rho v_l^2 \<br>\lambda_2=\rho v_{s1}^2 \<br>\lambda_3=\rho v_{s2}^2<br>$$</p><p>Reference:</p><p>Sound velocity and elasticity of single-crystal forsterite to 16 GPa; DOI: 10.1029/96JB01266</p><hr><p>The fortran code:</p><pre class=" language-fortran"><code class="language-fortran"><span class="token keyword">module</span> singal_sound_velocity <span class="token keyword">contains</span> <span class="token keyword">subroutine</span> sing_sound_velocity<span class="token punctuation">(</span>Celas<span class="token punctuation">,</span> theta<span class="token punctuation">,</span> phi<span class="token punctuation">,</span> chi<span class="token punctuation">,</span> V_sing<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">! Celas: elastic constants</span> <span class="token keyword">implicit none</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> theta<span class="token punctuation">,</span> phi <span class="token punctuation">,</span>chi<span class="token punctuation">,</span> Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> V_sing<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> n1<span class="token punctuation">,</span>n2<span class="token punctuation">,</span>n3 <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> f<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Fv<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span>E<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> namda<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token keyword">integer</span> <span class="token operator">::</span> n<span class="token operator">=</span><span class="token number">3</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> err <span class="token keyword">integer</span> <span class="token operator">::</span> i<span class="token punctuation">,</span>j n1<span class="token operator">=</span>cosd<span class="token punctuation">(</span>theta<span class="token punctuation">)</span><span class="token operator">*</span>cosd<span class="token punctuation">(</span>phi<span class="token punctuation">)</span><span class="token operator">*</span>cosd<span class="token punctuation">(</span>chi<span class="token punctuation">)</span><span class="token operator">-</span>sind<span class="token punctuation">(</span>phi<span class="token punctuation">)</span><span class="token operator">*</span>sind<span class="token punctuation">(</span>chi<span class="token punctuation">)</span> n2<span class="token operator">=</span><span class="token operator">-</span>cosd<span class="token punctuation">(</span>theta<span class="token punctuation">)</span><span class="token operator">*</span>cosd<span class="token punctuation">(</span>phi<span class="token punctuation">)</span><span class="token operator">*</span>sind<span class="token punctuation">(</span>chi<span class="token punctuation">)</span><span class="token operator">-</span>sind<span class="token punctuation">(</span>phi<span class="token punctuation">)</span><span class="token operator">*</span>cosd<span class="token punctuation">(</span>chi<span class="token punctuation">)</span> n3<span class="token operator">=</span>sind<span class="token punctuation">(</span>theta<span class="token punctuation">)</span><span class="token operator">*</span>cosd<span class="token punctuation">(</span>phi<span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> f<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>n1<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n1<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n2<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n2<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token punctuation">&</span> <span class="token operator">+</span>n3<span class="token operator">*</span>n1<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n2<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token operator">+</span>n3<span class="token operator">*</span>n3<span class="token operator">*</span>Celas<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> Fv<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">=</span>f<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> err<span class="token operator">=</span><span class="token number">1.0d-8</span> <span class="token keyword">call</span> eigenvector_calc<span class="token punctuation">(</span>Fv<span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span>namda<span class="token punctuation">,</span>err<span class="token punctuation">)</span> V_sing<span class="token operator">=</span>namda <span class="token keyword">open</span><span class="token punctuation">(</span>unit<span class="token operator">=</span><span class="token number">89</span><span class="token punctuation">,</span><span class="token keyword">file</span><span class="token operator">=</span><span class="token string">"velocity.out"</span><span class="token punctuation">)</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span> <span class="token keyword">write</span><span class="token punctuation">(</span><span class="token number">89</span><span class="token punctuation">,</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token punctuation">(</span>namda<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token punctuation">,</span>j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token keyword">enddo</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span> <span class="token keyword">write</span><span class="token punctuation">(</span><span class="token number">89</span><span class="token punctuation">,</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token punctuation">(</span>Fv<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token punctuation">,</span>j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token keyword">enddo</span> <span class="token keyword">end subroutine</span> sing_sound_velocity <span class="token keyword">subroutine</span> eigenvector_calc<span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token punctuation">,</span>e<span class="token punctuation">,</span>eps<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">!==============================================================</span> <span class="token comment" spellcheck="true">! Compute all eigenvalues: real symmetric matrix a(n,n,)</span> <span class="token comment" spellcheck="true">! a*x = lambda*x </span> <span class="token comment" spellcheck="true">! method: the basic QR method</span> <span class="token comment" spellcheck="true">! Alex G. (January 2010)</span> <span class="token comment" spellcheck="true">!--------------------------------------------------------------</span> <span class="token comment" spellcheck="true">! input ...</span> <span class="token comment" spellcheck="true">! a(n,n) - array of coefficients for matrix A</span> <span class="token comment" spellcheck="true">! n - dimension</span> <span class="token comment" spellcheck="true">! eps - convergence tolerance</span> <span class="token comment" spellcheck="true">! output ...</span> <span class="token comment" spellcheck="true">! e(n) - eigenvalues</span> <span class="token comment" spellcheck="true">! iter - number of iterations to achieve the tolerance</span> <span class="token comment" spellcheck="true">! comments ...</span> <span class="token comment" spellcheck="true">! kmax - max number of allowed iterations</span> <span class="token comment" spellcheck="true">!==============================================================</span> <span class="token keyword">implicit none</span> <span class="token keyword">integer</span> <span class="token operator">::</span> n <span class="token punctuation">,</span>iter <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> a<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> e<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> eps <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> q<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> r<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> w<span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> an<span class="token punctuation">,</span> Ajnorm<span class="token punctuation">,</span> sum<span class="token punctuation">,</span> e0<span class="token punctuation">,</span>e1 <span class="token keyword">integer</span> <span class="token operator">::</span> k<span class="token punctuation">,</span> i<span class="token punctuation">,</span> j<span class="token punctuation">,</span> m <span class="token keyword">integer</span><span class="token punctuation">,</span> <span class="token keyword">parameter</span><span class="token operator">::</span>kmax<span class="token operator">=</span><span class="token number">1000</span> <span class="token comment" spellcheck="true">! initialization</span> q <span class="token operator">=</span> <span class="token number">0.0</span> r <span class="token operator">=</span> <span class="token number">0.0</span> e0 <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token keyword">do</span> k<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>kmax <span class="token comment" spellcheck="true">! iterations</span> <span class="token comment" spellcheck="true">! step 1: compute Q(n,n) and R(n,n)</span> <span class="token comment" spellcheck="true">! column 1</span> an <span class="token operator">=</span> Ajnorm<span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span> r<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> an <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n q<span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">=</span> a<span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span>an <span class="token keyword">end do</span> <span class="token comment" spellcheck="true">! columns 2,...,n</span> <span class="token keyword">do</span> j<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">,</span>n w <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token keyword">do</span> m<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>j<span class="token number">-1</span> <span class="token comment" spellcheck="true">! product q^T*a result = scalar</span> sum <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n sum <span class="token operator">=</span> sum <span class="token operator">+</span> q<span class="token punctuation">(</span>i<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token operator">*</span>a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token keyword">end do</span> r<span class="token punctuation">(</span>m<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token operator">=</span> sum <span class="token comment" spellcheck="true">! product (q^T*a)*q result = vector w(n)</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n w<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token operator">=</span> w<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token operator">+</span> sum<span class="token operator">*</span>q<span class="token punctuation">(</span>i<span class="token punctuation">,</span>m<span class="token punctuation">)</span> <span class="token keyword">end do</span> <span class="token keyword">end do</span> <span class="token comment" spellcheck="true">! new a'(j)</span> <span class="token keyword">do</span> i <span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token operator">=</span> a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token operator">-</span> w<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token keyword">end do</span> <span class="token comment" spellcheck="true">! evaluate the norm for a'(j)</span> an <span class="token operator">=</span> Ajnorm<span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token punctuation">,</span>j<span class="token punctuation">)</span> r<span class="token punctuation">(</span>j<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token operator">=</span> an <span class="token comment" spellcheck="true">! vector q(j)</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n q<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token operator">=</span> a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token operator">/</span>an <span class="token keyword">end do</span> <span class="token keyword">end do</span> <span class="token comment" spellcheck="true">! step 2: compute A=R(n,n)*Q(n,n)</span> a <span class="token operator">=</span> matmul<span class="token punctuation">(</span>r<span class="token punctuation">,</span>q<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">! egenvalues and the average eigenvale</span> sum <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n e<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span> <span class="token operator">=</span> a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span> sum <span class="token operator">=</span> sum<span class="token operator">+</span>e<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">*</span>e<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span> <span class="token keyword">end do</span> e1 <span class="token operator">=</span> sqrt<span class="token punctuation">(</span>sum<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">! print here eigenvalues</span> <span class="token comment" spellcheck="true">! write (*,201) (e(i),i=1,n)</span> <span class="token comment" spellcheck="true">!201 format (6f12.6)</span> <span class="token comment" spellcheck="true">! check for convergence</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>abs<span class="token punctuation">(</span>e1<span class="token operator">-</span>e0<span class="token punctuation">)</span> <span class="token operator"><</span> eps<span class="token punctuation">)</span> <span class="token keyword">exit</span> <span class="token comment" spellcheck="true">! prepare for the next iteration</span> e0 <span class="token operator">=</span> e1 <span class="token keyword">end do</span> iter <span class="token operator">=</span> k <span class="token keyword">if</span><span class="token punctuation">(</span>k <span class="token operator">==</span> kmax<span class="token punctuation">)</span> <span class="token keyword">write</span> <span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">,</span><span class="token operator">*</span><span class="token punctuation">)</span><span class="token string">'The eigenvlue failed to converge'</span> <span class="token keyword">end subroutine</span> eigenvector_calc<span class="token keyword">end module</span><span class="token keyword">function</span> Ajnorm<span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token keyword">implicit none</span> <span class="token keyword">integer</span> n<span class="token punctuation">,</span> j<span class="token punctuation">,</span> i <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> a<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span> Ajnorm <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">::</span> sum sum <span class="token operator">=</span> <span class="token number">0.0</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>n sum <span class="token operator">=</span> sum <span class="token operator">+</span> a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token operator">*</span>a<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span> <span class="token keyword">end do</span> Ajnorm <span class="token operator">=</span> sqrt<span class="token punctuation">(</span>sum<span class="token punctuation">)</span><span class="token keyword">end function</span> Ajnorm</code></pre>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> Fortran_learn </tag>
<tag> VASP </tag>
<tag> 弹性常数 </tag>
</tags>
</entry>
<entry>
<title>Fortran三角方程求解</title>
<link href="/2020/05/02/fortran-san-jiao-fang-cheng-qiu-jie/"/>
<url>/2020/05/02/fortran-san-jiao-fang-cheng-qiu-jie/</url>
<content type="html"><![CDATA[<h2 id="Fortran-三角矩阵求解"><a href="#Fortran-三角矩阵求解" class="headerlink" title="Fortran 三角矩阵求解"></a><strong>Fortran 三角矩阵求解</strong></h2><p>参考:《Fotran95 2003科学计算与工程》</p><h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a><strong>原理</strong></h3><p>$$<br>\vec{A}(n,n)\cdot\vec{X}(n)=\vec{B}<br>$$</p><p>上三角形方程迭代求解</p><p>$$<br>\begin{cases}<br> X_n=\frac{B_n}{A_{nn}} \<br> \<br> X_i=\frac{B_i-\sum_{k=i+1}^{n} A_{ik}X_k}{A_{ii}},i=n-1,\cdot\cdot\cdot,1</p><p>\end{cases}<br>$$<br>下三角形方程迭代求解<br>$$<br>\begin{cases}<br> X_1=\frac{B_1}{A_{11}} \<br> \<br> X_i=\frac{B_i-\sum_{k=1}^{n-1} A_{ik}X_k}{A_{ii}},i=2,\cdot\cdot\cdot,n</p><p>\end{cases}<br>$$</p><hr><hr><h3 id="Fortran代码实现"><a href="#Fortran代码实现" class="headerlink" title="Fortran代码实现"></a><strong>Fortran代码实现</strong></h3><pre class=" language-fortran"><code class="language-fortran"><span class="token keyword">module</span> <span class="token keyword">parameter</span> <span class="token keyword">implicit none</span> <span class="token keyword">integer</span><span class="token punctuation">,</span> <span class="token keyword">parameter</span> <span class="token operator">::</span> dp<span class="token operator">=</span><span class="token number">8</span><span class="token keyword">end module</span> <span class="token keyword">parameter</span><span class="token keyword">module</span> matrix_solve <span class="token keyword">use</span> <span class="token keyword">parameter</span> <span class="token keyword">contains</span> <span class="token comment" spellcheck="true">!上三角方程</span> <span class="token comment" spellcheck="true">! A(n,n): 左矩阵</span> <span class="token comment" spellcheck="true">! B(n): 右矩阵</span> <span class="token comment" spellcheck="true">! X(n): 待求解矩阵</span> <span class="token comment" spellcheck="true">! N: 输入的矩阵维数</span> <span class="token comment" spellcheck="true">!</span> <span class="token keyword">subroutine</span> uptri_equation_solve<span class="token punctuation">(</span>A<span class="token punctuation">,</span>B<span class="token punctuation">,</span>X<span class="token punctuation">,</span>N<span class="token punctuation">)</span> <span class="token keyword">implicit none</span> <span class="token keyword">integer</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">IN</span><span class="token punctuation">)</span> <span class="token operator">::</span> N <span class="token keyword">integer</span> <span class="token operator">::</span> i <span class="token punctuation">,</span>j <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span>dp<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">IN</span><span class="token punctuation">)</span> <span class="token operator">::</span> A<span class="token punctuation">(</span>N<span class="token punctuation">,</span>N<span class="token punctuation">)</span><span class="token punctuation">,</span>B<span class="token punctuation">(</span>N<span class="token punctuation">)</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span>dp<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">OUT</span><span class="token punctuation">)</span> <span class="token operator">::</span> X<span class="token punctuation">(</span>N<span class="token punctuation">)</span> X<span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token operator">=</span>B<span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token operator">/</span>A<span class="token punctuation">(</span>n<span class="token punctuation">,</span>n<span class="token punctuation">)</span> <span class="token keyword">do</span> i<span class="token operator">=</span>n<span class="token number">-1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">-1</span> X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>B<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token keyword">do</span> j<span class="token operator">=</span>i<span class="token number">+1</span><span class="token punctuation">,</span>N X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">-</span>A<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token operator">*</span>X<span class="token punctuation">(</span>j<span class="token punctuation">)</span> <span class="token keyword">enddo</span> X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">/</span>A<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span> <span class="token keyword">enddo</span> <span class="token keyword">end subroutine</span> uptri_equation_solve <span class="token comment" spellcheck="true">!下三角矩阵</span> <span class="token comment" spellcheck="true">! A(n,n): 左矩阵</span> <span class="token comment" spellcheck="true">! B(n): 右矩阵</span> <span class="token comment" spellcheck="true">! X(n): 待求解矩阵</span> <span class="token comment" spellcheck="true">! N: 输入的矩阵维数</span> <span class="token comment" spellcheck="true">!</span> <span class="token keyword">subroutine</span> downtri_equation_solve<span class="token punctuation">(</span>A<span class="token punctuation">,</span>B<span class="token punctuation">,</span>X<span class="token punctuation">,</span>N<span class="token punctuation">)</span> <span class="token keyword">implicit none</span> <span class="token keyword">integer</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">IN</span><span class="token punctuation">)</span> <span class="token operator">::</span> N <span class="token keyword">integer</span> <span class="token operator">::</span> i <span class="token punctuation">,</span>j <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span>dp<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">IN</span><span class="token punctuation">)</span> <span class="token operator">::</span> A<span class="token punctuation">(</span>N<span class="token punctuation">,</span>N<span class="token punctuation">)</span><span class="token punctuation">,</span>B<span class="token punctuation">(</span>N<span class="token punctuation">)</span> <span class="token keyword">real</span><span class="token punctuation">(</span><span class="token keyword">kind</span><span class="token operator">=</span>dp<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token keyword">INTENT</span><span class="token punctuation">(</span><span class="token keyword">OUT</span><span class="token punctuation">)</span> <span class="token operator">::</span> X<span class="token punctuation">(</span>N<span class="token punctuation">)</span> X<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">=</span>B<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span>A<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">do</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">,</span>n X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>B<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token keyword">do</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>i<span class="token number">-1</span> X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">-</span>A<span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token operator">*</span>X<span class="token punctuation">(</span>j<span class="token punctuation">)</span> <span class="token keyword">enddo</span> X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">=</span>X<span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token operator">/</span>A<span class="token punctuation">(</span>i<span class="token punctuation">,</span>i<span class="token punctuation">)</span> <span class="token keyword">enddo</span> <span class="token keyword">end subroutine</span> downtri_equation_solve<span class="token keyword">end module</span></code></pre>]]></content>
<categories>
<category> Fortran学习 </category>
</categories>
<tags>
<tag> Fortran_learn </tag>
</tags>
</entry>
<entry>
<title>AELAS安装教程</title>
<link href="/2020/04/26/aelas-an-zhuang-jiao-cheng/"/>
<url>/2020/04/26/aelas-an-zhuang-jiao-cheng/</url>
<content type="html"><![CDATA[<h2 id="AELAS安装教程"><a href="#AELAS安装教程" class="headerlink" title="AELAS安装教程"></a><strong>AELAS安装教程</strong></h2><p>结合VASP使用的弹性常数计算软件</p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>作者网址:<a href="https://sites.google.com/site/zrfbuaa/softwares/aelas" target="_blank" rel="noopener">https://sites.google.com/site/zrfbuaa/softwares/aelas</a> </p><p>注:可能要翻墙才行</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压文件</p><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -zxvf AELAS-1.0.0.tar.gz</code></pre><p>2 安装spglib库<br>进入 AELAS里的 spglib文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#在linux终端操作,一步一步运行</span><span class="token function">cd</span> AELAS-1.0.0<span class="token function">cd</span> spglib-1.9.9<span class="token function">mkdir</span> _build<span class="token function">cd</span> _buildcmake <span class="token punctuation">..</span><span class="token function">make</span><span class="token function">make</span> <span class="token function">install</span><span class="token function">cd</span> <span class="token punctuation">..</span>/<span class="token punctuation">..</span></code></pre><p>3 安装AELAS</p><p>进入 AELAS里的 src文件夹,注意 makefile文件里默认的是ifort编译器。</p><pre class=" language-bash"><code class="language-bash"><span class="token function">cd</span> ./src<span class="token function">make</span><span class="token comment" spellcheck="true">#会在AELAS/bin文件里生成可执行文件AELAS</span></code></pre><p>4 添加环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc <span class="token comment" spellcheck="true">#打开后按键盘上的 i 进入编辑模式</span><span class="token comment" spellcheck="true">#添加下列命令到bashrc中</span><span class="token function">export</span> PATH<span class="token operator">=</span>/dir/bin:<span class="token variable">$PATH</span> <span class="token comment" spellcheck="true">#dir:AELAS安装路径</span><span class="token comment" spellcheck="true">#添加完后,输入 :wq ,退出回到终端</span><span class="token function">source</span> ~/.bashrc</code></pre><h3 id="运行命令"><a href="#运行命令" class="headerlink" title="运行命令"></a>运行命令</h3><pre class=" language-bash"><code class="language-bash">AELAS</code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>晶胞转换</title>
<link href="/2020/04/25/jing-bao-zhuan-huan/"/>
<url>/2020/04/25/jing-bao-zhuan-huan/</url>
<content type="html"><![CDATA[<h2 id="使用spglib将原胞的POSCAR重整为惯用晶胞的POSCAR的练习"><a href="#使用spglib将原胞的POSCAR重整为惯用晶胞的POSCAR的练习" class="headerlink" title="使用spglib将原胞的POSCAR重整为惯用晶胞的POSCAR的练习"></a><strong>使用spglib将原胞的POSCAR重整为惯用晶胞的POSCAR的练习</strong></h2><p>默认POSCAR的原子坐标是分数坐标形式,后续慢慢学习如何转化坐标和将惯用晶胞转为原胞。</p><p>需要的三个python脚本</p><pre class=" language-txt"><code class="language-txt">read_poscar.pyreposcar.pyrun.py</code></pre><p>read_poscar.py</p><pre class=" language-python"><code class="language-python"><span class="token keyword">import</span> spglib<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np<span class="token keyword">import</span> os<span class="token keyword">import</span> linecache<span class="token keyword">class</span> <span class="token class-name">read_poscar</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span> self<span class="token punctuation">,</span> struct<span class="token operator">=</span>None<span class="token punctuation">,</span> pos_name<span class="token operator">=</span>None<span class="token punctuation">,</span> lattice_index<span class="token operator">=</span>None<span class="token punctuation">,</span> lat<span class="token operator">=</span>None<span class="token punctuation">,</span> lat_recell<span class="token operator">=</span>None<span class="token punctuation">,</span> atomname<span class="token operator">=</span>None<span class="token punctuation">,</span> atomnum<span class="token operator">=</span>None<span class="token punctuation">,</span> postype<span class="token operator">=</span>None<span class="token punctuation">,</span> pos<span class="token operator">=</span>None<span class="token punctuation">,</span> spg_number<span class="token operator">=</span>None<span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">:</span> self<span class="token punctuation">.</span>struct <span class="token operator">=</span> linecache<span class="token punctuation">.</span>getlines<span class="token punctuation">(</span><span class="token string">"POSCAR"</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># read POSCAR to get some paramatrics: sys_name; lattice; atom_name; atom_number; atom_position</span> <span class="token comment" spellcheck="true"># and get spacegroup_number</span> poscar <span class="token operator">=</span> <span class="token punctuation">[</span>line<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> line <span class="token keyword">in</span> self<span class="token punctuation">.</span>struct<span class="token punctuation">]</span> num <span class="token operator">=</span> len<span class="token punctuation">(</span>poscar<span class="token punctuation">)</span> self<span class="token punctuation">.</span>pos_name <span class="token operator">=</span> poscar<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>lat_index <span class="token operator">=</span> poscar<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>lattice_index <span class="token operator">=</span> float<span class="token punctuation">(</span>self<span class="token punctuation">.</span>lat_index<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># matrics of lattice vector</span> lat_vector <span class="token operator">=</span> np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> index <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> latt <span class="token keyword">in</span> poscar<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">:</span> latt <span class="token operator">=</span> latt<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> lat_vector<span class="token punctuation">[</span>index<span class="token punctuation">,</span> <span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token operator">=</span> latt<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span><span class="token number">3</span><span class="token punctuation">]</span> index <span class="token operator">+=</span> <span class="token number">1</span> self<span class="token punctuation">.</span>lattice <span class="token operator">=</span> lat_vector self<span class="token punctuation">.</span>atomname <span class="token operator">=</span> poscar<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>atomnum <span class="token operator">=</span> poscar<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>postype <span class="token operator">=</span> poscar<span class="token punctuation">[</span><span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> atom_len<span class="token operator">=</span>len<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomname<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># matrics of atom position</span> i <span class="token operator">=</span> num <span class="token operator">-</span> <span class="token number">8</span> position_vector <span class="token operator">=</span> np<span class="token punctuation">.</span>zeros<span class="token punctuation">(</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> index <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">for</span> poss <span class="token keyword">in</span> poscar<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">:</span>num<span class="token punctuation">]</span><span class="token punctuation">:</span> poss <span class="token operator">=</span> poss<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#position_vector[index, 0:3] = poss[0:3]</span> position_vector<span class="token punctuation">[</span>index<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> poss<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> position_vector<span class="token punctuation">[</span>index<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> poss<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> position_vector<span class="token punctuation">[</span>index<span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=</span> poss<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> index <span class="token operator">+=</span> <span class="token number">1</span> self<span class="token punctuation">.</span>lat <span class="token operator">=</span> lat_vector <span class="token operator">*</span> self<span class="token punctuation">.</span>lattice_index self<span class="token punctuation">.</span>pos <span class="token operator">=</span> position_vector atom_numbers <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token punctuation">(</span>int<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomnum<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token comment" spellcheck="true">#+int(self.atomnum[1]))</span> cell <span class="token operator">=</span> <span class="token punctuation">(</span>self<span class="token punctuation">.</span>lat<span class="token punctuation">,</span> self<span class="token punctuation">.</span>pos<span class="token punctuation">,</span> atom_numbers<span class="token punctuation">)</span> database <span class="token operator">=</span> spglib<span class="token punctuation">.</span>get_symmetry_dataset<span class="token punctuation">(</span> cell<span class="token punctuation">,</span> symprec<span class="token operator">=</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">3</span> <span class="token punctuation">)</span> self<span class="token punctuation">.</span>spg_number <span class="token operator">=</span> database<span class="token punctuation">[</span><span class="token string">"number"</span><span class="token punctuation">]</span> <span class="token keyword">def</span> <span class="token function">system_name</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>pos_name <span class="token keyword">def</span> <span class="token function">latt_index</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>lattice_index <span class="token keyword">def</span> <span class="token function">latti</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>lattice <span class="token keyword">def</span> <span class="token function">atom_name</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>atomname <span class="token keyword">def</span> <span class="token function">atom_number</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>atomnum <span class="token keyword">def</span> <span class="token function">position_type</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>postype <span class="token keyword">def</span> <span class="token function">positions</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>pos <span class="token keyword">def</span> <span class="token function">spacegroup_num</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>spg_number</code></pre><p>reposcar.py</p><pre class=" language-python"><code class="language-python"><span class="token keyword">import</span> os<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np<span class="token keyword">import</span> read_poscar <span class="token keyword">as</span> readpos<span class="token keyword">import</span> spglib<span class="token keyword">class</span> <span class="token class-name">recell</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span> self<span class="token punctuation">,</span> spg_num<span class="token operator">=</span>None<span class="token punctuation">,</span> lattindex<span class="token operator">=</span>None<span class="token punctuation">,</span> latt<span class="token operator">=</span>None<span class="token punctuation">,</span> atomname<span class="token operator">=</span>None<span class="token punctuation">,</span> atomnum<span class="token operator">=</span>None<span class="token punctuation">,</span> postype<span class="token operator">=</span>None<span class="token punctuation">,</span> position<span class="token operator">=</span>None<span class="token punctuation">,</span> cell_lattice<span class="token operator">=</span>None<span class="token punctuation">,</span> cell_position<span class="token operator">=</span>None<span class="token punctuation">,</span> cell_atomnum<span class="token operator">=</span>None<span class="token punctuation">,</span> to_pricell <span class="token operator">=</span> None <span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment" spellcheck="true"># read the origmitive cell</span> self<span class="token punctuation">.</span>spg_num <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>spacegroup_num<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>lattindex <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>latt_index<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>latt <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>latti<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>atomname <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>atom_name<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>atomnum <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>atom_number<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>postype <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>position_type<span class="token punctuation">(</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>position <span class="token operator">=</span> readpos<span class="token punctuation">.</span>read_poscar<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>positions<span class="token punctuation">(</span><span class="token punctuation">)</span> orignumbers <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomname<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> int<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomnum<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> orignumbers<span class="token punctuation">.</span>append<span class="token punctuation">(</span>i <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> origlattice <span class="token operator">=</span> self<span class="token punctuation">.</span>latt <span class="token operator">*</span> self<span class="token punctuation">.</span>lattindex origpositon <span class="token operator">=</span> self<span class="token punctuation">.</span>position origcell <span class="token operator">=</span> <span class="token punctuation">(</span>origlattice<span class="token punctuation">,</span> origpositon<span class="token punctuation">,</span> orignumbers<span class="token punctuation">)</span> <span class="token keyword">if</span><span class="token punctuation">(</span>to_pricell<span class="token operator">==</span><span class="token boolean">False</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment" spellcheck="true"># refine cell</span> self<span class="token punctuation">.</span>cell_lattice<span class="token punctuation">,</span> re_position<span class="token punctuation">,</span> re_numbers <span class="token operator">=</span> spglib<span class="token punctuation">.</span>standardize_cell<span class="token punctuation">(</span> cell<span class="token operator">=</span>origcell<span class="token punctuation">,</span> symprec<span class="token operator">=</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> to_primitive<span class="token operator">=</span><span class="token boolean">False</span> <span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> self<span class="token punctuation">.</span>cell_lattice<span class="token punctuation">,</span> re_position<span class="token punctuation">,</span> re_numbers <span class="token operator">=</span> spglib<span class="token punctuation">.</span>standardize_cell<span class="token punctuation">(</span> cell<span class="token operator">=</span>origcell<span class="token punctuation">,</span> symprec<span class="token operator">=</span><span class="token number">1e</span><span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">,</span> to_primitive<span class="token operator">=</span><span class="token boolean">True</span> <span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># 主要对坐标进行重新排序</span> re_position_list <span class="token operator">=</span> list<span class="token punctuation">(</span>re_position<span class="token punctuation">)</span> zipped <span class="token operator">=</span> list<span class="token punctuation">(</span>zip<span class="token punctuation">(</span>re_numbers<span class="token punctuation">,</span> re_position_list<span class="token punctuation">)</span><span class="token punctuation">)</span> zipsorted <span class="token operator">=</span> sorted<span class="token punctuation">(</span>zipped<span class="token punctuation">,</span> key<span class="token operator">=</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> <span class="token punctuation">(</span>x<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> re_numbers_sort<span class="token punctuation">,</span> re_positon_sort <span class="token operator">=</span> zip<span class="token punctuation">(</span><span class="token operator">*</span>zipsorted<span class="token punctuation">)</span> self<span class="token punctuation">.</span>cell_position <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>re_positon_sort<span class="token punctuation">)</span> self<span class="token punctuation">.</span>cell_atomnum <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomnum<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> num <span class="token operator">=</span> int<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomnum<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>len<span class="token punctuation">(</span>re_numbers_sort<span class="token punctuation">)</span> <span class="token operator">/</span> len<span class="token punctuation">(</span>orignumbers<span class="token punctuation">)</span><span class="token punctuation">)</span> self<span class="token punctuation">.</span>cell_atomnum<span class="token punctuation">.</span>append<span class="token punctuation">(</span>num<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># write the refine cell</span> writepos <span class="token operator">=</span> open<span class="token punctuation">(</span><span class="token string">"RECELL"</span><span class="token punctuation">,</span> mode<span class="token operator">=</span><span class="token string">"w"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"recell_poscar"</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"1.0"</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">for</span> m <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_lattice<span class="token punctuation">[</span>m<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">" "</span><span class="token punctuation">,</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_lattice<span class="token punctuation">[</span>m<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">" "</span><span class="token punctuation">,</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_lattice<span class="token punctuation">[</span>m<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token keyword">for</span> j <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomname<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomname<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">,</span> end<span class="token operator">=</span><span class="token string">" "</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>end<span class="token operator">=</span><span class="token string">"\n"</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">for</span> l <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> len<span class="token punctuation">(</span>self<span class="token punctuation">.</span>atomname<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>int<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_atomnum<span class="token punctuation">[</span>l<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> end<span class="token operator">=</span><span class="token string">" "</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>end<span class="token operator">=</span><span class="token string">"\n"</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span>postype<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">)</span> <span class="token keyword">for</span> n <span class="token keyword">in</span> np<span class="token punctuation">.</span>arange<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> self<span class="token punctuation">.</span>cell_position<span class="token punctuation">.</span>shape<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_position<span class="token punctuation">[</span>n<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">" "</span><span class="token punctuation">,</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_position<span class="token punctuation">[</span>n<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">" "</span><span class="token punctuation">,</span> format<span class="token punctuation">(</span>self<span class="token punctuation">.</span>cell_position<span class="token punctuation">[</span>n<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">".10f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> file<span class="token operator">=</span>writepos<span class="token punctuation">,</span> <span class="token punctuation">)</span> writepos<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">def</span> <span class="token function">latti</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>cell_lattice <span class="token keyword">def</span> <span class="token function">atom_number</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>cell_atomnum <span class="token keyword">def</span> <span class="token function">positions</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> self<span class="token punctuation">.</span>cell_position</code></pre><p>run.py</p><pre class=" language-python"><code class="language-python"><span class="token keyword">import</span> reposcarreposcar<span class="token punctuation">.</span>recell<span class="token punctuation">(</span>to_pricell<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#转化为惯用晶胞</span>reposcar<span class="token punctuation">.</span>recell<span class="token punctuation">(</span>to_pricell<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#转化为原胞</span></code></pre><p>例子:</p><p>铀</p><p>原胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">Primitive Cell 1.000000 1.40175686596237 -2.92091081962523 0.00000000000000 1.40175686596237 2.92091081962523 0.00000000000000 0.00000000000000 0.00000000000000 4.90466659076150 U 2DIRECT 0.9016657719149295 0.0983342280850705 0.7500000000000000 0.0983342280850705 0.9016657719149295 0.2500000000000000 </code></pre><p>输出晶胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">recell_poscar1.02.8035137319 0.0000000000 0.00000000000.0000000000 5.8418216393 0.00000000000.0000000000 0.0000000000 4.9046665908U 4 DIRECT0.0000000000 0.0983342281 0.25000000000.5000000000 0.4016657719 0.75000000000.5000000000 0.5983342281 0.25000000000.0000000000 0.9016657719 0.7500000000</code></pre><p>ThO2</p><p>原胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">ThO2 1.00000000000000 0.0000000000000000 2.8080796680000000 2.8080796680000000 2.8080796680000000 0.0000000000000000 2.8080796680000000 2.8080796680000000 2.8080796680000000 0.0000000000000000 Th O 1 2Direct 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000 0.7500000000000000 0.7500000000000000 0.7500000000000000</code></pre><p>输出晶胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">recell_poscar1.05.6161593360 0.0000000000 0.00000000000.0000000000 5.6161593360 0.00000000000.0000000000 0.0000000000 5.6161593360Th O 4 8 Direct0.0000000000 0.0000000000 0.00000000000.0000000000 0.5000000000 0.50000000000.5000000000 0.0000000000 0.50000000000.5000000000 0.5000000000 0.00000000000.2500000000 0.7500000000 0.75000000000.2500000000 0.2500000000 0.75000000000.2500000000 0.2500000000 0.25000000000.2500000000 0.7500000000 0.25000000000.7500000000 0.7500000000 0.25000000000.7500000000 0.2500000000 0.25000000000.7500000000 0.2500000000 0.75000000000.7500000000 0.7500000000 0.7500000000</code></pre><hr><p>铀转化为原胞</p><p>输入晶胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">recell_poscar1.02.8035137319 0.0000000000 0.00000000000.0000000000 5.8418216393 0.00000000000.0000000000 0.0000000000 4.9046665908U 4 DIRECT0.0000000000 0.0983342281 0.25000000000.5000000000 0.4016657719 0.75000000000.5000000000 0.5983342281 0.25000000000.0000000000 0.9016657719 0.7500000000</code></pre><p>输出原胞</p><pre class=" language-POSCAR"><code class="language-POSCAR">recell_poscar1.01.4017568659 -2.9209108196 0.00000000001.4017568659 2.9209108196 0.00000000000.0000000000 0.0000000000 4.9046665908U 2 DIRECT0.9016657719 0.0983342281 0.25000000000.0983342281 0.9016657719 0.7500000000</code></pre>]]></content>
<categories>
<category> 计算脚本练习 </category>
</categories>
<tags>
<tag> VASP脚本 </tag>
</tags>
</entry>
<entry>
<title>Fortran运算符</title>
<link href="/2020/04/22/fortran-yun-suan-fu-zong-jie/"/>
<url>/2020/04/22/fortran-yun-suan-fu-zong-jie/</url>
<content type="html"><![CDATA[<h2 id="Fortran运算符总结"><a href="#Fortran运算符总结" class="headerlink" title="Fortran运算符总结"></a><strong>Fortran运算符总结</strong></h2><p><strong>关系运算符</strong></p><table><thead><tr><th align="center">Fortran77</th><th align="center">Fortran95</th><th align="center">意 义</th></tr></thead><tbody><tr><td align="center">.EQ.</td><td align="center">==</td><td align="center">等于</td></tr><tr><td align="center">.NE.</td><td align="center">/=</td><td align="center">不等于</td></tr><tr><td align="center">.GT.</td><td align="center">></td><td align="center">大于</td></tr><tr><td align="center">.GE.</td><td align="center">>=</td><td align="center">大于等于</td></tr><tr><td align="center">.LT.</td><td align="center"><</td><td align="center">小于</td></tr><tr><td align="center">.LE.</td><td align="center"><=</td><td align="center">小于等于</td></tr></tbody></table><p><strong>注:建议使用新版的运算符,方便代码阅读</strong></p><hr><p><strong>组合逻辑运算符</strong></p><table><thead><tr><th align="center">运算符</th><th align="center">意 义</th></tr></thead><tbody><tr><td align="center">.AND.</td><td align="center">逻辑与</td></tr><tr><td align="center">.OR.</td><td align="center">逻辑或</td></tr><tr><td align="center">.EQV.</td><td align="center">逻辑等值</td></tr><tr><td align="center">.NEQV.</td><td align="center">逻辑非等值</td></tr><tr><td align="center">.NOT.</td><td align="center">逻辑非</td></tr></tbody></table><table><thead><tr><th align="center">L1</th><th align="center">.NOT.L1</th></tr></thead><tbody><tr><td align="center">.FALSE.</td><td align="center">.TRUE.</td></tr><tr><td align="center">.TRUE.</td><td align="center">.FALSE.</td></tr></tbody></table>]]></content>
<categories>
<category> Fortran学习 </category>
</categories>
<tags>
<tag> Fortran_learn </tag>
</tags>
</entry>
<entry>
<title>能带计算</title>
<link href="/2020/04/19/neng-dai-tu-de-ji-suan/"/>
<url>/2020/04/19/neng-dai-tu-de-ji-suan/</url>
<content type="html"><![CDATA[<h2 id="电子结构的计算流程"><a href="#电子结构的计算流程" class="headerlink" title="电子结构的计算流程"></a><strong>电子结构的计算流程</strong></h2><p>高对称点生成和后期处理使用vaspkit-1.1。</p><p><strong>注:该方法只针对原胞。</strong></p><h3 id="PBE能带计算流程"><a href="#PBE能带计算流程" class="headerlink" title="PBE能带计算流程"></a><strong>PBE能带计算流程</strong></h3><p>必要的文件</p><pre class=" language-bash"><code class="language-bash">INCAR-scfINCAR-bandKPOINTSPOTCARPOSCAR <span class="token comment" spellcheck="true">#优化后的原胞</span>run_banddos.sh</code></pre><p>run_banddos.sh的脚本设置如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#!/bin/bash</span><span class="token comment" spellcheck="true">#优化后的初始POSCAR</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Primitive Cell 1.000000 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 Si 2DIRECT 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M12 12 120 0 0<span class="token operator">!</span><span class="token comment" spellcheck="true">#基于seek-path自动生成高对称点</span>vaspkit -task 303<span class="token comment" spellcheck="true">#得到KPATH.in 和 HIGH_SYMMETRY_POINTS 可以自行修改</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-scf <span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8EDIFFG<span class="token operator">=</span>-0.001ISMEAR<span class="token operator">=</span>0SIGMA <span class="token operator">=</span> 0.05POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true"># Write flags</span>LWAVE<span class="token operator">=</span>.TRUE.LCHARG<span class="token operator">=</span>.TRUE.<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-band <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 1 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 11 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># NELM = 60 (Max electronic SCF steps) </span> <span class="token comment" spellcheck="true"># NELMIN = 4 (Min electronic SCF steps)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span> LORBIT<span class="token operator">=</span>11 <span class="token punctuation">(</span>plot projection band need to set<span class="token punctuation">)</span> NEDOS <span class="token operator">=</span> 2000Ionic Relaxation <span class="token comment" spellcheck="true"># NELMIN = 6 (Min electronic SCF steps) </span> NSW <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> -1 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#ISYM = 0 (Symmetry: 0=none; 2=GGA; 3=hybrids)</span><span class="token operator">!</span><span class="token comment" spellcheck="true">#自洽计算</span><span class="token function">cp</span> INCAR-scf INCAR<span class="token keyword">echo</span> <span class="token string">"scf"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#更换KPOINTS文件</span><span class="token function">cp</span> KPATH.in KPOINTS<span class="token function">cp</span> INCAR-band INCAR<span class="token keyword">echo</span> <span class="token string">"band"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token comment" spellcheck="true">#处理能带数据</span>vaspkit -task n <span class="token comment" spellcheck="true">#根据下面说明自行选择</span><span class="token comment" spellcheck="true">### 211) Band-Structure</span><span class="token comment" spellcheck="true">### 212) Projected Band-Structure for Selected Atom</span><span class="token comment" spellcheck="true">### 213) Projected Band-Structure for Each Element</span><span class="token comment" spellcheck="true">### 214) The Sum of Projected Band-Structure for Selected Atoms</span><span class="token comment" spellcheck="true">### 215) Projected Band-Structure by Element Weight</span><span class="token comment" spellcheck="true">###</span></code></pre><p>运行后得到包含能带数据的dat文件</p><p>Si的能带图:</p><img src="/img/Si_pbeband.png" width = "60%" height = "60%" div align=center/><br /><p>Si的轨道投影能带:</p><img src="/img/Si_projband.png" width = "60%" height = "60%" div align=center/><br /><br /><hr><h3 id="杂化轨道能带计算流程"><a href="#杂化轨道能带计算流程" class="headerlink" title="杂化轨道能带计算流程"></a><strong>杂化轨道能带计算流程</strong></h3><p>必要的文件</p><pre class=" language-bash"><code class="language-bash">INCAR-scfINCAR-hseKPOINTSPOTCARPOSCAR <span class="token comment" spellcheck="true">#优化后的原胞</span>run_hseband.sh</code></pre><p>run_hseband.sh脚本设置如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true">#优化后的初始POSCAR</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Primitive Cell 1.000000 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 Si 2DIRECT 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000<span class="token operator">!</span><span class="token comment" spellcheck="true">#基于seek-path自动生成高对称点</span>vaspkit -task 303<span class="token comment" spellcheck="true">#得到KPATH.in 和 HIGH_SYMMETRY_POINTS 可以自行修改</span><span class="token comment" spellcheck="true">#由于HSE计算量很大,对于点的数量一定要适当</span>vaspkit -task 251<span class="token comment" spellcheck="true">#生成包含SCF的k-mesh和权重为0的用于HSE-band的k-path的KPOINTS文件</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-scf <span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8EDIFFG<span class="token operator">=</span>-0.001ISMEAR<span class="token operator">=</span>0SIGMA <span class="token operator">=</span> 0.05POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true"># Write flags</span>LWAVE<span class="token operator">=</span>.TRUE.LCHARG<span class="token operator">=</span>.TRUE.<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-hse <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 1 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 1 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># NELM = 60 (Max electronic SCF steps) </span> <span class="token comment" spellcheck="true"># NELMIN = 4 (Min electronic SCF steps)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span> LORBIT<span class="token operator">=</span>11 NEDOS <span class="token operator">=</span> 5000 Ionic Relaxation <span class="token comment" spellcheck="true"># NELMIN = 6 (Min electronic SCF steps) </span> NSW <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> -1 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> ISYM <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Symmetry: 0<span class="token operator">=</span>none<span class="token punctuation">;</span> 2<span class="token operator">=</span>GGA<span class="token punctuation">;</span> 3<span class="token operator">=</span>hybrids<span class="token punctuation">)</span><span class="token comment" spellcheck="true">#HSE06 Calculation</span> LHFCALC<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Activate HF<span class="token punctuation">)</span> AEXX <span class="token operator">=</span> 0.25 <span class="token punctuation">(</span>25% HF exact exchange, adjusted this value to reproduce experimental band gap<span class="token punctuation">)</span> HFSCREEN<span class="token operator">=</span> 0.2 <span class="token punctuation">(</span>Switch to screened exchange<span class="token punctuation">;</span> e.g. HSE06<span class="token punctuation">)</span> ALGO <span class="token operator">=</span> Damped <span class="token punctuation">(</span>Electronic Minimisation Algorithm<span class="token punctuation">;</span> ALGO<span class="token operator">=</span>58<span class="token punctuation">)</span> TIME <span class="token operator">=</span> 0.4 <span class="token punctuation">(</span>Timestep <span class="token keyword">for</span> IALGO5X<span class="token punctuation">)</span> PRECFOCK<span class="token operator">=</span> Normal <span class="token punctuation">(</span>HF FFT grid<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># NKRED = 2 (Reduce k-grid-even only, see also NKREDX, NKREDY and NKREDZ)</span> <span class="token comment" spellcheck="true"># HFLMAX = 4 (HF cut-off: 4d, 6f)</span> <span class="token comment" spellcheck="true"># LDIAG = .TRUE. (Diagnolise Eigenvalues) </span><span class="token operator">!</span><span class="token comment" spellcheck="true">#SCF计算,可省略,主要得到WAVECAR波函数,可加速HSE计算速度</span><span class="token function">cp</span> INCAR-scf INCAR<span class="token keyword">echo</span> <span class="token string">"scf"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#HSE计算</span><span class="token function">cp</span> INCAR-hse INCAR<span class="token keyword">echo</span> <span class="token string">"hse"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_stdvaspkit -task n <span class="token comment" spellcheck="true">#根据下述说明自行选择</span><span class="token comment" spellcheck="true">## 250) Generate KPOINTS Including Irreducible Kmesh and Band Edges </span><span class="token comment" spellcheck="true">## 251) Generate KPOINTS File for Hybrid Band-Structure Calculation </span><span class="token comment" spellcheck="true">## 252) Get Band-Structure for Hybrid-DFT Calculation </span><span class="token comment" spellcheck="true">## 253) Get Projected Band-Structure for Selected Atoms </span><span class="token comment" spellcheck="true">## 254) Get Projected Band-Structure for Each ELement </span><span class="token comment" spellcheck="true">## 255) Get the Sum of Projected Band-Structure for Selected Atoms </span><span class="token comment" spellcheck="true">## 256) Projected Band-Structure by Element Weight </span></code></pre><br /><hr><h3 id="PBE-HSE-SOC计算能带"><a href="#PBE-HSE-SOC计算能带" class="headerlink" title="PBE(HSE)+SOC计算能带"></a><strong>PBE(HSE)+SOC计算能带</strong></h3><p>参照 PBE(HSE)计算能带。</p><p>在INCAR中添加如下参数:</p><pre class=" language-txt"><code class="language-txt">Spin-Orbit Coupling Calculation ISPIN = 2 NELMIN = 6 (Min electronic SCF steps) LSORBIT = .TRUE. (Activate SOC) GGA_COMPAT = .FALSE. (Apply spherical cutoff on gradient field) # VOSKOWN = 1 (Enhances the magnetic moments and the magnetic energies) LMAXMIX = 2 (For d elements increase LMAXMIX to 4, f: LMAXMIX = 6) SAXIS = 0 0 1 (Direction of the magnetic field) # MAGMOM = 0 0 3 (Set this parameters manually, Local magnetic moment parallel to SAXIS, 3*NIONS*1.0 for non-collinear magnetic systems) NBANDS = 32 (Set this parameters manually, 2 * number of bands of collinear-run)</code></pre><p>注:NBAND最好为PBE(HSE)中能带数的整数倍。HSE+SOC计算流程未测试,不知道会不会成功。下面是我当初计算2D-Tl2O的HSE+SOC能带的流程,主要给出INCAR的设置。</p><p>第一步:SCF+SOC计算</p><pre class=" language-txt"><code class="language-txt">Global Parameters ISTART = 0 (Read existing wavefunction; if there) ICHARG = 2 (Non-self-consistent: GGA/LDA band structures) LREAL = F (Projection operators: automatic) ENCUT = 500 (Cut-off energy for plane wave basis set, in eV) PREC = Accurate (Precision level) LWAVE = .TRUE. (Write WAVECAR or not) LCHARG = .TRUE. (Write CHGCAR or not) ADDGRID= .TRUE. (Increase grid; helps GGA convergence) # LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not) # LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not) # NELECT = (No. of electrons: charged cells; be careful) # LPLANE = .TRUE. (Real space distribution; supercells) # NPAR = 4 (Max is no. nodes; don't set for hybrids)Electronic Relaxation ISMEAR = 0 (Gaussian smearing; metals:1) SIGMA = 0.05 (Smearing value in eV; metals:0.2) # NELM = 60 (Max electronic SCF steps) # NELMIN = 4 (Min electronic SCF steps) EDIFF = 1E-06 (SCF energy convergence; in eV) GGA = PE (PBEsol exchange-correlation)Ionic Relaxation # NELMIN = 6 (Min electronic SCF steps) NSW = 0 (Max electronic SCF steps) IBRION = -1 (Algorithm: 0-MD; 1-Quasi-New; 2-CG) ISIF = 2 (Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions) EDIFFG = -0.01 (Ionic convergence; eV/AA) ISYM = 0 (Symmetry: 0=none; 2=GGA; 3=hybrids)Spin-Orbit Coupling Calculation ISPIN = 2 NELMIN = 6 (Min electronic SCF steps) LSORBIT = .TRUE. (Activate SOC) GGA_COMPAT = .FALSE. (Apply spherical cutoff on gradient field) # VOSKOWN = 1 (Enhances the magnetic moments and the magnetic energies) LMAXMIX = 2 (For d elements increase LMAXMIX to 4, f: LMAXMIX = 6) SAXIS = 0 0 1 (Direction of the magnetic field) # MAGMOM = 0 0 3 (Set this parameters manually, Local magnetic moment parallel to SAXIS, 3*NIONS*1.0 for non-collinear magnetic systems) # NBANDS = 32 (Set this parameters manually, 2 * number of bands of collinear-run) </code></pre><p>得到IBZKPT的K点<br>能带计算K点的生成参照HSE计算</p><p>第二步:打开杂化HSE</p><pre class=" language-txt"><code class="language-txt">Global Parameters ISTART = 1 (Read existing wavefunction; if there) ICHARG = 2 (Non-self-consistent: GGA/LDA band structures) LREAL = F (Projection operators: automatic) ENCUT = 500 (Cut-off energy for plane wave basis set, in eV) PREC = Accurate (Precision level) LWAVE = .TRUE. (Write WAVECAR or not) LCHARG = .TRUE. (Write CHGCAR or not) ADDGRID= .TRUE. (Increase grid; helps GGA convergence) # LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not) # LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not) # NELECT = (No. of electrons: charged cells; be careful) # LPLANE = .TRUE. (Real space distribution; supercells) # NPAR = 4 (Max is no. nodes; don't set for hybrids)Electronic Relaxation ISMEAR = 0 (Gaussian smearing; metals:1) SIGMA = 0.15 (Smearing value in eV; metals:0.2) # NELM = 60 (Max electronic SCF steps) # NELMIN = 4 (Min electronic SCF steps) EDIFF = 1E-06 (SCF energy convergence; in eV) GGA = PE (PBEsol exchange-correlation)Ionic Relaxation # NELMIN = 6 (Min electronic SCF steps) NSW = 0 (Max electronic SCF steps) IBRION = -1 (Algorithm: 0-MD; 1-Quasi-New; 2-CG) ISIF = 2 (Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions) EDIFFG = -0.01 (Ionic convergence; eV/AA) ISYM = 0 (Symmetry: 0=none; 2=GGA; 3=hybrids)Spin-Orbit Coupling Calculation ISPIN = 2 NELMIN = 6 (Min electronic SCF steps) LSORBIT = .TRUE. (Activate SOC) GGA_COMPAT = .FALSE. (Apply spherical cutoff on gradient field) # VOSKOWN = 1 (Enhances the magnetic moments and the magnetic energies) LMAXMIX = 2 (For d elements increase LMAXMIX to 4, f: LMAXMIX = 6) SAXIS = 0 0 1 (Direction of the magnetic field) # MAGMOM = 0 0 3 (Set this parameters manually, Local magnetic moment parallel to SAXIS, 3*NIONS*1.0 for non-collinear magnetic systems) NBANDS = 32 (Set this parameters manually, 2 * number of bands of collinear-run)HSE06 Calculation LHFCALC= .TRUE. (Activate HF) AEXX = 0.25 (25% HF exact exchange, adjusted this value to reproduce experimental band gap) HFSCREEN= 0.2 (Switch to screened exchange; e.g. HSE06) ALGO = Damped (Electronic Minimisation Algorithm; ALGO=58) TIME = 0.4 (Timestep for IALGO5X) PRECFOCK= Normal (HF FFT grid) # NKRED = 2 (Reduce k-grid-even only, see also NKREDX, NKREDY and NKREDZ) # HFLMAX = 4 (HF cut-off: 4d, 6f) # LDIAG = .TRUE. (Diagnolise Eigenvalues) </code></pre><p>注:选择读取上一步的WAVECAR可以加速这一步的计算,如果报错,可以不读取WAVECAR直接计算。</p><hr><hr><h3 id="态密度计算"><a href="#态密度计算" class="headerlink" title="态密度计算"></a><strong>态密度计算</strong></h3><p><strong>注:与能带计算差不多,只是不需要修改K点。也可以直接用能带计算中得到的态密度。</strong></p><p>必要的文件:</p><pre class=" language-txt"><code class="language-txt">INCAR-scfINCAR-dosKPOINTSPOTCARrun_dos.sh</code></pre><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Primitive Cell 1.000000 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 2.73423319845426 2.73423319845426 2.73423319845426 0.00000000000000 Si 2DIRECT 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M21 21 210 0 0<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-scf <span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8EDIFFG<span class="token operator">=</span>-0.001ISMEAR<span class="token operator">=</span>0SIGMA <span class="token operator">=</span> 0.05POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true"># Write flags</span>LWAVE<span class="token operator">=</span>.TRUE.LCHARG<span class="token operator">=</span>.TRUE.<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR-dos <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 1 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 11 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># NELM = 60 (Max electronic SCF steps) </span> <span class="token comment" spellcheck="true"># NELMIN = 4 (Min electronic SCF steps)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span> LORBIT<span class="token operator">=</span>11 <span class="token punctuation">(</span>plot projection band need to set<span class="token punctuation">)</span> NEDOS <span class="token operator">=</span> 2000Ionic Relaxation <span class="token comment" spellcheck="true"># NELMIN = 6 (Min electronic SCF steps) </span> NSW <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> -1 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#ISYM = 0 (Symmetry: 0=none; 2=GGA; 3=hybrids)</span><span class="token operator">!</span><span class="token comment" spellcheck="true">#自洽计算</span><span class="token function">cp</span> INCAR-scf INCAR<span class="token keyword">echo</span> <span class="token string">"scf"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#更换KPOINTS文件</span><span class="token function">cp</span> INCAR-dos INCAR<span class="token keyword">echo</span> <span class="token string">"dos"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_stdvaspkit -task n <span class="token comment" spellcheck="true">#根据需要选择下面的参数,参照手册说明,有些需要给出元素,个数</span><span class="token comment" spellcheck="true">### 111) Total Density-of-States </span><span class="token comment" spellcheck="true">### 112) Projected Density-of-States for Selected Atoms </span><span class="token comment" spellcheck="true">### 113) Projected Density-of-States for Each Element </span><span class="token comment" spellcheck="true">### 114) The Sum of Projected Density-of-States for Selected Atoms </span><span class="token comment" spellcheck="true">### 115) The Sum of Projected DOS for Selected Atoms and Orbitals </span><span class="token comment" spellcheck="true">### 116) Local Density-of-States for Each Element </span><span class="token comment" spellcheck="true">### 117) Total Density-of-States with Adjustable Smearing Width</span></code></pre><p>Si的band-dos图如下:</p><img src="/img/Si_banddos.png" width = "60%" height = "60%" div align=center/><br /><hr><h3 id="二维材料1T-Tl2O的能带示例"><a href="#二维材料1T-Tl2O的能带示例" class="headerlink" title="二维材料1T-Tl2O的能带示例"></a><strong>二维材料1T-Tl2O的能带示例</strong></h3><p><strong>PBE</strong></p><p>1T-Tl2O的能带态密度:</p><img src="/img/Tl2O_banddos.png" width = "60%" height = "60%" div align=center/><br /><p>1T-Tl2O的投影能带:</p><img src="/img/Tl2O_projband.png" width = "60%" height = "60%" div align=center/><img src="/img/O_projband.png" width = "60%" height = "60%" div align=center/><img src="/img/Tl_projband.png" width = "80%" height = "80%" div align=center/><p><strong>HSE</strong></p><p>1T-Tl2O的能带态密度:</p><img src="/img/Tl2O_hseband.png" width = "60%" height = "60%" div align=center/><br /><p>1T-Tl2O的投影能带:</p><img src="/img/Tl2O_hseprojband.png" width = "60%" height = "60%" div align=center/><img src="/img/O_hseprojband.png" width = "60%" height = "60%" div align=center/><img src="/img/Tl_hseprojband.png" width = "80%" height = "80%" div align=center/><p><strong>HSE+SOC</strong></p><img src="/img/1T.png" width = "60%" height = "60%" div align=center/>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>KPOINTS测试</title>
<link href="/2020/04/18/k-dian-ce-shi/"/>
<url>/2020/04/18/k-dian-ce-shi/</url>
<content type="html"><![CDATA[<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });</script><h1 id="KPOINTS-或-KSPACING-测试"><a href="#KPOINTS-或-KSPACING-测试" class="headerlink" title="KPOINTS 或 KSPACING 测试"></a><strong>KPOINTS 或 KSPACING 测试</strong></h1><p>必要输入文件: </p><pre class=" language-bash"><code class="language-bash">k_test.shPOTCARINCAR和POSCAR可在k_test.sh中设置,也可独立给出</code></pre><p>脚本1(k_test.sh): KPOINTS测试</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true">#生成vasp静态计算的INCAR</span><span class="token function">cat</span> <span class="token operator">></span> INCAR_static <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> -5 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#SIGMA = 0.05 (Smearing value in eV; metals:0.2)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-06 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V,4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> KSPACING <span class="token operator">=</span> 0.10<span class="token operator">!</span><span class="token function">cp</span> INCAR_static INCAR<span class="token comment" spellcheck="true">#产生计算所需POSCAR</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR<span class="token operator"><<</span><span class="token operator">!</span>Si81.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000Si8Direct 0.0000000000 0.0000000000 0.0000000000 0.2500000000 0.7500000000 0.7500000000 0.5000000000 0.0000000000 0.5000000000 0.0000000000 0.5000000000 0.5000000000 0.5000000000 0.5000000000 0.0000000000 0.7500000000 0.2500000000 0.7500000000 0.7500000000 0.7500000000 0.2500000000 0.2500000000 0.2500000000 0.2500000000<span class="token operator">!</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">seq</span> 6 3 15<span class="token variable">)</span></span> <span class="token comment" spellcheck="true">#K点从6-24,步数为3</span><span class="token keyword">do</span><span class="token comment" spellcheck="true">#生成KPOINTS文件,K点类型:Monkhorst-Pack (M) 或者 Gamma (G)</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>Automatic mesh0Monkhorst-Pack<span class="token variable">$i</span> <span class="token variable">$i</span> <span class="token variable">$i</span>0 0 0<span class="token operator">!</span><span class="token keyword">echo</span> <span class="token string">"KPOINTS = <span class="token variable">$i</span>"</span> <span class="token punctuation">;</span> <span class="token function">time</span> mpirun -n 16 vasp_std <span class="token comment" spellcheck="true">#vasp并行运行命令,根据系统自行修改</span><span class="token function">rm</span> KPOINTS<span class="token comment" spellcheck="true">#提取计算得到的能量</span>E<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"TOTEN"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span><span class="token keyword">echo</span> <span class="token variable">$i</span> <span class="token variable">$E</span> <span class="token operator">>></span>kpoints_energy.out<span class="token keyword">done</span></code></pre><p>提交脚本任务运行,成功结束后可以得到输出文件kpoints_enengy.out<br>可以使用OriginPro等画图工具画出kpoints-能量关系</p><p>Si的KPOINTS测试</p><img src="/img/Si_kpoints_test.png" width = "60%" height = "60%" div align=center/><p>根据收敛性,大概选择KPOINTS为$9\times9\times9$<br><br /><br><br /></p><hr><p>脚本2(k_test.sh): KSPACING测试</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true">#产生计算所需POSCAR</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR<span class="token operator"><<</span><span class="token operator">!</span>Si81.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000Si8Direct 0.0000000000 0.0000000000 0.0000000000 0.2500000000 0.7500000000 0.7500000000 0.5000000000 0.0000000000 0.5000000000 0.0000000000 0.5000000000 0.5000000000 0.5000000000 0.5000000000 0.0000000000 0.7500000000 0.2500000000 0.7500000000 0.7500000000 0.7500000000 0.2500000000 0.2500000000 0.2500000000 0.2500000000<span class="token operator">!</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">seq</span> 0.5 -0.05 0.1<span class="token variable">)</span></span> <span class="token comment" spellcheck="true">#K点密度从0.5-0.1,步数为0.05</span><span class="token keyword">do</span><span class="token comment" spellcheck="true">#生成vasp静态计算的INCAR</span><span class="token function">cat</span> <span class="token operator">></span> INCAR_static <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> -5 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#SIGMA = 0.05 (Smearing value in eV; metals:0.2)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-06 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V,4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> KSPACING <span class="token operator">=</span> <span class="token variable">$i</span> KGAMMA <span class="token operator">=</span> .FALSE. <span class="token comment" spellcheck="true">#(true: GAMMA; false: Monkhorst-Pack )</span><span class="token operator">!</span><span class="token function">cp</span> INCAR_static INCAR<span class="token keyword">echo</span> <span class="token string">"KPOINTS = <span class="token variable">$i</span>"</span> <span class="token punctuation">;</span> <span class="token function">time</span> mpirun -n 16 vasp_std <span class="token comment" spellcheck="true">#vasp并行运行命令,根据系统自行修改</span><span class="token function">rm</span> INCAR_static<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#提取计算得到的能量</span>E<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"TOTEN"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span><span class="token keyword">echo</span> <span class="token variable">$i</span> <span class="token variable">$E</span> <span class="token operator">>></span>kspace_energy.out<span class="token keyword">done</span></code></pre><p><strong>注:Auto mesh模式下。 $KPONITSnumber = max(1,|\vec{b}|/(2\pi\times{KSPACING}))$<br>另外,后续介绍中,主要使用的是KPOINTS文件,KSPACING可以根据自行需要选择使用。</strong></p><p>提交脚本任务运行,成功结束后可以得到输出文件kspace_enengy.out<br>可以使用OriginPro等画图工具画出k点密度-能量关系。 </p><p>Si的KSPACE测试</p><img src="/img/Si_kspace_test.png" width = "60%" height = "60%" div align=center/><p>根据能量收敛判断,选择K点密度为0.15较为合适。</p>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>截断能测试</title>
<link href="/2020/04/18/encut-test/"/>
<url>/2020/04/18/encut-test/</url>
<content type="html"><![CDATA[<h1 id="截断能测试"><a href="#截断能测试" class="headerlink" title="截断能测试"></a><strong>截断能测试</strong></h1><p>必要输入文件:</p><pre class=" language-bash"><code class="language-bash">encut.sh POTCAR KPOINTS和POSCAR可以在encut.sh里设置,也可以独立给出。</code></pre><p>encut.sh脚本参考 </p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token comment" spellcheck="true">#生成KPOINTS文件,KPOINTS不能与INCAR中的KSPACING参数共用,二选一</span><span class="token comment" spellcheck="true">#注:KPOINTS文件每行一定要顶格写,不能前面不能空格,不然可能会报错。</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M9 9 90 0 0<span class="token operator">!</span><span class="token comment" spellcheck="true">#产生计算所需POSCAR</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR<span class="token operator"><<</span><span class="token operator">!</span>Si81.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000 0.0000000000 0.0000000000 0.0000000000 5.4687280000Si8Direct 0.0000000000 0.0000000000 0.0000000000 0.2500000000 0.7500000000 0.7500000000 0.5000000000 0.0000000000 0.5000000000 0.0000000000 0.5000000000 0.5000000000 0.5000000000 0.5000000000 0.0000000000 0.7500000000 0.2500000000 0.7500000000 0.7500000000 0.7500000000 0.2500000000 0.2500000000 0.2500000000 0.2500000000<span class="token operator">!</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">seq</span> 400 50 700<span class="token variable">)</span></span> <span class="token comment" spellcheck="true">#截断能从450-800,步数为50</span><span class="token keyword">do</span><span class="token comment" spellcheck="true">#生成vasp静态计算的INCAR</span><span class="token function">cat</span> <span class="token operator">></span> INCAR_static <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> <span class="token variable">$i</span> <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> -5 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#SIGMA = 0.05 (Smearing value in eV; metals:0.2)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-06 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V,4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> KSPACING <span class="token operator">=</span> 0.10<span class="token operator">!</span><span class="token function">cp</span> INCAR_static INCAR<span class="token keyword">echo</span> <span class="token string">"ENCUT = <span class="token variable">$i</span> eV"</span> <span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std <span class="token comment" spellcheck="true">#vasp并行运行命令,根据系统自行修改</span><span class="token function">rm</span> INCAR_static<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#提取计算得到的能量</span>E<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"TOTEN"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span><span class="token keyword">echo</span> <span class="token variable">$i</span> <span class="token variable">$E</span> <span class="token operator">>></span>encut_energy.out<span class="token keyword">done</span></code></pre><p>提交脚本任务运行,成功结束后可以得到输出文件encut_enengy.out<br>可以使用OriginPro等画图工具画出截断能-能量关系. </p><p>Si的截断能测试:<br><img src="/img/Si_encut_test.png" width = "60%" height = "60%" div align=center/></p><p>根据能量的收敛性(收敛值大约达到$0.001eV/atom$),我们选择截断能500 $eV$。</p>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>声子谱计算</title>
<link href="/2020/04/18/sheng-zi-pu/"/>
<url>/2020/04/18/sheng-zi-pu/</url>
<content type="html"><![CDATA[<h2 id="声子谱计算"><a href="#声子谱计算" class="headerlink" title="声子谱计算"></a><strong>声子谱计算</strong></h2><p>主要使用phonopy软件计算声子谱。版本:phonopy-2.1.3</p><h3 id="密度泛函微软理论-线性响应方法-DFPT"><a href="#密度泛函微软理论-线性响应方法-DFPT" class="headerlink" title="密度泛函微软理论/线性响应方法 (DFPT)"></a><strong>密度泛函微软理论/线性响应方法 (DFPT)</strong></h3><p>必要的输入文件: </p><pre class=" language-sh"><code class="language-sh">INCARKPOINTSPOTCAR-unitcell #优化得到的初始晶胞POTCARband.conf</code></pre><p>1 扩胞得到计算所需的POSCAR</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#在Linux终端直接运行命令</span><span class="token comment" spellcheck="true">#1. 生成超胞</span>phonopy -d --dim<span class="token operator">=</span><span class="token string">"2 2 2"</span> -c POSCAR-unitcell <span class="token comment" spellcheck="true">#--dim='2 2 2'表示'x y z'方扩的大小</span><span class="token comment" spellcheck="true">#2. 将生成的SPOSCAR拷贝成POSCAR</span><span class="token function">cp</span> SPOSCAR POSCAR</code></pre><p>2 提交VASP计算</p><p>INCAR设置如下:</p><pre class=" language-txt"><code class="language-txt"> ISMEAR = 0 (Gaussian smearing) SIGMA = 0.05 (Smearing value in eV) IBRION = 8 (determines the Hessian matrix using DFPT) EDIFF = 1E-08 (SCF energy convergence; in eV) PREC = Accurate (Precision level) ENCUT = 500 (Cut-off energy for plane wave basis set, in eV) IALGO = 38 (Davidson block iteration scheme) LREAL = .FALSE. (Projection operators: false) LWAVE = .FLASE. (Write WAVECAR or not) LCHARG = .FLASE. (Write CHGCAR or not) ADDGRID= .TRUE. (Increase grid; helps GGA convergence) NSW = 1 NELM = 100 NELMDL = -5</code></pre><p>KPOINTS需适当减小,可以的话最好再进行一次收敛测试<br>注:KPOINTS文件每行一定要顶格写,不能前面不能空格,不然可能会报错。</p><pre class=" language-bash"><code class="language-bash">A0M3 3 30 0 0</code></pre><p>提交VASP计算</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#若未安装作业管理程序,可直接运行下段命令。若安装了作业管理程序,请参考作业理手册。例如PBS作业管理系统。</span>mpirun -np 16 vasp_std <span class="token operator">></span> vasp.log</code></pre><p>PBS作业管理系统提交计算脚本 (根据需要命名,最好以.pbs 或者 .sh结尾)</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span> <span class="token comment" spellcheck="true">#PBS -N phono</span> <span class="token comment" spellcheck="true">#PBS -j oe</span> <span class="token comment" spellcheck="true">#PBS -l nodes=1:ppn=16</span> <span class="token function">cd</span> <span class="token variable">${PBS_O_WORKDIR}</span> mpirun -n 16 vasp_std <span class="token operator">></span><span class="token operator">&</span> vasp.log</code></pre><p>将所有文件放到一个文件夹,在终端运行<code>qsub *.pbs</code> or <code>qsub *.sh</code> </p><p>3 计算声子谱</p><p>准备band.conf文件,如下所示:(参数含义详见phonopy官网)</p><pre class=" language-conf"><code class="language-conf"> ATOM_NAME =Si DIM = 2 2 2 PRIMITIVE_AXES=Auto MP = 24 24 24 BAND =0.0 0.0 0.0 0.5 0.0 0.5 0.625 0.25 0.625, 0.375 0.375 0.75 00 0.0 0.0 0.5 0.5 0.5 BAND_POINTS = 101 FORCE_CONSTANTS= READ</code></pre><p>获取声子谱后处理步骤</p><pre class=" language-bash"><code class="language-bash"> <span class="token comment" spellcheck="true">#直接在终端运行</span> <span class="token comment" spellcheck="true">#1. 提取力常数,得到FORCE_CONSTANTS文件。</span> phonopy --fc vasprun.xml <span class="token comment" spellcheck="true">#2. 计算声子谱并保存为pdf格式</span> phonopy -c POSCAR-unitcell band.conf -p -s <span class="token comment" spellcheck="true">#3. 将声子谱进一步输出为数据文件,用于其它软件画图。</span> <span class="token comment" spellcheck="true">#旧版本phonopy</span> bandplot --gnuplot<span class="token operator">></span> phonon.out <span class="token comment" spellcheck="true">#新版本phonopy</span> phonopy-bandplot --gnuplot <span class="token operator">></span> phonon.out <span class="token comment" spellcheck="true">#phonon.out文件中首行是高对称点在x轴上的坐标</span></code></pre><h3 id="有限位移方法"><a href="#有限位移方法" class="headerlink" title="有限位移方法"></a><strong>有限位移方法</strong></h3><p>必要的输入文件: </p><pre class=" language-sh"><code class="language-sh">INCARKPOINTSINCAR-unitcell #优化得到的初始晶胞POTCARband.conf</code></pre><p>扩胞得到计算所需的POSCAR</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#在Linux终端直接运行命令</span><span class="token comment" spellcheck="true">#1. 生成超胞</span>phonopy -d --dim<span class="token operator">=</span><span class="token string">"2 2 2"</span> -c POSCAR-unitcell <span class="token comment" spellcheck="true">#--dim='2 2 2'表示'x y z'扩胞的大小</span><span class="token comment" spellcheck="true">#会得到一系列POSCAR-001,POSCAR-002,... 数量由对称性决定。</span><span class="token comment" spellcheck="true">#2. 建立disp-*文件夹,具体数量以生成POSCAR-*的数量决定。将POSCAR-POTCAR, INCAR, KPOINTS放入disp-*文件夹</span><span class="token function">mkdir</span> disp-001<span class="token function">cp</span> POSCAR-001 ./disp-001/POSCAR<span class="token function">cp</span> POTCAR ./disp-001/POTCAR<span class="token function">cp</span> INCAR ./disp-001/INCAR<span class="token function">cp</span> KPOINTS ./disp-001/KPOINTS</code></pre><p>提交VASP计算</p><p>INCAR设置如下(静态计算):</p><pre class=" language-bash"><code class="language-bash"> PREC <span class="token operator">=</span> Accurate IBRION <span class="token operator">=</span> -1 ENCUT <span class="token operator">=</span> 500 EDIFF <span class="token operator">=</span> 1.0e-08 EDIFFG <span class="token operator">=</span> -0.001 ISMEAR <span class="token operator">=</span> 0 SIGMA <span class="token operator">=</span> 0.05 ALGO <span class="token operator">=</span> 38 LREAL <span class="token operator">=</span> .FALSE. LWAVE <span class="token operator">=</span> .FALSE. LCHARG <span class="token operator">=</span> .FALSE.</code></pre><p>KPOINTS需适当减小,可以的话最好再进行一次收敛测试<br>注:KPOINTS文件每行一定要顶格写,不能前面不能空格,不然可能会报错。</p><pre class=" language-bash"><code class="language-bash">A0M3 3 30 0 0</code></pre><p>提交VASP计算</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#若未安装作业管理程序,可直接运行下段命令。若安装了作业管理程序,请参考作理手册。例如PBS作业管理系统。</span>mpirun -np 16 vasp_std <span class="token operator">></span> vasp.log</code></pre><p>PBS作业管理系统提交计算脚本 (根据需要命名,最好以.pbs 或者 .sh结尾)</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span> <span class="token comment" spellcheck="true">#PBS -N phono</span> <span class="token comment" spellcheck="true">#PBS -j oe</span> <span class="token comment" spellcheck="true">#PBS -l nodes=1:ppn=16</span> <span class="token function">cd</span> <span class="token variable">${PBS_O_WORKDIR}</span> mpirun -n 16 vasp_std <span class="token operator">></span><span class="token operator">&</span> vasp.log</code></pre><p>将所有文件放到一个文件夹,在终端运行<code>qsub *.pbs</code> or <code>qsub *.sh</code> </p><p>3 计算声子谱</p><p>准备band.conf文件,如下所示:(参数含义详见phonopy官网)</p><pre class=" language-conf"><code class="language-conf"> ATOM_NAME =Si DIM = 2 2 2 PRIMITIVE_AXES=Auto MP = 24 24 24 BAND =0.0 0.0 0.0 0.5 0.0 0.5 0.625 0.25 0.625, 0.375 0.375 0.75 0.0 0.0 0.0 0.5 0.5 0.5 BAND_POINTS = 101 FULL_FORCE_CONSTANTS = .TRUE. FORCE_CONSTANTS= WRITE #生成FORCE_CONSTANTS </code></pre><p>准备mesh.conf文件,如下所示: </p><pre class=" language-conf"><code class="language-conf">ATOM_NAME = SiDIM = 2 2 2MP = 24 24 24</code></pre><p>获取声子谱后处理步骤</p><pre class=" language-bash"><code class="language-bash"> <span class="token comment" spellcheck="true">#直接在终端运行</span> <span class="token comment" spellcheck="true">#1. 提取动力学矩阵,进入disp-*的上一级文件夹</span> phonopy -f ./disp-*/vasprun.xml <span class="token comment" spellcheck="true">#会生成FORCE_SET</span> <span class="token comment" spellcheck="true">#2. 计算声子谱并保存为pdf格式,同时生成FORCE_CONSTANTS</span> phonopy -c POSCAR-unitcell band.conf -p -s <span class="token comment" spellcheck="true">#3. 将声子谱进一步输出为数据文件,用于其它软件画图。</span> <span class="token comment" spellcheck="true">#旧版本phonopy</span> bandplot --gnuplot<span class="token operator">></span> phonon.out <span class="token comment" spellcheck="true">#新版本phonopy</span> phonopy-bandplot --gnuplot <span class="token operator">></span> phonon.out <span class="token comment" spellcheck="true">#phonon.out文件中首行是高对称点在x轴上的坐标</span></code></pre><img src="/img/Si_phonon.png" width = "60%" height = "60%" div align=center/>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>晶格常数计算</title>
<link href="/2020/04/18/jing-ge-chang-shu-ce-shi/"/>
<url>/2020/04/18/jing-ge-chang-shu-ce-shi/</url>
<content type="html"><![CDATA[<h3 id="晶格常数测试-Equation-of-state-method"><a href="#晶格常数测试-Equation-of-state-method" class="headerlink" title="晶格常数测试 (Equation of state method)"></a><strong>晶格常数测试 (Equation of state method)</strong></h3><p>必要输入文件</p><pre class=" language-bash"><code class="language-bash">run_a0.shPOTCARINCAR 和 KPOINTS可在run_a0.sh中直接设置,也可以单独给出。EOS.in</code></pre><p>三维立方晶格脚本示例:<br>Si</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/sh</span><span class="token function">cat</span> <span class="token operator">></span> INCAR.relax <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation NELMIN <span class="token operator">=</span> 6 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> NSW <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># ISYM = 2 (Symmetry: 0=none; 2=GGA; 3=hybrids)</span><span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR.static <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span> GGA <span class="token operator">=</span> PEStatic Calculation ISMEAR <span class="token operator">=</span> -5 <span class="token punctuation">(</span>tetrahedron method <span class="token keyword">for</span> DOS<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#LORBIT = 11 (PAW radii for projected DOS)</span> <span class="token comment" spellcheck="true">#NEDOS = 2001 (DOSCAR points) </span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M9 9 90 0 0<span class="token operator">!</span><span class="token keyword">echo</span> <span class="token string">'a0'</span> <span class="token string">'volume'</span> <span class="token string">'free_energy(eV)'</span> <span class="token operator">></span>ev.out<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">seq</span> 5.00 0.05 5.90<span class="token variable">)</span></span><span class="token keyword">do</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Si81.0000000000 <span class="token variable">$i</span> 0.0000000000 0.0000000000 0.0000000000 <span class="token variable">$i</span> 0.0000000000 0.0000000000 0.0000000000 <span class="token variable">$i</span>Si8Direct 0.0000000000 0.0000000000 0.0000000000 0.2500000000 0.7500000000 0.7500000000 0.5000000000 0.0000000000 0.5000000000 0.0000000000 0.5000000000 0.5000000000 0.5000000000 0.5000000000 0.0000000000 0.7500000000 0.2500000000 0.7500000000 0.7500000000 0.7500000000 0.2500000000 0.2500000000 0.2500000000 0.2500000000<span class="token operator">!</span><span class="token comment" spellcheck="true">#优化计算</span><span class="token function">cp</span> INCAR.relax INCAR<span class="token keyword">echo</span> <span class="token string">"a=<span class="token variable">$i</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -n 16 vasp_std<span class="token function">cp</span> CONTCAR POSCAR<span class="token function">rm</span> INCAR<span class="token comment" spellcheck="true">#静态计算</span><span class="token function">cp</span> INCAR.static INCAR<span class="token keyword">echo</span> <span class="token string">"a=<span class="token variable">$i</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -n 16 vasp_stdV<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"volume"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span>E<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"TOTEN"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span><span class="token keyword">echo</span> <span class="token variable">$i</span> <span class="token variable">$V</span> <span class="token variable">$E</span> <span class="token operator">>></span> ev.out<span class="token function">rm</span> INCAR<span class="token keyword">done</span></code></pre><p>提交脚本运算后得到ev.out。<br>利用vaspkit软件进行状态方程拟合。 </p><p>vaspkit需要准EOS.in文件,文件格式及说明如下:</p><pre class=" language-in"><code class="language-in"> cname : name of crystal up to 256 characters natoms : number of atoms in unit cell etype : equation of state type (see below) vplt1, vplt2, nvplt : volume interval over which to plot energy, pressure etc. as well as the number of points in the plot nevpt : number of energy-volume points to be inputted vpt(i) ept(i) : energy-volume points (VASP units)Note that the input units are VASP default untis (i.e., A^3 and eV).The equations of state currently implemented are: 1. Universal EOS (Vinet P et al., J. Phys.: Condens. Matter 1, p1941 (1989)) 2. Murnaghan EOS (Murnaghan F D, Am. J. Math. 49, p235 (1937)) 3. Birch-Murnaghan 3rd-order EOS (Birch F, Phys. Rev. 71, p809 (1947)) 4. Birch-Murnaghan 4th-order EOS 5. Natural strain 3rd-order EOS (Poirier J-P and Tarantola A, Phys. Earth Planet Int. 109, p1 (1998)) 6. Natural strain 4th-order EOS 7. Cubic polynomial in (V-V0)</code></pre><p>参考例子</p><p>Si</p><pre class=" language-in"><code class="language-in">Si83124.00 206 50019125.000000000 -39.404864520128.790000000 -40.307996560132.650000000 -41.074573950136.590000000 -41.714702140140.610000000 -42.237893500144.700000000 -42.653098650148.880000000 -42.968706720153.130000000 -43.192650580157.460000000 -43.332358630161.880000000 -43.394826990166.380000000 -43.386635660170.950000000 -43.313964240175.620000000 -43.182635890180.360000000 -42.998104870185.190000000 -42.765493980190.110000000 -42.489611560195.110000000 -42.174957610200.200000000 -41.825750520205.380000000 -41.445910010</code></pre><p>运行 <code>vaspkit -task 205</code><br>得到主要的输出文件 PARAM.out 如下:</p><pre class=" language-out"><code class="language-out">SiBirch-Murnaghan 3rd-order EOSBirch F, Phys. Rev. 71, p809 (1947)(Default VASP units: eV, Angstrom etc.) V0 (A^3) = 163.6206779 E0 (eV) = -43.39626828 B0 = 0.2982734905E-02 B0' = 4.260966253 B0 (GPa) = 87.75507591</code></pre><p>通过平衡体积可以得到晶格常数 $a_0=5.4694803016$<br>建议对得到的平衡晶格常数再优化一次。 </p><p>如果不想状态方程拟合,在较高精度下直接使用$ISIF = 3$ 的参数直接弛豫优化晶胞。<br>INCAR示例如下: </p><pre class=" language-bash"><code class="language-bash">Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 500 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation NELMIN <span class="token operator">=</span> 6 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> NSW <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 3 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># ISYM = 2 (Symmetry: 0=none; 2=GGA; 3=hybrids)</span></code></pre><p>注:在新版本的vaspkit中,给出了更多状态方程及其整个新的拟合流程,具体可参考程序实例。</p><br /><p>二维材料的六方晶格示例:<br>Tl2O</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#!/bin/sh</span><span class="token function">cat</span> <span class="token operator">></span> INCAR.relax <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 600 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span>Electronic Relaxation ISMEAR <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Gaussian smearing<span class="token punctuation">;</span> metals:1<span class="token punctuation">)</span> SIGMA <span class="token operator">=</span> 0.05 <span class="token punctuation">(</span>Smearing value <span class="token keyword">in</span> eV<span class="token punctuation">;</span> metals:0.2<span class="token punctuation">)</span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> NELMIN <span class="token operator">=</span> 4 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> GGA <span class="token operator">=</span> PE <span class="token punctuation">(</span>PBEsol exchange-correlation<span class="token punctuation">)</span>Ionic Relaxation NELMIN <span class="token operator">=</span> 6 <span class="token punctuation">(</span>Min electronic SCF steps<span class="token punctuation">)</span> NSW <span class="token operator">=</span> 100 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> IBRION <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Algorithm: 0-MD<span class="token punctuation">;</span> 1-Quasi-New<span class="token punctuation">;</span> 2-CG<span class="token punctuation">)</span> ISIF <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Stress/relaxation: 2-Ions, 3-Shape/Ions/V, 4-Shape/Ions<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001 <span class="token punctuation">(</span>Ionic convergence<span class="token punctuation">;</span> eV/AA<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># ISYM = 2 (Symmetry: 0=none; 2=GGA; 3=hybrids)</span><span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> INCAR.static <span class="token operator"><<</span><span class="token operator">!</span>Global Parameters ISTART <span class="token operator">=</span> 0 <span class="token punctuation">(</span>Read existing wavefunction<span class="token punctuation">;</span> <span class="token keyword">if</span> there<span class="token punctuation">)</span> ICHARG <span class="token operator">=</span> 2 <span class="token punctuation">(</span>Non-self-consistent: GGA/LDA band structures<span class="token punctuation">)</span> LREAL <span class="token operator">=</span> F <span class="token punctuation">(</span>Projection operators: automatic<span class="token punctuation">)</span> ENCUT <span class="token operator">=</span> 600 <span class="token punctuation">(</span>Cut-off energy <span class="token keyword">for</span> plane wave basis set, <span class="token keyword">in</span> eV<span class="token punctuation">)</span> PREC <span class="token operator">=</span> Accurate <span class="token punctuation">(</span>Precision level<span class="token punctuation">)</span> LWAVE <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write WAVECAR or not<span class="token punctuation">)</span> LCHARG <span class="token operator">=</span> .FALSE. <span class="token punctuation">(</span>Write CHGCAR or not<span class="token punctuation">)</span> ADDGRID<span class="token operator">=</span> .TRUE. <span class="token punctuation">(</span>Increase grid<span class="token punctuation">;</span> helps GGA convergence<span class="token punctuation">)</span> <span class="token comment" spellcheck="true"># LVTOT = .TRUE. (Write total electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># LVHAR = .TRUE. (Write ionic + Hartree electrostatic potential into LOCPOT or not)</span> <span class="token comment" spellcheck="true"># NELECT = (No. of electrons: charged cells; be careful)</span> <span class="token comment" spellcheck="true"># LPLANE = .TRUE. (Real space distribution; supercells)</span> <span class="token comment" spellcheck="true"># NPAR = 4 (Max is no. nodes; don't set for hybrids)</span> GGA <span class="token operator">=</span> PEStatic Calculation ISMEAR <span class="token operator">=</span> -5 <span class="token punctuation">(</span>tetrahedron method <span class="token keyword">for</span> DOS<span class="token punctuation">)</span> <span class="token comment" spellcheck="true">#SIGMA = 0.05</span> <span class="token comment" spellcheck="true">#LORBIT = 11 (PAW radii for projected DOS)</span> <span class="token comment" spellcheck="true">#NEDOS = 2001 (DOSCAR points) </span> NELM <span class="token operator">=</span> 60 <span class="token punctuation">(</span>Max electronic SCF steps<span class="token punctuation">)</span> EDIFF <span class="token operator">=</span> 1E-08 <span class="token punctuation">(</span>SCF energy convergence<span class="token punctuation">;</span> <span class="token keyword">in</span> eV<span class="token punctuation">)</span> EDIFFG <span class="token operator">=</span> -0.001<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0G12 12 10 0 0<span class="token operator">!</span><span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">seq</span> 3.10 0.05 4.10<span class="token variable">)</span></span><span class="token keyword">do</span>j<span class="token operator">=</span>`echo <span class="token string">"<span class="token variable">$i</span> * 0.5000000000"</span><span class="token operator">|</span><span class="token function">bc</span><span class="token variable"><span class="token variable">`</span>k<span class="token operator">=</span><span class="token variable">`</span></span><span class="token keyword">echo</span> <span class="token string">"<span class="token variable">$i</span> * 0.8660254038"</span><span class="token operator">|</span>bc`<span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Tl2O1.0 <span class="token variable">$i</span> 0.00000000000 0.00000000000-<span class="token variable">$j</span> <span class="token variable">$k</span> 0.00000000000 0.00000000000 0.00000000000 25.00000000000Tl O2 1Direct 0.3333330099999969 0.6666670059999973 0.5606771909028483 0.6666669459999994 0.3333329709999973 0.4393227710971557 0.0000000000000000 0.0000000000000000 0.5000000000000000<span class="token operator">!</span><span class="token function">cp</span> INCAR.relax INCAR<span class="token keyword">echo</span> <span class="token string">"a=<span class="token variable">$j</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token function">cp</span> CONTCAR POSCAR<span class="token function">rm</span> INCAR<span class="token function">cp</span> INCAR.static INCAR<span class="token keyword">echo</span> <span class="token string">"a=<span class="token variable">$j</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_stdV<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"volume"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span>E<span class="token operator">=</span><span class="token punctuation">$(</span>grep <span class="token string">"TOTEN"</span> OUTCAR <span class="token operator">|</span> <span class="token function">tail</span> -1 <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'{printf "%12.9f \n", <span class="token variable">$5</span> }'</span><span class="token punctuation">)</span><span class="token keyword">echo</span> <span class="token variable">$i</span> <span class="token variable">$V</span> <span class="token variable">$E</span> <span class="token operator">>></span> ev.dat<span class="token function">rm</span> POSCAR<span class="token keyword">done</span></code></pre><p>注:对于平面为矩形的二维材料,可以通过修改VASP源代码,直接使用ISIF=3对x、y方向优化。<br>详情见软件编译手册。</p>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>弹性常数计算</title>
<link href="/2020/04/18/er-jie-dan-xing-chang-shu-ji-suan/"/>
<url>/2020/04/18/er-jie-dan-xing-chang-shu-ji-suan/</url>
<content type="html"><![CDATA[<h2 id="二阶弹性常数计算"><a href="#二阶弹性常数计算" class="headerlink" title="二阶弹性常数计算"></a><strong>二阶弹性常数计算</strong></h2><p>主要采用能量–应变方法</p><h3 id="AELAS软件计算"><a href="#AELAS软件计算" class="headerlink" title="AELAS软件计算"></a><strong>AELAS软件计算</strong></h3><p>必要的文件</p><pre class=" language-bash"><code class="language-bash">elas_strain.shelas_cal.shPOTCARINPOS 优化后的POSCAR。可在脚本设置或者单独给出KPOINTS 可在脚本设置或者单独给出incar_rlx 可在脚本设置或者单独给出incar_stc </code></pre><p>elas_strain.sh脚本参考如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/bash</span><span class="token function">cat</span> <span class="token operator">></span> INPOS <span class="token operator"><<</span><span class="token operator">!</span>Si8 1.00000000000000 5.4684663969085214 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.4684663969085214 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.4684663969085214Si8Direct 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.7500000000000000 0.7500000000000000 0.5000000000000000 0.0000000000000000 0.5000000000000000 0.0000000000000000 0.5000000000000000 0.5000000000000000 0.5000000000000000 0.5000000000000000 0.0000000000000000 0.7500000000000000 0.2500000000000000 0.7500000000000000 0.7500000000000000 0.7500000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000<span class="token operator">!</span>AELAS -g <span class="token comment" spellcheck="true">#建立不同应变下的POSCAR_I_J。例如:POSCAR_01_001 #二维生成命令 AELAS -g2d</span><span class="token comment" spellcheck="true">#产生优化和静态计算的INCAR</span><span class="token function">cat</span> <span class="token operator">></span> incar_rlx <span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8ISMEAR<span class="token operator">=</span>0SIGMA<span class="token operator">=</span>0.05NELMIN<span class="token operator">=</span>5<span class="token comment" spellcheck="true"># Ionic relaxation</span>NSW<span class="token operator">=</span>100EDIFFG<span class="token operator">=</span>-1e-3ISIF<span class="token operator">=</span>2IBRION<span class="token operator">=</span>2POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true">#Write flags</span>LWAVE<span class="token operator">=</span>.FALSE.LCHARG<span class="token operator">=</span>.FALSE.<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> incar_stc<span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8EDIFFG<span class="token operator">=</span>-0.001ISMEAR<span class="token operator">=</span>-5<span class="token comment" spellcheck="true">#SIGMA = 0.05</span>POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true"># Write flags</span>LWAVE<span class="token operator">=</span>.FALSE.LCHARG<span class="token operator">=</span>.FALSE.<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M9 9 90 0 0<span class="token operator">!</span></code></pre><p>运行生成应变后的POSCAR及计算输入文件</p><p>elas_cal.sh脚本设置如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token keyword">for</span> i <span class="token keyword">in</span> 01 02 03 <span class="token comment" spellcheck="true">#根据生成的数量设置</span><span class="token keyword">do</span><span class="token keyword">for</span> j <span class="token keyword">in</span> 001 002 003 004 005 006 007 008 009 010 011 012 013<span class="token keyword">do</span><span class="token comment" spellcheck="true">#优化计算</span><span class="token function">cp</span> POS_<span class="token string">"<span class="token variable">$i</span>"</span>_<span class="token variable">$j</span>.vasp POSCAR<span class="token function">cp</span> incar_rlx INCAR<span class="token keyword">echo</span> <span class="token string">"relax I= <span class="token variable">$i</span>,J = <span class="token variable">$j</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token comment" spellcheck="true">#静态计算</span><span class="token function">cp</span> CONTCAR POSCAR<span class="token function">rm</span> INCAR<span class="token function">cp</span> incar_stc INCAR<span class="token keyword">echo</span> <span class="token string">"static I= <span class="token variable">$i</span>,J = <span class="token variable">$j</span>"</span><span class="token punctuation">;</span> <span class="token function">time</span> mpirun -np 16 vasp_std<span class="token function">cp</span> OSZICAR OSZICAR_<span class="token string">"<span class="token variable">$i</span>"</span>_<span class="token variable">$j</span><span class="token function">rm</span> INCAR<span class="token keyword">done</span><span class="token keyword">done</span><span class="token comment" spellcheck="true">#计算弹性常数</span>AELAS -d <span class="token comment" spellcheck="true">#二维产生 AELAS -d2d</span></code></pre><p>提交上述脚本计算,成功计算后生成ELADAT文件,形式如下:</p><pre class=" language-txt"><code class="language-txt"> Elastic tensor: 153.04 57.11 57.11 0.00 0.00 0.00 57.11 153.04 57.11 0.00 0.00 0.00 57.11 57.11 153.04 0.00 0.00 0.00 0.00 0.00 0.00 74.71 0.00 0.00 0.00 0.00 0.00 0.00 74.71 0.00 0.00 0.00 0.00 0.00 0.00 74.71 Compliance tensor: 0.008197 -0.002228 -0.002228 0.000000 0.000000 0.000000 -0.002228 0.008197 -0.002228 0.000000 0.000000 0.000000 -0.002228 -0.002228 0.008197 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.013384 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.013384 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.013384 Young's, shear and bulk moduli and Poisson ratio Voigt approximate: 154.93 64.01 89.09 0.210 Reuss approximate: 149.17 61.09 89.09 0.221 Hill approximate : 152.05 62.55 89.09 0.216 Pugh ratio (G/K): 0.7021 Cauchy pressure (Pc=C12-C44): -17.60 Elastic Anisotropy Index Chung-Buessem Anisotropy Index (Ac=(Gv-Gr)/(Gv+Gr)): 0.0234 Universal Elastic Anisotropy Index (Au=5*Gv/Gr+Kv/Kr-6): 0.2396 Elastic Stability Conditions: Stable</code></pre><br /><hr><h3 id="vaspkit软件"><a href="#vaspkit软件" class="headerlink" title="vaspkit软件"></a><strong>vaspkit软件</strong></h3><p>建议使用惯用晶胞,不要使用原始晶胞。可以借用上面软件的AELAS -d生成的RECELL文件。</p><p>版本1.0.0及以上</p><p>必要的文件</p><pre class=" language-bash"><code class="language-bash">elas_strain.shelas_cal.shPOTCARKPOINTS 可在脚本设置或者单独给出incar_rlx 可在脚本设置或者单独给出incar_stcVPKIT.in 可在脚本设置或者单独给出</code></pre><p>elas_strain.sh脚本参考如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#!/bin/bash</span><span class="token function">cat</span> <span class="token operator">></span> VPKIT.in <span class="token operator"><<</span><span class="token operator">!</span>1 <span class="token operator">!</span> 1 <span class="token keyword">for</span> prep-rocessing, 2 <span class="token keyword">for</span> post-processing3D <span class="token operator">!</span> 2D <span class="token keyword">for</span> slab, 3D <span class="token keyword">for</span> bulk13 <span class="token operator">!</span> number of strain-0.018 -0.015 -0.012 -0.009 -0.006 -0.003 0.000 0.003 0.006 0.009 0.012 0.015 0.018 <span class="token operator">!</span> magnitude of strain<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> POSCAR <span class="token operator"><<</span><span class="token operator">!</span>Si81.00000000000000 5.4684663969085214 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.4684663969085214 0.0000000000000000 0.0000000000000000 0.0000000000000000 5.4684663969085214Si8Direct 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.2500000000000000 0.7500000000000000 0.7500000000000000 0.5000000000000000 0.0000000000000000 0.5000000000000000 0.0000000000000000 0.5000000000000000 0.5000000000000000 0.5000000000000000 0.5000000000000000 0.0000000000000000 0.7500000000000000 0.2500000000000000 0.7500000000000000 0.7500000000000000 0.7500000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000 0.2500000000000000<span class="token operator">!</span><span class="token comment" spellcheck="true">#产生优化和静态计算的INCAR</span><span class="token function">cat</span> <span class="token operator">></span> incar_rlx <span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8ISMEAR<span class="token operator">=</span>0SIGMA<span class="token operator">=</span>0.05NELMIN<span class="token operator">=</span>5<span class="token comment" spellcheck="true"># Ionic relaxation</span>NSW<span class="token operator">=</span>100EDIFFG<span class="token operator">=</span>-1e-3ISIF<span class="token operator">=</span>2IBRION<span class="token operator">=</span>2POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true">#Write flags</span>LWAVE<span class="token operator">=</span>.FALSE.LCHARG<span class="token operator">=</span>.FALSE.KPAR<span class="token operator">=</span>2<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> incar_stc<span class="token operator"><<</span><span class="token operator">!</span>ISTART<span class="token operator">=</span>0ICHARG<span class="token operator">=</span>2PREC<span class="token operator">=</span>AccurateGGA <span class="token operator">=</span> PEADDGRID <span class="token operator">=</span>.TRUE.<span class="token comment" spellcheck="true"># Electronic relaxation</span>ENCUT<span class="token operator">=</span>500EDIFF<span class="token operator">=</span>1E-8EDIFFG<span class="token operator">=</span>-0.001ISMEAR<span class="token operator">=</span>-5<span class="token comment" spellcheck="true">#SIGMA = 0.05</span>POTIM<span class="token operator">=</span>0.20<span class="token comment" spellcheck="true"># Other Tags</span><span class="token comment" spellcheck="true">#PSTRESS=</span><span class="token comment" spellcheck="true"># Write flags</span>LWAVE<span class="token operator">=</span>.FALSE.LCHARG<span class="token operator">=</span>.FALSE.KPAR<span class="token operator">=</span>2<span class="token operator">!</span><span class="token function">cat</span> <span class="token operator">></span> KPOINTS <span class="token operator"><<</span><span class="token operator">!</span>A0M9 9 90 0 0<span class="token operator">!</span>vaspkit -task 201 <span class="token comment" spellcheck="true">#建立不同应变下的POSCAR文件</span></code></pre><p>提交生成应变后的文件夹</p><p>elas_cal.sh脚本设置如下:</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#!/bin/bash</span>root_path<span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">pwd</span><span class="token variable">`</span></span><span class="token keyword">for</span> cij <span class="token keyword">in</span> <span class="token variable"><span class="token variable">`</span><span class="token function">ls</span> -F <span class="token operator">|</span> <span class="token function">grep</span> /$<span class="token variable">`</span></span><span class="token keyword">do</span> <span class="token function">cd</span> <span class="token variable">${root_path}</span>/<span class="token variable">$cij</span> <span class="token keyword">for</span> s <span class="token keyword">in</span> strain_* <span class="token keyword">do</span> <span class="token function">cd</span> <span class="token variable">${root_path}</span>/<span class="token variable">$cij</span>/<span class="token variable">$s</span> <span class="token keyword">echo</span> <span class="token variable"><span class="token variable">`</span><span class="token function">pwd</span><span class="token variable">`</span></span> <span class="token comment" spellcheck="true">#优化计算</span> <span class="token function">cp</span> <span class="token punctuation">..</span>/<span class="token punctuation">..</span>/incar_rlx INCAR <span class="token function">time</span> mpirun -np 16 vasp_std <span class="token function">rm</span> INCAR <span class="token comment" spellcheck="true">#静态计算</span> <span class="token function">cp</span> <span class="token punctuation">..</span>/<span class="token punctuation">..</span>/incar_stc INCAR <span class="token function">time</span> mpirun -np 16 vasp_std <span class="token keyword">done</span><span class="token keyword">done</span><span class="token function">cd</span> <span class="token variable">${root_path}</span><span class="token comment" spellcheck="true">#计算弹性常数</span><span class="token function">cat</span> <span class="token operator">></span> VPKIT.in <span class="token operator"><<</span><span class="token operator">!</span>2 <span class="token operator">!</span> 1 <span class="token keyword">for</span> prep-rocessing, 2 <span class="token keyword">for</span> post-processing3D <span class="token operator">!</span> 2D <span class="token keyword">for</span> slab, 3D <span class="token keyword">for</span> bulk13 <span class="token operator">!</span> number of strain-0.018 -0.015 -0.012 -0.009 -0.006 -0.003 0.000 0.003 0.006 0.009 0.012 0.015 0.018 <span class="token operator">!</span> magnitude of strain<span class="token operator">!</span>vaspkit -task 201 <span class="token operator">></span> elastics.out</code></pre><p>成功计算后生成elastic.out文件,形式如下:</p><pre class=" language-out"><code class="language-out"> +---------------------------------------------------------------+ | VASPKIT Version: 1.00 (16 Sep. 2019) | | A Pre- and Post-Processing Program for VASP Code | | Running VASPKIT Under Command-Line Mode | +---------------------------------------------------------------+ -->> (01) Reading VPKIT.in File... +-------------------------- Warm Tips --------------------------+ See an example in vaspkit/examples/elastic/diamond_3D, Require the fully-relaxed and standardized Convertional cell. +---------------------------------------------------------------+ -->> (02) Reading Structural Parameters from POSCAR File... -->> (03) Calculating the fitting coefficients of energy vs strain. -->> Current directory: Fitting Precision C44 Folder: 0.405E-09 C11_C12_I Folder: 0.244E-09 C11_C12_II Folder: 0.744E-08 +-------------------------- Summary ----------------------------+ Based on the Strain versus Energy method. Crystal Class: m-3m Space Group: Fd-3m Crystal System: Cubic system Including Point group classes: 23, 2/m-3, 432, -43m, 4/m-32/m There are 3 independent elastic constants C11 C12 C12 0 0 0 C12 C11 C12 0 0 0 C12 C12 C11 0 0 0 0 0 0 C44 0 0 0 0 0 0 C44 0 0 0 0 0 0 C44 Stiffness Tensor C_ij (in GPa): 153.056 57.116 57.116 0.000 0.000 0.000 57.116 153.056 57.116 0.000 0.000 0.000 57.116 57.116 153.056 0.000 0.000 0.000 0.000 0.000 0.000 99.411 0.000 0.000 0.000 0.000 0.000 0.000 99.411 0.000 0.000 0.000 0.000 0.000 0.000 99.411 Compliance Tensor S_ij (in GPa^{-1}): 0.008196 -0.002227 -0.002227 0.000000 0.000000 0.000000 -0.002227 0.008196 -0.002227 0.000000 0.000000 0.000000 -0.002227 -0.002227 0.008196 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.010059 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.010059 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.010059 Elastic stability criteria as seen in PRB 90, 224104 (2014). Criteria (i) C11 - C12 > 0 meeted. Criteria (ii) C11 + 2C12 > 0 meeted. Criteria (iii) C44 > 0 meeted. This Structure is Mechanically Stable. Average mechanical properties for polycrystalline: +---------------------------------------------------------------+ | Scheme | Voigt | Reuss | Hill | +---------------------------------------------------------------+ | Bulk modulus K (GPa) | 89.096 | 89.096 | 89.096 | | Shear modulus G (GPa) | 78.835 | 69.569 | 74.202 | | Young's modulus E (GPa) | 182.637 | 165.605 | 174.236 | | P-wave modulus (GPa) | 194.209 | 181.855 | 188.032 | | Poisson's ratio v | 0.158 | 0.190 | 0.174 | | Bulk/Shear ratio | 1.130 | 1.281 | 1.201 | +---------------------------------------------------------------+ Pugh Ratio: 0.833 Cauchy Pressure (GPa): -42.295 Universal Elastic Anisotropy: 0.666 ChungBuessem Anisotropy: 0.062 Isotropic Poissons Ratio: 0.174 Longitudinal wave velocity (in m/s): 9078.421 Transverse wave velocity (in m/s): 5702.983 Average wave velocity (in m/s): 6278.900 Debye temperature (in K): 683.685 References: [1] Voigt W, Lehrbuch der Kristallphysik (1928) [2] Reuss A, Z. Angew. Math. Mech. 9 4958 (1929) [3] Hill R, Proc. Phys. Soc. A 65 34954 (1952) [4] Debye temperature J. Phys. Chem. Solids 24, 909-917 (1963) [5] Elastic wave velocities calculated using Navier's equation +---------------------------------------------------------------+ +---------------------------------------------------------------+ | We Would Appreciate if You Cite in Your Research with VASPKIT.| | Ref: V. Wang, N. Xu, J.C. LIU, G. Tang, et al, VASPKIT: A Pre-| | and Post-Processing Program for VASP Code, arXiv:1908.08269. | +---------------------------------------------------------------+</code></pre>]]></content>
<categories>
<category> VASP计算笔记 </category>
</categories>
<tags>
<tag> VASP </tag>
</tags>
</entry>
<entry>
<title>Spglib安装教程</title>
<link href="/2020/04/18/spglib-an-zhuang/"/>
<url>/2020/04/18/spglib-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="Spglib安装教程"><a href="#Spglib安装教程" class="headerlink" title="Spglib安装教程"></a><strong>Spglib安装教程</strong></h2><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>官网:<a href="https://atztogo.github.io/spglib/index.html" target="_blank" rel="noopener">https://atztogo.github.io/spglib/index.html</a><br>C版本下载:<a href="https://github.com/atztogo/spglib" target="_blank" rel="noopener">https://github.com/atztogo/spglib</a><br>python版本下载:<a href="https://pypi.org/project/spglib/" target="_blank" rel="noopener">https://pypi.org/project/spglib/</a></p><h2 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h2><p><strong>C版本安装编译</strong></p><p>Cmake方法</p><p>1 解压进入文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> xvfz spglib-1.9.8.tar.gz<span class="token function">cd</span> spglib-1.9.8</code></pre><p>2 建立_build文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">mkdir</span> _build <span class="token operator">&&</span> _buildcmake -DCMAKE_INSTALL_PREFIX<span class="token operator">=</span><span class="token string">""</span> <span class="token punctuation">..</span><span class="token function">make</span><span class="token function">make</span> DESTDIR<span class="token operator">=</span>/some/where <span class="token function">install</span><span class="token comment" spellcheck="true">#路径根据需要设置</span></code></pre><p>注:头文件spglib.h在安装路径include文件夹,如果include文件夹中没有spglib文件夹,建议手动建立一个并复制spglib.h文件到里面。这在后面的安装thirdorder软件时是有用的。</p><p><strong>Python库版本安装</strong></p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#在线安装</span>pip <span class="token function">install</span> spglib<span class="token comment" spellcheck="true">#手动安装</span><span class="token function">tar</span> -zxvf spglib-1.14.1.post0.tar.gz spglib<span class="token function">cd</span> ./spglibpython setup.py <span class="token function">install</span></code></pre><p><strong>Spglib的具体使用方法详见官网介绍,主要是作为库来调用</strong></p>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>Python环境安装教程</title>
<link href="/2020/04/18/python-huan-jing/"/>
<url>/2020/04/18/python-huan-jing/</url>
<content type="html"><![CDATA[<h2 id="Anaconda安装(python环境安装)"><a href="#Anaconda安装(python环境安装)" class="headerlink" title="Anaconda安装(python环境安装)"></a><strong>Anaconda安装(python环境安装)</strong></h2><p>注:Anaconda里python的第三方包十分丰富,包含了所有的常用包,省却了许多麻烦。本人安装的是python3.6版的Anaconda</p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>官网:<a href="https://www.anaconda.com/distribution/" target="_blank" rel="noopener">https://www.anaconda.com/distribution/</a></p><p>老版本下载网址(清华大学镜像):<a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/" target="_blank" rel="noopener">https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/</a></p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 编译文件</p><pre class=" language-bash"><code class="language-bash"><span class="token function">bash</span> Anaconda3-5.2.0-Linux-x86_64.sh <span class="token comment" spellcheck="true">##根据提示选择</span><span class="token comment" spellcheck="true">##注:其中会问你是否添加到环境变量,最好选择yes。</span><span class="token function">source</span> ~/.bashrc <span class="token comment" spellcheck="true">#直接配置环境变量</span><span class="token comment" spellcheck="true">##若选择no</span>vim ~/.bashrc <span class="token comment" spellcheck="true">#按i进入编辑模式</span><span class="token comment" spellcheck="true">###添加如下命令</span><span class="token function">export</span> PATH<span class="token operator">=</span>/<span class="token variable">$dir</span>/bin:<span class="token variable">$PATH</span> <span class="token comment" spellcheck="true">#$dir:Anaconda安装位置</span><span class="token function">source</span> ~/.bashrc</code></pre><p>2 测试</p><pre class=" language-bash"><code class="language-bash">python <span class="token comment" spellcheck="true">#终端运行,可查看python版本,按住ctrl+D可推出python模式</span><span class="token function">which</span> python <span class="token comment" spellcheck="true">#查看python位置</span></code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>Intel编译器安装教程</title>
<link href="/2020/04/18/intel-huan-jing/"/>
<url>/2020/04/18/intel-huan-jing/</url>
<content type="html"><![CDATA[<h2 id="Intel-Parallel-Studio-XE-2019"><a href="#Intel-Parallel-Studio-XE-2019" class="headerlink" title="Intel Parallel Studio XE 2019"></a><strong>Intel Parallel Studio XE 2019</strong></h2><p>注:Intel编译器个人认为安装方便,库很齐全,MKL数学库很强大,对于安装其它软件来说十分便利。另外Intel编译器对于Intel处理器感觉运算速度会提升。</p><p><strong>后续所有软件都将基于Intel编译器安装,其它编译器安装方式请自行搜索。</strong></p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>该软件为商业版,学生可通过学生邮箱再Intel官网上申请教育版。</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压进入文件编译</p><pre class=" language-bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">su</span> <span class="token comment" spellcheck="true">#进入root模式</span><span class="token function">bash</span> install_GUI.sh <span class="token comment" spellcheck="true">#图形界面安装</span><span class="token function">bash</span> install.sh <span class="token comment" spellcheck="true">#命令界面</span><span class="token comment" spellcheck="true">##根据需要选择安装的库,不清楚可默认。</span></code></pre><p>2 配置环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc <span class="token comment" spellcheck="true">#打开配置文件,按i进入编辑模式</span><span class="token function">source</span> /<span class="token variable">$dir</span>/parallel_studio_xe_2019.1.053/psxevars.sh intel64 <span class="token comment" spellcheck="true">#添加该命令后保存退出。该命令可自动加载ifort icc MKL库等到环境变量。$dir:intel安装路径</span><span class="token comment" spellcheck="true">##注:Intel一般默认安装在/opt/intel里</span><span class="token function">source</span> ~/.bashrc <span class="token comment" spellcheck="true">#修改环境变量</span></code></pre><p>3 测试</p><pre class=" language-bash"><code class="language-bash"><span class="token comment" spellcheck="true">#检测是否有ifort和icc添加到环境变量</span><span class="token function">which</span> ifort<span class="token function">which</span> icc</code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>BoltzTraP-1.2.5安装教程</title>
<link href="/2020/04/18/boltztrap1-2-5-an-zhuang/"/>
<url>/2020/04/18/boltztrap1-2-5-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="BoltzTraP-1-2-5安装教程"><a href="#BoltzTraP-1-2-5安装教程" class="headerlink" title="BoltzTraP-1.2.5安装教程"></a><strong>BoltzTraP-1.2.5安装教程</strong></h2><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>小木虫网站上应该有。</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压文件并进入src文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -zxvf BoltzTraP.tar.gz<span class="token function">cd</span> boltztrap-1.2.5/src</code></pre><p>2 修改Makefile文件</p><p>修改后的Makefile如下:</p><pre class=" language-makefile"><code class="language-makefile">SHELL <span class="token operator">=</span> /bin/sh<span class="token comment" spellcheck="true"># gfortran</span><span class="token comment" spellcheck="true">#FC = gfortran</span><span class="token comment" spellcheck="true">#FC = gfortran-mp-4.5</span><span class="token comment" spellcheck="true">#FOPT = -g -march=native -funroll-loops -O3 -ffast-math -fgcse-lm -fgcse-sm -ffast-math -ftree-vectorize -fexternal-blas</span><span class="token comment" spellcheck="true">#FOPT += -g -p -pg -Wall -fbounds-check -finit-integer=-666 -finit-real=nan</span><span class="token comment" spellcheck="true">#LDFLAGS =</span>LIBS <span class="token operator">=</span> -llapack -lblas<span class="token comment" spellcheck="true"># ifort</span>FC <span class="token operator">=</span> ifortFOPT <span class="token operator">=</span> -FR -mp1 -w -prec_div -pc80 -pad -ip -DINTEL_VML<span class="token comment" spellcheck="true">#LDFLAGS = -L/opt/intel/mkl/10.0.1.014/lib/32/ -Vaxlib -static-libcxa -pthread</span><span class="token comment" spellcheck="true">#LIBS = -lmkl_lapack -lmkl_ia32 -lguide</span><span class="token comment" spellcheck="true"># ifort bis: other mkl options</span><span class="token comment" spellcheck="true">#LDFLAGS = $(FOPT) -L/opt/intel/mkl/10.0.1.014/lib/32 -pthread -i-static</span><span class="token comment" spellcheck="true">#LIBS = -lmkl_lapack -lmkl -lguide</span>LDFLAGS <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>FOPT<span class="token punctuation">)</span> -L/<span class="token variable">$MKLROOT/lib/intel64</span> -pthread -i-staticLIBS <span class="token operator">=</span> -lmkl_lapack -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lguide<span class="token comment" spellcheck="true"># generic</span>LINKER <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>FC<span class="token punctuation">)</span>LFLAGS <span class="token operator">=</span> -g <span class="token comment" spellcheck="true">#-pg</span>FGEN <span class="token operator">=</span> DESTDIR <span class="token operator">=</span> .EXECNAME <span class="token operator">=</span> BoltzTraP<span class="token comment" spellcheck="true">###############################################################################</span>FFLAGS <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>FGEN<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>FOPT<span class="token punctuation">)</span>EXEC <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>DESTDIR<span class="token punctuation">)</span>/<span class="token variable">$</span><span class="token punctuation">(</span>EXECNAME<span class="token punctuation">)</span><span class="token comment" spellcheck="true">#..............................................................................</span><span class="token comment" spellcheck="true">#</span><span class="token comment" spellcheck="true"># Object files common to both REAL and COMPLEX type subroutines</span><span class="token comment" spellcheck="true">#</span>OBJS <span class="token operator">=</span> gmlib2.o reallocate.o \ m_bandstructure.o m_input.o m_fermimod.o \ m_interfaces.o \ latgen2.o generic_field.o gtfnam.o gen_lattpoints.o \ BoltzTraP.o crystal_band.o wien_band.o phon_band.o generic_band.o pw_interface.o \ add_inv.o bandana.o stern1.o kdelta.o fite4.o sortag.o gplbands.o \ dos.o ifflim.o setfft.o c3fft.o boseintegrals.o fermiintegrals.o bands.o kcomp.o \ bz.o fermisurface.o setfft2.o write_dx_fs.o write_dx_bz.o write_cube_fs.o \ dos_histogram.o dos_tetra.o noculc.o dosvv.o readvv.o \ phonondrag.o<span class="token comment" spellcheck="true">#OBJS = \# reallocate.o defs.o modules.o broad.o add_inv.o \# c3fft.o gtfnam.o ifflim.o mknam.o read_energy.o \# transport.o stern.o kdelta.o gen_lattpoints.o fite4.o setfft.o \# starfkt2.o dos.o </span><span class="token symbol"><span class="token variable">$</span>(EXEC)</span><span class="token punctuation">:</span> <span class="token variable">$</span><span class="token punctuation">(</span>OBJS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LINKER<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LFLAGS<span class="token punctuation">)</span> -o <span class="token variable">$</span><span class="token punctuation">(</span>EXEC<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>OBJS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LDFLAGS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LIBS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LFLAGS<span class="token punctuation">)</span><span class="token symbol">clean</span><span class="token punctuation">:</span> rm -f *.o *.mod *.pc *.pcl *~<span class="token builtin">.SUFFIXES</span><span class="token punctuation">:</span> .F90 .o <span class="token builtin">.F90.o</span><span class="token punctuation">:</span> <span class="token variable">$</span><span class="token punctuation">(</span>FC<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>FFLAGS<span class="token punctuation">)</span> -c <span class="token variable">$<</span></code></pre><p>修改完成后编译</p><pre class=" language-bash"><code class="language-bash"><span class="token function">make</span></code></pre><p>3 添加到环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc <span class="token function">export</span> PATH<span class="token operator">=</span>/<span class="token variable">$dir</span>/src:<span class="token variable">$PATH</span> <span class="token comment" spellcheck="true">#$dir:boltztrap-1.2.5安装位置</span><span class="token function">source</span> ~/.bashrc</code></pre><h3 id="运行命令"><a href="#运行命令" class="headerlink" title="运行命令"></a>运行命令</h3><pre class=" language-bash"><code class="language-bash">x_trans BoltzTraP</code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>VASP5.4.4安装教程</title>
<link href="/2020/04/18/vasp-an-zhuang/"/>
<url>/2020/04/18/vasp-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="VASP-5-4-4-CPU-安装教程"><a href="#VASP-5-4-4-CPU-安装教程" class="headerlink" title="VASP-5.4.4(CPU)安装教程"></a><strong>VASP-5.4.4(CPU)安装教程</strong></h2><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>VASP软件需要付费,请自行下载。</p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 拷贝makefile.include到vasp文件夹</p><pre class=" language-sh"><code class="language-sh">tar -zxvf vasp.tar.gzcd vasp.5.4.4 #根据实际文件名字修改cp ./arch/makefile.include.linux_intel makefile.include #arch里面有很多例子根据需要修改</code></pre><p>2 修改makefile.include</p><pre class=" language-sh"><code class="language-sh">vim makefile.include##如果是Intel编译器,可以直接默认设置</code></pre><p>makefile.include基本如下所示:</p><pre class=" language-makefile"><code class="language-makefile"><span class="token comment" spellcheck="true"># Precompiler options</span>CPP_OPTIONS<span class="token operator">=</span> -DHOST<span class="token operator">=</span>\"LinuxIFC\"\ -DMPI -DMPI_BLOCK<span class="token operator">=</span>8000 \ -Duse_collective \ -DscaLAPACK \ -DCACHE_SIZE<span class="token operator">=</span>8000 \ -Davoidalloc \ -Duse_bse_te \ -Dtbdyn \ -Duse_shmemCPP <span class="token operator">=</span> fpp -f_com<span class="token operator">=</span>no -free -w0 <span class="token variable">$*$</span><span class="token punctuation">(</span>FUFFIX<span class="token punctuation">)</span> <span class="token variable">$*$</span><span class="token punctuation">(</span>SUFFIX<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>CPP_OPTIONS<span class="token punctuation">)</span>FC <span class="token operator">=</span> mpiifortFCL <span class="token operator">=</span> mpiifort -mkl<span class="token operator">=</span>sequential -lstdc++FREE <span class="token operator">=</span> -free -names lowercaseFFLAGS <span class="token operator">=</span> -assume byterecl -wOFLAG <span class="token operator">=</span> -O2 -xhostOFLAG_IN <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>OFLAG<span class="token punctuation">)</span>DEBUG <span class="token operator">=</span> -O0MKL_PATH <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/lib/intel64BLAS <span class="token operator">=</span>LAPACK <span class="token operator">=</span>BLACS <span class="token operator">=</span> -lmkl_blacs_intelmpi_lp64SCALAPACK <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>MKL_PATH<span class="token punctuation">)</span>/libmkl_scalapack_lp64.a <span class="token variable">$</span><span class="token punctuation">(</span>BLACS<span class="token punctuation">)</span>OBJECTS <span class="token operator">=</span> fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.oINCS <span class="token operator">=</span>-I<span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/<span class="token keyword">include</span>/fftwLLIBS <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>SCALAPACK<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LAPACK<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>BLAS<span class="token punctuation">)</span>OBJECTS_O1 <span class="token operator">+=</span> fftw3d.o fftmpi.o fftmpiw.oOBJECTS_O2 <span class="token operator">+=</span> fft3dlib.o<span class="token comment" spellcheck="true"># For what used to be vasp.5.lib</span>CPP_LIB <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>CPP<span class="token punctuation">)</span>FC_LIB <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>FC<span class="token punctuation">)</span>CC_LIB <span class="token operator">=</span> iccCFLAGS_LIB <span class="token operator">=</span> -OFFLAGS_LIB <span class="token operator">=</span> -O1FREE_LIB <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>FREE<span class="token punctuation">)</span>OBJECTS_LIB<span class="token operator">=</span> linpack_double.o getshmem.o<span class="token comment" spellcheck="true"># For the parser library</span>CXX_PARS <span class="token operator">=</span> icpcLIBS <span class="token operator">+=</span> parserLLIBS <span class="token operator">+=</span> -Lparser -lparser -lstdc++<span class="token comment" spellcheck="true"># Normally no need to change this</span>SRCDIR <span class="token operator">=</span> ../../srcBINDIR <span class="token operator">=</span> ../../bin<span class="token comment" spellcheck="true">#================================================</span><span class="token comment" spellcheck="true"># GPU Stuff</span>CPP_GPU <span class="token operator">=</span> -DCUDA_GPU -DRPROMU_CPROJ_OVERLAP -DUSE_PINNED_MEMORY -DCUFFT_MIN<span class="token operator">=</span>28 -UscaLAPACKOBJECTS_GPU <span class="token operator">=</span> fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d_gpu.o fftmpiw_gpu.oCC <span class="token operator">=</span> iccCXX <span class="token operator">=</span> icpcCFLAGS <span class="token operator">=</span> -fPIC -DADD_ -Wall -openmp -DMAGMA_WITH_MKL -DMAGMA_SETAFFINITY -DGPUSHMEM<span class="token operator">=</span>300 -DHAVE_CUBLASCUDA_ROOT <span class="token operator">?=</span> /usr/local/cuda/NVCC <span class="token operator">:=</span> <span class="token variable">$</span><span class="token punctuation">(</span>CUDA_ROOT<span class="token punctuation">)</span>/bin/nvcc -ccbin<span class="token operator">=</span>iccCUDA_LIB <span class="token operator">:=</span> -L<span class="token variable">$</span><span class="token punctuation">(</span>CUDA_ROOT<span class="token punctuation">)</span>/lib64 -lnvToolsExt -lcudart -lcuda -lcufft -lcublasGENCODE_ARCH <span class="token operator">:=</span> -gencode<span class="token operator">=</span>arch<span class="token operator">=</span>compute_30,code<span class="token operator">=</span>\"sm_30,compute_30\" \ -gencode<span class="token operator">=</span>arch<span class="token operator">=</span>compute_35,code<span class="token operator">=</span>\"sm_35,compute_35\" \ -gencode<span class="token operator">=</span>arch<span class="token operator">=</span>compute_60,code<span class="token operator">=</span>\"sm_60,compute_60\"MPI_INC <span class="token operator">=</span> <span class="token variable">$</span><span class="token punctuation">(</span>I_MPI_ROOT<span class="token punctuation">)</span>/include64/</code></pre><p>3 编译</p><pre class=" language-bash"><code class="language-bash"><span class="token function">make</span> all<span class="token comment" spellcheck="true">##编译成功会在bin文件夹里生成vasp_std, vasp_gam, vasp_ncl。</span><span class="token comment" spellcheck="true">##只生成其中一个命令,例如vasp_std</span><span class="token function">make</span> vasp_std <span class="token comment" spellcheck="true">#绝大多数vasp计算只需用到vasp_std</span></code></pre><p>4 配置环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc<span class="token comment" spellcheck="true">#添加路径</span><span class="token function">export</span> PATH<span class="token operator">=</span>/<span class="token variable">$dir</span>/bin:<span class="token variable">$PATH</span> <span class="token comment" spellcheck="true">#$dir:vasp安装地址。</span><span class="token function">source</span> ~/.bashrc<span class="token function">which</span> vasp_std <span class="token comment" spellcheck="true">#检查是否配置成功</span></code></pre><h3 id="运行命令"><a href="#运行命令" class="headerlink" title="运行命令"></a>运行命令</h3><p>```bash<br>mpirun -np 8 vasp_std > vasp.log #实时输出结果在vasp.log中</p>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>Thirdorder安装教程</title>
<link href="/2020/04/18/thirdorder-an-zhuang/"/>
<url>/2020/04/18/thirdorder-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="thirdorder安装教程"><a href="#thirdorder安装教程" class="headerlink" title="thirdorder安装教程"></a><strong>thirdorder安装教程</strong></h2><p>产生用于三阶力常数计算的文件</p><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>官网:<a href="http://www.shengbte.org/downloads" target="_blank" rel="noopener">http://www.shengbte.org/downloads</a></p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压进入文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -jxvf thirdorder-v1.1.1-8526f47.tar.bz2<span class="token function">cd</span> thirdorder</code></pre><p>2 修改setup.py 加入spglib的库路径</p><p>修改后如下</p><p>注:如果include文件夹里没有spglib文件夹,手动建一个并把spglib.h拷贝进去就行。</p><pre class=" language-python"><code class="language-python"><span class="token comment" spellcheck="true">#!/usr/bin/env python</span><span class="token comment" spellcheck="true"># -*- encoding: utf-8 -*-</span><span class="token keyword">import</span> numpy<span class="token keyword">from</span> distutils<span class="token punctuation">.</span>core <span class="token keyword">import</span> setup<span class="token keyword">from</span> distutils<span class="token punctuation">.</span>extension <span class="token keyword">import</span> Extension<span class="token comment" spellcheck="true"># Add the location of the "spglib/spglib.h" to this list if necessary.</span><span class="token comment" spellcheck="true"># Example: INCLUDE_DIRS=["/home/user/local/include"]</span>INCLUDE_DIRS <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"/home/wh/software/spglib-master/usr/local/include"</span><span class="token punctuation">]</span><span class="token comment" spellcheck="true"># Add the location of the spglib shared library to this list if necessary.</span><span class="token comment" spellcheck="true"># Example: LIBRARY_DIRS=["/home/user/local/lib"]</span>LIBRARY_DIRS <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"/home/wh/software/spglib-master/usr/local/lib"</span><span class="token punctuation">]</span><span class="token comment" spellcheck="true"># Set USE_CYTHON to True if you want include the cythonization in your build</span><span class="token comment" spellcheck="true"># process.</span>USE_CYTHON <span class="token operator">=</span> <span class="token boolean">False</span>ext <span class="token operator">=</span> <span class="token string">".pyx"</span> <span class="token keyword">if</span> USE_CYTHON <span class="token keyword">else</span> <span class="token string">".c"</span>extensions <span class="token operator">=</span> <span class="token punctuation">[</span> Extension<span class="token punctuation">(</span> <span class="token string">"thirdorder_core"</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"thirdorder_core"</span> <span class="token operator">+</span> ext<span class="token punctuation">]</span><span class="token punctuation">,</span> include_dirs<span class="token operator">=</span><span class="token punctuation">[</span>numpy<span class="token punctuation">.</span>get_include<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">+</span> INCLUDE_DIRS<span class="token punctuation">,</span> library_dirs<span class="token operator">=</span>LIBRARY_DIRS<span class="token punctuation">,</span> runtime_library_dirs<span class="token operator">=</span>LIBRARY_DIRS<span class="token punctuation">,</span> libraries<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"symspg"</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token keyword">if</span> USE_CYTHON<span class="token punctuation">:</span> <span class="token keyword">from</span> Cython<span class="token punctuation">.</span>Build <span class="token keyword">import</span> cythonize extensions <span class="token operator">=</span> cythonize<span class="token punctuation">(</span>extensions<span class="token punctuation">)</span>setup<span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token string">"thirdorder"</span><span class="token punctuation">,</span> ext_modules<span class="token operator">=</span>extensions<span class="token punctuation">)</span></code></pre><p>修改完成后编译安装</p><pre class=" language-bash"><code class="language-bash">python setup.py <span class="token function">install</span></code></pre><h3 id="运行命令"><a href="#运行命令" class="headerlink" title="运行命令"></a>运行命令</h3><p>以VASP程序的POSCAR为例</p><p>1 拷贝源代码中的 thirdorder_common.py 和 thirdorder_vasp.py 两个文件到POSCAR目录下</p><p>2 运行命令</p><pre class=" language-bash"><code class="language-bash">thirdorder_vasp.py sow<span class="token operator">|</span>reap na nb nc cutoff<span class="token punctuation">[</span>nm/-integer<span class="token punctuation">]</span><span class="token comment" spellcheck="true">#example</span>thirdorder_vasp.py sow<span class="token operator">|</span>reap 6 6 6 0.5 <span class="token comment" spellcheck="true">#0.5nm的截断半径</span>thirdorder_vasp.py sow<span class="token operator">|</span>reap 6 6 6 -3 <span class="token comment" spellcheck="true">#第三最近邻截断</span></code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
<entry>
<title>Publications</title>
<link href="/2020/04/17/publications/"/>
<url>/2020/04/17/publications/</url>
<content type="html"><![CDATA[<ol><li><p><a href="https://doi.org/10.1016/j.ssc.2019.02.004" target="_blank" rel="noopener"><strong>Wang Hao</strong>, Zhou Yu, Zeng Zhao-Yi, Cheng Yan, Chen Qi-Feng, First-principles study of elastic, thermal and optical properties of a metal-shrouded two-dimensional semiconductor Tl2O, <strong>Solid State Commun.</strong> 293 (2019) 40.</a></p></li><li><p><a href="https://www.sciencedirect.com/science/article/pii/S0022311519303472" target="_blank" rel="noopener"><strong>Wang Hao</strong>, Lan Jun-Qing, Hu Cui-E, Chen Xiang-Rong, Geng Hua-Yun, Electronic structure, elastic and thermal transport properties of thorium monocarbide based on first-principles study, <strong>J. Nucl. Mater.</strong> 524 (2019) 141.</a></p></li><li><p><a href="https://doi.org/10.1103/PhysRevB.104.134102" target="_blank" rel="noopener"><strong>Hao Wang</strong>, J. Li, X. M. Zhou, Y. Tan, L. Hao, Y. Y. Yu, C. D. Dai, K. Jin, Q. Wu, Q. M. Jing, X. R. Chen, X. Z. Yan, Y. X. Wang, and Hua Y. Geng, Evidence for mechanical softening-hardening dual anomaly in transition metals from shock-compressed vanadium, <strong>Physical Review B</strong> 134102 (2021) 104.</a></p></li></ol>]]></content>
</entry>
<entry>
<title>ShengBTE安装教程</title>
<link href="/2020/04/17/shengbte-an-zhuang/"/>
<url>/2020/04/17/shengbte-an-zhuang/</url>
<content type="html"><![CDATA[<h2 id="ShengBTE安装教程"><a href="#ShengBTE安装教程" class="headerlink" title="ShengBTE安装教程"></a><strong>ShengBTE安装教程</strong></h2><h3 id="软件下载地址"><a href="#软件下载地址" class="headerlink" title="软件下载地址"></a>软件下载地址</h3><p>官网:<a href="http://www.shengbte.org/downloads" target="_blank" rel="noopener">http://www.shengbte.org/downloads</a></p><h3 id="安装编译"><a href="#安装编译" class="headerlink" title="安装编译"></a>安装编译</h3><p>1 解压进入文件夹</p><pre class=" language-bash"><code class="language-bash"><span class="token function">tar</span> -jxvf ShengBTE-v1.1.1-8a63749.tar.bz2<span class="token function">cd</span> ShengBTE/src</code></pre><p>2 修改arch.make文件</p><p>修改后文件如下</p><pre class=" language-makefile"><code class="language-makefile"><span class="token keyword">export</span> FFLAGS<span class="token operator">=</span>-traceback -debug -O2 -static_intel<span class="token keyword">export</span> LDFLAGS<span class="token operator">=</span>/home/wh/software/spglib-master/usr/local/lib/libsymspg.a<span class="token keyword">export</span> MPIFC<span class="token operator">=</span>mpiifortMKL<span class="token operator">=</span><span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/lib/intel64/libmkl_lapack95_lp64.a -Wl,--start-group \<span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/lib/intel64/libmkl_intel_lp64.a \<span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/lib/intel64/libmkl_sequential.a \<span class="token variable">$</span><span class="token punctuation">(</span>MKLROOT<span class="token punctuation">)</span>/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm<span class="token keyword">export</span> LAPACK<span class="token operator">=</span><span class="token variable">$</span><span class="token punctuation">(</span>MKL<span class="token punctuation">)</span><span class="token keyword">export</span> LIBS<span class="token operator">=</span><span class="token variable">$</span><span class="token punctuation">(</span>LAPACK<span class="token punctuation">)</span></code></pre><p>修改完成后</p><pre class=" language-bash"><code class="language-bash"><span class="token function">make</span></code></pre><p>3 添加环境变量</p><pre class=" language-bash"><code class="language-bash">vim ~/.bashrc<span class="token comment" spellcheck="true">#加入如下命令</span><span class="token function">export</span> PATH<span class="token operator">=</span>/<span class="token variable">$dir</span>/src:<span class="token variable">$PATH</span> <span class="token comment" spellcheck="true">#$dir:ShengBTE文件夹路径</span><span class="token comment" spellcheck="true">#保存退出</span><span class="token function">source</span> ~/.bashrc</code></pre><h3 id="运行命令"><a href="#运行命令" class="headerlink" title="运行命令"></a>运行命令</h3><pre class=" language-bash"><code class="language-bash">mpirun -np 16 ShengBTE 2<span class="token operator">></span>BTE.err <span class="token operator">></span>BTE.out</code></pre>]]></content>
<categories>
<category> 计算软件安装教程 </category>
</categories>
<tags>
<tag> 安装教程 </tag>
</tags>
</entry>
</search>