Files
sics/difrac/sgtrcf.f
2000-02-18 15:54:23 +00:00

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