quantum-espresso/PW/divide_class_so.f90

3434 lines
96 KiB
Fortran
Raw Normal View History

!
! Copyright (C) 2006 Quantum-ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
#include "f_defs.h"
!
!-----------------------------------------------------------------------------
SUBROUTINE divide_class_so(code_group,nrot,smat,d_spin,has_e,nclass, &
nelem,elem, which_irr)
!-----------------------------------------------------------------------------
!
! This subroutine receives as input a set of nrot 3x3 matrices smat,
! and nrot complex 2x2 matrices d_spin, which are assumed to be the
! operations of the point group given by code_group. Only the operations
! that do not contain the 2\pi rotation (-E) are given in input.
! smat are in cartesian coordinates.
! This routine divides the double group in classes and find:
!
! nclass the number of classes of the double group
! nelem(iclass) for each class, the number of elements of the class
! elem(i,iclass) 1<i<nelem(iclass) for each class tells which matrices
! smat belong to that class
! has_e(i,iclass) =-1 if the operation is multiplied by -E, 1 otherwise
! which_irr(iclass) for each class gives the position of that class in the
! character table associated with the group and provided
! by the routine set_irr_rap_so. NB: changing the order of
! the elements in the character table must reflect in
! a change to which_irr. Presently the character tables
! are those given by G.F. Koster, Space Group and their
! representations.
! Several equivalent names for the irreducible representation
! are given. D, G, L, S are used for Delta, Gamma, Lambda
! and Sigma.
!
USE kinds, ONLY : DP
IMPLICIT NONE
INTEGER :: &
code_group, & ! The code of the point group
nrot, & ! The number of symmetry operation
nclass, & ! The number of classes
nelem(24), & ! The elements of each class
elem(12,24), & ! Which elements in the smat list for each class
has_e(12,24), & ! if -1 the element is multiplied by -E
which_irr(24) ! See above
REAL(DP) :: smat(3,3,nrot), cmat(3,3), ax(3)
REAL(DP) :: smate(3,3,2*nrot)
COMPLEX(DP) :: d_spin(2,2,48), d_spine(2,2,96), c_spin(2,2)
INTEGER :: done(96), irot, jrot, krot, iclass, i
INTEGER :: tipo_sym, set_e, ipol, axis, axis1, axis2, ts
REAL(DP), PARAMETER :: eps = 1.d-7
REAL(DP) :: angle_rot, angle_rot_s, ars
LOGICAL :: compare_mat_so, is_axis, first, first1
LOGICAL :: done_ax(6)
!
! Divide the group in classes.
!
DO irot=1,nrot
smate(:,:,irot)=smat(:,:,irot)
smate(:,:,irot+nrot)=smat(:,:,irot)
d_spine(:,:,irot)=d_spin(:,:,irot)
d_spine(:,:,irot+nrot)=-d_spin(:,:,irot)
END DO
!
! If there are doubts that the input matrices are not a point group uncomment
! the call to this routine.
!
!CALL check_tgroup(2*nrot,d_spine,smate)
!
nclass=0
nelem=0
done=0
DO irot=1,2*nrot
IF (done(irot)==0) THEN
nclass=nclass+1
DO jrot=1,2*nrot
CALL coniug_mat_so(smate(1,1,jrot),d_spine(1,1,jrot), &
smate(1,1,irot),d_spine(1,1,irot), &
cmat,c_spin)
DO krot=1,2*nrot
IF (compare_mat_so(cmat,c_spin,smate(1,1,krot),d_spine(1,1,krot)) &
.AND.done(krot)==0) THEN
nelem(nclass)=nelem(nclass)+1
IF (krot.le.nrot) THEN
elem(nelem(nclass),nclass)=krot
has_e(nelem(nclass),nclass)=1
ELSE
elem(nelem(nclass),nclass)=krot-nrot
has_e(nelem(nclass),nclass)=-1
ENDIF
done(krot)=1
ENDIF
ENDDO
ENDDO
ENDIF
ENDDO
!
! For each class we should now decide which_irr. This depends on the group
! and on the tables of characters of the irreducible representation.
!
which_irr(1)=1
IF (code_group==1) THEN
!
! C_1
!
which_irr(2)=2
ELSEIF (code_group==2.OR.code_group==3.OR.code_group==4) THEN
!
! C_i, C_s, C_2
!
DO iclass=2,nclass
IF (tipo_sym(smat(1,1,elem(1,iclass)))==1) THEN
which_irr(iclass)=2
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),3)
END IF
END DO
ELSEIF (code_group==5) THEN
!
! C_3
!
! The function angle_rot(smat) provides the rotation angle of the matrix smat
!
DO iclass=2,nclass
IF (tipo_sym(smat(1,1,elem(1,iclass)))==1) THEN
which_irr(iclass)=2
ELSE
IF (ABS(angle_rot(smat(1,1,elem(1,iclass)))-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),5)
ENDIF
ENDIF
ENDDO
ELSEIF (code_group==6) THEN
!
! C_4
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSEIF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF (ABS(ars-90.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ABS(ars-270.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSE
CALL errore('divide_class_so','wrong angle',1)
ENDIF
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
ENDIF
ENDDO
ELSEIF (code_group==7) THEN
!
! C_6
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSEIF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF (ABS(ars-60.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ABS(ars-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSEIF (ABS(ars-240.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSEIF (ABS(ars-300.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE
CALL errore('divide_class_so','wrong angle',1)
ENDIF
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
ENDIF
ENDDO
ELSEIF (code_group==8) THEN
!
! D_2
!
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
ELSEIF (code_group==9) THEN
!
! D_3
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSEIF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
ENDIF
ENDDO
ELSEIF (code_group==10) THEN
!
! D_4
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
CALL versor(smat(1,1,elem(1,iclass)),ax)
axis=0
DO ipol=1,3
IF (is_axis(ax,ipol)) axis=ipol
ENDDO
axis1=MOD(ipol,3)+1
axis2=MOD(ipol+1,3)+1
IF (axis==0) call errore('divide_class_so','unknown D_4 axis ',1)
ENDIF
END DO
first=.TRUE.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==4) THEN
CALL versor(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,axis)) THEN
which_irr(iclass)=5
ELSEIF (is_axis(ax,axis1).or.is_axis(ax,axis2)) THEN
which_irr(iclass)=6
ELSE
which_irr(iclass)=7
END IF
ELSEIF (ts.ne.3) THEN
CALL errore('divide_class_so','wrong sym_type',1)
END IF
END DO
ELSEIF (code_group==11) THEN
!
! D_6
!
first=.true.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF ((ABS(ars-60.d0)<eps).OR.(ABS(ars-300.d0)<eps) ) THEN
which_irr(iclass)=set_e(has_e(1,iclass),6)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),4)
ENDIF
ELSEIF (ts==4) THEN
CALL versor(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,3)) THEN
which_irr(iclass)=3
ELSE
IF (first) THEN
which_irr(iclass)=8
first=.false.
ELSE
which_irr(iclass)=9
END IF
END IF
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
END IF
END DO
ELSEIF (code_group==12) THEN
!
! C_2v
!
first=.true.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==4) THEN
which_irr(iclass)=3
ELSEIF (ts==5.and.first) THEN
which_irr(iclass)=4
first=.false.
ELSE
which_irr(iclass)=5
ENDIF
ENDDO
ELSEIF (code_group==13) THEN
!
! C_3v
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSE
CALL errore('divide_class_so','wrong operation',1)
ENDIF
ENDDO
ELSEIF (code_group==14) THEN
!
! C_4v
!
first=.true.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ts==4) THEN
which_irr(iclass)=5
ELSEIF (ts==5.and.first) THEN
which_irr(iclass)=6
first=.false.
ELSE
which_irr(iclass)=7
ENDIF
ENDDO
ELSEIF (code_group==15) THEN
!
! C_6v
!
first=.true.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF ((ABS(ars-60.d0)<eps).OR.(ABS(ars-300.d0)<eps)) THEN
which_irr(iclass)=set_e(has_e(1,iclass),6)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),4)
ENDIF
ELSEIF (ts==4) THEN
which_irr(iclass)=3
ELSEIF (ts==5.and.first) THEN
which_irr(iclass)=8
first=.false.
ELSE
which_irr(iclass)=9
ENDIF
ENDDO
ELSEIF (code_group==16) THEN
!
! C_2h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSEIF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
ENDIF
ENDDO
ELSEIF (code_group==17) THEN
!
! C_3h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF (ABS(ars-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),5)
END IF
ELSEIF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSEIF (ts==6) THEN
IF (ABS(angle_rot_s(smat(1,1,elem(1,iclass)))-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),11)
END IF
ELSE
CALL errore('divide_class_so','wrong sym_type',1)
ENDIF
ENDDO
ELSEIF (code_group==18) THEN
!
! C_4h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
IF (angle_rot(smat(1,1,elem(1,iclass)))-90.d0<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),7)
END IF
ELSEIF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSEIF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSEIF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),13)
ELSEIF (ts==6) THEN
IF (angle_rot_s(smat(1,1,elem(1,iclass)))-90.d0<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),15)
END IF
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==19) THEN
!
! C_6h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF (ABS(ars-60.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSEIF (ABS(ars-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSEIF (ABS(ars-240.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSEIF (ABS(ars-300.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
END IF
ELSEIF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSEIF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),13)
ELSEIF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),19)
ELSEIF (ts==6) THEN
ars=angle_rot_s(smat(1,1,elem(1,iclass)))
IF (ABS(ars-60.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),21)
ELSEIF (ABS(ars-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),23)
ELSEIF (ABS(ars-240.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),15)
ELSEIF (ABS(ars-300.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),17)
END IF
ELSE
CALL errore('divide_class_so','wrong operation',1)
ENDIF
ENDDO
ELSEIF (code_group==20) THEN
!
! D_2h
!
! mirror_axis gives the normal to the mirror plane
!
done_ax=.TRUE.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
CALL versor(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,3)) THEN
which_irr(iclass)=3
done_ax(1)=.FALSE.
ELSE IF (is_axis(ax,2)) THEN
which_irr(iclass)=4
done_ax(2)=.FALSE.
ELSE IF (is_axis(ax,1)) THEN
which_irr(iclass)=5
done_ax(3)=.FALSE.
ELSE
DO i=1,3
IF (done_ax(i)) THEN
which_irr(iclass)=i+2
done_ax(i)=.FALSE.
GOTO 100
END IF
END DO
100 CONTINUE
END IF
ELSEIF (ts==2) THEN
IF (has_e(1,iclass)==-1) THEN
which_irr(iclass)=7
ELSE
which_irr(iclass)=6
END IF
ELSEIF (ts==5) THEN
CALL mirror_axis(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,3)) THEN
which_irr(iclass)=8
ELSE IF (is_axis(ax,2)) THEN
which_irr(iclass)=9
ELSE IF (is_axis(ax,1)) THEN
which_irr(iclass)=10
ELSE
DO i=4,6
IF (done_ax(i)) THEN
which_irr(iclass)=i+4
done_ax(i)=.FALSE.
GOTO 110
END IF
END DO
110 CONTINUE
END IF
END IF
END DO
ELSEIF (code_group==21) THEN
!
! D_3h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE IF (ts==4) THEN
which_irr(iclass)=5
ELSE IF (ts==5) THEN
IF (nelem(iclass)>1) THEN
which_irr(iclass)=9
ELSE
which_irr(iclass)=6
END IF
ELSE IF (ts==6) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
END IF
END DO
ELSEIF (code_group==22) THEN
!
! D_4h
!
! First search the order 4 axis
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
CALL versor(smat(1,1,elem(1,iclass)),ax)
axis=0
DO ipol=1,3
IF (is_axis(ax,ipol)) axis=ipol
ENDDO
IF (axis==0) call errore('divide_class_so','unknown D_4h axis ',1)
ENDIF
END DO
first=.TRUE.
first1=.TRUE.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
CALL versor(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,axis)) THEN
which_irr(iclass)=5
ELSE
IF (first) THEN
which_irr(iclass)=6
first=.FALSE.
ELSE
which_irr(iclass)=7
END IF
END IF
ELSEIF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),8)
ELSEIF (ts==5) THEN
CALL mirror_axis(smat(1,1,elem(1,iclass)),ax)
IF (is_axis(ax,axis)) THEN
which_irr(iclass)=12
ELSE
IF (first1) THEN
which_irr(iclass)=13
first1=.FALSE.
ELSE
which_irr(iclass)=14
END IF
END IF
ELSEIF (ts==6) THEN
which_irr(iclass)=set_e(has_e(1,iclass),10)
END IF
END DO
ELSEIF (code_group==23) THEN
!
! D_6h
!
first=.TRUE.
first1=.TRUE.
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
ars=angle_rot(smat(1,1,elem(1,iclass)))
IF ((ABS(ars-60.d0)<eps).OR.(ABS(ars-300.d0)<eps)) THEN
which_irr(iclass)=set_e(has_e(1,iclass),6)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),4)
END IF
ELSE IF (ts==4) THEN
IF (nelem(iclass)==2) THEN
which_irr(iclass)=3
ELSE
IF (first) THEN
which_irr(iclass)=8
first=.FALSE.
ELSE
which_irr(iclass)=9
END IF
END IF
ELSE IF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),10)
ELSE IF (ts==5) THEN
IF (nelem(iclass)==2) THEN
which_irr(iclass)=12
ELSE
IF (first1) THEN
which_irr(iclass)=17
first1=.FALSE.
ELSE
which_irr(iclass)=18
ENDIF
END IF
ELSE IF (ts==6) THEN
ars=angle_rot_s(smat(1,1,elem(1,iclass)))
IF ((ABS(ars-60.d0)<eps).OR.(ABS(ars-300.d0)<eps)) THEN
which_irr(iclass)=set_e(has_e(1,iclass),13)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),15)
END IF
END IF
END DO
ELSEIF (code_group==24) THEN
!
! D_2d
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==6) THEN
which_irr(iclass)=set_e(has_e(1,iclass),4)
ELSE IF (ts==4) THEN
IF (nelem(iclass)==2) THEN
which_irr(iclass)=3
ELSE
which_irr(iclass)=6
END IF
ELSE IF (ts==5) THEN
which_irr(iclass)=7
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==25) THEN
!
! D_3d
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSEIF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE IF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE IF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSE IF (ts==6) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSE IF (ts==5) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==26) THEN
!
! S_4
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),5)
ELSE IF (ts==6) THEN
IF (ABS(angle_rot_s(smat(1,1,elem(1,iclass)))-90.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),7)
END IF
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSE IF (code_group==27) THEN
!
! S_6
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
IF (ABS(angle_rot(smat(1,1,elem(1,iclass)))-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),5)
END IF
ELSE IF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSE IF (ts==6) THEN
IF (ABS(angle_rot_s(smat(1,1,elem(1,iclass)))-60.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),9)
END IF
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==28) THEN
!
! T
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
which_irr(iclass)=3
ELSE IF (ts==3) THEN
IF (ABS(angle_rot(smat(1,1,elem(1,iclass)))-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),4)
ELSE IF (ABS(angle_rot(smat(1,1,elem(1,iclass)))-240.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),6)
ENDIF
ELSE
CALL errore('divide_class_so','wrong sym type',1)
END IF
END DO
ELSE IF (code_group==29) THEN
!
! T_h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
IF (ABS(angle_rot(smat(1,1,elem(1,iclass)))-120.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),4)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),6)
END IF
ELSE IF (ts==4) THEN
which_irr(iclass)=3
ELSE IF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),8)
ELSE IF (ts==6) THEN
IF (ABS(angle_rot_s(smat(1,1,elem(1,iclass)))-60.d0)<eps) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),13)
END IF
ELSE IF (ts==5) THEN
which_irr(iclass)=10
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==30) THEN
!
! T_d
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==3) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE IF (ts==4) THEN
which_irr(iclass)=5
ELSE IF (ts==6) THEN
which_irr(iclass)=set_e(has_e(1,iclass),7)
ELSE IF (ts==5) THEN
which_irr(iclass)=6
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==31) THEN
!
! O
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==1) THEN
which_irr(iclass)=2
ELSE IF (ts==4) THEN
which_irr(iclass)=set_e(has_e(1,iclass),6)
ELSE IF (ts==3) THEN
IF (nelem(iclass)==8) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),7)
END IF
ELSE
CALL errore('divide_class_so','wrong operation',1)
END IF
END DO
ELSEIF (code_group==32) THEN
!
! O_h
!
DO iclass=2,nclass
ts=tipo_sym(smat(1,1,elem(1,iclass)))
IF (ts==4) THEN
IF (nelem(iclass)==6) THEN
which_irr(iclass)=5
ELSE
which_irr(iclass)=8
END IF
ELSE IF (ts==3) THEN
IF (nelem(iclass)==8) THEN
which_irr(iclass)=set_e(has_e(1,iclass),3)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),6)
END IF
ELSE IF (ts==2) THEN
which_irr(iclass)=set_e(has_e(1,iclass),9)
ELSE IF (ts==5) THEN
IF (nelem(iclass)==12) THEN
which_irr(iclass)=16
ELSE
which_irr(iclass)=13
END IF
ELSE IF (ts==6) THEN
IF (nelem(iclass)==8) THEN
which_irr(iclass)=set_e(has_e(1,iclass),11)
ELSE
which_irr(iclass)=set_e(has_e(1,iclass),14)
END IF
ELSE IF (ts==1) THEN
which_irr(iclass)=2
ELSE
CALL errore('divide_class','wrong operation',1)
END IF
ENDDO
ELSE
CALL errore('divide_class_so','code_group not correct',1)
ENDIF
RETURN
END SUBROUTINE divide_class_so
!-----------------------------------------------------------------------------
SUBROUTINE coniug_mat_so(a,a_spin,b,b_spin,c,c_spin)
!-----------------------------------------------------------------------------
USE kinds, ONLY : DP
IMPLICIT NONE
REAL(DP) :: a(3,3), b(3,3), c(3,3)
COMPLEX(DP) :: a_spin(2,2), b_spin(2,2), c_spin(2,2)
c=MATMUL(a,MATMUL(b,TRANSPOSE(a)))
c_spin=MATMUL(a_spin,MATMUL(b_spin,TRANSPOSE(CONJG(a_spin))))
RETURN
END SUBROUTINE coniug_mat_so
!
!-----------------------------------------------------------------------------
FUNCTION compare_mat_so(a,a_spin,b,b_spin)
!-----------------------------------------------------------------------------
!
! This function compare two 3x3 matrices and two 2x2 matrices
! and returns .true. if they coincide.
!
USE kinds, ONLY : DP
IMPLICIT NONE
REAL(DP) :: a(3,3), b(3,3), csum
REAL(DP), PARAMETER :: eps=1.d-7
COMPLEX(DP) :: a_spin(2,2), b_spin(2,2)
LOGICAL :: compare_mat_so
INTEGER :: i, j
csum=0.d0
DO i=1,2
DO j=1,2
csum=csum+ABS(a_spin(i,j)-b_spin(i,j))
END DO
END DO
compare_mat_so=((ABS(MAXVAL(a-b))<eps).AND. &
(ABS(MINVAL(a-b))<eps).AND. (csum < eps ))
RETURN
END FUNCTION compare_mat_so
!-----------------------------------------------------------------------------
SUBROUTINE set_irr_rap_so(code_group,nclass_ref,nrap_ref,char_mat,&
name_rap,name_class,name_class1)
!-----------------------------------------------------------------------------
!
! This subroutine collects the character tables of the 32 crystallographic
! double point groups. Various names have been used in the litterature
! to identify D, G, L, S are used for Delta, Gamma, Lambda and Sigma.
!
!
USE kinds, ONLY : DP
IMPLICIT NONE
INTEGER :: nclass_ref, & ! Output: number of classes
nrap_ref, & ! Output: number of irreducible representation
code_group ! Input: code of the group
CHARACTER(LEN=15) :: name_rap(24) ! Output: name of the representations
CHARACTER(LEN=5) :: name_class(24), & ! Output: name of the classes
name_class1(24) ! Output: name of the classes
COMPLEX(DP) :: char_mat(12,24) ! Output: character matrix
REAL(DP) :: sqr3d2, sqrt2, sqrt3, dsq2
sqrt2 =SQRT(2.d0)
sqrt3 =SQRT(3.d0)
sqr3d2=sqrt3*0.5d0
dsq2 =sqrt2*0.5d0
char_mat=(1.d0,0.d0)
char_mat(:,2)=(-1.d0,0.d0)
name_class1=" "
name_class(1)="E "
name_class(2)="-E "
IF (code_group==1) THEN
!
! C_1
!
nclass_ref=2
nrap_ref=1
name_rap(1)="G_2 "
ELSEIF (code_group==2) THEN
!
! C_i
!
nclass_ref=4
name_class(3)="i "
name_class(4)="-i "
nrap_ref=2
name_rap(1)="G_2+"
char_mat(1,4)=(-1.d0,0.d0)
name_rap(2)="G_2-"
char_mat(2,3)=(-1.d0,0.d0)
ELSEIF (code_group==3) THEN
!
! C_s
!
nclass_ref=4
name_class(3)="s "
name_class(4)="-s "
nrap_ref=2
name_rap(1)="G_3 "
char_mat(1,3)=(0.d0, 1.d0)
char_mat(1,4)=(0.d0,-1.d0)
name_rap(2)="G_4 "
char_mat(2,3)=(0.d0,-1.d0)
char_mat(2,4)=(0.d0, 1.d0)
ELSEIF (code_group==4) THEN
!
! C_2
!
nclass_ref=4
name_class(3)="C2 "
name_class(4)="-C2 "
nrap_ref=2
name_rap(1)="G_3 "
char_mat(1,3)=(0.d0, 1.d0)
char_mat(1,4)=(0.d0,-1.d0)
name_rap(2)="G_4 "
char_mat(2,3)=(0.d0,-1.d0)
char_mat(2,4)=(0.d0, 1.d0)
ELSEIF (code_group==5) THEN
!
! C_3
!
nclass_ref=6
name_class(3)="C3 "
name_class(4)="-C3 "
name_class(5)="C3^2 "
name_class(6)="-C3^2"
nrap_ref=3
name_rap(1)="G_4 "
char_mat(1,3)=CMPLX( 0.5d0, sqr3d2)
char_mat(1,4)=CMPLX(-0.5d0,-sqr3d2)
char_mat(1,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(1,6)=CMPLX( 0.5d0,-sqr3d2)
name_rap(2)="G_5 "
char_mat(2,3)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,4)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX( 0.5d0, sqr3d2)
name_rap(3)="G_6 "
char_mat(3,3)=(-1.0d0,0.d0)
char_mat(3,6)=(-1.0d0,0.d0)
ELSEIF (code_group==6) THEN
!
! C_4 NB: The signs of the characters of the class C4^3 -C4^2
! are changed with respect to Koster, Space groups and
! their representation.
!
nclass_ref=8
name_class(3)="C4 "
name_class(4)="-C4 "
name_class(5)="C4^2 "
name_class(6)="-C4^2 "
name_class(7)="C4^3 "
name_class(8)="-C4^3 "
nrap_ref=4
name_rap(1)="G_5 "
char_mat(1,3)=CMPLX( dsq2, dsq2)
char_mat(1,4)=CMPLX(-dsq2,-dsq2)
char_mat(1,5)=( 0.d0,1.d0)
char_mat(1,6)=( 0.d0,-1.d0)
! char_mat(1,7)=CMPLX(-dsq2, dsq2)
! char_mat(1,8)=CMPLX( dsq2,-dsq2)
char_mat(1,7)=CMPLX( dsq2,-dsq2)
char_mat(1,8)=CMPLX(-dsq2, dsq2)
name_rap(2)="G_6 "
char_mat(2,3)=CMPLX( dsq2,-dsq2)
char_mat(2,4)=CMPLX(-dsq2, dsq2)
char_mat(2,5)=( 0.d0,-1.d0)
char_mat(2,6)=( 0.d0, 1.d0)
! char_mat(2,7)=CMPLX(-dsq2,-dsq2)
! char_mat(2,8)=CMPLX( dsq2, dsq2)
char_mat(2,7)=CMPLX( dsq2, dsq2)
char_mat(2,8)=CMPLX(-dsq2,-dsq2)
name_rap(3)="G_7 "
char_mat(3,3)=CMPLX(-dsq2,-dsq2)
char_mat(3,4)=CMPLX( dsq2, dsq2)
char_mat(3,5)=( 0.d0,1.d0)
char_mat(3,6)=( 0.d0,-1.d0)
! char_mat(3,7)=CMPLX( dsq2,-dsq2)
! char_mat(3,8)=CMPLX(-dsq2, dsq2)
char_mat(3,7)=CMPLX(-dsq2, dsq2)
char_mat(3,8)=CMPLX( dsq2,-dsq2)
name_rap(4)="G_8 "
char_mat(4,3)=CMPLX(-dsq2, dsq2)
char_mat(4,4)=CMPLX( dsq2,-dsq2)
char_mat(4,5)=( 0.d0,-1.d0)
char_mat(4,6)=( 0.d0, 1.d0)
! char_mat(4,7)=CMPLX( dsq2, dsq2)
! char_mat(4,8)=CMPLX(-dsq2,-dsq2)
char_mat(4,7)=CMPLX(-dsq2,-dsq2)
char_mat(4,8)=CMPLX( dsq2, dsq2)
ELSEIF (code_group==7) THEN
!
! C_6 NB: The signs of characters of the C3^2 -C3^2 C6^5 -C6^5 classes
! are changed with respect to Koster, Space groups and their
! representation. They match the table in Koster, Dimmok,
! Wheeler, Statz, Properties of the 32 point groups.
!
nclass_ref=12
name_class(3)="C6 "
name_class(4)="-C6 "
name_class(5)="C3 "
name_class(6)="-C3 "
name_class(7)="C2 "
name_class(8)="-C2 "
name_class(9)="C3^2"
name_class(10)="-C3^2"
name_class(11)="C6^5"
name_class(12)="-C6^5"
nrap_ref=6
name_rap(1)="G_7 "
char_mat(1,2)=(-1.d0, 0.d0)
char_mat(1,3)=CMPLX( sqr3d2, 0.5d0)
char_mat(1,4)=CMPLX(-sqr3d2,-0.5d0)
char_mat(1,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(1,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(1,7)=( 0.d0, 1.d0)
char_mat(1,8)=( 0.d0,-1.d0)
! char_mat(1,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(1,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(1,11)=CMPLX(-sqr3d2, 0.5d0)
! char_mat(1,12)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(1,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(1,11)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,12)=CMPLX(-sqr3d2, 0.5d0)
name_rap(2)="G_8 "
char_mat(2,2)=(-1.d0, 0.d0)
char_mat(2,3)=CMPLX( sqr3d2,-0.5d0)
char_mat(2,4)=CMPLX(-sqr3d2, 0.5d0)
char_mat(2,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,7)=( 0.d0,-1.d0)
char_mat(2,8)=( 0.d0, 1.d0)
! char_mat(2,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(2,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(2,11)=CMPLX(-sqr3d2,-0.5d0)
! char_mat(2,12)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,11)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,12)=CMPLX(-sqr3d2,-0.5d0)
name_rap(3)="G_11 "
char_mat(3,2)=(-1.d0, 0.d0)
char_mat(3,3)=( 0.d0, 1.d0)
char_mat(3,4)=( 0.d0,-1.d0)
char_mat(3,5)=(-1.d0, 0.d0)
char_mat(3,7)=( 0.d0,-1.d0)
char_mat(3,8)=( 0.d0, 1.d0)
! char_mat(3,10)=(-1.d0, 0.d0)
! char_mat(3,11)=( 0.d0, 1.d0)
! char_mat(3,12)=( 0.d0,-1.d0)
char_mat(3,9)=(-1.d0, 0.d0)
char_mat(3,11)=( 0.d0,-1.d0)
char_mat(3,12)=( 0.d0, 1.d0)
name_rap(4)="G_12 "
char_mat(4,2)=(-1.d0, 0.d0)
char_mat(4,3)=( 0.d0,-1.d0)
char_mat(4,4)=( 0.d0, 1.d0)
char_mat(4,5)=(-1.d0, 0.d0)
char_mat(4,7)=( 0.d0, 1.d0)
char_mat(4,8)=( 0.d0,-1.d0)
! char_mat(4,10)=(-1.d0, 0.d0)
! char_mat(4,11)=( 0.d0,-1.d0)
! char_mat(4,12)=( 0.d0, 1.d0)
char_mat(4,9)=(-1.d0, 0.d0)
char_mat(4,11)=( 0.d0, 1.d0)
char_mat(4,12)=( 0.d0,-1.d0)
name_rap(5)="G_9 "
char_mat(5,2)=(-1.d0, 0.d0)
char_mat(5,3)=CMPLX(-sqr3d2,-0.5d0)
char_mat(5,4)=CMPLX( sqr3d2, 0.5d0)
char_mat(5,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(5,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(5,7)=( 0.d0,-1.d0)
char_mat(5,8)=( 0.d0, 1.d0)
! char_mat(5,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(5,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(5,11)=CMPLX( sqr3d2,-0.5d0)
! char_mat(5,12)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(5,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(5,11)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,12)=CMPLX( sqr3d2,-0.5d0)
name_rap(6)="G_10 "
char_mat(6,2)=(-1.d0, 0.d0)
char_mat(6,3)=CMPLX(-sqr3d2, 0.5d0)
char_mat(6,4)=CMPLX( sqr3d2,-0.5d0)
char_mat(6,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(6,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(6,7)=( 0.d0, 1.d0)
char_mat(6,8)=( 0.d0,-1.d0)
! char_mat(6,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(6,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(6,11)=CMPLX( sqr3d2, 0.5d0)
! char_mat(6,12)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(6,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(6,11)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,12)=CMPLX( sqr3d2, 0.5d0)
ELSEIF (code_group==8) THEN
!
! D_2
!
nclass_ref=5
name_class(3)="C2 "
name_class1(3)="-C2 "
name_class(4)="C2' "
name_class1(4)="-C2' "
name_class(5)="C2''"
name_class1(5)="-C2''"
nrap_ref=1
name_rap(1)="G_5 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,4)=( 0.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
ELSEIF (code_group==9) THEN
!
! D_3
!
nclass_ref=6
name_class(3)="2C3 "
name_class(4)="-2C3 "
name_class(5)=" 3C2'"
name_class(6)="-3C2'"
nrap_ref=3
name_rap(1)="G_4 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
name_rap(2)="G_5 "
char_mat(2,2)=(-1.d0, 0.d0)
char_mat(2,3)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 1.d0)
char_mat(2,6)=( 0.d0,-1.d0)
name_rap(3)="G_6 "
char_mat(3,2)=(-1.d0, 0.d0)
char_mat(3,3)=(-1.d0, 0.d0)
char_mat(3,5)=( 0.d0,-1.d0)
char_mat(3,6)=( 0.d0, 1.d0)
ELSEIF (code_group==10) THEN
!
! D_4
!
nclass_ref=7
name_class(3)="2C4 "
name_class(4)="-2C4 "
name_class(5)=" C2 "
name_class1(5)="-C2 "
name_class(6)="2C2'"
name_class1(6)="-2C2'"
name_class(7)="2C2'' "
name_class1(7)="-2C2''"
nrap_ref=2
name_rap(1)="G_6 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=CMPLX( sqrt2, 0.d0)
char_mat(1,4)=CMPLX(-sqrt2, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=( 0.d0, 0.d0)
name_rap(2)="G_7 "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=CMPLX(-sqrt2, 0.d0)
char_mat(2,4)=CMPLX( sqrt2, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=( 0.d0, 0.d0)
ELSEIF (code_group==12) THEN
!
! C_2v
!
nclass_ref=5
name_class(3)=" C2"
name_class1(3)="-C2"
name_class(4)=" s_v"
name_class1(4)="-s_v"
name_class(5)=" s_v'"
name_class1(5)="-s_v'"
nrap_ref=1
name_rap(1)="G_5 D_5"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,4)=( 0.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
ELSEIF (code_group==13) THEN
!
! C_3v
!
nclass_ref=6
name_class(3)="2C3 "
name_class(4)="-2C3 "
name_class(5)="3s_v"
name_class(6)="-3s_v"
nrap_ref=3
name_rap(1)="G_4 L_6 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
name_rap(2)="G_5 L_4 "
char_mat(2,3)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 1.d0)
char_mat(2,6)=( 0.d0,-1.d0)
name_rap(3)="G_6 L_5 "
char_mat(3,3)=(-1.d0, 0.d0)
char_mat(3,5)=( 0.d0,-1.d0)
char_mat(3,6)=( 0.d0, 1.d0)
ELSEIF (code_group==14) THEN
!
! C_4v
!
nclass_ref=7
name_class(3)="2C4 "
name_class(4)="-2C4 "
name_class(5)=" C2"
name_class1(5)="-C2"
name_class(6)=" 2s_v"
name_class1(6)="-2s_v"
name_class(7)=" 2s_d"
name_class1(7)="-2s_d"
nrap_ref=2
name_rap(1)="G_6 D_6"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=CMPLX( sqrt2, 0.d0)
char_mat(1,4)=CMPLX(-sqrt2, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=( 0.d0, 0.d0)
name_rap(2)="G_7 D_7"
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=CMPLX(-sqrt2, 0.d0)
char_mat(2,4)=CMPLX( sqrt2, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=( 0.d0, 0.d0)
ELSEIF (code_group==15.OR.code_group==11) THEN
!
! C_6v, D_6
!
nclass_ref=9
name_class(3)=" C2 "
name_class1(3)="-C2 "
name_class(4)=" 2C3 "
name_class(5)="-2C3"
name_class(6)=" 2C6"
name_class(7)="-2C6"
IF (code_group==15) THEN
name_class(8)=" 3s_v"
name_class1(8)="-3s_v"
name_class(9)=" 3s_d"
name_class1(9)="-3s_d"
ELSE
name_class(8)=" 3C2'"
name_class1(8)="-3C2'"
name_class(9)="3C2''"
name_class1(9)="-3C2''"
END IF
nrap_ref=3
name_rap(1)="G_7 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,5)=(-1.d0, 0.d0)
char_mat(1,6)=CMPLX( sqrt3, 0.d0)
char_mat(1,7)=CMPLX(-sqrt3, 0.d0)
char_mat(1,8)=( 0.d0, 0.d0)
char_mat(1,9)=( 0.d0, 0.d0)
name_rap(2)="G_8 "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,5)=(-1.d0, 0.d0)
char_mat(2,6)=CMPLX(-sqrt3, 0.d0)
char_mat(2,7)=CMPLX( sqrt3, 0.d0)
char_mat(2,8)=( 0.d0, 0.d0)
char_mat(2,9)=( 0.d0, 0.d0)
name_rap(3)="G_9 "
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=( 0.d0, 0.d0)
char_mat(3,4)=(-2.d0, 0.d0)
char_mat(3,5)=( 2.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
char_mat(3,9)=( 0.d0, 0.d0)
ELSEIF (code_group==16) THEN
!
! C_2h
!
nclass_ref=8
name_class(3)="C2 "
name_class(4)="-C2 "
name_class(5)="s_h "
name_class(6)="-s_h"
name_class(7)="i "
name_class(8)="-i "
nrap_ref=4
name_rap(1)="G_3+"
char_mat(1,3)=( 0.d0, 1.d0)
char_mat(1,4)=( 0.d0,-1.d0)
char_mat(1,5)=( 0.d0, 1.d0)
char_mat(1,6)=( 0.d0,-1.d0)
char_mat(1,8)=(-1.d0, 0.d0)
name_rap(2)="G_4+"
char_mat(2,3)=( 0.d0,-1.d0)
char_mat(2,4)=( 0.d0, 1.d0)
char_mat(2,5)=( 0.d0,-1.d0)
char_mat(2,6)=( 0.d0, 1.d0)
char_mat(2,8)=(-1.d0, 0.d0)
name_rap(3)="G_3-"
char_mat(3,3)=( 0.d0, 1.d0)
char_mat(3,4)=( 0.d0,-1.d0)
char_mat(3,5)=( 0.d0,-1.d0)
char_mat(3,6)=( 0.d0, 1.d0)
char_mat(3,7)=(-1.d0, 0.d0)
name_rap(4)="G_4- "
char_mat(4,3)=( 0.d0,-1.d0)
char_mat(4,4)=( 0.d0, 1.d0)
char_mat(4,5)=( 0.d0, 1.d0)
char_mat(4,6)=( 0.d0,-1.d0)
char_mat(4,7)=(-1.d0, 0.d0)
ELSEIF (code_group==17) THEN
!
! C_3h
!
nclass_ref=12
name_class(3)="C3 "
name_class(4)="-C3 "
name_class(5)="C3^2"
name_class(6)="-C3^2"
name_class(7)=" s_h "
name_class(8)="-s_h "
name_class(9)=" S3 "
name_class(10)="-S3 "
name_class(11)=" S3^5"
name_class(12)="-S3^5"
nrap_ref=6
name_rap(1)="G_7 "
char_mat(1,2)=(-1.d0, 0.d0)
char_mat(1,3)=CMPLX( 0.5d0, sqr3d2)
char_mat(1,4)=CMPLX(-0.5d0,-sqr3d2)
char_mat(1,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(1,6)=CMPLX( 0.5d0,-sqr3d2)
char_mat(1,7)=( 0.d0, 1.d0)
char_mat(1,8)=( 0.d0,-1.d0)
char_mat(1,9)= CMPLX(-sqr3d2, 0.5d0)
char_mat(1,10)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,11)=CMPLX( sqr3d2, 0.5d0)
char_mat(1,12)=CMPLX(-sqr3d2,-0.5d0)
name_rap(2)="G_8 "
char_mat(2,2)=(-1.d0, 0.d0)
char_mat(2,3)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,4)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,7)=( 0.d0,-1.d0)
char_mat(2,8)=( 0.d0, 1.d0)
char_mat(2,9)= CMPLX(-sqr3d2,-0.5d0)
char_mat(2,10)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,11)=CMPLX( sqr3d2,-0.5d0)
char_mat(2,12)=CMPLX(-sqr3d2, 0.5d0)
name_rap(3)="G_9 "
char_mat(3,2)=(-1.d0, 0.d0)
char_mat(3,3)=CMPLX( 0.5d0, sqr3d2)
char_mat(3,4)=CMPLX(-0.5d0,-sqr3d2)
char_mat(3,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(3,6)=CMPLX( 0.5d0,-sqr3d2)
char_mat(3,7)=( 0.d0,-1.d0)
char_mat(3,8)=( 0.d0, 1.d0)
char_mat(3,9)= CMPLX( sqr3d2,-0.5d0)
char_mat(3,10)=CMPLX(-sqr3d2, 0.5d0)
char_mat(3,11)=CMPLX(-sqr3d2,-0.5d0)
char_mat(3,12)=CMPLX( sqr3d2, 0.5d0)
name_rap(4)="G_10 "
char_mat(4,2)=(-1.d0, 0.d0)
char_mat(4,3)=CMPLX( 0.5d0,-sqr3d2)
char_mat(4,4)=CMPLX(-0.5d0, sqr3d2)
char_mat(4,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(4,6)=CMPLX( 0.5d0, sqr3d2)
char_mat(4,7)=( 0.d0, 1.d0)
char_mat(4,8)=( 0.d0,-1.d0)
char_mat(4,9)= CMPLX( sqr3d2, 0.5d0)
char_mat(4,10)=CMPLX(-sqr3d2,-0.5d0)
char_mat(4,11)=CMPLX(-sqr3d2, 0.5d0)
char_mat(4,12)=CMPLX( sqr3d2,-0.5d0)
name_rap(5)="G_11 "
char_mat(5,2)=(-1.d0, 0.d0)
char_mat(5,3)=(-1.d0, 0.d0)
char_mat(5,6)=(-1.d0, 0.d0)
char_mat(5,7)=( 0.d0, 1.d0)
char_mat(5,8)=( 0.d0,-1.d0)
char_mat(5,9)=( 0.d0,-1.d0)
char_mat(5,10)=( 0.d0, 1.d0)
char_mat(5,11)=( 0.d0,-1.d0)
char_mat(5,12)=( 0.d0, 1.d0)
name_rap(6)="G_12 "
char_mat(6,2)=(-1.d0, 0.d0)
char_mat(6,3)=(-1.d0, 0.d0)
char_mat(6,6)=(-1.d0, 0.d0)
char_mat(6,7)=( 0.d0,-1.d0)
char_mat(6,8)=( 0.d0, 1.d0)
char_mat(6,9)=( 0.d0, 1.d0)
char_mat(6,10)=( 0.d0,-1.d0)
char_mat(6,11)=( 0.d0, 1.d0)
char_mat(6,12)=( 0.d0,-1.d0)
ELSEIF (code_group==18) THEN
!
! C_4h NB: The signs of the characters of the class C4^3 -C4^2 S4 -S4
! are changed with respect to Koster, Space groups and
! their representation. They match the table in Koster,
! Dimmok, Wheeler, Statz, Properties of the 32 point groups.
!
nclass_ref=16
name_class(3)="C4 "
name_class(4)="-C4 "
name_class(5)="C4^2"
name_class(6)="-C4^2"
name_class(7)="C4^3"
name_class(8)="-C4^3"
name_class(9)="i "
name_class(10)="-i "
name_class(11)="S4^3"
name_class(12)="-S4^3"
name_class(13)="s_h "
name_class(14)="-s_h"
name_class(15)="S4 "
name_class(16)="-S4"
nrap_ref=8
name_rap(1)="G_5+ "
char_mat(1,3)=CMPLX( dsq2, dsq2)
char_mat(1,4)=CMPLX(-dsq2,-dsq2)
char_mat(1,5)=( 0.d0, 1.d0)
char_mat(1,6)=( 0.d0,-1.d0)
char_mat(1,7)=CMPLX( dsq2,-dsq2)
char_mat(1,8)=CMPLX(-dsq2, dsq2)
char_mat(1,10)=(-1.d0, 0.d0)
char_mat(1,11)=CMPLX( dsq2, dsq2)
char_mat(1,12)=CMPLX(-dsq2,-dsq2)
char_mat(1,13)=( 0.d0, 1.d0)
char_mat(1,14)=( 0.d0,-1.d0)
char_mat(1,15)=CMPLX( dsq2,-dsq2)
char_mat(1,16)=CMPLX(-dsq2, dsq2)
name_rap(2)="G_6+ "
char_mat(2,3)=CMPLX( dsq2,-dsq2)
char_mat(2,4)=CMPLX(-dsq2, dsq2)
char_mat(2,5)=( 0.d0,-1.d0)
char_mat(2,6)=( 0.d0, 1.d0)
char_mat(2,7)=CMPLX( dsq2, dsq2)
char_mat(2,8)=CMPLX(-dsq2,-dsq2)
char_mat(2,10)=(-1.d0, 0.d0)
char_mat(2,11)=CMPLX( dsq2,-dsq2)
char_mat(2,12)=CMPLX(-dsq2, dsq2)
char_mat(2,13)=( 0.d0,-1.d0)
char_mat(2,14)=( 0.d0, 1.d0)
char_mat(2,15)=CMPLX( dsq2, dsq2)
char_mat(2,16)=CMPLX(-dsq2,-dsq2)
name_rap(3)="G_7+ "
char_mat(3,3)=CMPLX(-dsq2,-dsq2)
char_mat(3,4)=CMPLX( dsq2, dsq2)
char_mat(3,5)=( 0.d0, 1.d0)
char_mat(3,6)=( 0.d0,-1.d0)
char_mat(3,7)=CMPLX(-dsq2, dsq2)
char_mat(3,8)=CMPLX( dsq2,-dsq2)
char_mat(3,10)=(-1.d0, 0.d0)
char_mat(3,11)=CMPLX(-dsq2,-dsq2)
char_mat(3,12)=CMPLX( dsq2, dsq2)
char_mat(3,13)=( 0.d0, 1.d0)
char_mat(3,14)=( 0.d0,-1.d0)
char_mat(3,15)=CMPLX(-dsq2, dsq2)
char_mat(3,16)=CMPLX( dsq2,-dsq2)
name_rap(4)="G_8+ "
char_mat(4,3)=CMPLX(-dsq2, dsq2)
char_mat(4,4)=CMPLX( dsq2,-dsq2)
char_mat(4,5)=( 0.d0,-1.d0)
char_mat(4,6)=( 0.d0, 1.d0)
char_mat(4,7)=CMPLX(-dsq2,-dsq2)
char_mat(4,8)=CMPLX( dsq2, dsq2)
char_mat(4,10)=(-1.d0, 0.d0)
char_mat(4,11)=CMPLX(-dsq2, dsq2)
char_mat(4,12)=CMPLX( dsq2,-dsq2)
char_mat(4,13)=( 0.d0,-1.d0)
char_mat(4,14)=( 0.d0, 1.d0)
char_mat(4,15)=CMPLX(-dsq2,-dsq2)
char_mat(4,16)=CMPLX( dsq2, dsq2)
name_rap(5)="G_5- "
char_mat(5,3)=CMPLX( dsq2, dsq2)
char_mat(5,4)=CMPLX(-dsq2,-dsq2)
char_mat(5,5)=( 0.d0, 1.d0)
char_mat(5,6)=( 0.d0,-1.d0)
char_mat(5,7)=CMPLX( dsq2,-dsq2)
char_mat(5,8)=CMPLX(-dsq2, dsq2)
char_mat(5,9)=(-1.d0, 0.d0)
char_mat(5,11)=CMPLX(-dsq2,-dsq2)
char_mat(5,12)=CMPLX( dsq2, dsq2)
char_mat(5,13)=( 0.d0,-1.d0)
char_mat(5,14)=( 0.d0, 1.d0)
char_mat(5,15)=CMPLX(-dsq2, dsq2)
char_mat(5,16)=CMPLX( dsq2,-dsq2)
name_rap(6)="G_6- "
char_mat(6,3)=CMPLX( dsq2,-dsq2)
char_mat(6,4)=CMPLX(-dsq2, dsq2)
char_mat(6,5)=( 0.d0,-1.d0)
char_mat(6,6)=( 0.d0, 1.d0)
char_mat(6,7)=CMPLX( dsq2, dsq2)
char_mat(6,8)=CMPLX(-dsq2,-dsq2)
char_mat(6,9)=(-1.d0, 0.d0)
char_mat(6,11)=CMPLX(-dsq2, dsq2)
char_mat(6,12)=CMPLX( dsq2,-dsq2)
char_mat(6,13)=( 0.d0, 1.d0)
char_mat(6,14)=( 0.d0,-1.d0)
char_mat(6,15)=CMPLX(-dsq2,-dsq2)
char_mat(6,16)=CMPLX( dsq2, dsq2)
name_rap(7)="G_7- "
char_mat(7,3)=CMPLX(-dsq2,-dsq2)
char_mat(7,4)=CMPLX( dsq2, dsq2)
char_mat(7,5)=( 0.d0, 1.d0)
char_mat(7,6)=( 0.d0,-1.d0)
char_mat(7,7)=CMPLX(-dsq2, dsq2)
char_mat(7,8)=CMPLX( dsq2,-dsq2)
char_mat(7,9)=(-1.d0, 0.d0)
char_mat(7,11)=CMPLX( dsq2, dsq2)
char_mat(7,12)=CMPLX(-dsq2,-dsq2)
char_mat(7,13)=( 0.d0,-1.d0)
char_mat(7,14)=( 0.d0, 1.d0)
char_mat(7,15)=CMPLX( dsq2,-dsq2)
char_mat(7,16)=CMPLX(-dsq2, dsq2)
name_rap(8)="G_8- "
char_mat(8,3)=CMPLX(-dsq2, dsq2)
char_mat(8,4)=CMPLX( dsq2,-dsq2)
char_mat(8,5)=( 0.d0,-1.d0)
char_mat(8,6)=( 0.d0, 1.d0)
char_mat(8,7)=CMPLX(-dsq2,-dsq2)
char_mat(8,8)=CMPLX( dsq2, dsq2)
char_mat(8,9)=(-1.d0, 0.d0)
char_mat(8,11)=CMPLX( dsq2,-dsq2)
char_mat(8,12)=CMPLX(-dsq2, dsq2)
char_mat(8,13)=( 0.d0, 1.d0)
char_mat(8,14)=( 0.d0,-1.d0)
char_mat(8,15)=CMPLX( dsq2, dsq2)
char_mat(8,16)=CMPLX(-dsq2,-dsq2)
ELSEIF (code_group==19) THEN
!
! C_6h NB: The signs of the characters of C3^2 -C3^2 C6^5 -C6^5 S6 -S6 S3 -S3
! are changed with respect to Koster, Space groups and their
! representation. They match the table in Koster, Dimmok,
! Wheeler, Statz, Properties of the 32 point groups.
!
nclass_ref=24
name_class(3)="C6 "
name_class(4)="-C6 "
name_class(5)="C3 "
name_class(6)="-C3 "
name_class(7)="C2 "
name_class(8)="-C2 "
name_class(9)="C3^2"
name_class(10)="-C3^2"
name_class(11)="C6^5"
name_class(12)="-C6^5"
name_class(13)="i "
name_class(14)="-i "
name_class(15)="S3^5"
name_class(16)="-S3^5"
name_class(17)="S6^5"
name_class(18)="-S6^5"
name_class(19)="s_h "
name_class(20)="-s_h"
name_class(21)="S6 "
name_class(22)="-S6 "
name_class(23)="S3 "
name_class(24)="-S3 "
nrap_ref=12
name_rap(1)="G_7+ "
char_mat(1,3)=CMPLX( sqr3d2, 0.5d0)
char_mat(1,4)=CMPLX(-sqr3d2,-0.5d0)
char_mat(1,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(1,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(1,7)=( 0.d0, 1.0d0)
char_mat(1,8)=( 0.d0,-1.0d0)
! char_mat(1,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(1,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(1,11)=CMPLX(-sqr3d2, 0.5d0)
! char_mat(1,12)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(1,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(1,11)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,12)=CMPLX(-sqr3d2, 0.5d0)
char_mat(1,14)=(-1.0d0, 0.d0)
char_mat(1,15)=CMPLX( sqr3d2, 0.5d0)
char_mat(1,16)=CMPLX(-sqr3d2,-0.5d0)
char_mat(1,17)=CMPLX( 0.5d0, sqr3d2)
char_mat(1,18)=CMPLX(-0.5d0,-sqr3d2)
char_mat(1,19)=( 0.d0, 1.0d0)
char_mat(1,20)=( 0.d0,-1.0d0)
! char_mat(1,21)=CMPLX(-0.5d0, sqr3d2)
! char_mat(1,22)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(1,23)=CMPLX(-sqr3d2, 0.5d0)
! char_mat(1,24)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,21)=CMPLX( 0.5d0,-sqr3d2)
char_mat(1,22)=CMPLX(-0.5d0, sqr3d2)
char_mat(1,23)=CMPLX( sqr3d2,-0.5d0)
char_mat(1,24)=CMPLX(-sqr3d2, 0.5d0)
name_rap(2)="G_8+ "
char_mat(2,3)=CMPLX( sqr3d2,-0.5d0)
char_mat(2,4)=CMPLX(-sqr3d2, 0.5d0)
char_mat(2,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,7)=( 0.d0,-1.0d0)
char_mat(2,8)=( 0.d0, 1.0d0)
! char_mat(2,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(2,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(2,11)=CMPLX(-sqr3d2,-0.5d0)
! char_mat(2,12)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,11)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,12)=CMPLX(-sqr3d2,-0.5d0)
char_mat(2,14)=(-1.0d0, 0.d0)
char_mat(2,15)=CMPLX( sqr3d2,-0.5d0)
char_mat(2,16)=CMPLX(-sqr3d2, 0.5d0)
char_mat(2,17)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,18)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,19)=( 0.d0,-1.0d0)
char_mat(2,20)=( 0.d0, 1.0d0)
! char_mat(2,21)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(2,22)=CMPLX( 0.5d0, sqr3d2)
! char_mat(2,23)=CMPLX(-sqr3d2,-0.5d0)
! char_mat(2,24)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,21)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,22)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,23)=CMPLX( sqr3d2, 0.5d0)
char_mat(2,24)=CMPLX(-sqr3d2,-0.5d0)
name_rap(3)="G_11+ "
char_mat(3,3)=( 0.d0, 1.0d0)
char_mat(3,4)=( 0.d0,-1.0d0)
char_mat(3,5)=(-1.d0, 0.d0 )
char_mat(3,7)=( 0.d0,-1.0d0)
char_mat(3,8)=( 0.d0, 1.0d0)
! char_mat(3,10)=(-1.d0, 0.d0 )
! char_mat(3,11)=( 0.d0, 1.0d0)
! char_mat(3,12)=( 0.d0,-1.0d0)
char_mat(3,9)=(-1.d0, 0.d0 )
char_mat(3,11)=( 0.d0,-1.0d0)
char_mat(3,12)=( 0.d0, 1.0d0)
char_mat(3,14)=(-1.0d0, 0.d0)
char_mat(3,15)=( 0.d0, 1.0d0)
char_mat(3,16)=( 0.d0,-1.0d0)
char_mat(3,17)=(-1.0d0, 0.d0)
char_mat(3,19)=( 0.d0,-1.0d0)
char_mat(3,20)=( 0.d0, 1.0d0)
! char_mat(3,22)=(-1.0d0, 0.d0)
! char_mat(3,23)=( 0.d0, 1.0d0)
! char_mat(3,24)=( 0.d0,-1.0d0)
char_mat(3,21)=(-1.0d0, 0.d0)
char_mat(3,23)=( 0.d0,-1.0d0)
char_mat(3,24)=( 0.d0, 1.0d0)
name_rap(4)="G_12+ "
char_mat(4,3)=( 0.d0,-1.0d0)
char_mat(4,4)=( 0.d0, 1.0d0)
char_mat(4,5)=(-1.d0, 0.d0 )
char_mat(4,7)=( 0.d0, 1.0d0)
char_mat(4,8)=( 0.d0,-1.0d0)
! char_mat(4,10)=(-1.d0, 0.d0 )
! char_mat(4,11)=( 0.d0,-1.0d0)
! char_mat(4,12)=( 0.d0, 1.0d0)
char_mat(4,9)=(-1.d0, 0.d0 )
char_mat(4,11)=( 0.d0, 1.0d0)
char_mat(4,12)=( 0.d0,-1.0d0)
char_mat(4,14)=(-1.0d0, 0.d0)
char_mat(4,15)=( 0.d0,-1.0d0)
char_mat(4,16)=( 0.d0, 1.0d0)
char_mat(4,17)=(-1.0d0, 0.d0)
char_mat(4,19)=( 0.d0, 1.0d0)
char_mat(4,20)=( 0.d0,-1.0d0)
! char_mat(4,22)=(-1.0d0, 0.d0)
! char_mat(4,23)=( 0.d0,-1.0d0)
! char_mat(4,24)=( 0.d0, 1.0d0)
char_mat(4,21)=(-1.0d0, 0.d0)
char_mat(4,23)=( 0.d0, 1.0d0)
char_mat(4,24)=( 0.d0,-1.0d0)
name_rap(5)="G_9+ "
char_mat(5,3)=CMPLX(-sqr3d2,-0.5d0)
char_mat(5,4)=CMPLX( sqr3d2, 0.5d0)
char_mat(5,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(5,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(5,7)=( 0.d0,-1.0d0)
char_mat(5,8)=( 0.d0, 1.0d0)
! char_mat(5,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(5,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(5,11)=CMPLX( sqr3d2,-0.5d0)
! char_mat(5,12)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(5,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(5,11)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,12)=CMPLX( sqr3d2,-0.5d0)
char_mat(5,14)=(-1.0d0, 0.d0)
char_mat(5,15)=CMPLX(-sqr3d2,-0.5d0)
char_mat(5,16)=CMPLX( sqr3d2, 0.5d0)
char_mat(5,17)=CMPLX( 0.5d0, sqr3d2)
char_mat(5,18)=CMPLX(-0.5d0,-sqr3d2)
char_mat(5,19)=( 0.d0,-1.0d0)
char_mat(5,20)=( 0.d0, 1.0d0)
! char_mat(5,21)=CMPLX(-0.5d0, sqr3d2)
! char_mat(5,22)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(5,23)=CMPLX( sqr3d2,-0.5d0)
! char_mat(5,24)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,21)=CMPLX( 0.5d0,-sqr3d2)
char_mat(5,22)=CMPLX(-0.5d0, sqr3d2)
char_mat(5,23)=CMPLX(-sqr3d2, 0.5d0)
char_mat(5,24)=CMPLX( sqr3d2,-0.5d0)
name_rap(6)="G_10+ "
char_mat(6,3)=CMPLX(-sqr3d2, 0.5d0)
char_mat(6,4)=CMPLX( sqr3d2,-0.5d0)
char_mat(6,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(6,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(6,7)=( 0.d0, 1.0d0)
char_mat(6,8)=( 0.d0,-1.0d0)
! char_mat(6,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(6,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(6,11)=CMPLX( sqr3d2, 0.5d0)
! char_mat(6,12)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(6,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(6,11)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,12)=CMPLX( sqr3d2, 0.5d0)
char_mat(6,14)=(-1.0d0, 0.d0)
char_mat(6,15)=CMPLX(-sqr3d2, 0.5d0)
char_mat(6,16)=CMPLX( sqr3d2,-0.5d0)
char_mat(6,17)=CMPLX( 0.5d0,-sqr3d2)
char_mat(6,18)=CMPLX(-0.5d0, sqr3d2)
char_mat(6,19)=( 0.d0, 1.0d0)
char_mat(6,20)=( 0.d0,-1.0d0)
! char_mat(6,21)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(6,22)=CMPLX( 0.5d0, sqr3d2)
! char_mat(6,23)=CMPLX( sqr3d2, 0.5d0)
! char_mat(6,24)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,21)=CMPLX( 0.5d0, sqr3d2)
char_mat(6,22)=CMPLX(-0.5d0,-sqr3d2)
char_mat(6,23)=CMPLX(-sqr3d2,-0.5d0)
char_mat(6,24)=CMPLX( sqr3d2, 0.5d0)
name_rap(7)="G_7- "
char_mat(7,3)=CMPLX( sqr3d2, 0.5d0)
char_mat(7,4)=CMPLX(-sqr3d2,-0.5d0)
char_mat(7,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(7,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(7,7)=( 0.d0, 1.0d0)
char_mat(7,8)=( 0.d0,-1.0d0)
! char_mat(7,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(7,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(7,11)=CMPLX(-sqr3d2, 0.5d0)
! char_mat(7,12)=CMPLX( sqr3d2,-0.5d0)
char_mat(7,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(7,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(7,11)=CMPLX( sqr3d2,-0.5d0)
char_mat(7,12)=CMPLX(-sqr3d2, 0.5d0)
char_mat(7,13)=(-1.0d0, 0.d0)
char_mat(7,15)=CMPLX(-sqr3d2,-0.5d0)
char_mat(7,16)=CMPLX( sqr3d2, 0.5d0)
char_mat(7,17)=CMPLX(-0.5d0,-sqr3d2)
char_mat(7,18)=CMPLX( 0.5d0, sqr3d2)
char_mat(7,19)=( 0.d0,-1.0d0)
char_mat(7,20)=( 0.d0, 1.0d0)
! char_mat(7,21)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(7,22)=CMPLX(-0.5d0, sqr3d2)
! char_mat(7,23)=CMPLX( sqr3d2,-0.5d0)
! char_mat(7,24)=CMPLX(-sqr3d2, 0.5d0)
char_mat(7,21)=CMPLX(-0.5d0, sqr3d2)
char_mat(7,22)=CMPLX( 0.5d0,-sqr3d2)
char_mat(7,23)=CMPLX(-sqr3d2, 0.5d0)
char_mat(7,24)=CMPLX( sqr3d2,-0.5d0)
name_rap(8)="G_8- "
char_mat(8,3)=CMPLX( sqr3d2,-0.5d0)
char_mat(8,4)=CMPLX(-sqr3d2, 0.5d0)
char_mat(8,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(8,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(8,7)=( 0.d0,-1.0d0)
char_mat(8,8)=( 0.d0, 1.0d0)
! char_mat(8,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(8,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(8,11)=CMPLX(-sqr3d2,-0.5d0)
! char_mat(8,12)=CMPLX( sqr3d2, 0.5d0)
char_mat(8,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(8,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(8,11)=CMPLX( sqr3d2, 0.5d0)
char_mat(8,12)=CMPLX(-sqr3d2,-0.5d0)
char_mat(8,13)=(-1.0d0, 0.d0)
char_mat(8,15)=CMPLX(-sqr3d2, 0.5d0)
char_mat(8,16)=CMPLX( sqr3d2,-0.5d0)
char_mat(8,17)=CMPLX(-0.5d0, sqr3d2)
char_mat(8,18)=CMPLX( 0.5d0,-sqr3d2)
char_mat(8,19)=( 0.d0, 1.0d0)
char_mat(8,20)=( 0.d0,-1.0d0)
! char_mat(8,21)=CMPLX( 0.5d0, sqr3d2)
! char_mat(8,22)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(8,23)=CMPLX( sqr3d2, 0.5d0)
! char_mat(8,24)=CMPLX(-sqr3d2,-0.5d0)
char_mat(8,21)=CMPLX(-0.5d0,-sqr3d2)
char_mat(8,22)=CMPLX( 0.5d0, sqr3d2)
char_mat(8,23)=CMPLX(-sqr3d2,-0.5d0)
char_mat(8,24)=CMPLX( sqr3d2, 0.5d0)
name_rap(9)="G_11-"
char_mat(9,3)=( 0.d0, 1.0d0)
char_mat(9,4)=( 0.d0,-1.0d0)
char_mat(9,5)=(-1.d0, 0.d0 )
char_mat(9,7)=( 0.d0,-1.0d0)
char_mat(9,8)=( 0.d0, 1.0d0)
! char_mat(9,10)=(-1.d0, 0.d0 )
! char_mat(9,11)=( 0.d0, 1.0d0)
! char_mat(9,12)=( 0.d0,-1.0d0)
char_mat(9,9)=(-1.d0, 0.d0 )
char_mat(9,11)=( 0.d0,-1.0d0)
char_mat(9,12)=( 0.d0, 1.0d0)
char_mat(9,13)=(-1.0d0, 0.d0)
char_mat(9,15)=( 0.d0,-1.0d0)
char_mat(9,16)=( 0.d0, 1.0d0)
char_mat(9,18)=(-1.0d0, 0.d0)
char_mat(9,19)=( 0.d0, 1.0d0)
char_mat(9,20)=( 0.d0,-1.0d0)
! char_mat(9,21)=(-1.0d0, 0.d0)
! char_mat(9,23)=( 0.d0,-1.0d0)
! char_mat(9,24)=( 0.d0, 1.0d0)
char_mat(9,22)=(-1.0d0, 0.d0)
char_mat(9,23)=( 0.d0, 1.0d0)
char_mat(9,24)=( 0.d0,-1.0d0)
name_rap(10)="G_12-"
char_mat(10,3) =( 0.d0,-1.0d0)
char_mat(10,4) =( 0.d0, 1.0d0)
char_mat(10,5) =(-1.d0, 0.d0 )
char_mat(10,7) =( 0.d0, 1.0d0)
char_mat(10,8) =( 0.d0,-1.0d0)
! char_mat(10,10)=(-1.d0, 0.d0 )
! char_mat(10,11)=( 0.d0,-1.0d0)
! char_mat(10,12)=( 0.d0, 1.0d0)
char_mat(10,9)=(-1.d0, 0.d0 )
char_mat(10,11)=( 0.d0, 1.0d0)
char_mat(10,12)=( 0.d0,-1.0d0)
char_mat(10,13)=(-1.0d0, 0.d0)
char_mat(10,15)=( 0.d0, 1.0d0)
char_mat(10,16)=( 0.d0,-1.0d0)
char_mat(10,18)=(-1.0d0, 0.d0)
char_mat(10,19)=( 0.d0,-1.0d0)
char_mat(10,20)=( 0.d0, 1.0d0)
! char_mat(10,21)=(-1.0d0, 0.d0)
! char_mat(10,23)=( 0.d0, 1.0d0)
! char_mat(10,24)=( 0.d0,-1.0d0)
char_mat(10,22)=(-1.0d0, 0.d0)
char_mat(10,23)=( 0.d0,-1.0d0)
char_mat(10,24)=( 0.d0, 1.0d0)
name_rap(11)="G_9- "
char_mat(11,3)=CMPLX(-sqr3d2,-0.5d0)
char_mat(11,4)=CMPLX( sqr3d2, 0.5d0)
char_mat(11,5)=CMPLX( 0.5d0, sqr3d2)
char_mat(11,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(11,7)=( 0.d0,-1.0d0)
char_mat(11,8)=( 0.d0, 1.0d0)
! char_mat(11,9)=CMPLX(-0.5d0, sqr3d2)
! char_mat(11,10)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(11,11)=CMPLX( sqr3d2,-0.5d0)
! char_mat(11,12)=CMPLX(-sqr3d2, 0.5d0)
char_mat(11,9)=CMPLX( 0.5d0,-sqr3d2)
char_mat(11,10)=CMPLX(-0.5d0, sqr3d2)
char_mat(11,11)=CMPLX(-sqr3d2, 0.5d0)
char_mat(11,12)=CMPLX( sqr3d2,-0.5d0)
char_mat(11,13)=(-1.0d0, 0.d0)
char_mat(11,15)=CMPLX( sqr3d2, 0.5d0)
char_mat(11,16)=CMPLX(-sqr3d2,-0.5d0)
char_mat(11,17)=CMPLX(-0.5d0,-sqr3d2)
char_mat(11,18)=CMPLX( 0.5d0, sqr3d2)
char_mat(11,19)=( 0.d0, 1.0d0)
char_mat(11,20)=( 0.d0,-1.0d0)
! char_mat(11,21)=CMPLX( 0.5d0,-sqr3d2)
! char_mat(11,22)=CMPLX(-0.5d0, sqr3d2)
! char_mat(11,23)=CMPLX(-sqr3d2, 0.5d0)
! char_mat(11,24)=CMPLX( sqr3d2,-0.5d0)
char_mat(11,21)=CMPLX(-0.5d0, sqr3d2)
char_mat(11,22)=CMPLX( 0.5d0,-sqr3d2)
char_mat(11,23)=CMPLX( sqr3d2,-0.5d0)
char_mat(11,24)=CMPLX(-sqr3d2, 0.5d0)
name_rap(12)="G_10- "
char_mat(12,3)=CMPLX(-sqr3d2, 0.5d0)
char_mat(12,4)=CMPLX( sqr3d2,-0.5d0)
char_mat(12,5)=CMPLX( 0.5d0,-sqr3d2)
char_mat(12,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(12,7)=( 0.d0, 1.0d0)
char_mat(12,8)=( 0.d0,-1.0d0)
! char_mat(12,9)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(12,10)=CMPLX( 0.5d0, sqr3d2)
! char_mat(12,11)=CMPLX( sqr3d2, 0.5d0)
! char_mat(12,12)=CMPLX(-sqr3d2,-0.5d0)
char_mat(12,9)=CMPLX( 0.5d0, sqr3d2)
char_mat(12,10)=CMPLX(-0.5d0,-sqr3d2)
char_mat(12,11)=CMPLX(-sqr3d2,-0.5d0)
char_mat(12,12)=CMPLX( sqr3d2, 0.5d0)
char_mat(12,13)=(-1.0d0, 0.d0)
char_mat(12,15)=CMPLX( sqr3d2,-0.5d0)
char_mat(12,16)=CMPLX(-sqr3d2, 0.5d0)
char_mat(12,17)=CMPLX(-0.5d0, sqr3d2)
char_mat(12,18)=CMPLX( 0.5d0,-sqr3d2)
char_mat(12,19)=( 0.d0,-1.0d0)
char_mat(12,20)=( 0.d0, 1.0d0)
! char_mat(12,21)=CMPLX( 0.5d0, sqr3d2)
! char_mat(12,22)=CMPLX(-0.5d0,-sqr3d2)
! char_mat(12,23)=CMPLX(-sqr3d2,-0.5d0)
! char_mat(12,24)=CMPLX( sqr3d2, 0.5d0)
char_mat(12,21)=CMPLX(-0.5d0,-sqr3d2)
char_mat(12,22)=CMPLX( 0.5d0, sqr3d2)
char_mat(12,23)=CMPLX( sqr3d2, 0.5d0)
char_mat(12,24)=CMPLX(-sqr3d2,-0.5d0)
ELSEIF (code_group==20) THEN
!
! D_2h
!
nclass_ref=10
name_class(3)=" C2 "
name_class1(3)="-C2 "
name_class(4)=" C2' "
name_class1(4)="-C2'"
name_class(5)="C2'' "
name_class1(5)="-C2''"
name_class(6)="i "
name_class(7)="-i "
name_class(8)=" s_v"
name_class1(8)="-s_v"
name_class(9)=" s_v'"
name_class1(9)="-s_v'"
name_class(10)="s_v''"
name_class1(10)="-s_v''"
nrap_ref=2
name_rap(1)="G_5+ "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,4)=( 0.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 2.d0, 0.d0)
char_mat(1,7)=(-2.d0, 0.d0)
char_mat(1,8)=( 0.d0, 0.d0)
char_mat(1,9)=( 0.d0, 0.d0)
char_mat(1,10)=( 0.d0, 0.d0)
name_rap(2)="G_5- "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,4)=( 0.d0, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=(-2.d0, 0.d0)
char_mat(2,7)=( 2.d0, 0.d0)
char_mat(2,8)=( 0.d0, 0.d0)
char_mat(2,9)=( 0.d0, 0.d0)
char_mat(2,10)=( 0.d0, 0.d0)
ELSEIF (code_group==21) THEN
!
! D_3h
!
nclass_ref=9
name_class(3)="2C3 "
name_class(4)="-2C3"
name_class(5)=" 3C2'"
name_class1(5)="-3C2'"
name_class(6)=" s_h"
name_class1(6)="-s_h'"
name_class(7)="2S3 "
name_class(8)="-2S3"
name_class(9)=" 3s_v"
name_class1(9)="-3s_v"
nrap_ref=3
name_rap(1)="G_7 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=CMPLX( sqrt3, 0.d0)
char_mat(1,8)=CMPLX(-sqrt3, 0.d0)
char_mat(1,9)=( 0.d0, 0.d0)
name_rap(2)="G_8 "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,4)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=CMPLX(-sqrt3, 0.d0)
char_mat(2,8)=CMPLX( sqrt3, 0.d0)
char_mat(2,9)=( 0.d0, 0.d0)
name_rap(3)="G_9 "
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=(-2.d0, 0.d0)
char_mat(3,4)=( 2.d0, 0.d0)
char_mat(3,5)=( 0.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
char_mat(3,9)=( 0.d0, 0.d0)
ELSEIF (code_group==22) THEN
!
! D_4h
!
nclass_ref=14
name_class(3)="2C4 "
name_class(4)="-2C4"
name_class(5)=" C2 "
name_class1(5)="-C2 "
name_class(6)=" 2C2'"
name_class1(6)="-2C2' "
name_class(7)="2C2''"
name_class1(7)="-2C2''"
name_class(8)="i "
name_class(9)="-i "
name_class(10)="2S4 "
name_class(11)="-2S4"
name_class(12)=" s_h"
name_class1(12)="-s_h"
name_class(13)=" 2s_v"
name_class1(13)="-2s_v"
name_class(14)=" 2s_d"
name_class1(14)="-2s_d"
nrap_ref=4
name_rap(1)="G_6+ M_6+"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=CMPLX( sqrt2, 0.d0)
char_mat(1,4)=CMPLX(-sqrt2, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=( 0.d0, 0.d0)
char_mat(1,8)=( 2.d0, 0.d0)
char_mat(1,9)=(-2.d0, 0.d0)
char_mat(1,10)=CMPLX( sqrt2, 0.d0)
char_mat(1,11)=CMPLX(-sqrt2, 0.d0)
char_mat(1,12)=( 0.d0, 0.d0)
char_mat(1,13)=( 0.d0, 0.d0)
char_mat(1,14)=( 0.d0, 0.d0)
name_rap(2)="G_7+ M_7+"
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=CMPLX(-sqrt2, 0.d0)
char_mat(2,4)=CMPLX( sqrt2, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=( 0.d0, 0.d0)
char_mat(2,8)=( 2.d0, 0.d0)
char_mat(2,9)=(-2.d0, 0.d0)
char_mat(2,10)=CMPLX(-sqrt2, 0.d0)
char_mat(2,11)=CMPLX( sqrt2, 0.d0)
char_mat(2,12)=( 0.d0, 0.d0)
char_mat(2,13)=( 0.d0, 0.d0)
char_mat(2,14)=( 0.d0, 0.d0)
name_rap(3)="G_6- M_6- "
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=CMPLX( sqrt2, 0.d0)
char_mat(3,4)=CMPLX(-sqrt2, 0.d0)
char_mat(3,5)=( 0.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=(-2.d0, 0.d0)
char_mat(3,9)=( 2.d0, 0.d0)
char_mat(3,10)=CMPLX(-sqrt2, 0.d0)
char_mat(3,11)=CMPLX( sqrt2, 0.d0)
char_mat(3,12)=( 0.d0, 0.d0)
char_mat(3,13)=( 0.d0, 0.d0)
char_mat(3,14)=( 0.d0, 0.d0)
name_rap(4)="G_7- M_7- "
char_mat(4,1)=( 2.d0, 0.d0)
char_mat(4,2)=(-2.d0, 0.d0)
char_mat(4,3)=CMPLX(-sqrt2, 0.d0)
char_mat(4,4)=CMPLX( sqrt2, 0.d0)
char_mat(4,5)=( 0.d0, 0.d0)
char_mat(4,6)=( 0.d0, 0.d0)
char_mat(4,7)=( 0.d0, 0.d0)
char_mat(4,8)=(-2.d0, 0.d0)
char_mat(4,9)=( 2.d0, 0.d0)
char_mat(4,10)=CMPLX( sqrt2, 0.d0)
char_mat(4,11)=CMPLX(-sqrt2, 0.d0)
char_mat(4,12)=( 0.d0, 0.d0)
char_mat(4,13)=( 0.d0, 0.d0)
char_mat(4,14)=( 0.d0, 0.d0)
ELSEIF (code_group==23) THEN
!
! D_6h
!
nclass_ref=18
name_class(3)="C2 "
name_class1(3)="-C2 "
name_class(4)="2C3 "
name_class(5)="-2C3 "
name_class(6)="2C6 "
name_class(7)="-2C6 "
name_class(8)=" 3C2'"
name_class1(8)="-3C2'"
name_class(9)="3C2''"
name_class1(9)="-3C2''"
name_class(10)=" i "
name_class(11)="-i "
name_class(12)=" s_h"
name_class1(12)="-s_h"
name_class(13)="2S6"
name_class(14)="-2S6"
name_class(15)="2S3"
name_class(16)="-2S3"
name_class(17)=" 3s_v"
name_class1(17)="-3s_v"
name_class(18)=" 3s_d"
name_class1(18)="-3s_d"
nrap_ref=6
name_rap(1)="G_7+ "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,4)=( 1.d0, 0.d0)
char_mat(1,5)=(-1.d0, 0.d0)
char_mat(1,6)=CMPLX( sqrt3, 0.d0)
char_mat(1,7)=CMPLX(-sqrt3, 0.d0)
char_mat(1,8)=( 0.d0, 0.d0)
char_mat(1,9)=( 0.d0, 0.d0)
char_mat(1,10)=( 2.d0, 0.d0)
char_mat(1,11)=(-2.d0, 0.d0)
char_mat(1,12)=( 0.d0, 0.d0)
char_mat(1,13)=( 1.d0, 0.d0)
char_mat(1,14)=(-1.d0, 0.d0)
char_mat(1,15)=CMPLX( sqrt3, 0.d0)
char_mat(1,16)=CMPLX(-sqrt3, 0.d0)
char_mat(1,17)=( 0.d0, 0.d0)
char_mat(1,18)=( 0.d0, 0.d0)
name_rap(2)="G_8+ "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,4)=( 1.d0, 0.d0)
char_mat(2,5)=(-1.d0, 0.d0)
char_mat(2,6)=CMPLX(-sqrt3, 0.d0)
char_mat(2,7)=CMPLX( sqrt3, 0.d0)
char_mat(2,8)=( 0.d0, 0.d0)
char_mat(2,9)=( 0.d0, 0.d0)
char_mat(2,10)=( 2.d0, 0.d0)
char_mat(2,11)=(-2.d0, 0.d0)
char_mat(2,12)=( 0.d0, 0.d0)
char_mat(2,13)=( 1.d0, 0.d0)
char_mat(2,14)=(-1.d0, 0.d0)
char_mat(2,15)=CMPLX(-sqrt3, 0.d0)
char_mat(2,16)=CMPLX( sqrt3, 0.d0)
char_mat(2,17)=( 0.d0, 0.d0)
char_mat(2,18)=( 0.d0, 0.d0)
name_rap(3)="G_9+ "
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=( 0.d0, 0.d0)
char_mat(3,4)=(-2.d0, 0.d0)
char_mat(3,5)=( 2.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
char_mat(3,9)=( 0.d0, 0.d0)
char_mat(3,10)=( 2.d0, 0.d0)
char_mat(3,11)=(-2.d0, 0.d0)
char_mat(3,12)=( 0.d0, 0.d0)
char_mat(3,13)=(-2.d0, 0.d0)
char_mat(3,14)=( 2.d0, 0.d0)
char_mat(3,15)=( 0.d0, 0.d0)
char_mat(3,16)=( 0.d0, 0.d0)
char_mat(3,17)=( 0.d0, 0.d0)
char_mat(3,18)=( 0.d0, 0.d0)
name_rap(4)="G_7- "
char_mat(4,1)=( 2.d0, 0.d0)
char_mat(4,2)=(-2.d0, 0.d0)
char_mat(4,3)=( 0.d0, 0.d0)
char_mat(4,4)=( 1.d0, 0.d0)
char_mat(4,5)=(-1.d0, 0.d0)
char_mat(4,6)=CMPLX( sqrt3, 0.d0)
char_mat(4,7)=CMPLX(-sqrt3, 0.d0)
char_mat(4,8)=( 0.d0, 0.d0)
char_mat(4,9)=( 0.d0, 0.d0)
char_mat(4,10)=(-2.d0, 0.d0)
char_mat(4,11)=( 2.d0, 0.d0)
char_mat(4,12)=( 0.d0, 0.d0)
char_mat(4,13)=(-1.d0, 0.d0)
char_mat(4,14)=( 1.d0, 0.d0)
char_mat(4,15)=CMPLX(-sqrt3, 0.d0)
char_mat(4,16)=CMPLX( sqrt3, 0.d0)
char_mat(4,17)=( 0.d0, 0.d0)
char_mat(4,18)=( 0.d0, 0.d0)
name_rap(5)="G_8- "
char_mat(5,1)=( 2.d0, 0.d0)
char_mat(5,2)=(-2.d0, 0.d0)
char_mat(5,3)=( 0.d0, 0.d0)
char_mat(5,4)=( 1.d0, 0.d0)
char_mat(5,5)=(-1.d0, 0.d0)
char_mat(5,6)=CMPLX(-sqrt3, 0.d0)
char_mat(5,7)=CMPLX( sqrt3, 0.d0)
char_mat(5,8)=( 0.d0, 0.d0)
char_mat(5,9)=( 0.d0, 0.d0)
char_mat(5,10)=(-2.d0, 0.d0)
char_mat(5,11)=( 2.d0, 0.d0)
char_mat(5,12)=( 0.d0, 0.d0)
char_mat(5,13)=(-1.d0, 0.d0)
char_mat(5,14)=( 1.d0, 0.d0)
char_mat(5,15)=CMPLX( sqrt3, 0.d0)
char_mat(5,16)=CMPLX(-sqrt3, 0.d0)
char_mat(5,17)=( 0.d0, 0.d0)
char_mat(5,18)=( 0.d0, 0.d0)
name_rap(6)="G_9- "
char_mat(6,1)=( 2.d0, 0.d0)
char_mat(6,2)=(-2.d0, 0.d0)
char_mat(6,3)=( 0.d0, 0.d0)
char_mat(6,4)=(-2.d0, 0.d0)
char_mat(6,5)=( 2.d0, 0.d0)
char_mat(6,6)=( 0.d0, 0.d0)
char_mat(6,7)=( 0.d0, 0.d0)
char_mat(6,8)=( 0.d0, 0.d0)
char_mat(6,9)=( 0.d0, 0.d0)
char_mat(6,10)=(-2.d0, 0.d0)
char_mat(6,11)=( 2.d0, 0.d0)
char_mat(6,12)=( 0.d0, 0.d0)
char_mat(6,13)=( 2.d0, 0.d0)
char_mat(6,14)=(-2.d0, 0.d0)
char_mat(6,15)=( 0.d0, 0.d0)
char_mat(6,16)=( 0.d0, 0.d0)
char_mat(6,17)=( 0.d0, 0.d0)
char_mat(6,18)=( 0.d0, 0.d0)
ELSEIF (code_group==24) THEN
!
! D_2d
!
nclass_ref=7
name_class(3)="C2 "
name_class1(3)="-C2 "
name_class(4)="2S4 "
name_class(5)="-2S4"
name_class(6)="2C2' "
name_class1(6)="-2C2'"
name_class(7)="2s_d "
name_class1(7)="-2s_d"
nrap_ref=2
name_rap(1)="G_6 X_6 W_6"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,4)=CMPLX( sqrt2, 0.d0)
char_mat(1,5)=CMPLX(-sqrt2, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=( 0.d0, 0.d0)
name_rap(2)="G_7 X_7 W_7"
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,4)=CMPLX(-sqrt2, 0.d0)
char_mat(2,5)=CMPLX( sqrt2, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=( 0.d0, 0.d0)
ELSEIF (code_group==25) THEN
!
! D_3d
!
nclass_ref=12
name_class(3)="2C3 "
name_class(4)="-2C3"
name_class(5)="3s_v "
name_class(6)="-3s_v"
name_class(7)="i "
name_class(8)="-i "
name_class(9)="2S6 "
name_class(10)="-2S6"
name_class(11)="3C2'"
name_class(12)="-3C2'"
nrap_ref=6
name_rap(1)="G_4+ L_6+"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=( 2.d0, 0.d0)
char_mat(1,8)=(-2.d0, 0.d0)
char_mat(1,10)=(-1.d0, 0.d0)
char_mat(1,11)=( 0.d0, 0.d0)
char_mat(1,12)=( 0.d0, 0.d0)
name_rap(2)="G_5+ L_4+"
char_mat(2,2)=(-1.d0, 0.d0)
char_mat(2,3)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 1.d0)
char_mat(2,6)=( 0.d0,-1.d0)
char_mat(2,8)=(-1.d0, 0.d0)
char_mat(2,9)=(-1.d0, 0.d0)
char_mat(2,11)=( 0.d0, 1.d0)
char_mat(2,12)=( 0.d0,-1.d0)
name_rap(3)="G_6+ L_5+"
char_mat(3,2)=(-1.d0, 0.d0)
char_mat(3,3)=(-1.d0, 0.d0)
char_mat(3,5)=( 0.d0,-1.d0)
char_mat(3,6)=( 0.d0, 1.d0)
char_mat(3,8)=(-1.d0, 0.d0)
char_mat(3,9)=(-1.d0, 0.d0)
char_mat(3,11)=( 0.d0,-1.d0)
char_mat(3,12)=( 0.d0, 1.d0)
name_rap(4)="G_4- L_6-"
char_mat(4,1)=( 2.d0, 0.d0)
char_mat(4,2)=(-2.d0, 0.d0)
char_mat(4,4)=(-1.d0, 0.d0)
char_mat(4,5)=( 0.d0, 0.d0)
char_mat(4,6)=( 0.d0, 0.d0)
char_mat(4,7)=(-2.d0, 0.d0)
char_mat(4,8)=( 2.d0, 0.d0)
char_mat(4,9)=(-1.d0, 0.d0)
char_mat(4,11)=( 0.d0, 0.d0)
char_mat(4,12)=( 0.d0, 0.d0)
name_rap(5)="G_5- L_4-"
char_mat(5,2)=(-1.d0, 0.d0)
char_mat(5,3)=(-1.d0, 0.d0)
char_mat(5,5)=( 0.d0, 1.d0)
char_mat(5,6)=( 0.d0,-1.d0)
char_mat(5,7)=(-1.d0, 0.d0)
char_mat(5,10)=(-1.d0, 0.d0)
char_mat(5,11)=( 0.d0,-1.d0)
char_mat(5,12)=( 0.d0, 1.d0)
name_rap(6)="G_6- L_5-"
char_mat(6,2)=(-1.d0, 0.d0)
char_mat(6,3)=(-1.d0, 0.d0)
char_mat(6,5)=( 0.d0,-1.d0)
char_mat(6,6)=( 0.d0, 1.d0)
char_mat(6,7)=(-1.d0, 0.d0)
char_mat(6,10)=(-1.d0, 0.d0)
char_mat(6,11)=( 0.d0, 1.d0)
char_mat(6,12)=( 0.d0,-1.d0)
ELSEIF (code_group==26) THEN
!
! S_4
!
nclass_ref=8
name_class(3)=" S4 "
name_class(4)="-S4 "
name_class(5)=" C2 "
name_class(6)="-C2 "
name_class(7)=" S4^3"
name_class(8)="-S4^3"
nrap_ref=4
name_rap(1)="G_1 "
char_mat(1,3)=CMPLX( dsq2, dsq2)
char_mat(1,4)=CMPLX(-dsq2,-dsq2)
char_mat(1,5)=( 0.d0,-1.d0)
char_mat(1,6)=( 0.d0, 1.d0)
char_mat(1,7)=CMPLX(-dsq2, dsq2)
char_mat(1,8)=CMPLX( dsq2,-dsq2)
name_rap(2)="G_2 "
char_mat(2,3)=CMPLX( dsq2,-dsq2)
char_mat(2,4)=CMPLX(-dsq2, dsq2)
char_mat(2,5)=( 0.d0, 1.d0)
char_mat(2,6)=( 0.d0,-1.d0)
char_mat(2,7)=CMPLX(-dsq2,-dsq2)
char_mat(2,8)=CMPLX( dsq2, dsq2)
name_rap(3)="G_3 "
char_mat(3,3)=CMPLX(-dsq2,-dsq2)
char_mat(3,4)=CMPLX( dsq2, dsq2)
char_mat(3,5)=( 0.d0,-1.d0)
char_mat(3,6)=( 0.d0, 1.d0)
char_mat(3,7)=CMPLX( dsq2,-dsq2)
char_mat(3,8)=CMPLX(-dsq2, dsq2)
name_rap(4)="G_4 "
char_mat(4,3)=CMPLX(-dsq2, dsq2)
char_mat(4,4)=CMPLX( dsq2,-dsq2)
char_mat(4,5)=( 0.d0, 1.d0)
char_mat(4,6)=( 0.d0,-1.d0)
char_mat(4,7)=CMPLX( dsq2, dsq2)
char_mat(4,8)=CMPLX(-dsq2,-dsq2)
ELSEIF (code_group==27) THEN
!
! S_6
!
nclass_ref=12
name_class(3)="C3 "
name_class(4)="-C3 "
name_class(5)="C3^2"
name_class(6)="-C3^2"
name_class(7)=" i "
name_class(8)="-i "
name_class(9)="S6^5"
name_class(10)="-S6^5"
name_class(11)="S6"
name_class(12)="-S6"
nrap_ref=6
name_rap(1)="G_4+"
char_mat(1,3)=CMPLX( 0.5d0, sqr3d2 )
char_mat(1,4)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(1,5)=CMPLX(-0.5d0, sqr3d2 )
char_mat(1,6)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(1,8)=(-1.0d0, 0.d0 )
char_mat(1,9)=CMPLX( 0.5d0, sqr3d2 )
char_mat(1,10)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(1,11)=CMPLX(-0.5d0, sqr3d2 )
char_mat(1,12)=CMPLX( 0.5d0,-sqr3d2 )
name_rap(2)="G_5+"
char_mat(2,3)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(2,4)=CMPLX(-0.5d0, sqr3d2 )
char_mat(2,5)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(2,6)=CMPLX( 0.5d0, sqr3d2 )
char_mat(2,8)=(-1.0d0, 0.d0 )
char_mat(2,9)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(2,10)=CMPLX(-0.5d0, sqr3d2 )
char_mat(2,11)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(2,12)=CMPLX( 0.5d0, sqr3d2 )
name_rap(3)="G_6+"
char_mat(3,3)=(-1.0d0, 0.d0 )
char_mat(3,6)=(-1.0d0, 0.d0 )
char_mat(3,8)=(-1.0d0, 0.d0 )
char_mat(3,9)=(-1.0d0, 0.d0 )
char_mat(3,12)=(-1.0d0, 0.d0 )
name_rap(4)="G_4-"
char_mat(4,3)=CMPLX( 0.5d0, sqr3d2 )
char_mat(4,4)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(4,5)=CMPLX(-0.5d0, sqr3d2 )
char_mat(4,6)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(4,7)=(-1.0d0, 0.d0 )
char_mat(4,9)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(4,10)=CMPLX( 0.5d0, sqr3d2 )
char_mat(4,11)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(4,12)=CMPLX(-0.5d0, sqr3d2 )
name_rap(5)="G_5-"
char_mat(5,3)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(5,4)=CMPLX(-0.5d0, sqr3d2 )
char_mat(5,5)=CMPLX(-0.5d0,-sqr3d2 )
char_mat(5,6)=CMPLX( 0.5d0, sqr3d2 )
char_mat(5,7)=(-1.0d0, 0.d0 )
char_mat(5,9)=CMPLX(-0.5d0, sqr3d2 )
char_mat(5,10)=CMPLX( 0.5d0,-sqr3d2 )
char_mat(5,11)=CMPLX( 0.5d0, sqr3d2 )
char_mat(5,12)=CMPLX(-0.5d0,-sqr3d2 )
name_rap(6)="G_6-"
char_mat(6,3)=(-1.0d0, 0.d0 )
char_mat(6,6)=(-1.0d0, 0.d0 )
char_mat(6,7)=(-1.0d0, 0.d0 )
char_mat(6,10)=(-1.0d0, 0.d0 )
char_mat(6,11)=(-1.0d0, 0.d0 )
ELSEIF (code_group==28) THEN
!
! T
!
nclass_ref=7
name_class(3)="3C2 "
name_class1(3)="-3C2 "
name_class(4)=" 4C3 "
name_class(5)="-4C3 "
name_class(6)=" 4C3'"
name_class(7)="-4C3'"
nrap_ref=3
name_rap(1)="G_5 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,5)=(-1.d0, 0.d0)
char_mat(1,7)=(-1.d0, 0.d0)
name_rap(2)="G_6 "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,4)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,7)=CMPLX( 0.5d0,-sqr3d2)
name_rap(3)="G_7 "
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=( 0.d0, 0.d0)
char_mat(3,4)=CMPLX( 0.5d0,-sqr3d2)
char_mat(3,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(3,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(3,7)=CMPLX( 0.5d0, sqr3d2)
ELSEIF (code_group==29) THEN
!
! T_h
!
nclass_ref=14
name_class(3)=" 3C2 "
name_class1(3)="-3C2 "
name_class(4)=" 4C3 "
name_class(5)="-4C3 "
name_class(6)=" 4C3'"
name_class(7)="-4C3'"
name_class(8)="i "
name_class(9)="-i "
name_class(10)=" 3s_h"
name_class1(10)="-3s_h"
name_class(11)="4S6 "
name_class(12)="-4S6 "
name_class(13)=" 4S6'"
name_class(14)="-4S6'"
nrap_ref=6
name_rap(1)="G_5+"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,3)=( 0.d0, 0.d0)
char_mat(1,5)=(-1.d0, 0.d0)
char_mat(1,7)=(-1.d0, 0.d0)
char_mat(1,8)=( 2.d0, 0.d0)
char_mat(1,9)=(-2.d0, 0.d0)
char_mat(1,10)=( 0.d0, 0.d0)
char_mat(1,12)=(-1.d0, 0.d0)
char_mat(1,14)=(-1.d0, 0.d0)
name_rap(2)="G_6+"
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,3)=( 0.d0, 0.d0)
char_mat(2,4)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,7)=CMPLX( 0.5d0,-sqr3d2)
char_mat(2,8)=( 2.d0, 0.d0)
char_mat(2,9)=(-2.d0, 0.d0)
char_mat(2,10)=( 0.d0, 0.d0)
char_mat(2,11)=CMPLX( 0.5d0, sqr3d2)
char_mat(2,12)=CMPLX(-0.5d0,-sqr3d2)
char_mat(2,13)=CMPLX(-0.5d0, sqr3d2)
char_mat(2,14)=CMPLX( 0.5d0,-sqr3d2)
name_rap(3)="G_7+"
char_mat(3,1)=( 2.d0, 0.d0)
char_mat(3,2)=(-2.d0, 0.d0)
char_mat(3,3)=( 0.d0, 0.d0)
char_mat(3,4)=CMPLX( 0.5d0,-sqr3d2)
char_mat(3,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(3,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(3,7)=CMPLX( 0.5d0, sqr3d2)
char_mat(3,8)=( 2.d0, 0.d0)
char_mat(3,9)=(-2.d0, 0.d0)
char_mat(3,10)=( 0.d0, 0.d0)
char_mat(3,11)=CMPLX( 0.5d0,-sqr3d2)
char_mat(3,12)=CMPLX(-0.5d0, sqr3d2)
char_mat(3,13)=CMPLX(-0.5d0,-sqr3d2)
char_mat(3,14)=CMPLX( 0.5d0, sqr3d2)
name_rap(4)="G_5-"
char_mat(4,1)=( 2.d0, 0.d0)
char_mat(4,2)=(-2.d0, 0.d0)
char_mat(4,3)=( 0.d0, 0.d0)
char_mat(4,5)=(-1.d0, 0.d0)
char_mat(4,7)=(-1.d0, 0.d0)
char_mat(4,8)=(-2.d0, 0.d0)
char_mat(4,9)=( 2.d0, 0.d0)
char_mat(4,10)=( 0.d0, 0.d0)
char_mat(4,11)=(-1.d0, 0.d0)
char_mat(4,13)=(-1.d0, 0.d0)
name_rap(5)="G_6-"
char_mat(5,1)=( 2.d0, 0.d0)
char_mat(5,2)=(-2.d0, 0.d0)
char_mat(5,3)=( 0.d0, 0.d0)
char_mat(5,4)=CMPLX( 0.5d0, sqr3d2)
char_mat(5,5)=CMPLX(-0.5d0,-sqr3d2)
char_mat(5,6)=CMPLX(-0.5d0, sqr3d2)
char_mat(5,7)=CMPLX( 0.5d0,-sqr3d2)
char_mat(5,8)=(-2.d0, 0.d0)
char_mat(5,9)=( 2.d0, 0.d0)
char_mat(5,10)=( 0.d0, 0.d0)
char_mat(5,11)=CMPLX(-0.5d0,-sqr3d2)
char_mat(5,12)=CMPLX( 0.5d0, sqr3d2)
char_mat(5,13)=CMPLX( 0.5d0,-sqr3d2)
char_mat(5,14)=CMPLX(-0.5d0, sqr3d2)
name_rap(6)="G_7-"
char_mat(6,1)=( 2.d0, 0.d0)
char_mat(6,2)=(-2.d0, 0.d0)
char_mat(6,3)=( 0.d0, 0.d0)
char_mat(6,4)=CMPLX( 0.5d0,-sqr3d2)
char_mat(6,5)=CMPLX(-0.5d0, sqr3d2)
char_mat(6,6)=CMPLX(-0.5d0,-sqr3d2)
char_mat(6,7)=CMPLX( 0.5d0, sqr3d2)
char_mat(6,8)=(-2.d0, 0.d0)
char_mat(6,9)=( 2.d0, 0.d0)
char_mat(6,10)=( 0.d0, 0.d0)
char_mat(6,11)=CMPLX(-0.5d0, sqr3d2)
char_mat(6,12)=CMPLX( 0.5d0,-sqr3d2)
char_mat(6,13)=CMPLX( 0.5d0, sqr3d2)
char_mat(6,14)=CMPLX(-0.5d0,-sqr3d2)
ELSEIF (code_group==30) THEN
!
! T_d
!
nclass_ref=8
name_class(3)="8C3 "
name_class(4)="-8C3 "
name_class(5)=" 3C2 "
name_class1(5)="-3C2 "
name_class(6)="6s_d"
name_class1(6)="-6s_d"
name_class(7)="6S4 "
name_class(8)="-6S4 "
nrap_ref=3
name_rap(1)="G_6 P_6"
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=CMPLX( sqrt2, 0.d0)
char_mat(1,8)=CMPLX(-sqrt2, 0.d0)
name_rap(2)="G_7 P_7"
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,4)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=CMPLX(-sqrt2, 0.d0)
char_mat(2,8)=CMPLX( sqrt2, 0.d0)
name_rap(3)="G_8 P_8"
char_mat(3,1)=( 4.d0, 0.d0)
char_mat(3,2)=(-4.d0, 0.d0)
char_mat(3,3)=(-1.d0, 0.d0)
char_mat(3,5)=( 0.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
ELSEIF (code_group==31) THEN
!
! O
!
nclass_ref=8
name_class(3)="8C3 "
name_class(4)="-8C3 "
name_class(5)=" 3C2"
name_class1(5)="-3C2"
name_class(6)=" 6C2'"
name_class1(6)="-6C2'"
name_class(7)="6C4 "
name_class(8)="-6C4 "
nrap_ref=3
name_rap(1)="G_6 "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=( -2.d0, 0.d0)
char_mat(1,4)=( -1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=( 0.d0, 0.d0)
char_mat(1,7)=CMPLX( sqrt2, 0.d0)
char_mat(1,8)=CMPLX(-sqrt2, 0.d0)
name_rap(2)="G_7 "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=( -2.d0, 0.d0)
char_mat(2,4)=( -1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=( 0.d0, 0.d0)
char_mat(2,7)=CMPLX(-sqrt2, 0.d0)
char_mat(2,8)=CMPLX( sqrt2, 0.d0)
name_rap(3)="G_8 "
char_mat(3,1)=( 4.d0, 0.d0)
char_mat(3,2)=( -4.d0, 0.d0)
char_mat(3,3)=( -1.d0, 0.d0)
char_mat(3,5)=( 0.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
ELSEIF (code_group==32) THEN
!
! O_h
!
nclass_ref=16
name_class(3)="8C3 "
name_class(4)="-8C3 "
name_class(5)=" 3C2"
name_class1(5)="-3C2"
name_class(6)="6C4 "
name_class(7)="-6C4 "
name_class(8)=" 6C2'"
name_class1(8)="-6C2'"
name_class(9)="i "
name_class(10)="-i "
name_class(11)="8S6 "
name_class(12)="-8S6 "
name_class(13)=" 3s_h"
name_class1(13)="-3s_h"
name_class(14)="6S4 "
name_class(15)="-6S4 "
name_class(16)=" 6s_d"
name_class1(16)="-6s_d"
nrap_ref=6
name_rap(1)="G_6+ "
char_mat(1,1)=( 2.d0, 0.d0)
char_mat(1,2)=(-2.d0, 0.d0)
char_mat(1,4)=(-1.d0, 0.d0)
char_mat(1,5)=( 0.d0, 0.d0)
char_mat(1,6)=CMPLX( sqrt2, 0.d0)
char_mat(1,7)=CMPLX(-sqrt2, 0.d0)
char_mat(1,8)=( 0.d0, 0.d0)
char_mat(1,9)=( 2.d0, 0.d0)
char_mat(1,10)=(-2.d0, 0.d0)
char_mat(1,12)=(-1.d0, 0.d0)
char_mat(1,13)=( 0.d0, 0.d0)
char_mat(1,14)=CMPLX( sqrt2, 0.d0)
char_mat(1,15)=CMPLX(-sqrt2, 0.d0)
char_mat(1,16)=( 0.d0, 0.d0)
name_rap(2)="G_7+ "
char_mat(2,1)=( 2.d0, 0.d0)
char_mat(2,2)=(-2.d0, 0.d0)
char_mat(2,4)=(-1.d0, 0.d0)
char_mat(2,5)=( 0.d0, 0.d0)
char_mat(2,6)=CMPLX(-sqrt2, 0.d0)
char_mat(2,7)=CMPLX( sqrt2, 0.d0)
char_mat(2,8)=( 0.d0, 0.d0)
char_mat(2,9)=( 2.d0, 0.d0)
char_mat(2,10)=(-2.d0, 0.d0)
char_mat(2,12)=(-1.d0, 0.d0)
char_mat(2,13)=( 0.d0, 0.d0)
char_mat(2,14)=CMPLX(-sqrt2, 0.d0)
char_mat(2,15)=CMPLX( sqrt2, 0.d0)
char_mat(2,16)=( 0.d0, 0.d0)
name_rap(3)="G_8+ "
char_mat(3,1)=( 4.d0, 0.d0)
char_mat(3,2)=(-4.d0, 0.d0)
char_mat(3,3)=(-1.d0, 0.d0)
char_mat(3,5)=( 0.d0, 0.d0)
char_mat(3,6)=( 0.d0, 0.d0)
char_mat(3,7)=( 0.d0, 0.d0)
char_mat(3,8)=( 0.d0, 0.d0)
char_mat(3,9)=( 4.d0, 0.d0)
char_mat(3,10)=(-4.d0, 0.d0)
char_mat(3,11)=(-1.d0, 0.d0)
char_mat(3,13)=( 0.d0, 0.d0)
char_mat(3,14)=( 0.d0, 0.d0)
char_mat(3,15)=( 0.d0, 0.d0)
char_mat(3,16)=( 0.d0, 0.d0)
name_rap(4)="G_6- "
char_mat(4,1)=( 2.d0, 0.d0)
char_mat(4,2)=(-2.d0, 0.d0)
char_mat(4,4)=(-1.d0, 0.d0)
char_mat(4,5)=( 0.d0, 0.d0)
char_mat(4,6)=CMPLX(sqrt2, 0.d0)
char_mat(4,7)=CMPLX(-sqrt2, 0.d0)
char_mat(4,8)=( 0.d0, 0.d0)
char_mat(4,9)=(-2.d0, 0.d0)
char_mat(4,10)=( 2.d0, 0.d0)
char_mat(4,11)=(-1.d0, 0.d0)
char_mat(4,13)=( 0.d0, 0.d0)
char_mat(4,14)=CMPLX(-sqrt2, 0.d0)
char_mat(4,15)=CMPLX( sqrt2, 0.d0)
char_mat(4,16)=( 0.d0, 0.d0)
name_rap(5)="G_7- "
char_mat(5,1)=( 2.d0, 0.d0)
char_mat(5,2)=(-2.d0, 0.d0)
char_mat(5,4)=(-1.d0, 0.d0)
char_mat(5,5)=( 0.d0, 0.d0)
char_mat(5,6)=CMPLX(-sqrt2, 0.d0)
char_mat(5,7)=CMPLX( sqrt2, 0.d0)
char_mat(5,8)=( 0.d0, 0.d0)
char_mat(5,9)=(-2.d0, 0.d0)
char_mat(5,10)=( 2.d0, 0.d0)
char_mat(5,11)=(-1.d0, 0.d0)
char_mat(5,13)=( 0.d0, 0.d0)
char_mat(5,14)=CMPLX( sqrt2, 0.d0)
char_mat(5,15)=CMPLX(-sqrt2, 0.d0)
char_mat(5,16)=( 0.d0, 0.d0)
name_rap(6)="G_8- "
char_mat(6,1)=( 4.d0, 0.d0)
char_mat(6,2)=(-4.d0, 0.d0)
char_mat(6,3)=(-1.d0, 0.d0)
char_mat(6,5)=( 0.d0, 0.d0)
char_mat(6,6)=( 0.d0, 0.d0)
char_mat(6,7)=( 0.d0, 0.d0)
char_mat(6,8)=( 0.d0, 0.d0)
char_mat(6,9)=(-4.d0, 0.d0)
char_mat(6,10)=( 4.d0, 0.d0)
char_mat(6,12)=(-1.d0, 0.d0)
char_mat(6,13)=( 0.d0, 0.d0)
char_mat(6,14)=( 0.d0, 0.d0)
char_mat(6,15)=( 0.d0, 0.d0)
char_mat(6,16)=( 0.d0, 0.d0)
ELSE
CALL errore('set_irr_rap_so','code number not allowed',1)
END IF
RETURN
END SUBROUTINE set_irr_rap_so
!--------------------------------------------------------------------------
FUNCTION is_complex_so(code)
!--------------------------------------------------------------------------
! This function receives a code of the group and provide .true. or
! .false. if the double group HAS or HAS NOT complex irreducible
! representations.
! The order is the following:
!
! 1 "C_1 " F 11 "D_6 " F 21 "D_3h" F 31 "O " F
! 2 "C_i " F 12 "C_2v" F 22 "D_4h" F 32 "O_h " F
! 3 "C_s " T 13 "C_3v" T 23 "D_6h" F
! 4 "C_2 " T 14 "C_4v" F 24 "D_2d" F
! 5 "C_3 " T 15 "C_6v" F 25 "D_3d" T
! 6 "C_4 " T 16 "C_2h" T 26 "S_4 " T
! 7 "C_6 " T 17 "C_3h" T 27 "S_6 " T
! 8 "D_2 " F 18 "C_4h" T 28 "T " T
! 9 "D_3 " T 19 "C_6h" T 29 "T_h " T
! 10 "D_4 " F 20 "D_2h" F 30 "T_d " F
!
IMPLICIT NONE
INTEGER :: code
LOGICAL :: is_complex_so
LOGICAL :: complex_aux(32)
data complex_aux / .FALSE., .FALSE., .TRUE., .TRUE., .TRUE. , &
.TRUE. , .TRUE. , .FALSE., .TRUE., .FALSE., &
.FALSE., .FALSE., .TRUE., .FALSE., .FALSE., &
.TRUE., .TRUE. , .TRUE., .TRUE., .FALSE., &
.FALSE., .FALSE., .FALSE., .FALSE., .TRUE., &
.TRUE. , .TRUE. , .TRUE. , .TRUE. , .FALSE., &
.FALSE., .FALSE. /
IF (code < 1 .OR. code > 32 ) CALL errore('is_complex', &
'code is out of range',1)
is_complex_so= complex_aux(code)
RETURN
END FUNCTION is_complex_so
!
!----------------------------------------------------------------------------
SUBROUTINE write_group_info(flag)
!----------------------------------------------------------------------------
!
! This routine writes on output the main information on the point group
! If flag is .false. writes only the character table. If flag is .true.
! writes also the elements of each class.
!
!
USE rap_point_group, ONLY : code_group, nclass, nelem, elem, which_irr, &
char_mat, name_rap, name_class, gname
USE rap_point_group_so, ONLY : nrap, nelem_so, elem_so, has_e, &
which_irr_so, char_mat_so, name_rap_so, &
name_class_so, d_spin, name_class_so1
USE rap_point_group_is, ONLY : code_group_is, gname_is
USE spin_orb, ONLY : domag
USE noncollin_module, ONLY : noncolin
USE io_global, ONLY : stdout
IMPLICIT NONE
INTEGER :: iclass, irot, i, idx
LOGICAL :: is_complex, is_complex_so, flag
IF (noncolin) THEN
IF (domag) THEN
WRITE(stdout,'(/,5x,"the magnetic double point group is ", &
& a11," [",a11,"]")') &
gname, gname_is
WRITE(stdout,'(5x,"using the double point group ",a11)') &
gname_is
ELSE
WRITE(stdout,'(/,5x,"double point group ",a11)') gname
END IF
WRITE(stdout,'(5x, "there are", i3," classes and",i3, &
& " irreducible representations")') nclass, nrap
ELSE
WRITE(stdout,'(/,5x,"point group ",a11)') gname
WRITE(stdout,'(5x, "there are", i3," classes")') nclass
ENDIF
WRITE(stdout,'(5x, "the character table:")')
IF (noncolin) THEN
WRITE(stdout,'(/,7x,12(a5,1x))') (name_class_so(irot), &
irot=1,MIN(12,nclass))
WRITE(stdout,'(7x,12(a5,1x))') (name_class_so1(irot), &
irot=1,MIN(12,nclass))
DO iclass=1,nrap
WRITE(stdout,'(a5,12f6.2)') name_rap_so(iclass), &
(REAL(char_mat_so(iclass,irot)), irot=1,MIN(nclass,12))
END DO
IF (nclass > 12 ) THEN
WRITE(stdout,'(/,7x,12(a5,1x))') (name_class_so(irot), &
irot=13,nclass)
WRITE(stdout,'(7x,12(a5,1x))') (name_class_so1(irot), &
irot=13,nclass)
DO iclass=1,nrap
WRITE(stdout,'(a5,12f6.2)') name_rap_so(iclass), &
(REAL(char_mat_so(iclass,irot)), irot=13,nclass)
END DO
END IF
idx=code_group
IF (noncolin.and.domag) idx=code_group_is
IF (is_complex_so(idx)) THEN
WRITE(stdout,'(/,5x,"imaginary part")')
WRITE(stdout,'(/,7x,12(a5,1x))') (name_class_so(irot), &
irot=1,MIN(12,nclass))
WRITE(stdout,'(7x,12(a5,1x))') (name_class_so1(irot), &
irot=1,MIN(12,nclass))
DO iclass=1,nrap
WRITE(stdout,'(a5,12f6.2)') name_rap_so(iclass), &
(AIMAG(char_mat_so(iclass,irot)),irot=1, MIN(nclass,12))
END DO
IF (nclass > 12 ) THEN
WRITE(stdout,'(/,7x,12(a5,1x))') (name_class_so(irot), &
irot=13,nclass)
WRITE(stdout,'(7x,12(a5,1x))') (name_class_so1(irot), &
irot=13,nclass)
DO iclass=1,nrap
WRITE(stdout,'(a5,12f6.2)') name_rap_so(iclass), &
(AIMAG(char_mat_so(iclass,irot)),irot=13, nclass)
END DO
END IF
END IF
IF (flag) THEN
WRITE(stdout,'(/5x, "the symmetry operations in each class:")')
DO iclass=1,nclass
WRITE(stdout,'(5x,2a5,12i5)') &
name_class_so(which_irr_so(iclass)), &
name_class_so1(which_irr_so(iclass)), &
(elem_so(i,iclass)*has_e(i,iclass), i=1,nelem_so(iclass))
ENDDO
ENDIF
ELSE
WRITE(stdout,'(/,7x,12(a5,1x))') (name_class(irot),irot=1,nclass)
DO iclass=1,nclass
WRITE(stdout,'(a5,12f6.2)') name_rap(iclass), &
(REAL(char_mat(iclass,irot)),irot=1,nclass)
ENDDO
idx=code_group
IF (noncolin.and.domag) idx=code_group_is
IF (is_complex(idx)) THEN
WRITE(stdout,'(5x,"imaginary part")')
DO iclass=1,nclass
WRITE(stdout,'(a5,12f6.2)') name_rap(iclass), &
(AIMAG(char_mat(iclass,irot)),irot=1,nclass)
ENDDO
ENDIF
IF (flag) THEN
WRITE(stdout,'(/5x, "the symmetry operations in each class:")')
DO iclass=1,nclass
WRITE(stdout,'(5x,a5,12i5)') name_class(which_irr(iclass)), &
(elem(i,iclass), i=1,nelem(iclass))
ENDDO
END IF
END IF
RETURN
END SUBROUTINE write_group_info
!---------------------------------------------------------------------------
SUBROUTINE find_u(s,u)
!---------------------------------------------------------------------------
!
! This subroutine receives as input a 3x3 rotation matrix s, and gives
! as output the matrix u which represents the same rotation in the spin
! space. Only one of the two u matrices is given. See below for the
! definition of the sign.
!
USE kinds, ONLY : DP
USE constants, ONLY : pi
IMPLICIT NONE
REAL(DP) :: s(3,3)
COMPLEX(DP) :: u(2,2)
REAL(DP), PARAMETER :: eps=1.d-8
REAL(DP) :: det, saux(3,3), ax(3), angle, cosa, sina, angle_rot
!
! For consistency check uncomment here
!
!COMPLEX(DP) :: a, as, b, bs
!REAL(DP) :: r(3,3), r1(3,3), diff
det = s(1,1) * ( s(2,2) * s(3,3) - s(3,2) * s(2,3) )- &
s(1,2) * ( s(2,1) * s(3,3) - s(3,1) * s(2,3) )+ &
s(1,3) * ( s(2,1) * s(3,2) - s(3,1) * s(2,2) )
!
! inversion has no effect in spin space, so improper rotations are
! multiplied by inversion
!
IF (ABS(det+1.d0) < eps) THEN
saux=-s
ELSE
saux=s
ENDIF
!
! Check for identity or inversion
!
IF ((ABS(saux(1,1)-1.d0) < eps).AND. &
(ABS(saux(2,2)-1.d0) < eps).AND. &
(ABS(saux(3,3)-1.d0) < eps).AND. &
(ABS(saux(1,2)) < eps).AND.(ABS(saux(2,1)) < eps) &
.AND.(ABS(saux(2,3)) < eps).AND. &
(ABS(saux(3,2)) < eps).AND.(ABS(saux(1,3)) < eps) &
.AND.(ABS(saux(3,1)) < eps)) THEN
u(1,1)=(1.d0,0.d0)
u(1,2)=(0.d0,0.d0)
u(2,1)=(0.d0,0.d0)
u(2,2)=(1.d0,0.d0)
RETURN
ENDIF
!
! Find the rotation axis and the rotation angle
!
CALL versor(saux,ax)
angle=angle_rot(saux)
!write(6,'(3f12.5,5x,f12.5)') ax(1), ax(2), ax(3), angle
angle=0.5d0*angle*pi/180.d0
cosa=COS(angle)
sina=SIN(angle)
!write(6,'(2f12.5)') cosa, sina
!
! set the spin space rotation matrix elements
!
u(1,1)=CMPLX(cosa,-ax(3)*sina)
u(1,2)=CMPLX(-ax(2)*sina, -ax(1)*sina)
u(2,1)=-CONJG(u(1,2))
u(2,2)=CONJG(u(1,1))
!
! To each 3x3 rotation one can associate two 2x2 rotation matrices in spin
! space. This function returns the U matrix with positive cosa term
!
IF (cosa < -eps ) u=-u
IF (ABS(cosa) < eps) THEN
!
! Special case when cosa=0. For this rotation we must take the negative sign.
!
IF (ax(1)*ax(3) < -eps) u=-u
ENDIF
!
! Here compute the 3x3 rotation matrix starting form the axis, angle
! or from the rotation in spin space for consistency check.
!
!angle=angle*2.d0
!cosa=COS(angle)
!sina=SIN(angle)
!r1(1,1)=1.d0+(1.d0-cosa)*(ax(1)**2-1)
!r1(1,2)=-ax(3)*sina+(1.d0-cosa)*ax(1)*ax(2)
!r1(1,3)=ax(2)*sina+(1.d0-cosa)*ax(1)*ax(3)
!r1(2,1)=ax(3)*sina+(1.d0-cosa)*ax(1)*ax(2)
!r1(2,2)=1.d0+(1.d0-cosa)*(ax(2)**2-1)
!r1(2,3)=-ax(1)*sina+(1.d0-cosa)*ax(2)*ax(3)
!r1(3,1)=-ax(2)*sina+(1.d0-cosa)*ax(1)*ax(3)
!r1(3,2)=ax(1)*sina+(1.d0-cosa)*ax(2)*ax(3)
!r1(3,3)=1.d0+(1.d0-cosa)*(ax(3)**2-1)
!a=u(1,1)
!as=u(2,2)
!b=u(1,2)
!bs=-u(2,1)
!r(1,1)=0.5d0*(a**2+as**2-b**2-bs**2)
!r(1,2)=0.5d0*(0.d0,1.d0)*(as**2+bs**2-a**2-b**2)
!r(1,3)=-(a*b+as*bs)
!r(2,1)=-0.5d0*(0.d0,1.d0)*(as**2-a**2+b**2-bs**2)
!r(2,2)=0.5d0*(a**2+b**2+as**2+bs**2)
!r(2,3)=(0.d0,1.d0)*(as*bs-a*b)
!r(3,1)=(bs*a+as*b)
!r(3,2)=(0.d0,1.d0)*(as*b-bs*a)
!r(3,3)=(a*as-b*bs)
!diff=ABS(r(1,1)-saux(1,1))+ &
! ABS(r(1,2)-saux(1,2))+ &
! ABS(r(1,3)-saux(1,3))+ &
! ABS(r(2,1)-saux(2,1))+ &
! ABS(r(2,2)-saux(2,2))+ &
! ABS(r(2,3)-saux(2,3))+ &
! ABS(r(3,1)-saux(3,1))+ &
! ABS(r(3,2)-saux(3,2))+ &
! ABS(r(3,3)-saux(3,3))
!write(6,*) diff
!write(6,'(3f15.5)') r1(1,1),r1(1,2),r1(1,3)
!write(6,'(3f15.5)') r1(2,1),r1(2,2),r1(2,3)
!write(6,'(3f15.5)') r1(3,1),r1(3,2),r1(3,3)
!write(6,*)
!write(6,'(3f15.5)') r(1,1),r(1,2),r(1,3)
!write(6,'(3f15.5)') r(2,1),r(2,2),r(2,3)
!write(6,'(3f15.5)') r(3,1),r(3,2),r(3,3)
!write(6,*)
!write(6,'(4f15.5)') u(1,1),u(1,2)
!write(6,'(4f15.5)') u(2,1),u(2,2)
!
RETURN
END SUBROUTINE find_u
!-----------------------------------------------------------------------------
FUNCTION set_e(hase,ind)
!-----------------------------------------------------------------------------
IMPLICIT NONE
INTEGER :: set_e, hase, ind
IF (hase==-1) THEN
set_e=ind+1
ELSE
set_e=ind
ENDIF
RETURN
END FUNCTION set_e
!-----------------------------------------------------------------------------
SUBROUTINE check_tgroup(nsym,a,b)
!-----------------------------------------------------------------------------
!
! This subroutine receives a set of 2x2 and 3x3 rotation matrices and
! checks if they are a group.
!
USE kinds, ONLY : DP
IMPLICIT NONE
COMPLEX(DP) :: a(2,2,48), c(2,2), a1(2,2), a2(2,2), a3(2,2)
REAL(DP) :: b(3,3,48), d(3,3), b1(3,3), b2(3,3), b3(3,3)
INTEGER :: nsym, done
LOGICAL :: compare_mat_so
INTEGER :: i, j, k
DO i=1,nsym
a1(:,:)=a(:,:,i)
b1(:,:)=b(:,:,i)
DO j=1,nsym
a2(:,:)=a(:,:,j)
b2(:,:)=b(:,:,j)
c=MATMUL(a1,a2)
d=MATMUL(b1,b2)
done=0
do k=1,nsym
a3(:,:)=a(:,:,k)
b3(:,:)=b(:,:,k)
IF (compare_mat_so(d,c,b3,a3)) THEN
done=done+1
ENDIF
ENDDO
IF (done.ne.1) write(6,*) 'problem, i,j',i,j
END DO
END DO
RETURN
END SUBROUTINE check_tgroup