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.
which algorithm must be used for the calculation of EELS
(Lanczos or Sternheimer). Removed the old logical variable
'sternheimer'.
2. Adapted the output of the Sternheimer calculation to be
as close as possibloe to the output of the Lanczos calculation.
3. Changes in the Doc and README files
4. Updated the Sternheimer example
Now, just by changing sc_size it is possible to control the
size of the virtual supercell that is used in DFT+U+V to
generate couples Hubbard_V(i,j). By default, sc_size=1 which
corresponds to 3x3x3. By setting sc_size=2 the supercell
will be 5x5x5. The supercell is determiend as:
(2*sc_size+1) x (2*sc_size+1) x (2*sc_size+1).
Now, the size of Hubbard_V arrays is automatically adjusted
if sc_size is changed in Modules/parameters.f90
2) Other small miscellaneous changes
- subroutine "ruotaijk" deleted and replaced by "rotate_grid_point", that does
quite the same thing but requires on input the symmetry operation in "scaled"
form, that is, suitable for directly transforming FFT grid point indices.
- subroutine "scale_sym_ops" added: trasforms rotation matrices and fractional
translations into "scaled" form, checking their consistency with the FFT grid.
Advantages: slightly cleaner, definitely safer, faster.
Usage: define local variables ftau, s_scaled as (for instance):
integer :: ftau(3,nsym), s_scaled(3,3,nsym)
Initialize ftau and s_scaled (nr1,nr2,nr3 for the chosen FFT grid):
call scale_sym_ops (nsym, s, ft, nr1, nr2, nr3, s_scaled, ftau)
Then for sym.op. "isym", the rotated (ri,rj,rk) of grid point (i,j,k) is
call rotate_grid_point( s_scaled(1,1,isym), ftau(1,isym), &
i, j, k, nr1, nr2, nr3, ri, rj, rk )
BEWARE: should be safe but it is untested for sym_band and pw2wannier
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!
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.