File: lesson_base3.html

package info (click to toggle)
abinit 7.8.2-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 278,292 kB
  • ctags: 19,095
  • sloc: f90: 463,759; python: 50,419; xml: 32,095; perl: 6,968; sh: 6,209; ansic: 4,705; fortran: 951; objc: 323; makefile: 43; csh: 42; pascal: 31
file content (418 lines) | stat: -rw-r--r-- 19,716 bytes parent folder | download
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
<html>
<head>
<title>Tutorial #3</title>
</head>
<body bgcolor="#ffffff">

<hr>
<h1>ABINIT, third lesson of the tutorial: </h1>
<h2>Crystalline silicon. </h2>
<hr>
<p>This lesson aims at showing you how to get
the following physical properties, for an insulator :
<ul>
<li>the total energy
<li>the lattice parameter
<li>the band structure (actually, the Kohn-Sham band structure)
</ul>
You will learn about the use of k-points, as well
as the smearing of the plane-wave kinetic energy cut-off.

<p>This lesson should take about 1 hour.

<h5>Copyright (C) 2000-2014 ABINIT group (XG,RC)
<br> This file is distributed under the terms of the GNU General Public License, see
~abinit/COPYING or <a href="http://www.gnu.org/copyleft/gpl.txt">
http://www.gnu.org/copyleft/gpl.txt </a>.
<br> For the initials of contributors, see ~abinit/doc/developers/contributors.txt .
</h5>

<script type="text/javascript" src="list_internal_links.js"> </script>

<br>&nbsp;
<h3><b>Content of lesson 3</b></h3>

<ul>
  <li><a href="lesson_base3.html#31">3.1</a> Computing the total energy of silicon at
    fixed number of k points.</li>
  <li><a href="lesson_base3.html#32">3.2</a> Starting the convergence study with respect
    to k points</li>
  <li><a href="lesson_base3.html#33">3.3</a> Actually performing the convergence study
    with respect to k points</li>
  <li><a href="lesson_base3.html#34">3.4</a> Determination of the lattice parameters</li>
  <li><a href="lesson_base3.html#35">3.5</a> Computing the band structure</li>
</ul>

<br>
<hr>

<a name="31">&nbsp;</a>
<h3><b>
3.1.
Computing the total energy of silicon at fixed number of k points.
</b></h3>

<p><i>Before beginning, you might consider to work in a different subdirectory
  as for lesson_base1 or lesson_base2 . Why not "Work3" ?</i>

<p>The file ~abinit/tests/tutorial/Input/tbase3_x.files lists the file
  names and root names. You can copy it in the Work3 directory and change it
  as you did for the tbase1_x.files and tbase2_x.files files. You can also copy
  the file ~abinit/tests/tutorial/Input/tbase3_1.in in Work3. This is your
  input file. You should edit it, read it carefully, have a look at the following
  "new" input variables, and their explanation :
<ul>
  <li><a href="../input_variables/varbas.html#rprim" target="kwimg">rprim</a>
  <li><a href="../input_variables/varbas.html#xred" target="kwimg">xred</a> (used instead of xcart)
  <li><a href="../input_variables/varbas.html#kptopt" target="kwimg">kptopt</a>,
    <a href="../input_variables/varbas.html#ngkpt" target="kwimg">ngkpt</a>,
    <a href="../input_variables/varbas.html#nshiftk" target="kwimg">nshiftk</a>,
    <a href="../input_variables/varbas.html#shiftk" target="kwimg">shiftk</a>,
    <a href="../input_variables/vargs.html#kptrlatt" target="kwimg">kptrlatt</a>,
    (not easy ... take your time !)
  <li><a href="../input_variables/vargs.html#diemac" target="kwimg">diemac</a> (compared to isolated
    molecules, another value is used, while <a href="../input_variables/vargs.html#diemix" target="kwimg">diemix</a>
    has been suppressed).
</ul>
<p>Note also the following :
  you will work at fixed <a href="../input_variables/varbas.html#ecut" target="kwimg">ecut</a>
    (=8Ha). It is implicit that in "real life",
  you should do a convergence test with respect to
  <a href="../input_variables/varbas.html#ecut" target="kwimg">ecut</a> ...
<br>
Here, a suitable <a href="../input_variables/varbas.html#ecut" target="kwimg">ecut</a> is given
to you. It will allow to obtain 0.2% relative accuracy on lattice parameters.
<p>When you have read the input file, you can run the code, as usual
 (it will run for a few seconds).
<br>Then, read the output file, and note the total energy.
<pre>
   etotal   -8.8662238960E+00
</pre>

<hr>
<a name="32">&nbsp;</a>
<h3><b>
3.2.
Starting the convergence study with respect to k points
</b></h3>

<p>There is of course a convergence study associated with the sampling
of the Brillouin zone. You should examine different grids,
of increasing resolution. You might try the following series
of grids :
<pre>
ngkpt1  2 2 2
ngkpt2  4 4 4
ngkpt3  6 6 6
ngkpt4  8 8 8
</pre>
However, the associated number of k points in the irreducible
Brillouin zone grows very fast. It is
<pre>
nkpt1  2
nkpt2 10
nkpt3 28
nkpt4 60
</pre>
  ABINIT computes automatically this number of k points, from the definition of the grid
  and the symmetries.
<br>You might nevertheless define an input nkpt value in the input file,
  in which case ABINIT will compare its computed value (from the grid) with this input
  value. We take this opportunity to examine the behaviour of ABINIT
  when a problem is detected. Let's suppose that with <code>ngkpt1 4 4 4</code> ,
  one mentions <code>nkpt1 2</code> .
  The input file ~abinit/tests/tutorial/Input/tbase3_2.in is an example.
  Do not forget to change tbase3_x.files,
  if you are using that file name . The message that you get a few dozen of lines before the end of the
  log file is :
<pre>
--- !BUG
message: |
    The argument nkpt=     2, does not match
      the number of k points generated by kptopt, kptrlatt, shiftk,
      and the eventual symmetries, that is, nkpt=    10.
      However, note that it might be due to the user,
      if nkpt is explicitely defined in the input file.
      In this case, please check your input file.
src_file: getkgrid.F90
src_line: 415
...

  Action : contact ABINIT group.
</pre>

<p>This is a typical ABINIT error message. It states what is the problem that causes the stop of ABINIT,
  then suggests that it might be due to an error in the input file, namely, an erroneous value of nkpt.
  The expected value, 
  <a href="../input_variables/varbas.html#nkpt" target="kwimg">nkpt</a> 10. 
  is mentioned before the notice that the input file might be erroneous.
  Then, the file at which the problem occured is mentioned, as well as the number of the line in that file. </p>

<p>As the computation of <a href="../input_variables/varbas.html#nkpt" target="kwimg">nkpt</a>
for specific grids of k points is not an easy task, while the even more
important selection of specific economical grids (the best ratio
between the accuracy of the integration in the Brillouin zone
and the number of k-points) is more difficult, some help to the
user is provided by ABINIT. ABINIT is able to examine automatically
different k point grids, and to propose the best grids for integration.
This is described in the abinit_help file, see the input
variable <a href="../input_variables/varfil.html#prtkpt" target="kwimg">prtkpt</a>,
and the associated characterisation of the integral accuracy, described
in <a href="../input_variables/vargs.html#kptrlen" target="kwimg">kptrlen</a>.
The generation of lists of k-point sets is done in different test cases,
in the directory ~abinit/tests/v2 . You can directly have a look at the output
files in ~abinit/testis/v2/Refs , the output files for the tests 61 to 73.

<p>When one begins the study of a new material, it is strongly advised
to examine first the list of k points grids, and select (at least)
three efficient ones, for the k point convergence study.
Do not forget that the CPU time will be linearly proportional to the
number of k points to be treated : using 10 k points will take five
more time than using 2 k points. Even for a similar accuracy of the
Brillouin zone integration (about the same value of
<a href="../input_variables/vargs.html#kptrlen" target="kwimg">kptrlen</a>),
it might be easy to generate a grid
that will fold to 10 k points in the irreducible Brillouin zone, as well as
one that will fold to 2 k points in the irreducible Brillouin zone.
The latter is clearly to be preferred !
<p>
<hr>

<p> <a name="33">&nbsp;</a> </p>
<h3><b>
3.3.
Actually performing the convergence study with respect to k points
</b></h3>

<p>In order to understand k-point grids, you should read the Monkhorst and Pack
  paper, <cite>Phys. Rev. B 13, 5188 (1976)</cite> ... Well, maybe not immediately
  ... In the meantime, you can try the above-mentioned convergence study.
<p>The input file ~abinit/tests/tutorial/Input/tbase3_3.in is an example,
  while ~abinit/tests/tutorial/Refs/tbase3_3.out is a reference output
  file. In this output file, you should have a look at the echo of input variables.
  As you know, these are preprocessed, and, in particular, <a href="../input_variables/varbas.html#ngkpt" target="kwimg">ngkpt</a>
  and <a href="../input_variables/varbas.html#shiftk" target="kwimg">shiftk</a> are used to generate
  the list of k points (<a href="../input_variables/varbas.html#kpt" target="kwimg">kpt</a>) and
  their weights (<a href="../input_variables/varbas.html#wtk" target="kwimg">wtk</a>). You should
  read the information about <a href="../input_variables/varbas.html#kpt" target="kwimg">kpt</a>
  and <a href="../input_variables/varbas.html#wtk" target="kwimg">wtk</a>.
<p>From the output file, here is the evolution of total energy per unit cell :

<pre>
    etotal1  -8.8662238960E+00
    etotal2  -8.8724909739E+00
    etotal3  -8.8726017432E+00
    etotal4  -8.8726056405E+00
</pre>
<p>The difference between dataset 3 and dataset 4 is rather small. Even the dataset
  2 gives an accuracy of about 0.0001 Ha <br>
  So, our converged value for the total energy, at fixed <a href="../input_variables/varbas.html#acell" target="kwimg">acell</a>,
  fixed <a href="../input_variables/varbas.html#ecut" target="kwimg">ecut</a>, is -8.8726 Ha .

<p>
<hr>



<p> <a name="34">&nbsp;</a>
<h3><b>
3.4.
Determination of the lattice parameters.
</b></h3>

<p>The input variable "<a href="../input_variables/varrlx.html#optcell" target="kwimg">optcell</a>"
  governs the automatic optimisation of cell shape and volume. <br>
  For the automatic optimisation of cell volume, use :
<pre>
optcell 1
ionmov 3
ntime 10
dilatmx 1.05
ecutsm 0.5
</pre>
<p>You should read the indications about <a href="../input_variables/varrlx.html#dilatmx" target="kwimg">dilatmx</a>
  and <a href="../input_variables/varrlx.html#ecutsm" target="kwimg">ecutsm</a>. <br>
  Do not test all the k point grids, only those with nkpt 2 and 10.

<p>The input file ~abinit/tests/tutorial/Input/tbase3_4.in is an example,
  while ~abinit/tests/tutorial/Refs/tbase3_4.out is a reference output
  file. <br>

<p>You should obtain the following evolution
of the lattice parameters :
<pre>
     acell1   1.0233363682E+01  1.0233363682E+01  1.0233363682E+01 Bohr
     acell2   1.0216447241E+01  1.0216447241E+01  1.0216447241E+01 Bohr
</pre>
with the following very small residual stresses :
<pre>
    strten1   1.8591719160E-07  1.8591719160E-07  1.8591719160E-07
              0.0000000000E+00  0.0000000000E+00  0.0000000000E+00
    strten2  -2.8279720007E-08 -2.8279720007E-08 -2.8279720007E-08
              0.0000000000E+00  0.0000000000E+00  0.0000000000E+00
</pre>
<p>The stress tensor is given in Hartree/Bohr^3, and the order
of the components is
<pre>
                        11  22  33
                        23  13  12
</pre>
<p>There is only a 0.13% relative difference between <a href="../input_variables/varbas.html#acell" target="kwimg">acell</a>1
  and <a href="../input_variables/varbas.html#acell" target="kwimg">acell</a>2 . <br>
  So, our converged LDA value for Silicon, with the 14si.pspnc pseudopotential
  (see the tbase3_x.files file) is 10.216
  Bohr (actually 10.21644...), that is 5.406 Angstrom. The experimental value is <code>5.431 Angstrom
  at 25 degree Celsius</code>, see <cite>R.W.G. Wyckoff, Crystal structures
  Ed. Wiley and sons, New-York (1963).</cite>
<p>
<hr>
<a name="35">&nbsp;</a>
<h3><b>3.5.
Computing the band structure</b></h3>

<p>We fix the parameters <a href="../input_variables/varbas.html#acell" target="kwimg">acell</a>
  to the theoretical value of 3*10.216, and we fix also the grid of k points (the
  4x4x4 FCC grid, equivalent to a 8x8x8 Monkhorst-pack grid) <br>
  We will ask for 8 bands (4 valence and 4 conduction).

<p>A band structure can be computed by solving the Kohn-Sham equation for
many different k points, along different lines of the Brillouin zone.
<br>The potential that enters the Kohn-Sham must be derived from a previous
self-consistent calculation, and will not vary during the scan of different
k-point lines.
<br>Suppose that you want to make a L-Gamma-X-(U-)Gamma circuit, with 10,
12 and 17 divisions for each line (each segment has a different length
in reciprocal space, and these divisions give approximately the same
distance between points along a line).
<br>The circuit will be obtained easily by the following choice
of segment end points :
<pre>
L     (1/2 0 0)
Gamma (0 0 0)
X     (0 1/2 1/2)
Gamma (1 1 1)
</pre>
<i>Note :
<ol>
 <li>the last Gamma point is in another cell of the reciprocal
                   space than the first one, this choice allows to construct
                   the X-U-Gamma line easily ;</li>
 <li>the k-points are specified
              using reduced coordinates - in agreement with the input setting of the
              primitive 2-atom unit cell - in standard textbooks, you will often find
              the L, Gamma or X point given in coordinates of the conventional
              8-atom cell : the above-mentioned circuit is then
              (1/2 1/2 1/2)-(0 0 0)-(1 0 0)-(1 1 1), but such (conventional) coordinates
              cannot be used with the 2-atom (non-conventional) cell.</li>
</ol>
</i>
<p>So, you should set up in your input file, for the first dataset, a usual SCF
  calculation in which you output the density
  (<a href="../input_variables/varfil.html#prtden" target="kwimg">prtden</a>
  1), and, for the second dataset :
<ul>
  <li>fix <a href="../input_variables/varbas.html#iscf" target="kwimg">iscf</a> to -2, to make a
    non-self-consistent calculation ;
  <li>define <a href="../input_variables/varfil.html#getden" target="kwimg">getden</a> -1, to take
    the output density of dataset 1 ;
  <li>set <a href="../input_variables/varbas.html#nband" target="kwimg">nband</a> to 8 ;
  <li>set <a href="../input_variables/varbas.html#kptopt" target="kwimg">kptopt</a> to -3, to define
    three segments in the brillouin Zone ;
  <li>set <a href="../input_variables/vargs.html#ndivk" target="kwimg">ndivk</a> to 10 12 17
    (this means a circuit defined by 4 points, with 10 divisions of the first
    segment, 12 divisions of the second, 17 divisions of the third)
  <li>set <a href="../input_variables/vargs.html#kptbounds" target="kwimg">kptbounds</a> to
    <pre>
                0.5  0.0  0.0 # L point
                0.0  0.0  0.0 # Gamma point
                0.0  0.5  0.5 # X point
                1.0  1.0  1.0 # Gamma point in another cell.
</pre>
  <li>set <a href="../input_variables/vargs.html#enunit" target="kwimg">enunit</a> to 1, in order
    to have eigenenergies in eV
  <li>the only tolerance criterion admitted for non-self-consistent calculations
    is <a href="../input_variables/varbas.html#tolwfr" target="kwimg">tolwfr</a>. You should set
    it to 1.0d-10 (or so), and suppress <a href="../input_variables/varbas.html#toldfe" target="kwimg">toldfe</a>.
</ul>
<p>The input file ~abinit/tests/tutorial/Input/tbase3_5.in is an example,
  while ~abinit/tests/tutorial/Refs/tbase3_5.out is a reference output
  file.
<p>You should find the band structure starting at (second dataset):
<pre>
 Eigenvalues (   eV  ) for nkpt=  40  k points:
 Eigenvalues (   eV  ) for nkpt=  40  k points:
 kpt#   1, nband=  8, wtk=  1.00000, kpt=  0.5000  0.0000  0.0000 (reduced coord)
  -3.78815  -1.15872   4.69668   4.69668   7.38795   9.23867   9.23867  13.45707
 kpt#   2, nband=  8, wtk=  1.00000, kpt=  0.4500  0.0000  0.0000 (reduced coord)
  -3.92759  -0.95774   4.71292   4.71292   7.40692   9.25561   9.25561  13.48927
 kpt#   3, nband=  8, wtk=  1.00000, kpt=  0.4000  0.0000  0.0000 (reduced coord)
  -4.25432  -0.44393   4.76726   4.76726   7.46846   9.31193   9.31193  13.57737
 kpt#   4, nband=  8, wtk=  1.00000, kpt=  0.3500  0.0000  0.0000 (reduced coord)
  -4.64019   0.24941   4.85732   4.85732   7.56855   9.38323   9.38323  13.64601
 ....
</pre>
<p>One needs a graphical tool to represent all these data ...
(For the MAPR 2451 lecture : try with MATLAB).
In a separate file (_EIG), you will find the list of k-points and eigenenergies
(the input variable <a href="../input_variables/varfil.html#prteig" target="kwimg">prteig</a> is set by default to 1).

<p>Even without a graphical tool we will have a quick look
at the values at L, Gamma, X and Gamma again :
<pre>
 kpt#   1, nband=  8, wtk=  1.00000, kpt=  0.5000  0.0000  0.0000 (reduced coord)
  -3.78815  -1.15872   4.69668   4.69668   7.38795   9.23867   9.23867  13.45707

 kpt#  11, nband=  8, wtk=  1.00000, kpt=  0.0000  0.0000  0.0000 (reduced coord)
  -6.17005   5.91814   5.91814   5.91814   8.44836   8.44836   8.44836   9.17755

 kpt#  23, nband=  8, wtk=  1.00000, kpt=  0.0000  0.5000  0.5000 (reduced coord)
  -1.96393  -1.96393   3.00569   3.00569   6.51173   6.51173  15.95524  15.95524

 kpt#  40, nband=  8, wtk=  1.00000, kpt=  1.0000  1.0000  1.0000 (reduced coord)
  -6.17005   5.91814   5.91814   5.91814   8.44836   8.44836   8.44836   9.17755

</pre>
The last gamma is exactly equivalent to the first gamma.
It can be checked that the top of the valence band is obtained
at Gamma (=5.91814 eV). The width of the valence band is
12.09 eV, the lowest unoccupied state at X is 0.594 eV higher
than the top of the valence band, at Gamma. The Si is described
as an indirect band gap material (this is correct), with a band-gap of
about 0.594 eV (this is quantitatively quite wrong : the
experimental value 1.17 eV is at 25 degree
Celsius). The minimum of the conduction
band is even slightly displaced with respect to X, see kpt # 21 .
This underestimation of the band gap is well-known (the famous DFT band-gap problem).
In order to obtain correct band gaps, you need to go beyond the
Kohn-Sham Density Functional Theory : use the GW approximation.
This is described in <a href="lesson_gw1.html">the first lesson on the GW approximation</a>.

<p>For experimental data and band structure representation, see
<br>M.L. Cohen and J.R. Chelikowski
<br><cite>Electronic structure and optical properties of semiconductors</cite>
<br>Springer-Verlag New-York (1988).

<p>There is a subtlety that is worth to comment about. In non-self-consistent
calculations, like those performed in the present band structure calculation,
with <a href="../input_variables/varbas.html#iscf" target="kwimg">iscf</a>=-2, not all bands
are converged within the tolerance <a href="../input_variables/varbas.html#tolwfr" target="kwimg">tolwfr</a>.
Indeed, the two upper bands (by default) have not been taken into account
to apply this convergence criterion: they constitute a "buffer".
The number of such
"buffer" bands is governed by the input variable
<a href="../input_variables/vargs.html#nbdbuf" target="kwimg">nbdbuf</a>.

<p> It can happen that the highest (or two highest) band(s), if not separated by a gap from
non-treated bands, can exhibit a very slow convergence rate. This buffer
allows to achieve convergence of "important", non-buffer bands.
In the present case, 6 bands have been converged with a residual better
than <a href="../input_variables/varbas.html#tolwfr" target="kwimg">tolwfr</a>, while the
two upper bands are less converged (still sufficiently for graphical representation
of the band structure). In order to achieve the same convergence
for all 8 bands, it is advised to use
<a href="../input_variables/varbas.html#nband" target="kwimg">nband</a>=10 (that is, 8 + 2).

<script type="text/javascript" src="list_internal_links.js"> </script>

</body>
</html>