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
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
the same is done in TDDFPT, 2) The indices igk are no longer written to the file
(unit iunigk), but kept in memory in igk_k, as was done in PW 3) removal of variables
which are not used.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12107 c92efa57-630b-4861-b058-cf58834340f0
illogical place: module "klist" containing information on k-points. Number
of plane waves npw_k merged into pre-existing variable ngk.
Important notes:
- in PWscf only the real-space calculation of <beta|psi> used those variables.
It should still work but I haven't tested it
- in all other QE packages, only TDDFPT was using those variables. I made them
pointing to the new ones. It seems to work, but please check
- any other code using those variables should be updated accordingly
- the file with indices (unit iunigk) is still written and it is still used,
but it is going to disappear soon: there is no longer any valid reason
not to store indices in memory
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12101 c92efa57-630b-4861-b058-cf58834340f0
moment to get rid of flib/, whose usefulness is far from obvious. The content
of flib/ is now in Modules/. Many makefiles updated and little more.
Packages using QE routines should just remove links to flib/flib.a.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12072 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
1) The code was not working correctly with only one k point;
2) In the case of metals the weights wk(ikk) must be used instead
of wg(ikk,ibnd) in sums over k points (courtesy of Tommaso Gorni);
The effect of this bug was small when small smearing was used.
3) The code was not working correctly with ultrasoft pseudopotentials,
because there was a missing term in the external potential due to the
augmentation part (I thank Andrea Dal Corso for helping to solve this problem!).
This problem was not detected before, because I tested the code on Si and Al,
which have small augmentation part, whereas Ag is a good benchmark system.
To this end, I removed the example of Si with USPP and added an example of Ag with USPP.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11877 c92efa57-630b-4861-b058-cf58834340f0
more efficient.
subroutine init_index_over_band ( comm, nbnd ) that set ibnd_start and ibnd_end
variables requiring comm=inter_bgrp_comm is removed and replaced by
subroutine set_bgrp_indices ( nbnd, ibnd_start, ibnd_end ) implementing the same
relationships between its arguments but:
- forcing the use of inter_bgrp_comm from the same mp_bands module,
- returning ibnd_start and ibnd_end as explicit outputs that are not anymore kept
in the module. In this way other quantities can be distributes if needed in any
given routine without too many non-local effects.
For compatibility with TDDFPT, that uses the bgrp parallelization and loads
ibnd_start/ibnd_end trhough mp_global module, these two variables are moved in
a dedicated module mp_bands_TDDFPT included in Module/mp_bands.f90. This is done
to avoid too much invasive changes in a code i don't know well. In this way the
needed changes are very localized and transparent, the code compiles correctly
so I think it should work exactly as before.
In my opinion the two variables should be moved somewhere inside TDDFPT.
Band parallelization is extended to h_psi(lda,n,m,psi,hpsi) and s_psi routines
(only when .not.exx_is_active because otherwise it is already used inside vexx)
for generic values of m (of course it gives a speedup only when m is not too small
compared to nbgrp but it works also if m < nbgrp ).
Compatibility with task groups has not be explored but should not be conceptually
different from how it works in the exx case.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11835 c92efa57-630b-4861-b058-cf58834340f0
command_argument_count, flush, are used everywhere instead of wrappers.
Some old versions of compilers may no longer work.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11759 c92efa57-630b-4861-b058-cf58834340f0
2) I am implementing a method for extracting dielectric function from various sum rules to be used in the real space/ real time FEM/FET code I recently wrote. At the moment it is not working. It should not break anything, but feel free to remove it if it does.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11717 c92efa57-630b-4861-b058-cf58834340f0
a single interface "gather_grid" replaces "grid_gather", "gather_smooth",
"cgather_smooth", "cgather_custom". The FFT descriptor is always passed
as argument. Should be safe but beware: I tested only PW.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11526 c92efa57-630b-4861-b058-cf58834340f0
allocatable arrays in derived-type structures are obsolete, and moreover,
there is some new code that wouldn't compile
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11514 c92efa57-630b-4861-b058-cf58834340f0
fft_orbital_gamma -> invfft_orbital_gamma (since it uses invfft!)
bfft_orbital_gamma -> fwfft_orbital_gamma (since it uses fwfft!)
fft_orbital_k -> invfft_orbital_k (since it uses invfft!)
bfft_orbital_k -> fwfft_orbital_k (since it uses fwfft!)
I replaced all the istances I could find in the trunk.
Apologies if I missed any.
Stefano dG
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11489 c92efa57-630b-4861-b058-cf58834340f0
Now this is not any more necessary because the shift_cell routine does a trick to shift the wavefunction to the center to calculate d0psi.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11117 c92efa57-630b-4861-b058-cf58834340f0