I think a better fix would be to move the detection of the inversion symmetry
into function "copy_sym" (not making assumptions on which operation is the
inversion, and transforming the function into a subroutine) but this must be
done with care and far from a release. The current fix seem to be 100% safe.
We implemented the new vdW-DF type functionals vdW-DF3-opt1, vdW-DF3-opt2, and
vdW-DF-C6. For purposes of non-local functional implementation and evaluation,
we also grouped similar implementations into ranges for the "inlc" variable. To
this end, we have reserved inlc=1 to inlc=25 for vdW-DF development and we
moved rVV10 to inlc=26. This allows for a cleaner code when parsing through the
various non-local functionals. In addition, we have removed all instances of
"inlc" and "get_inlc" in several source files where they are no longer needed.
This work was performed by T. Thonhauser and is supported by NSF Grant No.
1712425.
In a material with a gap treated with tetrahedra, the density of state at Ef
is exactly zero and the Ef shift gives NaN if computed with no check. Also:
there are several other divisions by zero in the tetrahedron method for
phonons, harmless in practice but hindering usage of compiler debug options.
Most of the changes consist in small updates to Makefile and make.depend and
in the replacement of module "parameters" with "upf_params" whenever variables
lmaxx and lqmax are USEd. Routine "read_pseudo" moved back to Modules/;
"simpsn" moved to upflib/; a copy of "matches" temporarily added to upflib/
Note that everything compiles (except EPW) but nothing has been tested yet!
2. Extension of the XSpectra code to DFT+U+V
3. Hubbard forces and stress: now the (ortho-)atomic orbitals
are read from file (and not recomputed as before)
4. Added examples for the DFT+U+V case in PW and HP
5. Various other small improvements and optimizations
Currently the interpolation table for USPP Q functions computes q_i=Q(|G_i|) on
a grid of equally spaced |G_i| ***in units of 2\pi/a0***. As a consequence, the
number of points of the grid for a given cutoff depends upon the size of the
cell (noticed by Anton Kozhevnikov). This does not make sense: the Q functions
are atomic-like quantities and the maximum |G| depends upon the cutoff.
I moved the interpolation table from 2\pi/a0 units to atomic units, as it is
done everywhere else in QE. I am less and less convinced that storing k-points
and G-vectors in 2\pi/a0 units is a good idea, by the way.
BEWARE: this patch changes the behavior of routines init_us_1 and qvan2,
has the potential to break external codes that use QE routines.
For some obscure reason the new test for DFT+U phonon has large variations
in the number of scf iterations: 34 in the benchmark, 27 to 30 on buildbot.
While waiting for better ideas, the new benchmark has been updated to 29
iterations so that it falls close to buildbot values
In this commit, the entire Quantum Espresso environment is updated so
that "make all" succeeds and produces functional codes. The resulting
codes were tested with the test-suite and all related tests passed. In
addition, I did some more extensive testing with van der Waals systems,
using the option "verbosity = 'high'" so that the non-local corr. energy
is written out explicitly; in all cases, results were identical to
qe-6.4.1 (also tested in parallel).
Overall, I updated 21 Fortran source files, mostly related to the
handling of the kernel file name(s). Modules/xc_rVV10.f90 saw more
substantial changes and now also computes the kernel on the fly. The
two routines PW/src/generate_rVV10_kernel_table.f90 and
PW/src/generate_vdW_kernel_table.f90 are now removed.
In addition, I updated the developer manual and the PW user guide. I
edited two Makefiles and ran "make depend", resulting in 6 changed
make.depend files. I updated 5 scripts and one README file, mostly
related to examples.
Finally, some of the reference files in the test suite and in some
examples had a rather old format and a "diff" after running those cases
shows unnecessarily many differences. I thus created new reference data
for the vdW cases in the test suite (running "make create-reference-pw")
and I updated the PHonon/examples/example16 and
PW/examples/vdwDF_example references (23 files updated, 11 files
deleted, and 6 files added; the file and directory structure of the
delta-scf calculations needed some more substantial updating). I also
updated PP/examples/ACF_example/reference_vdw-df-cx/atoms.out.
At this point I will do some final testing and cleaning-up of the code.
The next commit fill be the final commit.
1) Bugfix in turboEELS+USPP due to recent changes
(fix by Oleksandr Motornyi and Iurii Timrov)
2) Homogenization of names of subroutines
3) Update of the example 17 for turboEELS+USPP+SOC which
was wrong due to the bug mentioned above.
there was an out-of-bound error in dgradcorr. I am not sure I understand
the fix (I am actually sure I don't) but it gives the same "zue" and
"zeu" effective charges in a simple test and the same for LDA and LSDA
with no spin polarization. Also: ZDOTC => zdotc, because some machines
need to preprocess zdotc and replace it with the zdotc_wrapper
turboEELS to USPP+SOC:
1) Minor changes here and there
2) Added example 17 testing the implementation of turboEELS+USPP+SOC
3) Modified Makefiles to remove dependencies of TDDFPT on PH routines
(it was mistakenly introduced recently)
4) Removed the routine dveqpsi_us_only.f90 because it is not used
anywhere (it is an analogue of lr_addus_dvpsi.f90)
In the HP code added a check on the variable perturb_only_atom
(only Hubbard atoms are allowed to be perturbed)
of dangerous confusion: the "true" fractional translations, in crystal
axis units, are in "ft". First batch of removals, notably from smallg_q
(where it was not used) and from code calling it. More will come soon.
Updated release checklist, fixed typo in README.md
- mp_world and world_comm should be used only in MPI initialization,
not directly in codes - replaced by mp_images and intra_image_comm
(except in a few cases whose usage is unclear to me)
- mp_global should be used only to provide initialization routines
mp_startup, mp_global_end
- specific mp_* modules should be used for parallelization level on *
(* = images, pools, bands, orhtoh, ...)
Nothing actually changes (I hope) but things will look cleaner if the module
for the required parallelization level is USEd instead of a generic one that
does too meny things at the same time. The final goal of this operation is to
better disentangle the various parallelization levels and to have a better
organized, more granular MPI initialization that does not introduces artificial
and meaningless dependencies. Not done for: PHonon, CPV, TDDFPT, GWW, EPW
I. Timrov, B. Himmetoglu, N. Marzari, M. Cococcioni). The code was ported
from QE 5.0.2 to the latest version of QE, by I. Timrov with the help of
A. Floris and M. Cococcioni. Many thanks for the discussions with P. Giannozzi,
P. Delugas, A. Dal Corso, M. Calandra, L. Paulatto about various issues
during the porting. Sorry if I forgot to mention someone.
2) Some small modifications in the HP code in order to be consistent
with the porting of PHonon+U and changes in LR_Modules.
variables "auto_rs" (and "real_space_debug") deleted. TDDFPT still reads
"tqr" and "real_space" from input (TODO: read them from data file instead).
"make.depend" updated, TDDFPT no longer depends upon iotk
versions deleted: "fft_qgradient" and "fft_qgraddot". These are the versions
of fft_gradient_r2r and fft_graddot for complex arrays with exp(iqr) behavior,
fr usage in the phonon code (gradient of Delta rho at finite q). Note that in
phonon, indices of drho_gradient have been reversed as well in vdW-DF routines,
and that the call to dgradcorr has been changed (dfftp is passed as argument)
NOTA BENE: the indices of the array containing the gradient for vdW-DF and
rVV10 functionals have been reverted: now the index of components is the first,
the index of grid points is the last last. Not sure this is the best choice
but it is the choice done (almost) everywhere else in QE
while previous "fft_gradient" becomes "fft_gradient_r2r".
Routine "grad_dot" moved to gradutils, with new name "fft_graddot" and
removal of useless variable in the list of argument.
after the proliferarion of modules and libraries, I have collected into a
single variable BASEMOD_FLAGS, defined in make.inc, the list of directories
for modules, to be included by all codes. IMPORTANT NOTICE: re-run "configure",
the new Makefiles work in conjunction with the new make.inc
three types of calls are possibles : 'Rho', 'Wave', 'tgWave'
In order to enable an fft-type for a given grid the corresponding clock_labels must be set.
One gives a name to desc%rho_clock_lable for 'Rho' type fft and a name to
desc%wave_clock_lable for 'Wave' and 'tgWave' types. Whether tg is
possible depends of the already defined value of desc%have_task_groups variable (mispell to be corrected soon).
definining
dffts%rho_clock_label='ffts', dffts%wave_clock_label='fftw',
dfftp%rho_clock_label='fft', dfftt%rho_clock_label='fftc' and
dfftt%wave_clock_label='fftcw'
and changing
'Dense'->'Rho', 'Smooth'->'Rho', 'Custom'->'Rho', 'CustomWave'->'Wave'
the same clock names and the same overall behavior as with the old interface is obtained.
(i.e. nspin = 2 and tot_magnetization /= 0). Short explanation follows.
The weight of k+q points is set to zero, therefore the weights wg_up and wg_dw
(which are computed through the routine iweights) for k+q points are also zero.
As a consequence, nbnd_occ for k+q points (which were computed based on the
conditions wg_up>0 or wg_dw>0) are also zero, which in turn leads to wrong results.
Since we are referring to magnetic insulators, it is more straightforward
to set nbnd_occ equal to nelup for spin up and to neldw for spin down.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13915 c92efa57-630b-4861-b058-cf58834340f0
cgsolve_all parallelizes linear system solution over bands and distributes
auxiliary working memory. in/out dpsi and d0psi arrays are not distributed
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13819 c92efa57-630b-4861-b058-cf58834340f0
In real space processors are organized in a 2D pattern.
Each processor owns data from a sub-set of Z-planes and a sub-set of Y-planes.
In reciprocal space each processor owns Z-columns that belong to a sub set of
X-values. This allows to split the processors in two sets for communication
in the YZ and XY planes.
In alternative, if the situation allows for it, a task group paralelization is used
(with ntg=nyfft) where complete XY planes of ntg wavefunctions are collected and Fourier
trasnformed in G space by different task-groups. This is preferable to the Z-proc + Y-proc
paralleization if task group can be used because a smaller number of larger ammounts of
data are transferred. Hence three types of fft are implemented:
!
!! ... isgn = +-1 : parallel 3d fft for rho and for the potential
!
!! ... isgn = +-2 : parallel 3d fft for wavefunctions
!
!! ... isgn = +-3 : parallel 3d fft for wavefunctions with task group
!
!! ... isgn = + : G-space to R-space, output = \sum_G f(G)exp(+iG*R)
!! ... fft along z using pencils (cft_1z)
!! ... transpose across nodes (fft_scatter_yz)
!! ... fft along y using pencils (cft_1y)
!! ... transpose across nodes (fft_scatter_xy)
!! ... fft along x using pencils (cft_1x)
!
!! ... isgn = - : R-space to G-space, output = \int_R f(R)exp(-iG*R)/Omega
!! ... fft along x using pencils (cft_1x)
!! ... transpose across nodes (fft_scatter_xy)
!! ... fft along y using pencils (cft_1y)
!! ... transpose across nodes (fft_scatter_yz)
!! ... fft along z using pencils (cft_1z)
!
! If task_group_fft_is_active the FFT acts on a number of wfcs equal to
! dfft%nproc2, the number of Y-sections in which a plane is divided.
! Data are reshuffled by the fft_scatter_tg routine so that each of the
! dfft%nproc2 subgroups (made by dfft%nproc3 procs) deals with whole planes
! of a single wavefunciton.
!
fft_type module heavily modified, a number of variables renamed with more intuitive names
(at least to me), a number of more variables introduced for the Y-proc parallelization.
Task_group module made void. task_group management is now reduced to the logical component
fft_desc%have_task_groups of fft_type_descriptor type variable fft_desc.
In term of interfaces, the 'easy' calling sequences are
SUBROUTINE invfft/fwfft( grid_type, f, dfft, howmany )
!! where:
!!
!! **grid_type = 'Dense'** :
!! inverse/direct fourier transform of potentials and charge density f
!! on the dense grid (dfftp). On output, f is overwritten
!!
!! **grid_type = 'Smooth'** :
!! inverse/direct fourier transform of potentials and charge density f
!! on the smooth grid (dffts). On output, f is overwritten
!!
!! **grid_type = 'Wave'** :
!! inverse/direct fourier transform of wave functions f
!! on the smooth grid (dffts). On output, f is overwritten
!!
!! **grid_type = 'tgWave'** :
!! inverse/direct fourier transform of wave functions f with task group
!! on the smooth grid (dffts). On output, f is overwritten
!!
!! **grid_type = 'Custom'** :
!! inverse/direct fourier transform of potentials and charge density f
!! on a custom grid (dfft_exx). On output, f is overwritten
!!
!! **grid_type = 'CustomWave'** :
!! inverse/direct fourier transform of wave functions f
!! on a custom grid (dfft_exx). On output, f is overwritten
!!
!! **dfft = FFT descriptor**, IMPORTANT NOTICE: grid is specified only by dfft.
!! No check is performed on the correspondence between dfft and grid_type.
!! grid_type is now used only to distinguish cases 'Wave' / 'CustomWave'
!! from all other cases
Many more files modified.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13676 c92efa57-630b-4861-b058-cf58834340f0
basic operations: error handling, timing clocks, interfaces to basic mpi
calls, find free units...
These routines are moved from Modules and dependencies to other modules
are removed.
MANY files are updated to comply with the move.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13629 c92efa57-630b-4861-b058-cf58834340f0
US variable qq renamed qq_nt and a new variable qq_na added
because in real space the integral may depend (slightly) on
the atomic position and an atomic value is needed to compute
exactly normalizable wfc.
Whenever realspace tricks are not used qq_nt is used.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13604 c92efa57-630b-4861-b058-cf58834340f0
precision complex, the former is a single precision complex. Not a big deal,
since we use only complex 0 or 1 or i for which there is no loss of precision.
Note however that CMPLX(a,0.d0) with "a" double precision real, or CMPLX(a,b)
are single-precision complex, and this can introduce loss of precision.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13314 c92efa57-630b-4861-b058-cf58834340f0
- old routine computing dos, allocation and deallocation of "tetra" moved into
module ktetra; variables tetra and ntetra are used only inside the module
- added module variable nntetra containing number of neighboring points used
(20 for optimized tetrahedra, 4 otherwise)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13228 c92efa57-630b-4861-b058-cf58834340f0
Variable "ltetra" moved to common "klist" together with all other variables
setting occupations. All make.depend updated. Should be harmless.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13204 c92efa57-630b-4861-b058-cf58834340f0
to compute many FFTs at the same time, particularly usefull for EXX
but could be usefule for many linear response code as well
(for the time being implemented only for DFTI and internal FFTW,
should be trivial to extend other drivers)
- more clean-ups
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12815 c92efa57-630b-4861-b058-cf58834340f0
- FFT type now do not have any information about task group:
no need to temporary change the value of variable...
- When task group are not needed symple do not use "dtgs" data type
- FFT interfaces called with FFT datatype ONLY, do not perform
task groups trics any longer, this should simply thing a bit....
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12628 c92efa57-630b-4861-b058-cf58834340f0
l-dependent array in all cases.
This is already the case when upf%tpawp or upf%q_with_l are .true. .
For vanderbilt US pseudos, where nqf and rinner are non zero, we do here what otherwise
would be done multiple times in many parts of the code (such as in init_us_1, addusforce_r,
bp_calc_btq, compute_qdipol) whenever the q_l(r) were to be constructed.
For simple rrkj3 pseudos we duplicate the infomation contained in q(r) for all q_l(r).
This requires a little extra memory but unifies the treatment of q_l(r) and allows further
tweaking with the augmentation charge.
Variable upf%q_with_l set .true. at the end of the operation. It would be better to leave the
variable untouched at its input value and modify the routines that compute q_l(r) to just use
the now always present upf%qfuncl array but this is the first step before some cleanup.
setqf.f90 moved from PW/src to Modules, Makefiles and dependencies updated
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12591 c92efa57-630b-4861-b058-cf58834340f0
More specificaly:
1) Remove global variable npw (from wvfct) and use ngk(ik) (for optical TDDFPT codes)
or ngk(ikk) with ikk=ikks(ik) (for turboEELS). In some routines, ngk is assigned to
the local variable npw, i.e. npw=ngk(ik), and in other routines ngk is used directly.
2) Remove global indices igk(1:3) (from wvfct) and use igk_k(1:3,ik) (for optical TDDFPT codes)
or igk_k(1:3,ikk) with ikk=ikks(ik) (for turboEELS).
3) Remove global variable npwq (from qpoint) and use the local variable with the same name,
which is defined as npwq=ngk(ikq) with ikq=ikqs(ik) (i.e. index of the point k+q).
4) Remove global index variable igkq(1:3) (from qpoint) and use the global index variable
igk_k(1:3,ikq) with ikq=ikqs(ik).
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12487 c92efa57-630b-4861-b058-cf58834340f0
BEWARE: I think I have modified all codes that needed it, but please
1) verify that both allocation and deallocation are made in the proper place
2) update other codes not under svn that make usage of such variable
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12451 c92efa57-630b-4861-b058-cf58834340f0
good idea to call "h_psi" a routine that does something related to but
different from H\psi. Corrected a few grossly wrong comments.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12440 c92efa57-630b-4861-b058-cf58834340f0
1) Moved some TDDFPT-specific cases from the general routine LR_Modules/ch_psi_all.f90 to the TDDFPT routines;
2) Deleted the variable "tddfpt", because it is no longer needed anywhere (in the older versions of the code this variable was used to tell to the PHonon routines about TDDFPT specific operations);
3) Some other minor changes in TDDFPT.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12432 c92efa57-630b-4861-b058-cf58834340f0
variables deleted; almost all occurrences of "npw" made local (PW and PP only)
Variable "current_k" must be set before calling h_psi (as before, although it
was used only in some cases). All changes should be safe, but testing of PP
and PH is very limited.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12428 c92efa57-630b-4861-b058-cf58834340f0
All of its subroutines and module have been transfered into LR_Modules/dynmat_sub.f90.
This will allow the subroutines to be re-used by other programs.
Note: I had to rename the subroutine "readmat" into "readmat2" because of
another readmat subroutine in PHonon/PH/elphon.f90.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12386 c92efa57-630b-4861-b058-cf58834340f0
prevent trouble with OS-X. May or may not work (it won't unless configure
is updated: please somebody with v.2.63 of autoconf do it), may turn out to
be obsolete anyway.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12364 c92efa57-630b-4861-b058-cf58834340f0
1) Added a flag dpsi_computed in the subroutine orthogonalize.f90 in LR_Modules. The meaning of this flag is described in the header of that routine. It was needed to generalize this subroutine. In short, this flag controls whether S*evq was already computed before or it must be computed inside of orthogonalize. If this idea does not look good for someone, then a better strategy should be found. I decided to introduce this new flag in order to make minimal changes in the PHonon code.
2) TDDFPT: The use of lr_ortho (which is a modified version of orthogonalize.f90) was replaced in several places by orthogonalize. Still in several places of the turboDavidson code there are calls to lr_ortho, which should be replaced by orthogonalize if possible. In the future lr_ortho should be removed and orthogonalize should be used instead. This is done for the sake of unification of the linear response codes in QE.
3) TDDFPT: The orthogonalization to the valence states manifold (orthogonalize) has been moved from lr_lanczos to lr_apply_liouvillian, which is now in correspondance with the definition of the Liouvillian superoperator implemented in lr_apply_liouvillian. USPP is a special case, and hence the property S^-1 P_c^+ = P_c S^-1 has been used to make such a move of the call to orthogonalize (old call to lr_ortho).
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12225 c92efa57-630b-4861-b058-cf58834340f0
from phq_setup.f90 to separate subroutines setup_nbnd_occ.f90
and setup_alpha_pv.f90 in LR_Modules. The reason for this is always the same:
these parts of PH were duplicated eslewhere (in TDDFPT) and now it is
time to merge them and move to LR_Modules.
Also some small changes in TDDFPT: removing the dependencies on PH variables.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12172 c92efa57-630b-4861-b058-cf58834340f0
from the routine PHonon/PH/phq_setup.f90 to a new routine "setup_dmuxc.f90"
in LR_Modules. The reason for this action is that the same duplicated part of the
code was present in TDDFPT. Now both PHonon and TDDFPT use the same routine in
LR_Modules/setup_dmuxc.f90.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12167 c92efa57-630b-4861-b058-cf58834340f0
transform_dbecsum_so.f90 and transform_dbecsum_nc.f90 appendened to set_dbecsum_nc.f90 that calls them
transform_int3_so extracted from PHonon/PH/transform_int_so.f90 and appended to set_int3_nc.f90 that calls it
transform_int3_nc extracted from PHonon/PH/transform_int_nc.f90 and appended to set_int3_nc.f90 that calls it
dependencies updated
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12047 c92efa57-630b-4861-b058-cf58834340f0
PH/phcom.f90 split in PH/phcom.f90 + LR_Modules/lrcom.f90 that contains
qpoint module
A number of routines using these variables needed to be modified to explicitely
load qpoint (in addition to phcom)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12005 c92efa57-630b-4861-b058-cf58834340f0