1) Remove PP files from examples of TDDFPT, use an automatic
download of PPs from the QE web site;
2) TDDFPT examples are now in the standard format of QE
(using run_example scripts);
3) Fix the bug in TDDFPT+EXX due to recent changes in PW (fft_fact);
4) The ecutfock parameter in TDDFPT+EXX is now read from XML and
cannot be specified from the input of TDDFPT;
5) In TDDFPT the oscillator strength (absorption coefficient)
is now written in a separate file (and not in the same file
where \chi is written);
6) HP examples use PPs from the Pslibrary by an automatic
download from the QE website.
Now TDDFPT with tqr=.true. is working (there were missing
initializations - added a call to generate_qpointlist).
Also added the example "Benzene-Rspace" which benchmarks the use
of TDDFPT with USPP and tqr=.true.
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
uneeded relinking; the mysterious "tldeps" machinery modified accordingly;
added explicit dependencies to GWW targets to prevent (once again) problems
with make -j (seems to work now). make.depend updated (once again).
reorganized do loops in k1d_term_gamma functions
in h_psi vexx is skipped for TDDFPT using Gamma
k2d_term_gamma function became k2d_vexx_term_gamma calculates k2d
and vexx terms on the same cycle of the loop
impossible clashes with LIBS as defined by the OS or as used by the configure's
of external libraries (e.g. FoX, for which one such problem has been reported)
Since github and gitlab just distribute a snapshot of the git repository,
these files must be in the repository as well. NOTA BENE:
All changes MUST GO TO *.tex or *.def FILES, NOT to these files!
Also note that the "make doc" machinery produces also *.xml files and
latex2html converted html versions of latex files. I don't think they belong
to the repository (latex files should maybe be replaced by md files)
Makefiles modified accordingly.
I am not at all happy about this "solution": unneeded dependencies should be
avoided, but this would need to change the way things are deallocated at the
end of a run (clean_pw does too many things at the same time)
file exx_band.f90; make.depend updated accordingly. Module exx now needs
modules exx_base and exx_band. Next: all general variables and routines
moved to exx_base.
k+q grid, symmetry, treatment of limit q => 0, moved to exx_base.f90.
Everything exactly as before, but beware the following changes:
- exx_reinit modified. moved to lr_exx_reinit in TDDFPT/src/lr_exx_kernel.f90
- exx_grid_reinit replaced by modified exx_grid_init and exx_gvec_reinit
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.
solution: exx_ftt%nlt and %nltm are simply replaced by exx_dft%dfftt%nl and
%nlm. A better solution is to make "custom" FFT's as similar as possible to
all other FFTs: extract dfftt from exx_fft, replace routines ggenx and ggent
with fft_ggen, delete or redefine useless and confusing exx_fft structure
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
KS_Solvers/CG, KS_Solvers/Davidson, KS_Solvers/Davidson_RCI.
Two are currently used by QE, the third one implements the Davidson
diagonalization within the Reverse Communication Interface paradigm,
courtesy of Micael Oliveira.
KS_Solvers routines depend only on lower level libraries, notably UtilXlib,
LAXlib, (SCA)LAPACK, and BLAS.
reorganization can be improved. For instance some duplicated routines like
cdiaghg and rdiaghg could/should be moved in LAXlib. This could reduce the need
to include KS_Solvers directories in the link step of many codes.
Minimal changes to calling sequence have been made, essentially just adding
h_psi,s_psi,g_psi and h_1psi,s_1psi routines names as arguments (with a
specific calling sequence ihardcode inside the routines that agree with PWSCF one).
This could be avoided adopting the RCI paradigm.
Compiled in serial and parallel, 177/182 pw tests passed (3 that were failing
even before on my laptop pw-berry, pw-langevin, pw-pawatom + 2 unknown==not tested),
12 /17 cp tests passed (some o2-us-para-pbe-X fail but the same was for the
original version)
I assume the modified calling procedure is working and the problem lies somewhere else.
Randomly tested some examples in pw, ph, pwcond and it seams to work.
Please report any problem.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13644 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
because the compilation of TDDFPT with Environ was crashing (without Environ it was fine).
General comment by Paolo: "The idea is that input_variables serves as a temporary storage
for variables read from input, that have to be subsequently copied into module variables.
Only variables in modules, not in input_variables, should be subsequently used."
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13593 c92efa57-630b-4861-b058-cf58834340f0
from generic one. read/write_rho => read/write_scf for structure rho.
read/write_rho_only => read/write_only, moved to Modules/xml_io_base.f90.
Nothing substantial, but beware side effects
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13502 c92efa57-630b-4861-b058-cf58834340f0
of cases, there is no difference and it's just aesthetic, but in some cases
a tiny error may have been corrected - please verify
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13316 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
1) routines fwfft and invfft moved out of file fft_interfaces.f90 into new
file fft_fwinv.f90. Prevents massive recompilation if something changes
in the FFT routines.
2) machine-dependent fft_scalar.*.f90 are now modules with different names,
conditionally included into fft_scalar with a USE, no longer an #include.
Avoids trouble with dependencies, allow simplification of makedeps.sh.
All changes should be harmless, but I have tested only FFTW, FFTW3, DFTI.
Please let me know if there is any problem
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13185 c92efa57-630b-4861-b058-cf58834340f0
(1:nat,1:nhm,1:maxir) to (1:maxir,1:nhm,1:nat) so that the needed
operations are performed on contiguous memory positions.
calbec, add_vuspsi, .. etc are waaay faster.
changed the indexing also in the only plase in TDDFPT where betasave was
referred. I dont know if it appears in any hidden project
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12662 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
This bug is related to the variable nwordwfc, which depends on the number of bands.
In turboTDDFT if empty states are computed (which is not needed for turbo_lanczos.x, but allowed,
and in fact the code will simply skip empty states), the global variable nbnd is set equal to
nbnd_occ, i.e. only occupied bands (this is not my idea), which is bad, because global
variables should not change their values. Due to such a confusion, I introduced this bug
some time ago. Now this is fixed.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12603 c92efa57-630b-4861-b058-cf58834340f0
2) Fixed a bug in the case TDDFPT + hybrids + k points related to the fact that the so-called array "revc_int_c" was not allocated (this option is disabled, because it has not been tested thoroughly yet, but we keep it functional)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12543 c92efa57-630b-4861-b058-cf58834340f0
1) Use the new routine h_prec (preconditioning matrix)
2) Use the routine g2_kin
3) Adding more documentation
4) Extension of compute_d0psi_rs to k-points version
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12514 c92efa57-630b-4861-b058-cf58834340f0
(treatment of the dipole in the real space).
This is explained in Ge et al., CPC 185, 2080 (2014).
Upgrading the examples and putting a warning in the code.
2) In my last commit (r12487) I wrote a misleading comment:
instead of igk(1:3) and igk_k(1:3,ik) there is of course
igk(ig) and igk_k(ig,ik), where ig runs over G vectors.
In the code everything is fine (only the comment was wrong).
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12489 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
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
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