mirror of https://gitlab.com/QEF/q-e.git
Merge branch 'gpu-develop' into gpu-exx
This commit is contained in:
commit
6588e73da6
|
@ -46,7 +46,7 @@
|
||||||
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
||||||
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
||||||
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
||||||
cp.x / CP / Quantum Espresso<span style="font-weight: normal;"> (version: svn)</span>
|
cp.x / CP / Quantum Espresso<span style="font-weight: normal;"> (version: 6.4)</span>
|
||||||
</h2>
|
</h2>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||||
|
@ -586,7 +586,8 @@ See also etot_conv_thr - both criteria must be satisfied.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td align="left" valign="top" colspan="2"><blockquote><pre style="margin-bottom: -1em;">
|
<tr><td align="left" valign="top" colspan="2"><blockquote><pre style="margin-bottom: -1em;">
|
||||||
'small': memory-saving tricks are implemented. Currently:
|
'small': NO LONGER IMPLEMENTED SINCE v.6.3
|
||||||
|
memory-saving tricks are implemented. Currently:
|
||||||
- the G-vectors are sorted only locally, not globally
|
- the G-vectors are sorted only locally, not globally
|
||||||
- they are not collected and written to file
|
- they are not collected and written to file
|
||||||
For large systems, the memory and time gain is sizable
|
For large systems, the memory and time gain is sizable
|
||||||
|
@ -3938,7 +3939,7 @@ ENDRULES
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<small>
|
<small>
|
||||||
This file has been created by helpdoc utility on Tue Oct 23 15:42:16 CEST 2018.
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:47 CET 2019.
|
||||||
</small>
|
</small>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
INPUT FILE DESCRIPTION
|
INPUT FILE DESCRIPTION
|
||||||
|
|
||||||
Program: cp.x / CP / Quantum Espresso (version: svn)
|
Program: cp.x / CP / Quantum Espresso (version: 6.4)
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -311,7 +311,8 @@ NAMELIST: &CONTROL
|
||||||
|
|
||||||
Type: CHARACTER
|
Type: CHARACTER
|
||||||
Default: 'default'
|
Default: 'default'
|
||||||
Description: 'small': memory-saving tricks are implemented. Currently:
|
Description: 'small': NO LONGER IMPLEMENTED SINCE v.6.3
|
||||||
|
memory-saving tricks are implemented. Currently:
|
||||||
- the G-vectors are sorted only locally, not globally
|
- the G-vectors are sorted only locally, not globally
|
||||||
- they are not collected and written to file
|
- they are not collected and written to file
|
||||||
For large systems, the memory and time gain is sizable
|
For large systems, the memory and time gain is sizable
|
||||||
|
@ -2490,4 +2491,4 @@ CARD: AUTOPILOT
|
||||||
===END OF CARD==========================================================
|
===END OF CARD==========================================================
|
||||||
|
|
||||||
|
|
||||||
This file has been created by helpdoc utility on Tue Oct 23 15:42:16 CEST 2018
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:47 CET 2019
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
||||||
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
||||||
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
||||||
cppp.x / CP / Quantum Espresso<span style="font-weight: normal;"> (version: svn)</span>
|
cppp.x / CP / Quantum Espresso<span style="font-weight: normal;"> (version: 6.4)</span>
|
||||||
</h2>
|
</h2>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||||
|
@ -406,7 +406,7 @@ to be read and plotted
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<small>
|
<small>
|
||||||
This file has been created by helpdoc utility on Fri Jun 22 17:11:00 CEST 2018.
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:48 CET 2019.
|
||||||
</small>
|
</small>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
INPUT FILE DESCRIPTION
|
INPUT FILE DESCRIPTION
|
||||||
|
|
||||||
Program: cppp.x / CP / Quantum Espresso (version: svn)
|
Program: cppp.x / CP / Quantum Espresso (version: 6.4)
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -225,4 +225,4 @@ NAMELIST: &INPUTPP
|
||||||
===END OF NAMELIST======================================================
|
===END OF NAMELIST======================================================
|
||||||
|
|
||||||
|
|
||||||
This file has been created by helpdoc utility on Fri Jun 22 17:10:59 CEST 2018
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:48 CET 2019
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
VERSION = svn
|
VERSION = git
|
||||||
HELPDOC = ../../dev-tools/helpdoc -version $(VERSION)
|
HELPDOC = ../../dev-tools/helpdoc -version $(VERSION)
|
||||||
LATEX = pdflatex
|
LATEX = pdflatex
|
||||||
LATEX2HTML = latex2html
|
LATEX2HTML = latex2html
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
\documentclass[12pt,a4paper]{article}
|
\documentclass[12pt,a4paper]{article}
|
||||||
\def\version{6.3}
|
\def\version{6.4}
|
||||||
\def\qe{{\sc Quantum ESPRESSO}}
|
\def\qe{{\sc Quantum ESPRESSO}}
|
||||||
|
|
||||||
\usepackage{html}
|
\usepackage{html}
|
||||||
|
@ -124,16 +124,18 @@ Symlinks to executable programs will be placed in the \texttt{bin/} subdirectory
|
||||||
|
|
||||||
As a final check that compilation was successful,
|
As a final check that compilation was successful,
|
||||||
you may want to run some or all of the tests
|
you may want to run some or all of the tests
|
||||||
and examples. Please see the general User's Guide for their setup. Automated tests for \cpx\ are in directory
|
and examples.
|
||||||
\texttt{tests/} and can be run via the
|
Automated tests for \cpx\ are in directory
|
||||||
script \texttt{check\_cp.x.j}
|
\texttt{test-suite/} and can be run via the
|
||||||
|
\texttt{Makefile} found there.
|
||||||
|
Please see the general User's Guide for their setup.
|
||||||
|
|
||||||
You may take the tests and examples distributed
|
You may take the tests and examples distributed
|
||||||
with \CP\ as templates for writing your own input
|
with \CP\ as templates for writing your own input
|
||||||
files. Input files for tests are contained
|
files. Input files for tests are contained in
|
||||||
in \texttt{tests/} subdirectory with file type
|
subdirectories \texttt{test-suite/cp\_*} with file type
|
||||||
\texttt{*.in1}, \texttt{*.in2}, ... . Input file for examples
|
\texttt{*.in1}, \texttt{*.in2}, ... . Input files for examples
|
||||||
are produced if you run the examples in the
|
are produced, if you run the examples, in the
|
||||||
\texttt{results/} subdirectories, with names ending
|
\texttt{results/} subdirectories, with names ending
|
||||||
with \texttt{.in}.
|
with \texttt{.in}.
|
||||||
|
|
||||||
|
|
|
@ -148,8 +148,7 @@ MODULE cp_restart_new
|
||||||
CHARACTER(LEN=20) :: dft_name
|
CHARACTER(LEN=20) :: dft_name
|
||||||
CHARACTER(LEN=256) :: dirname
|
CHARACTER(LEN=256) :: dirname
|
||||||
CHARACTER(LEN=320) :: filename, sourcefile
|
CHARACTER(LEN=320) :: filename, sourcefile
|
||||||
CHARACTER(LEN=4) :: cspin
|
INTEGER :: ik_eff
|
||||||
INTEGER :: kunit, ik_eff
|
|
||||||
INTEGER :: k1, k2, k3
|
INTEGER :: k1, k2, k3
|
||||||
INTEGER :: nk1, nk2, nk3
|
INTEGER :: nk1, nk2, nk3
|
||||||
INTEGER :: j, i, iss, ig, nspin_wfc, iss_wfc
|
INTEGER :: j, i, iss, ig, nspin_wfc, iss_wfc
|
||||||
|
@ -646,11 +645,8 @@ MODULE cp_restart_new
|
||||||
COMPLEX(DP), INTENT(INOUT) :: cm2(:,:) !
|
COMPLEX(DP), INTENT(INOUT) :: cm2(:,:) !
|
||||||
REAL(DP), INTENT(INOUT) :: wfc(:,:) ! BS
|
REAL(DP), INTENT(INOUT) :: wfc(:,:) ! BS
|
||||||
!
|
!
|
||||||
CHARACTER(LEN=256) :: dirname, kdirname, filename
|
CHARACTER(LEN=256) :: dirname, filename
|
||||||
CHARACTER(LEN=5) :: kindex
|
|
||||||
CHARACTER(LEN=4) :: cspin
|
|
||||||
INTEGER :: strlen
|
INTEGER :: strlen
|
||||||
INTEGER :: kunit
|
|
||||||
INTEGER :: k1, k2, k3
|
INTEGER :: k1, k2, k3
|
||||||
INTEGER :: nk1, nk2, nk3
|
INTEGER :: nk1, nk2, nk3
|
||||||
INTEGER :: i, j, iss, ig, nspin_wfc, ierr, ik
|
INTEGER :: i, j, iss, ig, nspin_wfc, ierr, ik
|
||||||
|
|
|
@ -74,6 +74,7 @@ PROGRAM main
|
||||||
!
|
!
|
||||||
CALL cpr_loop( 1 )
|
CALL cpr_loop( 1 )
|
||||||
!
|
!
|
||||||
|
CALL unset_mpi_comm_4_solvers ()
|
||||||
CALL stop_run()
|
CALL stop_run()
|
||||||
CALL do_stop( .TRUE. )
|
CALL do_stop( .TRUE. )
|
||||||
!
|
!
|
||||||
|
|
|
@ -702,13 +702,17 @@ makov_payne.o : ../../UtilXlib/mp.o
|
||||||
makov_payne.o : ../../UtilXlib/parallel_include.o
|
makov_payne.o : ../../UtilXlib/parallel_include.o
|
||||||
makov_payne.o : ions_positions.o
|
makov_payne.o : ions_positions.o
|
||||||
makov_payne.o : mainvar.o
|
makov_payne.o : mainvar.o
|
||||||
|
manycp.o : ../../LAXlib/mp_diag.o
|
||||||
manycp.o : ../../Modules/check_stop.o
|
manycp.o : ../../Modules/check_stop.o
|
||||||
manycp.o : ../../Modules/command_line_options.o
|
manycp.o : ../../Modules/command_line_options.o
|
||||||
manycp.o : ../../Modules/environment.o
|
manycp.o : ../../Modules/environment.o
|
||||||
manycp.o : ../../Modules/input_parameters.o
|
manycp.o : ../../Modules/input_parameters.o
|
||||||
manycp.o : ../../Modules/io_global.o
|
manycp.o : ../../Modules/io_global.o
|
||||||
|
manycp.o : ../../Modules/mp_bands.o
|
||||||
manycp.o : ../../Modules/mp_global.o
|
manycp.o : ../../Modules/mp_global.o
|
||||||
manycp.o : ../../Modules/mp_images.o
|
manycp.o : ../../Modules/mp_images.o
|
||||||
|
manycp.o : ../../Modules/mp_pools.o
|
||||||
|
manycp.o : ../../Modules/mp_world.o
|
||||||
manycp.o : ../../Modules/read_input.o
|
manycp.o : ../../Modules/read_input.o
|
||||||
manycp.o : input.o
|
manycp.o : input.o
|
||||||
metaxc.o : ../../Modules/funct.o
|
metaxc.o : ../../Modules/funct.o
|
||||||
|
|
|
@ -28,21 +28,29 @@ PROGRAM manycp
|
||||||
USE environment, ONLY : environment_start, environment_end
|
USE environment, ONLY : environment_start, environment_end
|
||||||
USE io_global, ONLY : ionode, ionode_id, stdout
|
USE io_global, ONLY : ionode, ionode_id, stdout
|
||||||
USE mp_global, ONLY : mp_startup
|
USE mp_global, ONLY : mp_startup
|
||||||
USE mp_images, ONLY : my_image_id
|
USE mp_world, ONLY : world_comm
|
||||||
|
USE mp_images, ONLY : intra_image_comm, my_image_id
|
||||||
|
USE mp_pools, ONLY : intra_pool_comm
|
||||||
|
USE mp_bands, ONLY : intra_bgrp_comm, inter_bgrp_comm
|
||||||
|
USE mp_diag, ONLY : mp_start_diag
|
||||||
USE read_input, ONLY : read_input_file
|
USE read_input, ONLY : read_input_file
|
||||||
USE check_stop, ONLY : check_stop_init
|
USE check_stop, ONLY : check_stop_init
|
||||||
USE command_line_options, ONLY: input_file_
|
USE command_line_options, ONLY: input_file_, ndiag_
|
||||||
!
|
!
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
!
|
!
|
||||||
INTEGER :: i
|
INTEGER :: i
|
||||||
LOGICAL :: opnd
|
LOGICAL :: opnd, diag_in_band_group = .true.
|
||||||
CHARACTER(LEN=256) :: filin, filout
|
CHARACTER(LEN=256) :: filin, filout
|
||||||
CHARACTER(LEN=7) :: image_label
|
CHARACTER(LEN=7) :: image_label
|
||||||
CHARACTER(LEN=6), EXTERNAL :: int_to_char
|
CHARACTER(LEN=6), EXTERNAL :: int_to_char
|
||||||
!
|
!
|
||||||
!
|
!
|
||||||
CALL mp_startup ( start_images=.true. )
|
CALL mp_startup ( start_images=.true. )
|
||||||
|
CALL mp_start_diag ( ndiag_, world_comm, intra_bgrp_comm, &
|
||||||
|
do_distr_diag_inside_bgrp_ = diag_in_band_group )
|
||||||
|
CALL set_mpi_comm_4_solvers( intra_pool_comm, intra_bgrp_comm, &
|
||||||
|
inter_bgrp_comm )
|
||||||
CALL environment_start ( 'MANYCP' )
|
CALL environment_start ( 'MANYCP' )
|
||||||
!
|
!
|
||||||
! ... Image-specific input files
|
! ... Image-specific input files
|
||||||
|
@ -100,6 +108,7 @@ PROGRAM manycp
|
||||||
!
|
!
|
||||||
CALL cpr_loop( 1 )
|
CALL cpr_loop( 1 )
|
||||||
!
|
!
|
||||||
|
CALL unset_mpi_comm_4_solvers ()
|
||||||
CALL stop_run( )
|
CALL stop_run( )
|
||||||
CALL do_stop( .TRUE. )
|
CALL do_stop( .TRUE. )
|
||||||
!
|
!
|
||||||
|
|
|
@ -28,7 +28,6 @@ SUBROUTINE stop_run()
|
||||||
!
|
!
|
||||||
CALL plugin_clean()
|
CALL plugin_clean()
|
||||||
!
|
!
|
||||||
CALL unset_mpi_comm_4_solvers ()
|
|
||||||
CALL mp_global_end()
|
CALL mp_global_end()
|
||||||
!
|
!
|
||||||
END SUBROUTINE stop_run
|
END SUBROUTINE stop_run
|
||||||
|
|
60
Doc/Makefile
60
Doc/Makefile
|
@ -21,43 +21,51 @@ clean:
|
||||||
- rm -f INPUT_*.html INPUT_*.txt INPUT_*.xml qe-input-ref.html
|
- rm -f INPUT_*.html INPUT_*.txt INPUT_*.xml qe-input-ref.html
|
||||||
|
|
||||||
developer_man: developer_man.pdf
|
developer_man: developer_man.pdf
|
||||||
rm -rf developer_man/
|
- rm -rf developer_man/
|
||||||
latex2html \
|
- latex2html \
|
||||||
-t "Developer's Manual for Quantum-ESPRESSO" \
|
-t "Developer's Manual for Quantum-ESPRESSO" \
|
||||||
-html_version 3.2,math \
|
-html_version 3.2,math \
|
||||||
-toc_depth 3 -split 3 -toc_stars -show_section_numbers \
|
-toc_depth 3 -split 3 -toc_stars -show_section_numbers \
|
||||||
-local_icons -image_type png \
|
-local_icons -image_type png \
|
||||||
developer_man.tex
|
developer_man.tex
|
||||||
cd developer_man; \
|
if test -d developer_man; then \
|
||||||
for file in *.html; do \
|
cd developer_man; \
|
||||||
cp $$file /tmp/$$file; \
|
for file in *.html; do \
|
||||||
cat /tmp/$$file | sed 's/HREF="http/NAME="http/g' | sed 's/mathend000#//g' - > $$file; \
|
cp $$file /tmp/$$file; \
|
||||||
rm -f /tmp/$$file; \
|
cat /tmp/$$file | sed 's/HREF="http/NAME="http/g' | sed 's/mathend000#//g' - > $$file; \
|
||||||
done
|
rm -f /tmp/$$file; \
|
||||||
@echo ""
|
done; \
|
||||||
@echo "***"
|
fi
|
||||||
@echo "*** Developer's Manual created in developers_manual/developers_manual.html"
|
@if test -d developer_man; then \
|
||||||
@echo "***"
|
echo ""; \
|
||||||
@echo ""
|
echo "***"; \
|
||||||
|
echo "*** Developer's Manual created in developers_manual/developers_manual.html"; \
|
||||||
|
echo "***"; \
|
||||||
|
echo ""; \
|
||||||
|
fi
|
||||||
|
|
||||||
user_guide: user_guide.pdf
|
user_guide: user_guide.pdf
|
||||||
rm -rf user_guide/
|
- rm -rf user_guide/
|
||||||
latex2html \
|
- latex2html \
|
||||||
-t "User's Guide for Quantum-ESPRESSO" \
|
-t "User's Guide for Quantum-ESPRESSO" \
|
||||||
-html_version 3.2,math \
|
-html_version 3.2,math \
|
||||||
-toc_depth 5 -split 5 -toc_stars -show_section_numbers \
|
-toc_depth 5 -split 5 -toc_stars -show_section_numbers \
|
||||||
-local_icons -image_type png \
|
-local_icons -image_type png \
|
||||||
user_guide.tex
|
user_guide.tex
|
||||||
cd user_guide; \
|
if test -d user_guide; then \
|
||||||
for file in *.html; do \
|
cd user_guide; \
|
||||||
cp $$file /tmp/$$file; \
|
for file in *.html; do \
|
||||||
cat /tmp/$$file | sed 's/HREF="http/NAME="http/g' | sed 's/mathend000#//g' - > $$file; \
|
cp $$file /tmp/$$file; \
|
||||||
rm -f /tmp/$$file; \
|
cat /tmp/$$file | sed 's/HREF="http/NAME="http/g' | sed 's/mathend000#//g' - > $$file; \
|
||||||
done
|
rm -f /tmp/$$file; \
|
||||||
@echo ""
|
done; \
|
||||||
@echo "***"
|
fi
|
||||||
@echo "*** User's Guide created in user_guide/user_guide.html"
|
@if test -d user_guide; then \
|
||||||
@echo "***"
|
echo ""; \
|
||||||
@echo ""
|
echo "***"; \
|
||||||
|
echo "*** User's Guide created in user_guide/user_guide.html"; \
|
||||||
|
echo "***"; \
|
||||||
|
echo ""; \
|
||||||
|
fi
|
||||||
|
|
||||||
brillouin_zones: brillouin_zones.pdf
|
brillouin_zones: brillouin_zones.pdf
|
||||||
|
|
Binary file not shown.
|
@ -50,6 +50,7 @@ calculation to define paths in the BZ. This feature is available with
|
||||||
the option \texttt{tpiba\_b} or \texttt{crystal\_b} in a \texttt{'bands'}
|
the option \texttt{tpiba\_b} or \texttt{crystal\_b} in a \texttt{'bands'}
|
||||||
calculation or with the option \texttt{q\_in\_band\_form} in the input of the
|
calculation or with the option \texttt{q\_in\_band\_form} in the input of the
|
||||||
\texttt{matdyn.x} code.
|
\texttt{matdyn.x} code.
|
||||||
|
BEWARE: you need to explicitly specify \texttt{ibrav} to use this feature.
|
||||||
Lines in reciprocal space are defined by giving the coordinates of the
|
Lines in reciprocal space are defined by giving the coordinates of the
|
||||||
starting and ending points and the number of points of each line.
|
starting and ending points and the number of points of each line.
|
||||||
The coordinates of the starting and ending points can be
|
The coordinates of the starting and ending points can be
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
\documentclass[12pt,a4paper]{article}
|
\documentclass[12pt,a4paper]{article}
|
||||||
\def\version{6.4}
|
\def\version{6.4.1}
|
||||||
\def\QE{{\sc Quantum ESPRESSO}}
|
\def\QE{{\sc Quantum ESPRESSO}}
|
||||||
\def\qe{QE}
|
\def\qe{QE}
|
||||||
\textwidth = 17cm
|
\textwidth = 17cm
|
||||||
|
@ -1194,8 +1194,9 @@ may save hours of searching into the code for a piece of missing information.
|
||||||
complain if the latter \& is missing, others do.
|
complain if the latter \& is missing, others do.
|
||||||
% Another example: empty strings are nonstandard,
|
% Another example: empty strings are nonstandard,
|
||||||
% use \texttt{empty='~'}, not \texttt{empty=''}.
|
% use \texttt{empty='~'}, not \texttt{empty=''}.
|
||||||
\item do not (yet) use F2008 syntax. Stick to F2003 at most (for now).
|
\item try to stick to F2003 standard: \qe\ must work even if you do not have
|
||||||
\qe\ must work even if you do not have the latest and the greatest compiler.
|
the latest and the greatest compiler. Use F2008 syntax only if really
|
||||||
|
useful, and after verifying that it doesn't break too many compilers.
|
||||||
\item use "dp" (defined in module ''kinds'') to define the type of real and
|
\item use "dp" (defined in module ''kinds'') to define the type of real and
|
||||||
complex variables
|
complex variables
|
||||||
\item all constants should be defined to be of kind "dp". Preferred syntax:
|
\item all constants should be defined to be of kind "dp". Preferred syntax:
|
||||||
|
@ -1210,7 +1211,7 @@ double precision complex number).
|
||||||
\item Do not use automatic arrays (e.g. \texttt{REAL(dp) :: A(N)} with
|
\item Do not use automatic arrays (e.g. \texttt{REAL(dp) :: A(N)} with
|
||||||
\texttt{N} defined at run time) unless you are sure that the array is
|
\texttt{N} defined at run time) unless you are sure that the array is
|
||||||
small in all cases: large arrays may easily exceed the stack size,
|
small in all cases: large arrays may easily exceed the stack size,
|
||||||
or the memory size,
|
or the memory size.
|
||||||
\item Do not use pointers unless you have a good reason to:
|
\item Do not use pointers unless you have a good reason to:
|
||||||
pointers may hinder optimization. Allocatable arrays should be used instead.
|
pointers may hinder optimization. Allocatable arrays should be used instead.
|
||||||
\item If you use pointers, nullify them before performing tests on their
|
\item If you use pointers, nullify them before performing tests on their
|
||||||
|
@ -1224,9 +1225,12 @@ array sections. Passing an array section to a routine may look elegant
|
||||||
but it may turn out to be inefficient: a copy will be silently done
|
but it may turn out to be inefficient: a copy will be silently done
|
||||||
if the section is not contiguous in memory (or if the compiler
|
if the section is not contiguous in memory (or if the compiler
|
||||||
decides it is the right thing to do), increasing the memory footprint.
|
decides it is the right thing to do), increasing the memory footprint.
|
||||||
\item Do not pass unallocated arrays as arguments, even in those cases where
|
\item Do not pass unallocated arrays or pointers as non-optional arguments,
|
||||||
they are not actually used inside the subroutine: some compilers don't
|
even in those cases where they are not actually used inside the subroutine:
|
||||||
like it.
|
some compilers don't like it. Also note that if passed as optional argument
|
||||||
|
--provided the argument has not the pointer or allocatable attribute--
|
||||||
|
unallocated arrays or pointers are interpreted as non present (this is a
|
||||||
|
F2008 feature, already used since v.6.4).
|
||||||
\item Do not use any construct that is susceptible to be flagged as
|
\item Do not use any construct that is susceptible to be flagged as
|
||||||
out-of-bounds error, even if no actual out-of-bound error takes place.
|
out-of-bounds error, even if no actual out-of-bound error takes place.
|
||||||
\item Always use IMPLICIT NONE and declare all local variables.
|
\item Always use IMPLICIT NONE and declare all local variables.
|
||||||
|
|
|
@ -1,4 +1,28 @@
|
||||||
New in development version:
|
New in 6.4.1 branch :
|
||||||
|
* A warning is issued if the lattice parameter seems to be a conversion
|
||||||
|
factor instead of a true lattice parameter. Conversion should be achieved
|
||||||
|
with the appropriate options, not with dirty tricks. In the future this
|
||||||
|
will no longer be allowed
|
||||||
|
* A warning is issued if ibrav=0 is used for systems having symmetry. If not
|
||||||
|
properly done this may lead to strange problems with symmetry detection
|
||||||
|
and symmetrization. Lattice information should be used if available.
|
||||||
|
|
||||||
|
Problems fixed in 6.4.1 branch :
|
||||||
|
* Two bugs fixed in HP: 1) the code was not working correctly when fractional
|
||||||
|
translations were present, 2) there was a bug in the case when either there
|
||||||
|
is only one k point, or when k pools are used and some of the pools have
|
||||||
|
only one k point.
|
||||||
|
* Restart of ph.x with 2D boundary conditions has been fixed (see gitlab
|
||||||
|
issue #102)
|
||||||
|
* XML file correctly written if tetrahedra are used (see gitlab issue #103)
|
||||||
|
|
||||||
|
New in version 6.4:
|
||||||
|
* Experimental version of SCDM localization with k-points, activated like for
|
||||||
|
k=0 by specifying in &system namelist a value > 0 for "localization_thr".
|
||||||
|
* It is now possible to limit the number of xml step elements printed out
|
||||||
|
for relaxation or molecular dynamics simulation, by setting the environment
|
||||||
|
variable MAX_XML_STEPS. Useful in case of very long trajectories to avoid
|
||||||
|
issues due to too large file size.
|
||||||
* EPW works with ultrasoft pseudopotentials (F. Giustino, S. Poncé, R. Margine)
|
* EPW works with ultrasoft pseudopotentials (F. Giustino, S. Poncé, R. Margine)
|
||||||
* New code hp.x to compute Hubbard parameters using density-functional
|
* New code hp.x to compute Hubbard parameters using density-functional
|
||||||
perturbation theory (experimental stage) (I. Timrov, N. Marzari, and M. Cococcioni,
|
perturbation theory (experimental stage) (I. Timrov, N. Marzari, and M. Cococcioni,
|
||||||
|
@ -10,7 +34,9 @@ New in development version:
|
||||||
and M. Cococcioni, in preparation)
|
and M. Cococcioni, in preparation)
|
||||||
* XDM now works also for USPP and norm-conserving PP
|
* XDM now works also for USPP and norm-conserving PP
|
||||||
|
|
||||||
Problems fixed in development version (+ = in qe-6.3-backports as well) :
|
Problems fixed in version 6.4 (+ = in qe-6.3-backports as well) :
|
||||||
|
+ Codes reading scf data recomputed celldm parameters also if ibrav=0
|
||||||
|
This produced confusing output and had the potential to break some codes
|
||||||
+ index not correctly initialized in LSDA phonon with core corrections
|
+ index not correctly initialized in LSDA phonon with core corrections
|
||||||
+ GTH pseudopotentials in analytical form wrongly computed in some cases
|
+ GTH pseudopotentials in analytical form wrongly computed in some cases
|
||||||
+ projwfc.x not working with new xml format in noncolinear/spinorbit case
|
+ projwfc.x not working with new xml format in noncolinear/spinorbit case
|
||||||
|
@ -31,7 +57,7 @@ Problems fixed in development version (+ = in qe-6.3-backports as well) :
|
||||||
pseudopotentials was not working.
|
pseudopotentials was not working.
|
||||||
+ bad format in upf%comment when writing the PP_INFO section of UPF v2 PPs
|
+ bad format in upf%comment when writing the PP_INFO section of UPF v2 PPs
|
||||||
|
|
||||||
Incompatible changes in development version:
|
Incompatible changes in version 6.4 version:
|
||||||
* Charge density in the LSDA case is stored as (up+down, up-down) and no longer
|
* Charge density in the LSDA case is stored as (up+down, up-down) and no longer
|
||||||
as (up,down). Output data format is unchanged to (up+down, up-down)
|
as (up,down). Output data format is unchanged to (up+down, up-down)
|
||||||
* Non-symmorphic operations are always allowed and the FFT grid is made
|
* Non-symmorphic operations are always allowed and the FFT grid is made
|
||||||
|
@ -47,8 +73,10 @@ Incompatible changes in development version:
|
||||||
variables of turbo_lanczos.x and turbo_davidson.x. Instead, they are read
|
variables of turbo_lanczos.x and turbo_davidson.x. Instead, they are read
|
||||||
from the XML file produced by pw.x. The variable real_space_debug was removed.
|
from the XML file produced by pw.x. The variable real_space_debug was removed.
|
||||||
|
|
||||||
Known problems in development version:
|
Known problems in version 6.4:
|
||||||
* Frequent "dexx is negative" errors with hybrid functionals
|
* Frequent "dexx is negative" errors with hybrid functionals
|
||||||
|
* restart of ph.x when using 2D boundary conditions fails see issue#102 on gitLab
|
||||||
|
* the band_structure element is printed incompletely if tetrahedra are used for sums in the IBZ, see issue #103.
|
||||||
|
|
||||||
New in 6.3 version:
|
New in 6.3 version:
|
||||||
* New implementation, using a more robust algorithm for the Wigner-Seitz
|
* New implementation, using a more robust algorithm for the Wigner-Seitz
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
\documentclass[12pt,a4paper]{article}
|
\documentclass[12pt,a4paper]{article}
|
||||||
\def\version{6.4}
|
\def\version{6.4.1}
|
||||||
\def\qe{{\sc Quantum ESPRESSO}}
|
\def\qe{{\sc Quantum ESPRESSO}}
|
||||||
|
|
||||||
\usepackage{html}
|
\usepackage{html}
|
||||||
|
@ -407,7 +407,9 @@ may break them. Use \texttt{export LC\_ALL=C} (sh/bash) or
|
||||||
when running scripts (including installation scripts).
|
when running scripts (including installation scripts).
|
||||||
|
|
||||||
Second, you need C and Fortran compilers, compliant with C89 and
|
Second, you need C and Fortran compilers, compliant with C89 and
|
||||||
F2003 standards. For parallel
|
F2003 standards\footnote{since v.6.4 a standard 2008 feature is
|
||||||
|
used: if unallocated pointers are passed as optional arguments,
|
||||||
|
they are interpreted as not present}. For parallel
|
||||||
execution, you will also need MPI libraries and a parallel
|
execution, you will also need MPI libraries and a parallel
|
||||||
(i.e. MPI-aware) compiler. For massively parallel machines, or
|
(i.e. MPI-aware) compiler. For massively parallel machines, or
|
||||||
for simple multicore parallelization, an OpenMP-aware compiler
|
for simple multicore parallelization, an OpenMP-aware compiler
|
||||||
|
@ -945,6 +947,7 @@ the last written output file to understand why.
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Working Fortran and C compilers, compliant with F2003 and C89 standards
|
Working Fortran and C compilers, compliant with F2003 and C89 standards
|
||||||
|
(see Sec.\ref{Sec:Installation})
|
||||||
respectively, are needed in order to compile \qe. Most recent Fortran
|
respectively, are needed in order to compile \qe. Most recent Fortran
|
||||||
compilers will do the job.
|
compilers will do the job.
|
||||||
|
|
||||||
|
@ -1109,6 +1112,10 @@ add preprocessing option \texttt{-Dzdotc=zdotc\_wrapper} to \texttt{DFLAGS}.
|
||||||
|
|
||||||
\paragraph{Linux PCs with Intel compiler (ifort)}
|
\paragraph{Linux PCs with Intel compiler (ifort)}
|
||||||
|
|
||||||
|
IMPORTANT NOTE: ifort versions earlier than v.15 miscompile the new
|
||||||
|
XML code in QE v.6.4 and later. Please install this patch:\\
|
||||||
|
\texttt{https://gitlab.com/QEF/q-e/wikis/Support/Patch-for-old-Intel-compilers}.
|
||||||
|
|
||||||
The Intel compiler ifort \texttt{http://software.intel.com/}
|
The Intel compiler ifort \texttt{http://software.intel.com/}
|
||||||
produces fast executables, at least on Intel CPUs, but not all versions
|
produces fast executables, at least on Intel CPUs, but not all versions
|
||||||
work as expected. In case of trouble, update your version
|
work as expected. In case of trouble, update your version
|
||||||
|
@ -1132,8 +1139,6 @@ The warning: {\em feupdateenv is not implemented and will always fail},
|
||||||
can be safely ignored. Warnings on ``bad preprocessing option'' when compiling
|
can be safely ignored. Warnings on ``bad preprocessing option'' when compiling
|
||||||
iotk and complains about ``recommended formats'' may also be ignored.
|
iotk and complains about ``recommended formats'' may also be ignored.
|
||||||
|
|
||||||
Versions v.12 and earlier of ifort are no longer supported by QE v.\version.
|
|
||||||
|
|
||||||
\paragraph{Linux PCs with MKL libraries}
|
\paragraph{Linux PCs with MKL libraries}
|
||||||
On Intel CPUs it is very convenient to use Intel MKL libraries
|
On Intel CPUs it is very convenient to use Intel MKL libraries
|
||||||
(freely available at
|
(freely available at
|
||||||
|
|
|
@ -21,7 +21,6 @@ release:
|
||||||
rm -rf examples/*/epw/out/* examples/*/epw/tmp/* \
|
rm -rf examples/*/epw/out/* examples/*/epw/tmp/* \
|
||||||
examples/*/phonons/out/* examples/*/phonons/tmp/* \
|
examples/*/phonons/out/* examples/*/phonons/tmp/* \
|
||||||
examples/*/phonons/save/* ; \
|
examples/*/phonons/save/* ; \
|
||||||
rm -rf .svn */.svn */*/*.svn */*/*/*.svn */*/*/*/*.svn
|
|
||||||
cd .. ; tar cfz EPW/EPW-release.tgz EPW-release ; \
|
cd .. ; tar cfz EPW/EPW-release.tgz EPW-release ; \
|
||||||
rm -rf EPW-release ; cd EPW
|
rm -rf EPW-release ; cd EPW
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,317 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# Post-processing script from of PH data in format used by EPW
|
||||||
|
# 14/07/2015 - Creation of the script - Samuel Ponce
|
||||||
|
# 14/03/2018 - Automatically reads the number of q-points - Michael Waters
|
||||||
|
# 14/03/2018 - Detect if SOC is included in the calculation - Samuel Ponce
|
||||||
|
# 13/11/2018 - Write dyn files in xml format for SOC case - Shunhong Zhang (USTC)
|
||||||
|
#
|
||||||
|
import numpy as np
|
||||||
|
import os
|
||||||
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
# Convert the dyn files to the xml form, for SOC case - Shunhong Zhang (USTC)
|
||||||
|
def dyn2xml(prefix):
|
||||||
|
ndyn=int(os.popen('head -2 {0}.dyn0|tail -1'.format(prefix)).read())
|
||||||
|
for idyn in range(1,ndyn+1):
|
||||||
|
print '{0}.dyn{1} to {0}.dyn_q{1}.xml'.format(prefix,idyn)
|
||||||
|
dynmat=dyn(prefix,idyn)
|
||||||
|
dynmat._write_xml()
|
||||||
|
def get_geom_info():
|
||||||
|
if os.path.isfile('ph.out')==False:
|
||||||
|
print 'cannot extract geometry info from ph.out'
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
volm=float(os.popen('grep -a volume ph.out 2>/dev/null|tail -1').readline().split()[-2])
|
||||||
|
get_at=os.popen('grep -a -A 3 "crystal axes" ph.out 2>/dev/null|tail -3').readlines()
|
||||||
|
at=np.array([[float(item) for item in line.split()[3:6]] for line in get_at])
|
||||||
|
get_bg=os.popen('grep -a -A 3 "reciprocal axes" ph.out 2>/dev/null|tail -3').readlines()
|
||||||
|
bg=np.array([[float(item) for item in line.split()[3:6]] for line in get_bg])
|
||||||
|
return volm,at,bg
|
||||||
|
|
||||||
|
class dyn(object):
|
||||||
|
def __init__(self,prefix,idyn):
|
||||||
|
self._prefix=prefix
|
||||||
|
self._idyn=idyn
|
||||||
|
fil='{0}.dyn{1}'.format(prefix,idyn)
|
||||||
|
f=open(fil)
|
||||||
|
self._comment=f.readline()
|
||||||
|
f.readline()
|
||||||
|
line=f.readline().split()
|
||||||
|
self._ntype=int(line[0])
|
||||||
|
self._natom=int(line[1])
|
||||||
|
self._ibrav=int(line[2])
|
||||||
|
self._nspin=1
|
||||||
|
self._cell_dim=np.array([float(ii) for ii in line[3:]])
|
||||||
|
self._volm=0
|
||||||
|
self._at=np.zeros((3,3),float)
|
||||||
|
self._bg=np.zeros((3,3),float)
|
||||||
|
try: self._volm,self._at,self._bg = get_geom_info()
|
||||||
|
except: print 'warning: lattice info not found'
|
||||||
|
self._species=[];
|
||||||
|
self._mass=[]
|
||||||
|
for i in range(self._ntype):
|
||||||
|
line=f.readline().split()
|
||||||
|
self._species.append(line[1].strip("'"))
|
||||||
|
self._mass.append(float(line[-1])/911.4442) # normalize to atomic mass
|
||||||
|
self._atom_type=np.zeros(self._natom,int)
|
||||||
|
self._pos=np.zeros((self._natom,3),float)
|
||||||
|
for i in range(self._natom):
|
||||||
|
line=f.readline().split()
|
||||||
|
self._atom_type[i]=int(line[1])
|
||||||
|
for j in range(3): self._pos[i,j]=float(line[j+2])
|
||||||
|
self._nqpt=int(os.popen('grep -c "Dynamical Matrix" {0}'.format(fil)).read().split()[0])
|
||||||
|
self._qpt=[]
|
||||||
|
self._dynmat=np.zeros((self._nqpt,self._natom,self._natom,3,3,2),float)
|
||||||
|
f.readline()
|
||||||
|
for iqpt in range(self._nqpt):
|
||||||
|
f.readline();
|
||||||
|
f.readline()
|
||||||
|
line=f.readline().split()
|
||||||
|
self._qpt.append(np.array([float(item) for item in line[3:6]]))
|
||||||
|
f.readline()
|
||||||
|
for i in range(self._natom):
|
||||||
|
for j in range(self._natom):
|
||||||
|
f.readline()
|
||||||
|
data=np.fromfile(f,sep=' ',count=18,dtype=float).reshape(3,3,2)
|
||||||
|
self._dynmat[iqpt,i,j]=data
|
||||||
|
self._qpt=np.array(self._qpt)
|
||||||
|
for i in range(5): f.readline()
|
||||||
|
self._freq=np.zeros((self._natom*3,2),float)
|
||||||
|
self._disp=np.zeros((self._natom*3,self._natom,3,2),float)
|
||||||
|
for i in range(self._natom*3):
|
||||||
|
line=f.readline().split()
|
||||||
|
self._freq[i,0]=float(line[4])
|
||||||
|
self._freq[i,1]=float(line[7])
|
||||||
|
for j in range(self._natom):
|
||||||
|
line=f.readline().split()[1:-1]
|
||||||
|
data=np.array([float(item) for item in line]).reshape(3,2)
|
||||||
|
self._disp[i,j]=data
|
||||||
|
|
||||||
|
def _write_xml(self):
|
||||||
|
doc=minidom.Document()
|
||||||
|
root = doc.createElement('Root')
|
||||||
|
doc.appendChild(root)
|
||||||
|
geom_info=doc.createElement('GEOMETRY_INFO')
|
||||||
|
tags=('NUMBER_OF_TYPES','NUMBER_OF_ATOMS','BRAVAIS_LATTICE_INDEX','SPIN_COMPONENTS')
|
||||||
|
numbers=(self._ntype,self._natom,self._ibrav,self._nspin)
|
||||||
|
for i,(tag,num) in enumerate(zip(tags,numbers)):
|
||||||
|
inode=doc.createElement(tag)
|
||||||
|
inode.setAttribute('type','integer')
|
||||||
|
inode.setAttribute('size','1')
|
||||||
|
inode.text=num
|
||||||
|
inode.appendChild(doc.createTextNode(str(num)))
|
||||||
|
geom_info.appendChild(inode)
|
||||||
|
cell_dim=doc.createElement('CELL_DIMENSIONS')
|
||||||
|
cell_dim.setAttribute('type','real')
|
||||||
|
cell_dim.setAttribute('size','6')
|
||||||
|
for i in range(6):
|
||||||
|
cell_dim.appendChild(doc.createTextNode('{0:16.10f}'.format(self._cell_dim[i])))
|
||||||
|
geom_info.appendChild(cell_dim)
|
||||||
|
tags=['AT','BG']
|
||||||
|
for tag,lat in zip(tags,(self._at,self._bg)):
|
||||||
|
inode=doc.createElement(tag)
|
||||||
|
inode.setAttribute('type','real')
|
||||||
|
inode.setAttribute('size','9')
|
||||||
|
inode.setAttribute('columns','3')
|
||||||
|
for i in range(3):
|
||||||
|
text=' '.join(['{0:16.10f}'.format(item) for item in lat[i]])
|
||||||
|
inode.appendChild(doc.createTextNode(text))
|
||||||
|
geom_info.appendChild(inode)
|
||||||
|
volm=doc.createElement('UNIT_CELL_VOLUME_AU')
|
||||||
|
volm.setAttribute('type','real')
|
||||||
|
volm.setAttribute('size','1')
|
||||||
|
volm.appendChild(doc.createTextNode('{0:16.10f}'.format(self._volm)))
|
||||||
|
geom_info.appendChild(volm)
|
||||||
|
for itype in range(self._ntype):
|
||||||
|
nt=doc.createElement('TYPE_NAME.{0}'.format(itype+1))
|
||||||
|
nt.setAttribute('type','character')
|
||||||
|
nt.setAttribute('size','1')
|
||||||
|
nt.setAttribute('len','3')
|
||||||
|
nt.appendChild(doc.createTextNode('{0}'.format(self._species[itype])))
|
||||||
|
na=doc.createElement('MASS.{0}'.format(itype+1))
|
||||||
|
na.setAttribute('type','real')
|
||||||
|
na.setAttribute('size','1')
|
||||||
|
na.appendChild(doc.createTextNode('{0:16.10f}'.format(self._mass[itype])))
|
||||||
|
geom_info.appendChild(nt)
|
||||||
|
geom_info.appendChild(na)
|
||||||
|
for iat in range(self._natom):
|
||||||
|
at=doc.createElement('ATOM.{0}'.format(iat+1))
|
||||||
|
at.setAttribute('SPECIES','{0}'.format(self._species[self._atom_type[iat]-1]))
|
||||||
|
at.setAttribute('INDEX',str(iat+1))
|
||||||
|
pos=' '.join(['{0:16.10f}'.format(item) for item in self._pos[iat]])
|
||||||
|
at.setAttribute('TAU',pos)
|
||||||
|
geom_info.appendChild(at)
|
||||||
|
nqpt=doc.createElement('NUMBER_OF_Q')
|
||||||
|
nqpt.setAttribute('type','integer')
|
||||||
|
nqpt.setAttribute('size','1')
|
||||||
|
nqpt.appendChild(doc.createTextNode(str(self._nqpt)))
|
||||||
|
geom_info.appendChild(nqpt)
|
||||||
|
root.appendChild(geom_info)
|
||||||
|
for iqpt in range(self._nqpt):
|
||||||
|
dynmat=doc.createElement('DYNAMICAL_MAT_.{0}'.format(iqpt+1))
|
||||||
|
qpt=doc.createElement('Q_POINT')
|
||||||
|
qpt.setAttribute('type','real')
|
||||||
|
qpt.setAttribute('size','3')
|
||||||
|
qpt.setAttribute('columns','3')
|
||||||
|
tnode=doc.createTextNode(' '.join(['{0:16.10f}'.format(item) for item in self._qpt[iqpt]]))
|
||||||
|
qpt.appendChild(tnode)
|
||||||
|
dynmat.appendChild(qpt)
|
||||||
|
for iat in range(self._natom):
|
||||||
|
for jat in range(self._natom):
|
||||||
|
ph=doc.createElement('PHI.{0}.{1}'.format(iat+1,jat+1))
|
||||||
|
ph.setAttribute('type','complex')
|
||||||
|
ph.setAttribute('size','9')
|
||||||
|
ph.setAttribute('columns','3')
|
||||||
|
for i in range(3):
|
||||||
|
for j in range(3):
|
||||||
|
text='{0:16.10f} {1:16.10f}'.format(self._dynmat[iqpt,iat,jat,i,j,0],self._dynmat[iqpt,iat,jat,i,j,1])
|
||||||
|
ph.appendChild(doc.createTextNode(text))
|
||||||
|
dynmat.appendChild(ph)
|
||||||
|
root.appendChild(dynmat)
|
||||||
|
mode=doc.createElement('FREQUENCIES_THZ_CMM1')
|
||||||
|
for iomega in range(self._natom*3):
|
||||||
|
inode=doc.createElement('OMEGA.{0}'.format(iomega+1))
|
||||||
|
inode.setAttribute('type','real')
|
||||||
|
inode.setAttribute('size','2')
|
||||||
|
inode.setAttribute('columns','2')
|
||||||
|
inode.appendChild(doc.createTextNode('{0:16.10f} {1:16.10f}'.format(self._freq[iomega,0],self._freq[iomega,1])))
|
||||||
|
idisp=doc.createElement('DISPLACEMENT.{0}'.format(iomega+1))
|
||||||
|
idisp.setAttribute('tpye','complex')
|
||||||
|
idisp.setAttribute('size','3')
|
||||||
|
for iat in range(self._natom):
|
||||||
|
for j in range(3):
|
||||||
|
tnode=doc.createTextNode('{0:16.10f} {1:16.10f}'.format(self._disp[iomega,iat,j,0],self._disp[iomega,iat,j,1]))
|
||||||
|
idisp.appendChild(tnode)
|
||||||
|
mode.appendChild(inode)
|
||||||
|
mode.appendChild(idisp)
|
||||||
|
root.appendChild(mode)
|
||||||
|
fp = open('{0}.dyn_q{1}.xml'.format(self._prefix,self._idyn), 'w')
|
||||||
|
doc.writexml(fp, addindent=' ', newl='\n')
|
||||||
|
|
||||||
|
# Return the number of q-points in the IBZ
|
||||||
|
def get_nqpt(prefix):
|
||||||
|
fname = '_ph0/' +prefix+'.phsave/control_ph.xml'
|
||||||
|
|
||||||
|
fid = open(fname,'r')
|
||||||
|
lines = fid.readlines() # these files are relatively small so reading the whole thing shouldn't be an issue
|
||||||
|
fid.close()
|
||||||
|
|
||||||
|
line_number_of_nqpt = 0
|
||||||
|
while 'NUMBER_OF_Q_POINTS' not in lines[line_number_of_nqpt]: # increment to line of interest
|
||||||
|
line_number_of_nqpt +=1
|
||||||
|
line_number_of_nqpt +=1 # its on the next line after that text
|
||||||
|
|
||||||
|
nqpt = int(lines[line_number_of_nqpt])
|
||||||
|
|
||||||
|
return nqpt
|
||||||
|
|
||||||
|
# Check if the calculation include SOC
|
||||||
|
def hasSOC(prefix):
|
||||||
|
fname = prefix+'.save/data-file-schema.xml'
|
||||||
|
|
||||||
|
xmldoc = minidom.parse(fname)
|
||||||
|
item = xmldoc.getElementsByTagName('spinorbit')[0]
|
||||||
|
lSOC = item.childNodes[0].data
|
||||||
|
|
||||||
|
return lSOC
|
||||||
|
|
||||||
|
# Check if the calculation was done in sequential
|
||||||
|
def isSEQ(prefix):
|
||||||
|
fname = '_ph0/'+str(prefix)+'.dvscf'
|
||||||
|
if (os.path.isfile(fname)):
|
||||||
|
lseq = True
|
||||||
|
else:
|
||||||
|
lseq = False
|
||||||
|
|
||||||
|
return lseq
|
||||||
|
|
||||||
|
# Enter the number of irr. q-points
|
||||||
|
user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
|
||||||
|
prefix = str(user_input)
|
||||||
|
|
||||||
|
# Test if SOC
|
||||||
|
SOC = hasSOC(prefix)
|
||||||
|
|
||||||
|
# If SOC detected, but dyn is not in XML and we want to convert it
|
||||||
|
if SOC=='true':
|
||||||
|
user_input = raw_input('Calculation with SOC detected. Do you want to convert dyn in XML format [y/n]?\n')
|
||||||
|
if str(user_input) == 'y':
|
||||||
|
dyn2xml(prefix)
|
||||||
|
os.system('mv {0}.dyn*.xml save'.format(prefix))
|
||||||
|
|
||||||
|
# If no SOC detected, do you want to convert into XML format
|
||||||
|
if SOC=='false':
|
||||||
|
user_input = raw_input('Calculation without SOC detected. Do you want to convert to xml anyway [y/n]?\n')
|
||||||
|
if str(user_input) == 'y':
|
||||||
|
SOC = 'true'
|
||||||
|
dyn2xml(prefix)
|
||||||
|
os.system('mv {0}.dyn*.xml save'.format(prefix))
|
||||||
|
|
||||||
|
# Test if seq. or parallel run
|
||||||
|
SEQ = isSEQ(prefix)
|
||||||
|
|
||||||
|
if True: # this gets the nqpt from the outputfiles
|
||||||
|
nqpt = get_nqpt(prefix)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Enter the number of irr. q-points
|
||||||
|
user_input = raw_input('Enter the number of irreducible q-points\n')
|
||||||
|
nqpt = user_input
|
||||||
|
try:
|
||||||
|
nqpt = int(user_input)
|
||||||
|
except ValueError:
|
||||||
|
raise Exception('The value you enter is not an integer!')
|
||||||
|
|
||||||
|
os.system('mkdir save 2>/dev/null')
|
||||||
|
|
||||||
|
for iqpt in np.arange(1,nqpt+1):
|
||||||
|
label = str(iqpt)
|
||||||
|
|
||||||
|
# Case calculation in seq.
|
||||||
|
if SEQ:
|
||||||
|
# Case with SOC
|
||||||
|
if SOC == 'true':
|
||||||
|
os.system('cp '+prefix+'.dyn0 '+prefix+'.dyn0.xml')
|
||||||
|
os.system('cp '+prefix+'.dyn'+str(iqpt)+'.xml save/'+prefix+'.dyn_q'+label+'.xml')
|
||||||
|
if (iqpt == 1):
|
||||||
|
os.system('cp _ph0/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||||
|
os.system('cp '+prefix+'.fc.xml save/ifc.q2r.xml')
|
||||||
|
else:
|
||||||
|
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||||
|
# Case without SOC
|
||||||
|
if SOC == 'false':
|
||||||
|
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
|
||||||
|
if (iqpt == 1):
|
||||||
|
os.system('cp _ph0/'+prefix+'.dvscf save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||||
|
os.system('cp '+prefix+'.fc save/ifc.q2r')
|
||||||
|
else:
|
||||||
|
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Case with SOC
|
||||||
|
if SOC == 'true':
|
||||||
|
os.system('cp '+prefix+'.dyn0 '+prefix+'.dyn0.xml')
|
||||||
|
os.system('cp '+prefix+'.dyn'+str(iqpt)+'.xml save/'+prefix+'.dyn_q'+label+'.xml')
|
||||||
|
if (iqpt == 1):
|
||||||
|
os.system('cp _ph0/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||||
|
os.system('cp '+prefix+'.fc.xml save/ifc.q2r.xml')
|
||||||
|
else:
|
||||||
|
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||||
|
# Case without SOC
|
||||||
|
if SOC == 'false':
|
||||||
|
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
|
||||||
|
if (iqpt == 1):
|
||||||
|
os.system('cp _ph0/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||||
|
os.system('cp '+prefix+'.fc save/ifc.q2r')
|
||||||
|
else:
|
||||||
|
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||||
|
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||||
|
|
195
EPW/bin/pp.py
195
EPW/bin/pp.py
|
@ -4,191 +4,11 @@
|
||||||
# 14/07/2015 - Creation of the script - Samuel Ponce
|
# 14/07/2015 - Creation of the script - Samuel Ponce
|
||||||
# 14/03/2018 - Automatically reads the number of q-points - Michael Waters
|
# 14/03/2018 - Automatically reads the number of q-points - Michael Waters
|
||||||
# 14/03/2018 - Detect if SOC is included in the calculation - Samuel Ponce
|
# 14/03/2018 - Detect if SOC is included in the calculation - Samuel Ponce
|
||||||
# 13/11/2018 - Write dyn files in xml format for SOC case - Shunhong Zhang (USTC)
|
|
||||||
#
|
#
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import os
|
import os
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
|
|
||||||
# Convert the dyn files to the xml form, for SOC case - Shunhong Zhang (USTC)
|
|
||||||
def dyn2xml(prefix):
|
|
||||||
ndyn=int(os.popen('head -2 {0}.dyn0|tail -1'.format(prefix)).read())
|
|
||||||
for idyn in range(1,ndyn+1):
|
|
||||||
print '{0}.dyn{1} to {0}.dyn_q{1}.xml'.format(prefix,idyn)
|
|
||||||
dynmat=dyn(prefix,idyn)
|
|
||||||
dynmat._write_xml()
|
|
||||||
def get_geom_info():
|
|
||||||
if os.path.isfile('ph.out')==False:
|
|
||||||
print 'cannot extract geometry info from ph.out'
|
|
||||||
return 1
|
|
||||||
else:
|
|
||||||
volm=float(os.popen('grep -a volume ph.out 2>/dev/null|tail -1').readline().split()[-2])
|
|
||||||
get_at=os.popen('grep -a -A 3 "crystal axes" ph.out 2>/dev/null|tail -3').readlines()
|
|
||||||
at=np.array([[float(item) for item in line.split()[3:6]] for line in get_at])
|
|
||||||
get_bg=os.popen('grep -a -A 3 "reciprocal axes" ph.out 2>/dev/null|tail -3').readlines()
|
|
||||||
bg=np.array([[float(item) for item in line.split()[3:6]] for line in get_bg])
|
|
||||||
return volm,at,bg
|
|
||||||
|
|
||||||
class dyn(object):
|
|
||||||
def __init__(self,prefix,idyn):
|
|
||||||
self._prefix=prefix
|
|
||||||
self._idyn=idyn
|
|
||||||
fil='{0}.dyn{1}'.format(prefix,idyn)
|
|
||||||
f=open(fil)
|
|
||||||
self._comment=f.readline()
|
|
||||||
f.readline()
|
|
||||||
line=f.readline().split()
|
|
||||||
self._ntype=int(line[0])
|
|
||||||
self._natom=int(line[1])
|
|
||||||
self._ibrav=int(line[2])
|
|
||||||
self._nspin=1
|
|
||||||
self._cell_dim=np.array([float(ii) for ii in line[3:]])
|
|
||||||
self._volm=0
|
|
||||||
self._at=np.zeros((3,3),float)
|
|
||||||
self._bg=np.zeros((3,3),float)
|
|
||||||
try: self._volm,self._at,self._bg = get_geom_info()
|
|
||||||
except: print 'warning: lattice info not found'
|
|
||||||
self._species=[];
|
|
||||||
self._mass=[]
|
|
||||||
for i in range(self._ntype):
|
|
||||||
line=f.readline().split()
|
|
||||||
self._species.append(line[1].strip("'"))
|
|
||||||
self._mass.append(float(line[-1])/911.4442) # normalize to atomic mass
|
|
||||||
self._atom_type=np.zeros(self._natom,int)
|
|
||||||
self._pos=np.zeros((self._natom,3),float)
|
|
||||||
for i in range(self._natom):
|
|
||||||
line=f.readline().split()
|
|
||||||
self._atom_type[i]=int(line[1])
|
|
||||||
for j in range(3): self._pos[i,j]=float(line[j+2])
|
|
||||||
self._nqpt=int(os.popen('grep -c "Dynamical Matrix" {0}'.format(fil)).read().split()[0])
|
|
||||||
self._qpt=[]
|
|
||||||
self._dynmat=np.zeros((self._nqpt,self._natom,self._natom,3,3,2),float)
|
|
||||||
f.readline()
|
|
||||||
for iqpt in range(self._nqpt):
|
|
||||||
f.readline();
|
|
||||||
f.readline()
|
|
||||||
line=f.readline().split()
|
|
||||||
self._qpt.append(np.array([float(item) for item in line[3:6]]))
|
|
||||||
f.readline()
|
|
||||||
for i in range(self._natom):
|
|
||||||
for j in range(self._natom):
|
|
||||||
f.readline()
|
|
||||||
data=np.fromfile(f,sep=' ',count=18,dtype=float).reshape(3,3,2)
|
|
||||||
self._dynmat[iqpt,i,j]=data
|
|
||||||
self._qpt=np.array(self._qpt)
|
|
||||||
for i in range(5): f.readline()
|
|
||||||
self._freq=np.zeros((self._natom*3,2),float)
|
|
||||||
self._disp=np.zeros((self._natom*3,self._natom,3,2),float)
|
|
||||||
for i in range(self._natom*3):
|
|
||||||
line=f.readline().split()
|
|
||||||
self._freq[i,0]=float(line[4])
|
|
||||||
self._freq[i,1]=float(line[7])
|
|
||||||
for j in range(self._natom):
|
|
||||||
line=f.readline().split()[1:-1]
|
|
||||||
data=np.array([float(item) for item in line]).reshape(3,2)
|
|
||||||
self._disp[i,j]=data
|
|
||||||
|
|
||||||
def _write_xml(self):
|
|
||||||
doc=minidom.Document()
|
|
||||||
root = doc.createElement('Root')
|
|
||||||
doc.appendChild(root)
|
|
||||||
geom_info=doc.createElement('GEOMETRY_INFO')
|
|
||||||
tags=('NUMBER_OF_TYPES','NUMBER_OF_ATOMS','BRAVAIS_LATTICE_INDEX','SPIN_COMPONENTS')
|
|
||||||
numbers=(self._ntype,self._natom,self._ibrav,self._nspin)
|
|
||||||
for i,(tag,num) in enumerate(zip(tags,numbers)):
|
|
||||||
inode=doc.createElement(tag)
|
|
||||||
inode.setAttribute('type','integer')
|
|
||||||
inode.setAttribute('size','1')
|
|
||||||
inode.text=num
|
|
||||||
inode.appendChild(doc.createTextNode(str(num)))
|
|
||||||
geom_info.appendChild(inode)
|
|
||||||
cell_dim=doc.createElement('CELL_DIMENSIONS')
|
|
||||||
cell_dim.setAttribute('type','real')
|
|
||||||
cell_dim.setAttribute('size','6')
|
|
||||||
for i in range(6):
|
|
||||||
cell_dim.appendChild(doc.createTextNode('{0:16.10f}'.format(self._cell_dim[i])))
|
|
||||||
geom_info.appendChild(cell_dim)
|
|
||||||
tags=['AT','BG']
|
|
||||||
for tag,lat in zip(tags,(self._at,self._bg)):
|
|
||||||
inode=doc.createElement(tag)
|
|
||||||
inode.setAttribute('type','real')
|
|
||||||
inode.setAttribute('size','9')
|
|
||||||
inode.setAttribute('columns','3')
|
|
||||||
for i in range(3):
|
|
||||||
text=' '.join(['{0:16.10f}'.format(item) for item in lat[i]])
|
|
||||||
inode.appendChild(doc.createTextNode(text))
|
|
||||||
geom_info.appendChild(inode)
|
|
||||||
volm=doc.createElement('UNIT_CELL_VOLUME_AU')
|
|
||||||
volm.setAttribute('type','real')
|
|
||||||
volm.setAttribute('size','1')
|
|
||||||
volm.appendChild(doc.createTextNode('{0:16.10f}'.format(self._volm)))
|
|
||||||
geom_info.appendChild(volm)
|
|
||||||
for itype in range(self._ntype):
|
|
||||||
nt=doc.createElement('TYPE_NAME.{0}'.format(itype+1))
|
|
||||||
nt.setAttribute('type','character')
|
|
||||||
nt.setAttribute('size','1')
|
|
||||||
nt.setAttribute('len','3')
|
|
||||||
nt.appendChild(doc.createTextNode('{0}'.format(self._species[itype])))
|
|
||||||
na=doc.createElement('MASS.{0}'.format(itype+1))
|
|
||||||
na.setAttribute('type','real')
|
|
||||||
na.setAttribute('size','1')
|
|
||||||
na.appendChild(doc.createTextNode('{0:16.10f}'.format(self._mass[itype])))
|
|
||||||
geom_info.appendChild(nt)
|
|
||||||
geom_info.appendChild(na)
|
|
||||||
for iat in range(self._natom):
|
|
||||||
at=doc.createElement('ATOM.{0}'.format(iat+1))
|
|
||||||
at.setAttribute('SPECIES','{0}'.format(self._species[self._atom_type[iat]-1]))
|
|
||||||
at.setAttribute('INDEX',str(iat+1))
|
|
||||||
pos=' '.join(['{0:16.10f}'.format(item) for item in self._pos[iat]])
|
|
||||||
at.setAttribute('TAU',pos)
|
|
||||||
geom_info.appendChild(at)
|
|
||||||
nqpt=doc.createElement('NUMBER_OF_Q')
|
|
||||||
nqpt.setAttribute('type','integer')
|
|
||||||
nqpt.setAttribute('size','1')
|
|
||||||
nqpt.appendChild(doc.createTextNode(str(self._nqpt)))
|
|
||||||
geom_info.appendChild(nqpt)
|
|
||||||
root.appendChild(geom_info)
|
|
||||||
for iqpt in range(self._nqpt):
|
|
||||||
dynmat=doc.createElement('DYNAMICAL_MAT_.{0}'.format(iqpt+1))
|
|
||||||
qpt=doc.createElement('Q_POINT')
|
|
||||||
qpt.setAttribute('type','real')
|
|
||||||
qpt.setAttribute('size','3')
|
|
||||||
qpt.setAttribute('columns','3')
|
|
||||||
tnode=doc.createTextNode(' '.join(['{0:16.10f}'.format(item) for item in self._qpt[iqpt]]))
|
|
||||||
qpt.appendChild(tnode)
|
|
||||||
dynmat.appendChild(qpt)
|
|
||||||
for iat in range(self._natom):
|
|
||||||
for jat in range(self._natom):
|
|
||||||
ph=doc.createElement('PHI.{0}.{1}'.format(iat+1,jat+1))
|
|
||||||
ph.setAttribute('type','complex')
|
|
||||||
ph.setAttribute('size','9')
|
|
||||||
ph.setAttribute('columns','3')
|
|
||||||
for i in range(3):
|
|
||||||
for j in range(3):
|
|
||||||
text='{0:16.10f} {1:16.10f}'.format(self._dynmat[iqpt,iat,jat,i,j,0],self._dynmat[iqpt,iat,jat,i,j,1])
|
|
||||||
ph.appendChild(doc.createTextNode(text))
|
|
||||||
dynmat.appendChild(ph)
|
|
||||||
root.appendChild(dynmat)
|
|
||||||
mode=doc.createElement('FREQUENCIES_THZ_CMM1')
|
|
||||||
for iomega in range(self._natom*3):
|
|
||||||
inode=doc.createElement('OMEGA.{0}'.format(iomega+1))
|
|
||||||
inode.setAttribute('type','real')
|
|
||||||
inode.setAttribute('size','2')
|
|
||||||
inode.setAttribute('columns','2')
|
|
||||||
inode.appendChild(doc.createTextNode('{0:16.10f} {1:16.10f}'.format(self._freq[iomega,0],self._freq[iomega,1])))
|
|
||||||
idisp=doc.createElement('DISPLACEMENT.{0}'.format(iomega+1))
|
|
||||||
idisp.setAttribute('tpye','complex')
|
|
||||||
idisp.setAttribute('size','3')
|
|
||||||
for iat in range(self._natom):
|
|
||||||
for j in range(3):
|
|
||||||
tnode=doc.createTextNode('{0:16.10f} {1:16.10f}'.format(self._disp[iomega,iat,j,0],self._disp[iomega,iat,j,1]))
|
|
||||||
idisp.appendChild(tnode)
|
|
||||||
mode.appendChild(inode)
|
|
||||||
mode.appendChild(idisp)
|
|
||||||
root.appendChild(mode)
|
|
||||||
fp = open('{0}.dyn_q{1}.xml'.format(self._prefix,self._idyn), 'w')
|
|
||||||
doc.writexml(fp, addindent=' ', newl='\n')
|
|
||||||
|
|
||||||
# Return the number of q-points in the IBZ
|
# Return the number of q-points in the IBZ
|
||||||
def get_nqpt(prefix):
|
def get_nqpt(prefix):
|
||||||
fname = '_ph0/' +prefix+'.phsave/control_ph.xml'
|
fname = '_ph0/' +prefix+'.phsave/control_ph.xml'
|
||||||
|
@ -233,21 +53,6 @@ prefix = str(user_input)
|
||||||
# Test if SOC
|
# Test if SOC
|
||||||
SOC = hasSOC(prefix)
|
SOC = hasSOC(prefix)
|
||||||
|
|
||||||
# If SOC detected, but dyn is not in XML and we want to convert it
|
|
||||||
if SOC=='true':
|
|
||||||
user_input = raw_input('Calculation with SOC detected. Do you want to convert dyn in XML format [y/n]?\n')
|
|
||||||
if str(user_input) == 'y':
|
|
||||||
dyn2xml(prefix)
|
|
||||||
os.system('mv {0}.dyn*.xml save'.format(prefix))
|
|
||||||
|
|
||||||
# If no SOC detected, do you want to convert into XML format
|
|
||||||
if SOC=='false':
|
|
||||||
user_input = raw_input('Calculation without SOC detected. Do you want to convert to xml anyway [y/n]?\n')
|
|
||||||
if str(user_input) == 'y':
|
|
||||||
SOC = 'true'
|
|
||||||
dyn2xml(prefix)
|
|
||||||
os.system('mv {0}.dyn*.xml save'.format(prefix))
|
|
||||||
|
|
||||||
# Test if seq. or parallel run
|
# Test if seq. or parallel run
|
||||||
SEQ = isSEQ(prefix)
|
SEQ = isSEQ(prefix)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ authors: Samuel Poncé
|
||||||
author_description: The EPW project is mainly developed at the university of Oxford.
|
author_description: The EPW project is mainly developed at the university of Oxford.
|
||||||
github: https://github.com/sponce24
|
github: https://github.com/sponce24
|
||||||
email: samuel.pon@gmail.com
|
email: samuel.pon@gmail.com
|
||||||
project_sourceforge: http://qeforge.qe-forge.org/gf/project/q-e/
|
|
||||||
predocmark: >
|
predocmark: >
|
||||||
media_dir: ./media
|
media_dir: ./media
|
||||||
page_dir: ./Ford
|
page_dir: ./Ford
|
||||||
|
|
|
@ -11,7 +11,7 @@ MODFLAGS= $(BASEMOD_FLAGS) \
|
||||||
$(MOD_FLAG)../../PW/src \
|
$(MOD_FLAG)../../PW/src \
|
||||||
$(MOD_FLAG)../../PHonon/PH \
|
$(MOD_FLAG)../../PHonon/PH \
|
||||||
$(MOD_FLAG)../../LR_Modules \
|
$(MOD_FLAG)../../LR_Modules \
|
||||||
$(MOD_FLAG)../../wannier90-2.1.0/src/obj \
|
$(MOD_FLAG)../../wannier90-3.0.0/src/obj \
|
||||||
$(MOD_FLAG)../../dft-d3
|
$(MOD_FLAG)../../dft-d3
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -106,7 +106,7 @@ system_mem_usage.o
|
||||||
|
|
||||||
PHOBJS = ../../PHonon/PH/libph.a
|
PHOBJS = ../../PHonon/PH/libph.a
|
||||||
PWOBJS = ../../PW/src/libpw.a
|
PWOBJS = ../../PW/src/libpw.a
|
||||||
W90LIB = ../../wannier90-2.1.0/libwannier.a
|
W90LIB = ../../wannier90-3.0.0/libwannier.a
|
||||||
LRMODS = ../../LR_Modules/liblrmod.a
|
LRMODS = ../../LR_Modules/liblrmod.a
|
||||||
PWOBJS = ../../PW/src/libpw.a
|
PWOBJS = ../../PW/src/libpw.a
|
||||||
QEMODS = ../../Modules/libqemod.a ../../KS_Solvers/libks_solvers.a \
|
QEMODS = ../../Modules/libqemod.a ../../KS_Solvers/libks_solvers.a \
|
||||||
|
@ -115,8 +115,6 @@ LIBOBJS =../../LAXlib/libqela.a ../../UtilXlib/libutil.a ../../clib/clib.a ../..
|
||||||
|
|
||||||
TLDEPS= pw ph
|
TLDEPS= pw ph
|
||||||
|
|
||||||
#all : pw ph wannier wcorr pp ld1 upf libepw.a epw.x
|
|
||||||
#all : pw ph wannier pp ld1 upf libepw.a epw.x
|
|
||||||
all : pw ph wannier pp upf libepw.a epw.x
|
all : pw ph wannier pp upf libepw.a epw.x
|
||||||
|
|
||||||
libepw.a : $(EPWOBJS)
|
libepw.a : $(EPWOBJS)
|
||||||
|
@ -128,11 +126,6 @@ epw.x : epw.o libepw.a $(PHOBJS) $(LRMODS) $(PWOBJS) $(W90LIB) $(QEMODS) $(LIBOB
|
||||||
epw.o libepw.a $(PHOBJS) $(LRMODS) $(W90LIB) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
|
epw.o libepw.a $(PHOBJS) $(LRMODS) $(W90LIB) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(QELIBS)
|
||||||
- ( cd ../bin ; ln -fs ../src/epw.x . )
|
- ( cd ../bin ; ln -fs ../src/epw.x . )
|
||||||
|
|
||||||
# SP: Here to correct bugs in wannier 2.0.1
|
|
||||||
|
|
||||||
wcorr :
|
|
||||||
sed -i "s/allocate(fermi_energy_list(nfermi),stat=ierr)/if (.not. allocated(fermi_energy_list) ) allocate(fermi_energy_list(nfermi))/g" ../../wannier90-2.0.1/src/parameters.F90 ; sed -i "s/allocate(kubo_freq_list(kubo_nfreq),stat=ierr)/if (.not. allocated(kubo_freq_list) ) allocate(kubo_freq_list(kubo_nfreq)) /g" ../../wannier90-2.0.1/src/parameters.F90 ; cp wannier_lib.f90 wannier_lib.F90 ; cp wannier_lib.F90 ../../wannier90-2.0.1/src/
|
|
||||||
|
|
||||||
pw :
|
pw :
|
||||||
cd ../../ ; make pw
|
cd ../../ ; make pw
|
||||||
|
|
||||||
|
@ -140,7 +133,7 @@ ph :
|
||||||
cd ../../ ; make ph
|
cd ../../ ; make ph
|
||||||
|
|
||||||
wannier :
|
wannier :
|
||||||
cd ../../ ; make w90 ; cd wannier90-2.1.0/ ; make lib
|
cd ../../ ; make w90 ; cd wannier90-3.0.0/ ; make lib
|
||||||
|
|
||||||
pp :
|
pp :
|
||||||
cd ../../ ; make pp
|
cd ../../ ; make pp
|
||||||
|
|
|
@ -645,8 +645,6 @@
|
||||||
! every processor has just a chunk of the array, I may need some
|
! every processor has just a chunk of the array, I may need some
|
||||||
! communication)
|
! communication)
|
||||||
!
|
!
|
||||||
! No ultrasoft now
|
|
||||||
!
|
|
||||||
! I use the rule : if not found then gmap = 0
|
! I use the rule : if not found then gmap = 0
|
||||||
! Note that the map will be used only up to npwx (small sphere),
|
! Note that the map will be used only up to npwx (small sphere),
|
||||||
! while the G-vectors lost in the process are on the surface of
|
! while the G-vectors lost in the process are on the surface of
|
||||||
|
|
|
@ -65,8 +65,6 @@
|
||||||
zi_all(:,:), &!
|
zi_all(:,:), &!
|
||||||
esigmar_all(:,:,:), &!
|
esigmar_all(:,:,:), &!
|
||||||
esigmai_all(:,:,:), &!
|
esigmai_all(:,:,:), &!
|
||||||
gammar_all(:,:,:), &! Real part of the Phonon self-energy (freq. dependent for spectral function)
|
|
||||||
gammai_all(:,:,:), &! Imaginary part of the Phonon self-energy (freq. dependent for spectral function)
|
|
||||||
jdos(:), &!
|
jdos(:), &!
|
||||||
spectra(:,:,:,:,:,:), &! dipole absorption spectra, polarizations, nomega, nsmear, dme/vme, absorption/emission
|
spectra(:,:,:,:,:,:), &! dipole absorption spectra, polarizations, nomega, nsmear, dme/vme, absorption/emission
|
||||||
sumr(:,:,:,:), &! to apply the ASR correction to every xq
|
sumr(:,:,:,:), &! to apply the ASR correction to every xq
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
USE io_epw, ONLY : iuepb, iuqpeig
|
USE io_epw, ONLY : iuepb, iuqpeig
|
||||||
USE pwcom, ONLY : et, xk, nks, nbnd, nkstot
|
USE pwcom, ONLY : et, xk, nks, nbnd, nkstot
|
||||||
USE cell_base, ONLY : at, bg
|
USE cell_base, ONLY : at, bg
|
||||||
USE symm_base, ONLY : irt, s, nsym, ftau, sname, invs, s_axis_to_cart, &
|
USE symm_base, ONLY : irt, s, nsym, ft, sname, invs, s_axis_to_cart, &
|
||||||
sr, nrot, copy_sym, set_sym_bl, find_sym, &
|
sr, nrot, copy_sym, set_sym_bl, find_sym, &
|
||||||
inverse_s, remove_sym, allfrac
|
inverse_s, remove_sym, allfrac
|
||||||
USE start_k, ONLY : nk1, nk2, nk3
|
USE start_k, ONLY : nk1, nk2, nk3
|
||||||
|
@ -398,7 +398,7 @@
|
||||||
minus_q = .true.
|
minus_q = .true.
|
||||||
sym = .false.
|
sym = .false.
|
||||||
sym(1:nsym) = .true.
|
sym(1:nsym) = .true.
|
||||||
CALL smallg_q(xq, 0, at, bg, nsym, s, ftau, sym, minus_q) ! s is intent(in)
|
CALL smallg_q(xq, 0, at, bg, nsym, s, sym, minus_q) ! s is intent(in)
|
||||||
!
|
!
|
||||||
! SP: Notice that the function copy_sym reshuffles the s matrix for each irr_q.
|
! SP: Notice that the function copy_sym reshuffles the s matrix for each irr_q.
|
||||||
! This is why we then need to call gmap_sym for each irr_q [see below].
|
! This is why we then need to call gmap_sym for each irr_q [see below].
|
||||||
|
@ -429,7 +429,7 @@
|
||||||
! reshuffles the s matrix for each irr_q [putting the sym of the small group of q first].
|
! reshuffles the s matrix for each irr_q [putting the sym of the small group of q first].
|
||||||
!
|
!
|
||||||
! [I checked that gmapsym(gmapsym(ig,isym),invs(isym)) = ig]
|
! [I checked that gmapsym(gmapsym(ig,isym),invs(isym)) = ig]
|
||||||
CALL gmap_sym(nsym, s, ftau, gmapsym, eigv, invs)
|
CALL gmap_sym(nsym, s, ft, gmapsym, eigv, invs)
|
||||||
!
|
!
|
||||||
! Re-set the variables needed for the pattern representation
|
! Re-set the variables needed for the pattern representation
|
||||||
! and the symmetries of the small group of irr-q
|
! and the symmetries of the small group of irr-q
|
||||||
|
@ -485,20 +485,17 @@
|
||||||
CALL s_axis_to_cart() ! give sr(:,:, isym)
|
CALL s_axis_to_cart() ! give sr(:,:, isym)
|
||||||
DO isym = 1, nsym
|
DO isym = 1, nsym
|
||||||
WRITE( stdout, '(/6x,"isym = ",i2,5x,a45/)') isym, sname(isym)
|
WRITE( stdout, '(/6x,"isym = ",i2,5x,a45/)') isym, sname(isym)
|
||||||
IF (ftau(1,isym).ne.0 .OR. ftau(2,isym).ne.0 .OR. ftau(3,isym).ne.0) THEN
|
IF ( ft(1,isym)**2 + ft(2,isym)**2 + ft(3,isym)**2 > 1.0d-8 ) THEN
|
||||||
ft1 = at(1,1)*ftau(1,isym)/dfftp%nr1 + at(1,2)*ftau(2,isym)/dfftp%nr2 + &
|
ft1 = at(1,1)*ft(1,isym) + at(1,2)*ft(2,isym) + at(1,3)*ft(3,isym)
|
||||||
at(1,3)*ftau(3,isym)/dfftp%nr3
|
ft2 = at(2,1)*ft(1,isym) + at(2,2)*ft(2,isym) + at(2,3)*ft(3,isym)
|
||||||
ft2 = at(2,1)*ftau(1,isym)/dfftp%nr1 + at(2,2)*ftau(2,isym)/dfftp%nr2 + &
|
ft3 = at(3,1)*ft(1,isym) + at(3,2)*ft(2,isym) + at(3,3)*ft(3,isym)
|
||||||
at(2,3)*ftau(3,isym)/dfftp%nr3
|
|
||||||
ft3 = at(3,1)*ftau(1,isym)/dfftp%nr1 + at(3,2)*ftau(2,isym)/dfftp%nr2 + &
|
|
||||||
at(3,3)*ftau(3,isym)/dfftp%nr3
|
|
||||||
WRITE(stdout, '(1x,"cryst.",3x,"s(",i2,") = (",3(i6,5x), &
|
WRITE(stdout, '(1x,"cryst.",3x,"s(",i2,") = (",3(i6,5x), &
|
||||||
& " ) f =( ",f10.7," )")') &
|
& " ) f =( ",f10.7," )")') &
|
||||||
isym, (s(1,ipol,isym),ipol=1,3), dble(ftau(1,isym))/dble(dfftp%nr1)
|
isym, (s(1,ipol,isym),ipol=1,3), ft(1,isym)
|
||||||
WRITE(stdout, '(17x," (",3(i6,5x), " ) ( ",f10.7," )")') &
|
WRITE(stdout, '(17x," (",3(i6,5x), " ) ( ",f10.7," )")') &
|
||||||
(s(2,ipol,isym),ipol=1,3), dble(ftau(2,isym))/dble(dfftp%nr2)
|
(s(2,ipol,isym),ipol=1,3), ft(2,isym)
|
||||||
WRITE(stdout, '(17x," (",3(i6,5x), " ) ( ",f10.7," )"/)') &
|
WRITE(stdout, '(17x," (",3(i6,5x), " ) ( ",f10.7," )"/)') &
|
||||||
(s(3,ipol,isym),ipol=1,3), dble(ftau(3,isym))/dble(dfftp%nr3)
|
(s(3,ipol,isym),ipol=1,3), ft(3,isym)
|
||||||
WRITE(stdout, '(1x,"cart. ",3x,"s(",i2,") = (",3f11.7, &
|
WRITE(stdout, '(1x,"cart. ",3x,"s(",i2,") = (",3f11.7, &
|
||||||
& " ) f =( ",f10.7," )")') &
|
& " ) f =( ",f10.7," )")') &
|
||||||
isym, (sr(1,ipol,isym),ipol=1,3), ft1
|
isym, (sr(1,ipol,isym),ipol=1,3), ft1
|
||||||
|
@ -563,7 +560,7 @@
|
||||||
!
|
!
|
||||||
! check whether the symmetry belongs to a symmorphic group
|
! check whether the symmetry belongs to a symmorphic group
|
||||||
!
|
!
|
||||||
symmo = (ftau(1,isym).eq.0 .AND. ftau(2,isym).eq.0 .AND. ftau(3,isym).eq.0)
|
symmo = ( ft(1,isym)**2 + ft(2,isym)**2 + ft(3,isym)**2 > 1.0d-8 )
|
||||||
!
|
!
|
||||||
WRITE(stdout,'(3i5,L3,L3)') iq, i, isym, nog, symmo
|
WRITE(stdout,'(3i5,L3,L3)') iq, i, isym, nog, symmo
|
||||||
!
|
!
|
||||||
|
|
|
@ -18,9 +18,6 @@
|
||||||
!! Compact formalism Dec 2006
|
!! Compact formalism Dec 2006
|
||||||
!! Phonon irreducible zone Mar 2007
|
!! Phonon irreducible zone Mar 2007
|
||||||
!!
|
!!
|
||||||
!! No ultrasoft now
|
|
||||||
!! No spin polarization
|
|
||||||
!!
|
|
||||||
!! RM - add noncolin case
|
!! RM - add noncolin case
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
|
@ -1475,6 +1472,13 @@
|
||||||
!
|
!
|
||||||
ENDDO
|
ENDDO
|
||||||
CLOSE(lambda_phself)
|
CLOSE(lambda_phself)
|
||||||
|
!
|
||||||
|
! SP - 03/2019
|
||||||
|
! \Gamma = 1/\tau = phonon lifetime
|
||||||
|
! \Gamma = - 2 * Im \Pi^R where \Pi^R is the retarted phonon self-energy.
|
||||||
|
! Im \Pi^R = pi*k-point weight*[f(E_k+q) - f(E_k)]*delta[E_k+q - E_k - w_q]
|
||||||
|
! Since gamma_all = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q] we have
|
||||||
|
! \Gamma = 2 * gamma_all
|
||||||
OPEN(unit=linewidth_phself,file='linewidth.phself')
|
OPEN(unit=linewidth_phself,file='linewidth.phself')
|
||||||
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
|
WRITE(linewidth_phself, '(a)') '# Phonon frequency and phonon lifetime in meV '
|
||||||
WRITE(linewidth_phself,'(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
|
WRITE(linewidth_phself,'(a)') '# Q-point Mode Phonon freq (meV) Phonon linewidth (meV)'
|
||||||
|
@ -1482,7 +1486,7 @@
|
||||||
!
|
!
|
||||||
DO imode=1, nmodes
|
DO imode=1, nmodes
|
||||||
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iqq,imode,&
|
WRITE(linewidth_phself,'(i9,i6,E20.8,E22.10)') iqq,imode,&
|
||||||
ryd2mev*wf(imode,iqq),ryd2mev*REAL(gamma_all(imode,iqq,1))
|
ryd2mev*wf(imode,iqq), 2.0d0 * ryd2mev * REAL(gamma_all(imode,iqq,1))
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
ENDDO
|
ENDDO
|
||||||
|
|
|
@ -20,9 +20,6 @@
|
||||||
!! Compact formalism Dec 2006
|
!! Compact formalism Dec 2006
|
||||||
!! Phonon irreducible zone Mar 2007
|
!! Phonon irreducible zone Mar 2007
|
||||||
!!
|
!!
|
||||||
!! No ultrasoft now
|
|
||||||
!! No spin polarization
|
|
||||||
!!
|
|
||||||
!! RM - add noncolin case
|
!! RM - add noncolin case
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
PROGRAM epw
|
PROGRAM epw
|
||||||
!! author: Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
!! author: Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
||||||
!! version: v5.0
|
!! version: v5.1
|
||||||
!! license: GNU
|
!! license: GNU
|
||||||
!! summary: EPW main driver
|
!! summary: EPW main driver
|
||||||
!!
|
!!
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
CHARACTER (LEN=12) :: code = 'EPW'
|
CHARACTER (LEN=12) :: code = 'EPW'
|
||||||
!! Name of the program
|
!! Name of the program
|
||||||
!
|
!
|
||||||
version_number = '5.0.0'
|
version_number = '5.1.0'
|
||||||
!
|
!
|
||||||
CALL init_clocks( .TRUE. )
|
CALL init_clocks( .TRUE. )
|
||||||
!
|
!
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
!
|
!
|
||||||
IF ( elph ) THEN
|
IF ( elph ) THEN
|
||||||
!
|
!
|
||||||
CALL dvanqq2()
|
! CALL dvanqq2()
|
||||||
!
|
!
|
||||||
CALL elphon_shuffle_wrap()
|
CALL elphon_shuffle_wrap()
|
||||||
!
|
!
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
USE gvect, ONLY : gcutm, ngm
|
USE gvect, ONLY : gcutm, ngm
|
||||||
USE gvecs, ONLY : dual, doublegrid, gcutms, ngms
|
USE gvecs, ONLY : dual, doublegrid, gcutms, ngms
|
||||||
USE gvecw, ONLY : ecutwfc
|
USE gvecw, ONLY : ecutwfc
|
||||||
USE symm_base, ONLY : s, sname, ftau, s_axis_to_cart, sr, t_rev
|
USE symm_base, ONLY : s, sname, ft, s_axis_to_cart, sr, t_rev
|
||||||
USE noncollin_module, ONLY : noncolin
|
USE noncollin_module, ONLY : noncolin
|
||||||
USE spin_orb, ONLY : lspinorb, domag
|
USE spin_orb, ONLY : lspinorb, domag
|
||||||
USE funct, ONLY : write_dft_name
|
USE funct, ONLY : write_dft_name
|
||||||
|
@ -151,25 +151,19 @@
|
||||||
IF (noncolin.and.domag) &
|
IF (noncolin.and.domag) &
|
||||||
WRITE(stdout,'(1x, "Time Reversal",i3)') t_rev(isym)
|
WRITE(stdout,'(1x, "Time Reversal",i3)') t_rev(isym)
|
||||||
!
|
!
|
||||||
IF (ftau(1,isym).ne.0 .OR. ftau(2,isym).ne.0 .OR. ftau(3,isym).ne.0) THEN
|
IF ( ft(1,isym)**2 + ft(2,isym)**2 + ft(3,isym)**2 > 1.0d-8 ) THEN
|
||||||
ft1 = at(1,1) * ftau(1,isym) / dfftp%nr1 &
|
ft1 = at(1,1)*ft(1,isym) + at(1,2)*ft(2,isym) + at(1,3)*ft(3,isym)
|
||||||
+ at(1,2) * ftau(2,isym) / dfftp%nr2 &
|
ft2 = at(2,1)*ft(1,isym) + at(2,2)*ft(2,isym) + at(2,3)*ft(3,isym)
|
||||||
+ at(1,3) * ftau(3,isym) / dfftp%nr3
|
ft3 = at(3,1)*ft(1,isym) + at(3,2)*ft(2,isym) + at(3,3)*ft(3,isym)
|
||||||
ft2 = at(2,1) * ftau(1,isym) / dfftp%nr1 &
|
|
||||||
+ at(2,2) * ftau(2,isym) / dfftp%nr2 &
|
|
||||||
+ at(2,3) * ftau(3,isym) / dfftp%nr3
|
|
||||||
ft3 = at(3,1) * ftau(1,isym) / dfftp%nr1 &
|
|
||||||
+ at(3,2) * ftau(2,isym) / dfftp%nr2 &
|
|
||||||
+ at(3,3) * ftau(3,isym) / dfftp%nr3
|
|
||||||
WRITE(stdout, '(1x,"cryst.",3x,"s(",i2,") = (",3i6, &
|
WRITE(stdout, '(1x,"cryst.",3x,"s(",i2,") = (",3i6, &
|
||||||
& " ) f =( ",f10.7," )")') isymq, &
|
& " ) f =( ",f10.7," )")') isymq, &
|
||||||
& (s(1,ipol,isym), ipol = 1, 3), DBLE(ftau(1,isym))/DBLE(dfftp%nr1)
|
& (s(1,ipol,isym), ipol = 1, 3), ft(1,isym)
|
||||||
WRITE(stdout, '(17x," (",3(i6,5x), &
|
WRITE(stdout, '(17x," (",3(i6,5x), &
|
||||||
& " ) ( ",f10.7," )")') &
|
& " ) ( ",f10.7," )")') &
|
||||||
& (s(2,ipol,isym), ipol = 1, 3), DBLE(ftau(2,isym))/DBLE(dfftp%nr2)
|
& (s(2,ipol,isym), ipol = 1, 3), ft(2,isym)
|
||||||
WRITE(stdout, '(17x," (",3(i6,5x), &
|
WRITE(stdout, '(17x," (",3(i6,5x), &
|
||||||
& " ) ( ",f10.7," )"/)') &
|
& " ) ( ",f10.7," )"/)') &
|
||||||
& (s(3,ipol,isym), ipol = 1, 3), DBLE(ftau(3,isym))/DBLE(dfftp%nr3)
|
& (s(3,ipol,isym), ipol = 1, 3), ft(3,isym)
|
||||||
WRITE(stdout, '(1x,"cart.",3x,"s(",i2,") = (",3f11.7, &
|
WRITE(stdout, '(1x,"cart.",3x,"s(",i2,") = (",3f11.7, &
|
||||||
& " ) f =( ",f10.7," )")') isymq, &
|
& " ) f =( ",f10.7," )")') isymq, &
|
||||||
& (sr(1,ipol,isym), ipol = 1, 3), ft1
|
& (sr(1,ipol,isym), ipol = 1, 3), ft1
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
|
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
|
||||||
!
|
!
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
SUBROUTINE gmap_sym( nsym, s, ftau, gmapsym, eigv, invs )
|
SUBROUTINE gmap_sym( nsym, s, ft, gmapsym, eigv, invs )
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
!!
|
!!
|
||||||
!! For every G vector, find S(G) for all the symmetry operations
|
!! For every G vector, find S(G) for all the symmetry operations
|
||||||
|
@ -20,12 +20,9 @@
|
||||||
!! every processor has just a chunk of the array, I may need some
|
!! every processor has just a chunk of the array, I may need some
|
||||||
!! communication)
|
!! communication)
|
||||||
!!
|
!!
|
||||||
!! No ultrasoft now
|
|
||||||
!!
|
|
||||||
!----------------------------------------------------------------------
|
!----------------------------------------------------------------------
|
||||||
USE kinds, ONLY : DP
|
USE kinds, ONLY : DP
|
||||||
USE constants_epw, ONLY : twopi, ci, cone
|
USE constants_epw, ONLY : twopi, ci, cone
|
||||||
USE fft_base, ONLY : dfftp
|
|
||||||
USE gvect, ONLY : mill, ngm
|
USE gvect, ONLY : mill, ngm
|
||||||
!
|
!
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
@ -34,8 +31,8 @@
|
||||||
!! the number of symmetries of the crystal
|
!! the number of symmetries of the crystal
|
||||||
INTEGER, INTENT(in) :: s(3,3,48)
|
INTEGER, INTENT(in) :: s(3,3,48)
|
||||||
!! the symmetry matrices
|
!! the symmetry matrices
|
||||||
INTEGER, INTENT(in) :: ftau(3,48)
|
REAL(dp), INTENT(in) :: ft(3,48)
|
||||||
!! the fractional traslations
|
!! the fractional traslations in crystal axis
|
||||||
INTEGER, INTENT(in) :: invs(48)
|
INTEGER, INTENT(in) :: invs(48)
|
||||||
!! inverse symmetry matrix
|
!! inverse symmetry matrix
|
||||||
INTEGER, INTENT(out) :: gmapsym(ngm,48)
|
INTEGER, INTENT(out) :: gmapsym(ngm,48)
|
||||||
|
@ -101,14 +98,11 @@
|
||||||
!
|
!
|
||||||
! now the phase factors e^{iGv}
|
! now the phase factors e^{iGv}
|
||||||
!
|
!
|
||||||
IF ( ftau(1,isym) .ne. 0 .OR. ftau(2,isym) .ne. 0 .OR. ftau(3,isym) .ne. 0 ) THEN
|
IF ( ft(1,isym)**2 + ft(2,isym)**2 + ft(3,isym)**2 > 1.0d-8 ) THEN
|
||||||
!
|
!
|
||||||
! fractional traslation in crystal coord is ftau/nr*
|
rdotk = dble( mill(1,ig) ) * ft(1,isym) &
|
||||||
! for cart/crys transform of the G-vecctors have a look at the bottom
|
+ dble( mill(2,ig) ) * ft(2,isym) &
|
||||||
!
|
+ dble( mill(3,ig) ) * ft(3,isym)
|
||||||
rdotk = dble( mill(1,ig) * ftau(1,isym) ) / dble(dfftp%nr1) &
|
|
||||||
+ dble( mill(2,ig) * ftau(2,isym) ) / dble(dfftp%nr2) &
|
|
||||||
+ dble( mill(3,ig) * ftau(3,isym) ) / dble(dfftp%nr3)
|
|
||||||
!
|
!
|
||||||
! the actual translation is -v (have a look at ruota_ijk.f90)
|
! the actual translation is -v (have a look at ruota_ijk.f90)
|
||||||
!
|
!
|
||||||
|
|
|
@ -2074,8 +2074,8 @@
|
||||||
USE io_epw, ONLY : iufilgap
|
USE io_epw, ONLY : iufilgap
|
||||||
USE io_files, ONLY : prefix
|
USE io_files, ONLY : prefix
|
||||||
USE epwcom, ONLY : fsthick
|
USE epwcom, ONLY : fsthick
|
||||||
USE eliashbergcom, ONLY : estemp, Agap, nkfs, nbndfs, ef0, ekfs
|
USE eliashbergcom, ONLY : estemp, Agap, nkfs, nbndfs, ef0, ekfs, w0g
|
||||||
USE constants_epw, ONLY : kelvin2eV, zero
|
USE constants_epw, ONLY : kelvin2eV, zero, eps5
|
||||||
!
|
!
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
!
|
!
|
||||||
|
@ -2099,8 +2099,6 @@
|
||||||
!! Step size in nbin
|
!! Step size in nbin
|
||||||
REAL(DP) :: delta_max
|
REAL(DP) :: delta_max
|
||||||
!! Max value of superconducting gap
|
!! Max value of superconducting gap
|
||||||
REAL(DP) :: sigma
|
|
||||||
!! Variable for smearing
|
|
||||||
REAL(DP) :: weight
|
REAL(DP) :: weight
|
||||||
!! Variable for weight
|
!! Variable for weight
|
||||||
REAL(DP), ALLOCATABLE :: delta_k_bin(:)
|
REAL(DP), ALLOCATABLE :: delta_k_bin(:)
|
||||||
|
@ -2110,8 +2108,8 @@
|
||||||
!
|
!
|
||||||
temp = estemp(itemp) / kelvin2eV
|
temp = estemp(itemp) / kelvin2eV
|
||||||
!
|
!
|
||||||
delta_max = 1.25d0 * maxval(Agap(:,:,itemp))
|
delta_max = 1.1d0 * maxval(Agap(:,:,itemp))
|
||||||
nbin = int(delta_max/(0.005d0/1000.d0))
|
nbin = NINT(delta_max / eps5) + 1
|
||||||
dbin = delta_max / dble(nbin)
|
dbin = delta_max / dble(nbin)
|
||||||
IF ( .not. ALLOCATED(delta_k_bin) ) ALLOCATE( delta_k_bin(nbin) )
|
IF ( .not. ALLOCATED(delta_k_bin) ) ALLOCATE( delta_k_bin(nbin) )
|
||||||
delta_k_bin(:) = zero
|
delta_k_bin(:) = zero
|
||||||
|
@ -2119,11 +2117,9 @@
|
||||||
DO ik = 1, nkfs
|
DO ik = 1, nkfs
|
||||||
DO ibnd = 1, nbndfs
|
DO ibnd = 1, nbndfs
|
||||||
IF ( abs( ekfs(ibnd,ik) - ef0 ) .lt. fsthick ) THEN
|
IF ( abs( ekfs(ibnd,ik) - ef0 ) .lt. fsthick ) THEN
|
||||||
DO ibin = 1, nbin
|
ibin = nint( Agap(ibnd,ik,itemp) / dbin ) + 1
|
||||||
sigma = 1.d0 * dbin
|
weight = w0g(ibnd,ik)
|
||||||
weight = w0gauss( ( Agap(ibnd,ik,itemp) - dble(ibin) * dbin) / sigma, 0 ) / sigma
|
delta_k_bin(ibin) = delta_k_bin(ibin) + weight
|
||||||
delta_k_bin(ibin) = delta_k_bin(ibin) + weight
|
|
||||||
ENDDO
|
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
!
|
!
|
||||||
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
||||||
! Copyright (C) 2016-2018 Samuel Ponce'
|
! Copyright (C) 2016-2019 Samuel Ponce', Roxana Margine, Feliciano Giustino
|
||||||
!
|
!
|
||||||
! This file is distributed under the terms of the GNU General Public
|
! This file is distributed under the terms of the GNU General Public
|
||||||
! License. See the file `LICENSE' in the root directory of the
|
! License. See the file `LICENSE' in the root directory of the
|
||||||
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
|
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
|
||||||
!
|
|
||||||
!
|
!
|
||||||
!-----------------------------------------------------------------------
|
!-----------------------------------------------------------------------
|
||||||
SUBROUTINE print_ibte( iqq, iq, totq, ef0, efcb, first_cycle, ind_tot, ind_totcb, &
|
SUBROUTINE print_ibte( iqq, iq, totq, ef0, efcb, first_cycle, ind_tot, ind_totcb, &
|
||||||
|
|
|
@ -354,9 +354,17 @@
|
||||||
!! The derivative of wgauss: an approximation to the delta function
|
!! The derivative of wgauss: an approximation to the delta function
|
||||||
REAL(KIND=DP) :: Fi_check(3, nstemp)
|
REAL(KIND=DP) :: Fi_check(3, nstemp)
|
||||||
!! Sum rule on population
|
!! Sum rule on population
|
||||||
inv_cell = 1.0d0/omega
|
REAL(KIND=DP) :: sfac
|
||||||
|
!! Spin factor
|
||||||
!
|
!
|
||||||
|
IF (noncolin) THEN
|
||||||
|
sfac = 1.0
|
||||||
|
ELSE
|
||||||
|
sfac = 2.0
|
||||||
|
ENDIF
|
||||||
|
inv_cell = 1.0d0/omega
|
||||||
Fi_check(:,:) = zero
|
Fi_check(:,:) = zero
|
||||||
|
!
|
||||||
! Hole
|
! Hole
|
||||||
IF (ncarrier < -1E5) THEN
|
IF (ncarrier < -1E5) THEN
|
||||||
Sigma(:,:) = zero
|
Sigma(:,:) = zero
|
||||||
|
@ -398,36 +406,30 @@
|
||||||
ij = ij + 1
|
ij = ij + 1
|
||||||
! The factor two in the weight at the end is to
|
! The factor two in the weight at the end is to
|
||||||
! account for spin
|
! account for spin
|
||||||
IF (noncolin) THEN
|
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * sfac / (nkf1*nkf2*nkf3)
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
!tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * v_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ELSE
|
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
!tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * v_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ENDIF
|
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:) * sfac / (nkf1*nkf2*nkf3)
|
||||||
ENDIF ! BZ
|
ENDIF ! BZ
|
||||||
ENDDO ! ikb
|
ENDDO ! ikb
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik ) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik ) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
|
!Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
ENDDO ! ik
|
ENDDO ! ik
|
||||||
ENDDO ! itemp
|
ENDDO ! itemp
|
||||||
!
|
!
|
||||||
!CALL mp_sum( Sigma(:,:), world_comm )
|
|
||||||
!
|
!
|
||||||
DO itemp=1, nstemp
|
DO itemp=1, nstemp
|
||||||
etemp = transp_temp(itemp)
|
etemp = transp_temp(itemp)
|
||||||
|
@ -447,7 +449,6 @@
|
||||||
!IF (my_pool_id == 0 ) write(990,*)ik, etf_all(1,ik + lower_bnd - 1), carrier_density
|
!IF (my_pool_id == 0 ) write(990,*)ik, etf_all(1,ik + lower_bnd - 1), carrier_density
|
||||||
!IF (my_pool_id == 1 ) write(991,*)ik, etf_all(1,ik + lower_bnd - 1), carrier_density
|
!IF (my_pool_id == 1 ) write(991,*)ik, etf_all(1,ik + lower_bnd - 1), carrier_density
|
||||||
ENDDO
|
ENDDO
|
||||||
!CALL mp_sum( carrier_density, world_comm )
|
|
||||||
!
|
!
|
||||||
sigma_up(:,:) = zero
|
sigma_up(:,:) = zero
|
||||||
sigma_up(1,1) = Sigma(1,itemp)
|
sigma_up(1,1) = Sigma(1,itemp)
|
||||||
|
@ -518,29 +519,24 @@
|
||||||
ij = ij + 1
|
ij = ij + 1
|
||||||
! The factor two in the weight at the end is to
|
! The factor two in the weight at the end is to
|
||||||
! account for spin
|
! account for spin
|
||||||
IF (noncolin) THEN
|
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * sfac / (nkf1*nkf2*nkf3)
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
!tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * v_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ELSE
|
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
!tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * v_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ENDIF
|
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:) * sfac / (nkf1*nkf2*nkf3)
|
||||||
ENDIF ! BZ
|
ENDIF ! BZ
|
||||||
ENDDO ! ikb
|
ENDDO ! ikb
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
|
!Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
@ -683,10 +679,16 @@
|
||||||
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
||||||
REAL(KIND=DP), EXTERNAL :: w0gauss
|
REAL(KIND=DP), EXTERNAL :: w0gauss
|
||||||
!! The derivative of wgauss: an approximation to the delta function
|
!! The derivative of wgauss: an approximation to the delta function
|
||||||
|
REAL(KIND=DP) :: sfac
|
||||||
|
!! Spin factor
|
||||||
!
|
!
|
||||||
inv_cell = 1.0d0/omega
|
inv_cell = 1.0d0/omega
|
||||||
Fi_check(:,:) = zero
|
Fi_check(:,:) = zero
|
||||||
|
IF (noncolin) THEN
|
||||||
|
sfac = 1.0
|
||||||
|
ELSE
|
||||||
|
sfac = 2.0
|
||||||
|
ENDIF
|
||||||
!
|
!
|
||||||
! Hole
|
! Hole
|
||||||
IF (ncarrier < -1E5) THEN
|
IF (ncarrier < -1E5) THEN
|
||||||
|
@ -710,17 +712,17 @@
|
||||||
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
|
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + F_SERTA(:, ibnd, ik, itemp)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + F_SERTA(:, ibnd, ik, itemp) * sfac / (nkf1*nkf2*nkf3)
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik ) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik ) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
@ -801,17 +803,17 @@
|
||||||
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
|
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_SERTA(j, ibnd, ik, itemp) * wkf_all(ik)
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + F_SERTA(:, ibnd, ik, itemp)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + F_SERTA(:, ibnd, ik, itemp) * sfac / (nkf1*nkf2*nkf3)
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
@ -983,9 +985,15 @@
|
||||||
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
||||||
REAL(KIND=DP), EXTERNAL :: w0gauss
|
REAL(KIND=DP), EXTERNAL :: w0gauss
|
||||||
!! The derivative of wgauss: an approximation to the delta function
|
!! The derivative of wgauss: an approximation to the delta function
|
||||||
|
REAL(KIND=DP) :: sfac
|
||||||
|
!! Spin factor
|
||||||
|
!
|
||||||
|
IF (noncolin) THEN
|
||||||
|
sfac = 1.0
|
||||||
|
ELSE
|
||||||
|
sfac = 2.0
|
||||||
|
ENDIF
|
||||||
Fi_check(:,:) = zero
|
Fi_check(:,:) = zero
|
||||||
!
|
|
||||||
inv_cell = 1.0d0/omega
|
inv_cell = 1.0d0/omega
|
||||||
!
|
!
|
||||||
IF (ncarrier < -1E5) THEN ! If true print hole
|
IF (ncarrier < -1E5) THEN ! If true print hole
|
||||||
|
@ -1028,33 +1036,29 @@
|
||||||
ij = ij + 1
|
ij = ij + 1
|
||||||
! The factor two in the weight at the end is to
|
! The factor two in the weight at the end is to
|
||||||
! account for spin
|
! account for spin
|
||||||
IF (noncolin) THEN
|
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * sfac / (nkf1*nkf2*nkf3)
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ELSE
|
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ENDIF
|
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:) * sfac / (nkf1*nkf2*nkf3)
|
||||||
ENDIF ! BZ
|
ENDIF ! BZ
|
||||||
ENDDO ! ikb
|
ENDDO ! ikb
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
ENDDO ! ik
|
ENDDO ! ik
|
||||||
ENDDO ! itemp
|
ENDDO ! itemp
|
||||||
!CALL mp_sum( Sigma(:,:), world_comm )
|
!
|
||||||
DO itemp=1, nstemp
|
DO itemp=1, nstemp
|
||||||
etemp = transp_temp(itemp)
|
etemp = transp_temp(itemp)
|
||||||
carrier_density = 0.0
|
carrier_density = 0.0
|
||||||
|
@ -1144,27 +1148,23 @@
|
||||||
ij = ij + 1
|
ij = ij + 1
|
||||||
! The factor two in the weight at the end is to
|
! The factor two in the weight at the end is to
|
||||||
! account for spin
|
! account for spin
|
||||||
IF (noncolin) THEN
|
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * sfac / (nkf1*nkf2*nkf3)
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 1.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ELSE
|
|
||||||
tdf_sigma(ij) = tdf_sigma(ij) + ( v_rot(i) * Fi_rot(j) ) * 2.0 / (nkf1*nkf2*nkf3)
|
|
||||||
ENDIF
|
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + Fi_rot(:) * sfac / (nkf1*nkf2*nkf3)
|
||||||
ENDIF ! BZ
|
ENDIF ! BZ
|
||||||
ENDDO ! ikb
|
ENDDO ! ikb
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
@ -1312,9 +1312,16 @@
|
||||||
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
!! Compute the approximate theta function. Here computes Fermi-Dirac
|
||||||
REAL(KIND=DP), EXTERNAL :: w0gauss
|
REAL(KIND=DP), EXTERNAL :: w0gauss
|
||||||
!! The derivative of wgauss: an approximation to the delta function
|
!! The derivative of wgauss: an approximation to the delta function
|
||||||
|
REAL(KIND=DP) :: sfac
|
||||||
Fi_check(:,:) = zero
|
!! Spin factor
|
||||||
|
!
|
||||||
|
IF (noncolin) THEN
|
||||||
|
sfac = 1.0
|
||||||
|
ELSE
|
||||||
|
sfac = 2.0
|
||||||
|
ENDIF
|
||||||
!
|
!
|
||||||
|
Fi_check(:,:) = zero
|
||||||
inv_cell = 1.0d0/omega
|
inv_cell = 1.0d0/omega
|
||||||
!
|
!
|
||||||
IF (ncarrier < -1E5) THEN ! If true print hole
|
IF (ncarrier < -1E5) THEN ! If true print hole
|
||||||
|
@ -1337,17 +1344,18 @@
|
||||||
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
|
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + F_out(:, ibnd, ik, itemp)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + F_out(:, ibnd, ik, itemp) * sfac / (nkf1*nkf2*nkf3)
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
!Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
||||||
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
@ -1425,17 +1433,17 @@
|
||||||
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
|
tdf_sigma(ij) = vkk_all(i, ibnd, ik) * F_out(j, ibnd, ik, itemp) * wkf_all(ik)
|
||||||
ENDDO
|
ENDDO
|
||||||
ENDDO
|
ENDDO
|
||||||
Fi_check(:,itemp) = Fi_check(:,itemp) + F_out(:, ibnd, ik, itemp)
|
Fi_check(:,itemp) = Fi_check(:,itemp) + F_out(:, ibnd, ik, itemp) * sfac / (nkf1*nkf2*nkf3)
|
||||||
!
|
!
|
||||||
! energy at k (relative to Ef)
|
! energy at k (relative to Ef)
|
||||||
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
!ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
!
|
!
|
||||||
! derivative Fermi distribution
|
! derivative Fermi distribution
|
||||||
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
! (-df_nk/dE_nk) = (f_nk)*(1-f_nk)/ (k_B T)
|
||||||
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
!dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
!
|
!
|
||||||
! electrical conductivity
|
! electrical conductivity
|
||||||
Sigma(:,itemp) = Sigma(:,itemp) + dfnk * tdf_sigma(:)
|
Sigma(:,itemp) = Sigma(:,itemp) + tdf_sigma(:)
|
||||||
!
|
!
|
||||||
ENDIF ! if below Fermi level
|
ENDIF ! if below Fermi level
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
|
|
|
@ -329,13 +329,13 @@
|
||||||
wgkq = wgauss( -ekq*inv_eptemp0, -99)
|
wgkq = wgauss( -ekq*inv_eptemp0, -99)
|
||||||
!
|
!
|
||||||
! = k-point weight * [f(E_k) - f(E_k+q)]/ [E_k+q - E_k -w_q + id]
|
! = k-point weight * [f(E_k) - f(E_k+q)]/ [E_k+q - E_k -w_q + id]
|
||||||
! This is the imaginary part of the phonon self-energy, sans
|
! This is the imaginary part of minus the phonon self-energy, sans
|
||||||
! the matrix elements
|
! the matrix elements
|
||||||
!
|
!
|
||||||
!weight = wkf (ikk) * (wgkk - wgkq) * &
|
!weight = wkf (ikk) * (wgkk - wgkq) * &
|
||||||
! aimag ( cone / ( ekq - ekk - wq - ci * degaussw0 ) )
|
! aimag ( cone / ( ekq - ekk - wq - ci * degaussw0 ) )
|
||||||
!
|
!
|
||||||
! SP: The expression below (phonon self-energy) corresponds to
|
! SP: The expression below (minus phonon self-energy) corresponds to
|
||||||
! = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q]
|
! = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k - w_q]
|
||||||
weight = pi * wkf (ikk) * (wgkk - wgkq)* &
|
weight = pi * wkf (ikk) * (wgkk - wgkq)* &
|
||||||
w0gauss ( (ekq - ekk - wq) / degaussw0, 0) / degaussw0
|
w0gauss ( (ekq - ekk - wq) / degaussw0, 0) / degaussw0
|
||||||
|
|
|
@ -33,9 +33,7 @@
|
||||||
wmax_specfun, nw_specfun
|
wmax_specfun, nw_specfun
|
||||||
USE pwcom, ONLY : nelec, ef, isk
|
USE pwcom, ONLY : nelec, ef, isk
|
||||||
USE elph2, ONLY : epf17, ibndmax, ibndmin, etf, &
|
USE elph2, ONLY : epf17, ibndmax, ibndmin, etf, &
|
||||||
wkf, xqf, nkqf, &
|
wkf, xqf, nkqf, nkf, wf, a_all, efnew
|
||||||
nkf, wf, a_all, &
|
|
||||||
gammai_all,gammar_all, efnew
|
|
||||||
USE constants_epw, ONLY : ryd2mev, ryd2ev, two, zero, pi, cone, ci, eps8
|
USE constants_epw, ONLY : ryd2mev, ryd2ev, two, zero, pi, cone, ci, eps8
|
||||||
USE mp_world, ONLY : mpime
|
USE mp_world, ONLY : mpime
|
||||||
USE mp, ONLY : mp_barrier, mp_sum
|
USE mp, ONLY : mp_barrier, mp_sum
|
||||||
|
@ -64,8 +62,6 @@
|
||||||
!! Counter on mode
|
!! Counter on mode
|
||||||
INTEGER :: fermicount
|
INTEGER :: fermicount
|
||||||
!! Number of states on the Fermi surface
|
!! Number of states on the Fermi surface
|
||||||
INTEGER :: ismear
|
|
||||||
!! Smearing index
|
|
||||||
INTEGER :: iw
|
INTEGER :: iw
|
||||||
!! Counter on frequency for the phonon spectra
|
!! Counter on frequency for the phonon spectra
|
||||||
!
|
!
|
||||||
|
@ -85,13 +81,9 @@
|
||||||
!! Self-energy factor
|
!! Self-energy factor
|
||||||
REAL(kind=DP) :: dosef
|
REAL(kind=DP) :: dosef
|
||||||
!! Density of state N(Ef)
|
!! Density of state N(Ef)
|
||||||
REAL(kind=DP) :: degaussw0
|
REAL(kind=DP) :: inv_degaussw
|
||||||
!! Gaussian smearing parameter
|
|
||||||
REAL(kind=DP) :: inv_degaussw0
|
|
||||||
!! Inverse Gaussian for efficiency reasons
|
!! Inverse Gaussian for efficiency reasons
|
||||||
REAL(kind=DP) :: eptemp0
|
REAL(kind=DP) :: inv_eptemp
|
||||||
!! Temperature
|
|
||||||
REAL(kind=DP) :: inv_eptemp0
|
|
||||||
!! Inverse temperature
|
!! Inverse temperature
|
||||||
REAL(kind=DP) :: inv_wq
|
REAL(kind=DP) :: inv_wq
|
||||||
!! $frac{1}{2\omega_{q\nu}}$ defined for efficiency reasons
|
!! $frac{1}{2\omega_{q\nu}}$ defined for efficiency reasons
|
||||||
|
@ -114,8 +106,14 @@
|
||||||
REAL(kind=DP), external :: w0gauss
|
REAL(kind=DP), external :: w0gauss
|
||||||
!! This function computes the derivative of the Fermi-Dirac function
|
!! This function computes the derivative of the Fermi-Dirac function
|
||||||
!! It is therefore an approximation for a delta function
|
!! It is therefore an approximation for a delta function
|
||||||
|
REAL(kind=DP) :: gammai_all(nw_specfun, nmodes)
|
||||||
|
!! Imaginary part of the frequency dependent spectral function
|
||||||
|
REAL(kind=DP) :: gammar_all(nw_specfun, nmodes)
|
||||||
|
!! Real part of the Phonon self-energy (freq. dependent for spectral function)
|
||||||
!
|
!
|
||||||
dw = ( wmax_specfun - wmin_specfun ) / dble (nw_specfun-1)
|
dw = ( wmax_specfun - wmin_specfun ) / dble (nw_specfun-1)
|
||||||
|
gammar_all(:,:) = zero
|
||||||
|
gammai_all(:,:) = zero
|
||||||
!
|
!
|
||||||
! Thomas-Fermi screening according to Resta PRB 1977
|
! Thomas-Fermi screening according to Resta PRB 1977
|
||||||
! Here specific case of Diamond
|
! Here specific case of Diamond
|
||||||
|
@ -135,234 +133,218 @@
|
||||||
'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||||
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
||||||
!
|
|
||||||
IF ( .not. ALLOCATED (gammai_all) ) ALLOCATE( gammai_all (nmodes, totq, nw_specfun) )
|
|
||||||
IF ( .not. ALLOCATED (gammar_all) ) ALLOCATE( gammar_all (nmodes, totq, nw_specfun) )
|
|
||||||
gammar_all(:,:,:) = zero
|
|
||||||
gammai_all(:,:,:) = zero
|
|
||||||
!
|
|
||||||
ENDIF
|
ENDIF
|
||||||
!
|
!
|
||||||
DO ismear = 1, nsmear
|
|
||||||
!
|
|
||||||
degaussw0 = (ismear-1) * delta_smear + degaussw
|
|
||||||
eptemp0 = (ismear-1) * delta_smear + eptemp
|
|
||||||
!
|
|
||||||
! SP: Multiplication is faster than division ==> Important if called a lot
|
|
||||||
! in inner loops
|
|
||||||
inv_degaussw0 = 1.0/degaussw0
|
|
||||||
inv_eptemp0 = 1.0/eptemp0
|
|
||||||
!
|
|
||||||
! Fermi level and corresponding DOS
|
|
||||||
!
|
|
||||||
IF ( efermi_read ) THEN
|
|
||||||
!
|
|
||||||
ef0 = fermi_energy
|
|
||||||
!
|
|
||||||
ELSE IF (nsmear > 1) THEN
|
|
||||||
!
|
|
||||||
ef0 = efermig(etf,nbndsub,nkqf,nelec,wkf,degaussw0,ngaussw,0,isk)
|
|
||||||
! if some bands are skipped (nbndskip.neq.0), nelec has already been
|
|
||||||
! recalculated in ephwann_shuffle
|
|
||||||
!
|
|
||||||
ELSE !SP: This is added for efficiency reason because the efermig routine is slow
|
|
||||||
ef0 = efnew
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
dosef = dos_ef (ngaussw, degaussw0, ef0, etf, wkf, nkqf, nbndsub)
|
|
||||||
! N(Ef) in the equation for lambda is the DOS per spin
|
|
||||||
dosef = dosef / two
|
|
||||||
!
|
|
||||||
IF ( iq .eq. 1 ) THEN
|
|
||||||
WRITE (stdout, 100) degaussw0 * ryd2ev, ngaussw
|
|
||||||
WRITE (stdout, 101) dosef / ryd2ev, ef0 * ryd2ev
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
CALL start_clock('PH SPECTRAL-FUNCTIO')
|
|
||||||
!
|
|
||||||
fermicount = 0
|
|
||||||
gamma0(:) = zero
|
|
||||||
!
|
|
||||||
DO ik = 1, nkf
|
|
||||||
ikk = 2 * ik - 1
|
|
||||||
ikq = ikk + 1
|
|
||||||
!
|
|
||||||
! Here we must have ef, not ef0, to be consistent with ephwann_shuffle
|
|
||||||
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .AND. &
|
|
||||||
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) THEN
|
|
||||||
!
|
|
||||||
fermicount = fermicount + 1
|
|
||||||
!
|
|
||||||
DO imode = 1, nmodes
|
|
||||||
!
|
|
||||||
! the phonon frequency
|
|
||||||
wq = wf (imode, iq)
|
|
||||||
!
|
|
||||||
! SP : We should avoid branching statements (if statements) in
|
|
||||||
! innerloops. Therefore we do it here.
|
|
||||||
inv_wq = 1.0/(two * wq)
|
|
||||||
! the coupling from Gamma acoustic phonons is negligible
|
|
||||||
IF ( wq .gt. eps_acustic ) THEN
|
|
||||||
g2_tmp = 1.0
|
|
||||||
ELSE
|
|
||||||
g2_tmp = 0.0
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
DO ibnd = 1, ibndmax-ibndmin+1
|
|
||||||
!
|
|
||||||
! the fermi occupation for k
|
|
||||||
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
|
|
||||||
wgkk = wgauss( -ekk*inv_eptemp0, -99)
|
|
||||||
!w0g1 = w0gauss ( ekk / degaussw0, 0) / degaussw0
|
|
||||||
!
|
|
||||||
DO jbnd = 1, ibndmax-ibndmin+1
|
|
||||||
!
|
|
||||||
! the fermi occupation for k+q
|
|
||||||
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
|
|
||||||
wgkq = wgauss( -ekq*inv_eptemp0, -99)
|
|
||||||
!w0g2 = w0gauss ( ekq / degaussw0, 0) / degaussw0
|
|
||||||
!
|
|
||||||
! here we take into account the zero-point sqrt(hbar/2M\omega)
|
|
||||||
! with hbar = 1 and M already contained in the eigenmodes
|
|
||||||
! g2 is Ry^2, wkf must already account for the spin factor
|
|
||||||
!
|
|
||||||
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps8 .OR. abs(xqf (2, iq))> eps8 &
|
|
||||||
.OR. abs(xqf (3, iq))> eps8 )) THEN
|
|
||||||
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
|
|
||||||
! number, in which case its square will be a negative number.
|
|
||||||
g2 = REAL( (epf17 (jbnd, ibnd, imode, ik)**two)*inv_wq*g2_tmp ) !* epsTF
|
|
||||||
ELSE
|
|
||||||
g2 = (abs(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp !* epsTF
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
! = k-point weight * [f(E_k) - f(E_k+q)]/ [E_k+q - E_k -w_q +id]
|
|
||||||
! This is the imaginary part of the phonon self-energy, sans the matrix elements
|
|
||||||
!
|
|
||||||
!weight = wkf (ikk) * (wgkk - wgkq) * &
|
|
||||||
! aimag ( cone / ( ekq - ekk - wq - ci * degaussw0 ) )
|
|
||||||
!
|
|
||||||
! SP: The expression below (phonon self-energy) corresponds to
|
|
||||||
! = pi*k-point weight*[f(E_k) - f(E_k+q)]*delta[E_k+q - E_k -w_q]
|
|
||||||
!
|
|
||||||
weight = wkf (ikk) * (wgkk - wgkq) * &
|
|
||||||
real ( cone / ( ekq - ekk + ci * degaussw0 ))
|
|
||||||
!
|
|
||||||
gamma0 ( imode ) = gamma0 ( imode ) + weight * g2
|
|
||||||
!
|
|
||||||
DO iw = 1, nw_specfun
|
|
||||||
!
|
|
||||||
ww = wmin_specfun + dble (iw-1) * dw
|
|
||||||
!
|
|
||||||
weight = wkf (ikk) * (wgkk - wgkq) * &
|
|
||||||
real ( cone / ( ekq - ekk - ww + ci * degaussw0 ))
|
|
||||||
gammar_all (imode,iq,iw) = gammar_all (imode,iq,iw) + weight * g2
|
|
||||||
!
|
|
||||||
! Normal implementation
|
|
||||||
!weight = wkf (ikk) * (wgkk - wgkq) * &
|
|
||||||
! aimag ( cone / ( ekq - ekk - ww + ci * degaussw0 ) )
|
|
||||||
!
|
|
||||||
! More stable:
|
|
||||||
! Analytical im. part
|
|
||||||
weight = pi * wkf (ikk) * (wgkk - wgkq) * &
|
|
||||||
w0gauss ( (ekq - ekk - ww) / degaussw0, 0) / degaussw0
|
|
||||||
!
|
|
||||||
gammai_all (imode,iq,iw) = gammai_all(imode,iq,iw)+ weight * g2
|
|
||||||
!
|
|
||||||
ENDDO
|
|
||||||
!
|
|
||||||
ENDDO ! jbnd
|
|
||||||
!
|
|
||||||
ENDDO ! ibnd
|
|
||||||
!
|
|
||||||
ENDDO ! loop on q-modes
|
|
||||||
!
|
|
||||||
ENDIF ! endif fsthick
|
|
||||||
!
|
|
||||||
ENDDO ! loop on k
|
|
||||||
!
|
|
||||||
CALL stop_clock('PH SPECTRAL-FUNCTION')
|
|
||||||
!
|
|
||||||
#if defined(__MPI)
|
|
||||||
!
|
|
||||||
! collect contributions from all pools (sum over k-points)
|
|
||||||
! this finishes the integral over the BZ (k)
|
|
||||||
!
|
|
||||||
CALL mp_sum(gammai_all,inter_pool_comm)
|
|
||||||
CALL mp_sum(gammar_all,inter_pool_comm)
|
|
||||||
CALL mp_sum(gamma0,inter_pool_comm)
|
|
||||||
CALL mp_sum(fermicount, inter_pool_comm)
|
|
||||||
CALL mp_barrier(inter_pool_comm)
|
|
||||||
!
|
|
||||||
#endif
|
|
||||||
!
|
|
||||||
WRITE(stdout,'(5x,a)')
|
|
||||||
IF (.not. ALLOCATED (a_all)) ALLOCATE ( a_all(nw_specfun, totq) )
|
|
||||||
a_all(:,:) = zero
|
|
||||||
!
|
|
||||||
IF (iqq == 1 ) THEN
|
|
||||||
IF (mpime.eq.ionode_id) THEN
|
|
||||||
OPEN(unit=iospectral,file='specfun.phon')
|
|
||||||
OPEN(unit=iospectral_sup,file='specfun_sup.phon')
|
|
||||||
WRITE(iospectral, '(/2x,a)') '#Phonon spectral function (meV)'
|
|
||||||
WRITE(iospectral_sup, '(2x,a)') '#Phonon eigenenergies + real and im part of phonon self-energy (meV)'
|
|
||||||
WRITE(iospectral, '(/2x,a)') '#K-point Energy[eV] A(q,w)[meV^-1]'
|
|
||||||
WRITE(iospectral_sup, '(2x,a)') '#Q-point Mode w_q[eV] w[eV] &
|
|
||||||
& Real Sigma(w)[meV] Im Sigma(w=0)[meV] Im Sigma(w)[meV]'
|
|
||||||
WRITE(stdout,'(/5x,a)') 'Real and Imaginary part of the phonon self-energy (omega=0).'
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
! Write to output file
|
|
||||||
!WRITE(stdout,'(/5x,"iq = ",i7," coord.: ", 3f12.7)') iq, xqf(:,iq)
|
|
||||||
DO imode = 1, nmodes
|
|
||||||
wq = wf (imode, iq)
|
|
||||||
! Real and Im part of Phonon self-energy at 0 freq.
|
|
||||||
WRITE(stdout,105) imode, ryd2ev * wq, ryd2mev * gammar_all(imode,iq,1), ryd2mev * gammai_all(imode,iq,1)
|
|
||||||
ENDDO
|
|
||||||
WRITE( stdout, '(5x,a,i8,a,i8)' ) &
|
|
||||||
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', totq
|
|
||||||
|
|
||||||
!
|
|
||||||
! Write to support files
|
|
||||||
DO iw = 1, nw_specfun
|
|
||||||
!
|
|
||||||
ww = wmin_specfun + dble (iw-1) * dw
|
|
||||||
!
|
|
||||||
DO imode = 1, nmodes
|
|
||||||
!
|
|
||||||
wq = wf (imode, iq)
|
|
||||||
!a_all(iw,iq) = a_all(iw,iq) + abs( gammai_all(imode,iq,iw) ) / pi / &
|
|
||||||
! ( ( ww - wq - gammar_all (imode,iq,iw) + gamma0 (imode))**two + (gammai_all(imode,iq,iw) )**two )
|
|
||||||
! SP: From Eq. 16 of PRB 9, 4733 (1974)
|
|
||||||
! Also in Eq.2 of PRL 119, 017001 (2017).
|
|
||||||
a_all(iw,iq) = a_all(iw,iq) + ((2*wq)**2) * abs( gammai_all(imode,iq,iw) ) / pi / &
|
|
||||||
( ( ww**2 - wq**2 - 2 * wq * ( gammar_all (imode,iq,iw) - gamma0 (imode) ) )**two +&
|
|
||||||
(2 * wq * gammai_all(imode,iq,iw) )**two )
|
|
||||||
!
|
|
||||||
IF (mpime.eq.ionode_id) THEN
|
|
||||||
WRITE(iospectral_sup,'(2i9,2x,f12.5,2x,f12.5,2x,E22.14,2x,E22.14,2x,E22.14)') iq,&
|
|
||||||
imode, ryd2ev * wq, ryd2ev * ww, ryd2mev * gammar_all(imode,iq,iw), ryd2mev * gamma0(imode),&
|
|
||||||
ryd2mev * gammai_all(imode,iq,iw)
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
ENDDO
|
|
||||||
!
|
|
||||||
IF (mpime.eq.ionode_id) THEN
|
|
||||||
WRITE(iospectral,'(2x,i7,2x,f12.5,2x,E22.14)') iq, ryd2ev * ww, a_all(iw,iq) / ryd2mev ! print to file
|
|
||||||
ENDIF
|
|
||||||
!
|
|
||||||
ENDDO
|
|
||||||
!
|
|
||||||
IF (iqq == totq ) THEN
|
|
||||||
IF (mpime == ionode_id) THEN
|
|
||||||
CLOSE(iospectral)
|
|
||||||
CLOSE(iospectral_sup)
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
|
||||||
WRITE(stdout,'(5x,a/)') repeat('-',67)
|
|
||||||
!
|
|
||||||
ENDDO !smears
|
|
||||||
!
|
!
|
||||||
|
! SP: Multiplication is faster than division ==> Important if called a lot
|
||||||
|
! in inner loops
|
||||||
|
inv_degaussw = 1.0/degaussw
|
||||||
|
inv_eptemp = 1.0/eptemp
|
||||||
|
!
|
||||||
|
! Fermi level and corresponding DOS
|
||||||
|
!
|
||||||
|
IF ( efermi_read ) THEN
|
||||||
|
!
|
||||||
|
ef0 = fermi_energy
|
||||||
|
!
|
||||||
|
ELSE IF (nsmear > 1) THEN
|
||||||
|
!
|
||||||
|
ef0 = efermig(etf,nbndsub,nkqf,nelec,wkf,degaussw,ngaussw,0,isk)
|
||||||
|
! if some bands are skipped (nbndskip.neq.0), nelec has already been
|
||||||
|
! recalculated in ephwann_shuffle
|
||||||
|
!
|
||||||
|
ELSE !SP: This is added for efficiency reason because the efermig routine is slow
|
||||||
|
ef0 = efnew
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
dosef = dos_ef (ngaussw, degaussw, ef0, etf, wkf, nkqf, nbndsub)
|
||||||
|
! N(Ef) in the equation for lambda is the DOS per spin
|
||||||
|
dosef = dosef / two
|
||||||
|
!
|
||||||
|
IF ( iqq .eq. 1 ) THEN
|
||||||
|
WRITE (stdout, 100) degaussw * ryd2ev, ngaussw
|
||||||
|
WRITE (stdout, 101) dosef / ryd2ev, ef0 * ryd2ev
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
CALL start_clock('PH SPECTRAL-FUNCTION')
|
||||||
|
!
|
||||||
|
fermicount = 0
|
||||||
|
gamma0(:) = zero
|
||||||
|
!
|
||||||
|
DO ik = 1, nkf
|
||||||
|
ikk = 2 * ik - 1
|
||||||
|
ikq = ikk + 1
|
||||||
|
!
|
||||||
|
! Here we must have ef, not ef0, to be consistent with ephwann_shuffle
|
||||||
|
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .AND. &
|
||||||
|
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) THEN
|
||||||
|
!
|
||||||
|
fermicount = fermicount + 1
|
||||||
|
!
|
||||||
|
DO imode = 1, nmodes
|
||||||
|
!
|
||||||
|
! the phonon frequency
|
||||||
|
wq = wf (imode, iq)
|
||||||
|
!
|
||||||
|
! SP : We should avoid branching statements (if statements) in
|
||||||
|
! innerloops. Therefore we do it here.
|
||||||
|
inv_wq = 1.0/(two * wq)
|
||||||
|
! the coupling from Gamma acoustic phonons is negligible
|
||||||
|
IF ( wq .gt. eps_acustic ) THEN
|
||||||
|
g2_tmp = 1.0
|
||||||
|
ELSE
|
||||||
|
g2_tmp = 0.0
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
DO ibnd = 1, ibndmax-ibndmin+1
|
||||||
|
!
|
||||||
|
! the fermi occupation for k
|
||||||
|
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
|
||||||
|
wgkk = wgauss( -ekk*inv_eptemp, -99)
|
||||||
|
!w0g1 = w0gauss ( ekk / degaussw0, 0) / degaussw0
|
||||||
|
!
|
||||||
|
DO jbnd = 1, ibndmax-ibndmin+1
|
||||||
|
!
|
||||||
|
! the fermi occupation for k+q
|
||||||
|
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
|
||||||
|
wgkq = wgauss( -ekq*inv_eptemp, -99)
|
||||||
|
!w0g2 = w0gauss ( ekq / degaussw0, 0) / degaussw0
|
||||||
|
!
|
||||||
|
! here we take into account the zero-point sqrt(hbar/2M\omega)
|
||||||
|
! with hbar = 1 and M already contained in the eigenmodes
|
||||||
|
! g2 is Ry^2, wkf must already account for the spin factor
|
||||||
|
!
|
||||||
|
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps8 .OR. abs(xqf (2, iq))> eps8 &
|
||||||
|
.OR. abs(xqf (3, iq))> eps8 )) THEN
|
||||||
|
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
|
||||||
|
! number, in which case its square will be a negative number.
|
||||||
|
g2 = REAL( (epf17 (jbnd, ibnd, imode, ik)**two)*inv_wq*g2_tmp ) !* epsTF
|
||||||
|
ELSE
|
||||||
|
g2 = (abs(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp !* epsTF
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
! SP - 03/2019 - Retarded phonon self-energy
|
||||||
|
! See Eq. 145 of RMP 89, 015003 (2017)
|
||||||
|
! \Pi^R = k-point weight * [ [f(E_k+q) - f(E_k)]/ [E_k+q - E_k -w_q - id]
|
||||||
|
! -[f(E_k+q) - f(E_k)]/ [E_k+q - E_k - id] ]
|
||||||
|
! The second term is gamma0 (static)
|
||||||
|
!
|
||||||
|
weight = wkf (ikk) * (wgkq - wgkk) * &
|
||||||
|
REAL ( cone / ( ekq - ekk + ci * degaussw ))
|
||||||
|
!
|
||||||
|
gamma0 ( imode ) = gamma0 ( imode ) + weight * g2
|
||||||
|
!
|
||||||
|
DO iw = 1, nw_specfun
|
||||||
|
!
|
||||||
|
ww = wmin_specfun + dble (iw-1) * dw
|
||||||
|
!
|
||||||
|
weight = wkf (ikk) * (wgkq - wgkk) * &
|
||||||
|
REAL ( cone / ( ekq - ekk - ww + ci * degaussw ))
|
||||||
|
gammar_all (iw, imode) = gammar_all (iw, imode) + weight * g2
|
||||||
|
!
|
||||||
|
! Normal implementation
|
||||||
|
!weight = wkf (ikk) * (wgkq - wgkk) * &
|
||||||
|
! aimag ( cone / ( ekq - ekk - ww + ci * degaussw0 ) )
|
||||||
|
!
|
||||||
|
! More stable:
|
||||||
|
! Analytical im. part
|
||||||
|
weight = pi * wkf (ikk) * (wgkq - wgkk) * &
|
||||||
|
w0gauss ( (ekq - ekk - ww) / degaussw, 0) / degaussw
|
||||||
|
!
|
||||||
|
gammai_all (iw, imode) = gammai_all(iw, imode) + weight * g2
|
||||||
|
!
|
||||||
|
ENDDO
|
||||||
|
!
|
||||||
|
ENDDO ! jbnd
|
||||||
|
!
|
||||||
|
ENDDO ! ibnd
|
||||||
|
!
|
||||||
|
ENDDO ! loop on q-modes
|
||||||
|
!
|
||||||
|
ENDIF ! endif fsthick
|
||||||
|
!
|
||||||
|
ENDDO ! loop on k
|
||||||
|
!
|
||||||
|
CALL stop_clock('PH SPECTRAL-FUNCTION')
|
||||||
|
!
|
||||||
|
#if defined(__MPI)
|
||||||
|
!
|
||||||
|
! collect contributions from all pools (sum over k-points)
|
||||||
|
! this finishes the integral over the BZ (k)
|
||||||
|
!
|
||||||
|
CALL mp_sum(gammai_all,inter_pool_comm)
|
||||||
|
CALL mp_sum(gammar_all,inter_pool_comm)
|
||||||
|
CALL mp_sum(gamma0,inter_pool_comm)
|
||||||
|
CALL mp_sum(fermicount, inter_pool_comm)
|
||||||
|
CALL mp_barrier(inter_pool_comm)
|
||||||
|
!
|
||||||
|
#endif
|
||||||
|
!
|
||||||
|
WRITE(stdout,'(5x,a)')
|
||||||
|
IF (.not. ALLOCATED (a_all)) ALLOCATE ( a_all(nw_specfun, totq) )
|
||||||
|
a_all(:,iqq) = zero
|
||||||
|
!
|
||||||
|
IF (iqq == 1 ) THEN
|
||||||
|
IF (mpime.eq.ionode_id) THEN
|
||||||
|
OPEN(unit=iospectral,file='specfun.phon')
|
||||||
|
OPEN(unit=iospectral_sup,file='specfun_sup.phon')
|
||||||
|
WRITE(iospectral, '(/2x,a)') '#Phonon spectral function (meV)'
|
||||||
|
WRITE(iospectral_sup, '(2x,a)') '#Phonon eigenenergies + real and im part of phonon self-energy (meV)'
|
||||||
|
WRITE(iospectral, '(/2x,a)') '#Q-point Energy[eV] A(q,w)[meV^-1]'
|
||||||
|
WRITE(iospectral_sup, '(2x,a)') '#Q-point Mode w_q[eV] w[eV] &
|
||||||
|
& Real Sigma(w)[meV] Real Sigma(w=0)[meV] Im Sigma(w)[meV]'
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
! Write to output file
|
||||||
|
!WRITE(stdout,'(/5x,"iq = ",i7," coord.: ", 3f12.7)') iq, xqf(:,iq)
|
||||||
|
WRITE(stdout,'(/5x,a)') 'Real and Imaginary part of the phonon self-energy (omega=0) without gamma0.'
|
||||||
|
DO imode = 1, nmodes
|
||||||
|
wq = wf (imode, iq)
|
||||||
|
! Real and Im part of Phonon self-energy at 0 freq.
|
||||||
|
WRITE(stdout,105) imode, ryd2ev * wq, ryd2mev * gammar_all(1,imode), ryd2mev * gammai_all(1,imode)
|
||||||
|
ENDDO
|
||||||
|
WRITE( stdout, '(5x,a,i8,a,i8)' ) &
|
||||||
|
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', totq
|
||||||
|
!
|
||||||
|
! Write to support files
|
||||||
|
DO iw = 1, nw_specfun
|
||||||
|
!
|
||||||
|
ww = wmin_specfun + dble (iw-1) * dw
|
||||||
|
!
|
||||||
|
DO imode = 1, nmodes
|
||||||
|
!
|
||||||
|
wq = wf (imode, iq)
|
||||||
|
!a_all(iw,iq) = a_all(iw,iq) + abs( gammai_all(imode,iq,iw) ) / pi / &
|
||||||
|
! ( ( ww - wq - gammar_all (imode,iq,iw) + gamma0 (imode))**two + (gammai_all(imode,iq,iw) )**two )
|
||||||
|
! SP: From Eq. 16 of PRB 9, 4733 (1974)
|
||||||
|
! Also in Eq.2 of PRL 119, 017001 (2017).
|
||||||
|
a_all(iw,iqq) = a_all(iw,iqq) + (1.0d0/pi) * ((2*wq)**2) * ABS( gammai_all(iw, imode) ) / &
|
||||||
|
( ( ww**2 - wq**2 - 2 * wq * ( gammar_all (iw, imode) - gamma0 (imode) ) )**two +&
|
||||||
|
(2 * wq * gammai_all(iw, imode) )**two )
|
||||||
|
!
|
||||||
|
IF (mpime.eq.ionode_id) THEN
|
||||||
|
WRITE(iospectral_sup,'(2i9,2x,f12.5,2x,f12.5,2x,E22.14,2x,E22.14,2x,E22.14)') iq,&
|
||||||
|
imode, ryd2ev * wq, ryd2ev * ww, ryd2mev * gammar_all(iw, imode), ryd2mev * gamma0(imode),&
|
||||||
|
ryd2mev * gammai_all(iw, imode)
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
ENDDO
|
||||||
|
!
|
||||||
|
IF (mpime.eq.ionode_id) THEN
|
||||||
|
WRITE(iospectral,'(2x,i7,2x,f12.5,2x,E22.14)') iq, ryd2ev * ww, a_all(iw,iqq) / ryd2mev ! print to file
|
||||||
|
ENDIF
|
||||||
|
!
|
||||||
|
ENDDO
|
||||||
|
!
|
||||||
|
IF (iqq == totq ) THEN
|
||||||
|
IF (mpime == ionode_id) THEN
|
||||||
|
CLOSE(iospectral)
|
||||||
|
CLOSE(iospectral_sup)
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
WRITE(stdout,'(5x,a/)') repeat('-',67)
|
||||||
|
!
|
||||||
100 FORMAT(5x,'Gaussian Broadening: ',f10.6,' eV, ngauss=',i4)
|
100 FORMAT(5x,'Gaussian Broadening: ',f10.6,' eV, ngauss=',i4)
|
||||||
101 FORMAT(5x,'DOS =',f10.6,' states/spin/eV/Unit Cell at Ef=',f10.6,' eV')
|
101 FORMAT(5x,'DOS =',f10.6,' states/spin/eV/Unit Cell at Ef=',f10.6,' eV')
|
||||||
105 FORMAT(5x,'Omega( ',i3,' )=',f9.4,' eV Re[Pi]=',f15.6,' meV Im[Pi]=',f15.6,' meV')
|
105 FORMAT(5x,'Omega( ',i3,' )=',f9.4,' eV Re[Pi]=',f15.6,' meV Im[Pi]=',f15.6,' meV')
|
||||||
|
|
|
@ -1423,7 +1423,7 @@
|
||||||
degaussw, nkf1, nkf2, nkf3
|
degaussw, nkf1, nkf2, nkf3
|
||||||
USE eliashbergcom, ONLY : nkfs, nbndfs, g2, ixkqf, ixqfs, nqfs, w0g, ekfs, ef0, dosef, wsph, &
|
USE eliashbergcom, ONLY : nkfs, nbndfs, g2, ixkqf, ixqfs, nqfs, w0g, ekfs, ef0, dosef, wsph, &
|
||||||
wkfs, dwsph, a2f_iso, ixkff
|
wkfs, dwsph, a2f_iso, ixkff
|
||||||
USE constants_epw, ONLY : ryd2ev
|
USE constants_epw, ONLY : ryd2ev, eps2, zero, eps16
|
||||||
USE io_global, ONLY : ionode_id
|
USE io_global, ONLY : ionode_id
|
||||||
USE mp_global, ONLY : inter_pool_comm, my_pool_id, npool
|
USE mp_global, ONLY : inter_pool_comm, my_pool_id, npool
|
||||||
USE mp_world, ONLY : mpime
|
USE mp_world, ONLY : mpime
|
||||||
|
@ -1599,23 +1599,25 @@
|
||||||
IF ( ALLOCATED(a2f) ) DEALLOCATE( a2f )
|
IF ( ALLOCATED(a2f) ) DEALLOCATE( a2f )
|
||||||
IF ( ALLOCATED(a2f_modeproj) ) DEALLOCATE( a2f_modeproj )
|
IF ( ALLOCATED(a2f_modeproj) ) DEALLOCATE( a2f_modeproj )
|
||||||
!
|
!
|
||||||
nbink = int( 1.25d0 * maxval(lambda_k(:,:)) / 0.005d0 )
|
nbink = NINT( 1.1d0 * MAXVAL(lambda_k(:,:)) / eps2 ) + 1
|
||||||
dbink = 1.25d0 * maxval(lambda_k(:,:)) / dble(nbink)
|
dbink = 1.1d0 * MAXVAL(lambda_k(:,:)) / DBLE(nbink)
|
||||||
|
!
|
||||||
IF ( .not. ALLOCATED(lambda_k_bin) ) ALLOCATE ( lambda_k_bin(nbink) )
|
IF ( .not. ALLOCATED(lambda_k_bin) ) ALLOCATE ( lambda_k_bin(nbink) )
|
||||||
lambda_k_bin(:) = 0.d0
|
lambda_k_bin(:) = zero
|
||||||
!
|
!
|
||||||
!SP : Should be initialized
|
!SP : Should be initialized
|
||||||
nbin = 0
|
nbin = 0
|
||||||
dbin = 0.0_DP
|
dbin = zero
|
||||||
!
|
!
|
||||||
IF ( iverbosity == 2 ) THEN
|
IF ( iverbosity == 2 ) THEN
|
||||||
nbin = int( 1.25d0 * maxval(lambda_max(:)) / 0.005d0 )
|
nbin = nint( 1.1d0 * MAXVAL(lambda_max(:)) / eps2 ) + 1
|
||||||
dbin = 1.25d0 * maxval(lambda_max(:)) / dble(nbin)
|
dbin = 1.1d0 * MAXVAL(lambda_max(:)) / dble(nbin)
|
||||||
IF ( .not. ALLOCATED(lambda_pairs) ) ALLOCATE ( lambda_pairs(nbin) )
|
IF ( .not. ALLOCATED(lambda_pairs) ) ALLOCATE ( lambda_pairs(nbin) )
|
||||||
lambda_pairs(:) = 0.d0
|
lambda_pairs(:) = zero
|
||||||
ENDIF
|
ENDIF
|
||||||
!
|
!
|
||||||
WRITE(stdout,'(5x,a13,f21.7,a18,f21.7)') 'lambda_max = ', maxval(lambda_max(:)), ' lambda_k_max = ', maxval(lambda_k(:,:))
|
WRITE(stdout,'(5x,a13,f21.7,a18,f21.7)') 'lambda_max = ', maxval(lambda_max(:)), &
|
||||||
|
' lambda_k_max = ', maxval(lambda_k(:,:))
|
||||||
WRITE(stdout,'(a)') ' '
|
WRITE(stdout,'(a)') ' '
|
||||||
!
|
!
|
||||||
lambda_k(:,:) = 0.d0
|
lambda_k(:,:) = 0.d0
|
||||||
|
@ -1631,20 +1633,16 @@
|
||||||
CALL lambdar_aniso_ver1( ik, iq, ibnd, jbnd, 0.d0, lambda_eph )
|
CALL lambdar_aniso_ver1( ik, iq, ibnd, jbnd, 0.d0, lambda_eph )
|
||||||
lambda_k(ik,ibnd) = lambda_k(ik,ibnd) + weight * lambda_eph
|
lambda_k(ik,ibnd) = lambda_k(ik,ibnd) + weight * lambda_eph
|
||||||
IF ( iverbosity == 2 ) THEN
|
IF ( iverbosity == 2 ) THEN
|
||||||
DO ibin = 1, nbin
|
ibin = NINT( lambda_eph / dbin ) + 1
|
||||||
sigma = 1.d0 * dbin
|
weight = w0g(ibnd,ik) * w0g(jbnd,ixkqf(ik,iq0))
|
||||||
weight = w0gauss( ( lambda_eph - dble(ibin) * dbin ) / sigma, 0 ) / sigma
|
lambda_pairs(ibin) = lambda_pairs(ibin) + weight
|
||||||
lambda_pairs(ibin) = lambda_pairs(ibin) + weight
|
|
||||||
ENDDO
|
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDDO ! jbnd
|
ENDDO ! jbnd
|
||||||
ENDDO ! iq
|
ENDDO ! iq
|
||||||
DO ibin = 1, nbink
|
ibin = NINT( lambda_k(ik,ibnd) / dbink ) + 1
|
||||||
sigma = 1.d0 * dbink
|
weight = w0g(ibnd,ik)
|
||||||
weight = w0gauss( ( lambda_k(ik,ibnd) - dble(ibin) * dbink ) / sigma, 0 ) / sigma
|
lambda_k_bin(ibin) = lambda_k_bin(ibin) + weight
|
||||||
lambda_k_bin(ibin) = lambda_k_bin(ibin) + weight
|
|
||||||
ENDDO
|
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDDO ! ibnd
|
ENDDO ! ibnd
|
||||||
ENDDO ! ik
|
ENDDO ! ik
|
||||||
|
@ -1676,7 +1674,7 @@
|
||||||
OPEN(unit = iufillambda, file = TRIM(prefix)//".lambda_k_pairs", form = 'formatted')
|
OPEN(unit = iufillambda, file = TRIM(prefix)//".lambda_k_pairs", form = 'formatted')
|
||||||
WRITE(iufillambda,'(a12,a30)') '# lambda_nk',' \rho(lambda_nk) scaled to 1'
|
WRITE(iufillambda,'(a12,a30)') '# lambda_nk',' \rho(lambda_nk) scaled to 1'
|
||||||
DO ibin = 1, nbink
|
DO ibin = 1, nbink
|
||||||
WRITE(iufillambda,'(2f21.7)') dbink*dble(ibin), lambda_k_bin(ibin)/maxval(lambda_k_bin(:))
|
WRITE(iufillambda,'(2f21.7)') dbink*dble(ibin), lambda_k_bin(ibin)/MAXVAL(lambda_k_bin(:))
|
||||||
ENDDO
|
ENDDO
|
||||||
CLOSE(iufillambda)
|
CLOSE(iufillambda)
|
||||||
!
|
!
|
||||||
|
@ -1761,9 +1759,4 @@
|
||||||
!
|
!
|
||||||
END SUBROUTINE evaluate_a2f_lambda
|
END SUBROUTINE evaluate_a2f_lambda
|
||||||
!
|
!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!
|
|
||||||
END MODULE superconductivity_aniso
|
END MODULE superconductivity_aniso
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
!
|
!
|
||||||
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
||||||
! Copyright (C) 2016-2018 Samuel Ponce'
|
! Copyright (C) 2016-2019 Samuel Ponce', Roxana Margine, Feliciano Giustino
|
||||||
!
|
!
|
||||||
! This file is distributed under the terms of the GNU General Public
|
! This file is distributed under the terms of the GNU General Public
|
||||||
! License. See the file `LICENSE' in the root directory of the
|
! License. See the file `LICENSE' in the root directory of the
|
||||||
|
|
|
@ -163,12 +163,17 @@
|
||||||
!! Used for the averaging
|
!! Used for the averaging
|
||||||
REAL(kind=DP) :: ekk2
|
REAL(kind=DP) :: ekk2
|
||||||
!! Use for averaging
|
!! Use for averaging
|
||||||
|
|
||||||
!
|
|
||||||
REAL(kind=DP) :: xkf_tmp (3, nkqtotf)
|
REAL(kind=DP) :: xkf_tmp (3, nkqtotf)
|
||||||
!! Temporary k-point coordinate (dummy variable)
|
!! Temporary k-point coordinate (dummy variable)
|
||||||
REAL(kind=DP) :: wkf_tmp(nkqtotf)
|
REAL(kind=DP) :: wkf_tmp(nkqtotf)
|
||||||
!! Temporary k-weights (dummy variable)
|
!! Temporary k-weights (dummy variable)
|
||||||
|
REAL(kind=DP) :: dfnk
|
||||||
|
!! df/de
|
||||||
|
REAL(kind=DP) :: etemp
|
||||||
|
!! Temperature
|
||||||
|
REAL(KIND=DP), EXTERNAL :: w0gauss
|
||||||
|
!! The derivative of wgauss: an approximation to the delta function
|
||||||
|
! Gather all the k-point coordinate from all the pools
|
||||||
!
|
!
|
||||||
! Gather all the k-point coordinate from all the pools
|
! Gather all the k-point coordinate from all the pools
|
||||||
xkf_all(:,:) = zero
|
xkf_all(:,:) = zero
|
||||||
|
@ -236,7 +241,6 @@
|
||||||
CALL kpmq_map( xkf_all(:, 2*ik-1 ), xqf (:, iq), +1, nkq_abs )
|
CALL kpmq_map( xkf_all(:, 2*ik-1 ), xqf (:, iq), +1, nkq_abs )
|
||||||
s_BZtoIBZ_full(:,:,ind) = s_BZtoIBZ(:,:,nkq_abs)
|
s_BZtoIBZ_full(:,:,ind) = s_BZtoIBZ(:,:,nkq_abs)
|
||||||
ixkqf_tr(ind) = BZtoIBZ(nkq_abs)
|
ixkqf_tr(ind) = BZtoIBZ(nkq_abs)
|
||||||
!print*,'ind iq ik ixkqf_tr ',ind, iq, ik, ixkqf_tr(ind), s_BZtoIBZ_full(1,1,ind)
|
|
||||||
ENDDO
|
ENDDO
|
||||||
!
|
!
|
||||||
ENDIF
|
ENDIF
|
||||||
|
@ -244,7 +248,6 @@
|
||||||
! First computes the SERTA solution as the first step of the IBTE
|
! First computes the SERTA solution as the first step of the IBTE
|
||||||
F_SERTA(:,:,:,:) = zero
|
F_SERTA(:,:,:,:) = zero
|
||||||
tmp(:,:,:) = zero
|
tmp(:,:,:) = zero
|
||||||
!tmp2(:,:,:,:,:) = zero
|
|
||||||
!
|
!
|
||||||
DO ind=1, nind
|
DO ind=1, nind
|
||||||
iq = sparse_q( ind )
|
iq = sparse_q( ind )
|
||||||
|
@ -254,15 +257,7 @@
|
||||||
itemp = sparse_t( ind )
|
itemp = sparse_t( ind )
|
||||||
!
|
!
|
||||||
tmp(ibnd, ik, itemp) = tmp(ibnd, ik, itemp) + trans_prob(ind)
|
tmp(ibnd, ik, itemp) = tmp(ibnd, ik, itemp) + trans_prob(ind)
|
||||||
!tmp2(jbnd, ibnd, itemp, ik, iq) = trans_prob(ind)
|
|
||||||
|
|
||||||
!IF (ik==2 .and. ibnd ==2 .and. itemp ==2) print*,'ind tmp ', ind, tmp(ibnd, ik, itemp)
|
|
||||||
|
|
||||||
!IF (ik==2) print*,ind, trans_prob(ind)
|
|
||||||
!print*,'ind iq ik ibnd jbnd itemp ',ind, iq, ik, ibnd, jbnd, itemp
|
|
||||||
!print*,'tmp ',tmp(ibnd, ik, itemp)
|
|
||||||
ENDDO
|
ENDDO
|
||||||
!print*,'ind=10, iq==1, ik==2, ibnd=2, jbnd=2, itemp==1 ', trans_prob(10)
|
|
||||||
!
|
!
|
||||||
CALL mp_sum(tmp, world_comm)
|
CALL mp_sum(tmp, world_comm)
|
||||||
!
|
!
|
||||||
|
@ -274,11 +269,11 @@
|
||||||
DO ik = 1, nkqtotf/2
|
DO ik = 1, nkqtotf/2
|
||||||
!
|
!
|
||||||
DO ibnd = 1, ibndmax-ibndmin+1
|
DO ibnd = 1, ibndmax-ibndmin+1
|
||||||
ekk = etf_all (ibndmin-1+ibnd, ik)
|
ekk = etf_all (ibnd, ik)
|
||||||
n = 0
|
n = 0
|
||||||
tmp2 = 0.0_DP
|
tmp2 = 0.0_DP
|
||||||
DO jbnd = 1, ibndmax-ibndmin+1
|
DO jbnd = 1, ibndmax-ibndmin+1
|
||||||
ekk2 = etf_all (ibndmin-1+jbnd, ik)
|
ekk2 = etf_all (jbnd, ik)
|
||||||
IF ( ABS(ekk2-ekk) < eps6 ) THEN
|
IF ( ABS(ekk2-ekk) < eps6 ) THEN
|
||||||
n = n + 1
|
n = n + 1
|
||||||
tmp2 = tmp2 + tmp(ibnd,ik,itemp)
|
tmp2 = tmp2 + tmp(ibnd,ik,itemp)
|
||||||
|
@ -293,12 +288,15 @@
|
||||||
ENDDO ! nkqtotf
|
ENDDO ! nkqtotf
|
||||||
ENDDO ! itemp
|
ENDDO ! itemp
|
||||||
!
|
!
|
||||||
!
|
DO itemp=1, nstemp
|
||||||
DO itemp=1, nstemp
|
etemp = transp_temp(itemp)
|
||||||
DO ik=1, nkqtotf/2
|
DO ik=1, nkqtotf/2
|
||||||
DO ibnd=1, ibndmax-ibndmin+1
|
DO ibnd=1, ibndmax-ibndmin+1
|
||||||
IF ( ABS(tmp(ibnd, ik, itemp)) > eps160 ) THEN
|
IF ( ABS(tmp(ibnd, ik, itemp)) > eps160 ) THEN
|
||||||
F_SERTA(:, ibnd, ik, itemp) = vkk_all(:,ibnd,ik) / ( two * tmp(ibnd,ik,itemp) )
|
ekk = etf_all (ibnd, ik) - ef0(itemp)
|
||||||
|
dfnk = w0gauss( ekk / etemp, -99 ) / etemp
|
||||||
|
F_SERTA(:, ibnd, ik, itemp) = dfnk * vkk_all(:,ibnd,ik) / ( two * tmp(ibnd,ik,itemp) )
|
||||||
|
!F_SERTA(:, ibnd, ik, itemp) = vkk_all(:,ibnd,ik) / ( two * tmp(ibnd,ik,itemp) )
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDDO
|
ENDDO
|
||||||
!IF (itemp==2) print*,'ik ',ik, SUM(F_SERTA(:,:,ik,2)), SUM(vkk_all(:,:,ik))
|
!IF (itemp==2) print*,'ik ',ik, SUM(F_SERTA(:,:,ik,2)), SUM(vkk_all(:,:,ik))
|
||||||
|
|
|
@ -55,12 +55,4 @@ TEST0: test0.o libqefft.a
|
||||||
clean :
|
clean :
|
||||||
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L
|
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L
|
||||||
|
|
||||||
# .PHONY forces execution of a rule irrespective of the presence of an
|
|
||||||
# updated file with the same name of the rule. In this way, the script
|
|
||||||
# that generates version.f90 always runs, updating the version if you
|
|
||||||
# execute "svn update". The update_version script takes care of not
|
|
||||||
# changing the file if the svn version did not change
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
include make.depend
|
include make.depend
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,8 +3,13 @@ sinclude ../make.inc
|
||||||
# do nothing by default !!!
|
# do nothing by default !!!
|
||||||
default:
|
default:
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- if test -d PWgui ; then ( cd PWgui; $(MAKE) clean ) ; fi
|
||||||
|
- if test -d QE-modes ; then ( cd QE-modes; $(MAKE) clean ) ; fi
|
||||||
|
|
||||||
veryclean:
|
veryclean:
|
||||||
- if test -d Guib ; then ( cd Guib; $(MAKE) veryclean ) ; fi
|
- if test -d Guib ; then ( cd Guib; $(MAKE) veryclean ) ; fi
|
||||||
- if test -d PWgui ; then ( cd PWgui; $(MAKE) distclean ) ; fi
|
- if test -d PWgui ; then ( cd PWgui; $(MAKE) distclean ) ; fi
|
||||||
- if test -d QE-modes ; then ( cd QE-modes; $(MAKE) veryclean ) ; fi
|
- if test -d QE-modes ; then ( cd QE-modes; $(MAKE) veryclean ) ; fi
|
||||||
|
|
||||||
|
distclean: veryclean
|
||||||
|
|
|
@ -12,7 +12,7 @@ The PWgui package comes in two flavors:
|
||||||
|
|
||||||
(ii) SOURCE PACKAGE
|
(ii) SOURCE PACKAGE
|
||||||
|
|
||||||
N.B.: for the usage of SVN version of PWgui see file INSTALL.svn
|
N.B.: for the usage of repository version of PWgui see file INSTALL.repository
|
||||||
|
|
||||||
________________________________________________________________________
|
________________________________________________________________________
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
* * * INSTALLATION instructions for PWgui as obtained * * *
|
||||||
|
* * * from the QE repository * * *
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
This INSTALL.repository file is located in GUI/PWgui/ directory. To
|
||||||
|
make the PWgui functional do the following:
|
||||||
|
|
||||||
|
Either:
|
||||||
|
* from the QE root directory call: make gui
|
||||||
|
Or:
|
||||||
|
* or from the this directory (i.e. GUI/PWgui) call: make init
|
||||||
|
|
||||||
|
* to run the PWgui program, type from this directory: ./pwgui
|
||||||
|
|
||||||
|
BEWARE:
|
||||||
|
|
||||||
|
To run the "pwgui" you will need the required Tcl-related software.
|
||||||
|
See the INSTALL file, for the software-requirements of the PWgui
|
||||||
|
source-package.
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
Anton Kokalj (tone.kokalj@ijs.si), Fri Mar 01 2019
|
|
@ -1,28 +0,0 @@
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
* * * INSTALLATION instructions for PWgui as obtained * * *
|
|
||||||
* * * from the QE SVN repository * * *
|
|
||||||
==============================================================================
|
|
||||||
|
|
||||||
This INSTALL.svn file is located in GUI/PWgui/ directory. To "install"
|
|
||||||
the PWgui do the following:
|
|
||||||
|
|
||||||
(i) from GUI/PWgui/ directory call: make svninit
|
|
||||||
^^^^^^^^^^^^
|
|
||||||
(ii) define the PWGUI environmental variable (optional for versions >= 4.0),
|
|
||||||
|
|
||||||
(iii) add $PWGUI to your path, and
|
|
||||||
|
|
||||||
(iv) to launch the PWgui program, type: pwgui
|
|
||||||
|
|
||||||
BEWARE:
|
|
||||||
|
|
||||||
To run the "pwgui" you will need the required Tcl-related software.
|
|
||||||
See the INSTALL file, for the software-requirements of the PWgui
|
|
||||||
source-package.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
Anton Kokalj (tone.kokalj@ijs.si), Wed Jun 08 2011
|
|
|
@ -68,6 +68,7 @@ clean:
|
||||||
-rm -f *~ */*~ */*/*~
|
-rm -f *~ */*~ */*/*~
|
||||||
-rm -f *.tgz
|
-rm -f *.tgz
|
||||||
-rm -f *.tar
|
-rm -f *.tar
|
||||||
|
-cd doc/pwdocs; $(MAKE) clean
|
||||||
|
|
||||||
veryclean:
|
veryclean:
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
@ -79,7 +80,7 @@ distclean: veryclean
|
||||||
-cd lib/; rm -f *
|
-cd lib/; rm -f *
|
||||||
cd $(PWGUI_VFS); $(MAKE) distclean
|
cd $(PWGUI_VFS); $(MAKE) distclean
|
||||||
|
|
||||||
svninit:
|
init:
|
||||||
-cd doc/pwdocs; $(MAKE)
|
-cd doc/pwdocs; $(MAKE)
|
||||||
-if test ! -d lib; then mkdir lib; fi
|
-if test ! -d lib; then mkdir lib; fi
|
||||||
-cd lib/; rm -f Guib-*;
|
-cd lib/; rm -f Guib-*;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
svn
|
6.4
|
||||||
|
|
|
@ -19,7 +19,7 @@ all: input_html make_user_guide
|
||||||
|
|
||||||
|
|
||||||
links:
|
links:
|
||||||
( cd $(TOPDIR); $(MAKE) doc )
|
- ( cd $(TOPDIR); $(MAKE) doc )
|
||||||
for file in $(LINK_FILES); do \
|
for file in $(LINK_FILES); do \
|
||||||
if test ! -f $$file; then ln -sf $(QE_DOC_DIR)/$$file . ; fi; \
|
if test ! -f $$file; then ln -sf $(QE_DOC_DIR)/$$file . ; fi; \
|
||||||
done
|
done
|
||||||
|
@ -44,19 +44,15 @@ make_user_guide: links
|
||||||
rm -rf user_guide/
|
rm -rf user_guide/
|
||||||
cp -a $(QE_DOC_DIR)/user_guide .
|
cp -a $(QE_DOC_DIR)/user_guide .
|
||||||
cd user_guide/; \
|
cd user_guide/; \
|
||||||
for file in *.png; do \
|
|
||||||
convert $$file $${file%.png}.gif; \
|
|
||||||
rm -f $$file; \
|
|
||||||
done; \
|
|
||||||
for file in *.html; do \
|
for file in *.html; do \
|
||||||
cp $$file /tmp/$$file; \
|
cp $$file /tmp/$$file; \
|
||||||
cat /tmp/$$file | sed 's/\.png/\.gif/g' - | sed 's/ / /g' - > $$file; \
|
cat /tmp/$$file | sed 's/ / /g' - > $$file; \
|
||||||
rm -f /tmp/$$file; \
|
rm -f /tmp/$$file; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
clean: clean_links
|
clean: clean_links
|
||||||
-rm -f INPUT_*.html *~
|
-rm -f INPUT_*.html INPUT_*.txt *~
|
||||||
-rm -f *.tex *.aux *.log *.out *.toc *.gif *.pdf *.png
|
-rm -f *.tex *.aux *.log *.out *.toc *.gif *.pdf *.png
|
||||||
-rm -rf user_guide/
|
-rm -rf user_guide/
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 255 KiB After Width: | Height: | Size: 258 KiB |
Binary file not shown.
|
@ -8,9 +8,9 @@
|
||||||
If you donwloaded any of the *.tgz package, you do not need to
|
If you donwloaded any of the *.tgz package, you do not need to
|
||||||
call "make". See INSTALL file instead.
|
call "make". See INSTALL file instead.
|
||||||
|
|
||||||
* SVN-related target:
|
* Repository-related target:
|
||||||
|
|
||||||
svninit ... initialize the PWgui after it was SVN-downloaded
|
init ... initialize the PWgui after it was downloaded from repository
|
||||||
|
|
||||||
* Distribution-related targets:
|
* Distribution-related targets:
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
tracevar bz_sum w {
|
||||||
|
switch -glob -- [varvalue bz_sum] {
|
||||||
|
*tetrahedra* {
|
||||||
|
widget ngauss disable
|
||||||
|
widget degauss disable
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
widget ngauss enable
|
||||||
|
widget degauss enable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
varset bz_sum -value {}
|
|
@ -45,6 +45,58 @@ directory containing the input data, i.e. the same as in pw.x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help bz_sum -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>bz_sum</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>CHARACTER</li>
|
||||||
|
<br><li> <em>Default: </em>
|
||||||
|
'smearing' if degauss in given in input 'smearing',
|
||||||
|
options read from the xml data file otherwise.
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote>
|
||||||
|
<pre> Keyword selecting the method for BZ summation. Available options are:
|
||||||
|
</pre>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'smearing'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
integration using gaussian smearing. In fact currently
|
||||||
|
any string not related to tetrahedra defaults to smearing;
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'tetrahedra'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
Tetrahedron method, Bloechl's version:
|
||||||
|
P.E. Bloechl, "PRB 49, 16223 (1994)"
|
||||||
|
Requires uniform grid of k-points, to be
|
||||||
|
automatically generated in pw.x.
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'tetrahedra_lin'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
Original linear tetrahedron method.
|
||||||
|
To be used only as a reference;
|
||||||
|
the optimized tetrahedron method is more efficient.
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'tetrahedra_opt'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
Optimized tetrahedron method:
|
||||||
|
see M. Kawamura, "PRB 89, 094515 (2014)".
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
</blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
help ngauss -helpfmt helpdoc -helptext {
|
help ngauss -helpfmt helpdoc -helptext {
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -24,22 +24,34 @@ module Dos\#auto -title "PWSCF GUI: module Dos.x" -script {
|
||||||
|
|
||||||
separator -label "--- DOS ploting options ---"
|
separator -label "--- DOS ploting options ---"
|
||||||
|
|
||||||
var ngauss {
|
var bz_sum {
|
||||||
-label "Type of gaussian broadening (ngauss):"
|
-label "Method for BZ summation (bz_sum):"
|
||||||
-widget radiobox
|
-widget radiobox
|
||||||
-value {0 1 -1 99}
|
-value {
|
||||||
-textvalue {
|
'smearing'
|
||||||
"Simple Gaussian (default)"
|
'tetrahedra'
|
||||||
"Methfessel-Paxton of order 1"
|
'tetrahedra_lin'
|
||||||
"Marzari-Vanderbilt \"cold smearing\""
|
'tetrahedra_opt'
|
||||||
"Fermi-Dirac function"
|
}
|
||||||
}
|
-validate string
|
||||||
}
|
}
|
||||||
|
|
||||||
var degauss {
|
var ngauss {
|
||||||
-label "Gaussian broadening \[in Ry\] (degauss):"
|
-label "Type of gaussian broadening (ngauss):"
|
||||||
-validate fortranreal
|
-widget radiobox
|
||||||
}
|
-value {0 1 -1 99}
|
||||||
|
-textvalue {
|
||||||
|
"Simple Gaussian (default)"
|
||||||
|
"Methfessel-Paxton of order 1"
|
||||||
|
"Marzari-Vanderbilt \"cold smearing\""
|
||||||
|
"Fermi-Dirac function"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var degauss {
|
||||||
|
-label "Gaussian broadening \[in Ry\] (degauss):"
|
||||||
|
-validate fortranreal
|
||||||
|
}
|
||||||
|
|
||||||
var DeltaE {
|
var DeltaE {
|
||||||
-label "Resolution of PDOS plots \[in eV\] (DeltaE):"
|
-label "Resolution of PDOS plots \[in eV\] (DeltaE):"
|
||||||
|
@ -59,6 +71,11 @@ module Dos\#auto -title "PWSCF GUI: module Dos.x" -script {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# take care of specialties
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
source dos-event.tcl
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
# source the HELP file
|
# source the HELP file
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
|
|
|
@ -741,9 +741,7 @@ up calculations at q=0 (phonon wavevector) if the sum over
|
||||||
the Brillouin Zone includes k=0 only. The gamma_gamma
|
the Brillouin Zone includes k=0 only. The gamma_gamma
|
||||||
trick exploits symmetry and acoustic sum rule to reduce
|
trick exploits symmetry and acoustic sum rule to reduce
|
||||||
the number of linear response calculations to the strict
|
the number of linear response calculations to the strict
|
||||||
minimum, as it is done in code phcg.x. This option MUST
|
minimum, as it is done in code phcg.x.
|
||||||
BE USED if a run with ph.x is to be followed by a run
|
|
||||||
with d3.x for third-order terms calculation.
|
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -877,6 +875,32 @@ with offset determined by k1,k2,k3.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help read_dns_bare -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>read_dns_bare</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>LOGICAL</li>
|
||||||
|
<br><li> <em>Default: </em> .false.
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
If .true. the PH code tries to read three files in the DFPT+U
|
||||||
|
calculation: dns_orth, dns_bare, d2ns_bare.
|
||||||
|
dns_orth and dns_bare are the first-order variations of
|
||||||
|
the occupation matrix, while d2ns_bare is the second-order
|
||||||
|
variation of the occupation matrix. These matrices are
|
||||||
|
computed only once during the DFPT+U calculation. However,
|
||||||
|
their calculation (especially of d2ns_bare) is computationally
|
||||||
|
expensive, this is why they are written to file and then can be
|
||||||
|
read (e.g. for restart) in order to save time.
|
||||||
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
help start_irr -helpfmt helpdoc -helptext {
|
help start_irr -helpfmt helpdoc -helptext {
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -477,7 +477,16 @@ module PH\#auto -title "PWSCF GUI: module PH.x" -script {
|
||||||
-label "Number of iterations used in mixing of potential (nmix_ph):"
|
-label "Number of iterations used in mixing of potential (nmix_ph):"
|
||||||
-widget spinint
|
-widget spinint
|
||||||
-fmt %d
|
-fmt %d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
separator -label "--- Miscellaneous ---"
|
||||||
|
|
||||||
|
var read_dns_bare {
|
||||||
|
-label "For DFPT+U: read the dns_* files (read_dns_bare):"
|
||||||
|
-widget radiobox
|
||||||
|
-textvalue { Yes No }
|
||||||
|
-value { .true. .false. }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page q_k_points -name "q- and k-points" {
|
page q_k_points -name "q- and k-points" {
|
||||||
|
|
|
@ -519,14 +519,13 @@ help output_format -helpfmt helpdoc -helptext {
|
||||||
|
|
||||||
0 = format suitable for gnuplot (1D)
|
0 = format suitable for gnuplot (1D)
|
||||||
|
|
||||||
1 = format suitable for contour.x (2D)
|
1 = obsolete format no longer supported
|
||||||
|
|
||||||
2 = format suitable for plotrho (2D)
|
2 = format suitable for plotrho (2D)
|
||||||
|
|
||||||
3 = format suitable for XCRYSDEN (2D or user-supplied 3D region)
|
3 = format suitable for XCRYSDEN (2D or user-supplied 3D region)
|
||||||
|
|
||||||
4 = format suitable for gOpenMol (3D)
|
4 = obsolete format no longer supported
|
||||||
(formatted: convert to unformatted *.plt)
|
|
||||||
|
|
||||||
5 = format suitable for XCRYSDEN (3D, using entire FFT grid)
|
5 = format suitable for XCRYSDEN (3D, using entire FFT grid)
|
||||||
|
|
||||||
|
@ -765,12 +764,12 @@ rho(i,j,k) = rho( x0 + e1 * (i-1)/nx
|
||||||
are ignored, the entire FFT grid is written in the
|
are ignored, the entire FFT grid is written in the
|
||||||
XCRYSDEN format - works for any crystal axis (VERY FAST)
|
XCRYSDEN format - works for any crystal axis (VERY FAST)
|
||||||
|
|
||||||
- If "e1", "e2", "e3", "x0" are present, and "e1", "e2", "e3" are parallel
|
- If "e1", "e2", "e3", "x0" are present,
|
||||||
to xyz and parallel to crystal axis, a subset of the
|
and "e1", "e2", "e3" are parallel to xyz
|
||||||
FFT grid that approximately covers the parallelepiped
|
and parallel to crystal axis, a subset of the FFT
|
||||||
defined by "e1", "e2", "e3", "x0", is written (presently only
|
grid that approximately covers the parallelepiped
|
||||||
if "output_format" = 4, i.e. gopenmol format) - works only
|
defined by "e1", "e2", "e3", "x0", is
|
||||||
if the crystal axis are parallel to xyz
|
written - untested, might be obsolete
|
||||||
|
|
||||||
- Otherwise, the required 3D grid is generated from the
|
- Otherwise, the required 3D grid is generated from the
|
||||||
Fourier components (may be VERY slow)
|
Fourier components (may be VERY slow)
|
||||||
|
|
|
@ -189,13 +189,11 @@ module PP\#auto -title "PWSCF GUI: module PP.x" -script {
|
||||||
"XCRYSDEN's XSF format (2D or 3D)"
|
"XCRYSDEN's XSF format (2D or 3D)"
|
||||||
"XCRYSDEN's XSF format (whole unit cell) (3D)"
|
"XCRYSDEN's XSF format (whole unit cell) (3D)"
|
||||||
"format suitable for gnuplot (1D)"
|
"format suitable for gnuplot (1D)"
|
||||||
"format suitable for contour.x (2D)"
|
|
||||||
"format suitable for plotrho (2D)"
|
"format suitable for plotrho (2D)"
|
||||||
"format suitable for gOpenMol (3D)"
|
|
||||||
"Gaussian cube-file format (3D)"
|
"Gaussian cube-file format (3D)"
|
||||||
"format suitable for gnuplot (2D)"
|
"format suitable for gnuplot (2D)"
|
||||||
}
|
}
|
||||||
-value { 3 5 0 1 2 4 6 7 }
|
-value { 3 5 0 2 6 7 }
|
||||||
-widget optionmenu
|
-widget optionmenu
|
||||||
}
|
}
|
||||||
var interpolation {
|
var interpolation {
|
||||||
|
|
|
@ -539,6 +539,7 @@ proc ::pwscf::pwReadFilter {moduleObj channel} {
|
||||||
{'martyna-tuckerman' 'm-t' 'mt'}
|
{'martyna-tuckerman' 'm-t' 'mt'}
|
||||||
}
|
}
|
||||||
vdw_corr {
|
vdw_corr {
|
||||||
|
{'grimme-d3' 'Grimme-D3' 'DFT-D3' 'dft-d3'}
|
||||||
{'grimme-d2' 'Grimme-D2' 'DFT-D' 'dft-d'}
|
{'grimme-d2' 'Grimme-D2' 'DFT-D' 'dft-d'}
|
||||||
{'ts-vdw' 'TS', 'ts', ''ts-vdW', 'tkatchenko-scheffler'}
|
{'ts-vdw' 'TS', 'ts', ''ts-vdW', 'tkatchenko-scheffler'}
|
||||||
{'xdm''XDM'}
|
{'xdm''XDM'}
|
||||||
|
|
|
@ -357,21 +357,18 @@ tracevar xdm w {
|
||||||
}
|
}
|
||||||
|
|
||||||
tracevar vdw_corr w {
|
tracevar vdw_corr w {
|
||||||
groupwidget dftdG disable
|
groupwidget dftdG disable
|
||||||
groupwidget xdmG disable
|
groupwidget dftd3G disable
|
||||||
groupwidget tsG disable
|
groupwidget xdmG disable
|
||||||
|
groupwidget tsG disable
|
||||||
|
|
||||||
if { [varvalue vdw_corr] == "'grimme-d2'" } {
|
if { [varvalue vdw_corr] == "'grimme-d2'" } {
|
||||||
groupwidget dftdG enable
|
groupwidget dftdG enable
|
||||||
groupwidget xdmG disable
|
} elseif { [varvalue vdw_corr] == "'grimme-d3'" } {
|
||||||
groupwidget tsG disable
|
groupwidget dftd3G enable
|
||||||
} elseif { [varvalue vdw_corr] == "'xdm'" } {
|
} elseif { [varvalue vdw_corr] == "'xdm'" } {
|
||||||
groupwidget dftdG disable
|
|
||||||
groupwidget xdmG enable
|
groupwidget xdmG enable
|
||||||
groupwidget tsG disable
|
|
||||||
} elseif { [varvalue vdw_corr] == "'ts-vdw'" } {
|
} elseif { [varvalue vdw_corr] == "'ts-vdw'" } {
|
||||||
groupwidget dftdG disable
|
|
||||||
groupwidget xdmG disable
|
|
||||||
groupwidget tsG enable
|
groupwidget tsG enable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,10 +171,11 @@ This flag controls the way wavefunctions are stored to disk :
|
||||||
The resulting format is portable to a different number
|
The resulting format is portable to a different number
|
||||||
of processor, or different kind of parallelization
|
of processor, or different kind of parallelization
|
||||||
|
|
||||||
.FALSE. do not collect wavefunctions, leave them in temporary
|
.FALSE. OBSOLETE - NO LONGER IMPLEMENTED
|
||||||
|
do not collect wavefunctions, leave them in temporary
|
||||||
local files (one per processor). The resulting format
|
local files (one per processor). The resulting format
|
||||||
is readable only on the same number of processors and
|
is readable only on the same number of processors and
|
||||||
with the same knd of paralleliztio used to write it.
|
with the same kind of parallelization used to write it.
|
||||||
|
|
||||||
Note that this flag has no effect on reading, only on writing.
|
Note that this flag has no effect on reading, only on writing.
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
|
@ -314,7 +315,7 @@ This directory specifies where to store files generated by
|
||||||
each processor (*.wfc{N}, *.igk{N}, etc.). Useful for
|
each processor (*.wfc{N}, *.igk{N}, etc.). Useful for
|
||||||
machines without a parallel file system: set "wfcdir" to
|
machines without a parallel file system: set "wfcdir" to
|
||||||
a local file system, while "outdir" should be a parallel
|
a local file system, while "outdir" should be a parallel
|
||||||
or networkfile system, visible to all processors. Beware:
|
or network file system, visible to all processors. Beware:
|
||||||
in order to restart from interrupted runs, or to perform
|
in order to restart from interrupted runs, or to perform
|
||||||
further calculations using the produced data files, you
|
further calculations using the produced data files, you
|
||||||
may need to copy files to "outdir". Works only for pw.x.
|
may need to copy files to "outdir". Works only for pw.x.
|
||||||
|
@ -715,7 +716,7 @@ help gate -helpfmt helpdoc -helptext {
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
In the case of charged cells ("tot_charge" .ne. 0) setting gate = .TRUE.
|
In the case of charged cells ("tot_charge" .ne. 0) setting gate = .TRUE.
|
||||||
represents the counter charge (i.e. -tot_charge) not by a homogenous
|
represents the counter charge (i.e. -tot_charge) not by a homogeneous
|
||||||
background charge but with a charged plate, which is placed at "zgate"
|
background charge but with a charged plate, which is placed at "zgate"
|
||||||
(see below). Details of the gate potential can be found in
|
(see below). Details of the gate potential can be found in
|
||||||
T. Brumme, M. Calandra, F. Mauri; "PRB 89, 245406 (2014)".
|
T. Brumme, M. Calandra, F. Mauri; "PRB 89, 245406 (2014)".
|
||||||
|
@ -743,8 +744,9 @@ help ibrav -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
Bravais-lattice index. If ibrav /= 0, specify EITHER
|
Bravais-lattice index. Optional only if space_group is set.
|
||||||
[ "celldm"(1)-"celldm"(6) ] OR [ "A", "B", "C", "cosAB", "cosAC", "cosBC" ]
|
If ibrav /= 0, specify EITHER [ "celldm"(1)-"celldm"(6) ]
|
||||||
|
OR [ "A", "B", "C", "cosAB", "cosAC", "cosBC" ]
|
||||||
but NOT both. The lattice parameter "alat" is set to
|
but NOT both. The lattice parameter "alat" is set to
|
||||||
alat = celldm(1) (in a.u.) or alat = A (in Angstrom);
|
alat = celldm(1) (in a.u.) or alat = A (in Angstrom);
|
||||||
see below for the other parameters.
|
see below for the other parameters.
|
||||||
|
@ -804,6 +806,10 @@ ibrav structure celldm(2)-celldm(6)
|
||||||
v1 = (a/2, b/2,0), v2 = (-a/2,b/2,0), v3 = (0,0,c)
|
v1 = (a/2, b/2,0), v2 = (-a/2,b/2,0), v3 = (0,0,c)
|
||||||
-9 as 9, alternate description
|
-9 as 9, alternate description
|
||||||
v1 = (a/2,-b/2,0), v2 = (a/2, b/2,0), v3 = (0,0,c)
|
v1 = (a/2,-b/2,0), v2 = (a/2, b/2,0), v3 = (0,0,c)
|
||||||
|
91 Orthorhombic one-face base-centered A-type
|
||||||
|
celldm(2)=b/a
|
||||||
|
celldm(3)=c/a
|
||||||
|
v1 = (a, 0, 0), v2 = (0,b/2,-c/2), v3 = (0,b/2,c/2)
|
||||||
|
|
||||||
10 Orthorhombic face-centered celldm(2)=b/a
|
10 Orthorhombic face-centered celldm(2)=b/a
|
||||||
celldm(3)=c/a
|
celldm(3)=c/a
|
||||||
|
@ -825,12 +831,20 @@ ibrav structure celldm(2)-celldm(6)
|
||||||
where beta is the angle between axis a and c
|
where beta is the angle between axis a and c
|
||||||
|
|
||||||
13 Monoclinic base-centered celldm(2)=b/a
|
13 Monoclinic base-centered celldm(2)=b/a
|
||||||
celldm(3)=c/a,
|
(unique axis c) celldm(3)=c/a,
|
||||||
celldm(4)=cos(ab)
|
celldm(4)=cos(gamma)
|
||||||
v1 = ( a/2, 0, -c/2),
|
v1 = ( a/2, 0, -c/2),
|
||||||
v2 = (b*cos(gamma), b*sin(gamma), 0),
|
v2 = (b*cos(gamma), b*sin(gamma), 0 ),
|
||||||
v3 = ( a/2, 0, c/2),
|
v3 = ( a/2, 0, c/2),
|
||||||
where gamma is the angle between axis a and b
|
where gamma=angle between axis a and b projected on xy plane
|
||||||
|
|
||||||
|
-13 Monoclinic base-centered celldm(2)=b/a
|
||||||
|
(unique axis b) celldm(3)=c/a,
|
||||||
|
celldm(5)=cos(beta)
|
||||||
|
v1 = ( a/2, -b/2, 0),
|
||||||
|
v2 = ( a/2, b/2, 0),
|
||||||
|
v3 = (c*cos(beta), 0, c*sin(beta)),
|
||||||
|
where beta=angle between axis a and c projected on xz plane
|
||||||
|
|
||||||
14 Triclinic celldm(2)= b/a,
|
14 Triclinic celldm(2)= b/a,
|
||||||
celldm(3)= c/a,
|
celldm(3)= c/a,
|
||||||
|
@ -1312,13 +1326,16 @@ help use_all_frac -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
if (.TRUE.) do not discard symmetry operations with an
|
if (.FALSE.) force real-space FFT grids to be commensurate with
|
||||||
associated fractionary translation that does not send the
|
fractionary translations of non-symmorphic symmetry operations,
|
||||||
real-space FFT grid into itself. These operations are
|
if present (e.g.: if a fractional translation (0,0,c/4) exists,
|
||||||
incompatible with real-space symmetrization but not with the
|
the FFT dimension along the c axis must be multiple of 4).
|
||||||
new G-space symmetrization. BEWARE: do not use for phonons
|
if (.TRUE.) do not impose any constraints to FFT grids, even in
|
||||||
and for hybrid functionals! Both still use symmetrization
|
the presence of non-symmorphic symmetry operations.
|
||||||
in real space.
|
BEWARE: use_all_frac=.TRUE. may lead to wrong results for
|
||||||
|
hybrid functionals and phonon calculations. Both cases use
|
||||||
|
symmetrization in real space that works for non-symmorphic
|
||||||
|
operations only if the real-space FFT grids are commensurate.
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -1800,6 +1817,28 @@ In QE =< 5.0.2 it defaulted to nqx1=nqx2=nqx3=1.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help localization_thr -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>localization_thr</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>REAL</li>
|
||||||
|
<br><li> <em>Default: </em> 0.0
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
Overlap threshold over which the exchange integral over a pair of localized orbitals
|
||||||
|
is included in the evaluation of EXX operator. Any value greater than 0.0 triggers
|
||||||
|
the SCDM localization and the evaluation on EXX using the localized orbitals.
|
||||||
|
Very small value of the threshold should yield the same result as the default EXX
|
||||||
|
evaluation
|
||||||
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
help lda_plus_u -helpfmt helpdoc -helptext {
|
help lda_plus_u -helpfmt helpdoc -helptext {
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -1904,7 +1943,7 @@ help Hubbard_alpha -helpfmt helpdoc -helptext {
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
Hubbard_alpha(i) is the perturbation (on atom i, in eV)
|
Hubbard_alpha(i) is the perturbation (on atom i, in eV)
|
||||||
used to compute U with the linear-response method of
|
used to compute U with the linear-response method of
|
||||||
Cococcioni and de Gironcoli, "PRB 71, 35105 (2005)"
|
Cococcioni and de Gironcoli, "PRB 71, 035105 (2005)"
|
||||||
(only for "lda_plus_u_kind"=0)
|
(only for "lda_plus_u_kind"=0)
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -1925,7 +1964,7 @@ help Hubbard_beta -helpfmt helpdoc -helptext {
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
Hubbard_beta(i) is the perturbation (on atom i, in eV)
|
Hubbard_beta(i) is the perturbation (on atom i, in eV)
|
||||||
used to compute J0 with the linear-response method of
|
used to compute J0 with the linear-response method of
|
||||||
Cococcioni and de Gironcoli, "PRB 71, 35105 (2005)"
|
Cococcioni and de Gironcoli, "PRB 71, 035105 (2005)"
|
||||||
(only for "lda_plus_u_kind"=0). See also
|
(only for "lda_plus_u_kind"=0). See also
|
||||||
"PRB 84, 115108 (2011)".
|
"PRB 84, 115108 (2011)".
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
|
@ -2121,6 +2160,25 @@ For noncollinear calculations only.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help lforcet -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>lforcet</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>LOGICAL</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
When starting a non collinear calculation using an existing density
|
||||||
|
file from a collinear lsda calculation assumes previous density points in
|
||||||
|
<i>z</i> direction and rotates it in the direction described by "angle1" and
|
||||||
|
"angle2" variables for atomic type 1
|
||||||
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
help constrained_magnetization -helpfmt helpdoc -helptext {
|
help constrained_magnetization -helpfmt helpdoc -helptext {
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -2361,7 +2419,7 @@ NB:
|
||||||
|
|
||||||
- Components of the total stress; sigma_xy, sigma_yz,
|
- Components of the total stress; sigma_xy, sigma_yz,
|
||||||
sigma_zz, sigma_zy, and sigma_zx are meaningless
|
sigma_zz, sigma_zy, and sigma_zx are meaningless
|
||||||
bacause ESM stress routines calculate only
|
because ESM stress routines calculate only
|
||||||
components of stress; sigma_xx, sigma_xy, sigma_yx,
|
components of stress; sigma_xx, sigma_xy, sigma_yx,
|
||||||
and sigma_yy.
|
and sigma_yy.
|
||||||
|
|
||||||
|
@ -2372,6 +2430,33 @@ NB:
|
||||||
See "esm_bc", "esm_efield", "esm_w", "esm_nfit".
|
See "esm_bc", "esm_efield", "esm_w", "esm_nfit".
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'2D'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
Truncation of the Coulomb interaction in the z direction
|
||||||
|
for structures periodic in the x-y plane. Total energy,
|
||||||
|
forces and stresses are computed in a two-dimensional framework.
|
||||||
|
Linear-response calculations () done on top of a self-consistent
|
||||||
|
calculation with this flag will automatically be performed in
|
||||||
|
the 2D framework as well. Please refer to:
|
||||||
|
Sohier, T., Calandra, M., & Mauri, F. (2017), Density functional
|
||||||
|
perturbation theory for gated two-dimensional heterostructures:
|
||||||
|
Theoretical developments and application to flexural phonons in graphene.
|
||||||
|
Physical Review B, 96(7), 75448. "https://doi.org/10.1103/PhysRevB.96.075448"
|
||||||
|
NB:
|
||||||
|
- The length of the unit-cell along the z direction should
|
||||||
|
be larger than twice the thickness of the 2D material
|
||||||
|
(including electrons). A reasonable estimate for a
|
||||||
|
layer's thickness could be the interlayer distance in the
|
||||||
|
corresponding layered bulk material. Otherwise,
|
||||||
|
the atomic thickness + 10 bohr should be a safe estimate.
|
||||||
|
There is also a lower limit of 20 bohr imposed by the cutoff
|
||||||
|
radius used to read pseudopotentials (see read_pseudo.f90 in Modules).
|
||||||
|
|
||||||
|
- As for ESM above, only in-plane stresses make sense and one
|
||||||
|
should use cell_dofree='2Dxy' in a vc-relax calculation.
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -2521,7 +2606,8 @@ help vdw_corr -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Default: </em> 'none'
|
<br><li> <em>Default: </em> 'none'
|
||||||
</li>
|
</li>
|
||||||
<br><li> <em>See: </em>
|
<br><li> <em>See: </em>
|
||||||
london_s6, london_rcut, london_c6, london_rvdw, ts_vdw_econv_thr, ts_vdw_isolated, xdm_a1, xdm_a2
|
london_s6, london_rcut, london_c6, london_rvdw,
|
||||||
|
dftd3_version, dftd3_threebody, ts_vdw_econv_thr, ts_vdw_isolated, xdm_a1, xdm_a2
|
||||||
</li>
|
</li>
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
|
@ -2532,17 +2618,25 @@ Type of Van der Waals correction. Allowed values:
|
||||||
<dl style="margin-left: 1.5em;">
|
<dl style="margin-left: 1.5em;">
|
||||||
<dt><tt><b>'grimme-d2'</b>, <b>'Grimme-D2'</b>, <b>'DFT-D'</b>, <b>'dft-d'</b> :</tt></dt>
|
<dt><tt><b>'grimme-d2'</b>, <b>'Grimme-D2'</b>, <b>'DFT-D'</b>, <b>'dft-d'</b> :</tt></dt>
|
||||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
Semiempirical Grimme's DFT-D2.
|
Semiempirical Grimme's DFT-D2. Optional variables:
|
||||||
Optional variables: "london_s6", "london_rcut", "london_c6", "london_rvdw",
|
"london_s6", "london_rcut", "london_c6", "london_rvdw"
|
||||||
S. Grimme, J. Comp. Chem. 27, 1787 (2006), "doi:10.1002/jcc.20495"
|
S. Grimme, J. Comp. Chem. 27, 1787 (2006), "doi:10.1002/jcc.20495"
|
||||||
V. Barone et al., J. Comp. Chem. 30, 934 (2009), "doi:10.1002/jcc.21112"
|
V. Barone et al., J. Comp. Chem. 30, 934 (2009), "doi:10.1002/jcc.21112"
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl style="margin-left: 1.5em;">
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'grimme-d3'</b>, <b>'Grimme-D3'</b>, <b>'DFT-D3'</b>, <b>'dft-d3'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
|
Semiempirical Grimme's DFT-D3. Optional variables:
|
||||||
|
"dftd3_version", "dftd3_threebody"
|
||||||
|
S. Grimme et al, J. Chem. Phys 132, 154104 (2010), "doi:10.1002/jcc.20495"
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
<dt><tt><b>'TS'</b>, <b>'ts'</b>, <b>'ts-vdw'</b>, <b>'ts-vdW'</b>, <b>'tkatchenko-scheffler'</b> :</tt></dt>
|
<dt><tt><b>'TS'</b>, <b>'ts'</b>, <b>'ts-vdw'</b>, <b>'ts-vdW'</b>, <b>'tkatchenko-scheffler'</b> :</tt></dt>
|
||||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||||
Tkatchenko-Scheffler dispersion corrections with first-principle derived
|
Tkatchenko-Scheffler dispersion corrections with first-principle derived
|
||||||
C6 coefficients (implemented in CP only).
|
C6 coefficients.
|
||||||
Optional variables: "ts_vdw_econv_thr", "ts_vdw_isolated"
|
Optional variables: "ts_vdw_econv_thr", "ts_vdw_isolated"
|
||||||
See A. Tkatchenko and M. Scheffler, "PRL 102, 073005 (2009)".
|
See A. Tkatchenko and M. Scheffler, "PRL 102, 073005 (2009)".
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
|
@ -2659,6 +2753,50 @@ cutoff radius (a.u.) for dispersion interactions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help dftd3_version -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>dftd3_version</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>integer</li>
|
||||||
|
<br><li> <em>Default: </em> 3
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
Version of Grimme implementation of Grimme-D3:
|
||||||
|
Version=2 is the original Grimme-D2 parametrization
|
||||||
|
Version=3 is Grimme-D3 (zero damping)
|
||||||
|
Version=4 is Grimme-D3 (BJ damping)
|
||||||
|
Version=5 is Grimme-D3M (zero damping)
|
||||||
|
Version=6 is Grimme-D3M (BJ damping)
|
||||||
|
NOTE: not all functionals are parametrized.
|
||||||
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help dftd3_threebody -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>dftd3_threebody</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>LOGICAL</li>
|
||||||
|
<br><li> <em>Default: </em> TRUE
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
Turn three-body terms in Grimme-D3 on. If .false. two-body contributions
|
||||||
|
only are computed, using two-body parameters of Grimme-D3.
|
||||||
|
If dftd3_version=2, three-body contribution is always disabled.
|
||||||
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
help ts_vdw_econv_thr -helpfmt helpdoc -helptext {
|
help ts_vdw_econv_thr -helpfmt helpdoc -helptext {
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -2725,10 +2863,9 @@ help xdm_a1 -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
Damping function parameter a1 (adimensional). This value should change
|
Damping function parameter a1 (adimensional). It is NOT necessary to give
|
||||||
with the exchange-correlation functional. The default corresponds to
|
a value if the functional is one of B86bPBE, PW86PBE, PBE, BLYP. For functionals
|
||||||
PW86PBE.
|
in this list, the coefficients are given in:
|
||||||
For other functionals, see:
|
|
||||||
"http://schooner.chem.dal.ca/wiki/XDM"
|
"http://schooner.chem.dal.ca/wiki/XDM"
|
||||||
A. Otero de la Roza, E. R. Johnson, J. Chem. Phys. 138, 204109 (2013),
|
A. Otero de la Roza, E. R. Johnson, J. Chem. Phys. 138, 204109 (2013),
|
||||||
"doi:10.1063/1.4705760"
|
"doi:10.1063/1.4705760"
|
||||||
|
@ -2749,10 +2886,9 @@ help xdm_a2 -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
Damping function parameter a2 (angstrom). This value should change
|
Damping function parameter a2 (angstrom). It is NOT necessary to give
|
||||||
with the exchange-correlation functional. The default corresponds to
|
a value if the functional is one of B86bPBE, PW86PBE, PBE, BLYP. For functionals
|
||||||
PW86PBE.
|
in this list, the coefficients are given in:
|
||||||
For other functionals, see:
|
|
||||||
"http://schooner.chem.dal.ca/wiki/XDM"
|
"http://schooner.chem.dal.ca/wiki/XDM"
|
||||||
A. Otero de la Roza, E. R. Johnson, J. Chem. Phys. 138, 204109 (2013),
|
A. Otero de la Roza, E. R. Johnson, J. Chem. Phys. 138, 204109 (2013),
|
||||||
"doi:10.1063/1.4705760"
|
"doi:10.1063/1.4705760"
|
||||||
|
@ -2778,7 +2914,8 @@ in the International Tables of Crystallography A (ITA).
|
||||||
This allows to give in input only the inequivalent atomic
|
This allows to give in input only the inequivalent atomic
|
||||||
positions. The positions of all the symmetry equivalent atoms
|
positions. The positions of all the symmetry equivalent atoms
|
||||||
are calculated by the code. Used only when the atomic positions
|
are calculated by the code. Used only when the atomic positions
|
||||||
are of type crystal_sg.
|
are of type crystal_sg. See also "uniqueb",
|
||||||
|
"origin_choice", "rhombohedral"
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -3521,11 +3658,32 @@ help tqr -helpfmt helpdoc -helptext {
|
||||||
<br><li> <em>Description:</em>
|
<br><li> <em>Description:</em>
|
||||||
</li>
|
</li>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
If .true., use the real-space algorithm for augmentation
|
If .true., use a real-space algorithm for augmentation
|
||||||
charges in ultrasoft pseudopotentials.
|
charges of ultrasoft pseudopotentials and PAWsets.
|
||||||
Must faster execution of ultrasoft-related calculations,
|
Faster but numerically less accurate than the default
|
||||||
but numerically less accurate than the default algorithm.
|
G-space algorithm. Use with care and after testing!
|
||||||
Use with care and after testing!
|
</pre></blockquote>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------
|
||||||
|
help real_space -helpfmt helpdoc -helptext {
|
||||||
|
<ul>
|
||||||
|
<li> <em>Variable: </em><big><b>real_space</b></big>
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Type: </em>LOGICAL</li>
|
||||||
|
<br><li> <em>Default: </em> .FALSE.
|
||||||
|
</li>
|
||||||
|
<br><li> <em>Description:</em>
|
||||||
|
</li>
|
||||||
|
<blockquote><pre>
|
||||||
|
If .true., exploit real-space localization to compute
|
||||||
|
matrix elements for nonlocal projectors. Faster and in
|
||||||
|
principle better scaling than the default G-space algorithm,
|
||||||
|
but numerically less accurate, may lead to some loss of
|
||||||
|
translational invariance. Use with care and after testing!
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -4287,6 +4445,11 @@ Select which of the cell parameters should be moved:
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl style="margin-left: 1.5em;">
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'ibrav'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> all axis and angles are moved, but the lattice but be representable with the initial ibrav choice
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
<dt><tt><b>'x'</b> :</tt></dt>
|
<dt><tt><b>'x'</b> :</tt></dt>
|
||||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> only the x component of axis 1 (v1_x) is moved
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> only the x component of axis 1 (v1_x) is moved
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
|
@ -4341,6 +4504,21 @@ Select which of the cell parameters should be moved:
|
||||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> as above, keeping the area in xy plane fixed
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> as above, keeping the area in xy plane fixed
|
||||||
</pre></dd>
|
</pre></dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'epitaxial_ab'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> fix axis 1 and 2 while allowing axis 3 to move
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'epitaxial_ac'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> fix axis 1 and 3 while allowing axis 2 to move
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
|
<dl style="margin-left: 1.5em;">
|
||||||
|
<dt><tt><b>'epitaxial_bc'</b> :</tt></dt>
|
||||||
|
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> fix axis 2 and 3 while allowing axis 1 to move
|
||||||
|
</pre></dd>
|
||||||
|
</dl>
|
||||||
<pre>
|
<pre>
|
||||||
BEWARE: if axis are not orthogonal, some of these options do not
|
BEWARE: if axis are not orthogonal, some of these options do not
|
||||||
work (symmetry is broken). If you are not happy with them,
|
work (symmetry is broken). If you are not happy with them,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,10 +5,9 @@
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# Anton Kokalj
|
# Anton Kokalj
|
||||||
# Jozef Stefan Institute, Ljubljana, Slovenia
|
# Jozef Stefan Institute, Ljubljana, Slovenia
|
||||||
# INFM DEMOCRITOS National Simulation Center, Trieste, Italy
|
|
||||||
# Email: Tone.Kokalj@ijs.si
|
# Email: Tone.Kokalj@ijs.si
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
# Copyright (c) 2003--2004 Anton Kokalj
|
# Copyright (c) 2003--2019 Anton Kokalj
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
|
@ -4,10 +4,9 @@
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# Anton Kokalj
|
# Anton Kokalj
|
||||||
# Jozef Stefan Institute, Ljubljana, Slovenia
|
# Jozef Stefan Institute, Ljubljana, Slovenia
|
||||||
# INFM DEMOCRITOS National Simulation Center, Trieste, Italy
|
|
||||||
# Email: Tone.Kokalj@ijs.si
|
# Email: Tone.Kokalj@ijs.si
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
# Copyright (c) 2003--2004 Anton Kokalj
|
# Copyright (c) 2003--2019 Anton Kokalj
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -34,11 +33,10 @@ if { [info exists env(PWGUI)] } {
|
||||||
# we arrive here, if we are using SVN version of code
|
# we arrive here, if we are using SVN version of code
|
||||||
if { [file isdirectory [file join $env(PWGUI) .. Guib]] } {
|
if { [file isdirectory [file join $env(PWGUI) .. Guib]] } {
|
||||||
puts " "
|
puts " "
|
||||||
puts " It seems you are using SVN version of PWgui/Quantum-Espresso."
|
puts " It seems you are using a repository QE version of PWgui."
|
||||||
puts " "
|
puts " "
|
||||||
puts " For the SVN version you need to do the following:"
|
puts " You need to initialize PWgui first."
|
||||||
puts " * cd into GUI/PWgui directory, and"
|
puts " Use \"make gui\" from the QE root directory."
|
||||||
puts " * execute: make svninit"
|
|
||||||
puts " "
|
puts " "
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,10 +108,12 @@ $gui addModule module ld "LD1.X" [file join $env(PWGUI) modules atomic atomic.tc
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
# help Files
|
# help Files
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
#$gui addHelp help usersguide "User's Guide for Quantum-ESPRESSO" [file join $env(PWGUI) doc pwdocs users-guide users-guide.html]
|
|
||||||
$gui addHelp help usersguide "User's Guide for Quantum-ESPRESSO" [file join $env(PWGUI) doc pwdocs user_guide user_guide.html] word
|
|
||||||
|
|
||||||
$gui addHelp separator
|
set user_guide_html [file join $env(PWGUI) doc pwdocs user_guide user_guide.html]
|
||||||
|
if { [file exists $user_guide_html] } {
|
||||||
|
$gui addHelp help usersguide "User's Guide for Quantum-ESPRESSO" $user_guide_html word
|
||||||
|
$gui addHelp separator
|
||||||
|
}
|
||||||
|
|
||||||
$gui addHelp help pw "PW.X Input Syntax" [file join $env(PWGUI) doc pwdocs INPUT_PW.html] none
|
$gui addHelp help pw "PW.X Input Syntax" [file join $env(PWGUI) doc pwdocs INPUT_PW.html] none
|
||||||
$gui addHelp help neb "NEB.DAT Input Syntax" [file join $env(PWGUI) doc pwdocs INPUT_NEB.html] none
|
$gui addHelp help neb "NEB.DAT Input Syntax" [file join $env(PWGUI) doc pwdocs INPUT_NEB.html] none
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
LATEX = pdflatex
|
LATEX = pdflatex
|
||||||
LATEX2HTML = latex2html
|
LATEX2HTML = latex2html
|
||||||
|
|
||||||
VERSION = svn
|
VERSION = 6.4
|
||||||
|
|
||||||
PDFS = user_guide.pdf
|
PDFS = user_guide.pdf
|
||||||
AUXS = $(PDFS:.pdf=.aux)
|
AUXS = $(PDFS:.pdf=.aux)
|
||||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
\documentclass[12pt,a4paper]{article}
|
\documentclass[12pt,a4paper]{article}
|
||||||
|
|
||||||
\def\version{6.2}
|
\def\version{6.4}
|
||||||
|
|
||||||
\def\qe{{\sc Quantum ESPRESSO}}
|
\def\qe{{\sc Quantum ESPRESSO}}
|
||||||
\sloppy
|
\sloppy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
TOPDIR = $(shell cd ../..; pwd)
|
TOPDIR = $(shell cd ../..; pwd)
|
||||||
VERSION = svn
|
VERSION = 6.4
|
||||||
GEN_MODE = $(TOPDIR)/dev-tools/gen-emacs-mode
|
GEN_MODE = $(TOPDIR)/dev-tools/gen-emacs-mode
|
||||||
LATEX = pdflatex
|
LATEX = pdflatex
|
||||||
|
|
||||||
|
@ -98,7 +98,6 @@ doc:
|
||||||
cd Doc; $(MAKE)
|
cd Doc; $(MAKE)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
- rm -f qe-modes/$(ELISP_FILES)
|
|
||||||
- cd Doc; $(MAKE) clean
|
- cd Doc; $(MAKE) clean
|
||||||
|
|
||||||
veryclean: clean
|
veryclean: clean
|
||||||
|
|
|
@ -0,0 +1,237 @@
|
||||||
|
;; cp-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `cp-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-cp.x input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar cp-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; cp's supercards (if any)
|
||||||
|
(defvar cp-open-supercards (list ))
|
||||||
|
(defvar cp-closed-supercards (list ))
|
||||||
|
|
||||||
|
;; cp's namelists
|
||||||
|
(defvar cp-namelists (list "&CELL" "&CONTROL" "&ELECTRONS" "&IONS" "&PRESS_AI" "&SYSTEM" "&WANNIER" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; cp's variables
|
||||||
|
(defvar cp-vars (list "A" "abisur" "abivol" "adapt" "ampre" "amprp" "assume_isolated" "B" "C" "calculation" "calwf" "cell_damping" "cell_dofree" "cell_dynamics" "cell_factor" "cell_parameters" "cell_temperature" "cell_velocities" "celldm" "conv_thr" "cosAB" "cosAC" "cosBC" "degauss" "disk_io" "dt" "dthr" "ecfixed" "ecutrho" "ecutwfc" "efield" "efx0" "efx1" "efy0" "efy1" "efz0" "efz1" "ekin_conv_thr" "ekincw" "electron_damping" "electron_dynamics" "electron_maxstep" "electron_temperature" "electron_velocities" "emass" "emass_cutoff" "epol" "etot_conv_thr" "exx_dis_cutoff" "exx_fraction" "exx_me_rcut_pair" "exx_me_rcut_self" "exx_neigh" "exx_poisson_eps" "exx_ps_rcut_pair" "exx_ps_rcut_self" "fnhscl" "fnosee" "fnoseh" "fnosep" "forc_conv_thr" "grease" "greash" "greasp" "Hubbard_U" "ibrav" "iesr" "input_dft" "ion_damping" "ion_dynamics" "ion_nstepe" "ion_positions" "ion_radius" "ion_temperature" "ion_velocities" "iprint" "isave" "lambda_cold" "lda_plus_u" "london_rcut" "london_s6" "max_seconds" "maxiter" "maxwfdt" "memory" "n_inner" "nat" "nbnd" "ndega" "ndr" "ndw" "nhgrp" "nhpcl" "nhptyp" "ninter_cold_restart" "nit" "niter_cg_restart" "nr1" "nr1b" "nr1s" "nr2" "nr2b" "nr2s" "nr3" "nr3b" "nr3s" "nsd" "nspin" "nstep" "nsteps" "ntyp" "nwf" "occupations" "ortho_eps" "ortho_max" "ortho_para" "orthogonalization" "outdir" "P_ext" "P_fin" "P_in" "passop" "prefix" "press" "pseudo_dir" "pvar" "q2sigma" "qcutz" "remove_rigid_rot" "restart_mode" "rho_thr" "saverho" "smearing" "startingwfc" "Surf_t" "sw_len" "tabps" "tcg" "tefield" "temph" "tempw" "title" "tolp" "tolw" "tot_charge" "tot_magnetization" "tprnfor" "tranp" "ts_vdw" "ts_vdw_econv_thr" "ts_vdw_isolated" "tstress" "vdw_corr" "verbosity" "wf_efield" "wf_friction" "wf_q" "wf_switch" "wfdt" "wffort" "wfsd" "wmass" "writev" ))
|
||||||
|
|
||||||
|
;; cp's cards & keywords
|
||||||
|
(defvar cp-cards (list "ATOMIC_FORCES" "ATOMIC_POSITIONS" "ATOMIC_SPECIES" "ATOMIC_VELOCITIES" "AUTOPILOT" "CELL_PARAMETERS" "CONSTRAINTS" "OCCUPATIONS" "PLOT_WANNIER" "REF_CELL_PARAMETERS" ))
|
||||||
|
|
||||||
|
;; cp's flags
|
||||||
|
(defvar cp-flags (list "a.u" "alat" "angstrom" "bohr" "crystal" ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar cp-open-supercards-regexp (regexp-opt cp-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar cp-closed-supercards-regexp (regexp-opt cp-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar cp-cards-regexp (regexp-opt
|
||||||
|
(append cp-cards cp-open-supercards) 'symbols))
|
||||||
|
(defvar cp-flags-regexp (regexp-opt cp-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar cp-namelist-face (cons (regexp-opt (append cp-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar cp-variable-face (cons (regexp-opt cp-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar cp-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar cp-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append cp-cards cp-open-supercards cp-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar cp-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar cp-indent-fold-t-re (concat "^[ \t]*" (regexp-opt cp-namelists t)))
|
||||||
|
(defvar cp-indent-re (concat "^[ \t]*" (regexp-opt cp-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun cp-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward cp-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun cp-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward cp-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun cp-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward cp-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'cp-mode (list
|
||||||
|
cp-namelist-face
|
||||||
|
cp-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'cp-mode '(
|
||||||
|
(cp-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(cp-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(cp-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar cp-keywords '(cp-namelist-face cp-variable-face))
|
||||||
|
(defvar cp-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar cp-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `cp-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun cp-indent-line ()
|
||||||
|
"Indent current line according to cp input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at cp-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at cp-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at cp-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at cp-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at cp-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the cp-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode cp-mode prog-mode
|
||||||
|
"QE-cp.x"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-cp.x mode)"
|
||||||
|
(setq font-lock-defaults '((cp-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'cp-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" cp-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" cp-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " cp-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq cp-namelists nil)
|
||||||
|
(setq cp-vars nil)
|
||||||
|
(setq cp-cards nil)
|
||||||
|
(setq cp-flags nil)
|
||||||
|
(setq cp-open-supercards nil)
|
||||||
|
(setq cp-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'cp-mode)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,237 @@
|
||||||
|
;; ld1-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `ld1-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-ld1.x (atomic) input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar ld1-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; ld1's supercards (if any)
|
||||||
|
(defvar ld1-open-supercards (list ))
|
||||||
|
(defvar ld1-closed-supercards (list ))
|
||||||
|
|
||||||
|
;; ld1's namelists
|
||||||
|
(defvar ld1-namelists (list "&INPUT" "&INPUTP" "&TEST" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; ld1's variables
|
||||||
|
(defvar ld1-vars (list "atom" "author" "beta" "cau_fact" "config" "configts" "decut" "deld" "dft" "dx" "ecutmax" "ecutmin" "emaxld" "eminld" "file_beta" "file_charge" "file_chi" "file_core" "file_pseudo" "file_pseudopw" "file_qvan" "file_recon" "file_screen" "file_wfcaegen" "file_wfcncgen" "file_wfcusgen" "frozen_core" "isic" "iswitch" "latt" "lgipaw_reconstruction" "lloc" "lpaw" "lsave_wfc" "lsd" "lsdts" "lsmall" "max_out_wfc" "nconf" "new_core_ps" "nlcc" "nld" "noscf" "prefix" "pseudotype" "rcloc" "rcore" "rcutv" "rel" "rel_dist" "relpert" "rho0" "rlderiv" "rm" "rmatch_augfun" "rmatch_augfun_nc" "rmax" "rpwe" "rytoev_fact" "title" "tm" "tr2" "use_paw_as_gipaw" "vdw" "verbosity" "which_augfun" "write_coulomb" "xmin" "zed" "zval" ))
|
||||||
|
|
||||||
|
;; ld1's cards & keywords
|
||||||
|
(defvar ld1-cards (list "__NO-CARDS" ))
|
||||||
|
|
||||||
|
;; ld1's flags
|
||||||
|
(defvar ld1-flags (list ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar ld1-open-supercards-regexp (regexp-opt ld1-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar ld1-closed-supercards-regexp (regexp-opt ld1-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar ld1-cards-regexp (regexp-opt
|
||||||
|
(append ld1-cards ld1-open-supercards) 'symbols))
|
||||||
|
(defvar ld1-flags-regexp (regexp-opt ld1-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar ld1-namelist-face (cons (regexp-opt (append ld1-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar ld1-variable-face (cons (regexp-opt ld1-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar ld1-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar ld1-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append ld1-cards ld1-open-supercards ld1-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar ld1-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar ld1-indent-fold-t-re (concat "^[ \t]*" (regexp-opt ld1-namelists t)))
|
||||||
|
(defvar ld1-indent-re (concat "^[ \t]*" (regexp-opt ld1-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun ld1-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ld1-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun ld1-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ld1-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun ld1-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ld1-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'ld1-mode (list
|
||||||
|
ld1-namelist-face
|
||||||
|
ld1-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'ld1-mode '(
|
||||||
|
(ld1-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(ld1-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(ld1-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar ld1-keywords '(ld1-namelist-face ld1-variable-face))
|
||||||
|
(defvar ld1-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar ld1-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `ld1-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun ld1-indent-line ()
|
||||||
|
"Indent current line according to ld1 input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at ld1-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at ld1-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at ld1-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at ld1-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at ld1-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the ld1-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode ld1-mode prog-mode
|
||||||
|
"QE-ld1.x (atomic)"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-ld1.x (atomic) mode)"
|
||||||
|
(setq font-lock-defaults '((ld1-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'ld1-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" ld1-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" ld1-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " ld1-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq ld1-namelists nil)
|
||||||
|
(setq ld1-vars nil)
|
||||||
|
(setq ld1-cards nil)
|
||||||
|
(setq ld1-flags nil)
|
||||||
|
(setq ld1-open-supercards nil)
|
||||||
|
(setq ld1-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'ld1-mode)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,237 @@
|
||||||
|
;; neb-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `neb-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-neb.x input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar neb-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; neb's supercards (if any)
|
||||||
|
(defvar neb-open-supercards (list "FIRST_IMAGE" "INTERMEDIATE_IMAGE" "LAST_IMAGE" ))
|
||||||
|
(defvar neb-closed-supercards (list "BEGIN" "BEGIN_ENGINE_INPUT" "BEGIN_PATH_INPUT" "BEGIN_POSITIONS" "END" "END_ENGINE_INPUT" "END_PATH_INPUT" "END_POSITIONS" ))
|
||||||
|
|
||||||
|
;; neb's namelists
|
||||||
|
(defvar neb-namelists (list "&CELL" "&CONTROL" "&ELECTRONS" "&IONS" "&PATH" "&SYSTEM" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; neb's variables
|
||||||
|
(defvar neb-vars (list "A" "adaptive_thr" "angle1" "angle2" "assume_isolated" "B" "bfgs_ndim" "block" "block_1" "block_2" "block_height" "C" "calculation" "cell_dofree" "cell_dynamics" "cell_factor" "celldm" "CI_scheme" "constrained_magnetization" "conv_thr" "conv_thr_init" "conv_thr_multi" "cosAB" "cosAC" "cosBC" "degauss" "delta_t" "dftd3_threebody" "dftd3_version" "diago_cg_maxiter" "diago_david_ndim" "diago_full_acc" "diago_thr_init" "diagonalization" "dipfield" "disk_io" "ds" "dt" "eamp" "ecfixed" "ecutfock" "ecutrho" "ecutvcut" "ecutwfc" "edir" "efield" "efield_cart" "efield_phase" "electron_maxstep" "emaxpos" "eopreg" "esm_bc" "esm_efield" "esm_nfit" "esm_w" "etot_conv_thr" "exx_fraction" "exxdiv_treatment" "fcp_mu" "fcp_tot_charge_first" "fcp_tot_charge_last" "first_last_opt" "fixed_magnetization" "forc_conv_thr" "force_symmorphic" "gate" "gdir" "Hubbard_alpha" "Hubbard_beta" "Hubbard_J" "Hubbard_J0" "Hubbard_U" "ibrav" "input_dft" "ion_dynamics" "ion_positions" "ion_temperature" "iprint" "k_max" "k_min" "lambda" "lberry" "lda_plus_u" "lda_plus_u_kind" "lelfield" "lfcpopt" "lforcet" "lkpoint_dir" "localization_thr" "london" "london_c6" "london_rcut" "london_rvdw" "london_s6" "lorbm" "lspinorb" "max_seconds" "minimum_image" "mixing_beta" "mixing_fixed_ns" "mixing_mode" "mixing_ndim" "nat" "nberrycyc" "nbnd" "no_t_rev" "noinv" "noncolin" "nosym" "nosym_evc" "nppstr" "nqx1" "nqx2" "nqx3" "nr1" "nr1s" "nr2" "nr2s" "nr3" "nr3s" "nraise" "nspin" "nstep" "nstep_path" "ntyp" "num_of_images" "occupations" "one_atom_occupations" "opt_scheme" "origin_choice" "ortho_para" "outdir" "path_thr" "pot_extrapolation" "prefix" "press" "press_conv_thr" "pseudo_dir" "q2sigma" "qcutz" "real_space" "refold_pos" "relaxz" "remove_rigid_rot" "report" "restart_mode" "rhombohedral" "scf_must_converge" "screening_parameter" "smearing" "space_group" "starting_charge" "starting_magnetization" "starting_ns_eigenvalue" "starting_spin_angle" "startingpot" "startingwfc" "string_method" "tefield" "temp_req" "tempw" "title" "tolp" "tot_charge" "tot_magnetization" "tprnfor" "tqr" "trust_radius_ini" "trust_radius_max" "trust_radius_min" "ts_vdw_econv_thr" "ts_vdw_isolated" "tstress" "U_projection_type" "uniqueb" "upscale" "use_all_frac" "use_freezing" "use_masses" "vdw_corr" "verbosity" "w_1" "w_2" "wf_collect" "wfc_extrapolation" "wfcdir" "wmass" "x_gamma_extrapolation" "xdm" "xdm_a1" "xdm_a2" "zgate" ))
|
||||||
|
|
||||||
|
;; neb's cards & keywords
|
||||||
|
(defvar neb-cards (list "ATOMIC_FORCES" "ATOMIC_POSITIONS" "ATOMIC_SPECIES" "CELL_PARAMETERS" "CLIMBING_IMAGES" "CONSTRAINTS" "K_POINTS" "OCCUPATIONS" ))
|
||||||
|
|
||||||
|
;; neb's flags
|
||||||
|
(defvar neb-flags (list "alat" "angstrom" "automatic" "bohr" "crystal" "crystal_b" "crystal_c" "crystal_sg" "gamma" "tpiba" "tpiba_b" "tpiba_c" ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar neb-open-supercards-regexp (regexp-opt neb-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar neb-closed-supercards-regexp (regexp-opt neb-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar neb-cards-regexp (regexp-opt
|
||||||
|
(append neb-cards neb-open-supercards) 'symbols))
|
||||||
|
(defvar neb-flags-regexp (regexp-opt neb-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar neb-namelist-face (cons (regexp-opt (append neb-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar neb-variable-face (cons (regexp-opt neb-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar neb-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar neb-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append neb-cards neb-open-supercards neb-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar neb-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar neb-indent-fold-t-re (concat "^[ \t]*" (regexp-opt neb-namelists t)))
|
||||||
|
(defvar neb-indent-re (concat "^[ \t]*" (regexp-opt neb-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun neb-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward neb-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun neb-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward neb-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun neb-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward neb-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'neb-mode (list
|
||||||
|
neb-namelist-face
|
||||||
|
neb-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'neb-mode '(
|
||||||
|
(neb-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(neb-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(neb-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar neb-keywords '(neb-namelist-face neb-variable-face))
|
||||||
|
(defvar neb-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar neb-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `neb-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun neb-indent-line ()
|
||||||
|
"Indent current line according to neb input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at neb-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at neb-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at neb-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at neb-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at neb-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the neb-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode neb-mode prog-mode
|
||||||
|
"QE-neb.x"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-neb.x mode)"
|
||||||
|
(setq font-lock-defaults '((neb-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'neb-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" neb-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" neb-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " neb-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq neb-namelists nil)
|
||||||
|
(setq neb-vars nil)
|
||||||
|
(setq neb-cards nil)
|
||||||
|
(setq neb-flags nil)
|
||||||
|
(setq neb-open-supercards nil)
|
||||||
|
(setq neb-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'neb-mode)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,237 @@
|
||||||
|
;; ph-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `ph-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-ph.x input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar ph-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; ph's supercards (if any)
|
||||||
|
(defvar ph-open-supercards (list ))
|
||||||
|
(defvar ph-closed-supercards (list ))
|
||||||
|
|
||||||
|
;; ph's namelists
|
||||||
|
(defvar ph-namelists (list "&INPUTPH" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; ph's variables
|
||||||
|
(defvar ph-vars (list "alpha_mix" "amass" "asr" "dek" "drho_star" "dvscf_star" "electron_phonon" "elop" "epsil" "eth_ns" "eth_rps" "fildrho" "fildvscf" "fildyn" "fpol" "k1" "k2" "k3" "last_irr" "last_q" "ldiag" "ldisp" "lnoloc" "low_directory_check" "lqdir" "lraman" "lrpa" "lshift_q" "max_seconds" "modenum" "nat_todo" "niter_ph" "nk1" "nk2" "nk3" "nmix_ph" "nogg" "nq1" "nq2" "nq3" "only_init" "outdir" "prefix" "q2d" "q_in_band_form" "qplot" "read_dns_bare" "recover" "reduce_io" "search_sym" "start_irr" "start_q" "tr2_ph" "trans" "verbosity" "zeu" "zue" ))
|
||||||
|
|
||||||
|
;; ph's cards & keywords
|
||||||
|
(defvar ph-cards (list "__NO-CARDS" ))
|
||||||
|
|
||||||
|
;; ph's flags
|
||||||
|
(defvar ph-flags (list ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar ph-open-supercards-regexp (regexp-opt ph-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar ph-closed-supercards-regexp (regexp-opt ph-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar ph-cards-regexp (regexp-opt
|
||||||
|
(append ph-cards ph-open-supercards) 'symbols))
|
||||||
|
(defvar ph-flags-regexp (regexp-opt ph-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar ph-namelist-face (cons (regexp-opt (append ph-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar ph-variable-face (cons (regexp-opt ph-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar ph-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar ph-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append ph-cards ph-open-supercards ph-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar ph-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar ph-indent-fold-t-re (concat "^[ \t]*" (regexp-opt ph-namelists t)))
|
||||||
|
(defvar ph-indent-re (concat "^[ \t]*" (regexp-opt ph-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun ph-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ph-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun ph-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ph-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun ph-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward ph-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'ph-mode (list
|
||||||
|
ph-namelist-face
|
||||||
|
ph-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'ph-mode '(
|
||||||
|
(ph-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(ph-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(ph-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar ph-keywords '(ph-namelist-face ph-variable-face))
|
||||||
|
(defvar ph-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar ph-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `ph-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun ph-indent-line ()
|
||||||
|
"Indent current line according to ph input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at ph-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at ph-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at ph-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at ph-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at ph-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the ph-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode ph-mode prog-mode
|
||||||
|
"QE-ph.x"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-ph.x mode)"
|
||||||
|
(setq font-lock-defaults '((ph-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'ph-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" ph-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" ph-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " ph-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq ph-namelists nil)
|
||||||
|
(setq ph-vars nil)
|
||||||
|
(setq ph-cards nil)
|
||||||
|
(setq ph-flags nil)
|
||||||
|
(setq ph-open-supercards nil)
|
||||||
|
(setq ph-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'ph-mode)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,237 @@
|
||||||
|
;; pp-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `pp-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-pp.x input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar pp-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; pp's supercards (if any)
|
||||||
|
(defvar pp-open-supercards (list ))
|
||||||
|
(defvar pp-closed-supercards (list ))
|
||||||
|
|
||||||
|
;; pp's namelists
|
||||||
|
(defvar pp-namelists (list "&INPUTPP" "&PLOT" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; pp's variables
|
||||||
|
(defvar pp-vars (list "degauss_ldos" "delta_e" "e1" "e2" "e3" "emax" "emin" "fileout" "filepp" "filplot" "iflag" "interpolation" "kband" "kpoint" "lsign" "nfile" "nx" "ny" "nz" "outdir" "output_format" "plot_num" "prefix" "radius" "sample_bias" "spin_component" "weight" "x0" ))
|
||||||
|
|
||||||
|
;; pp's cards & keywords
|
||||||
|
(defvar pp-cards (list "__NO-CARDS" ))
|
||||||
|
|
||||||
|
;; pp's flags
|
||||||
|
(defvar pp-flags (list ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar pp-open-supercards-regexp (regexp-opt pp-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar pp-closed-supercards-regexp (regexp-opt pp-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar pp-cards-regexp (regexp-opt
|
||||||
|
(append pp-cards pp-open-supercards) 'symbols))
|
||||||
|
(defvar pp-flags-regexp (regexp-opt pp-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar pp-namelist-face (cons (regexp-opt (append pp-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar pp-variable-face (cons (regexp-opt pp-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar pp-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar pp-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append pp-cards pp-open-supercards pp-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar pp-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar pp-indent-fold-t-re (concat "^[ \t]*" (regexp-opt pp-namelists t)))
|
||||||
|
(defvar pp-indent-re (concat "^[ \t]*" (regexp-opt pp-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun pp-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pp-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun pp-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pp-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun pp-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pp-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'pp-mode (list
|
||||||
|
pp-namelist-face
|
||||||
|
pp-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'pp-mode '(
|
||||||
|
(pp-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(pp-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(pp-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar pp-keywords '(pp-namelist-face pp-variable-face))
|
||||||
|
(defvar pp-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar pp-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `pp-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun pp-indent-line ()
|
||||||
|
"Indent current line according to pp input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at pp-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at pp-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at pp-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at pp-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at pp-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the pp-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode pp-mode prog-mode
|
||||||
|
"QE-pp.x"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-pp.x mode)"
|
||||||
|
(setq font-lock-defaults '((pp-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'pp-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" pp-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" pp-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " pp-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq pp-namelists nil)
|
||||||
|
(setq pp-vars nil)
|
||||||
|
(setq pp-cards nil)
|
||||||
|
(setq pp-flags nil)
|
||||||
|
(setq pp-open-supercards nil)
|
||||||
|
(setq pp-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'pp-mode)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,237 @@
|
||||||
|
;; pw-mode.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the `pw-mode', a major mode for composing the Quantum ESPRESSO
|
||||||
|
;; QE-pw.x input files. For the installation and usage, see the
|
||||||
|
;; user_guide.pdf in the Doc/ subdirectory of the original package
|
||||||
|
;; (quick installation instructions are also available in the README
|
||||||
|
;; file of the original package).
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'font-lock)
|
||||||
|
(require 'regexp-opt)
|
||||||
|
|
||||||
|
(defvar pw-mode-hook nil)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; basic variables
|
||||||
|
|
||||||
|
;; pw's supercards (if any)
|
||||||
|
(defvar pw-open-supercards (list ))
|
||||||
|
(defvar pw-closed-supercards (list ))
|
||||||
|
|
||||||
|
;; pw's namelists
|
||||||
|
(defvar pw-namelists (list "&CELL" "&CONTROL" "&ELECTRONS" "&IONS" "&SYSTEM" ))
|
||||||
|
(defvar qe-end-namelist (list "&END" "/"))
|
||||||
|
|
||||||
|
;; pw's variables
|
||||||
|
(defvar pw-vars (list "A" "adaptive_thr" "angle1" "angle2" "assume_isolated" "B" "bfgs_ndim" "block" "block_1" "block_2" "block_height" "C" "calculation" "cell_dofree" "cell_dynamics" "cell_factor" "celldm" "constrained_magnetization" "conv_thr" "conv_thr_init" "conv_thr_multi" "cosAB" "cosAC" "cosBC" "degauss" "delta_t" "dftd3_threebody" "dftd3_version" "diago_cg_maxiter" "diago_david_ndim" "diago_full_acc" "diago_thr_init" "diagonalization" "dipfield" "disk_io" "dt" "eamp" "ecfixed" "ecutfock" "ecutrho" "ecutvcut" "ecutwfc" "edir" "efield" "efield_cart" "efield_phase" "electron_maxstep" "emaxpos" "eopreg" "esm_bc" "esm_efield" "esm_nfit" "esm_w" "etot_conv_thr" "exx_fraction" "exxdiv_treatment" "fcp_mu" "fixed_magnetization" "forc_conv_thr" "force_symmorphic" "gate" "gdir" "Hubbard_alpha" "Hubbard_beta" "Hubbard_J" "Hubbard_J0" "Hubbard_U" "ibrav" "input_dft" "ion_dynamics" "ion_positions" "ion_temperature" "iprint" "lambda" "lberry" "lda_plus_u" "lda_plus_u_kind" "lelfield" "lfcpopt" "lforcet" "lkpoint_dir" "localization_thr" "london" "london_c6" "london_rcut" "london_rvdw" "london_s6" "lorbm" "lspinorb" "max_seconds" "mixing_beta" "mixing_fixed_ns" "mixing_mode" "mixing_ndim" "nat" "nberrycyc" "nbnd" "no_t_rev" "noinv" "noncolin" "nosym" "nosym_evc" "nppstr" "nqx1" "nqx2" "nqx3" "nr1" "nr1s" "nr2" "nr2s" "nr3" "nr3s" "nraise" "nspin" "nstep" "ntyp" "occupations" "one_atom_occupations" "origin_choice" "ortho_para" "outdir" "pot_extrapolation" "prefix" "press" "press_conv_thr" "pseudo_dir" "q2sigma" "qcutz" "real_space" "refold_pos" "relaxz" "remove_rigid_rot" "report" "restart_mode" "rhombohedral" "scf_must_converge" "screening_parameter" "smearing" "space_group" "starting_charge" "starting_magnetization" "starting_ns_eigenvalue" "starting_spin_angle" "startingpot" "startingwfc" "tefield" "tempw" "title" "tolp" "tot_charge" "tot_magnetization" "tprnfor" "tqr" "trust_radius_ini" "trust_radius_max" "trust_radius_min" "ts_vdw_econv_thr" "ts_vdw_isolated" "tstress" "U_projection_type" "uniqueb" "upscale" "use_all_frac" "vdw_corr" "verbosity" "w_1" "w_2" "wf_collect" "wfc_extrapolation" "wfcdir" "wmass" "x_gamma_extrapolation" "xdm" "xdm_a1" "xdm_a2" "zgate" ))
|
||||||
|
|
||||||
|
;; pw's cards & keywords
|
||||||
|
(defvar pw-cards (list "ATOMIC_FORCES" "ATOMIC_POSITIONS" "ATOMIC_SPECIES" "CELL_PARAMETERS" "CONSTRAINTS" "K_POINTS" "OCCUPATIONS" ))
|
||||||
|
|
||||||
|
;; pw's flags
|
||||||
|
(defvar pw-flags (list "alat" "angstrom" "automatic" "bohr" "crystal" "crystal_b" "crystal_c" "crystal_sg" "gamma" "tpiba" "tpiba_b" "tpiba_c" ))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; derived variables
|
||||||
|
|
||||||
|
(defvar pw-open-supercards-regexp (regexp-opt pw-open-supercards 'symbols)) ; may not exists
|
||||||
|
(defvar pw-closed-supercards-regexp (regexp-opt pw-closed-supercards 'symbols)) ; may not exists
|
||||||
|
|
||||||
|
(defvar pw-cards-regexp (regexp-opt
|
||||||
|
(append pw-cards pw-open-supercards) 'symbols))
|
||||||
|
(defvar pw-flags-regexp (regexp-opt pw-flags 'symbols))
|
||||||
|
|
||||||
|
(defvar pw-namelist-face (cons (regexp-opt (append pw-namelists qe-end-namelist) 'symbols) font-lock-function-name-face))
|
||||||
|
(defvar pw-variable-face (cons (regexp-opt pw-vars 'symbols) font-lock-variable-name-face))
|
||||||
|
|
||||||
|
;; logical values as constants
|
||||||
|
(defvar qe-logic-face (cons (regexp-opt (list ".t." ".true." ".f." ".false.")) font-lock-constant-face))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; regexp for indentation
|
||||||
|
(defvar pw-decr-indent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
(defvar pw-decr-indent-re (concat "^[ \t]*" (regexp-opt
|
||||||
|
(append pw-cards pw-open-supercards pw-closed-supercards) t)))
|
||||||
|
;;
|
||||||
|
(defvar pw-deindent-fold-t-re (concat "^[ \t]*" (regexp-opt qe-end-namelist t)))
|
||||||
|
;;
|
||||||
|
(defvar pw-indent-fold-t-re (concat "^[ \t]*" (regexp-opt pw-namelists t)))
|
||||||
|
(defvar pw-indent-re (concat "^[ \t]*" (regexp-opt pw-cards t)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; supercards, cards and flags are case sensitive -- here are the corresponding matchers
|
||||||
|
|
||||||
|
(defun pw-closed-supercards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pw-closed-supercards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun pw-cards-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pw-cards-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
(defun pw-flags-matcher (limit)
|
||||||
|
(let ((case-fold-search nil))
|
||||||
|
(re-search-forward pw-flags-regexp limit 'no-error)))
|
||||||
|
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'pw-mode (list
|
||||||
|
pw-namelist-face
|
||||||
|
pw-variable-face
|
||||||
|
qe-logic-face
|
||||||
|
'("," . font-lock-builtin-face)
|
||||||
|
'("(" . font-lock-builtin-face)
|
||||||
|
'(")" . font-lock-builtin-face)
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; register the keywords
|
||||||
|
|
||||||
|
(font-lock-add-keywords 'pw-mode '(
|
||||||
|
(pw-closed-supercards-matcher 1 font-lock-preprocessor-face t)
|
||||||
|
(pw-cards-matcher 1 font-lock-keyword-face t)
|
||||||
|
(pw-flags-matcher 1 font-lock-type-face t)
|
||||||
|
))
|
||||||
|
|
||||||
|
;;(defvar pw-keywords '(pw-namelist-face pw-variable-face))
|
||||||
|
(defvar pw-keywords '(((list "") . font-lock-constant-face)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the sytnax of strings
|
||||||
|
|
||||||
|
(defvar pw-mode-syntax-table
|
||||||
|
(let ((table (make-syntax-table)))
|
||||||
|
(modify-syntax-entry ?\' "\"'" table)
|
||||||
|
(modify-syntax-entry ?\" "\"\"" table)
|
||||||
|
table)
|
||||||
|
"Syntax table in use in `pw-mode' buffers.")
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; code for auto-indenting
|
||||||
|
|
||||||
|
(defvar qe-indent 3)
|
||||||
|
(defun pw-indent-line ()
|
||||||
|
"Indent current line according to pw input syntax."
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-line)
|
||||||
|
(if (bobp)
|
||||||
|
(indent-line-to 0) ; First line indented to column 0
|
||||||
|
(let ((not-indented t) cur-indent)
|
||||||
|
(if (or (looking-at pw-decr-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at pw-decr-indent-re))) ; If the line we are looking at is the end of a block, then decrease the indentation
|
||||||
|
(progn
|
||||||
|
(save-excursion
|
||||||
|
(forward-line -1)
|
||||||
|
(setq cur-indent (- (current-indentation) qe-indent)))
|
||||||
|
(if (< cur-indent 0) ; We can't indent past the left margin
|
||||||
|
(setq cur-indent 0)))
|
||||||
|
(save-excursion
|
||||||
|
(while not-indented ; Iterate backwards until we find an indentation hint
|
||||||
|
(forward-line -1)
|
||||||
|
(if (looking-at pw-deindent-fold-t-re) ; This hint indicates that we need to indent at the level of the "/" token
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (current-indentation))
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (or (looking-at pw-indent-fold-t-re)
|
||||||
|
(let ((case-fold-search nil)) (looking-at pw-indent-re))) ; This hint indicates that we need to indent an extra level
|
||||||
|
(progn
|
||||||
|
(setq cur-indent (+ (current-indentation) qe-indent)) ; Do the actual indenting
|
||||||
|
(setq not-indented nil))
|
||||||
|
(if (bobp)
|
||||||
|
(setq not-indented nil)))))))
|
||||||
|
(if cur-indent
|
||||||
|
(indent-line-to cur-indent)
|
||||||
|
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; define the pw-mode as derived-mode
|
||||||
|
|
||||||
|
(define-derived-mode pw-mode prog-mode
|
||||||
|
"QE-pw.x"
|
||||||
|
"Major mode for editing Qunatum-ESPRESSO input files (QE-pw.x mode)"
|
||||||
|
(setq font-lock-defaults '((pw-keywords) nil t))
|
||||||
|
(set (make-local-variable 'indent-line-function) 'pw-indent-line)
|
||||||
|
|
||||||
|
;; define the syntax of comments
|
||||||
|
(setq comment-start "!")
|
||||||
|
(setq comment-end "")
|
||||||
|
(modify-syntax-entry ?! "< b" pw-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?\n "> b" pw-mode-syntax-table)
|
||||||
|
(modify-syntax-entry ?= " " pw-mode-syntax-table) ;; treat "=" non symbol constituent
|
||||||
|
;; end
|
||||||
|
)
|
||||||
|
|
||||||
|
;; free memory
|
||||||
|
|
||||||
|
(setq pw-namelists nil)
|
||||||
|
(setq pw-vars nil)
|
||||||
|
(setq pw-cards nil)
|
||||||
|
(setq pw-flags nil)
|
||||||
|
(setq pw-open-supercards nil)
|
||||||
|
(setq pw-closed-supercards nil)
|
||||||
|
|
||||||
|
|
||||||
|
(require 'qe-funcs)
|
||||||
|
|
||||||
|
(provide 'pw-mode)
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,99 @@
|
||||||
|
;; qe-modes.el
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2016 Quantum ESPRESSO group
|
||||||
|
;; This file is distributed under the terms of the
|
||||||
|
;; GNU General Public License. See the file `License'
|
||||||
|
;; in the root directory of the present distribution,
|
||||||
|
;; or http://www.gnu.org/copyleft/gpl.txt .
|
||||||
|
;;
|
||||||
|
;; Author: Anton Kokalj (tone.kokalj at ijs.si)
|
||||||
|
;;
|
||||||
|
;; Acknowledgments:
|
||||||
|
;;
|
||||||
|
;; The implementation of qe-modes package was made possible by several
|
||||||
|
;; useful and helpful resources that are gratefully acknowledged, in
|
||||||
|
;; particular: "Mode Tutorial" of Scott Andrew Borton
|
||||||
|
;; (https://www.emacswiki.org/emacs/ModeTutorial, for indentation
|
||||||
|
;; code), "Derived Mode" and "Sample Mode" pages
|
||||||
|
;; (https://www.emacswiki.org/emacs/DerivedMode,
|
||||||
|
;; https://www.emacswiki.org/emacs/SampleMode) as well as the very
|
||||||
|
;; useful resources of Xah Lee
|
||||||
|
;; (http://ergoemacs.org/emacs/elisp_syntax_coloring.html). Last but
|
||||||
|
;; not the least Sebastijan Peljhan is acknowledged for his work on
|
||||||
|
;; `xsf-mode' that inspired the idea of writing the qe-modes.
|
||||||
|
|
||||||
|
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This program is free software; you can redistribute it and/or modify
|
||||||
|
;; it under the terms of the GNU General Public License as published by
|
||||||
|
;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
;; any later version.
|
||||||
|
;;
|
||||||
|
;; This lisp script is distributed in the hope that it will be useful,
|
||||||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
;;
|
||||||
|
;; Permission is granted to distribute copies of this lisp script
|
||||||
|
;; provided the copyright notice and this permission are preserved in
|
||||||
|
;; all copies.
|
||||||
|
;;
|
||||||
|
;; You should have received a copy of the GNU General Public License
|
||||||
|
;; along with this program; if not, you can either send email to this
|
||||||
|
;; program's maintainer or write to: The Free Software Foundation,
|
||||||
|
;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; send bug reports to the author (tone.kokalj at ijs.si)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This is the master `qe-modes.el' file, which loads various Quantum
|
||||||
|
;; ESPRESSO major modes. Add the following into your user-init-file
|
||||||
|
;; (e.g. ~/.emacs):
|
||||||
|
;;
|
||||||
|
;; (add-to-list 'load-path "/directory/of/your/qe-modes/")
|
||||||
|
;; (require 'qe-modes)
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;
|
||||||
|
;; load generic Quantum ESPRESSO mode: it knows all QE namelists, cards, etc.
|
||||||
|
;;
|
||||||
|
(autoload 'qe-mode' "qe-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO input files" t)
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;
|
||||||
|
;; load specific modes: each knows only its own namelists, cards, etc.
|
||||||
|
;;
|
||||||
|
|
||||||
|
(autoload 'pw-mode' "pw-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO pw.x input files" t)
|
||||||
|
|
||||||
|
(autoload 'cp-mode' "cp-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO cp.x input files" t)
|
||||||
|
|
||||||
|
(autoload 'pp-mode' "pp-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO pp.x input files" t)
|
||||||
|
|
||||||
|
(autoload 'ld1-mode' "ld1-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO ld1.x input files" t)
|
||||||
|
|
||||||
|
(autoload 'neb-mode' "neb-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO neb.x input files" t)
|
||||||
|
|
||||||
|
(autoload 'ph-mode' "ph-mode.elc"
|
||||||
|
"Major mode for editing Quantum ESPRESSO ph.x input files" t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(provide 'qe-modes)
|
||||||
|
|
Binary file not shown.
|
@ -46,7 +46,7 @@
|
||||||
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
<tr><th style="margin: 3 3 3 10; background: #005789; background: linear-gradient(rgba(0,87,137,1),rgba(0,119,189,1)); color: #ffffee; ">
|
||||||
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
<h1 style="margin: 10 10 10 15; text-align: left;"> Input File Description </h1>
|
||||||
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
<h2 style="margin: 10 10 10 15; text-align: left;"> Program:
|
||||||
hp.x / PWscf / Quantum Espresso<span style="font-weight: normal;"> (version: git)</span>
|
hp.x / PWscf / Quantum Espresso<span style="font-weight: normal;"> (version: 6.4)</span>
|
||||||
</h2>
|
</h2>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||||
|
@ -55,15 +55,15 @@
|
||||||
<blockquote>
|
<blockquote>
|
||||||
|
|
||||||
|
|
||||||
<p><a href="#idm6454080">INTRODUCTION</a></p>
|
<p><a href="#idm3">INTRODUCTION</a></p>
|
||||||
<p><a href="#idm6435680">&INPUTHP</a></p>
|
<p><a href="#idm8">&INPUTHP</a></p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a href="#idm6435152">prefix</a> | <a href="#idm6433200">outdir</a> | <a href="#idm6430448">iverbosity</a> | <a href="#idm6428352">max_seconds</a> | <a href="#idm6426048">nq1</a> | <a href="#idm6425424">nq2</a> | <a href="#idm6424752">nq3</a> | <a href="#idm6423072">skip_equivalence_q</a> | <a href="#idm6421056">determine_num_pert_only</a> | <a href="#idm6418752">find_atpert</a> | <a href="#idm6416352">docc_thr</a> | <a href="#idm6414432">skip_type</a> | <a href="#idm6411856">equiv_type</a> | <a href="#idm6409440">perturb_only_atom</a> | <a href="#idm6407024">start_q</a> | <a href="#idm6404704">last_q</a> | <a href="#idm6402368">sum_pertq</a> | <a href="#idm6399968">compute_hp</a> | <a href="#idm6397328">conv_thr_chi</a> | <a href="#idm6395456">thresh_init</a> | <a href="#idm6393472">ethr_nscf</a> | <a href="#idm6391504">niter_max</a> | <a href="#idm6389648">alpha_mix(i)</a> | <a href="#idm6386944">nmix</a>
|
<a href="#idm9">prefix</a> | <a href="#idm12">outdir</a> | <a href="#idm17">iverbosity</a> | <a href="#idm20">max_seconds</a> | <a href="#idm24">nq1</a> | <a href="#idm25">nq2</a> | <a href="#idm26">nq3</a> | <a href="#idm29">skip_equivalence_q</a> | <a href="#idm32">determine_num_pert_only</a> | <a href="#idm36">find_atpert</a> | <a href="#idm39">docc_thr</a> | <a href="#idm42">skip_type</a> | <a href="#idm46">equiv_type</a> | <a href="#idm50">perturb_only_atom</a> | <a href="#idm54">start_q</a> | <a href="#idm58">last_q</a> | <a href="#idm62">sum_pertq</a> | <a href="#idm66">compute_hp</a> | <a href="#idm70">conv_thr_chi</a> | <a href="#idm73">thresh_init</a> | <a href="#idm76">ethr_nscf</a> | <a href="#idm79">niter_max</a> | <a href="#idm82">alpha_mix(i)</a> | <a href="#idm86">nmix</a>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a name="idm6454080"></a><h3>INTRODUCTION</h3>
|
<a name="idm3"></a><h3>INTRODUCTION</h3>
|
||||||
<blockquote><pre>
|
<blockquote><pre>
|
||||||
<b>Input data format:</b> { } = optional, [ ] = it depends, # = comment
|
<b>Input data format:</b> { } = optional, [ ] = it depends, # = comment
|
||||||
|
|
||||||
|
@ -75,11 +75,11 @@
|
||||||
<b>/</b>
|
<b>/</b>
|
||||||
</pre></blockquote>
|
</pre></blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<a name="idm6435680"></a><a name="INPUTHP"></a><table border="0" width="100%" style="margin-bottom: 20;">
|
<a name="idm8"></a><a name="INPUTHP"></a><table border="0" width="100%" style="margin-bottom: 20;">
|
||||||
<tr><th bgcolor="#ddcba6"><h2 style="margin: 10 10 10 15; text-align: left;"> Namelist: <span class="namelist"><span style="font-weight:normal">&</span>INPUTHP</span>
|
<tr><th bgcolor="#ddcba6"><h2 style="margin: 10 10 10 15; text-align: left;"> Namelist: <span class="namelist"><span style="font-weight:normal">&</span>INPUTHP</span>
|
||||||
</h2></th></tr>
|
</h2></th></tr>
|
||||||
<tr><td style="text-align: left; background: #ffebc6; padding: 5 5 5 30; "><table style="border-color: #505087; border-style: solid; border-width: 0; margin-bottom: 10; table-layout: auto; width: 800;"><tbody><tr><td>
|
<tr><td style="text-align: left; background: #ffebc6; padding: 5 5 5 30; "><table style="border-color: #505087; border-style: solid; border-width: 0; margin-bottom: 10; table-layout: auto; width: 800;"><tbody><tr><td>
|
||||||
<a name="idm6435152"></a><a name="prefix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm9"></a><a name="prefix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">prefix</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">prefix</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">CHARACTER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">CHARACTER</td>
|
||||||
|
@ -95,7 +95,7 @@ used in the calculation of unperturbed system.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6433200"></a><a name="outdir"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm12"></a><a name="outdir"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">outdir</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">outdir</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">CHARACTER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">CHARACTER</td>
|
||||||
|
@ -114,7 +114,7 @@ the unperturbed system.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6430448"></a><a name="iverbosity"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm17"></a><a name="iverbosity"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">iverbosity</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">iverbosity</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -136,7 +136,7 @@ the unperturbed system.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6428352"></a><a name="max_seconds"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm20"></a><a name="max_seconds"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">max_seconds</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">max_seconds</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -154,7 +154,7 @@ Maximum allowed run time before the job stops smoothly.
|
||||||
<table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="white-space: nowrap; background: #ffff99; padding: 2 2 2 10; ">
|
<th align="left" valign="top" width="20%" style="white-space: nowrap; background: #ffff99; padding: 2 2 2 10; ">
|
||||||
<a name="idm6426048"></a><a name="nq1"></a>nq1, <a name="idm6425424"></a><a name="nq2"></a>nq2, <a name="idm6424752"></a><a name="nq3"></a>nq3</th>
|
<a name="idm24"></a><a name="nq1"></a>nq1, <a name="idm25"></a><a name="nq2"></a>nq2, <a name="idm26"></a><a name="nq3"></a>nq3</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -168,7 +168,7 @@ Same meaning as for nk1, nk2, nk3 in the input of pw.x.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6423072"></a><a name="skip_equivalence_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm29"></a><a name="skip_equivalence_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">skip_equivalence_q</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">skip_equivalence_q</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -187,7 +187,7 @@ calculations only for inequivalent q points.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6421056"></a><a name="determine_num_pert_only"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm32"></a><a name="determine_num_pert_only"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">determine_num_pert_only</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">determine_num_pert_only</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -208,7 +208,7 @@ without performing any calculation.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6418752"></a><a name="find_atpert"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm36"></a><a name="find_atpert"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">find_atpert</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">find_atpert</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -235,7 +235,7 @@ Method for searching of atoms which must be perturbed.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6416352"></a><a name="docc_thr"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm39"></a><a name="docc_thr"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">docc_thr</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">docc_thr</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -252,7 +252,7 @@ be perturbed. Can be used only when find_atpert = 1.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6414432"></a><a name="skip_type"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm42"></a><a name="skip_type"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">skip_type</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">skip_type</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -278,7 +278,7 @@ This keyword cannot be used when find_atpert = 1.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6411856"></a><a name="equiv_type"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm46"></a><a name="equiv_type"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">equiv_type</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">equiv_type</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -301,7 +301,7 @@ This keyword cannot be used when find_atpert = 1.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6409440"></a><a name="perturb_only_atom"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm50"></a><a name="perturb_only_atom"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">perturb_only_atom</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">perturb_only_atom</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -324,7 +324,7 @@ has a higher priority than skip_type.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6407024"></a><a name="start_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm54"></a><a name="start_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">start_q</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">start_q</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -347,7 +347,7 @@ the total number of q points found.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6404704"></a><a name="last_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm58"></a><a name="last_q"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">last_q</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">last_q</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -370,7 +370,7 @@ the total number of q points found.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6402368"></a><a name="sum_pertq"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm62"></a><a name="sum_pertq"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">sum_pertq</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">sum_pertq</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -394,7 +394,7 @@ start_q, last_q and perturb_only_atom are used.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6399968"></a><a name="compute_hp"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm66"></a><a name="compute_hp"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">compute_hp</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">compute_hp</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">LOGICAL</td>
|
||||||
|
@ -421,7 +421,7 @@ calculation was parallelized over perturbations.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6397328"></a><a name="conv_thr_chi"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm70"></a><a name="conv_thr_chi"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">conv_thr_chi</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">conv_thr_chi</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -438,7 +438,7 @@ occupation matrix.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6395456"></a><a name="thresh_init"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm73"></a><a name="thresh_init"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">thresh_init</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">thresh_init</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -457,7 +457,7 @@ number of electrons in the system.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6393472"></a><a name="ethr_nscf"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm76"></a><a name="ethr_nscf"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">ethr_nscf</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">ethr_nscf</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -475,7 +475,7 @@ k and k+q points. Note, this quantity is NOT extensive.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6391504"></a><a name="niter_max"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm79"></a><a name="niter_max"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">niter_max</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">niter_max</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -491,7 +491,7 @@ solution of the linear-response Kohn-Sham equations.
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6389648"></a><a name="alpha_mix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm82"></a><a name="alpha_mix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">alpha_mix(i)</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">alpha_mix(i)</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">REAL</td>
|
||||||
|
@ -508,7 +508,7 @@ method: D.D. Johnson, <a href="https://journals.aps.org/prb/abstract/10.1103/Phy
|
||||||
</pre></blockquote></td></tr>
|
</pre></blockquote></td></tr>
|
||||||
</table>
|
</table>
|
||||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||||
<a name="idm6386944"></a><a name="nmix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
<a name="idm86"></a><a name="nmix"></a><table width="100%" style="border-color: #b5b500; border-style: solid; border-width: 2; margin-bottom: 10; table-layout: auto; background-color: #FFFFFF;">
|
||||||
<tr>
|
<tr>
|
||||||
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">nmix</th>
|
<th align="left" valign="top" width="20%" style="background: #ffff99; padding: 2 2 2 10; ">nmix</th>
|
||||||
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
<td style="text-align: left; vertical-align: top; background: #ffffc3; padding: 2 2 2 5; ">INTEGER</td>
|
||||||
|
@ -530,7 +530,7 @@ D.D. Johnson, <a href="https://journals.aps.org/prb/abstract/10.1103/PhysRevB.38
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<small>
|
<small>
|
||||||
This file has been created by helpdoc utility on Fri Sep 07 12:30:30 CEST 2018.
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:48 CET 2019.
|
||||||
</small>
|
</small>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
INPUT FILE DESCRIPTION
|
INPUT FILE DESCRIPTION
|
||||||
|
|
||||||
Program: hp.x / PWscf / Quantum Espresso (version: git)
|
Program: hp.x / PWscf / Quantum Espresso (version: 6.4)
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -284,4 +284,4 @@ NAMELIST: &INPUTHP
|
||||||
===END OF NAMELIST======================================================
|
===END OF NAMELIST======================================================
|
||||||
|
|
||||||
|
|
||||||
This file has been created by helpdoc utility on Fri Sep 07 12:30:30 CEST 2018
|
This file has been created by helpdoc utility on Fri Mar 01 17:56:48 CET 2019
|
||||||
|
|
|
@ -25,7 +25,7 @@ subroutine hp_check_type(na)
|
||||||
!
|
!
|
||||||
USE ions_base, ONLY : ityp, nat, ntyp => nsp, tau
|
USE ions_base, ONLY : ityp, nat, ntyp => nsp, tau
|
||||||
USE io_global, ONLY : stdout
|
USE io_global, ONLY : stdout
|
||||||
USE symm_base, ONLY : nsym, set_sym
|
USE symm_base, ONLY : nsym, set_sym, ft
|
||||||
USE noncollin_module, ONLY : nspin_mag, m_loc
|
USE noncollin_module, ONLY : nspin_mag, m_loc
|
||||||
USE fft_base, ONLY : dfftp
|
USE fft_base, ONLY : dfftp
|
||||||
USE ldaU_hp, ONLY : recalc_sym
|
USE ldaU_hp, ONLY : recalc_sym
|
||||||
|
@ -35,7 +35,7 @@ subroutine hp_check_type(na)
|
||||||
INTEGER, INTENT(IN) :: na ! the atom under consideration
|
INTEGER, INTENT(IN) :: na ! the atom under consideration
|
||||||
!
|
!
|
||||||
INTEGER :: nt, ityp_save, nsym_old
|
INTEGER :: nt, ityp_save, nsym_old
|
||||||
INTEGER :: na_, nt_
|
INTEGER :: na_, nt_, isym
|
||||||
!
|
!
|
||||||
IF (nsym==1) RETURN
|
IF (nsym==1) RETURN
|
||||||
!
|
!
|
||||||
|
|
|
@ -83,6 +83,15 @@ SUBROUTINE hp_init_q()
|
||||||
!
|
!
|
||||||
ENDIF
|
ENDIF
|
||||||
!
|
!
|
||||||
|
! Read the wavefunctions evc (at k) and evq (at k+q).
|
||||||
|
! Note: this is important because if nksq=1 then evc and evq are read only
|
||||||
|
! once (here) and then used throughout the code. This may happen e.g.
|
||||||
|
! when the ratio of the total number of k points (without k+q) and k pools
|
||||||
|
! is not an integer number (as a consequence some k pools will have nksq=1).
|
||||||
|
!
|
||||||
|
CALL get_buffer (evc, lrwfc, iuwfc, ikk)
|
||||||
|
IF (.NOT.lgamma .AND. nksq.EQ.1) CALL get_buffer (evq, lrwfc, iuwfc, ikq)
|
||||||
|
!
|
||||||
! 2) USPP: Compute the becp terms which are used in the rest of the code
|
! 2) USPP: Compute the becp terms which are used in the rest of the code
|
||||||
!
|
!
|
||||||
IF (okvan) THEN
|
IF (okvan) THEN
|
||||||
|
@ -91,10 +100,6 @@ SUBROUTINE hp_init_q()
|
||||||
!
|
!
|
||||||
CALL init_us_2 (npw, igk_k(1,ikk), xk(1,ikk), vkb)
|
CALL init_us_2 (npw, igk_k(1,ikk), xk(1,ikk), vkb)
|
||||||
!
|
!
|
||||||
! Read the wavefunctions evc at k
|
|
||||||
!
|
|
||||||
CALL get_buffer (evc, lrwfc, iuwfc, ikk)
|
|
||||||
!
|
|
||||||
! becp1 = <vkb|evc>
|
! becp1 = <vkb|evc>
|
||||||
!
|
!
|
||||||
CALL calbec (npw, vkb, evc, becp1(ik))
|
CALL calbec (npw, vkb, evc, becp1(ik))
|
||||||
|
|
|
@ -55,7 +55,7 @@ SUBROUTINE hp_setup_q()
|
||||||
USE fft_base, ONLY : dfftp
|
USE fft_base, ONLY : dfftp
|
||||||
USE gvect, ONLY : ngm
|
USE gvect, ONLY : ngm
|
||||||
USE gvecs, ONLY : doublegrid
|
USE gvecs, ONLY : doublegrid
|
||||||
USE symm_base, ONLY : nrot, nsym, s, ftau, irt, time_reversal, &
|
USE symm_base, ONLY : nrot, nsym, s, ft, irt, time_reversal, &
|
||||||
inverse_s, d1, d2, d3
|
inverse_s, d1, d2, d3
|
||||||
USE uspp_param, ONLY : upf
|
USE uspp_param, ONLY : upf
|
||||||
USE uspp, ONLY : nlcc_any
|
USE uspp, ONLY : nlcc_any
|
||||||
|
@ -142,7 +142,7 @@ SUBROUTINE hp_setup_q()
|
||||||
! Check if there are fractional translations
|
! Check if there are fractional translations
|
||||||
! Note: Try to use PH/symmorphic_or_nzb ?
|
! Note: Try to use PH/symmorphic_or_nzb ?
|
||||||
!
|
!
|
||||||
is_symmorphic = .NOT.(ANY(ftau(:,1:nsymq) /= 0))
|
is_symmorphic = .NOT.( ANY( ABS( ft(:,1:nsymq) > 1.d-8 ) ) )
|
||||||
!
|
!
|
||||||
IF (skip_equivalence_q) THEN
|
IF (skip_equivalence_q) THEN
|
||||||
search_sym = .FALSE.
|
search_sym = .FALSE.
|
||||||
|
|
|
@ -23,7 +23,7 @@ SUBROUTINE hp_summary_q
|
||||||
USE gvecs, ONLY : doublegrid, dual, gcutms, ngms
|
USE gvecs, ONLY : doublegrid, dual, gcutms, ngms
|
||||||
USE gvecw, ONLY : ecutwfc
|
USE gvecw, ONLY : ecutwfc
|
||||||
USE fft_base, ONLY : dffts
|
USE fft_base, ONLY : dffts
|
||||||
USE symm_base, ONLY : s, sr, ftau, sname
|
USE symm_base, ONLY : s, sr, ft, sname
|
||||||
USE funct, ONLY : write_dft_name
|
USE funct, ONLY : write_dft_name
|
||||||
USE control_flags, ONLY : iverbosity
|
USE control_flags, ONLY : iverbosity
|
||||||
USE lr_symm_base, ONLY : irotmq, minus_q, nsymq
|
USE lr_symm_base, ONLY : irotmq, minus_q, nsymq
|
||||||
|
@ -82,24 +82,24 @@ SUBROUTINE hp_summary_q
|
||||||
!
|
!
|
||||||
WRITE( stdout, '(/5x,"isym = ",i2,5x,a45/)') isymq, sname (isym)
|
WRITE( stdout, '(/5x,"isym = ",i2,5x,a45/)') isymq, sname (isym)
|
||||||
!
|
!
|
||||||
IF (ftau(1,isym).NE.0 .OR. ftau(2,isym).NE.0 .OR. ftau(3,isym).NE.0) THEN
|
IF ( ft(1,isym)**2 + ft(2,isym)**2 + ft(3,isym)**2 > 1.0d-8 ) THEN
|
||||||
!
|
!
|
||||||
ft1 = at (1, 1) * ftau (1, isym) / dfftp%nr1 + &
|
ft1 = at (1, 1) * ft(1, isym) + &
|
||||||
at (1, 2) * ftau (2, isym) / dfftp%nr2 + &
|
at (1, 2) * ft(2, isym) + &
|
||||||
at (1, 3) * ftau (3, isym) / dfftp%nr3
|
at (1, 3) * ft(3, isym)
|
||||||
ft2 = at (2, 1) * ftau (1, isym) / dfftp%nr1 + &
|
ft2 = at (2, 1) * ft(1, isym) + &
|
||||||
at (2, 2) * ftau (2, isym) / dfftp%nr2 + &
|
at (2, 2) * ft(2, isym) + &
|
||||||
at (2, 3) * ftau (3, isym) / dfftp%nr3
|
at (2, 3) * ft(3, isym)
|
||||||
ft3 = at (3, 1) * ftau (1, isym) / dfftp%nr1 + &
|
ft3 = at (3, 1) * ft(1, isym) + &
|
||||||
at (3, 2) * ftau (2, isym) / dfftp%nr2 + &
|
at (3, 2) * ft(2, isym) + &
|
||||||
at (3, 3) * ftau (3, isym) / dfftp%nr3
|
at (3, 3) * ft(3, isym)
|
||||||
!
|
!
|
||||||
WRITE( stdout, '(5x,"cryst.",3x,"s(",i2,") = (",3(i6,5x)," ) f =( ",f10.7," )")') &
|
WRITE( stdout, '(5x,"cryst.",3x,"s(",i2,") = (",3(i6,5x)," ) f =( ",f10.7," )")') &
|
||||||
& isymq, (s(1,ipol,isym), ipol=1,3), DBLE(ftau(1,isym)) / DBLE(dfftp%nr1)
|
& isymq, (s(1,ipol,isym), ipol=1,3), ft(1,isym)
|
||||||
WRITE( stdout, '(21x," (",3(i6,5x), " ) ( ",f10.7," )")') &
|
WRITE( stdout, '(21x," (",3(i6,5x), " ) ( ",f10.7," )")') &
|
||||||
& (s(2,ipol,isym), ipol=1,3), DBLE(ftau(2,isym)) / DBLE(dfftp%nr2)
|
& (s(2,ipol,isym), ipol=1,3), ft(2,isym)
|
||||||
WRITE( stdout, '(21x," (",3(i6,5x)," ) ( ",f10.7," )"/)') &
|
WRITE( stdout, '(21x," (",3(i6,5x)," ) ( ",f10.7," )"/)') &
|
||||||
& (s(3,ipol,isym), ipol=1,3), DBLE(ftau(3,isym)) / DBLE(dfftp%nr3)
|
& (s(3,ipol,isym), ipol=1,3), ft(3,isym)
|
||||||
WRITE( stdout, '(5x,"cart.",4x,"s(",i2,") = (",3f11.7, " ) f =( ",f10.7," )")') &
|
WRITE( stdout, '(5x,"cart.",4x,"s(",i2,") = (",3f11.7, " ) f =( ",f10.7," )")') &
|
||||||
& isymq, (sr(1,ipol,isym), ipol=1,3), ft1
|
& isymq, (sr(1,ipol,isym), ipol=1,3), ft1
|
||||||
WRITE( stdout, '(21x," (",3f11.7, " ) ( ",f10.7," )")') &
|
WRITE( stdout, '(21x," (",3f11.7, " ) ( ",f10.7," )")') &
|
||||||
|
|
|
@ -16,7 +16,7 @@ SUBROUTINE hp_symdvscf (dvtosym)
|
||||||
USE constants, ONLY : tpi
|
USE constants, ONLY : tpi
|
||||||
USE fft_base, ONLY : dfftp
|
USE fft_base, ONLY : dfftp
|
||||||
USE cell_base, ONLY : at
|
USE cell_base, ONLY : at
|
||||||
USE symm_base, ONLY : s, ftau
|
USE symm_base, ONLY : s, ft
|
||||||
USE noncollin_module, ONLY : nspin_lsda, nspin_mag
|
USE noncollin_module, ONLY : nspin_lsda, nspin_mag
|
||||||
USE ions_base, ONLY : tau
|
USE ions_base, ONLY : tau
|
||||||
USE qpoint, ONLY : xq
|
USE qpoint, ONLY : xq
|
||||||
|
@ -27,9 +27,10 @@ SUBROUTINE hp_symdvscf (dvtosym)
|
||||||
|
|
||||||
complex(DP) :: dvtosym (dfftp%nr1x, dfftp%nr2x, dfftp%nr3x, nspin_mag)
|
complex(DP) :: dvtosym (dfftp%nr1x, dfftp%nr2x, dfftp%nr3x, nspin_mag)
|
||||||
! the potential to be symmetrized
|
! the potential to be symmetrized
|
||||||
|
integer :: ftau(3,48)
|
||||||
integer :: is, ri, rj, rk, i, j, k, ipol, isym, irot
|
integer :: is, ri, rj, rk, i, j, k, ipol, isym, irot
|
||||||
! counters
|
! counters
|
||||||
real(DP) :: gf(3), gf2, n(3), ft(3)
|
real(DP) :: gf(3), gf2, n(3)
|
||||||
! temp variables
|
! temp variables
|
||||||
complex(DP), allocatable :: dvsym (:,:,:)
|
complex(DP), allocatable :: dvsym (:,:,:)
|
||||||
! the symmetrized potential
|
! the symmetrized potential
|
||||||
|
@ -48,6 +49,10 @@ SUBROUTINE hp_symdvscf (dvtosym)
|
||||||
n(2) = tpi / DBLE(dfftp%nr2)
|
n(2) = tpi / DBLE(dfftp%nr2)
|
||||||
n(3) = tpi / DBLE(dfftp%nr3)
|
n(3) = tpi / DBLE(dfftp%nr3)
|
||||||
!
|
!
|
||||||
|
ftau(1,1:nsymq) = NINT ( ft(1,1:nsymq)*dfftp%nr1 )
|
||||||
|
ftau(2,1:nsymq) = NINT ( ft(2,1:nsymq)*dfftp%nr2 )
|
||||||
|
ftau(3,1:nsymq) = NINT ( ft(3,1:nsymq)*dfftp%nr3 )
|
||||||
|
!
|
||||||
! Symmetrize with -q if present (Sq = -q + G)
|
! Symmetrize with -q if present (Sq = -q + G)
|
||||||
!
|
!
|
||||||
IF (minus_q) THEN
|
IF (minus_q) THEN
|
||||||
|
|
|
@ -24,12 +24,4 @@ libcg.a: $(CG)
|
||||||
clean :
|
clean :
|
||||||
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
||||||
|
|
||||||
# .PHONY forces execution of a rule irrespective of the presence of an
|
|
||||||
# updated file with the same name of the rule. In this way, the script
|
|
||||||
# that generates version.f90 always runs, updating the version if you
|
|
||||||
# execute "svn update". The update_version script takes care of not
|
|
||||||
# changing the file if the svn version did not change
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
include make.depend
|
include make.depend
|
||||||
|
|
|
@ -22,12 +22,4 @@ libdavid.a: $(DAVID)
|
||||||
clean :
|
clean :
|
||||||
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
||||||
|
|
||||||
# .PHONY forces execution of a rule irrespective of the presence of an
|
|
||||||
# updated file with the same name of the rule. In this way, the script
|
|
||||||
# that generates version.f90 always runs, updating the version if you
|
|
||||||
# execute "svn update". The update_version script takes care of not
|
|
||||||
# changing the file if the svn version did not change
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
include make.depend
|
include make.depend
|
||||||
|
|
|
@ -18,12 +18,4 @@ libdavid_rci.a: $(DAVID_RCI)
|
||||||
clean :
|
clean :
|
||||||
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
||||||
|
|
||||||
# .PHONY forces execution of a rule irrespective of the presence of an
|
|
||||||
# updated file with the same name of the rule. In this way, the script
|
|
||||||
# that generates version.f90 always runs, updating the version if you
|
|
||||||
# execute "svn update". The update_version script takes care of not
|
|
||||||
# changing the file if the svn version did not change
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
include make.depend
|
include make.depend
|
||||||
|
|
|
@ -20,12 +20,4 @@ libppcg.a: $(PPCG)
|
||||||
clean :
|
clean :
|
||||||
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
- /bin/rm -f *.o *.a *.d *.i *~ *_tmp.f90 *.mod *.L *.x
|
||||||
|
|
||||||
# .PHONY forces execution of a rule irrespective of the presence of an
|
|
||||||
# updated file with the same name of the rule. In this way, the script
|
|
||||||
# that generates version.f90 always runs, updating the version if you
|
|
||||||
# execute "svn update". The update_version script takes care of not
|
|
||||||
# changing the file if the svn version did not change
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
|
|
||||||
include make.depend
|
include make.depend
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue