diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 808d6e01b..69e89f4ac 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,12 +34,25 @@ build:cp:
# - make run-tests-ph-serial
# - rm -r /tmp/save
+build:cmake-gnu:
+ tags: [docker]
+ image: ubuntu:latest
+ script:
+ - apt-get update
+ - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
+ - apt-get install --yes gfortran git cmake libopenblas0 libopenblas-dev libfftw3-3 libfftw3-dev libopenmpi3 libopenmpi-dev
+ - cmake --version
+ - mkdir build
+ - cd build
+ - cmake -DCMAKE_Fortran_COMPILER=mpif90 -DCMAKE_C_COMPILER=gcc .. && make
+
build:pgi:
tags: [docker]
image: nvcr.io/hpc/pgi-compilers:ce
script:
- - ./configure FC=pgf90 F90=pgf90 MPIF90=mpif90 --enable-openmp
+ - ./configure FC=pgf90 F90=pgf90 F77=pgfortran MPIF90=mpif90 --enable-openmp --with-cuda=yes --enable-cuda-env-check=no
- apt-get install --reinstall make
+ - ln -s /usr/bin/cpp /bin/cpp # workaround bug in autotools
- make pw cp ph
#build:centos:
diff --git a/.gitmodules b/.gitmodules
index 6c907580e..6a8a6fdd1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
[submodule "external/wannier90"]
path = external/wannier90
url = https://github.com/wannier-developers/wannier90.git
+[submodule "external/devxlib"]
+ path = external/devxlib
+ url = https://gitlab.com/max-centre/components/devicexlib.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 09324f1cd..64bb7ac1b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,13 +29,14 @@ set(QE_TESTS_DIR ${qe_BINARY_DIR}/tests/bin)
###########################################################
# Build helpers
###########################################################
+set(PROJECT_CMAKE ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
include(cmake/qeHelpers.cmake)
###########################################################
# Build Type
-# Ensure that a specific, default build type is set when
+# Ensure that a specific, default build type is set when
# none has been explicitly set by the user
###########################################################
qe_ensure_build_type("Release")
@@ -73,9 +74,9 @@ option(QE_ENABLE_HDF5
"enable HDF5 data collection" OFF)
option(QE_ENABLE_CUDA
"enable CUDA acceleration on NVIDIA GPUs" OFF)
-option(QE_ENABLE_VENDOR_DEPS
+option(QE_ENABLE_VENDOR_DEPS
"enable fallback on vendored deps when none is found via find_package()" ON)
-option(QE_ENABLE_DOC
+option(QE_ENABLE_DOC
"enable documentation building" OFF)
# TODO change all ifdefs throughout code base to match
@@ -134,16 +135,12 @@ endif()
# The following targets will be defined:
add_library(qe_mpi_fortran INTERFACE)
add_library(QE::MPI_Fortran ALIAS qe_mpi_fortran)
-add_library(qe_mpi_c INTERFACE)
-add_library(QE::MPI_C ALIAS qe_mpi_c)
-qe_install_targets(qe_mpi_fortran qe_mpi_c)
+qe_install_targets(qe_mpi_fortran)
###########################################################
if(QE_ENABLE_MPI)
- find_package(MPI REQUIRED Fortran C)
- target_link_libraries(qe_mpi_fortran
+ find_package(MPI REQUIRED Fortran)
+ target_link_libraries(qe_mpi_fortran
INTERFACE MPI::MPI_Fortran)
- target_link_libraries(qe_mpi_c
- INTERFACE MPI::MPI_C)
endif(QE_ENABLE_MPI)
###########################################################
@@ -157,16 +154,23 @@ qe_install_targets(qe_openmp_fortran qe_openmp_c)
###########################################################
if(QE_ENABLE_OPENMP)
find_package(OpenMP REQUIRED Fortran C)
- target_link_libraries(qe_openmp_fortran
+ target_link_libraries(qe_openmp_fortran
INTERFACE OpenMP::OpenMP_Fortran)
- target_link_libraries(qe_openmp_c
+ target_link_libraries(qe_openmp_c
INTERFACE OpenMP::OpenMP_C)
-
+
endif(QE_ENABLE_OPENMP)
+############################################################
+## Compiler specific options
+############################################################
+if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
+ include(${PROJECT_CMAKE}/GNUFortranCompiler.cmake)
+endif()
+
############################################################
## Vendor
-## Try to found vendor specific libraries for:
+## Try to found vendor specific libraries for:
## BLAS, LAPACK and FFTW
############################################################
if(QE_ENABLE_OPENMP)
@@ -195,13 +199,13 @@ endif()
add_library(qe_lapack INTERFACE)
add_library(QE::LAPACK ALIAS qe_lapack)
qe_install_targets(qe_lapack)
-###########################################################
+#######################################################################
if(NOT VENDOR_FOUND)
find_package(LAPACK)
if(LAPACK_FOUND)
message(STATUS "Found LAPACK: ${LAPACK_LIBRARIES}")
- target_link_libraries(qe_lapack
- INTERFACE
+ target_link_libraries(qe_lapack
+ INTERFACE
${LAPACK_LIBRARIES}
${LAPACK_LINKER_FLAGS})
elseif(QE_ENABLE_VENDOR_DEPS)
@@ -233,8 +237,8 @@ qe_install_targets(qe_scalapack)
if(QE_ENABLE_SCALAPACK)
find_package(SCALAPACK REQUIRED QUIET)
message(STATUS "Found SCALAPACK: ${SCALAPACK_LIBRARIES};${SCALAPACK_LINKER_FLAGS}")
- target_link_libraries(qe_scalapack
- INTERFACE
+ target_link_libraries(qe_scalapack
+ INTERFACE
${SCALAPACK_LIBRARIES}
${SCALAPACK_LINKER_FLAGS})
endif(QE_ENABLE_SCALAPACK)
@@ -248,27 +252,24 @@ qe_install_targets(qe_elpa)
###########################################################
if(QE_ENABLE_ELPA)
find_package(ELPA REQUIRED)
-
- string(REGEX MATCH "elpa-[0-9][0-9][0-9][0-9]" CMAKE_MATCH_ELPA_VER "${ELPA_INCLUDE_DIRS}")
- string(REGEX MATCH "[0-9][0-9][0-9][0-9]" CMAKE_MATCH_ONLY_VER "${CMAKE_MATCH_ELPA_VER}")
-
+
# Check if ELPA version is compatible with QE
- if(CMAKE_MATCH_ONLY_VER EQUAL "2018" OR
- CMAKE_MATCH_ONLY_VER EQUAL "2017" OR
- CMAKE_MATCH_ONLY_VER EQUAL "2016")
- qe_add_global_compile_definitions(__ELPA_2016)
- elseif(CMAKE_MATCH_ONLY_VER EQUAL "2015")
- qe_add_global_compile_definitions(__ELPA_2015)
- elseif(CMAKE_MATCH_ONLY_VER LESS "2015")
- qe_add_global_compile_definitions(__ELPA)
+ if(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2018.11")
+ set(QE_ELPA_DEFINITIONS __ELPA)
+ elseif(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2016.11")
+ set(QE_ELPA_DEFINITIONS __ELPA_2016)
+ elseif(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2015")
+ set(QE_ELPA_DEFINITIONS __ELPA_2015)
else()
- message(FATAL_ERROR "ELPA ver. ${CMAKE_MATCH_ONLY_VER} is not supported.")
+ message(FATAL_ERROR "ELPA verion ${ELPA_VERSION_STRING} is not supported.")
endif()
+ message(STATUS "Add ELPA flag : ${QE_ELPA_DEFINITIONS}")
+ qe_add_global_compile_definitions(${QE_ELPA_DEFINITIONS})
# Looking for module directory
- file(GLOB_RECURSE ELPA_MODS "${ELPA_INCLUDE_DIRS}/*.mod")
- list(GET ELPA_MODS 0 ELPA_MOD)
- if(EXISTS ${ELPA_MOD})
+ file(GLOB_RECURSE ELPA_MODS_FILES "${ELPA_INCLUDE_DIRS}/*.mod" "${ELPA_INCLUDE_DIRS}/../modules/*.mod")
+ if(ELPA_MODS_FILES)
+ list(GET ELPA_MODS_FILES 0 ELPA_MOD)
get_filename_component(ELPA_MOD_DIR "${ELPA_MOD}" PATH)
set(ELPA_INCLUDE_DIRS "${ELPA_MOD_DIR};${ELPA_INCLUDE_DIRS}")
else()
@@ -276,7 +277,7 @@ if(QE_ENABLE_ELPA)
endif()
# Add link libraries and include directories
- target_link_libraries(qe_elpa
+ target_link_libraries(qe_elpa
INTERFACE
${ELPA_LIBRARIES}
${ELPA_LIBRARIES_DEP}
@@ -297,17 +298,23 @@ add_library(QE::HDF5_C ALIAS qe_hdf5_c)
qe_install_targets(qe_hdf5_fortran qe_hdf5_c)
###########################################################
if(QE_ENABLE_HDF5)
+ if(QE_ENABLE_MPI)
+ option(HDF5_PREFER_PARALLEL "Prefer parallel HDF5" ON)
+ endif()
find_package(HDF5 REQUIRED Fortran C)
-
- if(NOT HDF5_Fortran_LIBRARIES OR NOT HDF5_Fortran_INCLUDE_DIRS)
+ if(NOT HDF5_FOUND)
message(FATAL_ERROR "HDF5 Fortran interface has not been found!")
endif()
- if (NOT HDF5_IS_PARALLEL OR NOT QE_ENABLE_MPI)
- qe_add_global_compile_definitions(__HDF5_SERIAL)
- endif()
- target_link_libraries(qe_hdf5_fortran
- INTERFACE
+ if (NOT HDF5_IS_PARALLEL OR NOT QE_ENABLE_MPI)
+ message(STATUS "Serial HDF5 enabled!")
+ qe_add_global_compile_definitions(__HDF5_SERIAL)
+ else()
+ message(STATUS "Parallel HDF5 enabled!")
+ endif()
+
+ target_link_libraries(qe_hdf5_fortran
+ INTERFACE
${HDF5_Fortran_LIBRARIES}
${HDF5_Fortran_HL_LIBRARIES})
target_include_directories(qe_hdf5_fortran
@@ -317,8 +324,8 @@ if(QE_ENABLE_HDF5)
INTERFACE
${HDF5_Fortran_DEFINITIONS})
- target_link_libraries(qe_hdf5_c
- INTERFACE
+ target_link_libraries(qe_hdf5_c
+ INTERFACE
${HDF5_C_LIBRARIES}
${HDF5_C_HL_LIBRARIES})
target_include_directories(qe_hdf5_c
@@ -402,10 +409,10 @@ write_basic_package_version_file(
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
-configure_file(cmake/qeConfig.cmake.in
+configure_file(cmake/qeConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/qeConfig.cmake @ONLY)
-install(FILES
+install(FILES
${CMAKE_CURRENT_BINARY_DIR}/qeConfigVersion.cmake
${CMAKE_CURRENT_BINARY_DIR}/qeConfig.cmake
DESTINATION
@@ -424,8 +431,8 @@ add_custom_target(depgraph
###########################################################
# Custom make targets
###########################################################
-add_custom_target(pw
- DEPENDS
+add_custom_target(pw
+ DEPENDS
qe_pw_exe
qe_pw_tools_ibrav2cell_exe
qe_pw_tools_cell2ibrav_exe
@@ -435,8 +442,8 @@ add_custom_target(pw
COMMENT
"basic code for scf, structure optimization, MD")
-add_custom_target(ph
- DEPENDS
+add_custom_target(ph
+ DEPENDS
qe_phonon_ph_exe
qe_phonon_dynmat_exe
qe_phonon_q2r_exe
@@ -451,27 +458,27 @@ add_custom_target(ph
COMMENT
"phonon code, Gamma-only and third-order derivatives")
-add_custom_target(hp
- DEPENDS
+add_custom_target(hp
+ DEPENDS
qe_hp_exe
COMMENT
"calculation of the Hubbard parameters from DFPT")
-add_custom_target(pwcond
- DEPENDS
+add_custom_target(pwcond
+ DEPENDS
qe_pwcond_exe
COMMENT
"ballistic conductance")
-add_custom_target(neb
- DEPENDS
+add_custom_target(neb
+ DEPENDS
qe_neb_exe
qe_neb_pathinterpolation_exe
COMMENT
"code for Nudged Elastic Band method")
-add_custom_target(pp
- DEPENDS
+add_custom_target(pp
+ DEPENDS
qe_pp_exe
qe_pp_opengrid_exe
qe_pp_average_exe
@@ -504,17 +511,17 @@ add_custom_target(pp
COMMENT
"postprocessing programs")
-add_custom_target(pwall
- DEPENDS
- pw
- ph
- pp
- pwcond
+add_custom_target(pwall
+ DEPENDS
+ pw
+ ph
+ pp
+ pwcond
neb
COMMENT
"same as \"make pw ph pp pwcond neb\"")
-add_custom_target(cp
+add_custom_target(cp
DEPENDS
qe_cpv_exe
qe_cpv_manycp_exe
@@ -523,7 +530,7 @@ add_custom_target(cp
COMMENT
"CP code: Car-Parrinello molecular dynamics")
-add_custom_target(tddfpt
+add_custom_target(tddfpt
DEPENDS
qe_tddfpt_turbolanczos_exe
qe_tddfpt_turbodavidson_exe
@@ -532,7 +539,7 @@ add_custom_target(tddfpt
COMMENT
"time dependent dft code")
-add_custom_target(gwl
+add_custom_target(gwl
DEPENDS
qe_gww_util_grap_exe
qe_gww_util_abcoefftoeps_exe
@@ -540,36 +547,23 @@ add_custom_target(gwl
COMMENT
"GW with Lanczos chains")
-add_custom_target(ld1
+add_custom_target(ld1
DEPENDS
qe_atomic_exe
COMMENT
"utilities for pseudopotential generation")
-add_custom_target(upf
+add_custom_target(upf
DEPENDS
- qe_upftools_extractcore_exe
- qe_upftools_casino2upf_exe
- qe_upftools_upf2upf2_exe
- qe_upftools_cpmd2upf_exe
- qe_upftools_fhi2upf_exe
- qe_upftools_fpmd2upf_exe
- qe_upftools_ncpp2upf_exe
- qe_upftools_oldcp2upf_exe
- qe_upftools_readupf_exe
- qe_upftools_readupftofile_exe
- qe_upftools_fixupf_exe
- qe_upftools_rrkj2upf_exe
- qe_upftools_upf2casino_exe
- qe_upftools_uspp2upf_exe
- qe_upftools_vdb2upf_exe
- qe_upftools_virtualv2_exe
- qe_upftools_interpolate_exe
- qe_upftools_hgh2qelininterpol_gh2qe_exe
+ #Library
+ qe_upflib
+ #Executables
+ qe_upflib_virtual_v2_exe
+ qe_upflib_upfconv_exe
COMMENT
"utilities for pseudopotential conversion")
-add_custom_target(xspectra
+add_custom_target(xspectra
DEPENDS
qe_xspectra_exe
qe_xspectra_spectracorrection_exe
@@ -577,13 +571,13 @@ add_custom_target(xspectra
COMMENT
"X-ray core-hole spectroscopy calculations")
-add_custom_target(couple
+add_custom_target(couple
DEPENDS
qe_couple
COMMENT
"library interface for coupling to external codes")
-add_custom_target(epw
+add_custom_target(epw
DEPENDS
qe_epw_exe
COMMENT
diff --git a/CPV/src/ensemble_dft.f90 b/CPV/src/ensemble_dft.f90
index e569aeb5a..122de0887 100644
--- a/CPV/src/ensemble_dft.f90
+++ b/CPV/src/ensemble_dft.f90
@@ -185,6 +185,7 @@ CONTAINS
!
CASE ('ensemble','ensemble-dft','edft')
!
+ CALL errore(' ensemble_initval ','ensemble-dft is broken, sorry!', 1 )
tens =.true.
ninner = n_inner_
etemp = degauss_
diff --git a/Doc/release-notes b/Doc/release-notes
index 9a5675529..42696b4b3 100644
--- a/Doc/release-notes
+++ b/Doc/release-notes
@@ -1,12 +1,16 @@
New in dev version:
* Support for CMake (F. Ficarelli and D. Cesarini, CINECA, with help from
Ye Luo, P. Delugas, S. Gsaenger)
+ * In vc-relax with Hubbard corrections, the final SCF calculation is done by
+ reading atomic occupations from file produced during the vc-relax
+ (rather then recomputing them from scratch).
Fixed in dev version:
* Some linkers yield "missing references to ddot_" in libbeef
* FFT test in FFTXlib was not always compiling
* angle1, angle2, starting_magnetization incorrectly written to xml file
* Bug in Hubbard forces and stress for bands parallelization (when nproc_pool>nbnd)
+ * Bug in DFT+U+V when starting_ns_eigenvalue is used (courtesy of M. Cococcioni)
* Crash in the calculation of Z* with ultrasoft PP when the number of bands
is larger than the number of occupied bands (thanks to Sasha Fonari)
* Crash in matdyn.x when ibrav=0 (thanks to Sasha Fonari)
diff --git a/Doc/user_guide.tex b/Doc/user_guide.tex
index 433ac18e3..f3d4bdf3d 100644
--- a/Doc/user_guide.tex
+++ b/Doc/user_guide.tex
@@ -622,6 +622,8 @@ The following options are available for the CUDA Fortran GPU version:\\
& CUDA Toolkit installed on the workstation \\
& or available on the compute nodes of the HPC facility.\\
& PGI compilers currently accept 7.5, 8.0 or 9.0 (default: 8.0)\\
+\texttt{--enable-cuda-env-check=[yes]}& if set, sanity checks on the CUDA environment\\
+ & are performed (default: yes).
\end{tabular}\\
Please remember that in order to compile the CUDA code for GPU's you need ...
diff --git a/EPW/bin/allocate.py b/EPW/bin/allocate.py
index 2d24d2591..99587ac85 100644
--- a/EPW/bin/allocate.py
+++ b/EPW/bin/allocate.py
@@ -1,13 +1,15 @@
-#
-# Script to automatically add status and error message to ALLOCATE and DEALLOCATE in
-# Fortran files.
+#
+# Script to automatically add status and error message to ALLOCATE and DEALLOCATE in
+# Fortran files.
#
# Author: S. Ponce
# Date: Sept. 2019
#
+from __future__ import print_function
import numpy as np
+
# File name
file_name = 'elphel2_shuffle.f90'
@@ -18,7 +20,7 @@ with open(file_name,'r') as F:
#tmp = lines.split()
if len(tmp_split) < 1:
continue
- #
+ #
#print tmp_split[0][0:9]
if tmp_split[0] == 'SUBROUTINE':
for ii in np.arange(len(tmp)):
@@ -28,7 +30,7 @@ with open(file_name,'r') as F:
end = ii
name_sub = str(tmp[start+2:end])
-
+
if tmp_split[0] == 'FUNCTION':
for ii in np.arange(len(tmp)):
if tmp[ii] == 'N' and tmp[ii+1] == ' ':
@@ -47,19 +49,18 @@ with open(file_name,'r') as F:
if tmp[ii] == ')':
final = ii
#print 'start ',start
- print str(tmp[0:start-9])+'ALLOCATE('+str(tmp[start:final])+', STAT = ierr)'
- print str(tmp[0:start-9])+'IF (ierr /= 0) CALL errore(\''+str(name_sub)+'\', \'Error allocating '+str(tmp[start:end])+'\', 1)'
+ print('{}ALLOCATE({}, STAT = ierr)'.format(tmp[0:start-9], tmp[start:final]))
+ print("{}IF (ierr /= 0) CALL errore('{}', 'Error allocating {}', 1)".format(
+ tmp[0:start-9], name_sub, tmp[start:end]
+ ))
elif tmp_split[0][0:11] == 'DEALLOCATE(':
for ii in np.arange(len(tmp)):
if tmp[ii] == '(':
start = ii
if tmp[ii] == ')':
end = ii
- print str(tmp[0:start-10])+'DEALLOCATE('+str(tmp[start+1:end])+', STAT = ierr)'
- print str(tmp[0:start-10])+'IF (ierr /= 0) CALL errore(\''+str(name_sub)+'\', \'Error deallocating '+str(tmp[start+1:end])+'\', 1)'
+ print('{}DEALLOCATE({}, STAT = ierr)'.format(tmp[0:start-10], tmp[start+1:end]))
+ print("{}IF (ierr /= 0) CALL errore('{}', 'Error deallocating {}', 1)".format(
+ tmp[0:start-10], name_sub, tmp[start+1:end]))
else:
- print str(lines),
-
-
-
-
+ print(lines, end='')
diff --git a/EPW/bin/pp-xml-depreciated.py b/EPW/bin/pp-xml-depreciated.py
index 471e6346a..699359594 100644
--- a/EPW/bin/pp-xml-depreciated.py
+++ b/EPW/bin/pp-xml-depreciated.py
@@ -1,11 +1,13 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
#
# Post-processing script from of PH data in format used by EPW
# 14/07/2015 - Creation of the script - Samuel Ponce
# 14/03/2018 - Automatically reads the number of q-points - Michael Waters
-# 14/03/2018 - Detect if SOC is included in the calculation - Samuel Ponce
+# 14/03/2018 - Detect if SOC is included in the calculation - Samuel Ponce
# 13/11/2018 - Write dyn files in xml format for SOC case - Shunhong Zhang (USTC)
-#
+#
+from __future__ import print_function
+from builtins import input
import numpy as np
import os
from xml.dom import minidom
@@ -14,12 +16,12 @@ from xml.dom import minidom
def dyn2xml(prefix):
ndyn=int(os.popen('head -2 {0}.dyn0|tail -1'.format(prefix)).read())
for idyn in range(1,ndyn+1):
- print '{0}.dyn{1} to {0}.dyn_q{1}.xml'.format(prefix,idyn)
+ print('{0}.dyn{1} to {0}.dyn_q{1}.xml'.format(prefix, idyn))
dynmat=dyn(prefix,idyn)
dynmat._write_xml()
def get_geom_info():
- if os.path.isfile('ph.out')==False:
- print 'cannot extract geometry info from ph.out'
+ if not os.path.isfile('ph.out'):
+ print('cannot extract geometry info from ph.out')
return 1
else:
volm=float(os.popen('grep -a volume ph.out 2>/dev/null|tail -1').readline().split()[-2])
@@ -47,7 +49,7 @@ class dyn(object):
self._at=np.zeros((3,3),float)
self._bg=np.zeros((3,3),float)
try: self._volm,self._at,self._bg = get_geom_info()
- except: print 'warning: lattice info not found'
+ except Exception: print('warning: lattice info not found')
for i in range(0, 4):
f.readline()
self._species=[];
@@ -215,7 +217,7 @@ def hasSOC(prefix):
xmldoc = minidom.parse(fname)
item = xmldoc.getElementsByTagName('spinorbit')[0]
lSOC = item.childNodes[0].data
-
+
return lSOC
# Check if the calculation was done in sequential
@@ -225,11 +227,11 @@ def isSEQ(prefix):
lseq = True
else:
lseq = False
-
+
return lseq
-
+
# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
+user_input = input('Enter the prefix used for PH calculations (e.g. diam)\n')
prefix = str(user_input)
# Test if SOC
@@ -237,14 +239,14 @@ SOC = hasSOC(prefix)
# If SOC detected, but dyn is not in XML and we want to convert it
if SOC=='true':
- user_input = raw_input('Calculation with SOC detected. Do you want to convert dyn in XML format [y/n]?\n')
+ user_input = input('Calculation with SOC detected. Do you want to convert dyn in XML format [y/n]?\n')
if str(user_input) == 'y':
dyn2xml(prefix)
os.system('mv {0}.dyn*.xml save'.format(prefix))
-# If no SOC detected, do you want to convert into XML format
+# If no SOC detected, do you want to convert into XML format
if SOC=='false':
- user_input = raw_input('Calculation without SOC detected. Do you want to convert to xml anyway [y/n]?\n')
+ user_input = input('Calculation without SOC detected. Do you want to convert to xml anyway [y/n]?\n')
if str(user_input) == 'y':
SOC = 'true'
dyn2xml(prefix)
@@ -258,7 +260,7 @@ if True: # this gets the nqpt from the outputfiles
else:
# Enter the number of irr. q-points
- user_input = raw_input('Enter the number of irreducible q-points\n')
+ user_input = input('Enter the number of irreducible q-points\n')
nqpt = user_input
try:
nqpt = int(user_input)
@@ -293,7 +295,7 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
+
else:
# Case with SOC
if SOC == 'true':
@@ -316,4 +318,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/bin/pp.py b/EPW/bin/pp.py
index c353ee554..f61d7011d 100644
--- a/EPW/bin/pp.py
+++ b/EPW/bin/pp.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python3
#
# Post-processing script from of PH data in format used by EPW
# 14/07/2015 - Creation of the script - Samuel Ponce
diff --git a/EPW/examples/diamond/epw/meshes/kgen.py b/EPW/examples/diamond/epw/meshes/kgen.py
index 3df9050b9..179533542 100644
--- a/EPW/examples/diamond/epw/meshes/kgen.py
+++ b/EPW/examples/diamond/epw/meshes/kgen.py
@@ -1,15 +1,16 @@
#
# 14/07/2015 Samuel Ponce
#
+from __future__ import print_function
import numpy as np
-i=0
-for ii in np.arange(0.5,0.0,-1.0/200):
- print str(ii)+' 0.0 0.0 '+str(1.0/201)
- i +=1
+i = 0
+for ii in np.arange(0.5, 0.0, -1.0 / 200):
+ print('{0} 0.0 0.0 {1}'.format(ii, 1.0 / 201))
+ i += 1
-for ii in np.arange(0.0,0.5+1.0/200,1.0/200):
- print str(ii)+' '+str(ii)+' 0.0 '+str(1.0/201)
- i +=1
+for ii in np.arange(0.0, 0.5 + 1.0 / 200, 1.0 / 200):
+ print('{0} {0} 0.0 {1}'.format(ii, 1.0 / 201))
+ i += 1
-print i
+print(i)
diff --git a/EPW/examples/diamond/phonons/pp.py b/EPW/examples/diamond/phonons/pp.py
index ca36eadc8..ae85d68c6 100755
--- a/EPW/examples/diamond/phonons/pp.py
+++ b/EPW/examples/diamond/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/examples/gan/phonons/pp.py b/EPW/examples/gan/phonons/pp.py
index ca36eadc8..ae85d68c6 100644
--- a/EPW/examples/gan/phonons/pp.py
+++ b/EPW/examples/gan/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/examples/mgb2/phonons/pp.py b/EPW/examples/mgb2/phonons/pp.py
index ca36eadc8..ae85d68c6 100755
--- a/EPW/examples/mgb2/phonons/pp.py
+++ b/EPW/examples/mgb2/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/examples/pb/wSOC/phonons/pp.py b/EPW/examples/pb/wSOC/phonons/pp.py
index ca36eadc8..ae85d68c6 100644
--- a/EPW/examples/pb/wSOC/phonons/pp.py
+++ b/EPW/examples/pb/wSOC/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/examples/pb/woSOC/phonons/pp.py b/EPW/examples/pb/woSOC/phonons/pp.py
index ca36eadc8..ae85d68c6 100644
--- a/EPW/examples/pb/woSOC/phonons/pp.py
+++ b/EPW/examples/pb/woSOC/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/EPW/examples/sic/phonons/pp.py b/EPW/examples/sic/phonons/pp.py
index ca36eadc8..ae85d68c6 100755
--- a/EPW/examples/sic/phonons/pp.py
+++ b/EPW/examples/sic/phonons/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,4 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
-
diff --git a/FFTXlib/gen_test_params.py b/FFTXlib/gen_test_params.py
index 9f6ff2e2d..6ebffbbfd 100644
--- a/FFTXlib/gen_test_params.py
+++ b/FFTXlib/gen_test_params.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
import re, sys
info = """
diff --git a/LAXlib/cdiaghg.f90 b/LAXlib/cdiaghg.f90
index 06a3c7ffe..96a6c7fdf 100644
--- a/LAXlib/cdiaghg.f90
+++ b/LAXlib/cdiaghg.f90
@@ -215,9 +215,12 @@ SUBROUTINE laxlib_cdiaghg_gpu( n, m, h_d, s_d, ldh, e_d, v_d, me_bgrp, root_bgrp
!
USE laxlib_parallel_include
!
+ ! NB: the flag below can be used to decouple LAXlib from devXlib.
+ ! This will make devXlib an optional dependency of LAXlib when
+ ! the library will be decoupled from QuantumESPRESSO.
#define __USE_GLOBAL_BUFFER
-#if defined(__USE_GLOBAL_BUFFER)
- USE gbuffers, ONLY : dev=>dev_buf, pin=>pin_buf
+#if defined(__USE_GLOBAL_BUFFER) && defined(__CUDA)
+ USE device_fbuff_m, ONLY : dev=>dev_buf, pin=>pin_buf
#define VARTYPE POINTER
#else
#define VARTYPE ALLOCATABLE
diff --git a/LAXlib/rdiaghg.f90 b/LAXlib/rdiaghg.f90
index 02b677223..d1bb904d5 100644
--- a/LAXlib/rdiaghg.f90
+++ b/LAXlib/rdiaghg.f90
@@ -200,9 +200,12 @@ SUBROUTINE laxlib_rdiaghg_gpu( n, m, h_d, s_d, ldh, e_d, v_d, me_bgrp, root_bgrp
#endif
#endif
!
+ ! NB: the flag below can be used to decouple LAXlib from devXlib.
+ ! This will make devXlib an optional dependency of LAXlib when
+ ! the library will be decoupled from QuantumESPRESSO.
#define __USE_GLOBAL_BUFFER
-#if defined(__USE_GLOBAL_BUFFER)
- USE gbuffers, ONLY : dev=>dev_buf, pin=>pin_buf
+#if defined(__USE_GLOBAL_BUFFER) && defined(__CUDA)
+ USE device_fbuff_m, ONLY : dev=>dev_buf, pin=>pin_buf
#define VARTYPE POINTER
#else
#define VARTYPE ALLOCATABLE
diff --git a/Modules/autopilot.f90 b/Modules/autopilot.f90
index 9c653d6c3..cd33538cc 100644
--- a/Modules/autopilot.f90
+++ b/Modules/autopilot.f90
@@ -437,6 +437,7 @@ CONTAINS
integer :: event
LOGICAL, EXTERNAL :: matches
+ LOGICAL :: new_event
! this is a temporary local variable
@@ -546,13 +547,23 @@ CONTAINS
! Heres where it get interesting
! We may have a new event , or not! :)
- IF ( ((event-1) .gt. 0) .and. ( now_step .lt. event_step(event-1)) ) THEN
- IF( ionode ) write(*,*) ' AutoPilot: current input_line', input_line
- CALL auto_error( ' AutoPilot ','Dynamic Rule Event Out of Order!')
- go to 20
+ IF ((event-1) .gt. 0) THEN
+ IF ( now_step .lt. event_step(event-1)) THEN
+ IF( ionode ) write(*,*) ' AutoPilot: current input_line', input_line
+ CALL auto_error( ' AutoPilot ','Dynamic Rule Event Out of Order!')
+ go to 20
+ ENDIF
ENDIF
- IF ( (event .eq. 0) .or. ( now_step .gt. event_step(event)) ) THEN
+ IF (event .eq. 0) THEN
+ new_event = .true.
+ ELSEIF ( now_step .gt. event_step(event)) THEN
+ new_event = .true.
+ ELSE
+ new_event = .false.
+ ENDIF
+
+ IF ( new_event ) THEN
! new event
event = event + 1
@@ -601,14 +612,24 @@ CONTAINS
! We may have a new event , or not! :)
- IF ( ((event-1) .gt. 0) .and. ( on_step .lt. event_step(event-1)) ) THEN
- IF( ionode ) write(*,*) ' AutoPilot: current input_line', input_line
- CALL auto_error( ' AutoPilot ','Dynamic Rule Event Out of Order!')
- go to 20
+ IF ( ((event-1) .gt. 0)) THEN
+ IF ( on_step .lt. event_step(event-1)) THEN
+ IF( ionode ) write(*,*) ' AutoPilot: current input_line', input_line
+ CALL auto_error( ' AutoPilot ','Dynamic Rule Event Out of Order!')
+ go to 20
+ ENDIF
ENDIF
- IF ( (event .eq. 0) .or. (on_step .gt. event_step(event)) ) THEN
+ IF (event .eq. 0) THEN
+ new_event = .true.
+ ELSEIF (on_step .gt. event_step(event)) THEN
+ new_event = .true.
+ ELSE
+ new_event = .false.
+ ENDIF
+
+ IF (new_event) THEN
! new event
event = event + 1
IF (event > max_event_step) THEN
diff --git a/PHonon/Doc/INPUT_POSTAHC.html b/PHonon/Doc/INPUT_POSTAHC.html
new file mode 100644
index 000000000..52bd2565f
--- /dev/null
+++ b/PHonon/Doc/INPUT_POSTAHC.html
@@ -0,0 +1,314 @@
+
+
+
+
+
+postahc.x: input description
+
+
+
+
+ Input File Description
+ Program:
+ postahc.x / PWscf / Quantum Espresso (version: 6.6)
+
+ |
+
+
+TABLE OF CONTENTS
+
+
+
+ INTRODUCTION
+ &INPUT
+
+ahc_dir | nk | nbnd | nat | nq | ahc_nbnd | ahc_nbndskip | flvec | eta | temp_kelvin | efermi | amass_amu | skip_upperfan | skip_dw
+
+
+
+
+INTRODUCTION
+
+Purpose of postahc.x:
+
+- Read the electron-phonon quantities calculated by ph.x with the
+electron_phonon='ahc' option.
+
+- Calculate the phonon-induced electron self-energy in the full matrix form
+at a given temperature.
+
+ Structure of the input data:
+========================================================================
+
+&INPUT
+ ...specs of namelist variables...
+/
+
+
+
+ Namelist: &INPUT
+ |
+
+
+
+ahc_dir |
+CHARACTER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Directory where the binary files are located.
+
|
+
+
+
+
+nk |
+INTEGER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Number of k points. Must be identical to that of the preceding SCF or NSCF run.
+
|
+
+
+
+
+nbnd |
+INTEGER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Number of bands. Must be identical to nbnd of the preceding SCF or NSCF run.
+
|
+
+
+
+
+nat |
+INTEGER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Number of atoms. Must be identical to nat of the preceding pw.x and ph.x
+runs.
+
|
+
+
+
+
+nq |
+INTEGER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Number of q points. Must be identical to that of the preceding ph.x run
+with electron_phonon='ahc'.
+
|
+
+
+
+
+ahc_nbnd |
+INTEGER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Number of bands for which the electron self-energy is to be computed. Must be
+identical to ahc_nbnd of the ph.x run with electron_phonon='ahc'.
+
|
+
+
+
+
+ahc_nbndskip |
+INTEGER |
+
+
+Default: |
+ 0
+ |
+
+
+Number of bands to exclude when computing the self-energy. Must be identical to
+ahc_nbndskip of the ph.x run with electron_phonon='ahc'.
+
|
+
+
+
+
+flvec |
+CHARACTER |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+File containing the normalized phonon displacements written by matdyn.x.
+
|
+
+
+
+
+eta |
+REAL |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Magnitude of the small imaginary component included to smooth the energy
+denominators, in Ry.
+
|
+
+
+
+
+temp_kelvin |
+REAL |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Temperature in Kelvins at which the electron self-energy is calculated.
+
|
+
+
+
+
+efermi |
+REAL |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Fermi energy of the electrons in Ry.
+
|
+
+
+
+
+amass_amu(i), i=1,nat |
+REAL |
+
+
+Status: |
+ REQUIRED
+ |
+
+
+Mass for each atom in atomic mass unit. In postahc.x, amass_amu must be
+set for each atom, not for each atom type as in other programs.
+
|
+
+
+
+
+skip_upperfan |
+LOGICAL |
+
+
+Default: |
+ .false.
+ |
+
+
+If .true., skip calculation of the upper Fan self-energy.
+If .false., ahc_upfan_iq#.bin files must be present in ahc_dir.
+
|
+
+
+
+
+skip_dw |
+LOGICAL |
+
+
+Default: |
+ .false.
+ |
+
+
+If .true., skip calculation of the Debye-Waller self-energy.
+If .false., ahc_dw.bin file must be present in ahc_dir.
+
|
+
+
+ |
|
+
+ |
+
+
+ This file has been created by helpdoc utility on Tue Oct 06 22:11:45 CEST 2020.
+
+
+
diff --git a/PHonon/Doc/INPUT_POSTAHC.txt b/PHonon/Doc/INPUT_POSTAHC.txt
new file mode 100644
index 000000000..742529169
--- /dev/null
+++ b/PHonon/Doc/INPUT_POSTAHC.txt
@@ -0,0 +1,153 @@
+*** FILE AUTOMATICALLY CREATED: DO NOT EDIT, CHANGES WILL BE LOST ***
+
+------------------------------------------------------------------------
+INPUT FILE DESCRIPTION
+
+Program: postahc.x / PWscf / Quantum Espresso (version: 6.6)
+------------------------------------------------------------------------
+
+
+Purpose of postahc.x:
+
+- Read the electron-phonon quantities calculated by ph.x with the
+electron_phonon='ahc' option.
+
+- Calculate the phonon-induced electron self-energy in the full matrix form
+at a given temperature.
+
+ Structure of the input data:
+========================================================================
+
+&INPUT
+ ...specs of namelist variables...
+/
+
+
+
+========================================================================
+NAMELIST: &INPUT
+
+ +--------------------------------------------------------------------
+ Variable: ahc_dir
+
+ Type: CHARACTER
+ Status: REQUIRED
+ Description: Directory where the binary files are located.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: nk
+
+ Type: INTEGER
+ Status: REQUIRED
+ Description: Number of k points. Must be identical to that of the preceding SCF or NSCF run.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: nbnd
+
+ Type: INTEGER
+ Status: REQUIRED
+ Description: Number of bands. Must be identical to nbnd of the preceding SCF or NSCF run.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: nat
+
+ Type: INTEGER
+ Status: REQUIRED
+ Description: Number of atoms. Must be identical to nat of the preceding pw.x and ph.x
+ runs.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: nq
+
+ Type: INTEGER
+ Status: REQUIRED
+ Description: Number of q points. Must be identical to that of the preceding ph.x run
+ with electron_phonon='ahc'.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: ahc_nbnd
+
+ Type: INTEGER
+ Status: REQUIRED
+ Description: Number of bands for which the electron self-energy is to be computed. Must be
+ identical to ahc_nbnd of the ph.x run with electron_phonon='ahc'.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: ahc_nbndskip
+
+ Type: INTEGER
+ Default: 0
+ Description: Number of bands to exclude when computing the self-energy. Must be identical to
+ ahc_nbndskip of the ph.x run with electron_phonon='ahc'.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: flvec
+
+ Type: CHARACTER
+ Status: REQUIRED
+ Description: File containing the normalized phonon displacements written by matdyn.x.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: eta
+
+ Type: REAL
+ Status: REQUIRED
+ Description: Magnitude of the small imaginary component included to smooth the energy
+ denominators, in Ry.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: temp_kelvin
+
+ Type: REAL
+ Status: REQUIRED
+ Description: Temperature in Kelvins at which the electron self-energy is calculated.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: efermi
+
+ Type: REAL
+ Status: REQUIRED
+ Description: Fermi energy of the electrons in Ry.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: amass_amu(i), i=1,nat
+
+ Type: REAL
+ Status: REQUIRED
+ Description: Mass for each atom in atomic mass unit. In postahc.x, "amass_amu" must be
+ set for each atom, not for each atom type as in other programs.
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: skip_upperfan
+
+ Type: LOGICAL
+ Default: .false.
+ Description: If .true., skip calculation of the upper Fan self-energy.
+ If .false., ahc_upfan_iq#.bin files must be present in "ahc_dir".
+ +--------------------------------------------------------------------
+
+ +--------------------------------------------------------------------
+ Variable: skip_dw
+
+ Type: LOGICAL
+ Default: .false.
+ Description: If .true., skip calculation of the Debye-Waller self-energy.
+ If .false., ahc_dw.bin file must be present in "ahc_dir".
+ +--------------------------------------------------------------------
+
+===END OF NAMELIST======================================================
+
+
+This file has been created by helpdoc utility on Tue Oct 06 22:11:45 CEST 2020
diff --git a/PHonon/Doc/developer_man.pdf b/PHonon/Doc/developer_man.pdf
index ce1f6edc4..3160f3dad 100644
Binary files a/PHonon/Doc/developer_man.pdf and b/PHonon/Doc/developer_man.pdf differ
diff --git a/PHonon/Doc/dfpt_self_energy.pdf b/PHonon/Doc/dfpt_self_energy.pdf
new file mode 100644
index 000000000..2983a5d65
Binary files /dev/null and b/PHonon/Doc/dfpt_self_energy.pdf differ
diff --git a/PHonon/Doc/user_guide.pdf b/PHonon/Doc/user_guide.pdf
index 35f7202b7..208ac3eb9 100644
Binary files a/PHonon/Doc/user_guide.pdf and b/PHonon/Doc/user_guide.pdf differ
diff --git a/PP/src/vasp_xml_module.f90 b/PP/src/vasp_xml_module.f90
index 2fec3d0db..c5490ce02 100644
--- a/PP/src/vasp_xml_module.f90
+++ b/PP/src/vasp_xml_module.f90
@@ -102,7 +102,6 @@ SUBROUTINE readxmlfile_vasp(iexch,icorr,igcx,igcc,inlc,ierr)
USE klist, ONLY : nkstot, nks, xk, wk
USE lsda_mod, ONLY : lsda, nspin, current_spin, isk
USE wvfct, ONLY : nbnd, nbndx, et, wg
- USE symm_base, ONLY : irt, d1, d2, d3, checkallsym, nsym
USE extfield, ONLY : forcefield, tefield, gate, forcegate
USE cellmd, ONLY : cell_factor, lmovecell
USE fft_base, ONLY : dfftp
@@ -916,7 +915,6 @@ END SUBROUTINE vasp_init_vars_from_schema
USE constants, ONLY : e2
USE cell_base, ONLY : at, bg, alat, omega, cell_base_init
USE ions_base, ONLY : nat, nsp
- USE symm_base, ONLY : nsym
USE gvect, ONLY : ngm_g, ecutrho
USE fft_base, ONLY : dfftp
USE gvecs, ONLY : ngms_g, dual
@@ -1001,7 +999,6 @@ END SUBROUTINE vasp_init_vars_from_schema
USE constants, ONLY : e2, ANGSTROM_AU
USE cell_base, ONLY : at, alat, omega
USE ions_base, ONLY : nat, nsp, ityp, tau, zv, atm
- USE symm_base, ONLY : nsym
USE gvect, ONLY : ngm_g, ecutrho
USE fft_base, ONLY : dfftp
USE gvecs, ONLY : ngms_g, dual
@@ -1050,7 +1047,6 @@ END SUBROUTINE vasp_init_vars_from_schema
USE constants, ONLY : e2
USE cell_base, ONLY : at, alat, omega
USE ions_base, ONLY : nat, nsp, ityp, tau, atm
- USE symm_base, ONLY : nsym
USE gvect, ONLY : ngm_g, ecutrho
USE fft_base, ONLY : dfftp
USE gvecs, ONLY : ngms_g, dual
diff --git a/PP/tools/sum_states.py b/PP/tools/sum_states.py
index 2db5528dd..7996def57 100755
--- a/PP/tools/sum_states.py
+++ b/PP/tools/sum_states.py
@@ -1,4 +1,4 @@
-#! /usr/bin/python
+#!/usr/bin/env python3
###### SUM STATES #######
# Python script for summing and ploting the data from the Density Of States
@@ -31,17 +31,17 @@
# ni.pdos_atm#1\(Ni\)_wfc#2\(d\) -t "Example PP/02" -xr -6 2
#
#
-# The procedure for obtaining the DOS files is explained
+# The procedure for obtaining the DOS files is explained
# i.e. in (espresso-dir)/PP/examples/example02/
-#
+#
# Author: Dr. Julen Larrucea
# University of Bremen,
# Bremen Centre for Computational Materials Science, HMI Group
# julenl [at] gmail.com or larrucea [at] hmi.uni-bremen.de
#
-# This file is distributed under the terms of the GNU General Public
+# This file is distributed under the terms of the GNU General Public
# License. See the file `License'
-# in the root directory of the present distribution,
+# in the root directory of the present distribution,
# or http://www.gnu.org/copyleft/gpl.txt .
#######################
@@ -60,7 +60,7 @@ min_y,max_y="",""
output_file_name="sum_dos.out"
prt="no"
-print " #### sum_states.py version "+str(version)+" #### "
+print(" #### sum_states.py version {} #### ".format(version))
# Check if X11, mathplotlib and gnuplot are available
@@ -89,14 +89,14 @@ if len(sys.argv)>1:
if option=="t":
graphtitle= sys.argv[sys.argv.index('-t')+1]
if option=="xr":
- min_x,max_x= float(sys.argv[sys.argv.index('-xr')+1]),float(sys.argv[sys.argv.index('-xr')+2])
+ min_x,max_x= float(sys.argv[sys.argv.index('-xr')+1]),float(sys.argv[sys.argv.index('-xr')+2])
if option=="yr":
- min_y,max_y= float(sys.argv[sys.argv.index('-yr')+1]),float(sys.argv[sys.argv.index('-yr')+2])
+ min_y,max_y= float(sys.argv[sys.argv.index('-yr')+1]),float(sys.argv[sys.argv.index('-yr')+2])
if option=="v":
- print "sum_dos.py version: "+version
+ print("sum_dos.py version:", version)
sys.exit()
if option=="h":
- print '''
+ print('''
-o QE output file name (for grepping Fermi E)
-s Selection of atoms for summing the DOSes. "*" for all, *1*Fe*d* for first Fe atom " (def. "*")
-p Print output to a file and aditionaly provide an output name (def. no output and "sum_dos.out")
@@ -105,8 +105,8 @@ if len(sys.argv)>1:
-yr set min and max y value for the axes in the graph
-h print this help
-v print version
- Example: sum_states.py --s sys.pdos_atm#4\(Fe2\)_wfc#2\(d\) -t "Wustite LDA+U single Fe" -xr -9 4
- '''
+ Example: sum_states.py --s sys.pdos_atm#4\(Fe2\)_wfc#2\(d\) -t "Wustite LDA+U single Fe" -xr -9 4
+ ''')
sys.exit()
@@ -116,13 +116,13 @@ if len(os.popen('echo $DISPLAY').read()) > 1:
try:
from pylab import *
mplplot="yes"
- print "pylab imported"
+ print("pylab imported")
except:
- print "There is no mathplotlib installed. Using gnuplot."
+ print("There is no mathplotlib installed. Using gnuplot.")
mplplot="no"
prt="yes"
else:
- print "No X11. Trying to plot on terminal"
+ print("No X11. Trying to plot on terminal")
graphic_plot="no"
if prog_gnuplot=="no":
prt="yes"
@@ -132,7 +132,7 @@ else:
if pwout == "":
for filen in filter(os.path.isfile, os.listdir('.')):
if "Program PWSCF" in linecache.getline(filen, 2):
- print "Using " + filen + " as pw.x output. You can specify another one with the -o option."
+ print("Using " + filen + " as pw.x output. You can specify another one with the -o option.")
pwout=filen
# Parse Fermi energy from the pw.x output
@@ -140,35 +140,32 @@ if pwout!="":
try:
os.popen("grep -a 'the Fermi energy is' "+pwout ).read()
fermi=float(os.popen("grep -a 'the Fermi energy is' "+pwout ).read().split()[4])
- print "Fermi energy = ", fermi, "a.u."
+ print("Fermi energy = ", fermi, "a.u.")
except:
- print "WARNING: No Fermi energy found. Using 0 e.V. instead"
+ print("WARNING: No Fermi energy found. Using 0 e.V. instead")
fermi=0
else:
- print "WARNING: No pw.x output found. Using E Fermi = 0 e.V."
+ print("WARNING: No pw.x output found. Using E Fermi = 0 e.V.")
fermi=0
-# List of all DOS files to add
+# List of all DOS files to add
dosfiles=[]
for dfile in os.listdir('.'):
if fnmatch.fnmatch(dfile, selat):
- dosfiles.append(dfile)
+ dosfiles.append(dfile)
if len(dosfiles)==0:
- print "ERROR: Provide a (list of) valid DOS file(s)"
+ print("ERROR: Provide a (list of) valid DOS file(s)")
sys.exit()
-print "dosfiles list: ",
-for dosfile in dosfiles:
- print dosfile,
-print ""
+print("dosfiles list:", " ".join(dosfiles))
# Check wetter we have k-solved DOS
if open(dosfiles[0],'r').readline().split()[1]=="E":
ksolved="no"
- print "no ksolved"
+ print("no ksolved")
elif open(dosfiles[0],'r').readline().split()[1]=="ik":
ksolved="yes"
- print "ksolved"
+ print("ksolved")
# Sum over all k-points and files
mat=[] # matrix with total sum of ldos
@@ -191,28 +188,28 @@ for i in range(len(dosfiles)):
elif ik == k and k > 1:
oldmat.append([float(line.split()[1]),float(line.split()[2]),float(line.split()[3])])
elif len(line) < 5 and k > 1: #if blank line, sum k-frame to the total
- for j in range(len(oldmat)):
+ for j in range(len(oldmat)):
mati[j]=[mati[j][0],mati[j][1]+oldmat[j][1],mati[j][2]+oldmat[j][2]]
if mat == []: # if it is the first dos file, copy total matrix (mat) = the first dos files's data
mat=mati[:]
else:
for j in range(len(mati)): # if it is not the first file, sum values
- mat[j]=[mat[j][0],mat[j][1]+mati[j][1],mat[j][2]+mati[j][2]]
+ mat[j]=[mat[j][0],mat[j][1]+mati[j][1],mat[j][2]+mati[j][2]]
-print "...ploting..."
+print("...ploting...")
if prt=="yes":
out=open(output_file_name,"w")
-x,y1,y2=[],[],[]
+x,y1,y2=[],[],[]
for i in mat:
x.append(i[0]-fermi)
y1.append(i[1])
y2.append(-i[2])
if prt=="yes": # print to a file
- print>>out, i[0]-fermi, i[1], i[2]
+ print(i[0] - fermi, i[1], i[2], file=out)
if prt=="yes":
out.close()
@@ -222,7 +219,7 @@ if graphic_plot=="yes":
if mplplot=="yes":
plot(x,y1,linewidth=1.0)
plot(x,y2,linewidth=1.0)
- print min(y2),max(y1)
+ print(min(y2), max(y1))
plt.title(graphtitle)
plt.xlabel('E (eV)')
plt.ylabel('States')
@@ -231,15 +228,13 @@ if graphic_plot=="yes":
plt.fill(x,y1,color='0.8')
plt.fill(x,y2,color='0.9')
if min_x and max_x:
- fromx,tox=min_x,max_x
+ fromx, tox = min_x, max_x
plt.axis([fromx, tox, min(y2), max(y1)])
- show()
+ show()
elif mplplot=="no" and prog_gnuplot=="yes": # If no mathplotlib available, use gnuplot
- os.system("echo \"plot '"+ output_file_name + "' using ($1-"+str(fermi)+"):2 w l, '' u ($1"+str(fermi)+"):3 w l\" | gnuplot -persist")
+ os.system("""echo "plot '{0}' using ($1-{1}):2 w l, '' u ($1-{1}):3 w l" | gnuplot -persist""".format(
+ output_file_name, fermi))
elif graphic_plot=="no": # If no X forwarding available, show graph in terminal
if prog_gnuplot=="yes":
- os.system("echo \"set terminal dumb; plot '"+ output_file_name + "' using ($1-"+str(fermi)+"):2 w l, '' u ($1-"+str(fermi)+"):3 w l\" | gnuplot -persist")
-
-
-
-
+ os.system("""echo "set terminal dumb; plot '{0}' using ($1-{1}):2 w l, '' u ($1-{1}):3 w l" | gnuplot -persist""".format(
+ output_file_name, fermi))
diff --git a/PW/src/move_ions.f90 b/PW/src/move_ions.f90
index fad57d5e9..0f5fd7d8f 100644
--- a/PW/src/move_ions.f90
+++ b/PW/src/move_ions.f90
@@ -327,6 +327,8 @@ SUBROUTINE move_ions( idone, ions_status )
!
! ... before leaving check that the new positions still transform
! ... according to the symmetry of the system.
+ ! ... FIXME: should be done in all cases, not just for vc-md
+ ! ... FIXME 2: why not impose symmetry instead of just checking it?
!
CALL checkallsym( nat, tau, ityp)
!
diff --git a/PW/src/nsg_adj.f90 b/PW/src/nsg_adj.f90
index ab14a777d..f9cfdfc0d 100644
--- a/PW/src/nsg_adj.f90
+++ b/PW/src/nsg_adj.f90
@@ -15,23 +15,17 @@ SUBROUTINE nsg_adj
!
USE kinds, ONLY : DP
USE ions_base, ONLY : nat, ntyp => nsp, ityp
- USE ldaU, ONLY : Hubbard_lmax, Hubbard_l, Hubbard_U, starting_ns, &
- Hubbard_l_back, Hubbard_U_back, starting_ns_back, ldim_u, &
- nsg, nsgnew
- USE scf, ONLY : rho
+ USE ldaU, ONLY : Hubbard_lmax, Hubbard_l, starting_ns, &
+ nsgnew, neighood, is_hubbard
USE lsda_mod, ONLY : nspin
- USE noncollin_module, ONLY : noncolin, npol
USE io_global, ONLY : stdout
IMPLICIT NONE
!
INTEGER, PARAMETER :: ldmx = 7
- INTEGER :: na, nt, is, m1, m2, majs, mins, adjs, mol(ldmx), &
- nel, i, j, l, index(ldmx), viz, ldim
- REAL(DP) :: totoc, delta,lambda(ldmx)
+ INTEGER :: na, na1, nt, is, m1, m2, i, viz, ldim
+ REAL(DP) :: lambda(ldmx)
COMPLEX(DP) :: vet(ldmx,ldmx), f(ldmx,ldmx), temp
- LOGICAL :: adjust
- INTEGER, EXTERNAL :: find_viz
!
IF (ALL(starting_ns == -1.d0)) RETURN
!
@@ -43,20 +37,27 @@ SUBROUTINE nsg_adj
!
nt = ityp(na)
!
- ldim = 2*Hubbard_l(nt) + 1
- !
- viz = find_viz(na,na)
- !
- IF (ldim_u(nt).GT.0) THEN
+ IF (is_hubbard(nt)) THEN
+ !
+ ldim = 2*Hubbard_l(nt) + 1
!
DO is = 1, nspin
!
- DO m1 = 1, ldim
- DO m2 = 1, ldim
- f(m1,m2) = nsgnew(na,m1,viz,m2,is)
- ENDDO
+ DO viz = 1, neighood(na)%num_neigh
+ na1 = neighood(na)%neigh(viz)
+ IF (na1.EQ.na) THEN
+ f(:,:) = (0.d0, 0.d0)
+ DO m1 = 1, ldim
+ DO m2 = 1, ldim
+ f(m1,m2) = nsgnew(m2,m1,viz,na,is)
+ ENDDO
+ ENDDO
+ GO TO 7
+ ENDIF
ENDDO
!
+7 CONTINUE
+ !
CALL cdiagh(ldim, f, ldmx, lambda, vet)
!
DO i = 1, ldim
@@ -69,8 +70,8 @@ SUBROUTINE nsg_adj
DO i = 1,ldim
temp = temp + CONJG(vet(m1,i))*lambda(i)*vet(m2,i)
ENDDO
- nsgnew(na,m1,viz,m2,is) = DBLE(temp)
- nsgnew(na,m2,viz,m1,is) = nsgnew(na,m1,viz,m2,is)
+ nsgnew(m2,m1,viz,na,is) = DBLE(temp)
+ nsgnew(m1,m2,viz,na,is) = nsgnew(m2,m1,viz,na,is)
ENDDO
ENDDO
!
@@ -80,6 +81,9 @@ SUBROUTINE nsg_adj
!
ENDDO
!
+ ! Uncomment the line below if needed (useful for debugging purposes)
+ !CALL write_nsg
+ !
RETURN
!
END SUBROUTINE nsg_adj
diff --git a/PW/src/pw_restart_new.f90 b/PW/src/pw_restart_new.f90
index bb7d5bc36..3cb25563c 100644
--- a/PW/src/pw_restart_new.f90
+++ b/PW/src/pw_restart_new.f90
@@ -1168,8 +1168,8 @@ MODULE pw_restart_new
time_reversal = (.NOT.magnetic_sym) .AND. (.NOT.noinv)
CALL inverse_s()
CALL s_axis_to_cart()
- !! symmetry check - FIXME: is this needed?
- IF (nat > 0) CALL checkallsym( nat, tau, ityp)
+ !! symmetry check - FIXME: must be done in a more consistent way
+ !! IF (nat > 0) CALL checkallsym( nat, tau, ityp)
!! Algorithmic info
do_cutoff_2D = (output_obj%boundary_conditions%assume_isolated == "2D")
CALL qexsd_copy_algorithmic_info ( output_obj%algorithmic_info, &
diff --git a/PW/src/run_pwscf.f90 b/PW/src/run_pwscf.f90
index 744eaa082..d802bd10b 100644
--- a/PW/src/run_pwscf.f90
+++ b/PW/src/run_pwscf.f90
@@ -1,5 +1,5 @@
!
-! Copyright (C) 2013-2017 Quantum ESPRESSO group
+! Copyright (C) 2013-2020 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,
@@ -33,6 +33,8 @@ SUBROUTINE run_pwscf( exit_status )
!! @endnote
!!
!
+ USE kinds, ONLY : DP
+ USE mp, ONLY : mp_bcast, mp_sum
USE io_global, ONLY : stdout, ionode, ionode_id
USE parameters, ONLY : ntypx, npk
USE upf_params, ONLY : lmaxx
@@ -53,6 +55,7 @@ SUBROUTINE run_pwscf( exit_status )
USE qexsd_module, ONLY : qexsd_set_status
USE funct, ONLY : dft_is_hybrid, stop_exx
USE beef, ONLY : beef_energies
+ USE ldaU, ONLY : lda_plus_u
!
USE gbuffers, ONLY : dev_buf
!
@@ -233,8 +236,13 @@ SUBROUTINE run_pwscf( exit_status )
!
lbfgs=.FALSE.; lmd=.FALSE.
WRITE( UNIT = stdout, FMT=9020 )
+ !
CALL reset_gvectors( )
!
+ ! ... read atomic occupations for DFT+U(+V)
+ !
+ IF ( lda_plus_u ) CALL read_ns()
+ !
ELSE IF ( ions_status == 2 ) THEN
!
! ... check whether nonzero magnetization is real
diff --git a/PW/src/write_ns.f90 b/PW/src/write_ns.f90
index 374d82cb5..e4ea699ad 100644
--- a/PW/src/write_ns.f90
+++ b/PW/src/write_ns.f90
@@ -671,3 +671,94 @@ SUBROUTINE write_nsg
!
END SUBROUTINE write_nsg
+!-----------------------------------------------------------------------
+SUBROUTINE read_ns()
+ !---------------------------------------------------------------------
+ !
+ ! This routine was written for the final SCF after vc-relax (M. Cococcioni).
+ ! The occupations ns/nsg also need to be read in order to reproduce
+ ! the right electronic ground state. When using Hubbard corrections
+ ! this might be different (i.e. have different ordering of states)
+ ! from that simply obtained from the superposition of free ions.
+ ! In other words the KS Hamiltonian (and its ground state) is also
+ ! functional of the Hubbard interaction parameters.
+ !
+ USE kinds, ONLY : DP
+ USE mp, ONLY : mp_bcast
+ USE mp_images, ONLY : intra_image_comm
+ USE io_global, ONLY : ionode, ionode_id
+ USE scf, ONLY : rho, v
+ USE ldaU, ONLY : lda_plus_u_kind, nsg, v_nsg, hub_back
+ USE noncollin_module, ONLY : noncolin
+ USE io_files, ONLY : restart_dir
+ !
+ IMPLICIT NONE
+ INTEGER :: iunocc, iunocc1, ierr
+ CHARACTER (LEN=256) :: dirname
+ REAL(DP) :: eth, eth1
+ !
+ dirname = restart_dir()
+ !
+ IF ( ionode ) THEN
+ !
+ OPEN ( NEWUNIT=iunocc, FILE = TRIM(dirname) // 'occup.txt', &
+ FORM='formatted', STATUS='old', IOSTAT=ierr )
+ IF (lda_plus_u_kind.EQ.0) THEN
+ READ( UNIT = iunocc, FMT = *, iostat = ierr ) rho%ns
+ IF (hub_back) THEN
+ READ( UNIT = iunocc, FMT = * , iostat = ierr) rho%nsb
+ ENDIF
+ ELSEIF (lda_plus_u_kind.EQ.1) THEN
+ IF (noncolin) THEN
+ READ( UNIT = iunocc, FMT = *, iostat = ierr ) rho%ns_nc
+ ELSE
+ READ( UNIT = iunocc, FMT = *, iostat = ierr ) rho%ns
+ ENDIF
+ ELSEIF (lda_plus_u_kind.EQ.2) THEN
+ READ( UNIT = iunocc, FMT = * , iostat = ierr) nsg
+ ENDIF
+ CLOSE(UNIT=iunocc,STATUS='keep')
+ !
+ ELSE
+ !
+ IF (lda_plus_u_kind.EQ.0) THEN
+ rho%ns(:,:,:,:) = 0.D0
+ IF (hub_back) rho%nsb(:,:,:,:) = 0.D0
+ ELSEIF (lda_plus_u_kind.EQ.1) THEN
+ IF (noncolin) THEN
+ rho%ns_nc(:,:,:,:) = 0.D0
+ ELSE
+ rho%ns(:,:,:,:) = 0.D0
+ ENDIF
+ ELSEIF (lda_plus_u_kind.EQ.2) THEN
+ nsg(:,:,:,:,:) = (0.d0, 0.d0)
+ ENDIF
+ !
+ ENDIF
+ !
+ CALL mp_bcast( ierr, ionode_id, intra_image_comm )
+ !
+ IF (lda_plus_u_kind.EQ.0) THEN
+ CALL mp_bcast(rho%ns, ionode_id, intra_image_comm)
+ CALL v_hubbard (rho%ns, v%ns, eth)
+ IF (hub_back) THEN
+ CALL mp_bcast(rho%nsb, ionode_id, intra_image_comm)
+ CALL v_hubbard_b (rho%nsb, v%nsb, eth1)
+ eth = eth + eth1
+ ENDIF
+ ELSEIF (lda_plus_u_kind.EQ.1) THEN
+ IF (noncolin) THEN
+ CALL mp_bcast(rho%ns_nc, ionode_id, intra_image_comm)
+ CALL v_hubbard_full_nc (rho%ns_nc, v%ns_nc, eth)
+ ELSE
+ CALL mp_bcast(rho%ns, ionode_id, intra_image_comm)
+ CALL v_hubbard_full (rho%ns, v%ns, eth)
+ ENDIF
+ ELSEIF (lda_plus_u_kind.EQ.2) THEN
+ CALL mp_bcast(nsg, ionode_id, intra_image_comm)
+ CALL v_hubbard_extended (nsg, v_nsg, eth)
+ ENDIF
+ !
+ RETURN
+ !
+END SUBROUTINE read_ns
diff --git a/PW/tools/xsf2pwi.sh b/PW/tools/xsf2pwi.sh
old mode 100644
new mode 100755
diff --git a/UtilXlib/tests/compile_and_run_tests.sh b/UtilXlib/tests/compile_and_run_tests.sh
old mode 100644
new mode 100755
diff --git a/cmake/FindELPA.cmake b/cmake/FindELPA.cmake
index 1e308a734..7915f66ec 100644
--- a/cmake/FindELPA.cmake
+++ b/cmake/FindELPA.cmake
@@ -198,6 +198,10 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR
NAMES elpa.h
HINTS ${ELPA_DIR}
PATH_SUFFIXES "include" "include/elpa")
+ if(NOT ELPA_elpa.h_DIRS)
+ file(GLOB ELPA_elpa.h_PATH "${ELPA_DIR}/include/elpa-20*/elpa/elpa.h")
+ get_filename_component(ELPA_elpa.h_DIRS "${ELPA_elpa.h_PATH}" PATH)
+ endif()
else()
set(ELPA_elpa.h_DIRS "ELPA_elpa.h_DIRS-NOTFOUND")
find_path(ELPA_elpa.h_DIRS
@@ -210,6 +214,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR
# If found, add path to cmake variable
# ------------------------------------
if (ELPA_elpa.h_DIRS)
+ message(STATUS "elpa.h found in ${ELPA_elpa.h_DIRS}")
set(ELPA_INCLUDE_DIRS "${ELPA_elpa.h_DIRS}")
else ()
set(ELPA_INCLUDE_DIRS "ELPA_INCLUDE_DIRS-NOTFOUND")
@@ -218,6 +223,12 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR
endif()
endif()
+ # If not defined, guess the version string
+ if(NOT ELPA_VERSION_STRING)
+ string(REGEX MATCH "elpa-20[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9]" CMAKE_MATCH_ELPA_VER "${ELPA_INCLUDE_DIRS}")
+ string(REGEX MATCH "20[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9]" ELPA_VERSION_STRING "${CMAKE_MATCH_ELPA_VER}")
+ message(STATUS "ELPA version ${ELPA_VERSION_STRING}")
+ endif()
# Looking for lib
# ---------------
@@ -354,7 +365,12 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR
# test link
unset(ELPA_WORKS CACHE)
include(CheckFunctionExists)
- check_function_exists(elpa_dgetrf ELPA_WORKS)
+ if(ELPA_VERSION_STRING AND ELPA_VERSION_STRING VERSION_LESS "2017")
+ set(ELPA_TEST_FUNCTION get_elpa_row_col_comms)
+ else()
+ set(ELPA_TEST_FUNCTION elpa_init)
+ endif()
+ check_function_exists(${ELPA_TEST_FUNCTION} ELPA_WORKS)
mark_as_advanced(ELPA_WORKS)
if(ELPA_WORKS)
@@ -368,7 +384,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR
list(REMOVE_DUPLICATES ELPA_LINKER_FLAGS)
else()
if(NOT ELPA_FIND_QUIETLY)
- message(STATUS "Looking for elpa : test of elpa_dgetrf with
+ message(STATUS "Looking for elpa : test of ${ELPA_TEST_FUNCTION} with
elpa, cblas, cuda and lapack libraries fails")
message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
@@ -413,4 +429,4 @@ else()
find_package_handle_standard_args(ELPA DEFAULT_MSG
ELPA_LIBRARIES
ELPA_WORKS)
-endif()
\ No newline at end of file
+endif()
diff --git a/cmake/FindSCALAPACK.cmake b/cmake/FindSCALAPACK.cmake
index a09901b70..7a6f2cdbc 100644
--- a/cmake/FindSCALAPACK.cmake
+++ b/cmake/FindSCALAPACK.cmake
@@ -400,6 +400,19 @@ if(BLAS_FOUND
endif()
# Then try the search libs
foreach(IT ${SCALAPACK_SEARCH_LIBS})
+ # First try mkl_blacs_openmpi (OpenMPI derived)
+ if(NOT ${_LIBRARIES})
+ check_scalapack_libraries(
+ ${_LIBRARIES}
+ BLAS
+ ${SCALAPACK_mkl_SEARCH_SYMBOL}
+ ""
+ "${IT};mkl_blacs_openmpi_lp64"
+ "${_BLAS_LIBRARIES}"
+ ""
+ "${MPI_Fortran_LIBRARIES}")
+ endif()
+ # First try mkl_blacs_intelmpi (MPICH derived)
if(NOT ${_LIBRARIES})
check_scalapack_libraries(
${_LIBRARIES}
diff --git a/cmake/FindVENDOR.cmake b/cmake/FindVENDOR.cmake
index 0173a0796..c6cce5010 100644
--- a/cmake/FindVENDOR.cmake
+++ b/cmake/FindVENDOR.cmake
@@ -738,6 +738,7 @@ if(NOT FFTW_INCLUDE_DIRS)
list(APPEND _libdirs "${_libdir}/include")
get_filename_component(_libdir ${_libdir} PATH)
list(APPEND _libdirs "${_libdir}/include")
+ unset(_libdir)
endif()
endforeach()
diff --git a/cmake/GNUFortranCompiler.cmake b/cmake/GNUFortranCompiler.cmake
new file mode 100644
index 000000000..87cd67a58
--- /dev/null
+++ b/cmake/GNUFortranCompiler.cmake
@@ -0,0 +1,8 @@
+# Check compiler version
+if(CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 4.9)
+ message(FATAL_ERROR "Requires GCC 4.9 or higher ")
+endif()
+
+if(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)
+ set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch")
+endif()
diff --git a/dev-tools/get_device_props.py b/dev-tools/get_device_props.py
index 4b26da941..dd3790a7e 100644
--- a/dev-tools/get_device_props.py
+++ b/dev-tools/get_device_props.py
@@ -1,20 +1,25 @@
+from __future__ import print_function
import sys
import subprocess as sp
have_yaml = True
try:
import yaml
-except:
- have_yaml = False
-
-try:
- from StringIO import StringIO
except ImportError:
- from io import BytesIO as StringIO
+ have_yaml = False
+
+try:
+ from io import StringIO
+except ImportError:
+ try:
+ from StringIO import StringIO
+ except ImportError:
+ from io import BytesIO as StringIO
+
print("\n\n This is a helper tool to check the details of your GPU before configuring QE.\n\n")
-print("""Remeber to load CUDA environemt and run this on the COMPUTE NODE
-if you are not sure that the frontend node shares
+print("""Remeber to load CUDA environemt and run this on the COMPUTE NODE
+if you are not sure that the frontend node shares
the same configuration as the backend nodes\n\n""")
@@ -54,13 +59,11 @@ else:
minor = str(5 if int(minor)>=5 else 0)
if 'major' in line:
_, major = line.split(':')
-
+
if minor != "" and major != "":
print("Compute capabilities for dev {}: {}.{}".format(str(devnum), major.strip(),minor.strip()))
conf_cc=major.strip()+minor.strip()
minor = ""; major = ""; devnum += 1
-
+
print("\n If all compute capabilities match, configure QE with:")
print("./configure --with-cuda=$CUDA_HOME --with-cuda-cc={} --with-cuda-runtime={}\n".format(conf_cc, conf_rt))
-
-
diff --git a/dev-tools/mem_analyse.py b/dev-tools/mem_analyse.py
index 71e27c8d1..0b3a5bb2b 100755
--- a/dev-tools/mem_analyse.py
+++ b/dev-tools/mem_analyse.py
@@ -1,8 +1,9 @@
+from __future__ import print_function
import numpy as np
#1) Run dev-tools/mem_counter inside EPW/src
#2) compile UtilXlib/mem_counter.f90 with -D__DEBUG flag
-#3) Run EPW
+#3) Run EPW
#4) grep ' allocating' epw1.out > alloc.txt
#5) grep 'deallocating' epw1.out > dealloc.txt
#6) Run this script after having changed the correct allocation lengths
@@ -37,18 +38,18 @@ with open('dealloc.txt','r') as R:
deall_found = [ False ] * dealloc_len
for ii in np.arange(alloc_len):
- print ii,' / ',alloc_len
+ print(ii, ' / ', alloc_len)
name = alloc_name[ii]
-
+
found = False
for jj in np.arange(dealloc_len):
if name == dealloc_name[jj]:
- if (alloc_size[ii] == dealloc_size[jj] and deall_found[jj]==False ) :
+ if alloc_size[ii] == dealloc_size[jj] and not deall_found[jj]:
# We found the corresponding all/deall pair
deall_found[jj] = True
found = True
break
- if (found == False):
+ if not found:
with open('mem_analyse.out','a') as O:
O.write('We did not find a maching pair in '+str(alloc_sub[ii])+'\n')
O.write('Allocate: '+str(name)+' '+str(alloc_size[ii])+'\n')
@@ -56,6 +57,3 @@ for ii in np.arange(alloc_len):
# print 'We did not find a maching pair in ', alloc_sub[ii]
# print 'Allocate: ',name,' ',alloc_size[ii]
# print 'Deallocate: ',dealloc_name[jj],' ',dealloc_size[jj]
-
-
-
diff --git a/dev-tools/mem_counter.py b/dev-tools/mem_counter.py
index 855c673b0..2b967adec 100755
--- a/dev-tools/mem_counter.py
+++ b/dev-tools/mem_counter.py
@@ -24,6 +24,7 @@ for file in *.bkp; do cp $file ${file%.bkp}; done
"""
+from __future__ import print_function
import os, sys, re
from shutil import copyfile
diff --git a/dev-tools/src-normal.py b/dev-tools/src-normal.py
index 53ea51302..b57ca7ca2 100755
--- a/dev-tools/src-normal.py
+++ b/dev-tools/src-normal.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# (C) 2010 Norbert Nemec
#
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
index adaf52def..48b32609e 100644
--- a/external/CMakeLists.txt
+++ b/external/CMakeLists.txt
@@ -4,8 +4,9 @@
if(FOX_ROOT)
add_library(qe_fox INTERFACE)
add_library(QE::FOX ALIAS qe_fox)
- target_link_libraries(qe_fox INTERFACE "${FOX_ROOT}/lib;-lFoX_fsys;-lFoX_utils;-lFoX_common;-lFoX_wxml;-lFoX_sax;-lFoX_dom")
- target_include_directories(qe_fox INTERFACE ${FOX_ROOT}/include)
+ qe_install_targets(qe_fox)
+ target_link_libraries(qe_fox INTERFACE "-L${FOX_ROOT}/lib;-lFoX_dom;-lFoX_sax;-lFoX_wxml;-lFoX_common;-lFoX_utils;-lFoX_fsys")
+ target_include_directories(qe_fox INTERFACE ${FOX_ROOT}/finclude)
elseif(QE_ENABLE_VENDOR_DEPS)
message(STATUS "Installing QE::FOX via submodule")
set(fox_targets
diff --git a/external/devxlib b/external/devxlib
new file mode 160000
index 000000000..e5392b772
--- /dev/null
+++ b/external/devxlib
@@ -0,0 +1 @@
+Subproject commit e5392b772497f8597f6c3b2851e0c17da756bb64
diff --git a/install/build-mingw-cross.sh b/install/build-mingw-cross.sh
old mode 100644
new mode 100755
diff --git a/install/configure b/install/configure
index 3b254217e..4ee9afea0 100755
--- a/install/configure
+++ b/install/configure
@@ -676,6 +676,7 @@ blas_line
blas_libs
f90rule
SET_MAKE
+cuda_path
cuda_extlibs
cuda_libs
cuda_fflags
@@ -773,6 +774,7 @@ enable_shared
with_cuda
with_cuda_cc
with_cuda_runtime
+enable_cuda_env_check
with_libxc
with_libxc_prefix
with_libxc_include
@@ -1421,6 +1423,9 @@ Optional Features:
--enable-debug compile Fortran with debug flags (default: no)
--enable-pedantic compile Fortran with pedantic flags (default: no)
--enable-shared use shared libraries if available (default: yes)
+ --enable-cuda-env-check=yes
+ The configure script will check CUDA installation
+ and report problems [default=yes]
--enable-signals enable signal trapping (default: no)
Optional Packages:
@@ -4374,6 +4379,7 @@ test_ldflags="`echo $ldflags | sed 's/\$([^)]*)//g'`"
NVCC=no
CUDA_CFLAGS=
CUDA_LDLIBS=
+cuda_path=
cuda_fflags=
cuda_libs=
cuda_extlibs=
@@ -4406,6 +4412,13 @@ else
fi
+# Check whether --enable-cuda-env-check was given.
+if test "${enable_cuda_env_check+set}" = set; then :
+ enableval=$enable_cuda_env_check;
+else
+ enable_cuda_env_check=yes
+fi
+
if test "x$with_cuda" != "xno"
@@ -4627,7 +4640,7 @@ $as_echo "no" >&6; }
fi
- if test "x$NVCC" = "xno"
+ if test "x$NVCC" = "xno" && test "x$enable_cuda_env_check" = "xyes"
then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find nvcc compiler. To enable CUDA, please add path to
nvcc in the PATH environment variable and/or specify the path
@@ -4675,7 +4688,7 @@ EOF
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_compile_nvcc" >&5
$as_echo "$ac_compile_nvcc" >&6; }
- if test "x$ac_compile_nvcc" = "xno"
+ if test "x$ac_compile_nvcc" = "xno" && test "x$enable_cuda_env_check" = "xyes"
then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CUDA compiler has problems." >&5
$as_echo "$as_me: WARNING: CUDA compiler has problems." >&2;}
@@ -4693,7 +4706,9 @@ $as_echo "$as_me: WARNING: CUDA compiler has problems." >&2;}
LIBS="$CUDA_LDLIBS $LIBS"
# And the header and the lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cuInit in -lcuda" >&5
+ if test "x$enable_cuda_env_check" = "xyes"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cuInit in -lcuda" >&5
$as_echo_n "checking for cuInit in -lcuda... " >&6; }
if ${ac_cv_lib_cuda_cuInit+:} false; then :
$as_echo_n "(cached) " >&6
@@ -4743,7 +4758,7 @@ as_fn_error $? "Couldn't find libcuda
See \`config.log' for more details" "$LINENO" 5; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cudaMalloc in -lcudart" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cudaMalloc in -lcudart" >&5
$as_echo_n "checking for cudaMalloc in -lcudart... " >&6; }
if ${ac_cv_lib_cudart_cudaMalloc+:} false; then :
$as_echo_n "(cached) " >&6
@@ -4793,7 +4808,7 @@ as_fn_error $? "Couldn't find libcudart
See \`config.log' for more details" "$LINENO" 5; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cublasInit in -lcublas" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cublasInit in -lcublas" >&5
$as_echo_n "checking for cublasInit in -lcublas... " >&6; }
if ${ac_cv_lib_cublas_cublasInit+:} false; then :
$as_echo_n "(cached) " >&6
@@ -4843,7 +4858,7 @@ as_fn_error $? "Couldn't find libcublas
See \`config.log' for more details" "$LINENO" 5; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cufftPlanMany in -lcufft" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cufftPlanMany in -lcufft" >&5
$as_echo_n "checking for cufftPlanMany in -lcufft... " >&6; }
if ${ac_cv_lib_cufft_cufftPlanMany+:} false; then :
$as_echo_n "(cached) " >&6
@@ -4893,6 +4908,7 @@ as_fn_error $? "Couldn't find libcufft
See \`config.log' for more details" "$LINENO" 5; }
fi
+ fi
new_cusolver="yes"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cusolverDnZhegvdx_bufferSize in -lcusolver" >&5
@@ -4951,20 +4967,25 @@ fi
$as_echo "#define HAVE_CUDA 1" >>confdefs.h
try_dflags="$try_dflags -D__CUDA"
+ cuda_extlibs="devxlib"
+ cuda_libs="-Mcudalib=cufft,cublas,cusolver \$(TOPDIR)/external/devxlib/src/libdevXlib.a"
+ cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/external/devxlib/src"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/external/devxlib/include"
+
if test ${new_cusolver} != yes; then
- cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime \$(MOD_FLAG)\$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve"
- cuda_extlibs="eigensolver"
- cuda_libs="-Mcudalib=cufft,cublas,cusolver \$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve/lib_eigsolve.a"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve"
+ cuda_extlibs="$cuda_extlibs eigensolver"
+ cuda_libs="$cuda_libs \$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve/lib_eigsolve.a"
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Using legacy custom solver." >&5
$as_echo "$as_me: WARNING: Using legacy custom solver." >&2;}
else
- cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
- cuda_libs="-Mcudalib=cufft,cublas,cusolver"
try_dflags="$try_dflags -D__USE_CUSOLVER"
fi
ldflags="$ldflags -Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
gpu_arch="$with_cuda_cc"
gpu_runtime="$with_cuda_runtime"
+ cuda_path="$CUDAPATH"
fi
# Announcing the new variables
@@ -4981,6 +5002,7 @@ fi
+
# Checking F90 rule...
diff --git a/install/extlibs_makefile b/install/extlibs_makefile
index d872889aa..ec52a06f7 100644
--- a/install/extlibs_makefile
+++ b/install/extlibs_makefile
@@ -21,6 +21,10 @@ EIGENSOLVER_GPU=v${EIGENSOLVER_VERSION}.tar.gz
EIGENSOLVER_GPU_NAME=Eigensolver_gpu-${EIGENSOLVER_VERSION}
EIGENSOLVER_GPU_URL=https://github.com/NVIDIA/Eigensolver_gpu/archive/${EIGENSOLVER_GPU}
+# For DevXlib
+DEVXLIB_VERSION=master
+DEVXLIB_URL="https://gitlab.com/max-centre/components/devicexlib/-/archive/master/devicexlib-${DEVXLIB_VERSION}.tar.gz"
+
# MAIN target
all: libcuda
@@ -179,6 +183,32 @@ libcuda_eigensolver_clean:
libcuda_eigensolver_veryclean:
if test -d ../EIGENSOLVER_GPU; then (rm -R -f ../EIGENSOLVER_GPU ../${EIGENSOLVER_GPU_NAME}); fi
+libcuda_devxlib :
+ cd ../external/devxlib; \
+ if test ! -e configure; then \
+ wget $(DEVXLIB_URL) -O devxlib.tar.gz || curl $(DEVXLIB_URL) -o devxlib.tar.gz ; \
+ tar xzf devxlib.tar.gz --strip-components=1 -C . ; \
+ rm devxlib.tar.gz ; \
+ fi; \
+ if test ! -f make.inc; then \
+ touch make.inc; \
+ $(MAKE) clean; \
+ ./configure FC=$(F90) F77=$(F77) CC=$(CC) \
+ --with-cuda=$(CUDA_PATH) \
+ --with-cuda-cc=$(GPU_ARCH) \
+ --with-cuda-runtime=$(CUDA_RUNTIME) \
+ --disable-parallel \
+ --enable-cuda-env-check=no; \
+ fi; \
+ make all
+
+libcuda_devxlib_clean:
+ cd ../external/devxlib; \
+ if test -f make.inc; then ($(MAKE) clean); fi
+libcuda_devxlib_veryclean:
+ cd ../external/devxlib; \
+ if test -f make.inc; then ($(MAKE) distclean && rm make.inc); fi
+
###################################
# BEEF
###################################
@@ -208,6 +238,6 @@ libbeef_veryclean:
# cleaning
###################################
-clean: lapack_clean elpa_clean iotk_clean fox_clean libcuda_eigensolver_clean libbeef_clean
+clean: lapack_clean elpa_clean iotk_clean fox_clean libcuda_eigensolver_clean libcuda_devxlib_clean libbeef_clean
-veryclean: lapack_veryclean elpa_veryclean iotk_veryclean fox_clean libcuda_eigensolver_veryclean libbeef_veryclean
+veryclean: lapack_veryclean elpa_veryclean iotk_veryclean fox_clean libcuda_eigensolver_veryclean libcuda_devxlib_veryclean libbeef_veryclean
diff --git a/install/m4/x_ac_qe_cuda.m4 b/install/m4/x_ac_qe_cuda.m4
index bce0b7ec2..b9a3ba615 100644
--- a/install/m4/x_ac_qe_cuda.m4
+++ b/install/m4/x_ac_qe_cuda.m4
@@ -33,6 +33,7 @@ AC_DEFUN([X_AC_QE_CUDA], [
NVCC=no
CUDA_CFLAGS=
CUDA_LDLIBS=
+cuda_path=
cuda_fflags=
cuda_libs=
cuda_extlibs=
@@ -53,6 +54,10 @@ AC_ARG_WITH([cuda-runtime],
[],
[with_cuda_runtime=10.1])
+AC_ARG_ENABLE([cuda-env-check],
+ [AS_HELP_STRING([--enable-cuda-env-check=yes],[The configure script will check CUDA installation and report problems @<:@default=yes@:>@])],
+ [],
+ [enable_cuda_env_check=yes])
if test "x$with_cuda" != "xno"
@@ -89,7 +94,7 @@ then
# Checking for nvcc
# -----------------------------------------
AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH:$CUDAPATH/bin])
- if test "x$NVCC" = "xno"
+ if test "x$NVCC" = "xno" && test "x$enable_cuda_env_check" = "xyes"
then
AC_MSG_WARN([Cannot find nvcc compiler. To enable CUDA, please add path to
nvcc in the PATH environment variable and/or specify the path
@@ -132,7 +137,7 @@ EOF
rm -f conftest.cu conftest.o
AC_MSG_RESULT([$ac_compile_nvcc])
- if test "x$ac_compile_nvcc" = "xno"
+ if test "x$ac_compile_nvcc" = "xno" && test "x$enable_cuda_env_check" = "xyes"
then
AC_MSG_WARN([CUDA compiler has problems.])
fi
@@ -149,10 +154,13 @@ EOF
LIBS="$CUDA_LDLIBS $LIBS"
# And the header and the lib
- AC_CHECK_LIB([cuda], [cuInit], [], AC_MSG_FAILURE([Couldn't find libcuda]))
- AC_CHECK_LIB([cudart], [cudaMalloc], [], AC_MSG_FAILURE([Couldn't find libcudart]))
- AC_CHECK_LIB([cublas], [cublasInit], [], AC_MSG_FAILURE([Couldn't find libcublas]))
- AC_CHECK_LIB([cufft], [cufftPlanMany], [], AC_MSG_FAILURE([Couldn't find libcufft]))
+ if test "x$enable_cuda_env_check" = "xyes"
+ then
+ AC_CHECK_LIB([cuda], [cuInit], [], AC_MSG_FAILURE([Couldn't find libcuda]))
+ AC_CHECK_LIB([cudart], [cudaMalloc], [], AC_MSG_FAILURE([Couldn't find libcudart]))
+ AC_CHECK_LIB([cublas], [cublasInit], [], AC_MSG_FAILURE([Couldn't find libcublas]))
+ AC_CHECK_LIB([cufft], [cufftPlanMany], [], AC_MSG_FAILURE([Couldn't find libcufft]))
+ fi
new_cusolver="yes"
AC_CHECK_LIB([cusolver], [cusolverDnZhegvdx_bufferSize], [], new_cusolver="no")
@@ -163,19 +171,24 @@ EOF
AC_DEFINE(HAVE_CUDA,1,[Define if we have CUDA])
try_dflags="$try_dflags -D__CUDA"
+ cuda_extlibs="devxlib"
+ cuda_libs="-Mcudalib=cufft,cublas,cusolver \$(TOPDIR)/external/devxlib/src/libdevXlib.a"
+ cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/external/devxlib/src"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/external/devxlib/include"
+
if test ${new_cusolver} != yes; then
- cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime \$(MOD_FLAG)\$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve"
- cuda_extlibs="eigensolver"
- cuda_libs="-Mcudalib=cufft,cublas,cusolver \$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve/lib_eigsolve.a"
+ cuda_fflags="$cuda_fflags \$(MOD_FLAG)\$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve"
+ cuda_extlibs="$cuda_extlibs eigensolver"
+ cuda_libs="$cuda_libs \$(TOPDIR)/EIGENSOLVER_GPU/lib_eigsolve/lib_eigsolve.a"
AC_MSG_WARN([Using legacy custom solver.])
else
- cuda_fflags="-Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
- cuda_libs="-Mcudalib=cufft,cublas,cusolver"
try_dflags="$try_dflags -D__USE_CUSOLVER"
fi
ldflags="$ldflags -Mcuda=cc$with_cuda_cc,cuda$with_cuda_runtime"
gpu_arch="$with_cuda_cc"
gpu_runtime="$with_cuda_runtime"
+ cuda_path="$CUDAPATH"
fi
# Announcing the new variables
@@ -190,4 +203,5 @@ AC_SUBST(gpu_runtime)
AC_SUBST(cuda_fflags)
AC_SUBST(cuda_libs)
AC_SUBST(cuda_extlibs)
+AC_SUBST(cuda_path)
])
diff --git a/install/make.inc.in b/install/make.inc.in
index 27e1f4e43..99d04ac31 100644
--- a/install/make.inc.in
+++ b/install/make.inc.in
@@ -84,6 +84,9 @@ F90 = @f90@
CC = @cc@
F77 = @f77@
+# CUDA Toolkit path
+CUDA_PATH=@cuda_path@
+
# GPU architecture (Kepler: 35, Pascal: 60, Volta: 70 )
GPU_ARCH=@gpu_arch@
diff --git a/test-suite/buildbot/Cineca_farm/check_smtp.py b/test-suite/buildbot/Cineca_farm/check_smtp.py
index e9b4d6c44..8ad7c7fdc 100644
--- a/test-suite/buildbot/Cineca_farm/check_smtp.py
+++ b/test-suite/buildbot/Cineca_farm/check_smtp.py
@@ -1,9 +1,9 @@
-#! /usr/bin/python -tt
+#!/usr/bin/env python3
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
-
+from builtins import input
from getpass import getpass
from smtplib import SMTP
@@ -14,7 +14,6 @@ name and password would allow to send e-mail through it.
"""
-
SMTP_HOST = 'smtp.gmail.com:587'
LOCAL_HOST = ''
@@ -28,12 +27,12 @@ def main():
# server.ehlo()
# print(server.ehlo())
-
+
server.starttls()
print(server.ehlo(LOCAL_HOST))
- user = raw_input('user: ')
+ user = input('user: ')
password = getpass('password: ')
print(server.login(user, password))
@@ -41,17 +40,17 @@ def main():
fromaddr = 'testfarmqef@gmail.com'
toaddrs = 'samuel.pon@gmail.com'
msg = "\r\n".join([
- "From: testfarmqef@gmail.com",
- "To: samuel.pon@gmail.com",
- "Subject: Buildbot",
- "",
- "Why, oh why"
- ])
+ "From: testfarmqef@gmail.com",
+ "To: samuel.pon@gmail.com",
+ "Subject: Buildbot",
+ "",
+ "Why, oh why"
+ ])
-
- server.sendmail(fromaddr, toaddrs, msg)
+ server.sendmail(fromaddr, toaddrs, msg)
server.close()
+
if __name__ == '__main__':
main()
diff --git a/test-suite/epw_mob/pp.py b/test-suite/epw_mob/pp.py
index cc7dd82f9..5cd57ca96 100644
--- a/test-suite/epw_mob/pp.py
+++ b/test-suite/epw_mob/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -30,5 +29,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm -f _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*')
-
-
diff --git a/test-suite/not_epw_comp/grid.py b/test-suite/not_epw_comp/grid.py
index ae646f342..7f0916f13 100644
--- a/test-suite/not_epw_comp/grid.py
+++ b/test-suite/not_epw_comp/grid.py
@@ -1,11 +1,12 @@
+from __future__ import print_function
import numpy as np
-tot = 0
+tot = 0
-for ii in np.arange(0,1,0.25):
- for jj in np.arange(0,1,0.25):
- for kk in np.arange(0,1,0.25):
- print ii,' ',jj,' ',kk,' ',1.0/64
+for ii in np.arange(0, 1, 0.25):
+ for jj in np.arange(0, 1, 0.25):
+ for kk in np.arange(0, 1, 0.25):
+ print(ii, ' ', jj, ' ', kk, ' ', 1.0 / 64)
tot += 1
-print tot
+print(tot)
diff --git a/test-suite/not_epw_comp/pp.py b/test-suite/not_epw_comp/pp.py
index 8bcaadbdb..db6322b50 100644
--- a/test-suite/not_epw_comp/pp.py
+++ b/test-suite/not_epw_comp/pp.py
@@ -1,20 +1,19 @@
#
-# Post-processing script QE --> EPW
+# Post-processing script QE --> EPW
# 14/07/2015 - Samuel Ponce
#
+from builtins import input
import numpy as np
import os
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
-prefix = str(user_input)
+# Enter the number of irr. q-points
+prefix = input('Enter the prefix used for PH calculations (e.g. diam)\n')
-# Enter the number of irr. q-points
-user_input = raw_input('Enter the number of irreducible q-points\n')
-nqpt = user_input
+# Enter the number of irr. q-points
+nqpt = input('Enter the number of irreducible q-points\n')
try:
- nqpt = int(user_input)
+ nqpt = int(nqpt)
except ValueError:
raise Exception('The value you enter is not an integer!')
@@ -28,4 +27,3 @@ for iqpt in np.arange(1,nqpt+1):
else:
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
os.system('rm -f _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*')
-
diff --git a/test-suite/pw_lda+U/benchmark.out.git.inp=lda+U+V-user_ns.in b/test-suite/pw_lda+U/benchmark.out.git.inp=lda+U+V-user_ns.in
new file mode 100644
index 000000000..f75a5dffb
--- /dev/null
+++ b/test-suite/pw_lda+U/benchmark.out.git.inp=lda+U+V-user_ns.in
@@ -0,0 +1,889 @@
+
+ Program PWSCF v.6.6 starts on 7Oct2020 at 10:28:16
+
+ This program is part of the open-source Quantum ESPRESSO suite
+ for quantum simulation of materials; please cite
+ "P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
+ "P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
+ URL http://www.quantum-espresso.org",
+ in publications or presentations arising from this work. More details at
+ http://www.quantum-espresso.org/quote
+
+ Parallel version (MPI), running on 1 processors
+
+ MPI processes distributed on 1 nodes
+ Reading input from lda+U+V-user_ns.in
+
+ Current dimensions of program PWSCF are:
+ Max number of different atomic species (ntypx) = 10
+ Max number of k-points (npk) = 40000
+ Max angular momentum in pseudopotentials (lmaxx) = 3
+
+ Reading Hubbard V parameters from the input...
+
+ Message from routine volume:
+ axis vectors are left-handed
+ file O.pz-rrkjus.UPF: wavefunction(s) 2S renormalized
+ file Fe.pz-nd-rrkjus.UPF: wavefunction(s) 4S renormalized
+ file Fe.pz-nd-rrkjus.UPF: wavefunction(s) 4S renormalized
+
+ Subspace diagonalization in iterative solution of the eigenvalue problem:
+ a serial algorithm will be used
+
+ Message from routine setup:
+ using ibrav=0 with symmetry is DISCOURAGED, use correct ibrav instead
+ First shells distances (in Bohr):
+ shell: 1 0.000000
+ shell: 2 4.095000
+ shell: 3 5.791205
+ shell: 4 7.092748
+ shell: 5 8.190000
+ shell: 6 9.156698
+ shell: 7 10.030660
+
+ i j dist (Bohr) stan-stan stan-bac bac-bac bac-stan
+ 1 1 0.00000000 V = 0.0000 0.0000 0.0000 0.0000
+ 1 107 21.27824417 V = 0.8000 0.0000 0.0000 0.0000
+ 2 2 0.00000000 V = 0.0000 0.0000 0.0000 0.0000
+ 2 3 21.27824417 V = 0.8000 0.0000 0.0000 0.0000
+ 3 2 21.27824417 V = 0.8000 0.0000 0.0000 0.0000
+ 3 3 0.00000000 V = 4.3000 0.0000 0.0000 0.0000
+ 3 5 21.27824417 V = 0.8000 0.0000 0.0000 0.0000
+ 4 4 0.00000000 V = 4.3000 0.0000 0.0000 0.0000
+
+ G-vector sticks info
+ --------------------
+ sticks: dense smooth PW G-vecs: dense smooth PW
+ Sum 1061 539 163 17255 6111 1081
+
+
+
+ bravais-lattice index = 0
+ lattice parameter (alat) = 8.1900 a.u.
+ unit-cell volume = 274.6766 (a.u.)^3
+ number of atoms/cell = 4
+ number of atomic types = 3
+ number of electrons = 28.00
+ number of Kohn-Sham states= 20
+ kinetic-energy cutoff = 30.0000 Ry
+ charge density cutoff = 240.0000 Ry
+ convergence threshold = 1.0E-08
+ mixing beta = 0.3000
+ number of iterations used = 8 plain mixing
+ Exchange-correlation= SLA PZ NOGX NOGC
+ ( 1 1 0 0 0 0 0)
+
+ celldm(1)= 8.190000 celldm(2)= 0.000000 celldm(3)= 0.000000
+ celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
+
+ crystal axes: (cart. coord. in units of alat)
+ a(1) = ( 0.500000 0.500000 1.000000 )
+ a(2) = ( 0.500000 1.000000 0.500000 )
+ a(3) = ( 1.000000 0.500000 0.500000 )
+
+ reciprocal axes: (cart. coord. in units 2 pi/alat)
+ b(1) = ( -0.500000 -0.500000 1.500000 )
+ b(2) = ( -0.500000 1.500000 -0.500000 )
+ b(3) = ( 1.500000 -0.500000 -0.500000 )
+
+
+ PseudoPot. # 1 for O read from file:
+ /scratch/timrov/QE_GitLab_Timrov/tmp4/q-e/test-suite/..//pseudo/O.pz-rrkjus.UPF
+ MD5 check sum: b574877712b4ae31214c077877edcb7d
+ Pseudo is Ultrasoft, Zval = 6.0
+ Generated by new atomic code, or converted to UPF format
+ Using radial grid of 1269 points, 4 beta functions with:
+ l(1) = 0
+ l(2) = 0
+ l(3) = 1
+ l(4) = 1
+ Q(r) pseudized with 0 coefficients
+
+
+ PseudoPot. # 2 for Fe read from file:
+ /scratch/timrov/QE_GitLab_Timrov/tmp4/q-e/test-suite/..//pseudo/Fe.pz-nd-rrkjus.UPF
+ MD5 check sum: b5eb2b1fd79b39c9eac5f7a31bc313a7
+ Pseudo is Ultrasoft + core correction, Zval = 8.0
+ Generated by new atomic code, or converted to UPF format
+ Using radial grid of 957 points, 6 beta functions with:
+ l(1) = 0
+ l(2) = 0
+ l(3) = 1
+ l(4) = 1
+ l(5) = 2
+ l(6) = 2
+ Q(r) pseudized with 0 coefficients
+
+
+ PseudoPot. # 3 for Fe read from file:
+ /scratch/timrov/QE_GitLab_Timrov/tmp4/q-e/test-suite/..//pseudo/Fe.pz-nd-rrkjus.UPF
+ MD5 check sum: b5eb2b1fd79b39c9eac5f7a31bc313a7
+ Pseudo is Ultrasoft + core correction, Zval = 8.0
+ Generated by new atomic code, or converted to UPF format
+ Using radial grid of 957 points, 6 beta functions with:
+ l(1) = 0
+ l(2) = 0
+ l(3) = 1
+ l(4) = 1
+ l(5) = 2
+ l(6) = 2
+ Q(r) pseudized with 0 coefficients
+
+
+ atomic species valence mass pseudopotential
+ O1 6.00 1.00000 O ( 1.00)
+ Fe1 8.00 1.00000 Fe( 1.00)
+ Fe2 8.00 1.00000 Fe( 1.00)
+
+ Starting magnetic structure
+ atomic species magnetization
+ O1 0.000
+ Fe1 0.500
+ Fe2 -0.500
+
+
+
+ 12 Sym. Ops., with inversion, found
+
+
+
+ Cartesian axes
+
+ site n. atom positions (alat units)
+ 1 O1 tau( 1) = ( 0.5000000 0.5000000 0.5000000 )
+ 2 O1 tau( 2) = ( 1.5000000 1.5000000 1.5000000 )
+ 3 Fe1 tau( 3) = ( 0.0000000 0.0000000 0.0000000 )
+ 4 Fe2 tau( 4) = ( 1.0000000 1.0000000 1.0000000 )
+
+ number of k points= 4 Gaussian smearing, width (Ry)= 0.0100
+ cart. coord. in units 2pi/alat
+ k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 0.1250000
+ k( 2) = ( -0.7500000 0.2500000 0.2500000), wk = 0.3750000
+ k( 3) = ( -0.5000000 -0.5000000 0.5000000), wk = 0.3750000
+ k( 4) = ( -0.2500000 -0.2500000 -0.2500000), wk = 0.1250000
+
+ Dense grid: 17255 G-vectors FFT dimensions: ( 50, 50, 50)
+
+ Smooth grid: 6111 G-vectors FFT dimensions: ( 36, 36, 36)
+
+ Estimated max dynamical RAM per process > 88.18 MB
+
+ Check: negative core charge= -0.000003
+ Generating pointlists ...
+ new r_m : 0.2063 (alat units) 1.6892 (a.u.) for type 1
+ new r_m : 0.2063 (alat units) 1.6892 (a.u.) for type 2
+ new r_m : 0.2063 (alat units) 1.6892 (a.u.) for type 3
+
+ Initial potential from superposition of free atoms
+
+ starting charge 27.99905, renormalised to 28.00000
+ Number of +U iterations with fixed ns = 0
+ Starting occupations:
+ --- enter write_nsg ---
+ Atom: 1 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.667
+ 1.000 0.000 0.000
+ 0.667
+ 0.000 1.000 0.000
+ 0.667
+ 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.667 0.000 0.000
+ 0.000 0.667 0.000
+ 0.000 0.000 0.667
+ Atom: 2 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.667
+ 1.000 0.000 0.000
+ 0.667
+ 0.000 1.000 0.000
+ 0.667
+ 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.667 0.000 0.000
+ 0.000 0.667 0.000
+ 0.000 0.000 0.667
+ Atom: 3 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 1.000
+ 1.000 0.000 0.000 0.000 0.000
+ 1.000
+ 0.000 1.000 0.000 0.000 0.000
+ 1.000
+ 0.000 0.000 1.000 0.000 0.000
+ 1.000
+ 0.000 0.000 0.000 1.000 0.000
+ 1.000
+ 0.000 0.000 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 1.000 0.000 0.000 0.000 0.000
+ 0.000 1.000 0.000 0.000 0.000
+ 0.000 0.000 1.000 0.000 0.000
+ 0.000 0.000 0.000 1.000 0.000
+ 0.000 0.000 0.000 0.000 1.000
+ Atom: 4 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.200
+ 1.000 0.000 0.000 0.000 0.000
+ 0.200
+ 0.000 1.000 0.000 0.000 0.000
+ 0.200
+ 0.000 0.000 1.000 0.000 0.000
+ 0.200
+ 0.000 0.000 0.000 1.000 0.000
+ 0.200
+ 0.000 0.000 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.200 0.000 0.000 0.000 0.000
+ 0.000 0.200 0.000 0.000 0.000
+ 0.000 0.000 0.200 0.000 0.000
+ 0.000 0.000 0.000 0.200 0.000
+ 0.000 0.000 0.000 0.000 0.200
+ Atom: 1 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.667
+ 1.000 0.000 0.000
+ 0.667
+ 0.000 1.000 0.000
+ 0.667
+ 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.667 0.000 0.000
+ 0.000 0.667 0.000
+ 0.000 0.000 0.667
+ Atom: 2 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.667
+ 1.000 0.000 0.000
+ 0.667
+ 0.000 1.000 0.000
+ 0.667
+ 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.667 0.000 0.000
+ 0.000 0.667 0.000
+ 0.000 0.000 0.667
+ Atom: 3 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.200
+ 1.000 0.000 0.000 0.000 0.000
+ 0.200
+ 0.000 1.000 0.000 0.000 0.000
+ 0.200
+ 0.000 0.000 1.000 0.000 0.000
+ 0.200
+ 0.000 0.000 0.000 1.000 0.000
+ 0.200
+ 0.000 0.000 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 0.200 0.000 0.000 0.000 0.000
+ 0.000 0.200 0.000 0.000 0.000
+ 0.000 0.000 0.200 0.000 0.000
+ 0.000 0.000 0.000 0.200 0.000
+ 0.000 0.000 0.000 0.000 0.200
+ Atom: 4 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 1.000
+ 1.000 0.000 0.000 0.000 0.000
+ 1.000
+ 0.000 1.000 0.000 0.000 0.000
+ 1.000
+ 0.000 0.000 1.000 0.000 0.000
+ 1.000
+ 0.000 0.000 0.000 1.000 0.000
+ 1.000
+ 0.000 0.000 0.000 0.000 1.000
+ occupation matrix before diagonalization:
+ 1.000 0.000 0.000 0.000 0.000
+ 0.000 1.000 0.000 0.000 0.000
+ 0.000 0.000 1.000 0.000 0.000
+ 0.000 0.000 0.000 1.000 0.000
+ 0.000 0.000 0.000 0.000 1.000
+atom 1 Tr[ns(na)]= 4.0000000
+atom 1 Mag[ns(na)]= 0.0000000
+atom 2 Tr[ns(na)]= 4.0000000
+atom 2 Mag[ns(na)]= 0.0000000
+atom 3 Tr[ns(na)]= 6.0000000
+atom 3 Mag[ns(na)]= 4.0000000
+atom 4 Tr[ns(na)]= 6.0000000
+atom 4 Mag[ns(na)]= -4.0000000
+ --- exit write_nsg ---
+ Atomic wfc used for LDA+U Projector are orthogonalized
+ Starting wfcs are 20 randomized atomic wfcs
+
+ total cpu time spent up to now is 1.2 secs
+
+ Self-consistent Calculation
+
+ iteration # 1 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 1.00E-02, avg # of iterations = 2.2
+ --- enter write_nsg ---
+ Atom: 1 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.943
+ 0.737 0.673 0.064
+ 0.943
+ -0.352 0.462 -0.814
+ 0.957
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.948 -0.005 -0.005
+ -0.005 0.948 0.005
+ -0.005 0.005 0.948
+ Atom: 2 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.943
+ 0.747 0.659 0.088
+ 0.943
+ -0.330 0.482 -0.812
+ 0.957
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.948 -0.005 -0.005
+ -0.005 0.948 0.005
+ -0.005 0.005 0.948
+ Atom: 3 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.994
+ 0.485 0.078 -0.153 -0.854 -0.076
+ 0.994
+ 0.854 -0.132 -0.001 0.485 -0.133
+ 0.995
+ 0.175 0.625 0.123 0.068 0.748
+ 0.995
+ -0.068 0.503 -0.793 0.175 -0.290
+ 0.995
+ -0.000 0.577 0.577 0.000 -0.577
+ occupation matrix before diagonalization:
+ 0.994 0.000 0.000 0.000 0.000
+ 0.000 0.995 0.000 0.000 -0.000
+ 0.000 0.000 0.995 -0.000 -0.000
+ 0.000 0.000 -0.000 0.994 -0.000
+ 0.000 -0.000 -0.000 -0.000 0.995
+ Atom: 4 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.077
+ -0.059 0.049 -0.052 0.996 -0.003
+ 0.077
+ -0.996 -0.032 -0.026 -0.059 -0.058
+ 0.209
+ 0.000 -0.577 -0.577 -0.000 0.577
+ 0.238
+ -0.067 0.130 0.631 0.025 0.761
+ 0.238
+ -0.025 0.804 -0.514 -0.067 0.290
+ occupation matrix before diagonalization:
+ 0.077 -0.005 -0.005 0.000 -0.009
+ -0.005 0.227 -0.009 -0.008 0.009
+ -0.005 -0.009 0.227 0.008 0.009
+ 0.000 -0.008 0.008 0.077 -0.000
+ -0.009 0.009 0.009 -0.000 0.227
+ Atom: 1 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.943
+ 0.722 0.691 0.031
+ 0.943
+ -0.381 0.435 -0.816
+ 0.957
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.947 -0.005 -0.005
+ -0.005 0.947 0.005
+ -0.005 0.005 0.947
+ Atom: 2 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.943
+ 0.722 0.691 0.031
+ 0.943
+ -0.381 0.435 -0.816
+ 0.957
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.947 -0.005 -0.005
+ -0.005 0.947 0.005
+ -0.005 0.005 0.947
+ Atom: 3 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.077
+ 0.418 -0.034 0.060 -0.905 0.025
+ 0.077
+ -0.905 -0.049 -0.005 -0.418 -0.054
+ 0.208
+ 0.000 -0.577 -0.577 -0.000 0.577
+ 0.237
+ -0.070 0.175 0.602 0.022 0.776
+ 0.237
+ -0.022 0.795 -0.549 -0.070 0.247
+ occupation matrix before diagonalization:
+ 0.077 -0.005 -0.005 0.000 -0.010
+ -0.005 0.227 -0.009 -0.008 0.009
+ -0.005 -0.009 0.227 0.008 0.009
+ 0.000 -0.008 0.008 0.077 -0.000
+ -0.010 0.009 0.009 -0.000 0.227
+ Atom: 4 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.994
+ -0.496 -0.084 0.170 0.843 0.086
+ 0.994
+ -0.843 0.148 -0.001 -0.496 0.146
+ 0.995
+ -0.196 -0.608 -0.145 -0.070 -0.753
+ 0.995
+ -0.070 0.518 -0.785 0.196 -0.267
+ 0.995
+ 0.000 0.577 0.577 0.000 -0.577
+ occupation matrix before diagonalization:
+ 0.994 0.000 0.000 0.000 0.000
+ 0.000 0.995 0.000 0.000 -0.000
+ 0.000 0.000 0.995 -0.000 -0.000
+ 0.000 0.000 -0.000 0.994 -0.000
+ 0.000 -0.000 -0.000 -0.000 0.995
+atom 1 Tr[ns(na)]= 5.6849416
+atom 1 Mag[ns(na)]= 0.0001347
+atom 2 Tr[ns(na)]= 5.6849416
+atom 2 Mag[ns(na)]= 0.0001347
+atom 3 Tr[ns(na)]= 5.8092330
+atom 3 Mag[ns(na)]= 4.1385627
+atom 4 Tr[ns(na)]= 5.8110759
+atom 4 Mag[ns(na)]= -4.1368385
+ --- exit write_nsg ---
+ Modify starting ns matrices according to input values
+
+ total cpu time spent up to now is 2.0 secs
+
+ total energy = -174.06832442 Ry
+ estimated scf accuracy < 2.48924695 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 8.47 Bohr mag/cell
+
+ iteration # 2 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 8.89E-03, avg # of iterations = 2.0
+
+ total cpu time spent up to now is 2.7 secs
+
+ total energy = -174.50798403 Ry
+ estimated scf accuracy < 0.20019944 Ry
+
+ total magnetization = -0.00 Bohr mag/cell
+ absolute magnetization = 7.28 Bohr mag/cell
+
+ iteration # 3 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 7.15E-04, avg # of iterations = 2.9
+
+ total cpu time spent up to now is 3.3 secs
+
+ total energy = -174.55831585 Ry
+ estimated scf accuracy < 0.10640678 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.38 Bohr mag/cell
+
+ iteration # 4 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 3.80E-04, avg # of iterations = 2.4
+
+ total cpu time spent up to now is 4.0 secs
+
+ total energy = -174.58311496 Ry
+ estimated scf accuracy < 0.02049251 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.41 Bohr mag/cell
+
+ iteration # 5 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 7.32E-05, avg # of iterations = 2.5
+
+ total cpu time spent up to now is 4.6 secs
+
+ total energy = -174.58682203 Ry
+ estimated scf accuracy < 0.00199218 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.38 Bohr mag/cell
+
+ iteration # 6 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 7.11E-06, avg # of iterations = 3.5
+
+ total cpu time spent up to now is 5.3 secs
+
+ total energy = -174.58738572 Ry
+ estimated scf accuracy < 0.00030896 Ry
+
+ total magnetization = -0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 7 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 1.10E-06, avg # of iterations = 3.5
+
+ total cpu time spent up to now is 6.0 secs
+
+ total energy = -174.58747147 Ry
+ estimated scf accuracy < 0.00004003 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 8 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 1.43E-07, avg # of iterations = 4.2
+
+ total cpu time spent up to now is 6.8 secs
+
+ total energy = -174.58750177 Ry
+ estimated scf accuracy < 0.00000464 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 9 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 1.66E-08, avg # of iterations = 5.0
+
+ total cpu time spent up to now is 7.7 secs
+
+ total energy = -174.58750681 Ry
+ estimated scf accuracy < 0.00000057 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 10 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 2.05E-09, avg # of iterations = 4.5
+
+ total cpu time spent up to now is 8.6 secs
+
+ total energy = -174.58750800 Ry
+ estimated scf accuracy < 0.00000043 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 11 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 1.54E-09, avg # of iterations = 2.0
+
+ total cpu time spent up to now is 9.4 secs
+
+ total energy = -174.58750864 Ry
+ estimated scf accuracy < 0.00000006 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 12 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 2.27E-10, avg # of iterations = 2.2
+
+ total cpu time spent up to now is 10.1 secs
+
+ total energy = -174.58750888 Ry
+ estimated scf accuracy < 0.00000001 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ iteration # 13 ecut= 30.00 Ry beta= 0.30
+ Davidson diagonalization with overlap
+ ethr = 4.99E-11, avg # of iterations = 3.8
+
+ Magnetic moment per site:
+ atom: 1 charge: 5.8611 magn: -0.0000 constr: 0.0000
+ atom: 2 charge: 5.8611 magn: -0.0000 constr: 0.0000
+ atom: 3 charge: 5.6781 magn: 3.3895 constr: 0.0000
+ atom: 4 charge: 5.6781 magn: -3.3894 constr: 0.0000
+
+ total cpu time spent up to now is 10.9 secs
+
+ End of self-consistent calculation
+ --- enter write_nsg ---
+ Atom: 1 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.871
+ 0.707 0.707 0.000
+ 0.871
+ -0.408 0.408 -0.816
+ 0.878
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.873 -0.003 -0.003
+ -0.003 0.873 0.003
+ -0.003 0.003 0.873
+ Atom: 2 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.871
+ 0.707 0.707 0.000
+ 0.871
+ -0.408 0.408 -0.816
+ 0.878
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.873 -0.003 -0.003
+ -0.003 0.873 0.003
+ -0.003 0.003 0.873
+ Atom: 3 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.990
+ -0.389 -0.004 0.006 0.921 0.002
+ 0.990
+ 0.921 -0.005 -0.001 0.389 -0.006
+ 0.995
+ 0.000 -0.577 -0.577 -0.000 0.577
+ 0.997
+ 0.008 0.408 0.408 -0.000 0.816
+ 0.997
+ 0.000 -0.707 0.707 -0.008 0.000
+ occupation matrix before diagonalization:
+ 0.990 0.000 0.000 0.000 0.000
+ 0.000 0.996 -0.001 0.000 0.001
+ 0.000 -0.001 0.996 -0.000 0.001
+ 0.000 0.000 -0.000 0.990 -0.000
+ 0.000 0.001 0.001 -0.000 0.996
+ Atom: 4 Spin: 1
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.055
+ -0.017 -0.609 0.772 0.081 0.164
+ 0.055
+ 0.081 -0.540 -0.257 0.017 -0.797
+ 0.171
+ -0.282 0.047 -0.066 0.956 -0.019
+ 0.171
+ 0.956 0.049 0.016 0.282 0.065
+ 0.975
+ 0.000 -0.577 -0.577 -0.000 0.577
+ occupation matrix before diagonalization:
+ 0.170 0.004 0.004 0.000 0.008
+ 0.004 0.362 0.306 0.007 -0.306
+ 0.004 0.306 0.362 -0.007 -0.306
+ 0.000 0.007 -0.007 0.170 -0.000
+ 0.008 -0.306 -0.306 -0.000 0.362
+ Atom: 1 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.871
+ 0.738 0.671 0.067
+ 0.871
+ -0.349 0.465 -0.814
+ 0.878
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.873 -0.003 -0.003
+ -0.003 0.873 0.003
+ -0.003 0.003 0.873
+ Atom: 2 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.871
+ 0.707 0.707 0.000
+ 0.871
+ -0.408 0.408 -0.816
+ 0.878
+ -0.577 0.577 0.577
+ occupation matrix before diagonalization:
+ 0.873 -0.003 -0.003
+ -0.003 0.873 0.003
+ -0.003 0.003 0.873
+ Atom: 3 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.055
+ -0.030 -0.510 0.804 0.078 0.295
+ 0.055
+ 0.078 -0.634 -0.124 0.030 -0.758
+ 0.171
+ -0.237 0.049 -0.066 0.968 -0.016
+ 0.171
+ 0.968 0.047 0.019 0.237 0.066
+ 0.974
+ 0.000 -0.577 -0.577 -0.000 0.577
+ occupation matrix before diagonalization:
+ 0.170 0.004 0.004 0.000 0.008
+ 0.004 0.362 0.306 0.007 -0.306
+ 0.004 0.306 0.362 -0.007 -0.306
+ 0.000 0.007 -0.007 0.170 -0.000
+ 0.008 -0.306 -0.306 -0.000 0.362
+ Atom: 4 Spin: 2
+ eigenvalues and eigenvectors of the occupation matrix:
+ 0.990
+ -0.456 -0.003 0.006 0.890 0.003
+ 0.990
+ -0.890 0.005 0.000 -0.456 0.006
+ 0.995
+ 0.000 -0.577 -0.577 -0.000 0.577
+ 0.997
+ 0.008 0.425 0.391 0.000 0.816
+ 0.997
+ 0.000 -0.697 0.717 -0.008 0.020
+ occupation matrix before diagonalization:
+ 0.990 0.000 0.000 0.000 0.000
+ 0.000 0.996 -0.001 0.000 0.001
+ 0.000 -0.001 0.996 -0.000 0.001
+ 0.000 0.000 -0.000 0.990 -0.000
+ 0.000 0.001 0.001 -0.000 0.996
+atom 1 Tr[ns(na)]= 5.2401524
+atom 1 Mag[ns(na)]= 0.0000095
+atom 2 Tr[ns(na)]= 5.2401524
+atom 2 Mag[ns(na)]= 0.0000095
+atom 3 Tr[ns(na)]= 6.3935720
+atom 3 Mag[ns(na)]= 3.5428346
+atom 4 Tr[ns(na)]= 6.3935709
+atom 4 Mag[ns(na)]= -3.5428541
+ --- exit write_nsg ---
+
+ ------ SPIN UP ------------
+
+
+ k = 0.0000 0.0000 0.0000 ( 731 PWs) bands (ev):
+
+ -8.6635 -7.4040 2.2308 3.7513 3.7513 5.3016 5.3016 6.7948
+ 7.8898 7.9453 7.9453 8.3596 8.3596 9.6959 11.6106 12.8098
+ 12.8098 13.9151 13.9151 15.5234
+
+ k =-0.7500 0.2500 0.2500 ( 764 PWs) bands (ev):
+
+ -7.6252 -7.3369 2.8992 3.7830 4.2305 4.2352 5.3425 5.5932
+ 6.2103 6.5893 7.0478 8.5879 9.0050 9.3476 12.6590 13.1993
+ 13.7472 14.0789 17.3920 17.6861
+
+ k =-0.5000-0.5000 0.5000 ( 780 PWs) bands (ev):
+
+ -7.5257 -7.4199 2.3433 4.2175 4.2531 4.2534 5.3403 5.5298
+ 6.7162 6.7407 6.9207 8.5161 8.7315 9.6260 12.7043 13.2595
+ 14.1866 14.2868 15.3331 16.6978
+
+ k =-0.2500-0.2500-0.2500 ( 748 PWs) bands (ev):
+
+ -8.1123 -8.0643 3.8351 3.8387 3.8387 4.6374 5.3440 5.3440
+ 7.0483 7.0483 7.6438 9.2946 9.2946 9.3598 12.7706 12.7706
+ 13.6772 13.6772 14.1447 14.4302
+
+ ------ SPIN DOWN ----------
+
+
+ k = 0.0000 0.0000 0.0000 ( 731 PWs) bands (ev):
+
+ -8.6635 -7.4040 2.2228 3.7514 3.7514 5.3035 5.3035 6.7936
+ 7.8898 7.9452 7.9452 8.3612 8.3612 9.7059 11.6106 12.8074
+ 12.8074 13.9137 13.9137 15.5233
+
+ k =-0.7500 0.2500 0.2500 ( 764 PWs) bands (ev):
+
+ -7.6252 -7.3370 2.9017 3.7847 4.2290 4.2346 5.3428 5.5981
+ 6.2085 6.5887 7.0483 8.5865 9.0071 9.3411 12.6611 13.1994
+ 13.7463 14.0783 17.3920 17.6860
+
+ k =-0.5000-0.5000 0.5000 ( 780 PWs) bands (ev):
+
+ -7.5257 -7.4199 2.3437 4.2159 4.2531 4.2563 5.3406 5.5281
+ 6.7162 6.7407 6.9215 8.5226 8.7326 9.6171 12.7059 13.2597
+ 14.1854 14.2866 15.3331 16.6979
+
+ k =-0.2500-0.2500-0.2500 ( 748 PWs) bands (ev):
+
+ -8.1123 -8.0643 3.8324 3.8385 3.8385 4.6280 5.3457 5.3457
+ 7.0509 7.0509 7.6471 9.2940 9.2940 9.3685 12.7682 12.7682
+ 13.6760 13.6760 14.1447 14.4310
+
+ the Fermi energy is 10.3943 ev
+
+! total energy = -174.58750911 Ry
+ estimated scf accuracy < 1.5E-10 Ry
+ smearing contrib. (-TS) = -0.00000000 Ry
+ internal energy E=F+TS = -174.58750911 Ry
+
+ The total energy is F=E-TS. E is the sum of the following terms:
+ one-electron contribution = 0.55289282 Ry
+ hartree contribution = 28.09310460 Ry
+ xc contribution = -65.86422036 Ry
+ ewald contribution = -137.50929535 Ry
+ Hubbard energy = 0.14000918 Ry
+
+ total magnetization = 0.00 Bohr mag/cell
+ absolute magnetization = 7.39 Bohr mag/cell
+
+ convergence has been achieved in 13 iterations
+
+ Forces acting on atoms (cartesian axes, Ry/au):
+
+ atom 1 type 1 force = 0.00000305 0.00000305 0.00000305
+ atom 2 type 1 force = -0.00000305 -0.00000305 -0.00000305
+ atom 3 type 2 force = -0.00000000 0.00000000 0.00000000
+ atom 4 type 3 force = 0.00000000 0.00000000 0.00000000
+
+ Total force = 0.000007 Total SCF correction = 0.000006
+ SCF correction compared to forces is large: reduce conv_thr to get better values
+
+
+ Computing stress (Cartesian axis) and pressure
+
+ total stress (Ry/bohr**3) (kbar) P= -116.64
+ -0.00079290 -0.00025323 -0.00025323 -116.64 -37.25 -37.25
+ -0.00025323 -0.00079290 -0.00025323 -37.25 -116.64 -37.25
+ -0.00025323 -0.00025323 -0.00079290 -37.25 -37.25 -116.64
+
+
+ Writing output data file ./pwscf.save/
+
+ init_run : 1.04s CPU 1.08s WALL ( 1 calls)
+ electrons : 8.96s CPU 9.70s WALL ( 1 calls)
+ forces : 0.37s CPU 0.40s WALL ( 1 calls)
+ stress : 0.93s CPU 0.99s WALL ( 1 calls)
+
+ Called by init_run:
+ wfcinit : 0.25s CPU 0.26s WALL ( 1 calls)
+ potinit : 0.04s CPU 0.04s WALL ( 1 calls)
+ hinit0 : 0.70s CPU 0.70s WALL ( 1 calls)
+
+ Called by electrons:
+ c_bands : 5.20s CPU 5.24s WALL ( 13 calls)
+ sum_band : 2.66s CPU 3.04s WALL ( 13 calls)
+ v_of_rho : 0.31s CPU 0.30s WALL ( 14 calls)
+ newd : 0.73s CPU 1.07s WALL ( 14 calls)
+ mix_rho : 0.09s CPU 0.09s WALL ( 13 calls)
+
+ Called by c_bands:
+ init_us_2 : 0.09s CPU 0.10s WALL ( 256 calls)
+ cegterg : 4.90s CPU 4.97s WALL ( 104 calls)
+
+ Called by *egterg:
+ cdiaghg : 0.14s CPU 0.15s WALL ( 430 calls)
+ h_psi : 4.66s CPU 4.74s WALL ( 438 calls)
+ s_psi : 0.06s CPU 0.07s WALL ( 478 calls)
+ g_psi : 0.02s CPU 0.02s WALL ( 326 calls)
+
+ Called by h_psi:
+ h_psi:calbec : 0.05s CPU 0.06s WALL ( 438 calls)
+ vloc_psi : 4.44s CPU 4.48s WALL ( 438 calls)
+ add_vuspsi : 0.05s CPU 0.06s WALL ( 438 calls)
+ vhpsi : 0.12s CPU 0.14s WALL ( 438 calls)
+
+ General routines
+ calbec : 0.28s CPU 0.30s WALL ( 4324 calls)
+ fft : 0.15s CPU 0.17s WALL ( 158 calls)
+ ffts : 0.02s CPU 0.02s WALL ( 54 calls)
+ fftw : 4.62s CPU 4.73s WALL ( 13004 calls)
+ interpolate : 0.04s CPU 0.05s WALL ( 28 calls)
+ davcio : 0.00s CPU 0.00s WALL ( 8 calls)
+
+ Parallel routines
+
+ Hubbard U routines
+ new_nsg : 0.03s CPU 0.03s WALL ( 13 calls)
+ alloc_neigh : 0.00s CPU 0.00s WALL ( 1 calls)
+ vhpsi : 0.12s CPU 0.14s WALL ( 438 calls)
+ force_hub : 0.23s CPU 0.23s WALL ( 1 calls)
+ stres_hub : 0.40s CPU 0.41s WALL ( 1 calls)
+
+ PWSCF : 11.44s CPU 12.31s WALL
+
+
+ This run was terminated on: 10:28:28 7Oct2020
+
+=------------------------------------------------------------------------------=
+ JOB DONE.
+=------------------------------------------------------------------------------=
diff --git a/test-suite/pw_lda+U/lda+U+V-user_ns.in b/test-suite/pw_lda+U/lda+U+V-user_ns.in
new file mode 100644
index 000000000..90484eac2
--- /dev/null
+++ b/test-suite/pw_lda+U/lda+U+V-user_ns.in
@@ -0,0 +1,43 @@
+ &control
+ calculation = 'scf'
+ tprnfor = .true.
+ tstress = .true.
+ /
+ &system
+ ibrav= 0, celldm(1)=8.19, nat= 4, ntyp= 3,
+ ecutwfc = 30.0, ecutrho = 240.0, nbnd=20,
+ starting_magnetization(1)= 0.0,
+ starting_magnetization(2)= 0.5,
+ starting_magnetization(3)=-0.5,
+ occupations='smearing', smearing='gauss', degauss=0.01,
+ nspin=2,
+ lda_plus_u=.true.,
+ lda_plus_u_kind = 2,
+ Hubbard_V(3,3,1) = 4.3,
+ Hubbard_V(3,2,1) = 0.8,
+ Hubbard_V(4,4,1) = 4.3,
+ U_projection_type = 'ortho-atomic',
+ starting_ns_eigenvalue(3,2,2) = 1.d0
+ starting_ns_eigenvalue(3,1,3) = 1.d0
+ /
+ &electrons
+ mixing_mode = 'plain'
+ mixing_beta = 0.3
+ conv_thr = 1.0d-8
+ mixing_fixed_ns = 0
+ /
+CELL_PARAMETERS (alat)
+0.50 0.50 1.00
+0.50 1.00 0.50
+1.00 0.50 0.50
+ATOMIC_SPECIES
+ O1 1. O.pz-rrkjus.UPF
+ Fe1 1. Fe.pz-nd-rrkjus.UPF
+ Fe2 1. Fe.pz-nd-rrkjus.UPF
+ATOMIC_POSITIONS {crystal}
+ O1 0.25 0.25 0.25
+ O1 0.75 0.75 0.75
+ Fe1 0.0 0.0 0.0
+ Fe2 0.5 0.5 0.5
+K_POINTS {automatic}
+2 2 2 0 0 0
diff --git a/test-suite/testcode/bin/testcode.py b/test-suite/testcode/bin/testcode.py
index ed474227f..93517712c 100755
--- a/test-suite/testcode/bin/testcode.py
+++ b/test-suite/testcode/bin/testcode.py
@@ -26,6 +26,7 @@ documentation for further details.'''
# copyright: (c) 2012 James Spencer
# license: modified BSD; see LICENSE for more details
+from __future__ import print_function
import glob
import optparse
import os
diff --git a/test-suite/testcode/lib/testcode2/__init__.py b/test-suite/testcode/lib/testcode2/__init__.py
index acf422121..b823c058b 100644
--- a/test-suite/testcode/lib/testcode2/__init__.py
+++ b/test-suite/testcode/lib/testcode2/__init__.py
@@ -8,6 +8,7 @@ A framework for regression testing numerical programs.
:license: modified BSD; see LICENSE for more details.
'''
+from __future__ import print_function
import glob
import os
import pipes
diff --git a/test-suite/testcode/lib/testcode2/config.py b/test-suite/testcode/lib/testcode2/config.py
index b4d0ebfdc..4ac1cfdaa 100644
--- a/test-suite/testcode/lib/testcode2/config.py
+++ b/test-suite/testcode/lib/testcode2/config.py
@@ -8,6 +8,7 @@ Parse jobconfig and userconfig ini files.
:license: modified BSD; see LICENSE for more details.
'''
+from __future__ import print_function
import copy
import glob
import os
diff --git a/test-suite/testcode/lib/testcode2/exceptions.py b/test-suite/testcode/lib/testcode2/exceptions.py
index 11652169e..ea356dc23 100644
--- a/test-suite/testcode/lib/testcode2/exceptions.py
+++ b/test-suite/testcode/lib/testcode2/exceptions.py
@@ -8,6 +8,7 @@ Custom exceptions. Initialise signal handler for the interrupt signal.
:license: modified BSD; see LICENSE for more details.
'''
+from __future__ import print_function
import signal
import sys
diff --git a/test-suite/testcode/lib/testcode2/validation.py b/test-suite/testcode/lib/testcode2/validation.py
index 08abb4d88..ad9b0c535 100644
--- a/test-suite/testcode/lib/testcode2/validation.py
+++ b/test-suite/testcode/lib/testcode2/validation.py
@@ -8,6 +8,7 @@ Classes and functions for comparing data.
:license: modified BSD; see LICENSE for more details.
'''
+from __future__ import print_function
import re
import sys
import warnings
diff --git a/upflib/CMakeLists.txt b/upflib/CMakeLists.txt
index 5b731a1dc..dc2a183cb 100644
--- a/upflib/CMakeLists.txt
+++ b/upflib/CMakeLists.txt
@@ -45,6 +45,32 @@ target_link_libraries(qe_upflib
PUBLIC
QE::FOX)
+##############################################################
+# virtual_v2.x
+##############################################################
+set(sources virtual_v2.f90)
+qe_add_executable(qe_upflib_virtual_v2_exe ${sources})
+set_target_properties(qe_upflib_virtual_v2_exe PROPERTIES OUTPUT_NAME virtual_v2.x)
+target_link_libraries(qe_upflib_virtual_v2_exe
+ PRIVATE
+ QE::UPF
+)
###########################################################
+# upfconv.x
+###########################################################
+set(sources
+ upfconv.f90
+ casino_pp.f90
+)
+qe_add_executable(qe_upflib_upfconv_exe ${sources})
+set_target_properties(qe_upflib_upfconv_exe PROPERTIES OUTPUT_NAME upfconv.x)
+target_link_libraries(qe_upflib_upfconv_exe
+ PRIVATE
+ QE::UPF
+)
-qe_install_targets(qe_upflib)
+############################################################################
+qe_install_targets(qe_upflib
+ qe_upflib_virtual_v2_exe
+ qe_upflib_upfconv_exe
+)
diff --git a/upflib/fixfiles.py b/upflib/fixfiles.py
index ec4f8e06b..5a708a83d 100755
--- a/upflib/fixfiles.py
+++ b/upflib/fixfiles.py
@@ -4,6 +4,7 @@ simple script to mark as CDATA all text contained in PP_INPUTFILE element. It
avoids any issue related to the presence on XML reserved characters in that
section.
"""
+from __future__ import print_function
from subprocess import Popen, PIPE
from xml.etree import cElementTree as eT
import os
diff --git a/upflib/read_upf_new.f90 b/upflib/read_upf_new.f90
index 191251350..d94cc4bd9 100644
--- a/upflib/read_upf_new.f90
+++ b/upflib/read_upf_new.f90
@@ -721,7 +721,9 @@ CONTAINS
CALL xmlr_opentag( 'PP_GIPAW_CORE_ORBITALS')
CALL get_attr ('number_of_core_orbitals', upf%gipaw_ncore_orbitals)
ELSE
- print *, 'FIXME! upf%gipaw_ncore_orbitals'
+ CALL xmlr_readtag ('number_of_core_orbitals', upf%gipaw_ncore_orbitals)
+ IF ( .NOT. upf%paw_as_gipaw) &
+ CALL xmlr_readtag( 'number_of_valence_orbitals', upf%gipaw_wfs_nchannels)
END IF
ALLOCATE ( upf%gipaw_core_orbital(upf%mesh,upf%gipaw_ncore_orbitals) )
ALLOCATE ( upf%gipaw_core_orbital_n(upf%gipaw_ncore_orbitals) )
@@ -778,8 +780,6 @@ CONTAINS
CALL xmlr_opentag( 'PP_GIPAW_ORBITALS' )
CALL get_attr( 'number_of_valence_orbitals', &
upf%gipaw_wfs_nchannels )
- ELSE
- print *, 'FIXME! upf%gipaw_wfs_nchannel'
END IF
ALLOCATE ( upf%gipaw_wfs_el(upf%gipaw_wfs_nchannels) )
ALLOCATE ( upf%gipaw_wfs_ll(upf%gipaw_wfs_nchannels) )
diff --git a/upflib/write_upf_new.f90 b/upflib/write_upf_new.f90
index b31abf4c6..d24de6211 100644
--- a/upflib/write_upf_new.f90
+++ b/upflib/write_upf_new.f90
@@ -816,6 +816,10 @@ CONTAINS
IF ( v2 ) THEN
call add_attr( 'number_of_core_orbitals', upf%gipaw_ncore_orbitals )
CALL xmlw_opentag( 'PP_GIPAW_CORE_ORBITALS' )
+ ELSE
+ CALL xmlw_writetag('number_of_core_orbitals', upf%gipaw_ncore_orbitals )
+ IF ( .NOT. upf%paw_as_gipaw ) &
+ CALL xmlw_writetag('number_of_valence_orbitals', upf%gipaw_wfs_nchannels)
END IF
DO nb = 1,upf%gipaw_ncore_orbitals
IF ( v2 ) THEN
diff --git a/upflib/write_upf_schema.f90 b/upflib/write_upf_schema.f90
index 7e2e1a7db..4be6321b5 100644
--- a/upflib/write_upf_schema.f90
+++ b/upflib/write_upf_schema.f90
@@ -733,6 +733,14 @@ CONTAINS
CALL xml_newElement(u, 'pp_gipaw')
CALL xml_addAttribute(u, 'gipaw_data_format', upf%gipaw_data_format )
+ CALL xml_NewElement (u, 'number_of_core_orbitals')
+ CALL xml_AddCharacters(u, upf%gipaw_ncore_orbitals)
+ CALL xml_endElement(u, 'number_of_core_orbitals')
+ IF ( .NOT. upf%paw_as_gipaw ) THEN
+ CALL xml_newElement (u, 'number_of_valence_orbitals')
+ CALL xml_AddCharacters(u, upf%gipaw_wfs_nchannels)
+ CALL xml_endElement(u, 'number_of_valence_orbitals')
+ END IF
DO nb = 1,upf%gipaw_ncore_orbitals
CALL xml_NewElement(u, 'pp_gipaw_core_orbital')
CALL xml_addAttribute(u, 'size', upf%mesh)