mirror of https://gitlab.com/QEF/q-e.git
Merge develop' into Master for qe-7.3.1
This commit is contained in:
commit
348fb2fc70
|
@ -2,9 +2,10 @@ include: '.gitlab-ci.yml'
|
|||
|
||||
build:pw:
|
||||
tags: [docker]
|
||||
image: ubuntu:18.04
|
||||
image: ubuntu:20.04
|
||||
script:
|
||||
- apt-get -qq update
|
||||
- DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
|
||||
- apt-get -qq install m4 make wget curl git gfortran gcc libopenblas-dev libfftw3-dev libopenmpi-dev
|
||||
- ./configure
|
||||
- make pw
|
||||
|
@ -16,9 +17,10 @@ build:pw:
|
|||
|
||||
build:cp:
|
||||
tags: [docker]
|
||||
image: ubuntu:18.04
|
||||
image: ubuntu:20.04
|
||||
script:
|
||||
- apt-get -qq update
|
||||
- DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
|
||||
- apt-get -qq install m4 make wget curl git gfortran gcc libopenblas-dev libfftw3-dev libopenmpi-dev
|
||||
- ./configure
|
||||
- make cp
|
||||
|
|
|
@ -29,3 +29,4 @@ build:pgi:
|
|||
- make pw cp ph
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
|
|||
set(CMAKE_POLICY_DEFAULT_CMP0048 NEW)
|
||||
|
||||
project(qe
|
||||
VERSION 7.3
|
||||
VERSION 7.3.1
|
||||
DESCRIPTION "ESPRESSO: opEn-Source Package for Research in Electronic Structure, Simulation, and Optimization"
|
||||
LANGUAGES Fortran C)
|
||||
|
||||
|
@ -158,10 +158,6 @@ option(QE_ENABLE_OSCDFT "enable OS-CDFT 10.1021/acs.jctc.9b00281" OFF)
|
|||
# least in C, not sure about Fortran), change all feature
|
||||
# macros to avoid weird behaviors
|
||||
|
||||
# Disable all configuration headers used to be generated
|
||||
# by configure (see <qe>/include/)
|
||||
qe_add_global_compile_definitions(QE_NO_CONFIG_H)
|
||||
|
||||
if(QE_ENABLE_CUDA)
|
||||
qe_add_global_compile_definitions(__CUDA)
|
||||
endif()
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
cp.x / CP / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
cp.x / CP / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: cp.x / CP / Quantum ESPRESSO (version: 7.3)
|
||||
Program: cp.x / CP / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
cppp.x / CP / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
cppp.x / CP / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: cppp.x / CP / Quantum ESPRESSO (version: 7.3)
|
||||
Program: cppp.x / CP / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
\begin{center}
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qeImage{../../Doc/quantum_espresso}
|
||||
|
||||
|
||||
|
|
|
@ -393,7 +393,7 @@
|
|||
! local variables
|
||||
!
|
||||
INTEGER :: iv, jv, ia, is, iss1, iss2, ir, ig, inl, jnl
|
||||
INTEGER :: igno, igrp, ierr, ii
|
||||
INTEGER :: igno, igrp, ierr, ii, cmax
|
||||
INTEGER :: idx, ioff
|
||||
REAL(DP) :: fi, fip, dd, dv
|
||||
REAL(DP) :: tmp1, tmp2
|
||||
|
@ -408,6 +408,7 @@
|
|||
REAL(DP), ALLOCATABLE, DEVICE :: exx_a(:), exx_b(:)
|
||||
REAL(DP), ALLOCATABLE, DEVICE :: exx_potential_d(:,:)
|
||||
INTEGER, DEVICE, POINTER :: nl_d(:), nlm_d(:)
|
||||
COMPLEX(DP), ALLOCATABLE :: psi_h(:), c_h(:,:)
|
||||
!
|
||||
CALL start_clock( 'dforce' )
|
||||
!
|
||||
|
@ -510,7 +511,50 @@
|
|||
|
||||
ENDDO
|
||||
|
||||
!
|
||||
! ... provisional (mgga contribution done on CPU)
|
||||
IF (xclib_dft_is('meta')) THEN
|
||||
df = df_d
|
||||
da = da_d
|
||||
ALLOCATE( psi_h(dffts%nnr*many_fft), c_h(size(c,1),2*many_fft) )
|
||||
psi_h = psi
|
||||
cmax = MIN(i+2*many_fft-1,size(c,2))
|
||||
c_h(:,1:cmax-i+1) = c(:,i:cmax)
|
||||
!
|
||||
igno = 0
|
||||
ioff = 0
|
||||
DO idx = 1, 2*many_fft, 2
|
||||
ii = i+idx-1
|
||||
IF( ii > n ) EXIT
|
||||
! HK/MCA : reset occupation numbers since omp private screws it up... need a better fix FIXME
|
||||
IF (tens) THEN
|
||||
fi = -0.5d0
|
||||
fip = -0.5d0
|
||||
ELSE
|
||||
fi = -0.5d0*f(ii)
|
||||
fip = -0.5d0*f(ii+1)
|
||||
ENDIF
|
||||
!
|
||||
IF( ii < n ) THEN
|
||||
iss1=ispin( ii )
|
||||
iss2=ispin( ii + 1 )
|
||||
ELSE IF( ii == n ) THEN
|
||||
iss1=ispin( ii )
|
||||
iss2=iss1
|
||||
ENDIF
|
||||
CALL dforce_meta( c_h(1,idx),c_h(1,idx+1),df(igno+1:igno+ngw), &
|
||||
da(igno+1:igno+ngw),psi_h(ioff+1:ioff+dffts%nnr), &
|
||||
iss1,iss2,fi,fip )
|
||||
igno = igno + ngw
|
||||
ioff = ioff + dffts%nnr
|
||||
ENDDO
|
||||
!
|
||||
df_d = df
|
||||
da_d = da
|
||||
!
|
||||
DEALLOCATE( psi_h, c_h )
|
||||
!
|
||||
END IF
|
||||
|
||||
|
||||
IF( nhsa > 0 ) THEN
|
||||
!
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
!
|
||||
! Copyright (C) 2002-2005 FPMD-CPV groups
|
||||
! Copyright (C) 2002-2024 Quantum ESPRESSO Foundation
|
||||
! 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,
|
||||
|
@ -9,7 +9,6 @@
|
|||
SUBROUTINE from_scratch( )
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE atomic_wfc_init, ONLY : atomic_wfc_cp
|
||||
USE control_flags, ONLY : tranp, trane, iverbosity, tpre, tv0rd, &
|
||||
tfor, thdyn, &
|
||||
lwf, tprnfor, tortho, amprp, ampre, &
|
||||
|
@ -23,7 +22,7 @@ SUBROUTINE from_scratch( )
|
|||
USE ions_nose, ONLY : xnhp0, xnhpm, vnhp, tempw
|
||||
USE cell_base, ONLY : ainv, h, s_to_r, ibrav, omega, press, &
|
||||
hold, r_to_s, deth, wmass, iforceh, &
|
||||
cell_force, velh, at, alat, tpiba
|
||||
cell_force, velh, at, alat
|
||||
USE cell_nose, ONLY : xnhh0, xnhhm, vnhh
|
||||
USE electrons_nose, ONLY : xnhe0, xnhem, vnhe
|
||||
use electrons_base, ONLY : nbsp, f, nspin, nupdwn, iupdwn, nbsp_bgrp, nbspx_bgrp, nbspx, nudx
|
||||
|
@ -49,7 +48,6 @@ SUBROUTINE from_scratch( )
|
|||
USE cp_interfaces, ONLY : nlfq_bgrp
|
||||
USE printout_base, ONLY : printout_pos
|
||||
USE orthogonalize_base, ONLY : updatc, calphi_bgrp
|
||||
USE upf_ions, ONLY : n_atom_wfc
|
||||
USE wave_base, ONLY : wave_steepest
|
||||
USE wavefunctions, ONLY : c0_bgrp, cm_bgrp, c0_d, phi, cm_d
|
||||
USE fft_base, ONLY : dfftp, dffts
|
||||
|
@ -63,7 +61,6 @@ SUBROUTINE from_scratch( )
|
|||
USE mp, ONLY : mp_sum, mp_barrier
|
||||
USE matrix_inversion
|
||||
USE device_memcpy_m, ONLY : dev_memcpy
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
|
||||
#if defined (__ENVIRON)
|
||||
USE plugin_flags, ONLY : use_environ
|
||||
|
@ -90,7 +87,7 @@ SUBROUTINE from_scratch( )
|
|||
INTEGER :: n_spin_start
|
||||
LOGICAL :: tfirst = .TRUE.
|
||||
REAL(DP) :: stress(3,3)
|
||||
INTEGER :: i1, i2, natomwfc
|
||||
INTEGER :: i1, i2
|
||||
!
|
||||
! ... Subroutine body
|
||||
!
|
||||
|
@ -147,13 +144,12 @@ SUBROUTINE from_scratch( )
|
|||
IF ( ionode ) &
|
||||
WRITE( stdout, fmt = '(//,3X, "Wave Initialization: random initial wave-functions" )' )
|
||||
|
||||
! if asked, use as much atomic wavefunctions as possible
|
||||
! if asked, use as many atomic wavefunctions as possible
|
||||
if ( trim(startingwfc) == 'atomic') then
|
||||
if ( ionode ) &
|
||||
WRITE (stdout, '("Using also atomic wavefunctions as much as possible")')
|
||||
natomwfc = n_atom_wfc ( nat, ityp )
|
||||
call atomic_wfc_cp(cm_bgrp, omega, tpiba, nat, nsp, ityp, tau0, natomwfc, &
|
||||
mill, eigts1, eigts2, eigts3, g, iupdwn, ngw, upf, nwfcm, nspin )
|
||||
CALL atomic_wfc_cp(omega, nat, nsp, ityp, tau0, iupdwn, nspin, &
|
||||
ngw, nbspx, cm_bgrp )
|
||||
endif
|
||||
|
||||
|
||||
|
@ -403,3 +399,65 @@ subroutine hangup
|
|||
call mp_barrier(world_comm)
|
||||
CALL stop_cp_run()
|
||||
end subroutine
|
||||
|
||||
SUBROUTINE atomic_wfc_cp(omega, nat, nsp, ityp, tau, iupdwn, npol, npw, nbspx,&
|
||||
evc )
|
||||
|
||||
USE kinds, ONLY : DP
|
||||
USE uspp_param, ONLY : nwfcm
|
||||
USE mp_global, ONLY : intra_bgrp_comm
|
||||
USE uspp_data, ONLY : nqx, tab_at, dq
|
||||
USE gvecw, ONLY : ecutwfc
|
||||
USE upf_ions, ONLY : n_atom_wfc
|
||||
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: nat, nsp, ityp(nat), iupdwn(2), npol, npw, nbspx
|
||||
REAL(DP), INTENT(IN) :: omega, tau(3,nat)
|
||||
COMPLEX(DP), INTENT(inout) :: evc (npw,nbspx)
|
||||
!
|
||||
INTEGER :: natomwfc
|
||||
COMPLEX(DP), ALLOCATABLE :: wfcatom(:,:,:)
|
||||
!! Superposition of atomic wavefunctions
|
||||
|
||||
!cp specific settings (gamma only)
|
||||
! xk is 0,0,0, igk is the identical permutation
|
||||
! wfcatom has 2 dimensions (npw, nbnd*nspin)
|
||||
! looks like only nspin=1,2 are implemented. The layout of the wfc is different:
|
||||
! in cp it is the equivalent of (npw, nbnd, nspin ), while in pw is (npwx, nspin, nbnd)
|
||||
real(dp) :: xk(3)
|
||||
integer :: igk(npw), i, ipol, sh(2)
|
||||
REAL(DP) :: angle1(nsp), angle2(nsp)
|
||||
!! dummy, unused variables
|
||||
|
||||
! identity permutation
|
||||
do i=1,npw
|
||||
igk(i)=i
|
||||
enddo
|
||||
! gamma point only
|
||||
xk=0.d0
|
||||
nqx = INT( (SQRT(ecutwfc) / dq + 4) * 1.d0 )
|
||||
allocate(tab_at(nqx,nwfcm,nsp))
|
||||
call init_tab_atwfc(omega, intra_bgrp_comm)
|
||||
|
||||
natomwfc = n_atom_wfc ( nat, ityp )
|
||||
allocate ( wfcatom(npw, npol, natomwfc) )
|
||||
|
||||
! only nospin / LSDA in CP
|
||||
call atomic_wfc_acc( xk, npw, igk, nat, nsp, ityp, tau, &
|
||||
.false., .false., angle1, angle2, .false., &
|
||||
npw, npol, natomwfc, wfcatom )
|
||||
|
||||
sh = shape(evc)
|
||||
|
||||
!write the result in the correct order in evc
|
||||
do i=1,min(natomwfc,sh(2)/npol)
|
||||
do ipol = 1, npol
|
||||
evc(:,i + iupdwn(ipol)-1) = wfcatom(:,ipol,i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
deallocate (wfcatom)
|
||||
deallocate (tab_at)
|
||||
|
||||
end subroutine atomic_wfc_cp
|
||||
|
|
|
@ -258,6 +258,11 @@
|
|||
CALL allocate_spline( vps_sp(is), mmx, xgmin, xgmax )
|
||||
CALL allocate_spline( dvps_sp(is), mmx, xgmin, xgmax )
|
||||
|
||||
if ( upf(is)%tcoulombp .and. .not.allocated(upf(is)%vloc) ) then
|
||||
! ugly workaround for 1/r potentials
|
||||
allocate(upf(is)%vloc(rgrid(is)%mesh))
|
||||
upf(is)%vloc(:) = - 2.0_dp* zv(is) / rgrid(is)%r(:)
|
||||
end if
|
||||
call formfn( rgrid(is)%r, rgrid(is)%rab, &
|
||||
upf(is)%vloc(1:rgrid(is)%mesh), zv(is), rcmax(is), &
|
||||
xgtab, 1.0d0, tpiba2, rgrid(is)%mesh, mmx, &
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
\documentclass[12pt,a4paper]{article}
|
||||
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qe{{\sc Quantum ESPRESSO}}
|
||||
|
||||
%\usepackage{html}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
\documentclass[12pt,a4paper]{article}
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qe{{\sc Quantum ESPRESSO}}
|
||||
\textwidth = 17cm
|
||||
\textheight = 24cm
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
New in 7.3.1 version:
|
||||
* Various improvements and bug fixes for pw2wannier.f90 (Junfeng Qiao)
|
||||
|
||||
Fixed in 7.3.1 version:
|
||||
* In CPV the mgga contribution to the force was missing on the GPU side.
|
||||
Now it has been added (CPU and GPU runs match).
|
||||
* f channel of GTH pseudopotentials fixed again (see issue #86 on gitlab)
|
||||
Thanks to Chang Liu for reporting.
|
||||
* Distributed parallel diagonalization (option -nd N with N=4,9,16,25,...)
|
||||
crashed when used together with NVidia GPUs (thanks to Laura Bellentani)
|
||||
* Old PPs with zero nonlocal part were crashing in parallel execution
|
||||
(see issue #633 on gitlab). Affects v.7.3. Thanks to Ye Luo for reporting
|
||||
* assume_isolated='2D' was giving wrong results when used with Gamma tricks
|
||||
(see issue #11 on gitlab). Affects all previous versions.
|
||||
* assume_isolated='esm' was giving bad forces when used with Gamma tricks.
|
||||
Affects v.7.2 and 7.3. Thanks to Giuseppe Mattioli for reporting.
|
||||
* Bad atomic symbols in some files used for plotting data (see issue #645
|
||||
on gitlab). Affects v.7.3. Thanks to Francesco Filippone for reporting.
|
||||
* Since v.6.2, assume_isolated='mt' was yielding bad phonon frequencies
|
||||
(see issue #657). Thanks to Jeremy Rabone for reporting.
|
||||
|
||||
New in 7.3 version:
|
||||
* Experimental support for pseudopotentials in PSML format
|
||||
* Noncollinear implementation of DFT+U and DFT+U+V in the
|
||||
|
@ -12,7 +33,7 @@ Incompatible changes in 7.3 version:
|
|||
* Small changes in options "iprint" and "disk_io" of PWscf
|
||||
* More pseudopotential-related code restructured and moved to upflib/
|
||||
|
||||
Fixed in 7.3 version:
|
||||
Fixed in 7.3 version:
|
||||
* Incorrect PP_SEMILOCAL field written for old-style pseudopotentials.
|
||||
May cause crashes (but not bad numbers). Reported by Jibiao Li.
|
||||
* Wrong output from Libxc-based gga-exchange functionals (gga_x) due to
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
\documentclass[12pt,a4paper]{article}
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qe{{\sc Quantum ESPRESSO}}
|
||||
|
||||
\usepackage{html}
|
||||
|
@ -490,8 +490,6 @@ path, as specified in the PATH environment variable.
|
|||
\texttt{make.inc} & compilation rules and flags (used by \texttt{Makefile})\\
|
||||
\texttt{install/configure.msg} & a report of the configuration run (not needed for compilation)\\
|
||||
\texttt{install/config.log} & detailed log of the configuration run (useful for debugging)\\
|
||||
\texttt{include/qe\_cdefs.h} & (previously: \texttt{include/c\_defs.h})
|
||||
a few definitions used by C files\\
|
||||
\texttt{include/configure.h} & optional: info on compilation flags
|
||||
(to enable it, uncomment \\ &
|
||||
\verb|#define __HAVE_CONFIG_INFO|
|
||||
|
|
|
@ -69,6 +69,7 @@ target_link_libraries(
|
|||
qe_mpi_fortran
|
||||
qe_upflib
|
||||
qe_fftx
|
||||
qe_elpa
|
||||
qe_xclib)
|
||||
|
||||
###########################################################
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
PROGRAM epw
|
||||
!-----------------------------------------------------------------------
|
||||
!! author: Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
||||
!! version: v5.8
|
||||
!! version: v5.8.1
|
||||
!! license: GNU
|
||||
!! summary: EPW main driver
|
||||
!!
|
||||
|
@ -42,7 +42,7 @@
|
|||
LOGICAL,EXTERNAL :: check_gpu_support
|
||||
!! Name of the program
|
||||
!
|
||||
version_number = '5.8'
|
||||
version_number = '5.8.1'
|
||||
!
|
||||
CALL init_clocks(.TRUE.)
|
||||
!
|
||||
|
|
|
@ -2026,7 +2026,7 @@
|
|||
USE modes, ONLY : nmodes
|
||||
USE epwcom, ONLY : nbndsub, fsthick, ngaussw, degaussw, shortrange, &
|
||||
nkf1, nkf2, nkf3, nqf1, nqf2, nqf3, efermi_read, &
|
||||
fermi_energy
|
||||
fermi_energy, mp_mesh_k
|
||||
USE pwcom, ONLY : ef
|
||||
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, epf17, wkf, nkf, &
|
||||
nqtotf, wf, xqf, nkqtotf, efnew, nbndfst, nktotf, &
|
||||
|
@ -2329,7 +2329,16 @@
|
|||
! nkq - index of k+sign*q on the full fine k-mesh.
|
||||
!
|
||||
CALL kpmq_map(xk, xq, +1, nkq)
|
||||
ikqfs = ixkf(bztoibz(nkq))
|
||||
!
|
||||
IF (mp_mesh_k) THEN
|
||||
!
|
||||
ikqfs = ixkf(bztoibz(nkq))
|
||||
!
|
||||
ELSE
|
||||
! full k-point grid
|
||||
ikqfs = ixkf(nkq)
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
IF (ikqfs > 0) THEN
|
||||
DO imode = 1, nmodes ! phonon modes
|
||||
|
|
|
@ -3408,7 +3408,7 @@
|
|||
WRITE (file_unit, '(a)') 'PRIMCOORD'
|
||||
! The second number is always 1 for PRIMCOORD coordinates,
|
||||
! according to http://www.xcrysden.org/doc/XSF.html
|
||||
WRITE (file_unit, '(a)') natm, 1
|
||||
WRITE (file_unit, '(2i6)') natm, 1
|
||||
!
|
||||
DO iatm = 1, natm
|
||||
IF (PRESENT(forces)) THEN
|
||||
|
|
|
@ -2922,6 +2922,8 @@
|
|||
!-----------------------------------------------------------------------
|
||||
!!
|
||||
!! Guiding functions
|
||||
!! gf should not be normalized at each k point because the atomic orbitals
|
||||
!! are not orthonormal and their Bloch representation not normalized.
|
||||
!!
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
|
@ -2959,8 +2961,6 @@
|
|||
!! Error status
|
||||
REAL(KIND = DP) :: arg
|
||||
!! 2*pi*(k+G)*r
|
||||
REAL(KIND = DP) :: anorm
|
||||
!! Anormal
|
||||
REAL(KIND = DP), EXTERNAL :: DDOT
|
||||
!! Scalar product of two vectors
|
||||
REAL(KIND = DP), ALLOCATABLE :: gk(:, :)
|
||||
|
@ -3028,9 +3028,6 @@
|
|||
sk(ig) = CMPLX(COS(arg), - SIN(arg), KIND = DP)
|
||||
gf(ig, iw) = gf(ig, iw) * sk(ig)
|
||||
ENDDO
|
||||
anorm = REAL(ZDOTC(npw, gf(1, iw), 1, gf(1, iw), 1))
|
||||
CALL mp_sum(anorm, intra_pool_comm)
|
||||
gf(:, iw) = gf(:, iw) / DSQRT(anorm)
|
||||
ENDDO
|
||||
!
|
||||
DEALLOCATE(gk, STAT = ierr)
|
||||
|
@ -3564,8 +3561,8 @@
|
|||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
wmod = wmod / DSQRT(DBLE(wmod)**2 + AIMAG(wmod)**2)
|
||||
wann_func(:, :, :, :) = wann_func(:, :, :, :) / wmod
|
||||
!wmod = wmod / DSQRT(DBLE(wmod)**2 + AIMAG(wmod)**2)
|
||||
!wann_func(:, :, :, :) = wann_func(:, :, :, :) / wmod
|
||||
!
|
||||
! Check the 'reality' of the WF
|
||||
!
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
________________________________________________________________________
|
||||
|
||||
*** INSTALLATION instructions for PWgui ***
|
||||
|
@ -10,9 +9,9 @@ The PWgui package comes in two flavors:
|
|||
(i) SOURCE PACKAGE
|
||||
|
||||
(ii) STANDALONE EXECUTABLE, which runs out of the box (but works
|
||||
only on the platform for which it has been built)
|
||||
only on the platform for which it was built)
|
||||
|
||||
N.B.: for the usage of repository version of PWgui see the
|
||||
For the usage of the git repository version of PWgui, see the
|
||||
INSTALL.repository file
|
||||
|
||||
________________________________________________________________________
|
||||
|
@ -20,39 +19,30 @@ ________________________________________________________________________
|
|||
(i) Installation instructions for SOURCE PACKAGE
|
||||
________________________________________________________________________
|
||||
|
||||
To use the source package you need the required Tcl software, in
|
||||
particular Tcl + Tk + Itcl + Itk + Iwidgets. PWgui requires the Tcl/Tk
|
||||
version 8.4 or later. You may install the software from your OS
|
||||
distribution.
|
||||
The following Tcl/Tk packages are required to run PWgui: Tcl, Tk,
|
||||
Itcl, Itk, and Iwidgets. The Tcl/Tk version 8.4 or later is
|
||||
required.
|
||||
|
||||
For example, for GNU/Linux Debian-based distributions, execute as root
|
||||
(or sudo):
|
||||
For GNU/Linux Debian-based distributions, these packages can be installed as:
|
||||
|
||||
* apt-get update; apt-get install iwidgets4
|
||||
* sudo apt update; sudo apt install iwidgets4
|
||||
|
||||
(this will install also tcl/tk/itcl/itk, because iwidgets depend on them).
|
||||
On fedora-based distributions, the analogous command is "dnf". Hence:
|
||||
On Fedora-based distributions, the analogous command is "dnf", i.e.:
|
||||
|
||||
* dnf install iwidgets
|
||||
* sudo dnf update; sudo dnf install iwidgets
|
||||
|
||||
Once your computer has all the needed software, your source package is
|
||||
ready to run. You only need to untar the PWgui source tarball, i.e.:
|
||||
This will also install tcl/tk/itcl/itk because iwidgets depend on them.
|
||||
|
||||
* tar zxvf PWgui-<version>.tgz
|
||||
or
|
||||
* gunzip -c PWgui-<version>.tgz | tar xvf -
|
||||
Once these packages are installed, the PWgui source package is ready
|
||||
to run. Untar the PWgui source tarball, i.e.:
|
||||
|
||||
where <version> stands for version number. To launch the PWgui
|
||||
program, type: pwgui.
|
||||
* tar zxvf PWgui-VERSION.tgz
|
||||
|
||||
where VERSION stands for version number. To launch the PWgui program,
|
||||
type: pwgui.
|
||||
|
||||
You may either add the PWgui root directory to your PATH or create a
|
||||
link to pwgui launcher from some directory that is on the PATH.
|
||||
|
||||
If you would like to copy "pwgui" launcher (but it is more convenient
|
||||
to make a link instead, see above) to some common place, such as
|
||||
/usr/local/bin or /opt/bin, then you need to define the PWGUI
|
||||
environmental variable so that "pwgui" will be able to locate its root
|
||||
directory (i.e. source files).
|
||||
link to the pwgui executable from some directory that is on the PATH.
|
||||
|
||||
|
||||
________________________________________________________________________
|
||||
|
@ -60,22 +50,18 @@ ________________________________________________________________________
|
|||
(ii) Installation instructions for STANDALONE EXECUTABLE
|
||||
________________________________________________________________________
|
||||
|
||||
The standalone executable is available for Linux platform and
|
||||
The standalone executables are available for Linux platform and
|
||||
occasionally also for Mac and Windows. They are available at
|
||||
http://www-k3.ijs.si/kokalj/pwgui
|
||||
|
||||
For zipped pwgui-xxx.zip package do:
|
||||
For zipped pwgui-VERSION.zip package do:
|
||||
|
||||
* unzip pwgui-xxx.zip
|
||||
* unzip pwgui-VERSION.zip
|
||||
|
||||
For tar-gzipped pwgui-xxx.tgz package do either:
|
||||
For tar-gzipped pwgui-VERSION.tgz package do either:
|
||||
|
||||
* tar zxvf pwgui-xxx.tgz
|
||||
or:
|
||||
* gunzip -c pwgui-xxx.tgz | tar xvf -
|
||||
|
||||
To launch the program type either:
|
||||
To launch the program, type:
|
||||
|
||||
* ./pwgui
|
||||
or
|
||||
* pwgui
|
||||
|
|
|
@ -4,19 +4,17 @@
|
|||
* * * from the QE repository * * *
|
||||
==============================================================================
|
||||
|
||||
To make the PWgui fully functional do the following:
|
||||
To make the PWgui fully functional, do the following:
|
||||
|
||||
Either:
|
||||
* from the QE root directory: make gui
|
||||
Or:
|
||||
* or from this directory (i.e. GUI/PWgui): make init
|
||||
* either in the QE root directory: make gui
|
||||
* or in this directory (i.e., GUI/PWgui): make init
|
||||
|
||||
To run PWgui, type in this directory: ./pwgui
|
||||
|
||||
* to run PWgui, type from this directory: ./pwgui
|
||||
|
||||
BEWARE:
|
||||
|
||||
To run the "pwgui" the required Tcl-related software is needed (see
|
||||
BEWARE:
|
||||
To run "pwgui", the required Tcl-related software is needed (see
|
||||
the INSTALL file).
|
||||
|
||||
--
|
||||
Anton Kokalj (tone.kokalj@ijs.si), Jan 2022
|
||||
Anton Kokalj (tone.kokalj@ijs.si), Jan 2024
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
Version: 7.x
|
||||
* PWgui-7.x corresponds to respective QE-7.x with respect to
|
||||
namelists, their input variables, and cards
|
||||
|
||||
Version: 6.7
|
||||
* hp.x module added
|
||||
|
||||
|
|
|
@ -7,43 +7,39 @@ This is the PWgui---a GUI for the PWscf set of programs within the
|
|||
open-source Quantum ESPRESSO suite for quantum simulation of materials
|
||||
(see http://www.quantum-espresso.org).
|
||||
|
||||
PWgui is written in [incr Tcl], an extension of Tcl scripting language
|
||||
(hence no compilation is needed for the PWgui source package). However
|
||||
the package depends on the [incr Tcl] and related software. Therefore
|
||||
there are two possibilities:
|
||||
PWgui is written in [incr Tcl], an extension of Tcl scripting
|
||||
language, implying that compilation is not needed. However, it depends
|
||||
on the [incr Tcl] and related software. Therefore, there are two
|
||||
possibilities:
|
||||
|
||||
(i) to use a source package if the required Tcl software is installed
|
||||
(i) to use a source package (requires the Tcl software, see the
|
||||
'INSTALL' file)
|
||||
|
||||
(ii) to use a standalone executable which runs out of the
|
||||
box. Works only on the platforms for which executables have
|
||||
been built. They are available at http://www-k3.ijs.si/kokalj/pwgui
|
||||
|
||||
See the file "INSTALL" for installation instructions.
|
||||
(ii) to use a standalone executable which runs out of the box. It
|
||||
works only on the platforms for which it was built. The
|
||||
executables are available at http://www-k3.ijs.si/kokalj/pwgui
|
||||
|
||||
|
||||
CURRENT STATUS
|
||||
--------------
|
||||
|
||||
The main purpose of the PWgui is to facilitate the creation and
|
||||
manipulation (editing) of input files for Quantum ESPRESSO
|
||||
programs.
|
||||
|
||||
It also provides a syntax checker and a formatted of input files
|
||||
(i.e. pwgui --reformat program input).
|
||||
The main purpose of PWgui is to facilitate the creation and
|
||||
manipulation (editing) of input files for Quantum ESPRESSO programs.
|
||||
It also provides a syntax checker and an input file formatter
|
||||
(i.e. pwgui --reformat PROGRAM INPUT).
|
||||
|
||||
It is possible to run the supported QE programs by using the GUI. This
|
||||
feature requires to set the path of the QE executables via
|
||||
feature requires setting the path of the QE executables via the
|
||||
"File-->Settings" menu (tab: PWscf settings).
|
||||
|
||||
The GUI can also use the XCRYSDEN program (http://www.xcrysden.org/)
|
||||
for the visualization of atomic structures from the pw.x input/output
|
||||
files, or for the visualization of properties calculated via the
|
||||
PWgui can also use the XCRYSDEN program (http://www.xcrysden.org/) for
|
||||
the visualization of atomic structures from the pw.x input/output
|
||||
files or for the visualization of properties calculated via the
|
||||
sequence: pw.x-->pp.x (when the property was saved into an XSF file).
|
||||
|
||||
Currently, the following QE programs (modules) are supported:
|
||||
|
||||
* pw.x
|
||||
* neb.x's neb.dat
|
||||
* neb.x
|
||||
* ph.x
|
||||
* pp.x
|
||||
* projwfc.x
|
||||
|
@ -113,4 +109,4 @@ following:
|
|||
|
||||
|
||||
--
|
||||
Anton Kokalj (tone.kokalj@ijs.si), Jan 2022
|
||||
Anton Kokalj (tone.kokalj@ijs.si), Feb 2024
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
For QE developers: updating the PWgui modules
|
||||
---------------------------------------------
|
||||
|
||||
If some new variables have been added to a given QE program, please
|
||||
When new input variables are added to a given QE program, please
|
||||
update corresponding module definition files, which are located in
|
||||
modules/ directory.
|
||||
|
||||
|
@ -27,13 +27,13 @@ GUIB-definition language. Such a description provides two items: (i)
|
|||
it defines the input-syntax and concomitantly (ii) defines the GUI.
|
||||
|
||||
The modules are located in the modules/ directory. Each module is
|
||||
located in its own directory. For example the PW.X module is located
|
||||
located in its own directory. For example, the PW.X module is located
|
||||
in directory modules/pw. The following files are located therein:
|
||||
|
||||
* pw.tcl - the main module definition file, the rest of
|
||||
the files are sourced from it
|
||||
* pw-event.tcl - implementation of the event-driven mechanism
|
||||
* pw-help.tcl - help file describing all the pw.x variables
|
||||
* pw-help.tcl - help file describing the pw.x variables
|
||||
* commands.tcl - auxiliary commands used by file pw.tcl
|
||||
|
||||
Hereafter such files are called "module definition files".
|
||||
|
@ -45,21 +45,21 @@ How to add a new module to PWgui
|
|||
Let's say we want to add a new module named "mymodule". We have to
|
||||
perform two tasks:
|
||||
|
||||
(i) Write the Module Definition Files
|
||||
(i) Write the module definition files
|
||||
|
||||
Create a directory: modules/mymodule, and therein a file
|
||||
mymodule.tcl. If needed, create also files: mymodule-event.tcl,
|
||||
mymodule-help.tcl, and commands.tcl.
|
||||
mymodule.tcl. If needed, create also mymodule-event.tcl,
|
||||
mymodule-help.tcl, and commands.tcl files.
|
||||
|
||||
For the syntax of the module definition file see some existing
|
||||
For the syntax of the module definition file, see some existing
|
||||
modules. For example, see files in modules/pp (an easy example), or in
|
||||
modules/pw (a complex example). For further documentation see also:
|
||||
http://www-k3.ijs.si/kokalj/guib/documentation.html.
|
||||
|
||||
(ii) Inform the GUI About New Module
|
||||
(ii) Inform the GUI about the new module
|
||||
|
||||
Now we should edit the file src-tcl/pwscf.itcl, and add the following
|
||||
line on the proper place (search for addModule string):
|
||||
Edit the src-tcl/pwscf.itcl file, and add the following line on the
|
||||
proper place (search for addModule string):
|
||||
|
||||
$gui addModule module mymodule "MyModule.X" \
|
||||
[file join $env(PWGUI) modules mymodule mymodule.tcl] {
|
||||
|
@ -67,9 +67,9 @@ $gui addModule module mymodule "MyModule.X" \
|
|||
}
|
||||
|
||||
|
||||
We can also add a documentation for the module. Let say that we have
|
||||
an INPUT_MYMODULE.txt file. We need to tranform it into a simple
|
||||
INPUT_MYMODULE.html file in the doc/ directory by editing the
|
||||
It is recommended to also add a documentation for the module. Let say
|
||||
that we have an INPUT_MYMODULE.txt file. We need to tranform it into a
|
||||
simple INPUT_MYMODULE.html file in the doc/ directory by editing the
|
||||
doc/Makefile file. Then we sould edit the src-tcl/pwscf.itcl file and
|
||||
add the following line on the proper place (search for addHelp
|
||||
string):
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
Thanks to:
|
||||
|
||||
Paolo Giannozi
|
||||
for adding ld.x module, among other things ...
|
||||
for adding ld1.x module, among other things
|
||||
|
||||
Carlo Sbraccia:
|
||||
for making PWgui compatible with PWscf 2.1,
|
||||
for bug reports.
|
||||
for making PWgui compatible with PWscf 2.1 and
|
||||
for bug reports
|
||||
|
||||
Carlo Cavazzoni, and Roberto Gori:
|
||||
for discussions and testing.
|
||||
for discussions and testing
|
||||
|
||||
Stefano Baroni and the rest of the PWscf team:
|
||||
for showing interest in PWgui project.
|
||||
for showing interest in PWgui project
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
* starkits' binary version does not parse well the command line
|
||||
options; -- must be passed and also pwgui header is always printed
|
||||
options
|
||||
|
||||
* would be nice to have kind of beginner mode for more complex modules
|
||||
such as pw.x, where only the most common variable items would be
|
||||
|
|
|
@ -1 +1 @@
|
|||
7.2
|
||||
7.3.1
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 328 KiB |
Binary file not shown.
Before Width: | Height: | Size: 236 KiB |
Binary file not shown.
Before Width: | Height: | Size: 208 KiB |
Binary file not shown.
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
Binary file not shown.
|
@ -372,9 +372,13 @@ help lfcp -helpfmt helpdoc -helptext {
|
|||
<br><li> <em>Description:</em>
|
||||
</li>
|
||||
<blockquote><pre>
|
||||
If .TRUE. perform a constant bias potential (constant-mu)
|
||||
calculation with ESM method (assume_isolated = 'esm' and
|
||||
esm_bc = 'bc2' or 'bc3' must be set in SYSTEM namelist).
|
||||
If .TRUE. perform a constant bias potential (constant-mu) calculation with
|
||||
- ESM method (assume_isolated = 'esm' and esm_bc = 'bc2' or 'bc3' must be
|
||||
set in SYSTEM namelist) or
|
||||
- ESM-RISM method (assume_isolated = 'esm' and esm_bc = 'bc1' must be set
|
||||
set in SYSTEM namelist, and trism = .TRUE. must be set
|
||||
set in CONTROL namelist).
|
||||
|
||||
"fcp_mu" gives the target Fermi energy.
|
||||
See the header of PW/src/fcp_module.f90 for documentation
|
||||
</pre></blockquote>
|
||||
|
|
|
@ -236,7 +236,11 @@ help dftd3_hess -helpfmt helpdoc -helptext {
|
|||
</li>
|
||||
<br><li> <em>Description:</em>
|
||||
</li>
|
||||
<blockquote><pre> File where the D3 dispersion hessian matrix is read.
|
||||
<blockquote><pre>
|
||||
File where the D3 dispersion hessian matrix is read. Set to
|
||||
'automatic.hess' to enable automatic mode (experimental). In
|
||||
this mode, D3 Hessian is computed if 'automatic.hess' file is
|
||||
missing.
|
||||
</pre></blockquote>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -205,7 +205,8 @@ help iprint -helpfmt helpdoc -helptext {
|
|||
<br><li> <em>Description:</em>
|
||||
</li>
|
||||
<blockquote><pre>
|
||||
band energies are written every <i>iprint</i> iterations
|
||||
When "calculation" == 'md' (molecular dynamics)
|
||||
trajectory is written every <i>iprint</i> md steps.
|
||||
</pre></blockquote>
|
||||
</ul>
|
||||
|
||||
|
@ -463,8 +464,15 @@ Reduces I/O but increases memory wrt the previous cases
|
|||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'nowf'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
save to disk only the xml data file,
|
||||
never save wavefunctions and charge density
|
||||
save to disk only the xml data file and the charge density
|
||||
at convergence, never save wavefunctions. Restarting from
|
||||
an interrupted calculation is not possible with this option.
|
||||
</pre></dd>
|
||||
</dl>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'minimal'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
save to disk only the xml data file at convergence
|
||||
</pre></dd>
|
||||
</dl>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
|
@ -1146,11 +1154,14 @@ help starting_magnetization -helpfmt helpdoc -helptext {
|
|||
<br><li> <em>Description:</em>
|
||||
</li>
|
||||
<blockquote><pre>
|
||||
Starting spin polarization on atomic type 'i' in a spin
|
||||
polarized (LSDA or noncollinear/spin-orbit) calculation.
|
||||
For non-constrained calculations, the allowed values
|
||||
range between -1 (all spins down for the valence electrons
|
||||
of atom type 'i') to 1 (all spins up).
|
||||
Starting spin polarization on atomic type 'i' in a spin-polarized
|
||||
(LSDA or non-collinear/spin-orbit) calculation.
|
||||
The input values can have an absolute value greater than or equal to 1,
|
||||
which will be interpreted as the site's magnetic moment.
|
||||
Alternatively, the values can range between -1 and 1,
|
||||
which will be interpreted as the site magnetization per valence electron.
|
||||
For QE-v7.2 and older versions, only the second option is allowed.
|
||||
|
||||
If you expect a nonzero magnetization in your ground state,
|
||||
you MUST either specify a nonzero value for at least one
|
||||
atomic type, or constrain the magnetization using variable
|
||||
|
@ -1998,22 +2009,28 @@ for treating the Coulomb potential divergencies at small q vectors.
|
|||
</pre>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'gygi-baldereschi'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> appropriate for cubic and quasi-cubic supercells
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
appropriate for cubic and quasi-cubic supercells
|
||||
</pre></dd>
|
||||
</dl>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'vcut_spherical'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> appropriate for cubic and quasi-cubic supercells
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
appropriate for cubic and quasi-cubic supercells
|
||||
(untested for non-orthogonal crystal axis)
|
||||
</pre></dd>
|
||||
</dl>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'vcut_ws'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> appropriate for strongly anisotropic supercells, see also "ecutvcut".
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
appropriate for strongly anisotropic supercells, see also "ecutvcut"
|
||||
(untested for non-orthogonal crystal axis)
|
||||
</pre></dd>
|
||||
</dl>
|
||||
<dl style="margin-left: 1.5em;">
|
||||
<dt><tt><b>'none'</b> :</tt></dt>
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;"> sets Coulomb potential at G,q=0 to 0.0 (required for GAU-PBE)
|
||||
<dd><pre style="margin-top: 0em; margin-bottom: -1em;">
|
||||
sets Coulomb potential at G,q=0 to 0.0 (required for GAU-PBE)
|
||||
</pre></dd>
|
||||
</dl>
|
||||
</blockquote>
|
||||
|
@ -2127,11 +2144,6 @@ Hubbard manifold number. It is possible to specify up to
|
|||
three Hubbard manifolds per Hubbard atom. However, if you want
|
||||
to specify three manifolds then the second and the third manifolds
|
||||
will be considered as one effective manifold (see Doc/Hubbard_input.pdf)
|
||||
|
||||
Note: Hubbard_occ cannot be used together with fully-relativistic pseudopotentials
|
||||
(i.e. when noncolin=.true. and lspinorb=.true.) since this variable does not
|
||||
allow to distinguish between the occupied and unoccupied channels (this is
|
||||
needed when determining the atomic orbital offsets).
|
||||
</pre></blockquote>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -101,10 +101,10 @@ module PW -title "PWSCF GUI: module PW.x" -script {
|
|||
var disk_io {
|
||||
-label "Disk Input/Output (disk_io):"
|
||||
-textvalue {
|
||||
high medium low nowf none
|
||||
high medium low nowf minimal none
|
||||
}
|
||||
-value {
|
||||
'high' 'medium' 'low' 'nowf' 'none'
|
||||
'high' 'medium' 'low' 'nowf' 'minimal' 'none'
|
||||
}
|
||||
-widget optionmenu
|
||||
}
|
||||
|
@ -123,7 +123,7 @@ module PW -title "PWSCF GUI: module PW.x" -script {
|
|||
}
|
||||
|
||||
var iprint {
|
||||
-label "Interval (in SCF iterations) for printing band energies (iprint):"
|
||||
-label "Interval of MD steps for printing trajectory (iprint):"
|
||||
-widget spinint
|
||||
-validate nonnegint
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -2,24 +2,28 @@
|
|||
* * * README file for QE-modes * * *
|
||||
========================================================================
|
||||
|
||||
This is QE-modes package: an open-source collection of Emacs
|
||||
This is the QE-modes package: an open-source collection of Emacs
|
||||
major-modes for making the editing of Quantum ESPRESSO input files
|
||||
somewhat easier and more comfortable with Emacs editor.
|
||||
somewhat easier and more comfortable with the Emacs editor.
|
||||
|
||||
QE-modes is free software, released under the GNU General Public
|
||||
License. See: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt,
|
||||
QE-modes is free software released under the GNU General Public
|
||||
License. See: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
|
||||
|
||||
|
||||
Quick installation instructions for the impatient:
|
||||
--------------------------------------------------
|
||||
|
||||
1. copy the qe-modes/ subdirectory into ~/.emacs.d/ directory
|
||||
(N.B.: use the install.sh script instead)
|
||||
|
||||
2. edit and append the qe-modes.emacs file to your ~/.emacs file
|
||||
1. To install QE-modes, type:
|
||||
|
||||
For more information about the installation and usage, see the file:
|
||||
Doc/user_guide.pdf
|
||||
./install.sh
|
||||
|
||||
This script copies the qe-modes/ subdirectory into the ~/.emacs.d/
|
||||
directory.
|
||||
|
||||
2. Edit and append the 'qe-modes.emacs' file to your ~/.emacs file.
|
||||
|
||||
For more information about the installation and usage, see the
|
||||
Doc/user_guide.pdf file.
|
||||
|
||||
|
||||
* * *
|
||||
|
|
|
@ -13,7 +13,7 @@ To generate the QE-modes sources:
|
|||
make
|
||||
|
||||
which will create the *.el and *.elc files in qe-modes/ subdirectory.
|
||||
From this point on, see the either README file or Doc/user_guide.pdf.
|
||||
From this point on, see either the README file or Doc/user_guide.pdf.
|
||||
|
||||
|
||||
To generate the QE-modes tarball:
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -81,21 +81,21 @@
|
|||
(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 'pp-mode' "pp-mode.elc"
|
||||
"Major mode for editing Quantum ESPRESSO pp.x input files" t)
|
||||
|
||||
(autoload 'ph-mode' "ph-mode.elc"
|
||||
"Major mode for editing Quantum ESPRESSO ph.x input files" t)
|
||||
|
||||
(autoload 'cp-mode' "cp-mode.elc"
|
||||
"Major mode for editing Quantum ESPRESSO cp.x input files" t)
|
||||
|
||||
|
||||
|
||||
(provide 'qe-modes)
|
||||
|
|
|
@ -148,7 +148,6 @@ set(src_simple
|
|||
simple/epe.f90
|
||||
simple/gk_sort_limit.f90
|
||||
simple/khamiltonian.f90
|
||||
simple/init_us_2_max.f90
|
||||
simple/commutator.f90)
|
||||
|
||||
set(src_simple_bse
|
||||
|
|
|
@ -18,7 +18,6 @@ SIMPLEOBJS = \
|
|||
epe.o \
|
||||
gk_sort_limit.o \
|
||||
khamiltonian.o \
|
||||
init_us_2_max.o \
|
||||
commutator.o
|
||||
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ subroutine gen_beta_simple (qk, npw_max, dvkb)
|
|||
USE klist, ONLY : ngk
|
||||
USE gvect, ONLY : mill, eigts1, eigts2, eigts3, g
|
||||
USE uspp, ONLY : nkb, indv, nhtol, nhtolm
|
||||
USE uspp_data, ONLY : nqx, tab, dq
|
||||
USE uspp_param, ONLY : upf, lmaxkb, nbetam, nh
|
||||
USE beta_mod, ONLY : interp_dbeta
|
||||
USE uspp_param, ONLY : lmaxkb, nbetam, nh
|
||||
USE io_global, ONLY : stdout
|
||||
!
|
||||
implicit none
|
||||
|
@ -26,7 +26,7 @@ subroutine gen_beta_simple (qk, npw_max, dvkb)
|
|||
!
|
||||
! local variables
|
||||
!
|
||||
integer :: ikb, nb, ih, ig, i0, i1, i2, i3 , nt
|
||||
integer :: ikb, nb, ih, ig, nt
|
||||
! counter on beta functions
|
||||
! counter on beta functions
|
||||
! counter on beta functions
|
||||
|
@ -34,7 +34,7 @@ subroutine gen_beta_simple (qk, npw_max, dvkb)
|
|||
! index of the first nonzero point in the r
|
||||
! counter on atomic type
|
||||
|
||||
real(DP) :: arg, px, ux, vx, wx
|
||||
real(DP) :: arg
|
||||
! argument of the atomic phase factor
|
||||
|
||||
complex(DP) :: phase, pref
|
||||
|
@ -43,7 +43,6 @@ subroutine gen_beta_simple (qk, npw_max, dvkb)
|
|||
|
||||
integer :: na, l, iig, lm, iq
|
||||
real(DP), allocatable :: djl (:,:,:), ylm (:,:), q (:), gk (:,:)
|
||||
real(DP) :: qt
|
||||
complex(DP), allocatable :: sk (:)
|
||||
|
||||
call start_clock('gen_beta1')
|
||||
|
@ -70,28 +69,11 @@ subroutine gen_beta_simple (qk, npw_max, dvkb)
|
|||
call stop_clock('stres_us32')
|
||||
call start_clock('stres_us33')
|
||||
|
||||
do ig = 1, npw_max
|
||||
q (ig) = SQRT (q(ig)) * tpiba
|
||||
enddo
|
||||
do nt = 1, ntyp
|
||||
do nb = 1, upf(nt)%nbeta
|
||||
do ig = 1, npw_max
|
||||
qt = sqrt(q (ig)) * tpiba
|
||||
px = qt / dq - int (qt / dq)
|
||||
ux = 1.d0 - px
|
||||
vx = 2.d0 - px
|
||||
wx = 3.d0 - px
|
||||
i0 = qt / dq + 1
|
||||
i1 = i0 + 1
|
||||
i2 = i0 + 2
|
||||
i3 = i0 + 3
|
||||
if (i3 <= nqx) then ! Approximation
|
||||
djl(ig,nb,nt) = ( tab (i0, nb, nt) * (-vx*wx-ux*wx-ux*vx)/6.d0 + &
|
||||
tab (i1, nb, nt) * (+vx*wx-px*wx-px*vx)/2.d0 - &
|
||||
tab (i2, nb, nt) * (+ux*wx-px*wx-px*ux)/2.d0 + &
|
||||
tab (i3, nb, nt) * (+ux*vx-px*vx-px*ux)/6.d0 )/dq
|
||||
else
|
||||
djl(ig,nb,nt) = 0.d0 ! Approximation
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
CALL interp_dbeta( nt, npw_max, q, djl(:,:,nt) )
|
||||
enddo
|
||||
call stop_clock('stres_us33')
|
||||
call start_clock('stres_us34')
|
||||
|
@ -156,7 +138,7 @@ subroutine gen_beta_simple_2 (qk, npw_max, u, dvkb)
|
|||
USE klist, ONLY : ngk, igk_k
|
||||
USE gvect, ONLY : mill, eigts1, eigts2, eigts3, g
|
||||
USE uspp, ONLY : nkb, indv, nhtol, nhtolm
|
||||
USE uspp_data, ONLY : nqx, tab, dq
|
||||
USE beta_mod, ONLY : interp_beta
|
||||
USE uspp_param, ONLY : upf, lmaxkb, nbetam, nh
|
||||
!
|
||||
implicit none
|
||||
|
@ -166,10 +148,9 @@ subroutine gen_beta_simple_2 (qk, npw_max, u, dvkb)
|
|||
real(DP) :: u (3)
|
||||
|
||||
complex(DP) :: dvkb (npw_max, nkb)
|
||||
integer :: na, nt, nb, ih, l, lm, ikb, iig, ipol, i0, i1, i2, &
|
||||
i3, ig
|
||||
integer :: na, nt, nb, ih, l, lm, ikb, iig, ipol, ig
|
||||
real(DP), allocatable :: gk(:,:), q (:)
|
||||
real(DP) :: px, ux, vx, wx, arg
|
||||
real(DP) :: arg
|
||||
|
||||
real(DP), allocatable :: vkb0 (:,:,:), dylm (:,:), dylm_u (:,:)
|
||||
! dylm = d Y_lm/dr_i in cartesian axes
|
||||
|
@ -211,26 +192,7 @@ subroutine gen_beta_simple_2 (qk, npw_max, u, dvkb)
|
|||
|
||||
do nt = 1, ntyp
|
||||
! calculate beta in G-space using an interpolation table
|
||||
do nb = 1, upf(nt)%nbeta
|
||||
do ig = 1, npw_max
|
||||
px = q (ig) / dq - int (q (ig) / dq)
|
||||
ux = 1.d0 - px
|
||||
vx = 2.d0 - px
|
||||
wx = 3.d0 - px
|
||||
i0 = q (ig) / dq + 1
|
||||
i1 = i0 + 1
|
||||
i2 = i0 + 2
|
||||
i3 = i0 + 3
|
||||
if (i3<=nqx) then ! DEBUG
|
||||
vkb0 (ig, nb, nt) = tab (i0, nb, nt) * ux * vx * wx / 6.d0 + &
|
||||
tab (i1, nb, nt) * px * vx * wx / 2.d0 - &
|
||||
tab (i2, nb, nt) * px * ux * wx / 2.d0 + &
|
||||
tab (i3, nb, nt) * px * ux * vx / 6.d0
|
||||
else
|
||||
vkb0 (ig, nb, nt) = 0.d0 ! DEBUG
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
CALL interp_beta( nt, npw_max, q, vkb0(:,:,nt) )
|
||||
enddo
|
||||
|
||||
deallocate (q)
|
||||
|
|
|
@ -1,150 +0,0 @@
|
|||
!
|
||||
! Copyright (C) 2001-2015 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 .
|
||||
!
|
||||
!
|
||||
!----------------------------------------------------------------------
|
||||
subroutine init_us_2_max (npw_, igk_, q_, vkb_)
|
||||
!----------------------------------------------------------------------
|
||||
!
|
||||
! Calculates beta functions (Kleinman-Bylander projectors), with
|
||||
! structure factor, for all atoms, in reciprocal space. On input:
|
||||
! npw_ : number of PWs
|
||||
! igk_(npw_) : indices of G in the list of q+G vectors
|
||||
! q_(3) : q vector (2pi/a units)
|
||||
! On output:
|
||||
! vkb_(npw_,nkb) : beta functions
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE ions_base, ONLY : nat, ntyp => nsp, ityp, tau
|
||||
USE cell_base, ONLY : tpiba, omega
|
||||
USE constants, ONLY : tpi
|
||||
USE gvect, ONLY : eigts1, eigts2, eigts3, mill, g
|
||||
USE uspp_data, ONLY : nqx, dq, tab
|
||||
USE uspp, ONLY : nkb, nhtol, nhtolm, indv
|
||||
USE uspp_param, ONLY : upf, lmaxkb, nhm, nh
|
||||
USE io_global, ONLY : stdout
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
INTEGER, INTENT (IN) :: npw_, igk_ (npw_)
|
||||
REAL(dp), INTENT(IN) :: q_(3)
|
||||
COMPLEX(dp), INTENT(OUT) :: vkb_ (npw_, nkb)
|
||||
!
|
||||
! Local variables
|
||||
!
|
||||
integer :: i0,i1,i2,i3, ig, lm, na, nt, nb, ih, jkb
|
||||
|
||||
real(DP) :: px, ux, vx, wx, arg
|
||||
real(DP), allocatable :: gk (:,:), qg (:), vq (:), ylm (:,:), vkb1(:,:)
|
||||
|
||||
complex(DP) :: phase, pref
|
||||
complex(DP), allocatable :: sk(:)
|
||||
|
||||
integer :: iq
|
||||
|
||||
!
|
||||
!
|
||||
if (lmaxkb.lt.0) return
|
||||
call start_clock ('init_us_2_max')
|
||||
allocate (vkb1( npw_,nhm))
|
||||
allocate ( sk( npw_))
|
||||
allocate ( qg( npw_))
|
||||
allocate ( vq( npw_))
|
||||
allocate ( ylm( npw_, (lmaxkb + 1) **2))
|
||||
allocate ( gk( 3, npw_))
|
||||
!
|
||||
! write(*,'(3i4,i5,3f10.5)') size(tab,1), size(tab,2), size(tab,3), size(vq), q_
|
||||
|
||||
do ig = 1, npw_
|
||||
gk (1,ig) = q_(1) + g(1, igk_(ig) )
|
||||
gk (2,ig) = q_(2) + g(2, igk_(ig) )
|
||||
gk (3,ig) = q_(3) + g(3, igk_(ig) )
|
||||
qg (ig) = gk(1, ig)**2 + gk(2, ig)**2 + gk(3, ig)**2
|
||||
enddo
|
||||
!
|
||||
call ylmr2 ((lmaxkb+1)**2, npw_, gk, qg, ylm)
|
||||
!
|
||||
! set now qg=|q+G| in atomic units
|
||||
!
|
||||
do ig = 1, npw_
|
||||
qg(ig) = sqrt(qg(ig))*tpiba
|
||||
enddo
|
||||
|
||||
! |beta_lm(q)> = (4pi/omega).Y_lm(q).f_l(q).(i^l).S(q)
|
||||
jkb = 0
|
||||
do nt = 1, ntyp
|
||||
! calculate beta in G-space using an interpolation table f_l(q)=\int _0 ^\infty dr r^2 f_l(r) j_l(q.r)
|
||||
do nb = 1, upf(nt)%nbeta
|
||||
do ig = 1, npw_
|
||||
px = qg (ig) / dq - int (qg (ig) / dq)
|
||||
ux = 1.d0 - px
|
||||
vx = 2.d0 - px
|
||||
wx = 3.d0 - px
|
||||
i0 = INT( qg (ig) / dq ) + 1
|
||||
i1 = i0 + 1
|
||||
i2 = i0 + 2
|
||||
i3 = i0 + 3
|
||||
if (i3<=nqx) then ! WARNING: Here we change from the original subroutine init_us_2.f90
|
||||
vq (ig) = tab (i0, nb, nt) * ux * vx * wx / 6.d0 + &
|
||||
tab (i1, nb, nt) * px * vx * wx / 2.d0 - &
|
||||
tab (i2, nb, nt) * px * ux * wx / 2.d0 + &
|
||||
tab (i3, nb, nt) * px * ux * vx / 6.d0
|
||||
else
|
||||
vq(ig) = 0.0
|
||||
endif
|
||||
enddo
|
||||
! add spherical harmonic part (Y_lm(q)*f_l(q))
|
||||
do ih = 1, nh (nt)
|
||||
if (nb.eq.indv (ih, nt) ) then
|
||||
!l = nhtol (ih, nt)
|
||||
lm =nhtolm (ih, nt)
|
||||
do ig = 1, npw_
|
||||
vkb1 (ig,ih) = ylm (ig, lm) * vq (ig)
|
||||
enddo
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
!
|
||||
! vkb1 contains all betas including angular part for type nt
|
||||
! now add the structure factor and factor (-i)^l
|
||||
!
|
||||
do na = 1, nat
|
||||
! ordering: first all betas for atoms of type 1
|
||||
! then all betas for atoms of type 2 and so on
|
||||
if (ityp (na) .eq.nt) then
|
||||
arg = (q_(1) * tau (1, na) + &
|
||||
q_(2) * tau (2, na) + &
|
||||
q_(3) * tau (3, na) ) * tpi
|
||||
phase = CMPLX(cos (arg), - sin (arg) ,kind=DP)
|
||||
do ig = 1, npw_
|
||||
sk (ig) = eigts1 (mill(1,igk_(ig)), na) * &
|
||||
eigts2 (mill(2,igk_(ig)), na) * &
|
||||
eigts3 (mill(3,igk_(ig)), na)
|
||||
enddo
|
||||
do ih = 1, nh (nt)
|
||||
jkb = jkb + 1
|
||||
pref = (0.d0, -1.d0) **nhtol (ih, nt) * phase
|
||||
do ig = 1, npw_
|
||||
vkb_(ig, jkb) = vkb1 (ig,ih) * sk (ig) * pref
|
||||
enddo
|
||||
|
||||
enddo
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
|
||||
deallocate (gk)
|
||||
deallocate (ylm)
|
||||
deallocate (vq)
|
||||
deallocate (qg)
|
||||
deallocate (sk)
|
||||
deallocate (vkb1)
|
||||
|
||||
call stop_clock ('init_us_2_max')
|
||||
return
|
||||
end subroutine init_us_2_max
|
||||
|
|
@ -232,7 +232,7 @@ subroutine khamiltonian
|
|||
!
|
||||
call start_clock('Vnloc')
|
||||
if (nkb>0) then
|
||||
call init_us_2_max(npw_max,igkk,qk,vkb_max) ! get the projectors \beta_Ilm (k-dependent)
|
||||
call init_us_2(npw_max,igkk,qk,vkb_max) ! get the projectors \beta_Ilm (k-dependent)
|
||||
endif
|
||||
!vkb_max(npwx+1:npw_max,1:nkb) = 0.d0 ! WARNING: HERE I PUT TO ZERO THE ELEMENTS OF BETA WiTH G > npwx
|
||||
!
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
hp.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
hp.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: hp.x / PWscf / Quantum ESPRESSO (version: 7.3)
|
||||
Program: hp.x / PWscf / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -56,13 +56,11 @@ subroutine hp_allocate_q
|
|||
ENDIF
|
||||
ENDIF
|
||||
!
|
||||
IF (okvan) THEN
|
||||
ALLOCATE (eigqts(nat))
|
||||
ALLOCATE (becp1(nksq))
|
||||
DO ik = 1,nksq
|
||||
CALL allocate_bec_type ( nkb, nbnd, becp1(ik) )
|
||||
ENDDO
|
||||
ENDIF
|
||||
ALLOCATE (eigqts(nat))
|
||||
ALLOCATE (becp1(nksq))
|
||||
DO ik = 1,nksq
|
||||
CALL allocate_bec_type ( nkb, nbnd, becp1(ik) )
|
||||
ENDDO
|
||||
!
|
||||
ALLOCATE (swfcatomk(npwx*npol,nwfcU))
|
||||
IF (lgamma) THEN
|
||||
|
|
|
@ -45,16 +45,14 @@ SUBROUTINE hp_dealloc_q()
|
|||
if (allocated(ikmkmqs)) deallocate (ikmkmqs)
|
||||
if (allocated(m_loc)) deallocate (m_loc)
|
||||
!
|
||||
IF (okvan) THEN
|
||||
if (allocated(eigqts)) deallocate (eigqts)
|
||||
!
|
||||
if (allocated(becp1)) then
|
||||
do ik=1,size(becp1)
|
||||
call deallocate_bec_type ( becp1(ik) )
|
||||
enddo
|
||||
deallocate(becp1)
|
||||
endif
|
||||
ENDIF
|
||||
if (allocated(eigqts)) deallocate (eigqts)
|
||||
!
|
||||
if (allocated(becp1)) then
|
||||
do ik=1,size(becp1)
|
||||
call deallocate_bec_type ( becp1(ik) )
|
||||
enddo
|
||||
deallocate(becp1)
|
||||
endif
|
||||
if (allocated(becpt)) then
|
||||
do ik=1,size(becpt)
|
||||
call deallocate_bec_type ( becpt(ik) )
|
||||
|
|
|
@ -347,8 +347,8 @@ input_description -distribution {Quantum ESPRESSO} -package KCW -program kcw.x {
|
|||
default { .FALSE. }
|
||||
info {
|
||||
If .true. the interpolated band structure is computed along
|
||||
a path secified with the K_POINTS card ( see PW documentation
|
||||
https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487 )
|
||||
a path specified with the K_POINTS card ( see PW documentation
|
||||
https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS )
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -382,7 +382,7 @@ input_description -distribution {Quantum ESPRESSO} -package KCW -program kcw.x {
|
|||
}
|
||||
|
||||
card K_POINTS {
|
||||
message { see https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487 }
|
||||
}
|
||||
message { see https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
kcw.x / KCW / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
kcw.x / KCW / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
@ -639,8 +639,8 @@ than 1e-4 Ry (Hard coded for now, see <a href="#spread_thr">spread_thr</a>).
|
|||
</tr>
|
||||
<tr><td align="left" valign="top" colspan="2"><blockquote><pre style="margin-bottom: -1em;">
|
||||
If .true. the interpolated band structure is computed along
|
||||
a path secified with the K_POINTS card ( see PW documentation
|
||||
<a href="https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487">https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487</a> )
|
||||
a path specified with the K_POINTS card ( see PW documentation
|
||||
<a href="https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS">https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS</a> )
|
||||
</pre></blockquote></td></tr>
|
||||
</table>
|
||||
<div align="right" style="margin-bottom: 5;">[<a href="#__top__">Back to Top</a>]</div>
|
||||
|
@ -700,13 +700,13 @@ are computed (R=0 and n=m).
|
|||
<a name="idm130"></a><a name="K_POINTS"></a><table border="0" style="margin-bottom: 20; table-layout: auto; width: 100%;">
|
||||
<tr><th bgcolor="#ddcba6"><h2 style="margin: 10 10 10 15; text-align: left; white-space: nowrap;">
|
||||
Card: <span class="card">K_POINTS</span> </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: 100%;"><tbody><tr><td><p><pre> see <a href="https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487">https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487</a>
|
||||
<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: 100%;"><tbody><tr><td><p><pre> see <a href="https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS">https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS</a>
|
||||
</pre></p></td></tr></tbody></table></td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<small>
|
||||
This file has been created by helpdoc utility on Fri Dec 15 09:59:11 CET 2023.
|
||||
This file has been created by helpdoc utility on Fri Feb 23 17:16:08 CET 2024.
|
||||
</small>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: kcw.x / KCW / Quantum ESPRESSO (version: 7.3)
|
||||
Program: kcw.x / KCW / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -368,8 +368,8 @@ NAMELIST: &HAM
|
|||
Type: LOGICAL
|
||||
Default: .FALSE.
|
||||
Description: If .true. the interpolated band structure is computed along
|
||||
a path secified with the K_POINTS card ( see PW documentation
|
||||
https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487 )
|
||||
a path specified with the K_POINTS card ( see PW documentation
|
||||
https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS )
|
||||
+--------------------------------------------------------------------
|
||||
|
||||
+--------------------------------------------------------------------
|
||||
|
@ -408,9 +408,9 @@ NAMELIST: &HAM
|
|||
========================================================================
|
||||
CARD: K_POINTS
|
||||
|
||||
see https://www.quantum-espresso.org/Doc/INPUT_PW.html#idm1487
|
||||
see https://www.quantum-espresso.org/Doc/INPUT_PW.html#K_POINTS
|
||||
|
||||
===END OF CARD==========================================================
|
||||
|
||||
|
||||
This file has been created by helpdoc utility on Fri Dec 15 09:59:11 CET 2023
|
||||
This file has been created by helpdoc utility on Fri Feb 23 17:16:08 CET 2024
|
||||
|
|
|
@ -356,9 +356,9 @@ SUBROUTINE pcegterg_gpu(h_psi_ptr, s_psi_ptr, uspp, g_psi_ptr, &
|
|||
! ... approximate inverse iteration
|
||||
!
|
||||
ew_d = ew
|
||||
psi_d(1:npwx*npol, nb1:nb1+notcnv) = psi(1:npwx*npol, nb1:nb1+notcnv)
|
||||
psi_d(1:npwx*npol, nb1:nb1+notcnv-1) = psi(1:npwx*npol, nb1:nb1+notcnv-1)
|
||||
CALL g_psi_ptr( npwx, npw, notcnv, npol, psi_d(1,nb1), ew_d(nb1) )
|
||||
psi(1:npwx*npol, nb1:nb1+notcnv) = psi_d(1:npwx*npol, nb1:nb1+notcnv)
|
||||
psi(1:npwx*npol, nb1:nb1+notcnv-1) = psi_d(1:npwx*npol, nb1:nb1+notcnv-1)
|
||||
!
|
||||
! ... "normalize" correction vectors psi(:,nb1:nbase+notcnv) in
|
||||
! ... order to improve numerical stability of subspace diagonalization
|
||||
|
@ -401,9 +401,9 @@ SUBROUTINE pcegterg_gpu(h_psi_ptr, s_psi_ptr, uspp, g_psi_ptr, &
|
|||
!
|
||||
! ... here compute the hpsi and spsi of the new functions
|
||||
!
|
||||
psi_d(1:npwx*npol, nb1:nb1+notcnv) = psi(1:npwx*npol, nb1:nb1+notcnv)
|
||||
psi_d(1:npwx*npol, nb1:nb1+notcnv-1) = psi(1:npwx*npol, nb1:nb1+notcnv-1)
|
||||
CALL h_psi_ptr( npwx, npw, notcnv, psi_d(1,nb1), hpsi_d(1,nb1) ) ; nhpsi = nhpsi + notcnv
|
||||
hpsi(1:npwx*npol, nb1:nb1+notcnv) = hpsi_d(1:npwx*npol, nb1:nb1+notcnv)
|
||||
hpsi(1:npwx*npol, nb1:nb1+notcnv-1) = hpsi_d(1:npwx*npol, nb1:nb1+notcnv-1)
|
||||
!
|
||||
IF ( uspp ) CALL s_psi_ptr( npwx, npw, notcnv, psi_d(1,nb1), spsi_d(1,nb1) )
|
||||
IF ( uspp ) spsi = spsi_d
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
!
|
||||
!
|
||||
!----------------------------------------------------------------------------
|
||||
! Questa e' una copia di c_bands_nscf intesa per un confronto con
|
||||
! thermo_pw.
|
||||
! Copy of c_bands_nscf, for comparison with thermo_pw.
|
||||
! FIXME: is the above correct?
|
||||
!
|
||||
!
|
||||
SUBROUTINE c_bands_nscf_ph( )
|
||||
|
@ -21,12 +21,12 @@ SUBROUTINE c_bands_nscf_ph( )
|
|||
USE io_files, ONLY : iunhub, iunwfc, nwordwfc, nwordwfcU
|
||||
USE buffers, ONLY : get_buffer, save_buffer, close_buffer, open_buffer
|
||||
USE basis, ONLY : starting_wfc
|
||||
USE klist, ONLY : nkstot, nks, xk, ngk, igk_k, igk_k_d
|
||||
USE klist, ONLY : nkstot, nks, xk, ngk, igk_k
|
||||
USE uspp, ONLY : vkb, nkb
|
||||
USE gvect, ONLY : g
|
||||
USE wvfct, ONLY : et, nbnd, npwx, current_k
|
||||
USE control_lr, ONLY : lgamma
|
||||
USE control_flags, ONLY : ethr, restart, isolve, io_level, iverbosity, use_gpu
|
||||
USE control_flags, ONLY : ethr, restart, isolve, io_level, iverbosity
|
||||
USE ldaU, ONLY : lda_plus_u, Hubbard_projectors, wfcU, lda_plus_u_kind
|
||||
USE lsda_mod, ONLY : current_spin, lsda, isk
|
||||
USE wavefunctions, ONLY : evc
|
||||
|
|
9
Makefile
9
Makefile
|
@ -125,7 +125,7 @@ couple : pw cp
|
|||
if test -d COUPLE ; then \
|
||||
( cd COUPLE ; $(MAKE) TLDEPS= all || exit 1 ) ; fi
|
||||
|
||||
epw: phlibs
|
||||
epw: phlibs w90lib
|
||||
if test -d EPW ; then \
|
||||
( cd EPW ; $(MAKE) all || exit 1; \
|
||||
cd ../bin; ln -fs ../EPW/bin/epw.x . ); fi
|
||||
|
@ -138,7 +138,7 @@ travis : pwall epw
|
|||
if test -d test-suite ; then \
|
||||
( cd test-suite ; make run-travis || exit 1 ) ; fi
|
||||
|
||||
kcw : pwlibs lrmods pp w90
|
||||
kcw : pwlibs lrmods pp w90lib
|
||||
if test -d KCW ; then \
|
||||
( cd KCW ; $(MAKE) all || exit 1 ) ; fi
|
||||
|
||||
|
@ -240,7 +240,10 @@ libmbd:
|
|||
# plugins
|
||||
#########################################################
|
||||
|
||||
w90: bindir $(LAPACK)
|
||||
w90: w90lib
|
||||
( cd install ; $(MAKE) -f plugins_makefile $@ || exit 1 )
|
||||
|
||||
w90lib: bindir $(LAPACK)
|
||||
( cd install ; $(MAKE) -f plugins_makefile $@ || exit 1 )
|
||||
|
||||
want: $(LAPACK)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
set(src_modules
|
||||
additional_kpoints.f90
|
||||
atomic_wfc_mod.f90
|
||||
autopilot.f90
|
||||
basic_algebra_routines.f90
|
||||
becmod.f90
|
||||
|
|
|
@ -9,6 +9,7 @@ MODFLAGS=$(BASEMOD_FLAGS)
|
|||
|
||||
MODULES = \
|
||||
additional_kpoints.o \
|
||||
atomic_wfc_mod.o \
|
||||
autopilot.o \
|
||||
basic_algebra_routines.o \
|
||||
becmod.o \
|
||||
|
|
|
@ -0,0 +1,466 @@
|
|||
!
|
||||
! Copyright (C) 2023-2024 Quantum ESPRESSO Foundation
|
||||
! 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 .
|
||||
!
|
||||
!
|
||||
!-----------------------------------------------------------------------
|
||||
SUBROUTINE atomic_wfc_acc( xk, npw, igk_k, nat, nsp, ityp, tau, &
|
||||
noncolin, domag, angle1, angle2, starting_spin_angle, &
|
||||
npwx, npol, natomwfc, wfcatom )
|
||||
!-----------------------------------------------------------------------
|
||||
!! This routine computes the superposition of atomic wavefunctions
|
||||
!! See below for input variables, output on wfcatom (ACC variable)
|
||||
!! Computation is performed on GPU if available
|
||||
!! Can be called by CP as well (does not use PW-specific modules)
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : tpi
|
||||
USE cell_base, ONLY : omega, tpiba
|
||||
USE gvect, ONLY : mill, eigts1, eigts2, eigts3, g
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL(DP), INTENT(IN) :: xk(3)
|
||||
!! k-point
|
||||
INTEGER, INTENT(IN) :: nat
|
||||
!! number of atoms
|
||||
INTEGER, INTENT(IN) :: nsp
|
||||
!! number of types of atoms
|
||||
INTEGER, INTENT(IN) :: ityp(nat)
|
||||
!! indices of the type of atom for each atom
|
||||
REAL(DP), INTENT(IN) :: tau(3,nat)
|
||||
!! atomic positions (in units of alat)
|
||||
INTEGER, INTENT(IN) :: npw
|
||||
!! number of plane waves
|
||||
INTEGER, INTENT(IN) :: igk_k(npw)
|
||||
!! index of G in the k+G list
|
||||
LOGICAL, INTENT(IN) :: noncolin
|
||||
!! true if calculation noncolinear
|
||||
LOGICAL, INTENT(IN) :: domag
|
||||
!! true if nonzero noncolinear magnetization
|
||||
LOGICAL, INTENT(IN) :: starting_spin_angle
|
||||
!! true if initial spin direction is set
|
||||
REAL(DP), INTENT(IN) :: angle1(nsp)
|
||||
!! angle theta of initial spin direction
|
||||
REAL(DP), INTENT(IN) :: angle2(nsp)
|
||||
!! angle phi of initial spin direction
|
||||
INTEGER, INTENT(IN) :: npol
|
||||
!! npol = 2 for noncolinear calculations
|
||||
INTEGER, INTENT(IN) :: npwx
|
||||
!! max number of plane waves
|
||||
INTEGER, INTENT(IN) :: natomwfc
|
||||
!! number of atomic wavefunctions
|
||||
COMPLEX(DP), INTENT(OUT) :: wfcatom(npwx,npol,natomwfc)
|
||||
!! Superposition of atomic wavefunctions
|
||||
!
|
||||
! ... local variables
|
||||
!
|
||||
INTEGER :: n_starting_wfc, lmax_wfc, nt, l, nb, na, m, lm, ig, iig, &
|
||||
i0, i1, i2, i3
|
||||
COMPLEX(DP) :: kphase
|
||||
REAL(DP) :: arg, px, ux, vx, wx
|
||||
!
|
||||
REAL(DP) :: xk1, xk2, xk3, qgr
|
||||
REAL(DP), ALLOCATABLE :: chiq(:,:,:), qg(:)
|
||||
REAL(DP), ALLOCATABLE :: ylm(:,:), gk(:,:)
|
||||
COMPLEX(DP), ALLOCATABLE :: sk(:)
|
||||
!
|
||||
!
|
||||
! calculate max angular momentum required in wavefunctions
|
||||
lmax_wfc = 0
|
||||
DO nt = 1, nsp
|
||||
lmax_wfc = MAX( lmax_wfc, MAXVAL( upf(nt)%lchi(1:upf(nt)%nwfc) ) )
|
||||
END DO
|
||||
!
|
||||
ALLOCATE( ylm(npw,(lmax_wfc+1)**2), chiq(npw,nwfcm,nsp))
|
||||
ALLOCATE( qg(npw), gk(3,npw), sk(npw) )
|
||||
!$acc data create (ylm, chiq, gk, qg, sk) &
|
||||
!$acc present(g, igk_k, eigts1, eigts2, eigts3, mill, wfcatom)
|
||||
!
|
||||
xk1 = xk(1)
|
||||
xk2 = xk(2)
|
||||
xk3 = xk(3)
|
||||
!
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
iig = igk_k(ig)
|
||||
gk(1,ig) = xk1 + g(1,iig)
|
||||
gk(2,ig) = xk2 + g(2,iig)
|
||||
gk(3,ig) = xk3 + g(3,iig)
|
||||
qg(ig) = gk(1,ig)**2 + gk(2,ig)**2 + gk(3,ig)**2
|
||||
END DO
|
||||
!
|
||||
! ylm = spherical harmonics
|
||||
!
|
||||
CALL ylmr2( (lmax_wfc+1)**2, npw, gk, qg, ylm )
|
||||
!
|
||||
! set now q=|k+G| in atomic units
|
||||
!
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
qg(ig) = SQRT( qg(ig) )*tpiba
|
||||
END DO
|
||||
!
|
||||
! chiq = radial fourier transform of atomic orbitals chi
|
||||
!
|
||||
CALL interp_atwfc ( npw, qg, nwfcm, chiq )
|
||||
!
|
||||
!$acc kernels
|
||||
wfcatom(:,:,:) = (0.0_dp, 0.0_dp)
|
||||
!$acc end kernels
|
||||
!
|
||||
n_starting_wfc = 0
|
||||
!
|
||||
DO na = 1, nat
|
||||
arg = (xk1*tau(1,na) + xk2*tau(2,na) + xk3*tau(3,na)) * tpi
|
||||
kphase = CMPLX( COS(arg), - SIN(arg) ,KIND=DP)
|
||||
!
|
||||
! sk is the structure factor
|
||||
!
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
iig = igk_k(ig)
|
||||
sk(ig) = kphase * eigts1(mill(1,iig),na) * &
|
||||
eigts2(mill(2,iig),na) * &
|
||||
eigts3(mill(3,iig),na)
|
||||
END DO
|
||||
!
|
||||
nt = ityp(na)
|
||||
DO nb = 1, upf(nt)%nwfc
|
||||
IF ( upf(nt)%oc(nb) >= 0.d0 ) THEN
|
||||
!
|
||||
! the factor i^l MUST BE PRESENT in order to produce
|
||||
! wavefunctions for k=0 that are real in real space
|
||||
!
|
||||
IF ( noncolin ) THEN
|
||||
!
|
||||
IF ( upf(nt)%has_so ) THEN
|
||||
!
|
||||
IF (starting_spin_angle.OR..NOT.domag) THEN
|
||||
CALL atomic_wfc_so ( npw, npwx, npol, natomwfc, nsp, nt, &
|
||||
nb, lmax_wfc, ylm, chiq, sk, n_starting_wfc, wfcatom )
|
||||
ELSE
|
||||
CALL atomic_wfc_so_mag ( npw, npwx, npol, natomwfc, nsp, &
|
||||
nt, nb, angle1, angle2, lmax_wfc, ylm, chiq, sk, &
|
||||
n_starting_wfc, wfcatom )
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL atomic_wfc_nc ( npw, npwx, npol, natomwfc, nsp, &
|
||||
nt, nb, angle1, angle2, lmax_wfc, ylm, chiq, sk, &
|
||||
n_starting_wfc, wfcatom )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL atomic_wfc_lsda ( npw, npwx, npol, natomwfc, &
|
||||
nsp, nt, nb, lmax_wfc, ylm, chiq, sk, &
|
||||
n_starting_wfc, wfcatom )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
END IF
|
||||
!
|
||||
END DO
|
||||
!
|
||||
END DO
|
||||
|
||||
IF ( n_starting_wfc /= natomwfc) call errore ('atomic_wfc', &
|
||||
'internal error: some wfcs were lost ', 1 )
|
||||
|
||||
!$acc end data
|
||||
DEALLOCATE( sk, gk, qg, chiq, ylm )
|
||||
|
||||
RETURN
|
||||
|
||||
END SUBROUTINE atomic_wfc_acc
|
||||
!
|
||||
!----------------------------------------------------------------
|
||||
SUBROUTINE atomic_wfc_so( npw, npwx, npol, natomwfc, nsp, nt, &
|
||||
nb, lmax_wfc, ylm, chiq, sk, n_starting_wfc, wfcatom )
|
||||
!------------------------------------------------------------
|
||||
!! Spin-orbit case, no magnetization
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE upf_spinorb, ONLY : rot_ylm, lmaxx
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: nsp, nt, nb, natomwfc, npw, npwx, npol, lmax_wfc
|
||||
REAL(DP), INTENT(IN) :: chiq(npw,nwfcm,nsp)
|
||||
REAL(DP), INTENT(IN) :: ylm(npw,(lmax_wfc+1)**2)
|
||||
COMPLEX(DP), INTENT(IN) :: sk(npw)
|
||||
INTEGER, INTENT(INOUT) :: n_starting_wfc
|
||||
COMPLEX(DP), INTENT(INOUT) :: wfcatom(npwx,npol,natomwfc)
|
||||
!
|
||||
REAL(DP) :: fact(2), fact_is, j
|
||||
COMPLEX(DP) :: rot_ylm_in1, lphase
|
||||
REAL(DP), EXTERNAL :: spinor
|
||||
INTEGER, EXTERNAL :: sph_ind
|
||||
INTEGER :: l, ind, ind1, n1, is, m, ig
|
||||
!
|
||||
j = upf(nt)%jchi(nb)
|
||||
l = upf(nt)%lchi(nb)
|
||||
lphase = (0.d0,1.d0)**l
|
||||
!
|
||||
DO m = -l-1, l
|
||||
fact(1) = spinor(l,j,m,1)
|
||||
fact(2) = spinor(l,j,m,2)
|
||||
IF ( ABS(fact(1)) > 1.d-8 .OR. ABS(fact(2)) > 1.d-8 ) THEN
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF (n_starting_wfc > natomwfc) CALL errore &
|
||||
('atomic_wfc_so', 'internal error: too many wfcs', 1)
|
||||
!
|
||||
DO is = 1, 2
|
||||
fact_is = fact(is)
|
||||
IF (ABS(fact(is)) > 1.d-8) THEN
|
||||
ind = lmaxx + 1 + sph_ind(l,j,m,is)
|
||||
DO n1 = 1, 2*l+1
|
||||
ind1 = l**2+n1
|
||||
rot_ylm_in1 = rot_ylm(ind,n1)
|
||||
IF (ABS(rot_ylm_in1) > 1.d-8) THEN
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
wfcatom(ig,is,n_starting_wfc) = &
|
||||
wfcatom(ig,is,n_starting_wfc) + &
|
||||
lphase * rot_ylm_in1 * sk(ig) * &
|
||||
CMPLX(ylm(ig,ind1)*fact_is* &
|
||||
chiq(ig,nb,nt), KIND=DP)
|
||||
END DO
|
||||
ENDIF
|
||||
ENDDO
|
||||
END IF
|
||||
END DO
|
||||
!
|
||||
END IF
|
||||
END DO
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_so
|
||||
!
|
||||
SUBROUTINE atomic_wfc_so_mag( npw, npwx, npol, natomwfc, nsp, nt, &
|
||||
nb, angle1, angle2, lmax_wfc, ylm, chiq, sk, &
|
||||
n_starting_wfc, wfcatom )
|
||||
!------------------------------------------------------------
|
||||
!
|
||||
!! Spin-orbit case, magnetization along "angle1" and "angle2"
|
||||
!! In the magnetic case we always assume that magnetism is much larger
|
||||
!! than spin-orbit and average the wavefunctions at l+1/2 and l-1/2
|
||||
!! filling then the up and down spinors with the average wavefunctions,
|
||||
!! according to the direction of the magnetization, following what is
|
||||
!! done in the noncollinear case.
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : pi
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: nsp, nt, nb, natomwfc, npw, npwx, npol, lmax_wfc
|
||||
REAL(DP), INTENT(IN) :: chiq(npw,nwfcm,nsp)
|
||||
REAL(DP), INTENT(IN) :: ylm(npw,(lmax_wfc+1)**2)
|
||||
COMPLEX(DP), INTENT(IN) :: sk(npw)
|
||||
REAL(DP), INTENT(IN) :: angle1(*)
|
||||
!! angle theta of initial spin direction
|
||||
REAL(DP), INTENT(IN) :: angle2(*)
|
||||
!! angle phi of initial spin direction
|
||||
INTEGER, INTENT(INOUT) :: n_starting_wfc
|
||||
COMPLEX(DP), INTENT(INOUT) :: wfcatom(npwx,npol,natomwfc)
|
||||
!
|
||||
REAL(DP) :: alpha, gamman, j
|
||||
COMPLEX(DP) :: fup, fdown, aux, lphase
|
||||
INTEGER :: nc, ib, ig, l, m, lm
|
||||
!
|
||||
j = upf(nt)%jchi(nb)
|
||||
l = upf(nt)%lchi(nb)
|
||||
lphase = (0.d0,1.d0)**l
|
||||
!
|
||||
!
|
||||
! This routine creates two functions only in the case j=l+1/2 or exit in the
|
||||
! other case
|
||||
!
|
||||
IF (ABS(j-l+0.5_DP)<1.d-4) RETURN
|
||||
!
|
||||
! Find the functions j=l-1/2
|
||||
!
|
||||
nc = nb
|
||||
IF (l > 0) THEN
|
||||
DO ib = 1, upf(nt)%nwfc
|
||||
IF ((upf(nt)%lchi(ib) == l).AND. &
|
||||
(ABS(upf(nt)%jchi(ib)-l+0.5_DP)<1.d-4)) THEN
|
||||
nc = ib
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
END IF
|
||||
!
|
||||
! and construct the starting wavefunctions as in the noncollinear case.
|
||||
!
|
||||
alpha = angle1(nt)
|
||||
gamman = - angle2(nt) + 0.5d0*pi
|
||||
!
|
||||
DO m = 1, 2*l+1
|
||||
lm = l**2+m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc + 2*l+1 > natomwfc ) CALL errore &
|
||||
('atomic_wfc_so_mag', 'internal error: too many wfcs', 1)
|
||||
!
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
!
|
||||
! Average the two functions
|
||||
!
|
||||
aux = sk(ig)* CMPLX( ylm(ig,lm) * (chiq(ig,nb,nt)*DBLE(l+1) + &
|
||||
chiq(ig,nc,nt)*l)/DBLE(2*l+1), KIND=DP )
|
||||
!
|
||||
! now, rotate wfc as needed
|
||||
! first : rotation with angle alpha around (OX)
|
||||
!
|
||||
fup = CMPLX(COS(0.5d0*alpha), KIND=DP)*aux
|
||||
fdown = (0.d0,1.d0)*CMPLX(SIN(0.5d0*alpha), KIND=DP)*aux
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
+(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fup
|
||||
wfcatom(ig,2,n_starting_wfc) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
-(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fdown
|
||||
!
|
||||
! second: rotation with angle gamma around (OZ)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
fup = CMPLX(COS(0.5d0*(alpha+pi)), KIND=DP)*aux
|
||||
fdown = (0.d0,1.d0)*CMPLX(SIN(0.5d0*(alpha+pi)), KIND=DP)*aux
|
||||
!
|
||||
! second, rotation with angle gamma around (OZ)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc+2*l+1) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
+(0.d0,1.d0)*CMPLX(SIN(0.5d0 *gamman), KIND=DP))*fup
|
||||
wfcatom(ig,2,n_starting_wfc+2*l+1) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
-(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fdown
|
||||
END DO
|
||||
END DO
|
||||
!
|
||||
n_starting_wfc = n_starting_wfc + 2*l+1
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_so_mag
|
||||
!
|
||||
!
|
||||
SUBROUTINE atomic_wfc_nc( npw, npwx, npol, natomwfc, nsp, nt, &
|
||||
nb, angle1, angle2, lmax_wfc, ylm, chiq, sk, &
|
||||
n_starting_wfc, wfcatom )
|
||||
!
|
||||
!! noncolinear case, magnetization along "angle1" and "angle2"
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : pi
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: nsp, nt, nb, natomwfc, npw, npwx, npol, lmax_wfc
|
||||
REAL(DP), INTENT(IN) :: chiq(npw,nwfcm,nsp)
|
||||
REAL(DP), INTENT(IN) :: ylm(npw,(lmax_wfc+1)**2)
|
||||
COMPLEX(DP), INTENT(IN) :: sk(npw)
|
||||
REAL(DP), INTENT(IN) :: angle1(*)
|
||||
!! angle theta of initial spin direction
|
||||
REAL(DP), INTENT(IN) :: angle2(*)
|
||||
!! angle phi of initial spin direction
|
||||
INTEGER, INTENT(INOUT) :: n_starting_wfc
|
||||
COMPLEX(DP), INTENT(INOUT) :: wfcatom(npwx,npol,natomwfc)
|
||||
!
|
||||
REAL(DP) :: alpha, gamman
|
||||
COMPLEX(DP) :: fup, fdown, aux, lphase
|
||||
INTEGER :: m, lm, ig, l
|
||||
!
|
||||
l = upf(nt)%lchi(nb)
|
||||
lphase = (0.d0,1.d0)**l
|
||||
alpha = angle1(nt)
|
||||
gamman = - angle2(nt) + 0.5d0*pi
|
||||
!
|
||||
DO m = 1, 2*l+1
|
||||
lm = l**2 + m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc + 2*l+1 > natomwfc) CALL errore &
|
||||
('atomic_wfc_nc', 'internal error: too many wfcs', 1)
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
aux = sk(ig)*CMPLX(ylm(ig,lm)*chiq(ig,nb,nt), KIND=DP)
|
||||
!
|
||||
! now, rotate wfc as needed
|
||||
! first : rotation with angle alpha around (OX)
|
||||
!
|
||||
fup = CMPLX(COS(0.5d0*alpha), KIND=DP)*aux
|
||||
fdown = (0.d0,1.d0)*CMPLX(SIN(0.5d0*alpha), KIND=DP)*aux
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
+(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fup
|
||||
wfcatom(ig,2,n_starting_wfc) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
-(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fdown
|
||||
!
|
||||
! second: rotation with angle gamma around (OZ)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
fup = CMPLX(COS(0.5d0*(alpha+pi)), KIND=DP)*aux
|
||||
fdown = (0.d0,1.d0)*CMPLX(SIN(0.5d0*(alpha+pi)), KIND=DP)*aux
|
||||
!
|
||||
! second, rotation with angle gamma around (OZ)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc+2*l+1) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
+(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fup
|
||||
wfcatom(ig,2,n_starting_wfc+2*l+1) = (CMPLX(COS(0.5d0*gamman), KIND=DP) &
|
||||
-(0.d0,1.d0)*CMPLX(SIN(0.5d0*gamman), KIND=DP))*fdown
|
||||
END DO
|
||||
END DO
|
||||
n_starting_wfc = n_starting_wfc + 2*l+1
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_nc
|
||||
!
|
||||
!
|
||||
SUBROUTINE atomic_wfc_lsda( npw, npwx, npol, natomwfc, nsp, nt, &
|
||||
nb, lmax_wfc, ylm, chiq, sk, n_starting_wfc, wfcatom )
|
||||
!
|
||||
!! LSDA or nonmagnetic case
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE uspp_param, ONLY : upf, nwfcm
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: nsp, nt, nb, natomwfc, npw, npwx, npol, lmax_wfc
|
||||
REAL(DP), INTENT(IN) :: chiq(npw,nwfcm,nsp)
|
||||
REAL(DP), INTENT(IN) :: ylm(npw,(lmax_wfc+1)**2)
|
||||
COMPLEX(DP), INTENT(IN) :: sk(npw)
|
||||
INTEGER, INTENT(INOUT) :: n_starting_wfc
|
||||
COMPLEX(DP), INTENT(INOUT) :: wfcatom(npwx,npol,natomwfc)
|
||||
!
|
||||
COMPLEX(DP) :: lphase
|
||||
INTEGER :: m, lm, ig, l
|
||||
!
|
||||
l = upf(nt)%lchi(nb)
|
||||
lphase = (0.d0,1.d0)**l
|
||||
DO m = 1, 2 * l + 1
|
||||
lm = l**2 + m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc > natomwfc) CALL errore &
|
||||
('atomic_wfc_lsda', 'internal error: too many wfcs', 1)
|
||||
!
|
||||
!$acc parallel loop
|
||||
DO ig = 1, npw
|
||||
wfcatom(ig,1,n_starting_wfc) = lphase * &
|
||||
sk(ig) * CMPLX(ylm(ig,lm) * chiq(ig,nb,nt), KIND=DP)
|
||||
ENDDO
|
||||
!
|
||||
END DO
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_lsda
|
|
@ -404,7 +404,7 @@ MODULE input_parameters
|
|||
REAL(DP) :: starting_magnetization( nsx ) = 0.0_DP
|
||||
!! PW ONLY
|
||||
|
||||
!!!PARAMETERS FOR TWO-CHEM-CALCULATIONS
|
||||
! PARAMETERS FOR TWO-CHEM-CALCULATIONS
|
||||
REAL(DP) :: degauss_cond = 0.0_DP
|
||||
!broadening for conduction band
|
||||
INTEGER :: nbnd_cond = 0
|
||||
|
|
|
@ -25,7 +25,7 @@ subroutine plot_io (filplot, title, nr1x, nr2x, nr3x, nr1, nr2, &
|
|||
! plot_num, ityp (nat), iflag, i
|
||||
integer :: nr1x, nr2x, nr3x, nr1, nr2, nr3, nat, ntyp, ibrav, &
|
||||
plot_num, ityp (*), iflag, i
|
||||
character (len=3) :: atm(*)
|
||||
character (len=*) :: atm(*)
|
||||
! real(DP) :: celldm (6), gcutm, dual, ecut, zv (ntyp), tau (3, nat) &
|
||||
! , plot (nr1x * nr2x * nr3x), at(3,3)
|
||||
real(DP) :: celldm (6), gcutm, dual, ecut, zv (*), tau (3, *) &
|
||||
|
|
|
@ -38,7 +38,7 @@ SUBROUTINE plot_rism(filplot, title, nsite, nr1x, nr2x, nr3x, nr1, nr2, nr3, &
|
|||
REAL(DP), INTENT(INOUT) :: gcutm
|
||||
LOGICAL, INTENT(INOUT) :: laue
|
||||
CHARACTER(LEN=12), INTENT(INOUT) :: asite(1:*)
|
||||
CHARACTER(LEN=3), INTENT(INOUT) :: atm(1:*)
|
||||
CHARACTER(LEN=*), INTENT(INOUT) :: atm(1:*)
|
||||
INTEGER, INTENT(INOUT) :: ityp(1:*)
|
||||
REAL(DP), INTENT(INOUT) :: zv(1:*)
|
||||
REAL(DP), INTENT(INOUT) :: tau(3, 1:*)
|
||||
|
|
|
@ -433,7 +433,7 @@ END SUBROUTINE qmmm_minimum_image
|
|||
|
||||
CALL mpi_send(tmp_buf,3*nat_qm,MPI_DOUBLE_PRECISION, 0,QMMM_TAG_FORCE,qmmm_comm,ierr)
|
||||
!
|
||||
!!!! Note, not used if ec_alg is false. Optimize excluding this send as well
|
||||
! Note, not used if ec_alg is false. Optimize excluding this send as well
|
||||
force_mm = force_mm * QMMM_FORCE_CONV
|
||||
CALL mpi_send(force_mm,3*nat_mm,MPI_DOUBLE_PRECISION, 0,QMMM_TAG_FORCE2,qmmm_comm,ierr)
|
||||
END IF
|
||||
|
|
|
@ -2620,9 +2620,9 @@ CONTAINS
|
|||
CALL errore( 'card_hubbard', 'Too many occurrences of V for the same couple of atoms', i)
|
||||
ENDIF
|
||||
!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! Read the data for the first atom !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!**********************************************************************************!
|
||||
!* Read the data for the first atom *!
|
||||
!**********************************************************************************!
|
||||
!
|
||||
! Column 3: Read the atomic type name and the Hubbard manifold (e.g. Fe-3d)
|
||||
CALL get_field(2, field_str, input_line)
|
||||
|
@ -2756,9 +2756,9 @@ CONTAINS
|
|||
ENDIF
|
||||
ENDIF
|
||||
!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! Read the data for the second atom !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!**********************************************************************************!
|
||||
!* Read the data for the second atom *!
|
||||
!**********************************************************************************!
|
||||
!
|
||||
! Column 3: Read the atomic type name and the Hubbard manifold (e.g. O-2p)
|
||||
CALL get_field(3, field_str, input_line)
|
||||
|
|
|
@ -278,6 +278,7 @@ SUBROUTINE upf_bcast(upf, ionode, ionode_id, comm)
|
|||
!! ID of the processor that broadcasts
|
||||
INTEGER, INTENT(in) :: comm
|
||||
!! MPI communicator
|
||||
INTEGER :: nbeta
|
||||
!
|
||||
CALL mp_bcast (upf%nv, ionode_id, comm )
|
||||
CALL mp_bcast (upf%generated, ionode_id, comm )
|
||||
|
@ -330,26 +331,21 @@ SUBROUTINE upf_bcast(upf, ionode, ionode_id, comm)
|
|||
ENDIF
|
||||
!
|
||||
IF ( .not. ionode) THEN
|
||||
! next instructions prevents trouble in following broadcasts
|
||||
nbeta = MAX (1, upf%nbeta)
|
||||
ALLOCATE( upf%kbeta(nbeta), &
|
||||
upf%lll(nbeta), &
|
||||
upf%beta(upf%mesh, nbeta), &
|
||||
upf%dion(nbeta, nbeta), &
|
||||
upf%rcut(nbeta), &
|
||||
upf%rcutus(nbeta), &
|
||||
upf%els_beta(nbeta) )
|
||||
! not sure next instructions are needed
|
||||
IF ( upf%nbeta == 0) THEN
|
||||
upf%nqf = 0
|
||||
upf%nqlc= 0
|
||||
upf%qqq_eps= -1._dp
|
||||
upf%kkbeta = 0
|
||||
ALLOCATE( upf%kbeta(1), &
|
||||
upf%lll(1), &
|
||||
upf%beta(upf%mesh,1), &
|
||||
upf%dion(1,1), &
|
||||
upf%rcut(1), &
|
||||
upf%rcutus(1), &
|
||||
upf%els_beta(1) )
|
||||
ELSE
|
||||
ALLOCATE( upf%kbeta(upf%nbeta), &
|
||||
upf%lll(upf%nbeta), &
|
||||
upf%beta(upf%mesh, upf%nbeta), &
|
||||
upf%dion(upf%nbeta, upf%nbeta),&
|
||||
upf%rcut(upf%nbeta), &
|
||||
upf%rcutus(upf%nbeta), &
|
||||
upf%els_beta(upf%nbeta) )
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
|
|
|
@ -74,7 +74,6 @@
|
|||
!! Set local and global dimensions, allocate arrays
|
||||
!
|
||||
USE mp, ONLY: mp_max, mp_sum
|
||||
USE control_flags, ONLY : use_gpu
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: ngm_
|
||||
INTEGER, INTENT(IN) :: comm
|
||||
|
@ -109,7 +108,6 @@
|
|||
SUBROUTINE deallocate_gvect(vc)
|
||||
!! Deallocate G-vector related arrays.
|
||||
!
|
||||
USE control_flags, ONLY : use_gpu
|
||||
IMPLICIT NONE
|
||||
!
|
||||
LOGICAL, OPTIONAL, INTENT(IN) :: vc
|
||||
|
@ -183,7 +181,6 @@
|
|||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : eps8
|
||||
USE control_flags, ONLY : use_gpu
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
|
|
@ -108,434 +108,3 @@
|
|||
END MODULE wavefunctions
|
||||
!=----------------------------------------------------------------------------=!
|
||||
|
||||
module atomic_wfc_init
|
||||
|
||||
implicit none
|
||||
|
||||
contains
|
||||
|
||||
SUBROUTINE atomic_wfc_nog(ik, wfcatom, omega, tpiba, nat, ntyp, ityp, tau, natomwfc, &
|
||||
mill, eigts1_, eigts2_, eigts3_, g, xk, igk_k, ngk, npwx, &
|
||||
upf, nwfcm, noncolin, domag, npol, angle1, angle2, starting_spin_angle, &
|
||||
rot_ylm)
|
||||
|
||||
|
||||
USE kinds, ONLY : DP
|
||||
USE pseudo_types, ONLY : pseudo_upf ! type
|
||||
USE constants, ONLY : tpi, fpi, pi ! parameter
|
||||
USE upf_spinorb, ONLY : lmaxx ! parameter
|
||||
|
||||
|
||||
implicit none
|
||||
! old global variables
|
||||
REAL(DP), INTENT(IN) :: omega, tpiba, tau(:,:), g(:,:), xk(:,:), angle1(:), angle2(:)
|
||||
integer, intent(IN) :: nat, ntyp, ityp(:), natomwfc, mill(:,:), igk_k(:,:), ngk(:), &
|
||||
npwx, nwfcm, npol
|
||||
complex(DP), intent(in),target, contiguous :: eigts1_(:,:), eigts2_(:,:), eigts3_(:,:)
|
||||
complex(dp), intent(in) :: rot_ylm(:,:)
|
||||
complex(dp), pointer :: eigts1(:,:), eigts2(:,:), eigts3(:,:)
|
||||
type(pseudo_upf), intent(in) :: upf(:)
|
||||
logical, intent(in) :: noncolin, domag, starting_spin_angle
|
||||
|
||||
INTEGER, INTENT(IN) :: ik
|
||||
!! k-point index
|
||||
COMPLEX(DP), INTENT(INOUT) :: wfcatom( npwx, npol, natomwfc )
|
||||
!! Superposition of atomic wavefunctions
|
||||
!
|
||||
! ... local variables
|
||||
!
|
||||
INTEGER :: eigts_shape(2)
|
||||
INTEGER :: n_starting_wfc, lmax_wfc, nt, l, nb, na, m, lm, ig, iig, &
|
||||
i0, i1, i2, i3, npw
|
||||
REAL(DP), ALLOCATABLE :: qg(:), ylm (:,:), chiq (:,:,:), gk (:,:)
|
||||
COMPLEX(DP), ALLOCATABLE :: sk (:), aux(:)
|
||||
COMPLEX(DP) :: kphase, lphase
|
||||
REAL(DP) :: arg
|
||||
|
||||
|
||||
CALL start_clock( 'atomic_wfc' )
|
||||
|
||||
!Fortran has problems to transmit the information about array's bounds. Here we use a pointer to walk around the issue
|
||||
eigts_shape = shape(eigts1_)
|
||||
eigts1(-eigts_shape(1)/2:eigts_shape(1)/2,1:eigts_shape(2) )=>eigts1_
|
||||
eigts_shape = shape(eigts2_)
|
||||
eigts2(-eigts_shape(1)/2:eigts_shape(1)/2,1:eigts_shape(2) )=>eigts2_
|
||||
eigts_shape = shape(eigts3_)
|
||||
eigts3(-eigts_shape(1)/2:eigts_shape(1)/2,1:eigts_shape(2) )=>eigts3_
|
||||
|
||||
! calculate max angular momentum required in wavefunctions
|
||||
lmax_wfc = 0
|
||||
DO nt = 1, ntyp
|
||||
lmax_wfc = MAX( lmax_wfc, MAXVAL( upf(nt)%lchi(1:upf(nt)%nwfc) ) )
|
||||
END DO
|
||||
!
|
||||
npw = ngk(ik)
|
||||
!
|
||||
ALLOCATE( ylm (npw,(lmax_wfc+1)**2), chiq(npw,nwfcm,ntyp), &
|
||||
gk(3,npw), qg(npw) )
|
||||
!
|
||||
DO ig = 1, npw
|
||||
iig = igk_k (ig,ik)
|
||||
gk (1,ig) = xk(1, ik) + g(1,iig)
|
||||
gk (2,ig) = xk(2, ik) + g(2,iig)
|
||||
gk (3,ig) = xk(3, ik) + g(3,iig)
|
||||
qg(ig) = gk(1, ig)**2 + gk(2, ig)**2 + gk(3, ig)**2
|
||||
END DO
|
||||
!
|
||||
! ylm = spherical harmonics
|
||||
!
|
||||
CALL ylmr2( (lmax_wfc+1)**2, npw, gk, qg, ylm )
|
||||
!
|
||||
! set now q=|k+G| in atomic units
|
||||
!
|
||||
DO ig = 1, npw
|
||||
qg(ig) = SQRT( qg(ig) )*tpiba
|
||||
END DO
|
||||
!
|
||||
CALL interp_atwfc ( npw, qg, nwfcm, chiq )
|
||||
!
|
||||
DEALLOCATE( qg, gk )
|
||||
ALLOCATE( aux(npw), sk(npw) )
|
||||
!
|
||||
wfcatom(:,:,:) = (0.0_dp, 0.0_dp)
|
||||
n_starting_wfc = 0
|
||||
!
|
||||
DO na = 1, nat
|
||||
arg = (xk(1,ik)*tau(1,na) + xk(2,ik)*tau(2,na) + xk(3,ik)*tau(3,na)) * tpi
|
||||
kphase = CMPLX( COS(arg), - SIN(arg) ,KIND=DP)
|
||||
!
|
||||
! sk is the structure factor
|
||||
!
|
||||
DO ig = 1, npw
|
||||
iig = igk_k (ig,ik)
|
||||
sk (ig) = kphase * eigts1 (mill (1,iig), na) * &
|
||||
eigts2 (mill (2,iig), na) * &
|
||||
eigts3 (mill (3,iig), na)
|
||||
END DO
|
||||
!
|
||||
nt = ityp (na)
|
||||
DO nb = 1, upf(nt)%nwfc
|
||||
IF ( upf(nt)%oc(nb) >= 0.d0 ) THEN
|
||||
l = upf(nt)%lchi(nb)
|
||||
lphase = (0.d0,1.d0)**l
|
||||
!
|
||||
! the factor i^l MUST BE PRESENT in order to produce
|
||||
! wavefunctions for k=0 that are real in real space
|
||||
!
|
||||
IF ( noncolin ) THEN
|
||||
!
|
||||
IF ( upf(nt)%has_so ) THEN
|
||||
!
|
||||
IF (starting_spin_angle.OR..NOT.domag) THEN
|
||||
CALL atomic_wfc_so( )
|
||||
ELSE
|
||||
CALL atomic_wfc_so_mag( )
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL atomic_wfc_nc( )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL atomic_wfc___( )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
END IF
|
||||
!
|
||||
END DO
|
||||
!
|
||||
END DO
|
||||
|
||||
IF ( n_starting_wfc /= natomwfc) call errore ('atomic_wfc', &
|
||||
'internal error: some wfcs were lost ', 1 )
|
||||
|
||||
DEALLOCATE( aux, sk, chiq, ylm )
|
||||
|
||||
CALL stop_clock( 'atomic_wfc' )
|
||||
|
||||
RETURN
|
||||
|
||||
CONTAINS
|
||||
!----------------------------------------------------------------
|
||||
SUBROUTINE atomic_wfc_so( )
|
||||
!------------------------------------------------------------
|
||||
!! Spin-orbit case.
|
||||
!
|
||||
implicit none
|
||||
REAL(DP) :: fact(2), j
|
||||
REAL(DP), EXTERNAL :: spinor
|
||||
INTEGER :: ind, ind1, n1, is, sph_ind
|
||||
!
|
||||
j = upf(nt)%jchi(nb)
|
||||
DO m = -l-1, l
|
||||
fact(1) = spinor(l,j,m,1)
|
||||
fact(2) = spinor(l,j,m,2)
|
||||
IF ( ABS(fact(1)) > 1.d-8 .OR. ABS(fact(2)) > 1.d-8 ) THEN
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF (n_starting_wfc > natomwfc) CALL errore &
|
||||
('atomic_wfc_so', 'internal error: too many wfcs', 1)
|
||||
DO is=1,2
|
||||
IF (abs(fact(is)) > 1.d-8) THEN
|
||||
ind=lmaxx+1+sph_ind(l,j,m,is)
|
||||
aux=(0.d0,0.d0)
|
||||
DO n1=1,2*l+1
|
||||
ind1=l**2+n1
|
||||
if (abs(rot_ylm(ind,n1)) > 1.d-8) &
|
||||
aux(:)=aux(:)+rot_ylm(ind,n1)*ylm(:,ind1)
|
||||
ENDDO
|
||||
do ig = 1, npw
|
||||
wfcatom(ig,is,n_starting_wfc) = lphase*fact(is)*&
|
||||
sk(ig)*aux(ig)*chiq (ig, nb, nt)
|
||||
END DO
|
||||
ELSE
|
||||
wfcatom(:,is,n_starting_wfc) = (0.d0,0.d0)
|
||||
END IF
|
||||
END DO
|
||||
END IF
|
||||
END DO
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_so
|
||||
!
|
||||
SUBROUTINE atomic_wfc_so_mag( )
|
||||
!
|
||||
!! Spin-orbit case, magnetization along "angle1" and "angle2"
|
||||
!! In the magnetic case we always assume that magnetism is much larger
|
||||
!! than spin-orbit and average the wavefunctions at l+1/2 and l-1/2
|
||||
!! filling then the up and down spinors with the average wavefunctions,
|
||||
!! according to the direction of the magnetization, following what is
|
||||
!! done in the noncollinear case.
|
||||
!
|
||||
implicit none
|
||||
REAL(DP) :: alpha, gamman, j
|
||||
COMPLEX(DP) :: fup, fdown
|
||||
REAL(DP), ALLOCATABLE :: chiaux(:)
|
||||
INTEGER :: nc, ib
|
||||
!
|
||||
j = upf(nt)%jchi(nb)
|
||||
!
|
||||
! This routine creates two functions only in the case j=l+1/2 or exit in the
|
||||
! other case
|
||||
!
|
||||
IF (ABS(j-l+0.5_DP)<1.d-4) RETURN
|
||||
|
||||
ALLOCATE(chiaux(npw))
|
||||
!
|
||||
! Find the functions j=l-1/2
|
||||
!
|
||||
IF (l == 0) THEN
|
||||
chiaux(:)=chiq(:,nb,nt)
|
||||
ELSE
|
||||
DO ib=1, upf(nt)%nwfc
|
||||
IF ((upf(nt)%lchi(ib) == l).AND. &
|
||||
(ABS(upf(nt)%jchi(ib)-l+0.5_DP)<1.d-4)) THEN
|
||||
nc=ib
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
!
|
||||
! Average the two functions
|
||||
!
|
||||
chiaux(:)=(chiq(:,nb,nt)*(l+1.0_DP)+chiq(:,nc,nt)*l)/(2.0_DP*l+1.0_DP)
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! and construct the starting wavefunctions as in the noncollinear case.
|
||||
!
|
||||
alpha = angle1(nt)
|
||||
gamman = - angle2(nt) + 0.5d0*pi
|
||||
!
|
||||
DO m = 1, 2 * l + 1
|
||||
lm = l**2 + m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc + 2*l+1 > natomwfc ) CALL errore &
|
||||
('atomic_wfc_so_mag', 'internal error: too many wfcs', 1)
|
||||
DO ig = 1, npw
|
||||
aux(ig) = sk(ig)*ylm(ig,lm)*chiaux(ig)
|
||||
END DO
|
||||
!
|
||||
! now, rotate wfc as needed
|
||||
! first : rotation with angle alpha around (OX)
|
||||
!
|
||||
DO ig = 1, npw
|
||||
fup = cos(0.5d0*alpha)*aux(ig)
|
||||
fdown = (0.d0,1.d0)*sin(0.5d0*alpha)*aux(ig)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc) = (cos(0.5d0*gamman) &
|
||||
+(0.d0,1.d0)*sin(0.5d0*gamman))*fup
|
||||
wfcatom(ig,2,n_starting_wfc) = (cos(0.5d0*gamman) &
|
||||
-(0.d0,1.d0)*sin(0.5d0*gamman))*fdown
|
||||
!
|
||||
! second: rotation with angle gamma around (OZ)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
fup = cos(0.5d0*(alpha+pi))*aux(ig)
|
||||
fdown = (0.d0,1.d0)*sin(0.5d0*(alpha+pi))*aux(ig)
|
||||
!
|
||||
! second, rotation with angle gamma around (OZ)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc+2*l+1) = (cos(0.5d0*gamman) &
|
||||
+(0.d0,1.d0)*sin(0.5d0 *gamman))*fup
|
||||
wfcatom(ig,2,n_starting_wfc+2*l+1) = (cos(0.5d0*gamman) &
|
||||
-(0.d0,1.d0)*sin(0.5d0*gamman))*fdown
|
||||
END DO
|
||||
END DO
|
||||
n_starting_wfc = n_starting_wfc + 2*l+1
|
||||
DEALLOCATE( chiaux )
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_so_mag
|
||||
!
|
||||
SUBROUTINE atomic_wfc_nc( )
|
||||
!
|
||||
!! noncolinear case, magnetization along "angle1" and "angle2"
|
||||
!
|
||||
implicit none
|
||||
REAL(DP) :: alpha, gamman
|
||||
COMPLEX(DP) :: fup, fdown
|
||||
!
|
||||
alpha = angle1(nt)
|
||||
gamman = - angle2(nt) + 0.5d0*pi
|
||||
!
|
||||
DO m = 1, 2 * l + 1
|
||||
lm = l**2 + m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc + 2*l+1 > natomwfc) CALL errore &
|
||||
('atomic_wfc_nc', 'internal error: too many wfcs', 1)
|
||||
DO ig = 1, npw
|
||||
aux(ig) = sk(ig)*ylm(ig,lm)*chiq(ig,nb,nt)
|
||||
END DO
|
||||
!
|
||||
! now, rotate wfc as needed
|
||||
! first : rotation with angle alpha around (OX)
|
||||
!
|
||||
DO ig = 1, npw
|
||||
fup = cos(0.5d0*alpha)*aux(ig)
|
||||
fdown = (0.d0,1.d0)*sin(0.5d0*alpha)*aux(ig)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc) = (cos(0.5d0*gamman) &
|
||||
+(0.d0,1.d0)*sin(0.5d0*gamman))*fup
|
||||
wfcatom(ig,2,n_starting_wfc) = (cos(0.5d0*gamman) &
|
||||
-(0.d0,1.d0)*sin(0.5d0*gamman))*fdown
|
||||
!
|
||||
! second: rotation with angle gamma around (OZ)
|
||||
!
|
||||
! Now, build the orthogonal wfc
|
||||
! first rotation with angle (alpha+pi) around (OX)
|
||||
!
|
||||
fup = cos(0.5d0*(alpha+pi))*aux(ig)
|
||||
fdown = (0.d0,1.d0)*sin(0.5d0*(alpha+pi))*aux(ig)
|
||||
!
|
||||
! second, rotation with angle gamma around (OZ)
|
||||
!
|
||||
wfcatom(ig,1,n_starting_wfc+2*l+1) = (cos(0.5d0*gamman) &
|
||||
+(0.d0,1.d0)*sin(0.5d0 *gamman))*fup
|
||||
wfcatom(ig,2,n_starting_wfc+2*l+1) = (cos(0.5d0*gamman) &
|
||||
-(0.d0,1.d0)*sin(0.5d0*gamman))*fdown
|
||||
END DO
|
||||
END DO
|
||||
n_starting_wfc = n_starting_wfc + 2*l+1
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_nc
|
||||
|
||||
SUBROUTINE atomic_wfc___( )
|
||||
!
|
||||
! ... LSDA or nonmagnetic case
|
||||
!
|
||||
implicit none
|
||||
DO m = 1, 2 * l + 1
|
||||
lm = l**2 + m
|
||||
n_starting_wfc = n_starting_wfc + 1
|
||||
IF ( n_starting_wfc > natomwfc) CALL errore &
|
||||
('atomic_wfc___', 'internal error: too many wfcs', 1)
|
||||
!
|
||||
DO ig = 1, npw
|
||||
wfcatom (ig, 1, n_starting_wfc) = lphase * &
|
||||
sk (ig) * ylm (ig, lm) * chiq (ig, nb, nt)
|
||||
ENDDO
|
||||
!
|
||||
END DO
|
||||
!
|
||||
END SUBROUTINE atomic_wfc___
|
||||
!
|
||||
END SUBROUTINE atomic_wfc_nog
|
||||
|
||||
SUBROUTINE atomic_wfc_cp(evc, omega, tpiba, nat, ntyp, ityp, tau, natomwfc, &
|
||||
mill, eigts1, eigts2, eigts3, g, iupdwn, &
|
||||
npwx, &
|
||||
upf, nwfcm, npol )
|
||||
|
||||
|
||||
USE kinds, ONLY : DP
|
||||
USE pseudo_types, ONLY : pseudo_upf
|
||||
USE mp_global, ONLY : intra_bgrp_comm
|
||||
use uspp_data, ONLY : nqx, tab_at, dq
|
||||
use uspp_param, ONLY : nsp
|
||||
USE gvecw, ONLY : ecutwfc
|
||||
|
||||
implicit none
|
||||
! old global variables
|
||||
REAL(DP), INTENT(IN) :: omega, tpiba, tau(:,:), g(:,:)
|
||||
integer, intent(IN) :: nat, ntyp, ityp(:), natomwfc, mill(:,:), &
|
||||
npwx, nwfcm, npol, iupdwn(2)
|
||||
complex(DP), intent(in) :: eigts1(:,:), eigts2(:,:), eigts3(:,:)
|
||||
type(pseudo_upf), intent(in) :: upf(:)
|
||||
|
||||
COMPLEX(DP), intent(inout) :: evc (:,:)
|
||||
COMPLEX(DP) :: wfcatom( npwx, npol, natomwfc )
|
||||
!! Superposition of atomic wavefunctions
|
||||
|
||||
!cp specific settings (gamma only)
|
||||
! xk is 0,0,0, igk_k is the identical permutation, and ngk is 1
|
||||
! wfcatom has 2 dimensions (npwx, nbnd*nspin)
|
||||
! looks like only nspin=1,2 are implemented. The layout of the wfc is different:
|
||||
! in cp it is the equivalent of (npwx, nbnd, nspin ), while in pw is (npwx, nspin, nbnd)
|
||||
real(dp) :: xk(3,1)
|
||||
integer :: ngk(1), igk_k(npwx,1), i, ik, ipol, sh(2)
|
||||
|
||||
complex(dp), allocatable :: rot_ylm(:,:)
|
||||
REAL(DP), allocatable :: angle1(:), angle2(:)
|
||||
!! dummy, unused and not allocated variables
|
||||
|
||||
! identity permutation
|
||||
do i=1,npwx
|
||||
igk_k(i,1)=i
|
||||
enddo
|
||||
! gamma point only
|
||||
xk=0.d0
|
||||
ngk(1) = npwx
|
||||
ik=1
|
||||
nqx = INT( (SQRT(ecutwfc) / dq + 4) * 1.d0 )
|
||||
allocate(tab_at(nqx,nwfcm,nsp))
|
||||
call init_tab_atwfc(omega, intra_bgrp_comm)
|
||||
|
||||
! only nospin / LSDA in CP
|
||||
call atomic_wfc_nog(ik, wfcatom, omega, tpiba, nat, ntyp, ityp, tau, natomwfc, &
|
||||
mill, eigts1, eigts2, eigts3, g, xk, igk_k, ngk, npwx, &
|
||||
upf, nwfcm, .false., .false., npol, angle1, angle2, .false., &
|
||||
rot_ylm)
|
||||
|
||||
sh = shape(evc)
|
||||
|
||||
!write the result in the correct order in evc
|
||||
do i=1,min(natomwfc,sh(2)/npol)
|
||||
do ipol = 1, npol
|
||||
evc(:,i + iupdwn(ipol)-1) = wfcatom(:,ipol,i)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
deallocate (tab_at)
|
||||
|
||||
end subroutine atomic_wfc_cp
|
||||
|
||||
end module atomic_wfc_init
|
|
@ -17,7 +17,7 @@ SUBROUTINE xsf_struct (alat, at, nat, tau, atm, ityp, ounit)
|
|||
USE constants, ONLY : BOHR_RADIUS_ANGS
|
||||
IMPLICIT NONE
|
||||
INTEGER :: nat, ityp (nat), ounit
|
||||
CHARACTER(len=3) :: atm(*)
|
||||
CHARACTER(len=*) :: atm(*)
|
||||
real(DP) :: alat, tau (3, nat), at (3, 3)
|
||||
! --
|
||||
INTEGER :: i, j, n
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
neb.x / NEB / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
neb.x / NEB / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: neb.x / NEB / Quantum ESPRESSO (version: 7.3)
|
||||
Program: neb.x / NEB / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
\documentclass[12pt,a4paper]{article}
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qe{{\sc Quantum ESPRESSO}}
|
||||
\def\NEB{\texttt{PWneb}} % to be decided
|
||||
\usepackage{html}
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
dynmat.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.2)</span>
|
||||
dynmat.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
@ -376,7 +376,7 @@ coupling calculation.
|
|||
</td></tr>
|
||||
</table>
|
||||
<small>
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:11 CET 2023.
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024.
|
||||
</small>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: dynmat.x / PHonon / Quantum ESPRESSO (version: 7.2)
|
||||
Program: dynmat.x / PHonon / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -202,4 +202,4 @@ NAMELIST: &INPUT
|
|||
===END OF NAMELIST======================================================
|
||||
|
||||
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:11 CET 2023
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
matdyn.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.2)</span>
|
||||
matdyn.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
@ -765,7 +765,7 @@ if you want to have q = 0 results for two different directions
|
|||
</td></tr>
|
||||
</table>
|
||||
<small>
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:12 CET 2023.
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:45 CET 2024.
|
||||
</small>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: matdyn.x / PHonon / Quantum ESPRESSO (version: 7.2)
|
||||
Program: matdyn.x / PHonon / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -502,4 +502,4 @@ ________________________________________________________________________
|
|||
if you want to have q = 0 results for two different directions
|
||||
|
||||
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:12 CET 2023
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:45 CET 2024
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
ph.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
ph.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: ph.x / PHonon / Quantum ESPRESSO (version: 7.3)
|
||||
Program: ph.x / PHonon / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
postahc.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.2)</span>
|
||||
postahc.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
@ -308,7 +308,7 @@ If .false., ahc_dw.bin file must be present in <a href="#ahc_dir">ahc_dir</a>.
|
|||
</td></tr>
|
||||
</table>
|
||||
<small>
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:12 CET 2023.
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024.
|
||||
</small>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: postahc.x / PHonon / Quantum ESPRESSO (version: 7.2)
|
||||
Program: postahc.x / PHonon / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -150,4 +150,4 @@ NAMELIST: &INPUT
|
|||
===END OF NAMELIST======================================================
|
||||
|
||||
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:12 CET 2023
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
q2r.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.2)</span>
|
||||
q2r.x / PHonon / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
@ -323,7 +323,7 @@ long as <b>q=0 is the first</b>.
|
|||
</td></tr>
|
||||
</table>
|
||||
<small>
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:13 CET 2023.
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024.
|
||||
</small>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: q2r.x / PHonon / Quantum ESPRESSO (version: 7.2)
|
||||
Program: q2r.x / PHonon / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
@ -194,4 +194,4 @@ ________________________________________________________________________
|
|||
ENDIF
|
||||
________________________________________________________________________
|
||||
|
||||
This file has been created by helpdoc utility on Sat Mar 18 19:08:13 CET 2023
|
||||
This file has been created by helpdoc utility on Wed Feb 21 14:33:44 CET 2024
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
\documentclass[12pt,a4paper]{article}
|
||||
\def\version{7.3}
|
||||
\def\version{7.3.1}
|
||||
\def\qe{{\sc Quantum ESPRESSO}}
|
||||
|
||||
\usepackage{html}
|
||||
|
|
|
@ -19,7 +19,7 @@ subroutine addusddens (drhoscf, dbecsum, mode0, npe, iflag)
|
|||
!! from solve_* (iflag=0) drhoscf and dbecsum contain the contribution
|
||||
!! of the solution of the linear system and the terms due to alphasum
|
||||
!! and becsum are not added. In this case the change of the charge
|
||||
!! calculated by drho (called \Delta \rho in [1]) is read from file
|
||||
!! calculated by drho (called \(\Delta \rho\) in [1]) is read from file
|
||||
!! and added. The contribution of the change of
|
||||
!! the Fermi energy is not calculated here but added later by ef_shift.
|
||||
!! [1] PRB 64, 235118 (2001).
|
||||
|
|
|
@ -209,7 +209,7 @@ SUBROUTINE compute_a2F()
|
|||
USE wvfct, ONLY : et, nbnd
|
||||
USE io_global, ONLY : stdout
|
||||
USE cell_base, ONLY : at, bg
|
||||
USE klist, ONLY : nkstot
|
||||
USE klist, ONLY : nkstot, nks
|
||||
USE disp, ONLY : nq1, nq2, nq3, nqs, x_q
|
||||
USE symm_base, ONLY : nsym, s, time_reversal, t_rev
|
||||
USE lsda_mod, ONLY : nspin
|
||||
|
@ -254,6 +254,7 @@ SUBROUTINE compute_a2F()
|
|||
nspin = 1
|
||||
nbnd = nmodes
|
||||
nkstot = nqs
|
||||
nks = nqs
|
||||
CALL opt_tetra_partialdos(1, kresolveddos, nfreq, nat + 1, 1, &
|
||||
& 0.0_dp, DeltaE, proj, pdos, dos, 1)
|
||||
!
|
||||
|
@ -376,6 +377,7 @@ PROGRAM alpha2f
|
|||
USE io_global, ONLY : qestdin, ionode
|
||||
USE modes, ONLY : nmodes
|
||||
USE ions_base, ONLY : nat
|
||||
USE mp_world, ONLY : nproc
|
||||
!
|
||||
USE alpha2f_vals, ONLY : nfreq
|
||||
USE alpha2f_routines, ONLY : read_lam, compute_a2f, compute_lambda, read_polarization
|
||||
|
@ -387,9 +389,10 @@ PROGRAM alpha2f
|
|||
!
|
||||
NAMELIST /INPUTA2F/ nfreq
|
||||
!
|
||||
#if defined(__MPI)
|
||||
CALL mp_startup()
|
||||
#endif
|
||||
!
|
||||
IF ( nproc > 1 ) CALL errore('alpha2f','Number of processes > 1 is not supported.', nproc)
|
||||
!
|
||||
CALL environment_start('ALPHA2F')
|
||||
in_alpha2f = .TRUE.
|
||||
!
|
||||
|
@ -412,8 +415,6 @@ PROGRAM alpha2f
|
|||
END IF
|
||||
!
|
||||
CALL environment_end('ALPHA2F')
|
||||
#if defined(__MPI)
|
||||
CALL mp_global_end()
|
||||
#endif
|
||||
!
|
||||
END PROGRAM alpha2f
|
||||
|
|
|
@ -91,11 +91,12 @@ SUBROUTINE read_dyn_from_file( nqs, xq, epsil, lrigid, &
|
|||
!----------------------------------------------------------------------------
|
||||
!! Read dynamical matrix from file.
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE kinds, ONLY : DP
|
||||
USE dynamicalq, ONLY: phiq, tau, ityp, zeu
|
||||
USE io_global, ONLY : ionode, ionode_id, stdout
|
||||
USE mp, ONLY : mp_bcast
|
||||
USE io_global, ONLY : ionode, ionode_id, stdout
|
||||
USE mp, ONLY : mp_bcast
|
||||
USE mp_images, ONLY : intra_image_comm
|
||||
USE ions_base, ONLY : ntypx
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -104,15 +105,15 @@ SUBROUTINE read_dyn_from_file( nqs, xq, epsil, lrigid, &
|
|||
LOGICAL :: lrigid
|
||||
INTEGER :: nqs, ntyp, nat, ibrav
|
||||
REAL(DP) :: epsil(3,3)
|
||||
REAL(DP) :: xq(3,48), celldm(6), at(3,3), amass(ntyp)
|
||||
CHARACTER(LEN=3) atm(ntyp)
|
||||
REAL(DP) :: xq(3,48), celldm(6), at(3,3), amass(ntypx)
|
||||
CHARACTER(LEN=6) atm(ntypx)
|
||||
! local variables
|
||||
INTEGER :: ntyp1,nat1,ibrav1,ityp1
|
||||
INTEGER :: i, j, na, nb, nt, ios
|
||||
REAL(DP) :: tau1(3), amass1, at1(3,3), celldm1(6), q2
|
||||
REAL(DP) :: phir(3),phii(3)
|
||||
CHARACTER(LEN=75) :: line
|
||||
CHARACTER(LEN=3) :: atm1
|
||||
CHARACTER(LEN=6) :: atm1
|
||||
LOGICAL, SAVE :: first =.TRUE.
|
||||
!
|
||||
IF (ionode) THEN
|
||||
|
|
|
@ -939,7 +939,7 @@ SUBROUTINE phq_readin()
|
|||
!
|
||||
! end of reading, close unit qestdin, remove temporary input file if existing
|
||||
! FIXME: closing input file here breaks alpha2F.x that reads what follows
|
||||
!!! IF (meta_ionode) ios = close_input_file ()
|
||||
! IF (meta_ionode) ios = close_input_file ()
|
||||
|
||||
IF (epsil.AND.(lgauss .OR. ltetra)) &
|
||||
CALL errore ('phq_readin', 'no elec. field with metals', 1)
|
||||
|
|
|
@ -113,8 +113,6 @@ subroutine phq_setup
|
|||
mu, nu, imode0, irr, ipert, na, it, nt, nsym_is, last_irr_eff
|
||||
! counters
|
||||
|
||||
real(DP), allocatable :: wg_up(:,:), wg_dw(:,:)
|
||||
|
||||
logical :: sym (48), magnetic_sym
|
||||
LOGICAL :: symmorphic_or_nzb
|
||||
! the symmetry operations
|
||||
|
|
|
@ -55,7 +55,7 @@ PROGRAM Q2QSTAR
|
|||
INTEGER :: ierr, nargs
|
||||
!
|
||||
INTEGER :: nqs, isq (48), imq, nqq
|
||||
REAL(DP) :: sxq(3, 48), xq(3), xqs(3,48), epsil(3,3)
|
||||
REAL(DP) :: sxq(3, 48), xq(3), xqs(3,48), epsilon(3,3)
|
||||
!
|
||||
LOGICAL :: sym(48), lrigid
|
||||
LOGICAL, EXTERNAL :: has_xml
|
||||
|
@ -99,7 +99,7 @@ PROGRAM Q2QSTAR
|
|||
! read system information
|
||||
CALL read_dyn_mat_header(ntyp, nat, ibrav, nspin_mag, &
|
||||
celldm, at, bg, omega, atm, amass, tau, ityp, &
|
||||
m_loc, nqs, lrigid, epsil, zeu )
|
||||
m_loc, nqs, lrigid, epsilon, zeu )
|
||||
! read dyn.mat.
|
||||
CALL read_dyn_mat(nat,1,xq,phi)
|
||||
! close file
|
||||
|
@ -112,7 +112,7 @@ PROGRAM Q2QSTAR
|
|||
IF (ierr /= 0) CALL errore(CODE,'file '//TRIM(fildyn)//' missing!',1)
|
||||
! read everything, this use global variables
|
||||
ntyp = ntypx
|
||||
CALL read_dyn_from_file (nqs, xqs, epsil, lrigid, &
|
||||
CALL read_dyn_from_file (nqs, xqs, epsilon, lrigid, &
|
||||
ntyp, nat, ibrav, celldm, at, atm, amass)
|
||||
!
|
||||
IF (ionode) CLOSE(unit=1)
|
||||
|
@ -218,6 +218,9 @@ PROGRAM Q2QSTAR
|
|||
!
|
||||
CALL q2qstar_ph (d2, at, bg, nat, nsym, s, invs, irt, rtau, &
|
||||
nqs, sxq, isq, imq, 1)
|
||||
|
||||
IF (lrigid .and. .not. xmldyn ) call write_epsilon_and_zeu (zeu, epsilon, nat, 1)
|
||||
|
||||
ALLOCATE(w2(3*nat))
|
||||
CALL dyndia (xq, 3*nat, nat, ntyp, ityp, amass, 1, d2, w2)
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ SUBROUTINE summarize_zeu()
|
|||
ENDDO
|
||||
WRITE( stdout, '(/,10x,"Effective charges (d Force / dE) in cartesian axis without acoustic sum rule applied (asr)",/)')
|
||||
DO na = 1, nat
|
||||
WRITE( stdout, '(10x," atom ",i6, a6,"Mean Z*:",f15.5)') na, atm(ityp(na)),zstarmean(na)
|
||||
WRITE( stdout, '(10x," atom ",i4,2x,a6,"Mean Z*:",f15.5)') na, atm(ityp(na)),zstarmean(na)
|
||||
WRITE( stdout, '(6x,"Ex (",3f15.5," )")') (zstareu (1, jpol, na), &
|
||||
jpol = 1, 3)
|
||||
WRITE( stdout, '(6x,"Ey (",3f15.5," )")') (zstareu (2, jpol, na), &
|
||||
|
@ -110,7 +110,7 @@ SUBROUTINE summarize_zeu()
|
|||
ENDDO
|
||||
WRITE( stdout, '(/,10x,"Effective charges (d Force / dE) in cartesian axis with asr applied: ")')
|
||||
DO na = 1, nat
|
||||
WRITE( stdout, '(10x," atom ",i6, a6,"Mean Z*:",f15.5)') na, atm(ityp(na)),zstarmean(na)
|
||||
WRITE( stdout, '(10x," atom ",i4,2x,a6,"Mean Z*:",f15.5)') na, atm(ityp(na)),zstarmean(na)
|
||||
WRITE( stdout, '(6x,"E*x (",3f15.5," )")') (zstareu (1, jpol, na)- &
|
||||
zstarsum(1, jpol)/nat, jpol = 1, 3)
|
||||
WRITE( stdout, '(6x,"E*y (",3f15.5," )")') (zstareu (2, jpol, na)- &
|
||||
|
|
|
@ -340,6 +340,20 @@ target_link_libraries(qe_pp_epsilon_exe
|
|||
qe_pp
|
||||
qe_upflib)
|
||||
|
||||
###########################################################
|
||||
# d3hess.x
|
||||
###########################################################
|
||||
set(src_d3hess_x src/d3hess.f90)
|
||||
qe_add_executable(qe_pp_d3hess_exe ${src_d3hess_x})
|
||||
set_target_properties(qe_pp_d3hess_exe PROPERTIES OUTPUT_NAME d3hess.x)
|
||||
target_link_libraries(qe_pp_d3hess_exe
|
||||
PRIVATE
|
||||
qe_pw
|
||||
qe_modules
|
||||
qe_pp
|
||||
qe_dftd3
|
||||
qe_upflib)
|
||||
|
||||
###########################################################
|
||||
# wannier_ham.x
|
||||
###########################################################
|
||||
|
@ -579,6 +593,7 @@ set(PP_EXE_TARGETS
|
|||
qe_pp_pw2gt_exe
|
||||
qe_pp_sumpdos_exe
|
||||
qe_pp_epsilon_exe
|
||||
qe_pp_d3hess_exe
|
||||
qe_pp_wannierham_exe
|
||||
qe_pp_wannierplot_exe
|
||||
qe_pp_molecularpdos_exe
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
bands.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
bands.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: bands.x / PWscf / Quantum ESPRESSO (version: 7.3)
|
||||
Program: bands.x / PWscf / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
band_interpolation.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
band_interpolation.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: band_interpolation.x / PWscf / Quantum ESPRESSO (version: 7.3)
|
||||
Program: band_interpolation.x / PWscf / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
d3hess.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
d3hess.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
------------------------------------------------------------------------
|
||||
INPUT FILE DESCRIPTION
|
||||
|
||||
Program: d3hess.x / PWscf / Quantum ESPRESSO (version: 7.3)
|
||||
Program: d3hess.x / PWscf / Quantum ESPRESSO (version: 7.3.1)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -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; ">
|
||||
<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:
|
||||
dos.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3)</span>
|
||||
dos.x / PWscf / Quantum ESPRESSO<span style="font-weight: normal;"> (version: 7.3.1)</span>
|
||||
</h2>
|
||||
</th></tr>
|
||||
<tr><td style="padding: 10 3 3 3; background: #ffffff; color: #222222; ">
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue