C ********************************************** C SUBROUTINE TSTRJM ====*====3====*====4====*====5====*====6====*====7 C C SPHERICAL HARMONICS(J/2) ARE TRANSFORMED TO CUBIC(IL.GE.1) C HARMINICS OF DOUBLE REPRESENTATION C 2000/01/11 Akira Yanase C C C---*----1----*----2----*----3----*----4----*----5----*----6----*----7 SUBROUTINE TSTRJM(JJ,U,KP,INS) IMPLICIT REAL*8(A-H,O-Z) COMPLEX*16 SN,J3HM COMMON/SPG2/IL,NGNG,IIGG(48),JV(2,3,48) COMMON/SPG6/SN(2,2,24),IDF(24,24) COMMON/JEQ3/J3HM(4,4,24) SAVE /SPG2/,/SPG6/,/JEQ3/,TC,TH,NDIMC,NDIMH COMPLEX*16 U(100),WD(24),WE(4,24),CW,WW COMPLEX*16 JJHM(22,22,24) DIMENSION EULER(3,24) INTEGER ICREAL(2,3,24) INTEGER ICM(16,22,22),K1M(22,22),K2M(22,22),K3M(22,22),ISM(22,22) DIMENSION IC(16),KP(100),INS(4,24) INTEGER TC(24),TH(12),NDIMC(3),NDIMH(3) DATA TC/ & 1,2,2,2,3,3,3,3,3,3,3,3, & 2,2,2,2,2,2,4,4,4,4,4,4/ DATA TH/ & 1,6,3,2,3,6,2,2,2,2,2,2/ DATA NDIMC/ & 2,2,4/ DATA NDIMH/ & 2,2,2/ PAI=4.D0*DATAN(1.D0) CALL SPINM4 C IF(IL.GE.1) THEN CALL EULERC(ICREAL,EULER) JRCH=1 NG=24 ELSE WRITE(6,*) ' This TSTRJM is only for cubic group' STOP END IF IPR=0 JDIM=JJ+1 DO 31 J=1,JDIM DO 31 K=1,JDIM MA=JJ+2-2*J MB=JJ+2-2*K CALL TSRMHI(JJ,MA,MB,K1,K2,K3,IS,IC,IPR) DO 32 II=1,16 ICM(II,J,K)=IC(II) 32 CONTINUE K1M(J,K)=K1 K2M(J,K)=K2 K3M(J,K)=K3 ISM(J,K)=IS 31 CONTINUE DO 10 I=1,NG C WRITE(6,660) (EULER(K,I),K=1,3) C 660 FORMAT(1H ,3F10.5) CB=COS(EULER(2,I)) W1=COS(EULER(2,I)*0.5D0) W3=SIN(EULER(2,I)*0.5D0) DO 20 J=1,JDIM DO 21 K=1,JDIM MA=JJ+2-2*J MB=JJ+2-2*K WW=0.0 DO 22 II=1,16 IF(ICM(II,J,K).NE.0) THEN WW=WW+ICM(II,J,K)*(CB**(II-1)) END IF 22 CONTINUE WW=((WW*K1M(J,K))/K2M(J,K))*SQRT(DBLE(K3M(J,K))) IF(ISM(J,K).EQ.1) THEN WW=WW*W1 ELSE IF(ISM(J,K).EQ.3) THEN WW=WW*W3 END IF CA=COS(EULER(1,I)*0.5D0*MA) CC=COS(EULER(3,I)*0.5D0*MB) SA=SIN(EULER(1,I)*0.5D0*MA) SC=SIN(EULER(3,I)*0.5D0*MB) JJHM(J,K,I)=DCMPLX(CA,-SA)*DCMPLX(CC,-SC)*WW 21 CONTINUE 20 CONTINUE 10 CONTINUE ND1=0 IW=0 NJR=3 DO 801 JR=1,NJR NDIM=NDIMC(JR) C C CHARCTER TEST C WB=0.0D0 DO 204 IG=1,NG CL=JJ+1 IF(IG.EQ.1) GO TO 201 IF(JRCH.EQ.1) XX=PAI/TC(IG) CL=SIN((JJ+1)*XX)/SIN(XX) 201 CONTINUE C WRITE(6,693) L,IG,CL C 693 FORMAT(2I5,F8.4) IF(ABS(CL).LT.0.001D0) GO TO 204 WA=0.0D0 DO 205 IN=1,NDIM IF(JRCH.EQ.1) THEN IF(JR.EQ.1.OR.(JR.EQ.2.AND.IG.LE.12)) THEN WA=WA+DCONJG(SN(IN,IN,IG)) ELSE IF(JR.EQ.2.AND.IG.GE.13) THEN WA=WA-DCONJG(SN(IN,IN,IG)) ELSE IF(JR.EQ.3) THEN WA=WA+DCONJG(J3HM(IN,IN,IG)) ELSE WRITE(6,*) ' SOMETING WRONG IN TSTRJM' STOP END IF ELSE WRITE(6,*) ' SOMETING WRONG IN TSTRJM' STOP END IF 205 CONTINUE C WRITE(6,691) WA,CL C 691 FORMAT(8F10.4) IF(ABS(WA).LT.0.001D0) GO TO 204 WB=WB+CL*WA 204 CONTINUE WB=WB/NG NI=WB+0.5D0 C WRITE(6,690) L,JR,NI C 690 FORMAT(16I5) IF(NI.EQ.0) GO TO 801 C C PROJECTION OPERATOR C NC=1 NB=1 IB=1 150 CONTINUE MB=JJ-2*(IB-1) C WRITE(6,695) JJ,JR,NI,MB,NC,NB C 695 FORMAT(' J=',I4,' JR=',I4,' NI=',6I4) DO 101 IA=1,JJ+1 WD(IA)=0.0D0 DO 104 IG=1,NG IF(ABS(JJHM(IA,IB,IG)).LE.0.000001D0) GO TO 104 IF(JRCH.EQ.1) THEN IF(JR.EQ.1.OR.(JR.EQ.2.AND.IG.LE.12)) THEN WD(IA)=WD(IA)+JJHM(IA,IB,IG)*DCONJG(SN(NC,NB,IG)) ELSE IF(JR.EQ.2.AND.IG.GE.13) THEN WD(IA)=WD(IA)-JJHM(IA,IB,IG)*DCONJG(SN(NC,NB,IG)) ELSE IF(JR.EQ.3) THEN WD(IA)=WD(IA)+JJHM(IA,IB,IG)*DCONJG(J3HM(NC,NB,IG)) END IF END IF 104 CONTINUE 101 CONTINUE C C ORTHOGONALITY TEST C IF(ND1.EQ.0) GO TO 111 DO 112 ID=1,ND1 ID1=INS(1,ID) ID2=INS(2,ID) WW=0.0D0 DO 113 I=ID1,ID2 JU=KP(I) WW=WW+CONJG(U(I))*WD(JU) 113 CONTINUE IF(ABS(WW).LE.1.0D-4) GO TO 112 C write(6,*) ' NON ORTHOGONALITY TO',ID,WW C C ORTHOGONALIZATION C DO 121 I=INS(1,ID),INS(2,ID) JU=KP(I) WD(JU)=WD(JU)-U(I)*WW 121 CONTINUE C C 112 CONTINUE C C REGISTRATION C 111 ND1=ND1+1 INS(1,ND1)=IW+1 WA=0.0D0 IIWW=IW DO 114 IA=1,J+1 IF(ABS(WD(IA)).LT.1.0D-4) GO TO 114 IW=IW+1 KP(IW)=IA U(IW)=WD(IA) WA=WA+DBLE(U(IW)*DCONJG(U(IW))) 114 CONTINUE WA=SQRT(WA) IF(WA.GT.1.0D-4) GO TO 116 IW=IIWW ND1=ND1-1 GO TO 303 116 INS(2,ND1)=IW INS(3,ND1)=NC INS(4,ND1)=JR CW=1.0/WA DO 117 I=INS(1,ND1),INS(2,ND1) 117 U(I)=U(I)*CW C C PARTNER C DO 131 IA=1,JJ+1 WE(2,IA)=0 WE(3,IA)=0 WE(4,IA)=0 DO 137 I=INS(1,ND1),INS(2,ND1) DO 134 IG=1,NG DO 136 N=2,NDIM IF(JRCH.EQ.1) THEN IF(JR.EQ.1.OR.(JR.EQ.2.AND.IG.LE.12)) THEN WE(N,IA)=WE(N,IA)+JJHM(IA,KP(I),IG)*DCONJG(SN(N,1,IG))*U(I) ELSE IF(JR.EQ.2.AND.IG.GT.12) THEN WE(N,IA)=WE(N,IA)-JJHM(IA,KP(I),IG)*DCONJG(SN(N,1,IG))*U(I) ELSE IF(JR.EQ.3) THEN WE(N,IA)=WE(N,IA)+JJHM(IA,KP(I),IG)*DCONJG(J3HM(N,1,IG))*U(I) END IF END IF 136 CONTINUE 134 CONTINUE 137 CONTINUE 131 CONTINUE C C ORTHOGONARITY TEST FOR PARTNER C DO 141 ID=1,ND1 ID1=INS(1,ID) ID2=INS(2,ID) DO 142 N=2,NDIM WW=0.0D0 DO 143 I=ID1,ID2 JU=KP(I) WW=WW+CONJG(U(I))*WE(N,JU) 143 CONTINUE IF(ABS(WW).GE.1.0D-10) THEN WRITE(6,666) JR,N,ID,WW 666 FORMAT(' JR=',I3,' N=',I3 & ,' THIS PARTNER IS NONORTHOGONAL TO',I5,2D15.3) END IF 142 CONTINUE 141 CONTINUE C C REGISTRATION OF PARTNER C DO 138 N=2,NDIM ND1=ND1+1 INS(1,ND1)=IW+1 WA=0.0D0 DO 139 IA=1,JJ+1 IF(ABS(WE(N,IA)).LT.1.D-4) GO TO 139 IW=IW+1 KP(IW)=IA U(IW)=WE(N,IA) WA=WA+DBLE(U(IW)*DCONJG(U(IW))) 139 CONTINUE IF(WA.LT.1.0D-4) THEN WRITE(6,699) JJ,JR,N 699 FORMAT(' PARTNER BECOMES ZERO VECTOR',3I5) STOP END IF INS(2,ND1)=IW INS(3,ND1)=N INS(4,ND1)=JR WA=SQRT(WA) DO 140 I=INS(1,ND1),INS(2,ND1) U(I)=U(I)/WA 140 CONTINUE 138 CONTINUE NI=NI-1 IF(NI.EQ.0) GO TO 801 GO TO 302 C C FIND A NEW PIVOT C 303 CONTINUE C WRITE(6,693) C 693 FORMAT(' ZERO VECTOR') 302 CONTINUE IB=IB+1 IF(IB.LE.JDIM) GO TO 150 WRITE(6,601) 601 FORMAT(' STOP NEAR 302 IN TSTRLM') STOP 801 CONTINUE NW=IW RETURN END SUBROUTINE TSJMDS(JJ,U,KP,INS) COMPLEX*16 U(100) DIMENSION KP(100),INS(4,24) DO 2 I=1,JJ+1 WRITE(6,601) (INS(K,I),K=1,4),I 601 FORMAT(2I5,' N=',I2,' JR=',I2,I5) DO 3 I1=INS(1,I),INS(2,I) WRITE(6,602) JJ-2*(KP(I1)-1),U(I1) 602 FORMAT(' M=',I5,'/2 (',2F15.12,')') 3 CONTINUE 2 CONTINUE RETURN END C SUBROUTINE SPINM4 ====*====3====*====4====*====5====*====6====*====7 C C ROTATION MATRIIS FOR J=3/2 SPACE ARE PREPARED C FOR CUBIC OR HEXAGONAL OPERATIONS C C 1989.12.12 : A. YANASE C C---*----1----*----2----*----3----*----4----*----5----*----6----*----7 C SUBROUTINE SPINM4 C IMPLICIT REAL*8(A-H,O-Z) COMPLEX*16 J3HM COMMON/SPG2/IL,NG,IG(48),JV(2,3,48) COMMON/JEQ3/J3HM(4,4,24) SAVE /SPG2/,/JEQ3/ DIMENSION EULER(3,24) INTEGER ICREAL(2,3,24) INTEGER IC(16),ICM(16,4,4),K1M(4,4),K2M(4,4),K3M(4,4),ISM(4,4) C IF(IL.GE.1) THEN CALL EULERC(ICREAL,EULER) NN=24 ELSE CALL EULERH(ICREAL,EULER) NN=12 END IF IPR=0 DO 31 J=1,4 DO 31 K=1,4 MA=5-2*J MB=5-2*K CALL TSRMHI(3,MA,MB,K1,K2,K3,IS,IC,IPR) DO 32 II=1,16 ICM(II,J,K)=IC(II) 32 CONTINUE K1M(J,K)=K1 K2M(J,K)=K2 K3M(J,K)=K3 ISM(J,K)=IS 31 CONTINUE DO 10 I=1,NN C WRITE(6,660) (EULER(K,I),K=1,3) C 660 FORMAT(1H ,3F10.5) CB=COS(EULER(2,I)) W1=COS(EULER(2,I)*0.5D0) W3=SIN(EULER(2,I)*0.5D0) DO 20 J=1,4 DO 21 K=1,4 MA=5-2*J MB=5-2*K WW=0.0 DO 22 II=1,16 IF(ICM(II,J,K).NE.0) THEN WW=WW+ICM(II,J,K)*(CB**(II-1)) END IF 22 CONTINUE WW=((WW*K1M(J,K))/K2M(J,K))*SQRT(DBLE(K3M(J,K))) IF(ISM(J,K).EQ.1) THEN WW=WW*W1 ELSE WW=WW*W3 END IF CA=COS(EULER(1,I)*0.5D0*MA) CC=COS(EULER(3,I)*0.5D0*MB) SA=SIN(EULER(1,I)*0.5D0*MA) SC=SIN(EULER(3,I)*0.5D0*MB) J3HM(J,K,I)=DCMPLX(CA,-SA)*DCMPLX(CC,-SC)*WW IF(IL.LE.0) THEN J3HM(J,K,I+12)=J3HM(J,K,I) END IF 21 CONTINUE C WRITE(6,600) I,MA,(J3HM(J,K,I),K=1,4) C 600 FORMAT(2I3,'/2',4(' (',2F10.7,')')) C WRITE(11) (J3HM(J,K,I),K=1,4) 20 CONTINUE C WRITE(6,600) 10 CONTINUE RETURN END C SUBROUTINE SPNML4 ====*====3====*====4====*====5====*====6====*====7 C C MULITIPLICATIO TABLE OF SPIN HALF MATRIX C FOR CUBIC OR HEXAGONAL OPERATIONS C C 1988.10.10 : A. YANASE C C---*----1----*----2----*----3----*----4----*----5----*----6----*----7 SUBROUTINE SPNML4 IMPLICIT REAL*8(A-H,O-Z) COMPLEX*16 J3HM COMMON/SPG2/IL,NG,IG(48),JV(2,3,48) COMMON/JEQ3/J3HM(4,4,24) SAVE /SPG2/,/JEQ3/ COMPLEX*16 WW,WM(4,4) INTEGER IDF(24,24) IF(IL.GE.1) NN=24 IF(IL.LE.0) NN=12 DO 10 I=1,NN DO 20 J=1,NN C--- DO 31 K1=1,4 DO 33 K2=1,4 WW=0.0 DO 32 K=1,4 WW=WW+J3HM(K1,K,I)*J3HM(K,K2,J) 32 CONTINUE WM(K1,K2)=WW 33 CONTINUE C WRITE(6,600) I,J,3-2*K1,(WM(K1,K2),K2=1,2) C 600 FORMAT(2I3,I2,'/2',2(' (',2F10.7,')')) 31 CONTINUE C WRITE(6,600) C--- DO 41 K=1,NN INIT=0 DO 42 K1=1,4 DO 43 K2=1,4 IF(ABS(WM(K1,K2)).GT.0.000001D0) THEN IF(ABS(WM(K1,K2)-J3HM(K1,K2,K)).LT.0.000001D0) THEN INDS=1 ELSE IF(ABS(WM(K1,K2)+J3HM(K1,K2,K)).LT.0.000001D0) THEN INDS=-1 ELSE INDS=0 END IF IF(INDS.EQ.0) GO TO 41 IF(INIT.EQ.1.AND.INDS.NE.INDO) GO TO 41 INDO=INDS INIT=1 END IF 43 CONTINUE 42 CONTINUE IDF(I,J)=INDS*K IF(IL.LE.0) THEN IDF(I+12,J)=INDS*(K+12) IDF(I+12,J+12)=IDF(I,J) IDF(I,J+12)=INDS*(K+12) END IF GO TO 20 41 CONTINUE WRITE(6,900) I,J 900 FORMAT(' STOP AT 41 IN SPNMLT FOR',2I5) STOP 20 CONTINUE WRITE(6,610) (IDF(I,J),J=1,NN) 610 FORMAT(24I3) 10 CONTINUE RETURN END