diff --git a/_multibuild b/_multibuild
index 47f968d..a7a13e1 100644
--- a/_multibuild
+++ b/_multibuild
@@ -3,5 +3,5 @@
openmpi1
openmpi2
openmpi3
- mvapich2
+ openmpi4
diff --git a/backports-6.4.1.git-diff b/backports-6.4.1.git-diff
deleted file mode 100644
index a4db98b..0000000
--- a/backports-6.4.1.git-diff
+++ /dev/null
@@ -1,566 +0,0 @@
-diff --git a/FFTXlib/fft_types.f90 b/FFTXlib/fft_types.f90
-index c0d56bf4e..8d66c2e8a 100644
---- a/FFTXlib/fft_types.f90
-+++ b/FFTXlib/fft_types.f90
-@@ -853,6 +853,7 @@ CONTAINS
- SUBROUTINE realspace_grid_init( dfft, at, bg, gcutm, fft_fact )
- !
- ! ... Sets optimal values for dfft%nr[123] and dfft%nr[123]x
-+ ! ... If input dfft%nr[123] are non-zero, leaves them unchanged
- ! ... If fft_fact is present, force nr[123] to be multiple of fft_fac([123])
- !
- USE fft_support, only: good_fft_dimension, good_fft_order
-@@ -876,28 +877,29 @@ CONTAINS
- dfft%nr2 = int ( sqrt (gcutm) * sqrt (at(1, 2)**2 + at(2, 2)**2 + at(3, 2)**2) ) + 1
- dfft%nr3 = int ( sqrt (gcutm) * sqrt (at(1, 3)**2 + at(2, 3)**2 + at(3, 3)**2) ) + 1
-
-- !write (6,*) sqrt(gcutm)*sqrt(at(1,1)**2 + at(2,1)**2 + at(3,1)**2) , dfft%nr1
-- !write (6,*) sqrt(gcutm)*sqrt(at(1,2)**2 + at(2,2)**2 + at(3,2)**2) , dfft%nr2
-- !write (6,*) sqrt(gcutm)*sqrt(at(1,3)**2 + at(2,3)**2 + at(3,3)**2) , dfft%nr3
-+#if defined (__DEBUG)
-+ write (6,*) sqrt(gcutm)*sqrt(at(1,1)**2 + at(2,1)**2 + at(3,1)**2) , dfft%nr1
-+ write (6,*) sqrt(gcutm)*sqrt(at(1,2)**2 + at(2,2)**2 + at(3,2)**2) , dfft%nr2
-+ write (6,*) sqrt(gcutm)*sqrt(at(1,3)**2 + at(2,3)**2 + at(3,3)**2) , dfft%nr3
-+#endif
- !
- CALL grid_set( dfft, bg, gcutm, dfft%nr1, dfft%nr2, dfft%nr3 )
- !
-+ IF ( PRESENT(fft_fact) ) THEN
-+ dfft%nr1 = good_fft_order( dfft%nr1, fft_fact(1) )
-+ dfft%nr2 = good_fft_order( dfft%nr2, fft_fact(2) )
-+ dfft%nr3 = good_fft_order( dfft%nr3, fft_fact(3) )
-+ ELSE
-+ dfft%nr1 = good_fft_order( dfft%nr1 )
-+ dfft%nr2 = good_fft_order( dfft%nr2 )
-+ dfft%nr3 = good_fft_order( dfft%nr3 )
-+ ENDIF
- #if defined (__DEBUG)
- ELSE
- WRITE( stdout, '( /, 3X,"Info: using nr1, nr2, nr3 values from input" )' )
- #endif
- END IF
--
-- IF (PRESENT(fft_fact)) THEN
-- dfft%nr1 = good_fft_order( dfft%nr1, fft_fact(1) )
-- dfft%nr2 = good_fft_order( dfft%nr2, fft_fact(2) )
-- dfft%nr3 = good_fft_order( dfft%nr3, fft_fact(3) )
-- ELSE
-- dfft%nr1 = good_fft_order( dfft%nr1 )
-- dfft%nr2 = good_fft_order( dfft%nr2 )
-- dfft%nr3 = good_fft_order( dfft%nr3 )
-- END IF
--
-+ !
- dfft%nr1x = good_fft_dimension( dfft%nr1 )
- dfft%nr2x = dfft%nr2
- dfft%nr3x = good_fft_dimension( dfft%nr3 )
-diff --git a/PHonon/PH/bcast_ph_input.f90 b/PHonon/PH/bcast_ph_input.f90
-index 6d8078c1b..4b454872a 100644
---- a/PHonon/PH/bcast_ph_input.f90
-+++ b/PHonon/PH/bcast_ph_input.f90
-@@ -42,6 +42,7 @@ subroutine bcast_ph_input ( )
- USE YAMBO, ONLY : elph_yambo,dvscf_yambo
- ! YAMBO <
- USE elph_tetra_mod, ONLY : lshift_q
-+ USE ldaU_ph, ONLY : read_dns_bare, d2ns_type
-
- implicit none
- !
-@@ -67,6 +68,7 @@ subroutine bcast_ph_input ( )
- call mp_bcast (only_wfc, meta_ionode_id, world_comm )
- call mp_bcast (only_init, meta_ionode_id, world_comm )
- call mp_bcast (search_sym, meta_ionode_id, world_comm)
-+ call mp_bcast (read_dns_bare, meta_ionode_id, world_comm)
- ! YAMBO >
- call mp_bcast (elph_yambo, meta_ionode_id, world_comm)
- call mp_bcast (dvscf_yambo, meta_ionode_id, world_comm)
-@@ -119,6 +121,7 @@ subroutine bcast_ph_input ( )
- call mp_bcast (tmp_dir, meta_ionode_id, world_comm )
- call mp_bcast (prefix, meta_ionode_id, world_comm )
- call mp_bcast (electron_phonon, meta_ionode_id, world_comm )
-+ call mp_bcast (d2ns_type, meta_ionode_id, world_comm )
- !
- ! derived type (one bit at a time)
- !
-diff --git a/PHonon/PH/dynmat_hub_bare.f90 b/PHonon/PH/dynmat_hub_bare.f90
-index 0d57abcbc..22b932cb6 100644
---- a/PHonon/PH/dynmat_hub_bare.f90
-+++ b/PHonon/PH/dynmat_hub_bare.f90
-@@ -82,6 +82,8 @@ SUBROUTINE dynmat_hub_bare
- !
- CALL start_clock ( 'dynmat_hub_bare' )
- !
-+ ios = 0
-+ !
- ldim = 2*Hubbard_lmax + 1
- !
- ALLOCATE (dyn_hub_bare(3*nat,3*nat))
-diff --git a/PHonon/PH/dynmat_hub_scf.f90 b/PHonon/PH/dynmat_hub_scf.f90
-index 363327c2b..86c51f37c 100644
---- a/PHonon/PH/dynmat_hub_scf.f90
-+++ b/PHonon/PH/dynmat_hub_scf.f90
-@@ -118,7 +118,7 @@ SUBROUTINE dynmat_hub_scf (irr, nu_i0, nper)
- ! interrupted before the call of this routine)
- !
- IF (rec_code_read==10) THEN
-- WRITE(stdout,*) 'rec_code_read', rec_code_read
-+ !WRITE(stdout,*) 'rec_code_read', rec_code_read
- CALL dnsq_scf (nper, lmetq0, nu_i0, irr, .true.)
- ENDIF
- !
-diff --git a/PHonon/PH/phq_readin.f90 b/PHonon/PH/phq_readin.f90
-index 57ed4dd3e..088044227 100644
---- a/PHonon/PH/phq_readin.f90
-+++ b/PHonon/PH/phq_readin.f90
-@@ -119,7 +119,7 @@ SUBROUTINE phq_readin()
- elph_nbnd_min, elph_nbnd_max, el_ph_ngauss, &
- el_ph_nsigma, el_ph_sigma, electron_phonon, &
- q_in_band_form, q2d, qplot, low_directory_check, &
-- lshift_q
-+ lshift_q, read_dns_bare, d2ns_type
-
- ! tr2_ph : convergence threshold
- ! amass : atomic masses
-diff --git a/PP/src/ppacf.f90 b/PP/src/ppacf.f90
-index c7b5e9ef6..a55d6649f 100644
---- a/PP/src/ppacf.f90
-+++ b/PP/src/ppacf.f90
-@@ -58,6 +58,7 @@ PROGRAM do_ppacf
- USE vdW_DF_scale, ONLY : xc_vdW_DF_ncc, xc_vdW_DF_spin_ncc, &
- get_q0cc_on_grid, get_q0cc_on_grid_spin
- USE vasp_xml, ONLY : readxmlfile_vasp
-+ USE symm_base, ONLY : fft_fact
-
- !
- IMPLICIT NONE
-@@ -217,9 +218,7 @@ PROGRAM do_ppacf
- IF (code_num == 1) THEN
- !
- tmp_dir=TRIM(outdir)
--! CALL read_xml_file_internal(.TRUE.)
- CALL read_file()
--
- ! Check exchange correlation functional
- iexch = get_iexch()
- icorr = get_icorr()
-@@ -685,6 +684,7 @@ PROGRAM do_ppacf
- DEALLOCATE ( igk_buf, gk )
- !
- ! CALL setup()
-+ fft_fact(:)=1
- CALL exx_grid_init()
- CALL exx_mp_init()
- CALL exx_div_check()
-diff --git a/PP/src/pw2wannier90.f90 b/PP/src/pw2wannier90.f90
-index d9e2c870e..5d977a4f0 100644
---- a/PP/src/pw2wannier90.f90
-+++ b/PP/src/pw2wannier90.f90
-@@ -1162,7 +1162,7 @@ SUBROUTINE pw2wan_set_symm (nsym, sr, tvec)
- !
- ! Uses nkqs and index_sym from module pw2wan, computes rir
- !
-- USE symm_base, ONLY : s, ftau, allfrac
-+ USE symm_base, ONLY : s, ft, allfrac
- USE fft_base, ONLY : dffts
- USE cell_base, ONLY : at, bg
- USE wannier, ONLY : rir, read_sym
-@@ -1174,8 +1174,8 @@ SUBROUTINE pw2wan_set_symm (nsym, sr, tvec)
- INTEGER , intent(in) :: nsym
- REAL(DP) , intent(in) :: sr(3,3,nsym), tvec(3,nsym)
- REAL(DP) :: st(3,3), v(3)
-- INTEGER, allocatable :: s_in(:,:,:), ftau_in(:,:)
-- !REAL(DP), allocatable:: ftau_in(:,:)
-+ INTEGER, allocatable :: s_in(:,:,:)
-+ REAL(DP), allocatable:: ft_in(:,:)
- INTEGER :: nxxs, nr1,nr2,nr3, nr1x,nr2x,nr3x
- INTEGER :: ikq, isym, i,j,k, ri,rj,rk, ir
- LOGICAL :: ispresent(nsym)
-@@ -1189,7 +1189,7 @@ SUBROUTINE pw2wan_set_symm (nsym, sr, tvec)
- nxxs = nr1x*nr2x*nr3x
- !
- ! sr -> s
-- ALLOCATE(s_in(3,3,nsym), ftau_in(3,nsym))
-+ ALLOCATE(s_in(3,3,nsym), ft_in(3,nsym))
- IF(read_sym ) THEN
- IF(allfrac) THEN
- call errore("pw2wan_set_symm", "use_all_frac = .true. + read_sym = .true. not supported", 1)
-@@ -1199,17 +1199,17 @@ SUBROUTINE pw2wan_set_symm (nsym, sr, tvec)
- st = transpose( matmul(transpose(bg), transpose(sr(:,:,isym))) )
- s_in(:,:,isym) = nint( matmul(transpose(at), st) )
- v = matmul(transpose(bg), tvec(:,isym))
-- ftau_in(1,isym) = nint(v(1)*nr1)
-- ftau_in(2,isym) = nint(v(2)*nr2)
-- ftau_in(3,isym) = nint(v(3)*nr3)
-+ ft_in(1,isym) = v(1)
-+ ft_in(2,isym) = v(2)
-+ ft_in(3,isym) = v(3)
- END DO
-- IF( any(s(:,:,1:nsym) /= s_in(:,:,1:nsym)) .or. any(ftau_in(:,1:nsym) /= ftau(:,1:nsym)) ) THEN
-+ IF( any(s(:,:,1:nsym) /= s_in(:,:,1:nsym)) .or. any(ft_in(:,1:nsym) /= ft(:,1:nsym)) ) THEN
- write(stdout,*) " Input symmetry is different from crystal symmetry"
- write(stdout,*)
- END IF
- ELSE
- s_in = s(:,:,1:nsym)
-- ftau_in = ftau(:,1:nsym)
-+ ft_in = ft(:,1:nsym)
- END IF
- !
- IF(.not. allocated(rir)) ALLOCATE(rir(nxxs,nsym))
-@@ -1240,7 +1240,7 @@ SUBROUTINE pw2wan_set_symm (nsym, sr, tvec)
- ENDDO
- ENDDO
- ENDDO
-- DEALLOCATE(s_in, ftau_in)
-+ DEALLOCATE(s_in, ft_in)
- END SUBROUTINE pw2wan_set_symm
-
- !-----------------------------------------------------------------------
-@@ -4142,7 +4142,7 @@ SUBROUTINE write_parity
- ! 0-th Order
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! 1
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! 1
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
-@@ -4150,21 +4150,21 @@ SUBROUTINE write_parity
- ! 1st Order
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! x
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! x
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! y
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! y
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! z
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! z
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
-@@ -4172,63 +4172,63 @@ SUBROUTINE write_parity
- ! 2nd Order
- IF ( (abs(g_abc(1,igv) - 2.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! x^2
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! x^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! xy
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! xy
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) + 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! xy
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! xy
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! xz
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! xz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! xz
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! xz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 2.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! y^2
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! y^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! yz
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! yz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! yz
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! yz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 2.d0 <= eps6) ) THEN ! z^2
-+ (abs(g_abc(3,igv) - 2.d0) <= eps6) ) THEN ! z^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
-@@ -4236,133 +4236,133 @@ SUBROUTINE write_parity
- ! 3rd Order
- IF ( (abs(g_abc(1,igv) - 3.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! x^3
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! x^3
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 2.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! x^2y
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! x^2y
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 2.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) + 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! x^2y
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! x^2y
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 2.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! x^2z
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! x^2z
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 2.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! x^2z
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! x^2z
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 2.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! xy^2
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! xy^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) + 2.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! xy^2
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! xy^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! xyz
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! xyz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! xyz
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! xyz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) + 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! xyz
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! xyz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) + 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! xyz
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! xyz
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 2.d0 <= eps6) ) THEN ! xz^2
-+ (abs(g_abc(3,igv) - 2.d0) <= eps6) ) THEN ! xz^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 1.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 2.d0 <= eps6) ) THEN ! xz^2
-+ (abs(g_abc(3,igv) + 2.d0) <= eps6) ) THEN ! xz^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 3.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 0.d0 <= eps6) ) THEN ! y^3
-+ (abs(g_abc(3,igv) - 0.d0) <= eps6) ) THEN ! y^3
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 2.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 1.d0 <= eps6) ) THEN ! y^2z
-+ (abs(g_abc(3,igv) - 1.d0) <= eps6) ) THEN ! y^2z
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 2.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 1.d0 <= eps6) ) THEN ! y^2z
-+ (abs(g_abc(3,igv) + 1.d0) <= eps6) ) THEN ! y^2z
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 2.d0 <= eps6) ) THEN ! yz^2
-+ (abs(g_abc(3,igv) - 2.d0) <= eps6) ) THEN ! yz^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and.&
- (abs(g_abc(2,igv) - 1.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) + 2.d0 <= eps6) ) THEN ! yz^2
-+ (abs(g_abc(3,igv) + 2.d0) <= eps6) ) THEN ! yz^2
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
- ENDIF
- IF ( (abs(g_abc(1,igv) - 0.d0) <= eps6) .and. &
- (abs(g_abc(2,igv) - 0.d0) <= eps6) .and. &
-- (abs(g_abc(3,igv)) - 3.d0 <= eps6) ) THEN ! z^3
-+ (abs(g_abc(3,igv) - 3.d0) <= eps6) ) THEN ! z^3
- num_G(mpime+1) = num_G(mpime+1) + 1
- ig_idx(num_G(mpime+1))=igv
- CYCLE
-diff --git a/PP/src/vasp_read_chgcar_mod.f90 b/PP/src/vasp_read_chgcar_mod.f90
-index c5187e024..536f5344c 100644
---- a/PP/src/vasp_read_chgcar_mod.f90
-+++ b/PP/src/vasp_read_chgcar_mod.f90
-@@ -64,7 +64,6 @@ MODULE vasp_read_chgcar
- INTEGER :: ngxf, ngyf, ngzf, nalloc
- INTEGER :: ispin, iat, iz, ixy, nread
- REAL(DP), ALLOCATABLE :: rho_r_(:,:), atomom(:)
-- REAL(DP), ALLOCATABLE :: rho_r_up(:), rho_r_dn(:)
- CHARACTER(LEN=80) :: errmsg
- !
- ierr = 0
-@@ -102,15 +101,6 @@ MODULE vasp_read_chgcar
- END DO
-
- CLOSE(iunchg)
-- IF(nspin==2) THEN
-- ALLOCATE(rho_r_up(dfftp%nr1x*dfftp%nr2x*dfftp%nr3x))
-- ALLOCATE(rho_r_dn(dfftp%nr1x*dfftp%nr2x*dfftp%nr3x))
-- rho_r_up=0.5_DP*(rho_r_(:,1)+rho_r_(:,2))
-- rho_r_dn=0.5_DP*(rho_r_(:,1)-rho_r_(:,2))
-- rho_r_(:,1)=rho_r_up
-- rho_r_(:,2)=rho_r_dn
-- DEALLOCATE(rho_r_up, rho_r_dn)
-- END IF
- END IF
- ! CALL mp_bcast( atm, ionode_id, intra_image_comm )
- DO ispin = 1, nspin
-diff --git a/PW/src/setup.f90 b/PW/src/setup.f90
-index 276588917..92543ddce 100644
---- a/PW/src/setup.f90
-+++ b/PW/src/setup.f90
-@@ -137,7 +137,7 @@ SUBROUTINE setup()
- IF (ecutfock /= 4*ecutwfc) CALL infomsg &
- ('setup','Warning: US/PAW use ecutfock=4*ecutwfc, ecutfock ignored')
- IF ( lmd .OR. lbfgs ) CALL errore &
-- ('setup','forces for hybrid functionals + US/PAW not implemented')
-+ ('setup','forces for hybrid functionals + US/PAW not implemented',1)
- IF ( noncolin ) CALL errore &
- ('setup','Noncolinear hybrid XC for USPP not implemented',1)
- END IF
-@@ -519,7 +519,11 @@ SUBROUTINE setup()
- !
- ! ... nosym: do not use any point-group symmetry (s(:,:,1) is the identity)
- !
-- IF ( nosym ) nsym = 1
-+ IF ( nosym ) THEN
-+ nsym = 1
-+ invsym = .FALSE.
-+ fft_fact(:) = 1
-+ END IF
- !
- IF ( nsym > 1 .AND. ibrav == 0 ) CALL infomsg('setup', &
- 'DEPRECATED: symmetry with ibrav=0, use correct ibrav instead')
-diff --git a/PW/src/symm_base.f90 b/PW/src/symm_base.f90
-index 9d6cabf5c..4106be76a 100644
---- a/PW/src/symm_base.f90
-+++ b/PW/src/symm_base.f90
-@@ -515,11 +515,14 @@ SUBROUTINE sgam_at ( nat, tau, ityp, sym, no_z_inv)
- !
- ! ft_ is in crystal axis and is a valid fractional translation
- ! only if ft_(i)=0 or ft_(i)=1/n, with n=2,3,4,6
-- ! The check below is less strict: n must be integer
- !
- DO i=1,3
- IF ( ABS (ft_(i)) > eps2 ) THEN
-- ftaux(i) = ABS (1.0_dp/ft_(i) - NINT(1.0_dp/ft_(i)) )
-+ ftaux(i) = ABS (1.0_dp/ft_(i) - NINT(1.0_dp/ft_(i)) )
-+ nfrac = NINT(1.0_dp/ABS(ft_(i)))
-+ IF ( ftaux(i) < eps2 .AND. nfrac /= 2 .AND. &
-+ nfrac /= 3 .AND. nfrac /= 4 .AND. nfrac /= 6 ) &
-+ ftaux(i) = 2*eps2
- ELSE
- ftaux(i) = 0.0_dp
- END IF
-diff --git a/PW/src/v_of_rho.f90 b/PW/src/v_of_rho.f90
-index 7782924f1..295da64fe 100644
---- a/PW/src/v_of_rho.f90
-+++ b/PW/src/v_of_rho.f90
-@@ -221,7 +221,7 @@ SUBROUTINE v_xc_meta( rho, rho_core, rhog_core, etxc, vtxc, v, kedtaur )
- ! spin-polarised case
- !
- rhoup = ( rho%of_r(k, 1) + rho%of_r(k, 2) )*0.5d0
-- rhodw = ( rho%of_r(k, 2) - rho%of_r(k, 2) )*0.5d0
-+ rhodw = ( rho%of_r(k, 1) - rho%of_r(k, 2) )*0.5d0
-
- rh = rhoup + rhodw
-
diff --git a/devicexlib-0.1.0.tar.gz b/devicexlib-0.1.0.tar.gz
new file mode 100644
index 0000000..d9ff441
--- /dev/null
+++ b/devicexlib-0.1.0.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b2beab4cf3a863751a14eca8bfccc0cb4bf4bb36e7758ea57e8986064841240
+size 5321512
diff --git a/q-e-qe-6.4.1.tar.bz2 b/q-e-qe-6.4.1.tar.bz2
deleted file mode 100644
index e5340b9..0000000
--- a/q-e-qe-6.4.1.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:45cbf53aeace68d2f625a7014f56f055789cfca6620687a6d464f4684fe0c4a5
-size 77778235
diff --git a/q-e-qe-6.8.tar.bz2 b/q-e-qe-6.8.tar.bz2
new file mode 100644
index 0000000..ba2bddd
--- /dev/null
+++ b/q-e-qe-6.8.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f15cfa40332b6953cdc4c399847094f532185972b127e779c53adbb19040f43f
+size 67865847
diff --git a/quantum-espresso-devxlib-no-download.patch b/quantum-espresso-devxlib-no-download.patch
new file mode 100644
index 0000000..d8bb67d
--- /dev/null
+++ b/quantum-espresso-devxlib-no-download.patch
@@ -0,0 +1,20 @@
+Index: q-e-qe-6.8/install/extlibs_makefile
+===================================================================
+--- q-e-qe-6.8.orig/install/extlibs_makefile
++++ q-e-qe-6.8/install/extlibs_makefile
+@@ -93,14 +93,13 @@ CUDA_PATH := $(if $(GPU_ARCH),$(CUDA_PAT
+ 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; \
+ touch make.inc; \
+ $(MAKE) clean; \
+ export F90FLAGS="$(FOX_FLAGS)"; \
+- ./configure FC=$(F90) CC=$(CC) \
++ ./configure FC=$(FC) CC=$(CC) \
+ --with-cuda=$(CUDA_PATH) \
+ --with-cuda-cc=$(GPU_ARCH) \
+ --with-cuda-runtime=$(CUDA_RUNTIME) \
diff --git a/quantum-espresso.changes b/quantum-espresso.changes
index d99ad36..2b9a516 100644
--- a/quantum-espresso.changes
+++ b/quantum-espresso.changes
@@ -1,3 +1,32 @@
+-------------------------------------------------------------------
+Sun Nov 21 13:31:34 UTC 2021 - Atri Bhattacharya
+
+- Update to version 6.8:
+ * See release notes here:
+ .
+- Drop backports-6.4.1.git-diff: incorporated upstream.
+- Add quantum-espresso-devxlib-no-download.patch: Patch to avoid
+ downloading devxlib from the web; we supply it as an additional
+ source instead.
+- Add devxlib as an additional source and copy it to dir where
+ quantum-espresso build expects.
+- Add openmpi4 as multibuild flavor.
+- Drop mvapich2 multibuild flavor, not well supported and builds
+ fail.
+- Hack-ish work-arounds to prevent build failures all around
+ (locally checked that tests work; but they need further
+ downloads and hacks, and is best avoided within the build system
+ itself):
+ * Turn off errors on return-type warnings in %optflags.
+ * Allow compilation to proceed despite minor rank mis-matches by
+ passing -fallow-argument-mismatch as an additional flag to
+ fortran compiler (for GCC >= 10 only).
+ * Explicitly pass blas, lapack, and fftw3 library flags to
+ configure; otherwise the build tried to build each of these
+ internally; for fftw3 use parallel or serial library depending
+ on mulbuild flavor.
+- Link against scalapack for parallel build flavors.
+
-------------------------------------------------------------------
Mon Feb 10 00:17:26 UTC 2020 - Stefan BrĂ¼ns
diff --git a/quantum-espresso.spec b/quantum-espresso.spec
index fec1bab..900367b 100644
--- a/quantum-espresso.spec
+++ b/quantum-espresso.spec
@@ -1,7 +1,7 @@
#
-# spec file for package quantum-espresso
+# spec file
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -58,6 +58,12 @@ ExclusiveArch: x86_64
%{?DisOMPI3}
%endif
+%if "%{flavor}" == "openmpi4"
+%global mpi_flavor openmpi
+%define mpi_vers 4
+%{?DisOMPI4}
+%endif
+
%{?mpi_flavor:%{bcond_without mpi}}%{!?mpi_flavor:%{bcond_with mpi}}
%{?with_mpi:%{!?mpi_flavor:error "No MPI family specified!"}}
@@ -76,6 +82,7 @@ ExclusiveArch: x86_64
%else
%define my_prefix %{_libdir}/mpi/gcc/%{mpi_flavor}%{?mpi_ext}
%define my_bindir %{my_prefix}/bin
+ %define my_libdir %{my_prefix}/%{_lib}
%define my_suffix -%{mpi_flavor}%{?mpi_ext}
%endif
@@ -83,23 +90,35 @@ ExclusiveArch: x86_64
%define package_name %pname%{?my_suffix}
%endif
+%global devlibx_version 0.1.0
+# Unimportant rank mismatch issues that otherwise cause builds to fail for GCC >= 10
+%if 0%{?suse_version} > 1500
+%global extra_gfortran_flags -fallow-argument-mismatch
+%else
+%global extra_gfortran_flags %{nil}
+%endif
+# We need to turn off "-Werror=return-type" in optflags to avoid build failures
+%global optflags %(echo "%{optflags}" | sed "s/ -Werror=return-type//")
Name: %{package_name}
-Version: 6.4.1
+Version: 6.8
Release: 0
Summary: A suite for electronic-structure calculations and materials modeling
License: GPL-2.0-only
Group: Productivity/Scientific/Physics
URL: http://www.quantum-espresso.org
Source0: https://gitlab.com/QEF/q-e/-/archive/qe-%{version}/q-e-qe-%{version}.tar.bz2
-# PATCH-FIX-UPSTREAM backports-6.4.1.git-diff badshah400@gmail.com -- Backported fixes for version 6.4.1 from upstream
-Patch0: https://gitlab.com/QEF/q-e/wikis/uploads/3e4b6d3844989c02d0ebb03a935e1976/backports-6.4.1.git-diff
+Source1: https://gitlab.com/max-centre/components/devicexlib/-/archive/%{devlibx_version}/devicexlib-%{devlibx_version}.tar.gz
+# PATCH-FEATURE-OPENSUSE quantum-espresso-devxlib-no-download.patch badshah400@gmail.com -- Do not try to download devxlib, use SOURCE1 instead.
+Patch1: quantum-espresso-devxlib-no-download.patch
+BuildRequires: blas-devel
BuildRequires: fdupes
BuildRequires: gcc-fortran
BuildRequires: lapack-devel
%if %{with mpi}
BuildRequires: %{mpi_flavor}%{?mpi_ext}-devel
BuildRequires: fftw3-mpi-devel
-%if 0%{?suse_version} >= 1550 && %{mpi_flavor} == "openmpi"
+BuildRequires: libscalapack2-%{mpi_flavor}%{?mpi_ext}-devel
+%if 0%{?suse_version} >= 1550 && "%{mpi_flavor}" == "openmpi"
# hackish workaround for multiple openmpiX-config all providing openmpi-runtime-config
BuildRequires: %{mpi_flavor}%{?mpi_ext}-config
%endif
@@ -129,18 +148,36 @@ It is based on density-functional theory, plane waves, and pseudopotentials.
%prep
%autosetup -p1 -n q-e-qe-%{version}
+cp %{SOURCE1} ./external/devxlib/devxlib.tar.gz
+# Need to pass -D__FFTW, see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=980677
+# Error: Symbol 'cft_2xy' at (1) has no IMPLICIT type
+sed -i 's|MANUAL_DFLAGS =|MANUAL_DFLAGS = -D__FFTW %{extra_gfortran_flags}|' install/make.inc.in
%build
+# Note: optflags should not be passed to fortran flags as they cause build failures
%if %{with mpi}
export CC="%{my_bindir}/mpicc"
+export CFLAGS='%{extra_gfortran_flags} %{optflags}'
export FC="%{my_bindir}/mpif90"
+export FCFLAGS='%{extra_gfortran_flags}'
+export FFLAGS='%{extra_gfortran_flags}'
+export BLAS_LIBS="-L%{_libdir} -lblas"
+export LAPACK_LIBS="-L%{_libdir} -llapack"
+export FFT_LIBS="-L%{_libdir} -lfftw3_mpi"
+export SCALAPACK_LIBS="-L%{my_libdir} -lscalapack"
%configure --enable-parallel
%else
export CC=gcc
+export CFLAGS='%{extra_gfortran_flags} %{optflags}'
export FC=gfortran
+export FCFLAGS='%{extra_gfortran_flags}'
+export FFLAGS='%{extra_gfortran_flags}'
+export BLAS_LIBS="-L%{_libdir} -lblas"
+export LAPACK_LIBS="-L%{_libdir} -llapack"
+export FFT_LIBS="-lfftw3"
%configure --disable-parallel
%endif
-make %{?_smp_mflags} all
+%make_build all
%install
mkdir -p %{buildroot}%{my_bindir}
@@ -153,14 +190,12 @@ popd
%fdupes -s Doc/
%files
-%defattr(-,root,root)
%doc README.md
%license License
%{my_bindir}/*.x
%if %{without mpi}
%files doc
-%defattr(-,root,root)
%doc Doc/*
%endif