[Pw_forum] Error in divide_class ( with D_2 symmetry)
Dal Corso Andrea
dalcorso at sissa.it
Thu Aug 16 11:15:19 CEST 2007
On Wed, 2007-08-15 at 14:35 -0400, Tao Sun wrote:
> Hi,
>
> When I tried to compute phonon at q=(-0.01000100010001, -1.000100010001,
> 0.5) in a shear-strained fcc primitive cell
>
> CELL_PARAMETERS (alat)
> -0.5 0.005 0.5
> -0.005 0.5 0.5
> -0.505 0.505 0.0
>
> using espresso-3.2.2
>
> I met the following error message:
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> from divide_class : error # 1
> wrong axis
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> stopping ...
>
> This error message comes from PW/divide_class.f90, in the D_2
> symmetry part. between line 150-169:
>
> -----------------------------------------------------
> ELSEIF (code_group==8) THEN
> !
> ! D_2
> !
> ! versor find the rotation axis.
> ! is_axis(ax,ind) is true if ax the axis given by ind
> ! (1 asse x, 2 asse y, 3 asse z).
> !
> DO iclass=2,nclass
> CALL versor(smat(1,1,elem(1,iclass)),ax)
> IF (is_axis(ax,3)) THEN
> which_irr(iclass)=2
> ELSEIF (is_axis(ax,2)) THEN
> which_irr(iclass)=3
> ELSEIF (is_axis(ax,2)) THEN
> which_irr(iclass)=4
> ELSE
> CALL errore('divide_class','wrong axis',1)
> ENDIF
> ENDDO
> -----------------------------------------------------
>
You are right, divide_class is wrong for D_2. Thank you for reporting
this. Actually in your system two of the three C_2 axes are not parallel
to x or y, so even correcting the bug will not solve the problem.
One possibility is to take C_2 parallel to the axis of
the first rotation, C_2' parallel to the axis of the
second rotation, and C_2'' parallel to the axis of the third rotation.
This can be done substituting the loop over classes with:
DO iclass=2,nclass
which_irr(iclass)=iclass
ENDDO
For divide_class_so we can do the same thing. The loop over the
classes becomes:
first=.true.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
first=.false.
ELSE
if (first) then
which_irr(iclass)=iclass+1
else
which_irr(iclass)=iclass
endif
END IF
ENDDO
Hope this helps.
Andrea
> The duplicated condition (is_axis(ax,2)) looks suspicious,
> but when I changed one of them into is_axis(ax,1), the
> error is still there.
>
> If I remove the CALL errore(... sentence, the code can
> compute the eigen-values, except gives weird symmetry
> label to each mode, as:
>
> ---------------------------------------------------------
> Mode symmetry, D_2 (222) point group:
>
> omega( 1 - 1) = 81.09814 [cm-1] --> ?
> omega( 1 - 1) = 81.09814 [cm-1] --> A
> omega( 1 - 1) = 81.09814 [cm-1] --> ?
> omega( 1 - 1) = 81.09814 [cm-1] --> B_1
> omega( 2 - 2) = 111.55732 [cm-1] --> ?
> omega( 2 - 2) = 111.55732 [cm-1] --> B_2
> omega( 2 - 2) = 111.55732 [cm-1] --> ?
> omega( 2 - 2) = 111.55732 [cm-1] --> B_3
> omega( 3 - 3) = 124.59709 [cm-1] --> ?
> omega( 3 - 3) = 124.59709 [cm-1] --> B_2
> omega( 3 - 3) = 124.59709 [cm-1] --> ?
> omega( 3 - 3) = 124.59709 [cm-1] --> B_3
> ------------------------------------------------------
>
> This error is independent of the system, we observe the
> same behavior in two different fcc crystals(MgO and Pt).
>
> BTW, similar problem exists in PW/divide_class_so.f90
> while q points of other symmetry type(e.g. D_2h) seems OK.
>
> It will be great if somebody can help us fix the problem.
>
> Cheers.
>
> Tao Sun
>
> Graduate Student
> Dept. of Physics & Astronomy
> SUNY at Stony Brook
>
>
> _______________________________________________
> Pw_forum mailing list
> Pw_forum at pwscf.org
> http://www.democritos.it/mailman/listinfo/pw_forum
--
Andrea Dal Corso Tel. 0039-040-3787428
SISSA, Via Beirut 2/4 Fax. 0039-040-3787528
34014 Trieste (Italy) e-mail: dalcorso at sissa.it
More information about the Pw_forum
mailing list