69 lines
2.6 KiB
Fortran
69 lines
2.6 KiB
Fortran
C-----------------------------------------------------------------------
|
|
C Space group routine check of operators
|
|
C-----------------------------------------------------------------------
|
|
SUBROUTINE SGTRCF (M,RT,N,M2,LCENT,LAUENO,IER,LPT)
|
|
CHARACTER COUT*132
|
|
COMMON /IOUASC/ COUT(20)
|
|
DIMENSION RT(5,4,24)
|
|
DIMENSION ICENV(3,5),NCVT(7),JCVT(7)
|
|
DATA ICENV/0,0,0,0,6,6,6,0,6,6,6,0,6,6,6/
|
|
DATA NCVT/1,2,3,4,5,4,1/
|
|
DATA JCVT/1,1,2,3,4,1,1/
|
|
IER = 0
|
|
IRN = RT(5,2,N)
|
|
IRM = RT(5,2,M2)
|
|
IRX = MOD((IRN/144 + IRM/144),12)
|
|
IRY = MOD((IRN/12 + IRM/12),12)
|
|
IRZ = MOD(IRN + IRM,12)
|
|
NCV = NCVT(LCENT)
|
|
JCV = JCVT(LCENT)
|
|
DO 120 ICV = 1,NCV,JCV
|
|
IRX1 = MOD(IRX + ICENV(1,ICV),12)
|
|
IRY1 = MOD(IRY + ICENV(2,ICV),12)
|
|
IRZ1 = MOD(IRZ + ICENV(3,ICV),12)
|
|
C-----------------------------------------------------------------------
|
|
C Does this pair make a 1bar?
|
|
C-----------------------------------------------------------------------
|
|
M2Z = M2
|
|
IF (RT(5,1,N) + RT(5,1,M2) .EQ. 0) M2Z = 1
|
|
C-----------------------------------------------------------------------
|
|
C No.
|
|
C-----------------------------------------------------------------------
|
|
IF (RT(3,3,N) + RT(3,3,M2Z) .LE. 0) IRZ1 = 0
|
|
C-----------------------------------------------------------------------
|
|
C Is this an operator operating along the face diagonal?
|
|
C-----------------------------------------------------------------------
|
|
IF (LAUENO .LE. 3 .OR. M .NE. 4) GO TO 100
|
|
C-----------------------------------------------------------------------
|
|
C Yes.
|
|
C-----------------------------------------------------------------------
|
|
IRX1 = MOD(IRX1 + IRY1,12)
|
|
IRY1 = 0
|
|
GO TO 110
|
|
100 CONTINUE
|
|
C-----------------------------------------------------------------------
|
|
C No.
|
|
C-----------------------------------------------------------------------
|
|
IF (RT(1,1,N) + RT(1,1,M2Z) .LE. 0) IRX1 = 0
|
|
IF (RT(2,2,N) + RT(2,2,M2Z) .LE. 0) IRY1 = 0
|
|
110 CONTINUE
|
|
TOTTR = 144*IRX1 + 12*IRY1 + IRZ1
|
|
IF (TOTTR .EQ. 0) RETURN
|
|
120 CONTINUE
|
|
CONTINUE
|
|
IF (LPT .GE. 0) THEN
|
|
WRITE (COUT,10000) RT(5,2,N),RT(5,2,M2),
|
|
$ TOTTR,IRX,IRY,IRZ,RT(5,1,N),RT(5,1,M2)
|
|
CALL GWRITE (LPT,' ')
|
|
ENDIF
|
|
IER = 18
|
|
IF (LPT .GE. 0) THEN
|
|
WRITE (COUT,11000) M,N,M2
|
|
CALL GWRITE (LPT,' ')
|
|
ENDIF
|
|
RETURN
|
|
10000 FORMAT (3F10.1,3I5,2F10.1)
|
|
11000 FORMAT (' Operator',I2,' generates matrix',I3,' which has a',
|
|
$ ' translation conflict',2I3)
|
|
END
|