Long explanation (read it if you with to know how symmetry works in phonon):
The minus_q switch was supposed to reduce by half the number of k points required in a phonon calculation by using time reversal symmetry.
I.e. in a pw.x calculation if we have time-reversal symmetry, we can use k .seq. -k (k is symmetry-equivalent to -k) to limit the BZ integrals to half of the k-points.
In the phonon code, some integrals are done on the k+q grid, where k+q .not. seq. -k+q, hence we would have to use the full grid.
However, when there is a symmetry operation S such as
Sq = -q+G [1]
we can again use only half the k-point as long as we then symmetrize w.r.t. S + time reversal, i.e. rotate the dynamical matrix D with S and take the complex-conjugate. This operation is actually done at the beginning of symdynph_gq.f90
if minusq_q is true.
The problem is that S was only searched inside the small-group of q (SGq), which is wrong, for this reason:
if S is in the SGq than Sq = q+G, combine this with eq. q and you'll get
q+G = -q+G' [2]
i.e. q and -q are equivalent WITHOUT THE NEED OF ANY SYMMETRY. In this case S, the "minus_q" special symmetry, is just the indentity!! And the "minusq_q" special symmetrization is exactly the same as imposing hermiticity, which is done immediately before in symdynph_gq.f90.
On the other hand we want Sq to be NOT equivalent to q, i.e.
Sq =/= q+G (for any G) [3]
this case gives use on more symmetry to exploit.
Line 164 of sgam_ph was:
if (sym(irot) .and. .not.minus_q) then
in principle changing it to
if (.not.sym(irot) .and. .not.minus_q) then
is sufficient, but I decided to do as the old comment said:
! l'istruzione "originale" in kreductor era la seguente...
! if (.not. minus_q) then
which is also correct. If S happens to be in the SGq (in this case the S=Identity will be picked) hermiticity will be applied twice. This does not hurt and keeps the minus_q switch consistent, i.e. minusq_q = .true. will mean that there is a symmetry linking q to -q+G, this symmetry could also be the identity, which happens ate the zone border.
Notes:
1. if a crystal has inversion symmetry then minus_q must be true for EVERY q point.
2. if a crystal does NOT have inversion symmetry minus_q can still be true for some specific point, at least Gamma, I'm not sure if S can be anything else than identity in this case.
3. the change to set_irr_sym.f90 is just fix for a bug introduced by having sgam_ph working properly.
4. I tested this fix on the full phonon dispersion of a couple of high-symmetry lattices, without finding any problem, but some other code using the Phonon symmetry routines may do wrong assumptions about what minus_q actually is.
thank you for reading, LP
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@9630 c92efa57-630b-4861-b058-cf58834340f0
case trans=.false. and drho_star%open=.true. the program was not
working as the rotation of dvscf (or of drho) was carried out
inside dynmatrix.f90 that wass called only for trans=.true. .
The new routine rotate_dvscf_star.f90 extracts the lines
for the rotation of dvscf (drho) so that it can be called even
in the case of trans=.false.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@9622 c92efa57-630b-4861-b058-cf58834340f0
when the symmetry checks are bordeline.
Repeat the symmetry tests with a reduced threshold thus identifying
a suitable subgroup instead of disabling symmetry completely.
Contributed by Emine, modified by SdG as agreed with Paolo and Layla
so as to explictely pass the acceptance threshold as argument to eqvect.f90.
all other known istances of eqvect in the distibution modified
passing accep=1.e-5_dp as argument thus reproducing previous behaviour.
stefano
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@9483 c92efa57-630b-4861-b058-cf58834340f0