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
Added two small files from libxc. Compile with -D__LIBXC, link with libxc:
-L/dir/where/libxc/is -lxcf90 -lxc
User guides updated with a reshuffling of names: contributors to all of QE
(in particular, most functionals) are listed in the user guide of QE and
not in the one of PW. make.depend updated
This is just to avoid that the work done is lost. It should be a first step
towards better organization of XC functionals. We should seriously consider
one of the following options:
1. move to libxc, getting rid of all duplicated functionals, keeping only
those that are not available in libxc;
2. add the possibility to use any functional from libxc (currently only a few
can be used). This may require serious restructuring work in our XC
functional (il-)logic, that has become clumsy, obscure and redundant
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11075 c92efa57-630b-4861-b058-cf58834340f0
I believe that with slight increase of calculation cost, the new feather can dramatically
decrease the memory requirement.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11048 c92efa57-630b-4861-b058-cf58834340f0
Script generating make.depend temporarily modified so that it doesn't produce
invalid make.depend files due to references to (missing unless installed)
environ modules
Version number updated to 5.0.99 (got the message?)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10844 c92efa57-630b-4861-b058-cf58834340f0
variables for the "world" MPI communicator. The latter are to be found in
world_comm instead. mp_global should be used only to start and to end the
various parallelization levels. Many small but harmless changes: a few
variables removed or moved to another module in most cases.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10558 c92efa57-630b-4861-b058-cf58834340f0
- PWCOND was not compiling any more after last branch merging,
I fix it mapping old to new variables (realus), but I need someone checking it
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10532 c92efa57-630b-4861-b058-cf58834340f0
1. Transition energy is exactly the energy difference between two KS orbitals
2. Transition strength is |<c|r|v>|**2 * \omega
How to use?
1. run turbo_davidson.x with if_dft_spectrum=.true. . you will have a file called ${prefix}-dft.eign
2. run turbo_spectrum.x with td='david', and eign_file="${prefix}-dft.eigen"
This calculation should be very fast. The dorminant calculation cost is lr_calc_R.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10444 c92efa57-630b-4861-b058-cf58834340f0
Since right now we have little knowledge about how to choose a proper
threshold for the convergence, when the converge arrives 10*conv_thr
a quasi-converged output is printed out, so user could compare the
quasi-converged plot with the later converged one in order to decide
if he can use a larger threshold for the next calculation.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10341 c92efa57-630b-4861-b058-cf58834340f0
2. It is now possible to discharge the basis set when it arrives its maximum size, at this moment discharging involves 4*num_eign times
of lr_apply_lanczos which is not slow, but may not be so satisfying for some very time consuming calculation, for instatnce hybrid
functionals for big systems. A better way of doing it may be considered in the future.
3. Turbo_spectrum is now camparable with Turbo_davidson.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10321 c92efa57-630b-4861-b058-cf58834340f0
For NCPP, memory requirement is reduced to 1/3 ;
while for USPP, it's reduced to 2/3.
There's another option to reduce the ram use of USPP by another factor of 2 by
setting poor_of_ram=.true., so it requires the same ram as NCPP. The price that
one has to pay is to increase the time of calculation because one has to calculate
s*basis every time one needs it instead of storing all the s*basis vectors. The
induced calcualtion can be neglectable when the size of subspace is small,
but it increases rapidly when the size of subspace is big. For example, when the
size of subspace is about 200, the cal_bec and s_psi calculation will spend more
than half of the whole calculation time. So think it three times before deciding
how to choose.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10316 c92efa57-630b-4861-b058-cf58834340f0
1. Two main big features Pseudo-Hermitian and Davidson-like diagonalization are implemented.
2. Due to the implementation of new features some changes are made regarding reading in and parameter settings, some new files are also created.
3. Among all the changes a quite big one is in the Lanczos.f90 . In the past the first iteration is treated alone and then the iteration starts from
the second iteration. This brings many troubles to Pseudo-Hermitian algorithm. In order to make two methods coexist and look neat in the code, some
changes are made in the iteration structure. Please read the code carefully in order to adapt the new structure before editting Lanczos.f90 .
4. In order to make the code more readable, the code to convert one super vector to its S* is sealed in a routine called lr_apply_s.
5. Some bugs related to virt read are fixed.
6. Due to the new structure of the iteration, the charge_response and project calculation may be not reliable. Some work needs to be done in order to
adapt them with the new structure. At this moment, if these calculations are needed, please use previous version of the code, or use turbo_davidson
in this version instead. By the way, now we have Davidson method, why would you want to calculate the property of a single excitation with Lanczos ?
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10258 c92efa57-630b-4861-b058-cf58834340f0
latter moved to a separate file called "atomic_wfc_mod.f90". It is slightly
confusing right now but it will be cleaned up later. No real changes.
More OpenMP parallelization of Hubbard force calculation.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10209 c92efa57-630b-4861-b058-cf58834340f0
together with lda+U variables extracted from pwcom.f90; stored in a separate
ldaU.f90 file. Added a yet unused variable "is_hubbard". make.depend update.
Lot of noise but nothing substantial.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10169 c92efa57-630b-4861-b058-cf58834340f0
"nwordwfc". In PW/ it is "the number of complex words in wavefunctions";
in PP it is twice that much. The first definition is the one used in the
"buffer" stuff for I/O; the second definition is the "historic" one, used
for the old diropn/davcio stuff. One of these days I'll align everybody to
the first definition. Meanwhile, TDDFPT aligned to the new definition.
Please check for collateral damages.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10064 c92efa57-630b-4861-b058-cf58834340f0
maximum number of record. Better to specify with a flag if writing to a
RAM buffer than using tricks such as negative units. BEWARE: may break
things *but it shouldn't)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10056 c92efa57-630b-4861-b058-cf58834340f0
1) wfc_dir is always set to something sensible: either its value or tmp_dir
2) files containing wavefunctions and the like in pw.x are stored in wfc_dir,
always; no need to save, modify, reset tmp_dir
3) with the exception of TDDFPT, all other codes do not read wfc_dir. Thus,
wfc_dir is set to tmp_dir by read_file(), since in any case it is where
it is looking for wavefunctions
4) TDDFPT reads and uses wfc_dir; for the time being, wfc_dir is set to
either its value or to "undefined", in order to keep compatibility with
its usage in TDDFPT. The setting is done AFTER read_file is called
May or may not work. I hope it does.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@9965 c92efa57-630b-4861-b058-cf58834340f0