• R/O
  • HTTP
  • SSH
  • HTTPS

libtetrabz: コミット

テトラへドロン法ライブラリ


コミットメタ情報

リビジョン84b2f239d76883643ec5fd518721636954c3860d (tree)
日時2017-07-05 01:15:02
作者mitsuaki1987 <kawamitsuaki@gmai...>
コミッターmitsuaki1987

ログメッセージ

Backup

変更サマリ

差分

--- a/doc/en/index.rst
+++ b/doc/en/index.rst
@@ -10,11 +10,11 @@ Welcome to LibTetraBZ's documentation!
1010 :maxdepth: 3
1111
1212 libtetrabz_overview_en
13- libtetrabz_copy_en
1413 libtetrabz_install_en
1514 libtetrabz_link_en
1615 libtetrabz_routine_en
1716 libtetrabz_sample_en
17+ libtetrabz_copy_en
1818 libtetrabz_contact_en
1919 libtetrabz_app_en
2020 libtetrabz_ref_en
--- a/doc/en/libtetrabz_routine_en.rst
+++ b/doc/en/libtetrabz_routine_en.rst
@@ -5,32 +5,28 @@ You can call a subroutine in this library as follows:
55
66 .. code-block:: fortran
77
8- use libtetrabz, only : libtetrabz_occ
8+ USE libtetrabz, ONLY : libtetrabz_occ
99
10- call libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
10+ CALL libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
1111
1212 Every subroutine has a name starts from ``libtetrabz_``.
13-MPI version has a name starts from ``libtetrabz_mpi_``
14-and it requires ``use libtetrabz_mpi``.
15-The difference of arguments between the serial
16-version and the MPI version is an integer input argument ``comm``
17-which specifies the communicator.
1813
1914 For the C program, it can be used as follows:
2015
21-.. code-block:: fortran
16+.. code-block:: c
2217
2318 #include "libtetrabz.h"
2419
25- libtetrabz_mp_libtetrabz_occ_(&ltetra,bvec,&nb,nge,eig,ngw,wght)
20+ libtetrabz_occ(&ltetra,bvec,&nb,nge,eig,ngw,wght)
2621
27-The name of a function in C becomes
28-``libtetrabz_mp_`` + fortran subroutine name + ``_``.
29-For the MPI version, ``libtetrabz_mpi.h``
30-should be included, and the name of a function becomes
31-``libtetrabz_mpi_mp_`` + fortran subroutine name + ``_``.
3222 Variables should be passed as pointers.
3323 Arrays should be declared as one dimensional arrays.
24+Also, the communicator argument for the routine should be
25+transformed from the C/C++'s one to the fortran's one as follows.
26+
27+.. code-block:: c
28+
29+ comm_f = MPI_Comm_c2f(comm_c);
3430
3531 Total energy, charge density, occupations
3632 -----------------------------------------
@@ -44,14 +40,13 @@ Total energy, charge density, occupations
4440
4541 .. code-block:: fortran
4642
47- call libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
48- call libtetrabz_mpi_occ(ltetra,comm,bvec,nb,nge,eig,ngw,wght)
43+ CALL libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght,comm)
4944
5045 Parameters
5146
5247 .. code-block:: fortran
5348
54- integer,intent(in) :: ltetra
49+ INTEGER,INTENT(IN) :: ltetra
5550 ..
5651
5752 Specify the type of the tetrahedron method.
@@ -60,15 +55,7 @@ Parameters
6055
6156 .. code-block:: fortran
6257
63- integer,intent(in) :: comm
64- ..
65-
66- Only for MPI version.
67- Specify the communicator.
68-
69- .. code-block:: fortran
70-
71- real(8),intent(in) :: bvec(3,3)
58+ REAL(8),INTENT(IN) :: bvec(3,3)
7259 ..
7360
7461 Reciprocal lattice vectors (arbitrary unit).
@@ -77,14 +64,14 @@ Parameters
7764
7865 .. code-block:: fortran
7966
80- integer,intent(in) :: nb
67+ INTEGER,INTENT(IN) :: nb
8168 ..
8269
8370 The number of bands.
8471
8572 .. code-block:: fortran
8673
87- integer,intent(in) :: nge(3)
74+ INTEGER,INTENT(IN) :: nge(3)
8875 ..
8976
9077 Specify the :math:`k`\ -grid
@@ -92,7 +79,7 @@ Parameters
9279
9380 .. code-block:: fortran
9481
95- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
82+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
9683 ..
9784
9885 The orbital energy measured from the Fermi energy
@@ -100,7 +87,7 @@ Parameters
10087
10188 .. code-block:: fortran
10289
103- integer,intent(in) :: ngw(3)
90+ INTEGER,INTENT(IN) :: ngw(3)
10491 ..
10592
10693 Specify the :math:`k`\ -grid for output integration weights.
@@ -108,11 +95,20 @@ Parameters
10895
10996 .. code-block:: fortran
11097
111- real(8),intent(out) :: wght(nb,ngw(1),ngw(2),ngw(3))
98+ REAL(8),INTENT(OUT) :: wght(nb,ngw(1),ngw(2),ngw(3))
11299 ..
113100
114101 The integration weights.
115102
103+ .. code-block:: fortran
104+
105+ INTEGER,INTENT(IN),OPTIONAL :: comm
106+ ..
107+
108+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
109+ Only for MPI / Hybrid parallelization.
110+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
111+
116112 Fermi energy and occupations
117113 ----------------------------
118114
@@ -125,14 +121,13 @@ Fermi energy and occupations
125121
126122 .. code-block:: fortran
127123
128- call libtetrabz_fermieng(ltetra,bvec,nb,nge,eig,ngw,wght,ef,nelec)
129- call libtetrabz_mpi_fermieng(ltetra,comm,bvec,nb,nge,eig,ngw,wght,ef,nelec)
124+ CALL libtetrabz_fermieng(ltetra,bvec,nb,nge,eig,ngw,wght,ef,nelec,comm)
130125
131126 Parameters
132127
133128 .. code-block:: fortran
134129
135- integer,intent(in) :: ltetra
130+ INTEGER,INTENT(IN) :: ltetra
136131 ..
137132
138133 Specify the type of the tetrahedron method.
@@ -141,15 +136,7 @@ Parameters
141136
142137 .. code-block:: fortran
143138
144- integer,intent(in) :: comm
145- ..
146-
147- Only for MPI version.
148- Specify the communicator.
149-
150- .. code-block:: fortran
151-
152- real(8),intent(in) :: bvec(3,3)
139+ REAL(8),INTENT(IN) :: bvec(3,3)
153140 ..
154141
155142 Reciprocal lattice vectors (arbitrary unit).
@@ -158,14 +145,14 @@ Parameters
158145
159146 .. code-block:: fortran
160147
161- integer,intent(in) :: nb
148+ INTEGER,INTENT(IN) :: nb
162149 ..
163150
164151 The number of bands.
165152
166153 .. code-block:: fortran
167154
168- integer,intent(in) :: nge(3)
155+ INTEGER,INTENT(IN) :: nge(3)
169156 ..
170157
171158 Specify the :math:`k`\ -grid
@@ -173,7 +160,7 @@ Parameters
173160
174161 .. code-block:: fortran
175162
176- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
163+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
177164 ..
178165
179166 The orbital energy measured from the Fermi energy
@@ -181,7 +168,7 @@ Parameters
181168
182169 .. code-block:: fortran
183170
184- integer,intent(in) :: ngw(3)
171+ INTEGER,INTENT(IN) :: ngw(3)
185172 ..
186173
187174 Specify the :math:`k`\ -grid for output integration weights.
@@ -189,25 +176,34 @@ Parameters
189176
190177 .. code-block:: fortran
191178
192- real(8),intent(out) :: wght(nb,ngw(1),ngw(2),ngw(3))
179+ REAL(8),INTENT(OUT) :: wght(nb,ngw(1),ngw(2),ngw(3))
193180 ..
194181
195182 The integration weights.
196183
197184 .. code-block:: fortran
198185
199- real(8),intent(out) :: ef
186+ REAL(8),INTENT(OUT) :: ef
200187 ..
201188
202189 The Fermi energy.
203190
204191 .. code-block:: fortran
205192
206- real(8),intent(in) :: nelec
193+ REAL(8),INTENT(IN) :: nelec
207194 ..
208195
209196 The number of (valence) electrons per spin.
210197
198+ .. code-block:: fortran
199+
200+ INTEGER,INTENT(IN),OPTIONAL :: comm
201+ ..
202+
203+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
204+ Only for MPI / Hybrid parallelization.
205+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
206+
211207 Partial density of states
212208 -------------------------
213209
@@ -220,14 +216,13 @@ Partial density of states
220216
221217 .. code-block:: fortran
222218
223- call libtetrabz_dos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0)
224- call libtetrabz_mpi_dos(ltetra,comm,bvec,nb,nge,eig,ngw,wght,ne,e0)
219+ CALL libtetrabz_dos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0,comm)
225220
226221 Parameters
227222
228223 .. code-block:: fortran
229224
230- integer,intent(in) :: ltetra
225+ INTEGER,INTENT(IN) :: ltetra
231226 ..
232227
233228 Specify the type of the tetrahedron method.
@@ -236,15 +231,102 @@ Parameters
236231
237232 .. code-block:: fortran
238233
239- integer,intent(in) :: comm
234+ REAL(8),INTENT(IN) :: bvec(3,3)
235+ ..
236+
237+ Reciprocal lattice vectors (arbitrary unit).
238+ Because they are used to choose the direction of tetrahedra,
239+ only their ratio is used.
240+
241+ .. code-block:: fortran
242+
243+ INTEGER,INTENT(IN) :: nb
244+ ..
245+
246+ The number of bands.
247+
248+ .. code-block:: fortran
249+
250+ INTEGER,INTENT(IN) :: nge(3)
251+ ..
252+
253+ Specify the :math:`k`\ -grid
254+ for input orbital energy.
255+
256+ .. code-block:: fortran
257+
258+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
259+ ..
260+
261+ The orbital energy measured from the Fermi energy
262+ ( :math:`\varepsilon_{\rm F} = 0` ).
263+
264+ .. code-block:: fortran
265+
266+ INTEGER,INTENT(IN) :: ngw(3)
240267 ..
241268
242- Only for MPI version.
243- Specify the communicator.
269+ Specify the :math:`k`\ -grid for output integration weights.
270+ You can make ``ngw`` :math:`\neq` ``nge`` (See :ref:`app`).
244271
245272 .. code-block:: fortran
246273
247- real(8),intent(in) :: bvec(3,3)
274+ REAL(8),INTENT(OUT) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
275+ ..
276+
277+ The integration weights.
278+
279+ .. code-block:: fortran
280+
281+ INTEGER,INTENT(IN) :: ne
282+ ..
283+
284+ The number of energy where DOS is calculated.
285+
286+ .. code-block:: fortran
287+
288+ REAL(8),INTENT(IN) :: e0(ne)
289+ ..
290+
291+ Energies where DOS is calculated.
292+
293+ .. code-block:: fortran
294+
295+ INTEGER,INTENT(IN),OPTIONAL :: comm
296+ ..
297+
298+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
299+ Only for MPI / Hybrid parallelization.
300+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
301+
302+Integrated density of states
303+----------------------------
304+
305+.. math::
306+
307+ \begin{align}
308+ \sum_{n k} \theta(\omega - \varepsilon_{n k})
309+ X_{n k}(\omega)
310+ \end{align}
311+
312+.. code-block:: fortran
313+
314+ CALL libtetrabz_intdos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0,comm)
315+
316+Parameters
317+
318+ .. code-block:: fortran
319+
320+ INTEGER,INTENT(IN) :: ltetra
321+ ..
322+
323+ Specify the type of the tetrahedron method.
324+ 1 :math:`\cdots` the linear tetrahedron method.
325+ 2 :math:`\cdots` the optimized tetrahedron method :ref:`[1] <ref>`.
326+
327+ .. code-block:: fortran
328+
329+ REAL(8),INTENT(IN) :: bvec(3,3)
248330 ..
249331
250332 Reciprocal lattice vectors (arbitrary unit).
@@ -253,14 +335,14 @@ Parameters
253335
254336 .. code-block:: fortran
255337
256- integer,intent(in) :: nb
338+ INTEGER,INTENT(IN) :: nb
257339 ..
258340
259341 The number of bands.
260342
261343 .. code-block:: fortran
262344
263- integer,intent(in) :: nge(3)
345+ INTEGER,INTENT(IN) :: nge(3)
264346 ..
265347
266348 Specify the :math:`k`\ -grid
@@ -268,7 +350,7 @@ Parameters
268350
269351 .. code-block:: fortran
270352
271- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
353+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
272354 ..
273355
274356 The orbital energy measured from the Fermi energy
@@ -276,7 +358,7 @@ Parameters
276358
277359 .. code-block:: fortran
278360
279- integer,intent(in) :: ngw(3)
361+ INTEGER,INTENT(IN) :: ngw(3)
280362 ..
281363
282364 Specify the :math:`k`\ -grid for output integration weights.
@@ -284,25 +366,34 @@ Parameters
284366
285367 .. code-block:: fortran
286368
287- real(8),intent(out) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
369+ REAL(8),INTENT(OUT) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
288370 ..
289371
290372 The integration weights.
291373
292374 .. code-block:: fortran
293375
294- integer,intent(in) :: ne
376+ INTEGER,INTENT(IN) :: ne
295377 ..
296378
297379 The number of energy where DOS is calculated.
298380
299381 .. code-block:: fortran
300382
301- real(8),intent(in) :: e0(ne)
383+ REAL(8),INTENT(IN) :: e0(ne)
302384 ..
303385
304386 Energies where DOS is calculated.
305387
388+ .. code-block:: fortran
389+
390+ INTEGER,INTENT(IN),OPTIONAL :: comm
391+ ..
392+
393+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
394+ Only for MPI / Hybrid parallelization.
395+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
396+
306397 Nesting function and Fr&oumlhlich parameter
307398 -------------------------------------------
308399
@@ -316,14 +407,13 @@ Nesting function and Fr&oumlhlich parameter
316407
317408 .. code-block:: fortran
318409
319- call libtetrabz_doubledelta(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
320- call libtetrabz_mpi_doubledelta(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
410+ CALL libtetrabz_dbldelta(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
321411
322412 Parameters
323413
324414 .. code-block:: fortran
325415
326- integer,intent(in) :: ltetra
416+ INTEGER,INTENT(IN) :: ltetra
327417 ..
328418
329419 Specify the type of the tetrahedron method.
@@ -332,15 +422,7 @@ Parameters
332422
333423 .. code-block:: fortran
334424
335- integer,intent(in) :: comm
336- ..
337-
338- Only for MPI version.
339- Specify the communicator.
340-
341- .. code-block:: fortran
342-
343- real(8),intent(in) :: bvec(3,3)
425+ REAL(8),INTENT(IN) :: bvec(3,3)
344426 ..
345427
346428 Reciprocal lattice vectors (arbitrary unit).
@@ -349,14 +431,14 @@ Parameters
349431
350432 .. code-block:: fortran
351433
352- integer,intent(in) :: nb
434+ INTEGER,INTENT(IN) :: nb
353435 ..
354436
355437 The number of bands.
356438
357439 .. code-block:: fortran
358440
359- integer,intent(in) :: nge(3)
441+ INTEGER,INTENT(IN) :: nge(3)
360442 ..
361443
362444 Specify the :math:`k`\ -grid
@@ -364,7 +446,7 @@ Parameters
364446
365447 .. code-block:: fortran
366448
367- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
449+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
368450 ..
369451
370452 The orbital energy measured from the Fermi energy
@@ -373,7 +455,7 @@ Parameters
373455
374456 .. code-block:: fortran
375457
376- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
458+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
377459 ..
378460
379461 Another orbital energy.
@@ -381,7 +463,7 @@ Parameters
381463
382464 .. code-block:: fortran
383465
384- integer,intent(in) :: ngw(3)
466+ INTEGER,INTENT(IN) :: ngw(3)
385467 ..
386468
387469 Specify the :math:`k`\ -grid for output integration weights.
@@ -389,11 +471,20 @@ Parameters
389471
390472 .. code-block:: fortran
391473
392- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
474+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
393475 ..
394476
395477 The integration weights.
396478
479+ .. code-block:: fortran
480+
481+ INTEGER,INTENT(IN),OPTIONAL :: comm
482+ ..
483+
484+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
485+ Only for MPI / Hybrid parallelization.
486+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
487+
397488 A part of DFPT calculation
398489 --------------------------
399490
@@ -407,14 +498,13 @@ A part of DFPT calculation
407498
408499 .. code-block:: fortran
409500
410- call libtetrabz_occstep(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
411- call libtetrabz_mpi_occstep(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
501+ CALL libtetrabz_dblstep(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
412502
413503 Parameters
414504
415505 .. code-block:: fortran
416506
417- integer,intent(in) :: ltetra
507+ INTEGER,INTENT(IN) :: ltetra
418508 ..
419509
420510 Specify the type of the tetrahedron method.
@@ -423,15 +513,7 @@ Parameters
423513
424514 .. code-block:: fortran
425515
426- integer,intent(in) :: comm
427- ..
428-
429- Only for MPI version.
430- Specify the communicator.
431-
432- .. code-block:: fortran
433-
434- real(8),intent(in) :: bvec(3,3)
516+ REAL(8),INTENT(IN) :: bvec(3,3)
435517 ..
436518
437519 Reciprocal lattice vectors (arbitrary unit).
@@ -440,14 +522,14 @@ Parameters
440522
441523 .. code-block:: fortran
442524
443- integer,intent(in) :: nb
525+ INTEGER,INTENT(IN) :: nb
444526 ..
445527
446528 The number of bands.
447529
448530 .. code-block:: fortran
449531
450- integer,intent(in) :: nge(3)
532+ INTEGER,INTENT(IN) :: nge(3)
451533 ..
452534
453535 Specify the :math:`k`\ -grid
@@ -455,7 +537,7 @@ Parameters
455537
456538 .. code-block:: fortran
457539
458- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
540+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
459541 ..
460542
461543 The orbital energy measured from the Fermi energy
@@ -464,7 +546,7 @@ Parameters
464546
465547 .. code-block:: fortran
466548
467- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
549+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
468550 ..
469551
470552 Another orbital energy.
@@ -472,7 +554,7 @@ Parameters
472554
473555 .. code-block:: fortran
474556
475- integer,intent(in) :: ngw(3)
557+ INTEGER,INTENT(IN) :: ngw(3)
476558 ..
477559
478560 Specify the :math:`k`\ -grid for output integration weights.
@@ -480,11 +562,20 @@ Parameters
480562
481563 .. code-block:: fortran
482564
483- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
565+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
484566 ..
485567
486568 The integration weights.
487569
570+ .. code-block:: fortran
571+
572+ INTEGER,INTENT(IN),OPTIONAL :: comm
573+ ..
574+
575+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
576+ Only for MPI / Hybrid parallelization.
577+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
578+
488579 Static polarization function
489580 ----------------------------
490581
@@ -499,14 +590,13 @@ Static polarization function
499590
500591 .. code-block:: fortran
501592
502- call libtetrabz_polstat(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
503- call libtetrabz_mpi_occstep(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
593+ CALL libtetrabz_polstat(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
504594
505595 Parameters
506596
507597 .. code-block:: fortran
508598
509- integer,intent(in) :: ltetra
599+ INTEGER,INTENT(IN) :: ltetra
510600 ..
511601
512602 Specify the type of the tetrahedron method.
@@ -515,15 +605,7 @@ Parameters
515605
516606 .. code-block:: fortran
517607
518- integer,intent(in) :: comm
519- ..
520-
521- Only for MPI version.
522- Specify the communicator.
523-
524- .. code-block:: fortran
525-
526- real(8),intent(in) :: bvec(3,3)
608+ REAL(8),INTENT(IN) :: bvec(3,3)
527609 ..
528610
529611 Reciprocal lattice vectors (arbitrary unit).
@@ -532,14 +614,14 @@ Parameters
532614
533615 .. code-block:: fortran
534616
535- integer,intent(in) :: nb
617+ INTEGER,INTENT(IN) :: nb
536618 ..
537619
538620 The number of bands.
539621
540622 .. code-block:: fortran
541623
542- integer,intent(in) :: nge(3)
624+ INTEGER,INTENT(IN) :: nge(3)
543625 ..
544626
545627 Specify the :math:`k`\ -grid
@@ -547,7 +629,7 @@ Parameters
547629
548630 .. code-block:: fortran
549631
550- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
632+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
551633 ..
552634
553635 The orbital energy measured from the Fermi energy
@@ -556,7 +638,7 @@ Parameters
556638
557639 .. code-block:: fortran
558640
559- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
641+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
560642 ..
561643
562644 Another orbital energy.
@@ -564,7 +646,7 @@ Parameters
564646
565647 .. code-block:: fortran
566648
567- integer,intent(in) :: ngw(3)
649+ INTEGER,INTENT(IN) :: ngw(3)
568650 ..
569651
570652 Specify the :math:`k`\ -grid for output integration weights.
@@ -572,11 +654,20 @@ Parameters
572654
573655 .. code-block:: fortran
574656
575- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
657+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
576658 ..
577659
578660 The integration weights.
579661
662+ .. code-block:: fortran
663+
664+ INTEGER,INTENT(IN),OPTIONAL :: comm
665+ ..
666+
667+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
668+ Only for MPI / Hybrid parallelization.
669+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
670+
580671 Phonon linewidth
581672 ----------------
582673
@@ -591,14 +682,13 @@ Phonon linewidth
591682
592683 .. code-block:: fortran
593684
594- call libtetrabz_fermigr(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
595- call libtetrabz_mpi_fermigr(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
685+ CALL libtetrabz_fermigr(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0,comm)
596686
597687 Parameters
598688
599689 .. code-block:: fortran
600690
601- integer,intent(in) :: ltetra
691+ INTEGER,INTENT(IN) :: ltetra
602692 ..
603693
604694 Specify the type of the tetrahedron method.
@@ -607,15 +697,7 @@ Parameters
607697
608698 .. code-block:: fortran
609699
610- integer,intent(in) :: comm
611- ..
612-
613- Only for MPI version.
614- Specify the communicator.
615-
616- .. code-block:: fortran
617-
618- real(8),intent(in) :: bvec(3,3)
700+ REAL(8),INTENT(IN) :: bvec(3,3)
619701 ..
620702
621703 Reciprocal lattice vectors (arbitrary unit).
@@ -624,14 +706,14 @@ Parameters
624706
625707 .. code-block:: fortran
626708
627- integer,intent(in) :: nb
709+ INTEGER,INTENT(IN) :: nb
628710 ..
629711
630712 The number of bands.
631713
632714 .. code-block:: fortran
633715
634- integer,intent(in) :: nge(3)
716+ INTEGER,INTENT(IN) :: nge(3)
635717 ..
636718
637719 Specify the :math:`k`\ -grid
@@ -639,7 +721,7 @@ Parameters
639721
640722 .. code-block:: fortran
641723
642- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
724+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
643725 ..
644726
645727 The orbital energy measured from the Fermi energy
@@ -648,7 +730,7 @@ Parameters
648730
649731 .. code-block:: fortran
650732
651- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
733+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
652734 ..
653735
654736 Another orbital energy.
@@ -656,7 +738,7 @@ Parameters
656738
657739 .. code-block:: fortran
658740
659- integer,intent(in) :: ngw(3)
741+ INTEGER,INTENT(IN) :: ngw(3)
660742 ..
661743
662744 Specify the :math:`k`\ -grid for output integration weights.
@@ -664,27 +746,36 @@ Parameters
664746
665747 .. code-block:: fortran
666748
667- real(8),intent(out) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
749+ REAL(8),INTENT(OUT) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
668750 ..
669751
670752 The integration weights.
671753
672754 .. code-block:: fortran
673755
674- integer,intent(in) :: ne
756+ INTEGER,INTENT(IN) :: ne
675757 ..
676758
677759 The number of branches of the phonon.
678760
679761 .. code-block:: fortran
680762
681- real(8),intent(in) :: e0(ne)
763+ REAL(8),INTENT(IN) :: e0(ne)
682764 ..
683765
684766 Phonon frequencies.
685767
686-Polarization function (imaginary frequency)
687--------------------------------------------
768+ .. code-block:: fortran
769+
770+ INTEGER,INTENT(IN),OPTIONAL :: comm
771+ ..
772+
773+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
774+ Only for MPI / Hybrid parallelization.
775+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
776+
777+Polarization function (complex frequency)
778+-----------------------------------------
688779
689780 .. math::
690781
@@ -697,14 +788,13 @@ Polarization function (imaginary frequency)
697788
698789 .. code-block:: fortran
699790
700- call libtetrabz_polimg(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
701- call libtetrabz_mpi_polimg(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
791+ CALL libtetrabz_polcmplx(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0,comm)
702792
703793 Parameters
704794
705795 .. code-block:: fortran
706796
707- integer,intent(in) :: ltetra
797+ INTEGER,INTENT(IN) :: ltetra
708798 ..
709799
710800 Specify the type of the tetrahedron method.
@@ -713,15 +803,7 @@ Parameters
713803
714804 .. code-block:: fortran
715805
716- integer,intent(in) :: comm
717- ..
718-
719- Only for MPI version.
720- Specify the communicator.
721-
722- .. code-block:: fortran
723-
724- real(8),intent(in) :: bvec(3,3)
806+ REAL(8),INTENT(IN) :: bvec(3,3)
725807 ..
726808
727809 Reciprocal lattice vectors (arbitrary unit).
@@ -730,14 +812,14 @@ Parameters
730812
731813 .. code-block:: fortran
732814
733- integer,intent(in) :: nb
815+ INTEGER,INTENT(IN) :: nb
734816 ..
735817
736818 The number of bands.
737819
738820 .. code-block:: fortran
739821
740- integer,intent(in) :: nge(3)
822+ INTEGER,INTENT(IN) :: nge(3)
741823 ..
742824
743825 Specify the :math:`k`\ -grid
@@ -745,7 +827,7 @@ Parameters
745827
746828 .. code-block:: fortran
747829
748- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
830+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
749831 ..
750832
751833 The orbital energy measured from the Fermi energy
@@ -754,7 +836,7 @@ Parameters
754836
755837 .. code-block:: fortran
756838
757- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
839+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
758840 ..
759841
760842 Another orbital energy.
@@ -762,7 +844,7 @@ Parameters
762844
763845 .. code-block:: fortran
764846
765- integer,intent(in) :: ngw(3)
847+ INTEGER,INTENT(IN) :: ngw(3)
766848 ..
767849
768850 Specify the :math:`k`\ -grid for output integration weights.
@@ -770,14 +852,14 @@ Parameters
770852
771853 .. code-block:: fortran
772854
773- real(8),intent(out) :: wght(2,ne,nb,nb,ngw(1),ngw(2),ngw(3))
855+ COMPLEX(8),INTENT(OUT) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
774856 ..
775857
776858 The integration weights.
777859
778860 .. code-block:: fortran
779861
780- integer,intent(in) :: ne
862+ INTEGER,INTENT(IN) :: ne
781863 ..
782864
783865 The number of imaginary frequencies where
@@ -785,8 +867,18 @@ Parameters
785867
786868 .. code-block:: fortran
787869
788- real(8),intent(in) :: e0(ne)
870+ COMPLEX(8),INTENT(IN) :: e0(ne)
789871 ..
790872
791- Imaginary frequencies where
873+ Complex frequencies where
792874 polarization functions are calculated.
875+
876+ .. code-block:: fortran
877+
878+ INTEGER,INTENT(IN),OPTIONAL :: comm
879+ ..
880+
881+ Optional argument. Communicators for MPI such as ``MPI_COMM_WORLD``.
882+ Only for MPI / Hybrid parallelization.
883+ For C compiler without MPI, just pass ``NULL`` to omit this argment.
884+
--- a/doc/en/libtetrabz_sample_en.rst
+++ b/doc/en/libtetrabz_sample_en.rst
@@ -12,41 +12,39 @@ This sample shows the calculation of the charge density.
1212
1313 .. code-block:: fortran
1414
15- subroutin calc_rho(nr,nb,ng,nelec,bvec,eig,ef,phi,rho)
15+ SUBROUTINE calc_rho(nr,nb,ng,nelec,bvec,eig,ef,phi,rho)
1616 !
17- use libtetrabz, only : libtetrabz_fermieng
18- implicit none
17+ USE libtetrabz, ONLY : libtetrabz_fermieng
18+ IMPLICIT NONE
1919 !
20- integer,intent(in) :: nr ! number of r
21- integer,intent(in) :: nb ! number of bands
22- integer,intent(in) :: ng(3)
20+ INTEGER,INTENT(IN) :: nr ! number of r
21+ INTEGER,INTENT(IN) :: nb ! number of bands
22+ INTEGER,INTENT(IN) :: ng(3)
2323 ! k-point mesh
24- real(8),intent(in) :: nelec ! number of electrons per spin
25- real(8),intent(in) :: bvec(3,3) ! reciplocal lattice vector
26- real(8),intent(in) :: eig(nb,ng(1),ng(2),ng(3)) ! Kohn-Sham eigenvalues
27- real(8),intent(out) :: ef ! Fermi energy
28- complex(8),intent(in) :: phi(nr,nb,ng(1),ng(2),ng(3)) ! Kohn-Sham orbitals
29- real(8),intent(out) :: rho(nr) ! Charge density
24+ REAL(8),INTENT(IN) :: nelec ! number of electrons per spin
25+ REAL(8),INTENT(IN) :: bvec(3,3) ! reciplocal lattice vector
26+ REAL(8),INTENT(IN) :: eig(nb,ng(1),ng(2),ng(3)) ! Kohn-Sham eigenvalues
27+ REAL(8),INTENT(OUT) :: ef ! Fermi energy
28+ COMPLEX(8),INTENT(IN) :: phi(nr,nb,ng(1),ng(2),ng(3)) ! Kohn-Sham orbitals
29+ REAL(8),INTENT(OUT) :: rho(nr) ! Charge density
3030 !
31- integer :: ib, i1, i2, i3, ltetra
32- real(8) :: wght(nb,ng(1),ng(2),ng(3))
31+ INTEGER :: ib, i1, i2, i3, ltetra
32+ REAL(8) :: wght(nb,ng(1),ng(2),ng(3))
3333 !
3434 ltetra = 2
3535 !
36- call libtetrabz_fermieng(ltetra,bvec,nb,ng,eig,ng,wght,ef,nelec)
36+ CALL libtetrabz_fermieng(ltetra,bvec,nb,ng,eig,ng,wght,ef,nelec)
3737 !
3838 rho(1:nr) = 0d0
39- do i1 = 1, ng(3)
40- do i2 = 1, ng(2)
41- do i1 = 1, ng(1)
42- do ib = 1, nb
39+ DO i1 = 1, ng(3)
40+ DO i2 = 1, ng(2)
41+ DO i1 = 1, ng(1)
42+ DO ib = 1, nb
4343 rho(1:nr) = rho(1:nr) + 2d0 * wght(ib,i1,i2,i3) &
44- & * dble(conjg(phi(1:nr,ib,i1,i2,i3)) * phi(1:nr,ib,i1,i2,i3))
45- end do
46- end do
47- end do
48- end do
44+ & * DBLE(CONJG(phi(1:nr,ib,i1,i2,i3)) * phi(1:nr,ib,i1,i2,i3))
45+ END DO
46+ END DO
47+ END DO
48+ END DO
4949 !
50- end subroutin calc_rho
51-
52-
50+ END SUBROUTINE calc_rho
Binary files a/doc/figs/dos.jpg and /dev/null differ
Binary files a/doc/figs/lindhard.jpg and /dev/null differ
--- a/doc/ja/index.rst
+++ b/doc/ja/index.rst
@@ -10,11 +10,11 @@ Welcome to LibTetraBZ's documentation!
1010 :maxdepth: 3
1111
1212 libtetrabz_overview_ja
13- libtetrabz_copy_ja
1413 libtetrabz_install_ja
1514 libtetrabz_link_ja
1615 libtetrabz_routine_ja
1716 libtetrabz_sample_ja
17+ libtetrabz_copy_ja
1818 libtetrabz_contact_ja
1919 libtetrabz_app_ja
2020 libtetrabz_ref_ja
--- a/doc/ja/libtetrabz_copy_ja.rst
+++ b/doc/ja/libtetrabz_copy_ja.rst
@@ -1,5 +1,70 @@
1+プログラムの再配布
2+==================
3+
4+自分のプログラムにlibtetrabzを含める
5+-------------------------------------
6+
7+libtetrabzは下記の :ref:`mitlicense` に基づいて配布されている.
8+これはかいつまんで言うと,
9+個人的(研究室や共同研究者等のグループ)なプログラムであろうとも,
10+公開したり売ったりするプログラムであろうとも
11+自由にコピペしたり改変して良いし,
12+どのようなライセンスで配布しても構わない, と言うことである.
13+
14+Autoconfを使わずにlibtetrabzをビルドする
15+-----------------------------------------
16+
17+このパッケージではAutotools (Autoconf, Aitomake, Libtool)を使ってlibtetrabzをビルドしている.
18+もし再配布するソースコードにlibtetrabzを含めるときに,
19+Autoconfの使用に支障がある場合には, 以下の簡易版のMakefileを使うと良い (タブに注意).
20+
21+.. code-block:: make
22+
23+ F90 = gfortran
24+ FFLAGS = -fopenmp -O2 -g
25+
26+ OBJS = \
27+ libtetrabz.o \
28+ libtetrabz_dbldelta_mod.o \
29+ libtetrabz_dblstep_mod.o \
30+ libtetrabz_dos_mod.o \
31+ libtetrabz_fermigr_mod.o \
32+ libtetrabz_occ_mod.o \
33+ libtetrabz_polcmplx_mod.o \
34+ libtetrabz_polstat_mod.o \
35+ libtetrabz_common.o
36+
37+ .SUFFIXES :
38+ .SUFFIXES : .o .F90
39+
40+ libtetrabz.a:$(OBJS)
41+ ar cr $@ $(OBJS)
42+
43+ .F90.o:
44+ $(F90) $(FFLAGS) -c $<
45+
46+ clean:
47+ rm -f *.a *.o *.mod
48+
49+ libtetrabz.o:libtetrabz_polcmplx_mod.o
50+ libtetrabz.o:libtetrabz_fermigr_mod.o
51+ libtetrabz.o:libtetrabz_polstat_mod.o
52+ libtetrabz.o:libtetrabz_dbldelta_mod.o
53+ libtetrabz.o:libtetrabz_dblstep_mod.o
54+ libtetrabz.o:libtetrabz_dos_mod.o
55+ libtetrabz.o:libtetrabz_occ_mod.o
56+ libtetrabz_dbldelta_mod.o:libtetrabz_common.o
57+ libtetrabz_dblstep_mod.o:libtetrabz_common.o
58+ libtetrabz_dos_mod.o:libtetrabz_common.o
59+ libtetrabz_fermigr_mod.o:libtetrabz_common.o
60+ libtetrabz_occ_mod.o:libtetrabz_common.o
61+ libtetrabz_polcmplx_mod.o:libtetrabz_common.o
62+ libtetrabz_polstat_mod.o:libtetrabz_common.o
63+
64+.. _mitlicense:
65+
166 MIT ライセンス
2-==============
67+--------------
368
469 | Copyright (c) 2014 Mitsuaki Kawamura
570 |
--- a/doc/ja/libtetrabz_routine_ja.rst
+++ b/doc/ja/libtetrabz_routine_ja.rst
@@ -5,31 +5,29 @@
55
66 .. code-block:: fortran
77
8- use libtetrabz, only : libtetrabz_occ
8+ USE libtetrabz, ONLY : libtetrabz_occ
99
10- call libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
10+ CALL libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
1111
1212 のように呼び出して使用できる.
1313 サブルーチン名はすべて ``libtetrabz_`` からはじまる.
14-MPI版については ``libtetrabz_mpi_`` からはじまる.
15-またMPI版では ``libtetrabz_mpi`` モジュールをつかう.
16-シリアル版と MPI版の引数の違いはコミニュケータを指定する整数 ``comm`` だけで,
17-他は同じである.
1814
1915 C言語で書かれたプログラムから呼び出す場合には次のようにする.
2016
21-.. code-block:: fortran
17+.. code-block:: c
2218
2319 #include "libtetrabz.h"
2420
25- libtetrabz_mp_libtetrabz_occ_(&ltetra,bvec,&nb,nge,eig,ngw,wght)
21+ libtetrabz_occ(&ltetra,bvec,&nb,nge,eig,ngw,wght)
2622
27-fortranサブルーチン名の前に ``libtetrabz_mp_`` を,
28-うしろに ``_`` をつけたものが Cでの関数名となる.
29-MPI版では ``libtetrabz_mpi.h`` をインクルードし,
30-fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
3123 変数はすべてポインタとして渡す.
3224 配列はすべて1次元配列として定義し一番左の添字が内側のループとなるようにする.
25+またMPI/ハイブリッド並列のときにライブラリに渡すコミュニケーター変数を,
26+次のようにC/C++のものからfortranのものに変換する。
27+
28+.. code-block:: c
29+
30+ comm_f = MPI_Comm_c2f(comm_c);
3331
3432 全エネルギー, 電荷密度等(占有率の計算)
3533 --------------------------------------
@@ -43,14 +41,13 @@ fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
4341
4442 .. code-block:: fortran
4543
46- call libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght)
47- call libtetrabz_mpi_occ(ltetra,comm,bvec,nb,nge,eig,ngw,wght)
44+ CALL libtetrabz_occ(ltetra,bvec,nb,nge,eig,ngw,wght,comm)
4845
4946 パラメーター
5047
5148 .. code-block:: fortran
5249
53- integer,intent(in) :: ltetra
50+ INTEGER,INTENT(IN) :: ltetra
5451 ..
5552
5653 テトラへドロン法の種類を決める.
@@ -59,14 +56,7 @@ fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
5956
6057 .. code-block:: fortran
6158
62- integer,intent(in) :: comm
63- ..
64-
65- MPI 版のみ. コミニュケータ.
66-
67- .. code-block:: fortran
68-
69- real(8),intent(in) :: bvec(3,3)
59+ REAL(8),INTENT(IN) :: bvec(3,3)
7060 ..
7161
7262 逆格子ベクトル. 単位は任意で良い.
@@ -75,21 +65,21 @@ fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
7565
7666 .. code-block:: fortran
7767
78- integer,intent(in) :: nb
68+ INTEGER,INTENT(IN) :: nb
7969 ..
8070
8171 バンド本数
8272
8373 .. code-block:: fortran
8474
85- integer,intent(in) :: nge(3)
75+ INTEGER,INTENT(IN) :: nge(3)
8676 ..
8777
8878 軌道エネルギーのメッシュ数.
8979
9080 .. code-block:: fortran
9181
92- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
82+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
9383 ..
9484
9585 軌道エネルギー.
@@ -97,7 +87,7 @@ fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
9787
9888 .. code-block:: fortran
9989
100- integer,intent(in) :: ngw(3)
90+ INTEGER,INTENT(IN) :: ngw(3)
10191 ..
10292
10393 ``ngw(3)`` : (入力, 整数配列) 積分重みの :math:`k` メッシュ.
@@ -105,11 +95,21 @@ fortranサブルーチン名の前には ``libtetrabz_mpi_mp_`` をつける.
10595
10696 .. code-block:: fortran
10797
108- real(8),intent(out) :: wght(nb,ngw(1),ngw(2),ngw(3))
98+ REAL(8),INTENT(OUT) :: wght(nb,ngw(1),ngw(2),ngw(3))
10999 ..
110100
111101 ``wght(nb,ngw(1),ngw(2),ngw(3))`` : (出力, 実数配列) 積分重み
112102
103+ .. code-block:: fortran
104+
105+ INTEGER,INTENT(IN),OPTIONAL :: comm
106+ ..
107+
108+ オプショナル引数.
109+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
110+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
111+ C言語では使用しないときには ``NULL`` を入れる.
112+
113113 Fermi エネルギー(占有率も同時に計算する)
114114 ----------------------------------------
115115
@@ -122,14 +122,13 @@ Fermi エネルギー(占有率も同時に計算する)
122122
123123 .. code-block:: fortran
124124
125- call libtetrabz_fermieng(ltetra,bvec,nb,nge,eig,ngw,wght,ef,nelec)
126- call libtetrabz_mpi_fermieng(ltetra,comm,bvec,nb,nge,eig,ngw,wght,ef,nelec)
125+ CALL libtetrabz_fermieng(ltetra,bvec,nb,nge,eig,ngw,wght,ef,nelec,comm)
127126
128127 パラメーター
129128
130129 .. code-block:: fortran
131130
132- integer,intent(in) :: ltetra
131+ INTEGER,INTENT(IN) :: ltetra
133132 ..
134133
135134 テトラへドロン法の種類を決める.
@@ -138,14 +137,7 @@ Fermi エネルギー(占有率も同時に計算する)
138137
139138 .. code-block:: fortran
140139
141- integer,intent(in) :: comm
142- ..
143-
144- ``comm`` : (入力, 整数) MPI 版のみ. コミニュケータ.
145-
146- .. code-block:: fortran
147-
148- real(8),intent(in) :: bvec(3,3)
140+ REAL(8),INTENT(IN) :: bvec(3,3)
149141 ..
150142
151143 逆格子ベクトル. 単位は任意で良い.
@@ -154,35 +146,35 @@ Fermi エネルギー(占有率も同時に計算する)
154146
155147 .. code-block:: fortran
156148
157- integer,intent(in) :: nb
149+ INTEGER,INTENT(IN) :: nb
158150 ..
159151
160152 バンド本数
161153
162154 .. code-block:: fortran
163155
164- integer,intent(in) :: nge(3)
156+ INTEGER,INTENT(IN) :: nge(3)
165157 ..
166158
167159 軌道エネルギーのメッシュ数.
168160
169161 .. code-block:: fortran
170162
171- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
163+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
172164 ..
173165
174166 軌道エネルギー.
175167
176168 .. code-block:: fortran
177169
178- integer,intent(in) :: nge(3)
170+ INTEGER,INTENT(IN) :: nge(3)
179171 ..
180172
181173 軌道エネルギーのメッシュ数.
182174
183175 .. code-block:: fortran
184176
185- integer,intent(in) :: ngw(3)
177+ INTEGER,INTENT(IN) :: ngw(3)
186178 ..
187179
188180 積分重みの :math:`k` メッシュ.
@@ -190,25 +182,35 @@ Fermi エネルギー(占有率も同時に計算する)
190182
191183 .. code-block:: fortran
192184
193- real(8),intent(out) :: wght(nb,ngw(1),ngw(2),ngw(3))
185+ REAL(8),INTENT(OUT) :: wght(nb,ngw(1),ngw(2),ngw(3))
194186 ..
195187
196188 積分重み
197189
198190 .. code-block:: fortran
199191
200- real(8),intent(out) :: ef
192+ REAL(8),INTENT(OUT) :: ef
201193 ..
202194
203195 Fermi エネルギー
204196
205197 .. code-block:: fortran
206198
207- real(8),intent(in) :: nelec
199+ REAL(8),INTENT(IN) :: nelec
208200 ..
209201
210202 スピンあたりの(荷)電子数
211203
204+ .. code-block:: fortran
205+
206+ INTEGER,INTENT(IN),OPTIONAL :: comm
207+ ..
208+
209+ オプショナル引数.
210+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
211+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
212+ C言語では使用しないときには ``NULL`` を入れる.
213+
212214 (部分)状態密度
213215 --------------
214216
@@ -221,14 +223,13 @@ Fermi エネルギー(占有率も同時に計算する)
221223
222224 .. code-block:: fortran
223225
224- call libtetrabz_dos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0)
225- call libtetrabz_mpi_dos(ltetra,comm,bvec,nb,nge,eig,ngw,wght,ne,e0)
226+ CALL libtetrabz_dos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0,comm)
226227
227228 パラメーター
228229
229230 .. code-block:: fortran
230231
231- integer,intent(in) :: ltetra
232+ INTEGER,INTENT(IN) :: ltetra
232233 ..
233234
234235 テトラへドロン法の種類を決める.
@@ -237,14 +238,101 @@ Fermi エネルギー(占有率も同時に計算する)
237238
238239 .. code-block:: fortran
239240
240- integer,intent(in) :: comm
241+ REAL(8),INTENT(IN) :: bvec(3,3)
242+ ..
243+
244+ 逆格子ベクトル. 単位は任意で良い.
245+ 逆格子の形によって四面体の切り方を決めるため,
246+ それらの長さの比のみが必要であるため.
247+
248+ .. code-block:: fortran
249+
250+ INTEGER,INTENT(IN) :: nb
251+ ..
252+
253+ バンド本数
254+
255+ .. code-block:: fortran
256+
257+ INTEGER,INTENT(IN) :: nge(3)
258+ ..
259+
260+ 軌道エネルギーの :math:`k` メッシュ数.
261+
262+ .. code-block:: fortran
263+
264+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
265+ ..
266+
267+ 軌道エネルギー.
268+
269+ .. code-block:: fortran
270+
271+ INTEGER,INTENT(IN) :: ngw(3)
272+ ..
273+
274+ 積分重みの :math:`k` メッシュ.
275+ ``nge`` と違っていても構わない(:ref:`app` 参照).
276+
277+ .. code-block:: fortran
278+
279+ REAL(8),INTENT(OUT) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
280+ ..
281+
282+ 積分重み
283+
284+ .. code-block:: fortran
285+
286+ INTEGER,INTENT(IN) :: ne
287+ ..
288+
289+ 状態密度を計算するエネルギー点数
290+
291+ .. code-block:: fortran
292+
293+ REAL(8),INTENT(IN) :: e0(ne)
294+ ..
295+
296+ 状態密度を計算するエネルギー
297+
298+ .. code-block:: fortran
299+
300+ INTEGER,INTENT(IN),OPTIONAL :: comm
301+ ..
302+
303+ オプショナル引数.
304+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
305+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
306+ C言語では使用しないときには ``NULL`` を入れる.
307+
308+積分状態密度
309+------------
310+
311+.. math::
312+
313+ \begin{align}
314+ \sum_{n k} \theta(\omega - \varepsilon_{n k})
315+ X_{n k}(\omega)
316+ \end{align}
317+
318+.. code-block:: fortran
319+
320+ CALL libtetrabz_intdos(ltetra,bvec,nb,nge,eig,ngw,wght,ne,e0,comm)
321+
322+パラメーター
323+
324+ .. code-block:: fortran
325+
326+ INTEGER,INTENT(IN) :: ltetra
241327 ..
242328
243- MPI 版のみ. コミニュケーター.
329+ テトラへドロン法の種類を決める.
330+ 1 :math:`\cdots` 線形テトラへドロン法,
331+ 2 :math:`\cdots` 最適化線形テトラへドロン法 :ref:`[1] <ref>`
244332
245333 .. code-block:: fortran
246334
247- real(8),intent(in) :: bvec(3,3)
335+ REAL(8),INTENT(IN) :: bvec(3,3)
248336 ..
249337
250338 逆格子ベクトル. 単位は任意で良い.
@@ -253,28 +341,28 @@ Fermi エネルギー(占有率も同時に計算する)
253341
254342 .. code-block:: fortran
255343
256- integer,intent(in) :: nb
344+ INTEGER,INTENT(IN) :: nb
257345 ..
258346
259347 バンド本数
260348
261349 .. code-block:: fortran
262350
263- integer,intent(in) :: nge(3)
351+ INTEGER,INTENT(IN) :: nge(3)
264352 ..
265353
266354 軌道エネルギーの :math:`k` メッシュ数.
267355
268356 .. code-block:: fortran
269357
270- real(8),intent(in) :: eig(nb,nge(1),nge(2),nge(3))
358+ REAL(8),INTENT(IN) :: eig(nb,nge(1),nge(2),nge(3))
271359 ..
272360
273361 軌道エネルギー.
274362
275363 .. code-block:: fortran
276364
277- integer,intent(in) :: ngw(3)
365+ INTEGER,INTENT(IN) :: ngw(3)
278366 ..
279367
280368 積分重みの :math:`k` メッシュ.
@@ -282,25 +370,35 @@ Fermi エネルギー(占有率も同時に計算する)
282370
283371 .. code-block:: fortran
284372
285- real(8),intent(out) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
373+ REAL(8),INTENT(OUT) :: wght(ne,nb,ngw(1),ngw(2),ngw(3))
286374 ..
287375
288376 積分重み
289377
290378 .. code-block:: fortran
291379
292- integer,intent(in) :: ne
380+ INTEGER,INTENT(IN) :: ne
293381 ..
294382
295383 状態密度を計算するエネルギー点数
296384
297385 .. code-block:: fortran
298386
299- real(8),intent(in) :: e0(ne)
387+ REAL(8),INTENT(IN) :: e0(ne)
300388 ..
301389
302390 状態密度を計算するエネルギー
303391
392+ .. code-block:: fortran
393+
394+ INTEGER,INTENT(IN),OPTIONAL :: comm
395+ ..
396+
397+ オプショナル引数.
398+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
399+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
400+ C言語では使用しないときには ``NULL`` を入れる.
401+
304402 ネスティング関数, Fröhlich パラメーター
305403 ---------------------------------------
306404
@@ -314,14 +412,13 @@ Fermi エネルギー(占有率も同時に計算する)
314412
315413 .. code-block:: fortran
316414
317- call libtetrabz_doubledelta(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
318- call libtetrabz_mpi_doubledelta(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
415+ CALL libtetrabz_dbldelta(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
319416
320417 パラメーター
321418
322419 .. code-block:: fortran
323420
324- integer,intent(in) :: ltetra
421+ INTEGER,INTENT(IN) :: ltetra
325422 ..
326423
327424 テトラへドロン法の種類を決める.
@@ -330,14 +427,7 @@ Fermi エネルギー(占有率も同時に計算する)
330427
331428 .. code-block:: fortran
332429
333- integer,intent(in) :: comm
334- ..
335-
336- ``comm`` : (入力, 整数) MPI 版のみ. コミニュケータ.
337-
338- .. code-block:: fortran
339-
340- real(8),intent(in) :: bvec(3,3)
430+ REAL(8),INTENT(IN) :: bvec(3,3)
341431 ..
342432
343433 逆格子ベクトル. 単位は任意で良い.
@@ -346,21 +436,21 @@ Fermi エネルギー(占有率も同時に計算する)
346436
347437 .. code-block:: fortran
348438
349- integer,intent(in) :: nb
439+ INTEGER,INTENT(IN) :: nb
350440 ..
351441
352442 バンド本数
353443
354444 .. code-block:: fortran
355445
356- integer,intent(in) :: nge(3)
446+ INTEGER,INTENT(IN) :: nge(3)
357447 ..
358448
359449 軌道エネルギーの :math:`k` メッシュ数.
360450
361451 .. code-block:: fortran
362452
363- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
453+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
364454 ..
365455
366456 軌道エネルギー.
@@ -369,7 +459,7 @@ Fermi エネルギー(占有率も同時に計算する)
369459
370460 .. code-block:: fortran
371461
372- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
462+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
373463 ..
374464
375465 軌道エネルギー.
@@ -377,7 +467,7 @@ Fermi エネルギー(占有率も同時に計算する)
377467
378468 .. code-block:: fortran
379469
380- integer,intent(in) :: ngw(3)
470+ INTEGER,INTENT(IN) :: ngw(3)
381471 ..
382472
383473 積分重みの :math:`k` メッシュ.
@@ -385,11 +475,21 @@ Fermi エネルギー(占有率も同時に計算する)
385475
386476 .. code-block:: fortran
387477
388- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
478+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
389479 ..
390480
391481 積分重み
392482
483+ .. code-block:: fortran
484+
485+ INTEGER,INTENT(IN),OPTIONAL :: comm
486+ ..
487+
488+ オプショナル引数.
489+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
490+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
491+ C言語では使用しないときには ``NULL`` を入れる.
492+
393493 DFPT 計算の一部
394494 ---------------
395495
@@ -403,14 +503,13 @@ DFPT 計算の一部
403503
404504 .. code-block:: fortran
405505
406- call libtetrabz_occstep(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
407- call libtetrabz_mpi_occstep(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
506+ CALL libtetrabz_dblstep(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
408507
409508 パラメーター
410509
411510 .. code-block:: fortran
412511
413- integer,intent(in) :: ltetra
512+ INTEGER,INTENT(IN) :: ltetra
414513 ..
415514
416515 テトラへドロン法の種類を決める.
@@ -419,14 +518,7 @@ DFPT 計算の一部
419518
420519 .. code-block:: fortran
421520
422- integer,intent(in) :: comm
423- ..
424-
425- MPI 版のみ. コミニュケータ.
426-
427- .. code-block:: fortran
428-
429- real(8),intent(in) :: bvec(3,3)
521+ REAL(8),INTENT(IN) :: bvec(3,3)
430522 ..
431523
432524 逆格子ベクトル. 単位は任意で良い.
@@ -435,21 +527,21 @@ DFPT 計算の一部
435527
436528 .. code-block:: fortran
437529
438- integer,intent(in) :: nb
530+ INTEGER,INTENT(IN) :: nb
439531 ..
440532
441533 バンド本数
442534
443535 .. code-block:: fortran
444536
445- integer,intent(in) :: nge(3)
537+ INTEGER,INTENT(IN) :: nge(3)
446538 ..
447539
448540 軌道エネルギーのメッシュ数.
449541
450542 .. code-block:: fortran
451543
452- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
544+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
453545 ..
454546
455547 軌道エネルギー.
@@ -458,7 +550,7 @@ DFPT 計算の一部
458550
459551 .. code-block:: fortran
460552
461- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
553+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
462554 ..
463555
464556 軌道エネルギー.
@@ -466,7 +558,7 @@ DFPT 計算の一部
466558
467559 .. code-block:: fortran
468560
469- integer,intent(in) :: ngw(3)
561+ INTEGER,INTENT(IN) :: ngw(3)
470562 ..
471563
472564 積分重みの :math:`k` メッシュ. ``nge``
@@ -474,11 +566,21 @@ DFPT 計算の一部
474566
475567 .. code-block:: fortran
476568
477- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
569+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
478570 ..
479571
480572 積分重み
481573
574+ .. code-block:: fortran
575+
576+ INTEGER,INTENT(IN),OPTIONAL :: comm
577+ ..
578+
579+ オプショナル引数.
580+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
581+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
582+ C言語では使用しないときには ``NULL`` を入れる.
583+
482584 独立分極関数(静的)
483585 ------------------
484586
@@ -493,14 +595,13 @@ DFPT 計算の一部
493595
494596 .. code-block:: fortran
495597
496- call libtetrabz_polstat(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght)
497- call libtetrabz_mpi_occstep(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght)
598+ CALL libtetrabz_polstat(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,comm)
498599
499600 パラメーター
500601
501602 .. code-block:: fortran
502603
503- integer,intent(in) :: ltetra
604+ INTEGER,INTENT(IN) :: ltetra
504605 ..
505606
506607 テトラへドロン法の種類を決める.
@@ -508,15 +609,8 @@ DFPT 計算の一部
508609 2 :math:`\cdots` 最適化線形テトラへドロン法 :ref:`[1] <ref>`
509610
510611 .. code-block:: fortran
511-
512- integer,intent(in) :: comm
513- ..
514-
515- MPI 版のみ. コミニュケータ.
516-
517- .. code-block:: fortran
518612
519- real(8),intent(in) :: bvec(3,3)
613+ REAL(8),INTENT(IN) :: bvec(3,3)
520614 ..
521615
522616 逆格子ベクトル. 単位は任意で良い.
@@ -525,21 +619,21 @@ DFPT 計算の一部
525619
526620 .. code-block:: fortran
527621
528- integer,intent(in) :: nb
622+ INTEGER,INTENT(IN) :: nb
529623 ..
530624
531625 バンド本数
532626
533627 .. code-block:: fortran
534628
535- integer,intent(in) :: nge(3)
629+ INTEGER,INTENT(IN) :: nge(3)
536630 ..
537631
538632 軌道エネルギーのメッシュ数.
539633
540634 .. code-block:: fortran
541635
542- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
636+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
543637 ..
544638
545639 軌道エネルギー.
@@ -548,7 +642,7 @@ DFPT 計算の一部
548642
549643 .. code-block:: fortran
550644
551- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
645+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
552646 ..
553647
554648 軌道エネルギー.
@@ -556,7 +650,7 @@ DFPT 計算の一部
556650
557651 .. code-block:: fortran
558652
559- integer,intent(in) :: ngw(3)
653+ INTEGER,INTENT(IN) :: ngw(3)
560654 ..
561655
562656 積分重みの :math:`k` メッシュ.
@@ -564,11 +658,21 @@ DFPT 計算の一部
564658
565659 .. code-block:: fortran
566660
567- real(8),intent(out) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
661+ REAL(8),INTENT(OUT) :: wght(nb,nb,ngw(1),ngw(2),ngw(3))
568662 ..
569663
570664 積分重み
571665
666+ .. code-block:: fortran
667+
668+ INTEGER,INTENT(IN),OPTIONAL :: comm
669+ ..
670+
671+ オプショナル引数.
672+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
673+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
674+ C言語では使用しないときには ``NULL`` を入れる.
675+
572676 フォノン線幅等
573677 --------------
574678
@@ -583,14 +687,13 @@ DFPT 計算の一部
583687
584688 .. code-block:: fortran
585689
586- call libtetrabz_fermigr(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
587- call libtetrabz_mpi_fermigr(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
690+ CALL libtetrabz_fermigr(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0,comm)
588691
589692 パラメーター
590693
591694 .. code-block:: fortran
592695
593- integer,intent(in) :: ltetra
696+ INTEGER,INTENT(IN) :: ltetra
594697 ..
595698
596699 テトラへドロン法の種類を決める.
@@ -599,14 +702,7 @@ DFPT 計算の一部
599702
600703 .. code-block:: fortran
601704
602- integer,intent(in) :: comm
603- ..
604-
605- MPI 版のみ. コミニュケータ.
606-
607- .. code-block:: fortran
608-
609- real(8),intent(in) :: bvec(3,3)
705+ REAL(8),INTENT(IN) :: bvec(3,3)
610706 ..
611707
612708 逆格子ベクトル. 単位は任意で良い.
@@ -615,21 +711,21 @@ DFPT 計算の一部
615711
616712 .. code-block:: fortran
617713
618- integer,intent(in) :: nb
714+ INTEGER,INTENT(IN) :: nb
619715 ..
620716
621717 バンド本数
622718
623719 .. code-block:: fortran
624720
625- integer,intent(in) :: nge(3)
721+ INTEGER,INTENT(IN) :: nge(3)
626722 ..
627723
628724 軌道エネルギーのメッシュ数.
629725
630726 .. code-block:: fortran
631727
632- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
728+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
633729 ..
634730
635731 軌道エネルギー.
@@ -638,7 +734,7 @@ DFPT 計算の一部
638734
639735 .. code-block:: fortran
640736
641- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
737+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
642738 ..
643739
644740 軌道エネルギー.
@@ -646,7 +742,7 @@ DFPT 計算の一部
646742
647743 .. code-block:: fortran
648744
649- integer,intent(in) :: ngw(3)
745+ INTEGER,INTENT(IN) :: ngw(3)
650746 ..
651747
652748 積分重みの :math:`k` メッシュ.
@@ -654,27 +750,37 @@ DFPT 計算の一部
654750
655751 .. code-block:: fortran
656752
657- real(8),intent(out) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
753+ REAL(8),INTENT(OUT) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
658754 ..
659755
660756 積分重み
661757
662758 .. code-block:: fortran
663759
664- integer,intent(in) :: ne
760+ INTEGER,INTENT(IN) :: ne
665761 ..
666762
667763 フォノンモード数
668764
669765 .. code-block:: fortran
670766
671- real(8),intent(in) :: e0(ne)
767+ REAL(8),INTENT(IN) :: e0(ne)
672768 ..
673769
674770 フォノン振動数
675771
676-分極関数(虚振動数)
677-------------------
772+ .. code-block:: fortran
773+
774+ INTEGER,INTENT(IN),OPTIONAL :: comm
775+ ..
776+
777+ オプショナル引数.
778+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
779+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
780+ C言語では使用しないときには ``NULL`` を入れる.
781+
782+分極関数(複素振動数)
783+--------------------
678784
679785 .. math::
680786
@@ -687,14 +793,13 @@ DFPT 計算の一部
687793
688794 .. code-block:: fortran
689795
690- call libtetrabz_polimg(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
691- call libtetrabz_mpi_polimg(ltetra,comm,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0)
796+ CALL libtetrabz_polcmplx(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0,comm)
692797
693798 パラメーター
694799
695800 .. code-block:: fortran
696801
697- integer,intent(in) :: ltetra
802+ INTEGER,INTENT(IN) :: ltetra
698803 ..
699804
700805 テトラへドロン法の種類を決める.
@@ -703,14 +808,7 @@ DFPT 計算の一部
703808
704809 .. code-block:: fortran
705810
706- integer,intent(in) :: comm
707- ..
708-
709- MPI 版のみ. コミニュケータ.
710-
711- .. code-block:: fortran
712-
713- real(8),intent(in) :: bvec(3,3)
811+ REAL(8),INTENT(IN) :: bvec(3,3)
714812 ..
715813
716814 逆格子ベクトル. 単位は任意で良い.
@@ -719,21 +817,21 @@ DFPT 計算の一部
719817
720818 .. code-block:: fortran
721819
722- integer,intent(in) :: nb
820+ INTEGER,INTENT(IN) :: nb
723821 ..
724822
725823 バンド本数
726824
727825 .. code-block:: fortran
728826
729- integer,intent(in) :: nge(3)
827+ INTEGER,INTENT(IN) :: nge(3)
730828 ..
731829
732830 軌道エネルギーのメッシュ数.
733831
734832 .. code-block:: fortran
735833
736- real(8),intent(in) :: eig1(nb,nge(1),nge(2),nge(3))
834+ REAL(8),INTENT(IN) :: eig1(nb,nge(1),nge(2),nge(3))
737835 ..
738836
739837 軌道エネルギー.
@@ -742,7 +840,7 @@ DFPT 計算の一部
742840
743841 .. code-block:: fortran
744842
745- real(8),intent(in) :: eig2(nb,nge(1),nge(2),nge(3))
843+ REAL(8),INTENT(IN) :: eig2(nb,nge(1),nge(2),nge(3))
746844 ..
747845
748846 軌道エネルギー.
@@ -750,7 +848,7 @@ DFPT 計算の一部
750848
751849 .. code-block:: fortran
752850
753- integer,intent(in) :: ngw(3)
851+ INTEGER,INTENT(IN) :: ngw(3)
754852 ..
755853
756854 積分重みの :math:`k` メッシュ.
@@ -758,23 +856,32 @@ DFPT 計算の一部
758856
759857 .. code-block:: fortran
760858
761- real(8),intent(out) :: wght(2,ne,nb,nb,ngw(1),ngw(2),ngw(3))
859+ COMPLEX(8),INTENT(OUT) :: wght(ne,nb,nb,ngw(1),ngw(2),ngw(3))
762860 ..
763861
764862 積分重み .
765- 1番目の次元は実部と虚部を格納する.
766863
767864 .. code-block:: fortran
768865
769- integer,intent(in) :: ne
866+ INTEGER,INTENT(IN) :: ne
770867 ..
771868
772869 計算を行う虚振動数の点数
773870
774871 .. code-block:: fortran
775872
776- real(8),intent(in) :: e0(ne)
873+ COMPLEX(8),INTENT(IN) :: e0(ne)
874+ ..
875+
876+ 計算を行う複素振動数
877+
878+ .. code-block:: fortran
879+
880+ INTEGER,INTENT(IN),OPTIONAL :: comm
777881 ..
778882
779- 計算を行う虚振動数
883+ オプショナル引数.
884+ MPIのコミニュケーター( ``MPI_COMM_WORLD`` など)を入れる.
885+ libtetrabz を内部でMPI/Hybrid並列するときのみ入力する.
886+ C言語では使用しないときには ``NULL`` を入れる.
780887
--- a/doc/ja/libtetrabz_sample_ja.rst
+++ b/doc/ja/libtetrabz_sample_ja.rst
@@ -14,41 +14,41 @@
1414
1515 .. code-block:: fortran
1616
17- subroutin calc_rho(nr,nb,ng,nelec,bvec,eig,ef,phi,rho)
17+ SUBROUTINE calc_rho(nr,nb,ng,nelec,bvec,eig,ef,phi,rho)
1818 !
19- use libtetrabz, only : libtetrabz_fermieng
20- implicit none
19+ USE libtetrabz, ONLY : libtetrabz_fermieng
20+ IMPLICIT NONE
2121 !
22- integer,intent(in) :: nr ! number of r
23- integer,intent(in) :: nb ! number of bands
24- integer,intent(in) :: ng(3)
22+ INTEGER,INTENT(IN) :: nr ! number of r
23+ INTEGER,INTENT(IN) :: nb ! number of bands
24+ INTEGER,INTENT(IN) :: ng(3)
2525 ! k-point mesh
26- real(8),intent(in) :: nelec ! number of electrons per spin
27- real(8),intent(in) :: bvec(3,3) ! reciplocal lattice vector
28- real(8),intent(in) :: eig(nb,ng(1),ng(2),ng(3)) ! Kohn-Sham eigenvalues
29- real(8),intent(out) :: ef ! Fermi energy
30- complex(8),intent(in) :: phi(nr,nb,ng(1),ng(2),ng(3)) ! Kohn-Sham orbitals
31- real(8),intent(out) :: rho(nr) ! Charge density
26+ REAL(8),INTENT(IN) :: nelec ! number of electrons per spin
27+ REAL(8),INTENT(IN) :: bvec(3,3) ! reciplocal lattice vector
28+ REAL(8),INTENT(IN) :: eig(nb,ng(1),ng(2),ng(3)) ! Kohn-Sham eigenvalues
29+ REAL(8),INTENT(OUT) :: ef ! Fermi energy
30+ COMPLEX(8),INTENT(IN) :: phi(nr,nb,ng(1),ng(2),ng(3)) ! Kohn-Sham orbitals
31+ REAL(8),INTENT(OUT) :: rho(nr) ! Charge density
3232 !
33- integer :: ib, i1, i2, i3, ltetra
34- real(8) :: wght(nb,ng(1),ng(2),ng(3))
33+ INTEGER :: ib, i1, i2, i3, ltetra
34+ REAL(8) :: wght(nb,ng(1),ng(2),ng(3))
3535 !
3636 ltetra = 2
3737 !
38- call libtetrabz_fermieng(ltetra,bvec,nb,ng,eig,ng,wght,ef,nelec)
38+ CALL libtetrabz_fermieng(ltetra,bvec,nb,ng,eig,ng,wght,ef,nelec)
3939 !
4040 rho(1:nr) = 0d0
41- do i1 = 1, ng(3)
42- do i2 = 1, ng(2)
43- do i1 = 1, ng(1)
44- do ib = 1, nb
41+ DO i1 = 1, ng(3)
42+ DO i2 = 1, ng(2)
43+ DO i1 = 1, ng(1)
44+ DO ib = 1, nb
4545 rho(1:nr) = rho(1:nr) + 2d0 * wght(ib,i1,i2,i3) &
46- & * dble(conjg(phi(1:nr,ib,i1,i2,i3)) * phi(1:nr,ib,i1,i2,i3))
47- end do
48- end do
49- end do
50- end do
46+ & * DBLE(CONJG(phi(1:nr,ib,i1,i2,i3)) * phi(1:nr,ib,i1,i2,i3))
47+ END DO
48+ END DO
49+ END DO
50+ END DO
5151 !
52- end subroutin calc_rho
52+ END SUBROUTINE calc_rho
5353
5454
旧リポジトリブラウザで表示