! ! 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(code_group,nrot,smat,nclass,nelem,elem,which_irr) !----------------------------------------------------------------------------- ! ! This subroutine receives as input a set of nrot 3x3 matrices smat, which ! are assumed to be the operations of the point group given by code_group. ! smat are in cartesian coordinates. ! This routine divide the group in classes and find: ! ! nclass the number of classes of the group ! nelem(iclass) for each class, the number of elements of the class ! elem(i,iclass) 11) THEN which_irr(iclass)=6 ELSE which_irr(iclass)=4 END IF ELSE IF (ts==6) THEN which_irr(iclass)=5 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)=2 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','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==4) THEN CALL versor(smat(1,1,elem(1,iclass)),ax) IF (is_axis(ax,axis)) THEN which_irr(iclass)=3 ELSE IF (first) THEN which_irr(iclass)=4 first=.FALSE. ELSE which_irr(iclass)=5 END IF END IF ELSEIF (ts==2) THEN which_irr(iclass)=6 ELSEIF (ts==5) THEN CALL mirror_axis(smat(1,1,elem(1,iclass)),ax) IF (is_axis(ax,axis)) THEN which_irr(iclass)=8 ELSE IF (first1) THEN which_irr(iclass)=9 first1=.FALSE. ELSE which_irr(iclass)=10 END IF END IF ELSEIF (ts==6) THEN which_irr(iclass)=7 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==3) THEN ars=angle_rot(smat(1,1,elem(1,iclass))) IF ((ABS(ars-60.d0)=0. In the xy plane the axis is in the y>0 region and the positive ! x axis is taken for z=0 and y=0. ! USE kinds, ONLY : DP IMPLICIT NONE REAL(DP) :: smat(3,3), ax(3) REAL(DP), PARAMETER :: eps=1.d-7 REAL(DP) :: a1(3), norm INTEGER :: ipol, jpol, tipo_sym, ts ! ! Check if it is a 180 rotation ! ts=tipo_sym(smat) IF (ts/=3.and.ts/=4.and.ts/=6) & call errore('versor','called in the wrong case',1) IF (ts==4) THEN ! ! First the case where the axis is parallel to a coordinate axis ! ax=0.d0 DO ipol=1,3 IF (ABS(smat(ipol,ipol)-1.d0) < eps ) ax(ipol)=1.d0 END DO norm=sqrt(ax(1)**2+ax(2)**2+ax(3)**2) IF (ABS(norm)>eps) RETURN ! ! then the general case ! DO ipol=1,3 ax(ipol)=sqrt((smat(ipol,ipol)+1.d0)/2.d0) END DO DO ipol=1,3 DO jpol=ipol+1,3 IF (ABS(ax(ipol)*ax(jpol))>eps) THEN ax(ipol)=0.5d0*smat(ipol,jpol)/ax(jpol) END IF END DO END DO RETURN END IF ! ! It is not a 180 rotation: compute the rotation axis ! a1(1) =-smat(2,3)+smat(3,2) a1(2) =-smat(3,1)+smat(1,3) a1(3) =-smat(1,2)+smat(2,1) ! ! The direction of the axis is arbitrarily chosen ! IF (a1(3) < -eps ) THEN a1=-a1 ELSEIF (abs(a1(3))eps) THEN sint=SIGN(sint,a1(1)/ax(1)) ELSEIF (ABS(a1(2))>eps) THEN sint=SIGN(sint,a1(2)/ax(2)) ELSEIF (ABS(a1(3))>eps) THEN sint=SIGN(sint,a1(3)/ax(3)) END IF ! ! Compute the cos of the angle ! ax=a1/(2.d0*sint) IF (ABS(ax(1)**2-1.d0)>eps) THEN cost=(smat(1,1)-ax(1)**2)/(1.d0-ax(1)**2) ELSE IF (ABS(ax(2)**2-1.d0)>eps) THEN cost=(smat(2,2)-ax(2)**2)/(1.d0-ax(2)**2) ELSE IF (ABS(ax(3)**2-1.d0)>eps) THEN cost=(smat(3,3)-ax(3)**2)/(1.d0-ax(3)**2) END IF IF (ABS(sint**2+cost**2-1.d0) > eps ) & CALL errore('angle_rot','problem with the matrix',1) angle_rot1=ASIN(sint)*180.d0/pi IF (angle_rot1 < 0.d0) THEN IF (cost < 0.d0) THEN angle_rot1=-angle_rot1+180.d0 ELSE angle_rot1=360.d0+angle_rot1 ENDIF ELSE IF (cost < 0.d0) angle_rot1=-angle_rot1+180.d0 ENDIF angle_rot=angle_rot1 RETURN END FUNCTION angle_rot !----------------------------------------------------------------------------- FUNCTION angle_rot_s(smat) !----------------------------------------------------------------------------- ! ! This subroutine receives an improper rotation matrix and determines the ! rotation angle. ! USE kinds, ONLY : DP IMPLICIT NONE REAL(DP) :: smat(3,3) REAL(DP) :: aux_mat(3,3) REAL(DP) :: angle_rot, angle_rot_s aux_mat=-smat angle_rot_s=mod(angle_rot(aux_mat)+180.0_DP,360.0_DP) RETURN END FUNCTION angle_rot_s !----------------------------------------------------------------------------- SUBROUTINE set_irr_rap(code_group,nclass_ref,char_mat,name_rap, & name_class,ir_ram) !----------------------------------------------------------------------------- ! ! This subroutine collects the character tables of the 32 crystallographic ! point groups. ! Various names have been used in the litterature to identify ! the irreducible representations. Several equivalent names are ! collected in this routine. The first name is taken ! from the book of P.W. Atkins, M.S. Child, and C.S.G. Phillips, ! "Tables for group theory". ! D, G, L, S are used for Delta, Gamma, Lambda and Sigma. ! Representations which correspond to infrared or raman active modes ! are identified with the string in ir_ram: I (infrared active), ! R (Raman active), I+R (Infrared and Raman active). ! ! USE kinds, ONLY : DP IMPLICIT NONE INTEGER :: nclass_ref, & ! Output: number of irreducible representation code_group ! Input: code of the group CHARACTER(LEN=15) :: name_rap(12) ! Output: name of the representations CHARACTER(LEN=5) :: name_class(12) ! Output: name of the classes CHARACTER(LEN=3) :: ir_ram(12) COMPLEX(DP) :: char_mat(12,12) ! Output: character matrix REAL(DP) :: sqr3d2 sqr3d2=SQRT(3.d0)*0.5d0 char_mat=(1.d0,0.d0) name_class(1)="E " ir_ram=" " IF (code_group==1) THEN ! ! C_1 ! nclass_ref=1 name_rap(1)="A " ir_ram(1)="I+R" ELSEIF (code_group==2) THEN ! ! C_i ! nclass_ref=2 name_class(2)="i " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="A_u " ir_ram(2)="I" char_mat(2,2)=(-1.d0,0.d0) ELSEIF (code_group==3) THEN ! ! C_s ! nclass_ref=2 name_class(2)="s " name_rap(1)="A' " ir_ram(1)="I+R" name_rap(2)="A'' " ir_ram(2)="I+R" char_mat(2,2)=(-1.d0,0.d0) ELSEIF (code_group==4) THEN ! ! C_2 ! nclass_ref=2 name_class(2)="C2 " name_rap(1)="A " ir_ram(1)="I+R" name_rap(2)="B " ir_ram(2)="I+R" char_mat(2,2)=(-1.d0,0.d0) ELSEIF (code_group==5) THEN ! ! C_3 ! nclass_ref=3 name_class(2)="C3 " name_class(3)="C3^2 " name_rap(1)="A " ir_ram(1)="I+R" name_rap(2)="E " ir_ram(2)="I+R" char_mat(2,2)=CMPLX(-0.5d0,sqr3d2) char_mat(2,3)=CMPLX(-0.5d0,-sqr3d2) name_rap(3)="E* " ir_ram(3)="I+R" char_mat(3,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,3)=CMPLX(-0.5d0,sqr3d2) ELSEIF (code_group==6) THEN ! ! C_4 ! nclass_ref=4 name_class(2)="C4 " name_class(3)="C2 " name_class(4)="C4^3 " name_rap(1)="A " ir_ram(1)="I+R" name_rap(2)="B " ir_ram(2)="R" char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) name_rap(3)="E " ir_ram(3)="I+R" char_mat(3,2)=( 0.d0,1.d0) char_mat(3,3)=(-1.d0,0.d0) char_mat(3,4)=( 0.d0,-1.d0) name_rap(4)="E* " ir_ram(4)="I+R" char_mat(4,2)=( 0.d0,-1.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,4)=( 0.d0,1.d0) ELSEIF (code_group==7) THEN ! ! C_6 ! nclass_ref=6 name_class(2)="C6 " name_class(3)="C3 " name_class(4)="C2 " name_class(5)="C3^2 " name_class(6)="C6^5 " name_rap(1)="A " ir_ram(1)="I+R" name_rap(2)="B " char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) name_rap(3)="E_1 " ir_ram(3)="I+R" char_mat(3,2)=CMPLX( 0.5d0,sqr3d2) char_mat(3,3)=CMPLX(-0.5d0,sqr3d2) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,6)=CMPLX( 0.5d0,-sqr3d2) name_rap(4)="E_1*" ir_ram(4)="I+R" char_mat(4,2)=CMPLX( 0.5d0,-sqr3d2) char_mat(4,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=CMPLX(-0.5d0,sqr3d2) char_mat(4,6)=CMPLX( 0.5d0,sqr3d2) name_rap(5)="E_2 " ir_ram(5)="R" char_mat(5,2)=CMPLX(-0.5d0,sqr3d2) char_mat(5,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,5)=CMPLX(-0.5d0,sqr3d2) char_mat(5,6)=CMPLX(-0.5d0,-sqr3d2) name_rap(6)="E_2*" ir_ram(6)="R" char_mat(6,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,3)=CMPLX(-0.5d0,sqr3d2) char_mat(6,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,6)=CMPLX(-0.5d0,sqr3d2) ELSEIF (code_group==8) THEN ! ! D_2 ! nclass_ref=4 name_class(2)="C2z " name_class(3)="C2y " name_class(4)="C2x " name_rap(1)="A " ir_ram(1)="R" name_rap(2)="B_1 " ir_ram(2)="I+R" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) name_rap(3)="B_2 " ir_ram(3)="I+R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) name_rap(4)="B_3 " ir_ram(4)="I+R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) ELSEIF (code_group==9) THEN ! ! D_3 ! nclass_ref=3 name_class(2)="2C3 " name_class(3)="3C2' " name_rap(1)="A_1 " ir_ram(1)="R" name_rap(2)="A_2 " ir_ram(2)="I" char_mat(2,3)=(-1.d0,0.d0) name_rap(3)="E " ir_ram(3)="I+R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 0.d0,0.d0) ELSEIF (code_group==10) THEN ! ! D_4 ! nclass_ref=5 name_class(2)="2C4 " name_class(3)="C2 " name_class(4)="2C2' " name_class(5)="2C2''" name_rap(1)="A_1 " ir_ram(1)="R" name_rap(2)="A_2 " ir_ram(2)="I" char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) name_rap(3)="B_1 " ir_ram(3)="R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) name_rap(4)="B_2 " ir_ram(4)="R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) name_rap(5)="E " ir_ram(5)="I+R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-2.d0,0.d0) char_mat(5,4)=( 0.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) ELSEIF (code_group==11) THEN ! ! D_6 ! nclass_ref=6 name_class(2)="2C6 " name_class(3)="2C3 " name_class(4)="C2 " name_class(5)="3C2' " name_class(6)="3C2''" name_rap(1)="A_1 " ir_ram(1)="R" name_rap(2)="A_2 " ir_ram(2)="I" char_mat(2,5)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) name_rap(3)="B_1 " char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,6)=(-1.d0,0.d0) name_rap(4)="B_2 " char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) name_rap(5)="E_1 " ir_ram(5)="I+R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-2.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) char_mat(5,6)=( 0.d0,0.d0) name_rap(6)="E_2 " ir_ram(6)="R" char_mat(6,1)=( 2.d0,0.d0) char_mat(6,2)=(-1.d0,0.d0) char_mat(6,3)=(-1.d0,0.d0) char_mat(6,4)=( 2.d0,0.d0) char_mat(6,5)=( 0.d0,0.d0) char_mat(6,6)=( 0.d0,0.d0) ELSEIF (code_group==12) THEN ! ! C_2v ! nclass_ref=4 name_class(2)="C2 " name_class(3)="s_xz " name_class(4)="s_yz " name_rap(1)="A_1 D_1 S_1" ir_ram(1)="I+R" name_rap(2)="A_2 D_2 S_2" ir_ram(2)="R" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) name_rap(3)="B_1 D_3 S_3" ir_ram(3)="I+R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) name_rap(4)="B_2 D_4 S_4" ir_ram(4)="I+R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) ELSEIF (code_group==13) THEN ! ! C_3v ! nclass_ref=3 name_class(2)="2C3 " name_class(3)="3s_v " name_rap(1)="A_1 L_1" ir_ram(1)="I+R" name_rap(2)="A_2 L_2" char_mat(2,3)=(-1.d0,0.d0) name_rap(3)="E L_3" ir_ram(3)="I+R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 0.d0,0.d0) ELSEIF (code_group==14) THEN ! ! C_4v ! nclass_ref=5 name_class(2)="2C4 " name_class(3)="C2 " name_class(4)="2s_v " name_class(5)="2s_d " name_rap(1)="A_1 G_1 D_1" ir_ram(1)="I+R" name_rap(2)="A_2 G_2 D_1'" char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) name_rap(3)="B_1 G_3 D_2" ir_ram(3)="R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) name_rap(4)="B_2 G_4 D_2'" ir_ram(4)="R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) name_rap(5)="E G_5 D_5" ir_ram(5)="I+R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-2.d0,0.d0) char_mat(5,4)=( 0.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) ELSEIF (code_group==15) THEN ! ! C_6v ! nclass_ref=6 name_class(2)="2C6 " name_class(3)="2C3 " name_class(4)="C2 " name_class(5)="3s_v " name_class(6)="3s_d " name_rap(1)="A_1 " ir_ram(1)="I+R" name_rap(2)="A_2 " char_mat(2,5)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) name_rap(3)="B_1 " char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,6)=(-1.d0,0.d0) name_rap(4)="B_2 " char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) name_rap(5)="E_1 " ir_ram(5)="I+R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-2.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) char_mat(5,6)=( 0.d0,0.d0) name_rap(6)="E_2 " ir_ram(6)="R" char_mat(6,1)=( 2.d0,0.d0) char_mat(6,2)=(-1.d0,0.d0) char_mat(6,3)=(-1.d0,0.d0) char_mat(6,4)=( 2.d0,0.d0) char_mat(6,5)=( 0.d0,0.d0) char_mat(6,6)=( 0.d0,0.d0) ELSEIF (code_group==16) THEN ! ! C_2h ! nclass_ref=4 name_class(2)="C2 " name_class(3)="i " name_class(4)="s_h " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="B_g " ir_ram(2)="R" char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) name_rap(3)="A_u " ir_ram(3)="I" char_mat(3,3)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) name_rap(4)="B_u " ir_ram(4)="I" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) ELSEIF (code_group==17) THEN ! ! C_3h ! nclass_ref=6 name_class(2)="C3 " name_class(3)="C3^2 " name_class(4)="s_h " name_class(5)="S3 " name_class(6)="S3^5 " name_rap(1)="A' " ir_ram(1)="R" name_rap(2)="E' " ir_ram(2)="I+R" char_mat(2,2)=CMPLX(-0.5d0,sqr3d2) char_mat(2,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(2,5)=CMPLX(-0.5d0,sqr3d2) char_mat(2,6)=CMPLX(-0.5d0,-sqr3d2) name_rap(3)="E'* " ir_ram(3)="I+R" char_mat(3,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,3)=CMPLX(-0.5d0,sqr3d2) char_mat(3,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,6)=CMPLX(-0.5d0,sqr3d2) name_rap(4)="A'' " ir_ram(4)="I" char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,6)=(-1.d0,0.d0) name_rap(5)="E'' " ir_ram(5)="R" char_mat(5,2)=CMPLX(-0.5d0,sqr3d2) char_mat(5,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,4)=(-1.d0,0.d0) char_mat(5,5)=CMPLX( 0.5d0,-sqr3d2) char_mat(5,6)=CMPLX(0.5d0,sqr3d2) name_rap(6)="E''*" ir_ram(6)="R" char_mat(6,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,3)=CMPLX(-0.5d0,sqr3d2) char_mat(6,4)=(-1.d0,0.d0) char_mat(6,5)=CMPLX( 0.5d0,sqr3d2) char_mat(6,6)=CMPLX(0.5d0,-sqr3d2) ELSEIF (code_group==18) THEN ! ! C_4h ! nclass_ref=8 name_class(2)="C4 " name_class(3)="C2 " name_class(4)="C4^3 " name_class(5)="i " name_class(6)="S4^3 " name_class(7)="s_h " name_class(8)="S4 " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="B_g " ir_ram(2)="R" char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) char_mat(2,8)=(-1.d0,0.d0) name_rap(3)="E_g " ir_ram(3)="R" char_mat(3,2)=( 0.d0,1.d0) char_mat(3,3)=(-1.d0,0.d0) char_mat(3,4)=( 0.d0,-1.d0) char_mat(3,6)=( 0.d0,1.d0) char_mat(3,7)=(-1.d0,0.d0) char_mat(3,8)=( 0.d0,-1.d0) name_rap(4)="E_g*" ir_ram(4)="R" char_mat(4,2)=(0.d0,-1.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,4)=( 0.d0,1.d0) char_mat(4,6)=( 0.d0,-1.d0) char_mat(4,7)=(-1.d0,0.d0) char_mat(4,8)=( 0.d0,1.d0) name_rap(5)="A_u " ir_ram(5)="I" char_mat(5,5)=(-1.d0,0.d0) char_mat(5,6)=(-1.d0,0.d0) char_mat(5,7)=(-1.d0,0.d0) char_mat(5,8)=(-1.d0,0.d0) name_rap(6)="B_u " char_mat(6,2)=(-1.d0,0.d0) char_mat(6,4)=(-1.d0,0.d0) char_mat(6,5)=(-1.d0,0.d0) char_mat(6,7)=(-1.d0,0.d0) name_rap(7)="E_u " ir_ram(7)="I" char_mat(7,2)=( 0.d0,1.d0) char_mat(7,3)=(-1.d0,0.d0) char_mat(7,4)=( 0.d0,-1.d0) char_mat(7,5)=(-1.d0, 0.d0) char_mat(7,6)=( 0.d0,-1.d0) char_mat(7,8)=( 0.d0,1.d0) name_rap(8)="E_u*" ir_ram(8)="I" char_mat(8,2)=( 0.d0,-1.d0) char_mat(8,3)=(-1.d0,0.d0) char_mat(8,4)=( 0.d0,1.d0) char_mat(8,5)=(-1.d0, 0.d0) char_mat(8,6)=( 0.d0,1.d0) char_mat(8,8)=( 0.d0,-1.d0) ELSEIF (code_group==19) THEN ! ! C_6h ! nclass_ref=12 name_class(2)="C6 " name_class(3)="C3 " name_class(4)="C2 " name_class(5)="C3^2 " name_class(6)="C6^5 " name_class(7)="i " name_class(8)="S3^5 " name_class(9)="S6^5 " name_class(10)="s_h " name_class(11)="S6 " name_class(12)="S3 " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="B_g " char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) char_mat(2,8)=(-1.d0,0.d0) char_mat(2,10)=(-1.d0,0.d0) char_mat(2,12)=(-1.d0,0.d0) name_rap(3)="E_1g" ir_ram(3)="R" char_mat(3,2)=CMPLX( 0.5d0, sqr3d2) char_mat(3,3)=CMPLX(-0.5d0, sqr3d2) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,6)=CMPLX( 0.5d0,-sqr3d2) char_mat(3,8)=CMPLX( 0.5d0, sqr3d2) char_mat(3,9)=CMPLX(-0.5d0, sqr3d2) char_mat(3,10)=(-1.d0,0.d0) char_mat(3,11)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,12)=CMPLX( 0.5d0,-sqr3d2) name_rap(4)="E1g*" ir_ram(4)="R" char_mat(4,2)=CMPLX( 0.5d0,-sqr3d2) char_mat(4,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=CMPLX(-0.5d0, sqr3d2) char_mat(4,6)=CMPLX( 0.5d0, sqr3d2) char_mat(4,8)=CMPLX( 0.5d0,-sqr3d2) char_mat(4,9)=CMPLX(-0.5d0,-sqr3d2) char_mat(4,10)=(-1.d0,0.d0) char_mat(4,11)=CMPLX(-0.5d0,sqr3d2) char_mat(4,12)=CMPLX( 0.5d0,sqr3d2) name_rap(5)="E_2g" ir_ram(5)="R" char_mat(5,2)=CMPLX(-0.5d0, sqr3d2) char_mat(5,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,5)=CMPLX(-0.5d0, sqr3d2) char_mat(5,6)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,8)=CMPLX(-0.5d0, sqr3d2) char_mat(5,9)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,11)=CMPLX(-0.5d0, sqr3d2) char_mat(5,12)=CMPLX(-0.5d0,-sqr3d2) name_rap(6)="E2g*" ir_ram(6)="R" char_mat(6,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,3)=CMPLX(-0.5d0, sqr3d2) char_mat(6,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,6)=CMPLX(-0.5d0, sqr3d2) char_mat(6,8)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,9)=CMPLX(-0.5d0, sqr3d2) char_mat(6,11)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,12)=CMPLX(-0.5d0, sqr3d2) name_rap(7)="A_u " ir_ram(7)="I" char_mat(7,7)=(-1.d0,0.d0) char_mat(7,8)=(-1.d0,0.d0) char_mat(7,9)=(-1.d0,0.d0) char_mat(7,10)=(-1.d0,0.d0) char_mat(7,11)=(-1.d0,0.d0) char_mat(7,12)=(-1.d0,0.d0) name_rap(8)="B_u " char_mat(8,2)=(-1.d0,0.d0) char_mat(8,4)=(-1.d0,0.d0) char_mat(8,6)=(-1.d0,0.d0) char_mat(8,7)=(-1.d0,0.d0) char_mat(8,9)=(-1.d0,0.d0) char_mat(8,11)=(-1.d0,0.d0) name_rap(9)="E_1u" ir_ram(9)="I" char_mat(9,2)=CMPLX( 0.5d0, sqr3d2) char_mat(9,3)=CMPLX(-0.5d0, sqr3d2) char_mat(9,4)=(-1.d0,0.d0) char_mat(9,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(9,6)=CMPLX( 0.5d0,-sqr3d2) char_mat(9,7)=(-1.d0,0.d0) char_mat(9,8)=CMPLX(-0.5d0,-sqr3d2) char_mat(9,9)=CMPLX( 0.5d0,-sqr3d2) char_mat(9,11)=CMPLX( 0.5d0, sqr3d2) char_mat(9,12)=CMPLX(-0.5d0, sqr3d2) name_rap(10)="E1u*" ir_ram(10)="I" char_mat(10,2)=CMPLX( 0.5d0,-sqr3d2) char_mat(10,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(10,4)=(-1.d0,0.d0) char_mat(10,5)=CMPLX(-0.5d0, sqr3d2) char_mat(10,6)=CMPLX( 0.5d0, sqr3d2) char_mat(10,7)=(-1.d0,0.d0) char_mat(10,8)=CMPLX(-0.5d0, sqr3d2) char_mat(10,9)=CMPLX( 0.5d0, sqr3d2) char_mat(10,11)=CMPLX( 0.5d0,-sqr3d2) char_mat(10,12)=CMPLX(-0.5d0,-sqr3d2) name_rap(11)="E_2u" char_mat(11,2)=CMPLX(-0.5d0, sqr3d2) char_mat(11,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(11,5)=CMPLX(-0.5d0, sqr3d2) char_mat(11,6)=CMPLX(-0.5d0,-sqr3d2) char_mat(11,7)=(-1.d0,0.d0) char_mat(11,8)=CMPLX( 0.5d0,-sqr3d2) char_mat(11,9)=CMPLX( 0.5d0, sqr3d2) char_mat(11,10)=(-1.d0,0.d0) char_mat(11,11)=CMPLX( 0.5d0,-sqr3d2) char_mat(11,12)=CMPLX( 0.5d0, sqr3d2) name_rap(12)="E2u*" char_mat(12,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(12,3)=CMPLX(-0.5d0, sqr3d2) char_mat(12,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(12,6)=CMPLX(-0.5d0, sqr3d2) char_mat(12,7)=(-1.d0,0.d0) char_mat(12,8)=CMPLX( 0.5d0, sqr3d2) char_mat(12,9)=CMPLX( 0.5d0,-sqr3d2) char_mat(12,10)=(-1.d0,0.d0) char_mat(12,11)=CMPLX( 0.5d0, sqr3d2) char_mat(12,12)=CMPLX( 0.5d0,-sqr3d2) ELSEIF (code_group==20) THEN ! ! D_2h ! nclass_ref=8 name_class(2)="C2_z " name_class(3)="C2_y " name_class(4)="C2_x " name_class(5)="i " name_class(6)="s_xy " name_class(7)="s_xz " name_class(8)="s_yz " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="B_1g" ir_ram(2)="R" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) char_mat(2,7)=(-1.d0,0.d0) char_mat(2,8)=(-1.d0,0.d0) name_rap(3)="B_2g" ir_ram(3)="R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,6)=(-1.d0,0.d0) char_mat(3,8)=(-1.d0,0.d0) name_rap(4)="B_3g" ir_ram(4)="R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,6)=(-1.d0,0.d0) char_mat(4,7)=(-1.d0,0.d0) name_rap(5)="A_u " char_mat(5,5)=(-1.d0,0.d0) char_mat(5,6)=(-1.d0,0.d0) char_mat(5,7)=(-1.d0,0.d0) char_mat(5,8)=(-1.d0,0.d0) name_rap(6)="B_1u" ir_ram(6)="I" char_mat(6,3)=(-1.d0,0.d0) char_mat(6,4)=(-1.d0,0.d0) char_mat(6,5)=(-1.d0,0.d0) char_mat(6,6)=(-1.d0,0.d0) name_rap(7)="B_2u" ir_ram(7)="I" char_mat(7,2)=(-1.d0,0.d0) char_mat(7,4)=(-1.d0,0.d0) char_mat(7,5)=(-1.d0,0.d0) char_mat(7,7)=(-1.d0,0.d0) name_rap(8)="B_3u" ir_ram(8)="I" char_mat(8,2)=(-1.d0,0.d0) char_mat(8,3)=(-1.d0,0.d0) char_mat(8,5)=(-1.d0,0.d0) char_mat(8,8)=(-1.d0,0.d0) ELSEIF (code_group==21) THEN ! ! D_3h ! nclass_ref=6 name_class(2)="2C3 " name_class(3)="3C2 " name_class(4)="s_h " name_class(5)="2S3 " name_class(6)="3s_v " name_rap(1)="A'_1" ir_ram(1)="R" name_rap(2)="A'_2" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) name_rap(3)="E' " ir_ram(3)="I+R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 0.d0,0.d0) char_mat(3,4)=( 2.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) char_mat(3,6)=( 0.d0,0.d0) name_rap(4)="A''1" char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,6)=(-1.d0,0.d0) name_rap(5)="A''2" ir_ram(5)="I" char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-1.d0,0.d0) char_mat(5,5)=(-1.d0,0.d0) name_rap(6)="E'' " ir_ram(6)="R" char_mat(6,1)=( 2.d0,0.d0) char_mat(6,2)=(-1.d0,0.d0) char_mat(6,3)=( 0.d0,0.d0) char_mat(6,4)=(-2.d0,0.d0) char_mat(6,6)=( 0.d0,0.d0) ELSEIF (code_group==22) THEN ! ! D_4h ! nclass_ref=10 name_class(2)="2C4 " name_class(3)="C2 " name_class(4)="2C2' " name_class(5)="2C2''" name_class(6)="i " name_class(7)="2S4 " name_class(8)="s_h " name_class(9)="2s_v " name_class(10)="2s_d " name_rap(1)="A_1g X_1 M_1" ir_ram(1)="R" name_rap(2)="A_2g X_4 M_4" char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) char_mat(2,9)=(-1.d0,0.d0) char_mat(2,10)=(-1.d0,0.d0) name_rap(3)="B_1g X_2 M_2" ir_ram(3)="R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) char_mat(3,7)=(-1.d0,0.d0) char_mat(3,10)=(-1.d0,0.d0) name_rap(4)="B_2g X_3 M_3" ir_ram(4)="R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,7)=(-1.d0,0.d0) char_mat(4,9)=(-1.d0,0.d0) name_rap(5)="E_g X_5 M_5" ir_ram(5)="R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-2.d0,0.d0) char_mat(5,4)=( 0.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) char_mat(5,6)=( 2.d0,0.d0) char_mat(5,7)=( 0.d0,0.d0) char_mat(5,8)=(-2.d0,0.d0) char_mat(5,9)=( 0.d0,0.d0) char_mat(5,10)=( 0.d0,0.d0) name_rap(6)="A_1u X_1' M_1'" char_mat(6,6)=(-1.d0,0.d0) char_mat(6,7)=(-1.d0,0.d0) char_mat(6,8)=(-1.d0,0.d0) char_mat(6,9)=(-1.d0,0.d0) char_mat(6,10)=(-1.d0,0.d0) name_rap(7)="A_2u X_4' M_4'" ir_ram(7)="I" char_mat(7,4)=(-1.d0,0.d0) char_mat(7,5)=(-1.d0,0.d0) char_mat(7,6)=(-1.d0,0.d0) char_mat(7,7)=(-1.d0,0.d0) char_mat(7,8)=(-1.d0,0.d0) name_rap(8)="B_1u X_2' M_2'" char_mat(8,2)=(-1.d0,0.d0) char_mat(8,5)=(-1.d0,0.d0) char_mat(8,6)=(-1.d0,0.d0) char_mat(8,8)=(-1.d0,0.d0) char_mat(8,9)=(-1.d0,0.d0) name_rap(9)="B_2u X_3' M_3'" char_mat(9,2)=(-1.d0,0.d0) char_mat(9,4)=(-1.d0,0.d0) char_mat(9,6)=(-1.d0,0.d0) char_mat(9,8)=(-1.d0,0.d0) char_mat(9,10)=(-1.d0,0.d0) name_rap(10)="E_u X_5' M_5'" ir_ram(10)="I" char_mat(10,1)=( 2.d0,0.d0) char_mat(10,2)=( 0.d0,0.d0) char_mat(10,3)=(-2.d0,0.d0) char_mat(10,4)=( 0.d0,0.d0) char_mat(10,5)=( 0.d0,0.d0) char_mat(10,6)=(-2.d0,0.d0) char_mat(10,7)=( 0.d0,0.d0) char_mat(10,8)=( 2.d0,0.d0) char_mat(10,9)=( 0.d0,0.d0) char_mat(10,10)=( 0.d0,0.d0) ELSEIF (code_group==23) THEN ! ! D_6h ! nclass_ref=12 name_class(2)="2C6 " name_class(3)="2C3 " name_class(4)="C2 " name_class(5)="3C2' " name_class(6)="3C2''" name_class(7)="i " name_class(8)="2S3 " name_class(9)="2S6 " name_class(10)="s_h " name_class(11)="3s_d " name_class(12)="3s_v " name_rap(1)="A_1g" ir_ram(1)="R" name_rap(2)="A_2g" char_mat(2,5)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) char_mat(2,11)=(-1.d0,0.d0) char_mat(2,12)=(-1.d0,0.d0) name_rap(3)="B_1g" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,4)=(-1.d0,0.d0) char_mat(3,6)=(-1.d0,0.d0) char_mat(3,8)=(-1.d0,0.d0) char_mat(3,10)=(-1.d0,0.d0) char_mat(3,12)=(-1.d0,0.d0) name_rap(4)="B_2g" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,8)=(-1.d0,0.d0) char_mat(4,10)=(-1.d0,0.d0) char_mat(4,11)=(-1.d0,0.d0) name_rap(5)="E_1g" ir_ram(5)="R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-2.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) char_mat(5,6)=( 0.d0,0.d0) char_mat(5,7)=( 2.d0,0.d0) char_mat(5,9)=(-1.d0,0.d0) char_mat(5,10)=(-2.d0,0.d0) char_mat(5,11)=( 0.d0,0.d0) char_mat(5,12)=( 0.d0,0.d0) name_rap(6)="E_2g" ir_ram(6)="R" char_mat(6,1)=( 2.d0,0.d0) char_mat(6,2)=(-1.d0,0.d0) char_mat(6,3)=(-1.d0,0.d0) char_mat(6,4)=( 2.d0,0.d0) char_mat(6,5)=( 0.d0,0.d0) char_mat(6,6)=( 0.d0,0.d0) char_mat(6,7)=( 2.d0,0.d0) char_mat(6,8)=(-1.d0,0.d0) char_mat(6,9)=(-1.d0,0.d0) char_mat(6,10)=( 2.d0,0.d0) char_mat(6,11)=( 0.d0,0.d0) char_mat(6,12)=( 0.d0,0.d0) name_rap(7)="A_1u" char_mat(7,7)=(-1.d0,0.d0) char_mat(7,8)=(-1.d0,0.d0) char_mat(7,9)=(-1.d0,0.d0) char_mat(7,10)=(-1.d0,0.d0) char_mat(7,11)=(-1.d0,0.d0) char_mat(7,12)=(-1.d0,0.d0) name_rap(8)="A_2u" ir_ram(8)="I" char_mat(8,5)=(-1.d0,0.d0) char_mat(8,6)=(-1.d0,0.d0) char_mat(8,7)=(-1.d0,0.d0) char_mat(8,8)=(-1.d0,0.d0) char_mat(8,9)=(-1.d0,0.d0) char_mat(8,10)=(-1.d0,0.d0) name_rap(9)="B_1u" char_mat(9,2)=(-1.d0,0.d0) char_mat(9,4)=(-1.d0,0.d0) char_mat(9,6)=(-1.d0,0.d0) char_mat(9,7)=(-1.d0,0.d0) char_mat(9,9)=(-1.d0,0.d0) char_mat(9,11)=(-1.d0,0.d0) name_rap(10)="B_2u" char_mat(10,2)=(-1.d0,0.d0) char_mat(10,4)=(-1.d0,0.d0) char_mat(10,5)=(-1.d0,0.d0) char_mat(10,7)=(-1.d0,0.d0) char_mat(10,9)=(-1.d0,0.d0) char_mat(10,12)=(-1.d0,0.d0) name_rap(11)="E_1u" ir_ram(11)="I" char_mat(11,1)=( 2.d0,0.d0) char_mat(11,3)=(-1.d0,0.d0) char_mat(11,4)=(-2.d0,0.d0) char_mat(11,5)=( 0.d0,0.d0) char_mat(11,6)=( 0.d0,0.d0) char_mat(11,7)=(-2.d0,0.d0) char_mat(11,8)=(-1.d0,0.d0) char_mat(11,10)=( 2.d0,0.d0) char_mat(11,11)=( 0.d0,0.d0) char_mat(11,12)=( 0.d0,0.d0) name_rap(12)="E_2u" char_mat(12,1)=( 2.d0,0.d0) char_mat(12,2)=(-1.d0,0.d0) char_mat(12,3)=(-1.d0,0.d0) char_mat(12,4)=( 2.d0,0.d0) char_mat(12,5)=( 0.d0,0.d0) char_mat(12,6)=( 0.d0,0.d0) char_mat(12,7)=(-2.d0,0.d0) char_mat(12,10)=(-2.d0,0.d0) char_mat(12,11)=( 0.d0,0.d0) char_mat(12,12)=( 0.d0,0.d0) ELSEIF (code_group==24) THEN ! ! D_2d ! nclass_ref=5 name_class(2)="2S4 " name_class(3)="C2 " name_class(4)="2C2' " name_class(5)="2s_d " name_rap(1)="A_1 X_1 W_1" ir_ram(1)="R" name_rap(2)="A_2 X_4 W_2'" char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) name_rap(3)="B_1 X_2 W_1'" ir_ram(3)="R" char_mat(3,2)=(-1.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) name_rap(4)="B_2 X_3 W_2" ir_ram(4)="I+R" char_mat(4,2)=(-1.d0,0.d0) char_mat(4,4)=(-1.d0,0.d0) name_rap(5)="E X_5 W_3" ir_ram(5)="I+R" char_mat(5,1)=( 2.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-2.d0,0.d0) char_mat(5,4)=( 0.d0,0.d0) char_mat(5,5)=( 0.d0,0.d0) ELSEIF (code_group==25) THEN ! ! D_3d ! nclass_ref=6 name_class(2)="2C3 " name_class(3)="3C2' " name_class(4)="i " name_class(5)="2S6 " name_class(6)="3s_d " name_rap(1)="A_1g L_1" ir_ram(1)="R" name_rap(2)="A_2g L_2" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,6)=(-1.d0,0.d0) name_rap(3)="E_g L_3" ir_ram(3)="R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 0.d0,0.d0) char_mat(3,4)=( 2.d0,0.d0) char_mat(3,5)=(-1.d0,0.d0) char_mat(3,6)=( 0.d0,0.d0) name_rap(4)="A_1u L_1'" char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,6)=(-1.d0,0.d0) name_rap(5)="A_2u L_2'" ir_ram(5)="I" char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-1.d0,0.d0) char_mat(5,5)=(-1.d0,0.d0) name_rap(6)="E_u L_3'" ir_ram(6)="I" char_mat(6,1)=( 2.d0,0.d0) char_mat(6,2)=(-1.d0,0.d0) char_mat(6,3)=( 0.d0,0.d0) char_mat(6,4)=(-2.d0,0.d0) char_mat(6,6)=( 0.d0,0.d0) ELSEIF (code_group==26) THEN ! ! S_4 ! nclass_ref=4 name_class(2)="S4 " name_class(3)="C2 " name_class(4)="S4^3 " name_rap(1)="A W_1" ir_ram(1)="R" name_rap(2)="B W_3" ir_ram(2)="I+R" char_mat(2,2)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) name_rap(3)="E W_4" ir_ram(3)="I+R" char_mat(3,2)=( 0.d0, 1.d0) char_mat(3,3)=(-1.d0,0.d0) char_mat(3,4)=( 0.d0,-1.d0) name_rap(4)="E* W_2" ir_ram(4)="I+R" char_mat(4,2)=( 0.d0,-1.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,4)=( 0.d0, 1.d0) ELSEIF (code_group==27) THEN ! ! S_6 ! nclass_ref=6 name_class(2)="C3 " name_class(3)="C3^2 " name_class(4)="i " name_class(5)="S6^5 " name_class(6)="S6 " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="E_g " ir_ram(2)="R" char_mat(2,2)=CMPLX(-0.5d0,sqr3d2) char_mat(2,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(2,5)=CMPLX(-0.5d0,sqr3d2) char_mat(2,6)=CMPLX(-0.5d0,-sqr3d2) name_rap(3)="E_g*" ir_ram(3)="R" char_mat(3,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,3)=CMPLX(-0.5d0,sqr3d2) char_mat(3,5)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,6)=CMPLX(-0.5d0,sqr3d2) name_rap(4)="A_u " ir_ram(4)="I" char_mat(4,4)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,6)=(-1.d0,0.d0) name_rap(5)="E_u " ir_ram(5)="I" char_mat(5,2)=CMPLX(-0.5d0,sqr3d2) char_mat(5,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(5,4)=(-1.d0,0.d0) char_mat(5,5)=CMPLX( 0.5d0,-sqr3d2) char_mat(5,6)=CMPLX( 0.5d0, sqr3d2) name_rap(6)="E_u*" ir_ram(6)="I" char_mat(6,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,3)=CMPLX(-0.5d0,sqr3d2) char_mat(6,4)=(-1.d0,0.d0) char_mat(6,5)=CMPLX( 0.5d0,sqr3d2) char_mat(6,6)=CMPLX( 0.5d0,-sqr3d2) ELSEIF (code_group==28) THEN ! ! T ! nclass_ref=4 name_class(2)="4C3 " name_class(3)="4C3' " name_class(4)="3C2 " name_rap(1)="A " ir_ram(1)="R" name_rap(2)="E " ir_ram(2)="R" char_mat(2,2)=CMPLX(-0.5d0, sqr3d2) char_mat(2,3)=CMPLX(-0.5d0,-sqr3d2) name_rap(3)="E* " ir_ram(3)="R" char_mat(3,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,3)=CMPLX(-0.5d0, sqr3d2) name_rap(4)="T " ir_ram(4)="I+R" char_mat(4,1)=( 3.0d0,0.d0) char_mat(4,2)=( 0.0d0,0.d0) char_mat(4,3)=( 0.0d0,0.d0) char_mat(4,4)=(-1.0d0,0.d0) ELSEIF (code_group==29) THEN ! ! T_h ! nclass_ref=8 name_class(2)="4C3 " name_class(3)="4C3' " name_class(4)="3C2 " name_class(5)="i " name_class(6)="4S6 " name_class(7)="4S6^5" name_class(8)="3s_h " name_rap(1)="A_g " ir_ram(1)="R" name_rap(2)="E_g " ir_ram(2)="R" char_mat(2,2)=CMPLX(-0.5d0, sqr3d2) char_mat(2,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(2,6)=CMPLX(-0.5d0, sqr3d2) char_mat(2,7)=CMPLX(-0.5d0,-sqr3d2) name_rap(3)="E_g*" ir_ram(3)="R" char_mat(3,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,3)=CMPLX(-0.5d0, sqr3d2) char_mat(3,6)=CMPLX(-0.5d0,-sqr3d2) char_mat(3,7)=CMPLX(-0.5d0, sqr3d2) name_rap(4)="T_g " ir_ram(4)="R" char_mat(4,1)=( 3.0d0,0.d0) char_mat(4,2)=( 0.0d0,0.d0) char_mat(4,3)=( 0.0d0,0.d0) char_mat(4,4)=(-1.0d0,0.d0) char_mat(4,5)=( 3.0d0,0.d0) char_mat(4,6)=( 0.0d0,0.d0) char_mat(4,7)=( 0.0d0,0.d0) char_mat(4,8)=(-1.0d0,0.d0) name_rap(5)="A_u " char_mat(5,5)=(-1.0d0,0.d0) char_mat(5,6)=(-1.0d0,0.d0) char_mat(5,7)=(-1.0d0,0.d0) char_mat(5,8)=(-1.0d0,0.d0) name_rap(6)="E_u " char_mat(6,2)=CMPLX(-0.5d0, sqr3d2) char_mat(6,3)=CMPLX(-0.5d0,-sqr3d2) char_mat(6,5)=(-1.0d0,0.d0) char_mat(6,6)=CMPLX( 0.5d0,-sqr3d2) char_mat(6,7)=CMPLX( 0.5d0, sqr3d2) char_mat(6,8)=(-1.0d0,0.d0) name_rap(7)="E_u*" char_mat(7,2)=CMPLX(-0.5d0,-sqr3d2) char_mat(7,3)=CMPLX(-0.5d0, sqr3d2) char_mat(7,5)=(-1.0d0,0.d0) char_mat(7,6)=CMPLX( 0.5d0, sqr3d2) char_mat(7,7)=CMPLX( 0.5d0,-sqr3d2) char_mat(7,8)=(-1.0d0,0.d0) name_rap(8)="T_u " ir_ram(8)="I" char_mat(8,1)=( 3.0d0,0.d0) char_mat(8,2)=( 0.0d0,0.d0) char_mat(8,3)=( 0.0d0,0.d0) char_mat(8,4)=(-1.0d0,0.d0) char_mat(8,5)=(-3.0d0,0.d0) char_mat(8,6)=( 0.0d0,0.d0) char_mat(8,7)=( 0.0d0,0.d0) ELSEIF (code_group==30) THEN ! ! T_d ! nclass_ref=5 name_class(2)="8C3 " name_class(3)="3C2 " name_class(4)="6S4 " name_class(5)="6s_d " name_rap(1)="A_1 G_1 P_1" ir_ram(1)="R" name_rap(2)="A_2 G_2 P_2" char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) name_rap(3)="E G_12 P_3" ir_ram(3)="R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 2.d0,0.d0) char_mat(3,4)=( 0.d0,0.d0) char_mat(3,5)=( 0.d0,0.d0) name_rap(4)="T_1 G_25 P_5" char_mat(4,1)=( 3.d0,0.d0) char_mat(4,2)=( 0.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) name_rap(5)="T_2 G_15 P_4" ir_ram(5)="I+R" char_mat(5,1)=( 3.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-1.d0,0.d0) ELSEIF (code_group==31) THEN ! ! O ! nclass_ref=5 name_class(2)="8C3 " name_class(3)="3C2 " name_class(4)="6C2 " name_class(5)="6C4 " name_rap(1)="A_1 " ir_ram(1)="R" name_rap(2)="A_2 " char_mat(2,4)=(-1.d0,0.d0) char_mat(2,5)=(-1.d0,0.d0) name_rap(3)="E " ir_ram(3)="R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 2.d0,0.d0) char_mat(3,4)=( 0.d0,0.d0) char_mat(3,5)=( 0.d0,0.d0) name_rap(4)="T_1 " ir_ram(4)="I" char_mat(4,1)=( 3.d0,0.d0) char_mat(4,2)=( 0.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) name_rap(5)="T_2 " ir_ram(5)="R" char_mat(5,1)=( 3.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,3)=(-1.d0,0.d0) char_mat(5,4)=(-1.d0,0.d0) ELSEIF (code_group==32) THEN ! ! O_h ! nclass_ref=10 name_class(2)="8C3 " name_class(3)="6C2' " name_class(4)="6C4 " name_class(5)="3C2 " name_class(6)="i " name_class(7)="6S4 " name_class(8)="8S6 " name_class(9)="3s_h " name_class(10)="6s_d " name_rap(1)="A_1g G_1 G_1+" ir_ram(1)="R" name_rap(2)="A_2g G_2 G_2+" char_mat(2,3)=(-1.d0,0.d0) char_mat(2,4)=(-1.d0,0.d0) char_mat(2,7)=(-1.d0,0.d0) char_mat(2,10)=(-1.d0,0.d0) name_rap(3)="E_g G_12 G_3+" ir_ram(3)="R" char_mat(3,1)=( 2.d0,0.d0) char_mat(3,2)=(-1.d0,0.d0) char_mat(3,3)=( 0.d0,0.d0) char_mat(3,4)=( 0.d0,0.d0) char_mat(3,5)=( 2.d0,0.d0) char_mat(3,6)=( 2.d0,0.d0) char_mat(3,7)=( 0.d0,0.d0) char_mat(3,8)=(-1.d0,0.d0) char_mat(3,9)=( 2.d0,0.d0) char_mat(3,10)=( 0.d0,0.d0) name_rap(4)="T_1g G_15' G_4+" char_mat(4,1)=( 3.d0,0.d0) char_mat(4,2)=( 0.d0,0.d0) char_mat(4,3)=(-1.d0,0.d0) char_mat(4,5)=(-1.d0,0.d0) char_mat(4,6)=( 3.d0,0.d0) char_mat(4,8)=( 0.d0,0.d0) char_mat(4,9)=(-1.d0,0.d0) char_mat(4,10)=(-1.d0,0.d0) name_rap(5)="T_2g G_25' G_5+" ir_ram(5)="R" char_mat(5,1)=( 3.d0,0.d0) char_mat(5,2)=( 0.d0,0.d0) char_mat(5,4)=(-1.d0,0.d0) char_mat(5,5)=(-1.d0,0.d0) char_mat(5,6)=( 3.d0,0.d0) char_mat(5,7)=(-1.d0,0.d0) char_mat(5,8)=( 0.d0,0.d0) char_mat(5,9)=(-1.d0,0.d0) name_rap(6)="A_1u G_1' G_1-" char_mat(6,6)=(-1.d0,0.d0) char_mat(6,7)=(-1.d0,0.d0) char_mat(6,8)=(-1.d0,0.d0) char_mat(6,9)=(-1.d0,0.d0) char_mat(6,10)=(-1.d0,0.d0) name_rap(7)="A_2u G_2' G_2-" char_mat(7,3)=(-1.d0,0.d0) char_mat(7,4)=(-1.d0,0.d0) char_mat(7,6)=(-1.d0,0.d0) char_mat(7,8)=(-1.d0,0.d0) char_mat(7,9)=(-1.d0,0.d0) name_rap(8)="E_u G_12' G_3-" char_mat(8,1)=( 2.d0,0.d0) char_mat(8,2)=(-1.d0,0.d0) char_mat(8,3)=( 0.d0,0.d0) char_mat(8,4)=( 0.d0,0.d0) char_mat(8,5)=( 2.d0,0.d0) char_mat(8,6)=(-2.d0,0.d0) char_mat(8,7)=( 0.d0,0.d0) char_mat(8,9)=(-2.d0,0.d0) char_mat(8,10)=( 0.d0,0.d0) name_rap(9)="T_1u G_15 G_4-" ir_ram(9)="I" char_mat(9,1)=( 3.d0,0.d0) char_mat(9,2)=( 0.d0,0.d0) char_mat(9,3)=(-1.d0,0.d0) char_mat(9,5)=(-1.d0,0.d0) char_mat(9,6)=(-3.d0,0.d0) char_mat(9,7)=(-1.d0,0.d0) char_mat(9,8)=( 0.d0,0.d0) name_rap(10)="T_2u G_25 G_5-" char_mat(10,1)=( 3.d0,0.d0) char_mat(10,2)=( 0.d0,0.d0) char_mat(10,4)=(-1.d0,0.d0) char_mat(10,5)=(-1.d0,0.d0) char_mat(10,6)=(-3.d0,0.d0) char_mat(10,8)=( 0.d0,0.d0) char_mat(10,10)=(-1.d0,0.d0) ELSE CALL errore('set_irr_rap','code number not allowed',1) END IF RETURN END !-------------------------------------------------------------------------- FUNCTION is_complex(code) !-------------------------------------------------------------------------- ! This function receives a code of the group and provide .true. or ! .false. if the 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 " F 13 "C_3v" F 23 "D_6h" F ! 4 "C_2 " F 14 "C_4v" F 24 "D_2d" F ! 5 "C_3 " T 15 "C_6v" F 25 "D_3d" F ! 6 "C_4 " T 16 "C_2h" F 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 " F 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 LOGICAL :: complex_aux(32) data complex_aux / .FALSE., .FALSE., .FALSE., .FALSE., .TRUE. , & .TRUE. , .TRUE. , .FALSE., .FALSE., .FALSE., & .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., & .FALSE., .TRUE. , .TRUE. , .TRUE. , .FALSE., & .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., & .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= complex_aux(code) RETURN END FUNCTION is_complex