Files
sics/difrac/nexseg.f
2000-02-07 10:38:55 +00:00

59 lines
1.9 KiB
Fortran

C-----------------------------------------------------------------------
C This subroutine gets the next DH set for automatic data collection
C-----------------------------------------------------------------------
SUBROUTINE NEXSEG
INCLUDE 'COMDIF'
DIMENSION ISET(25)
IUPDWN = 1
READ (IID,REC=4) ICENT,NUMDH,(SCRAP,I = 1,48),NSYM,LSET,ISET
C-----------------------------------------------------------------------
C IHO(5) = 1 means pointer mode, i.e. typed in DH matrices.
C-----------------------------------------------------------------------
IF (IHO(5) .EQ. 1) THEN
IHO(6) = IHO(6) + 1
NHO = IHO(6)
IF (NHO .GT. 25) THEN
NSET = 0
RETURN
ENDIF
NSET = ISET(NHO)
IF (NSET .EQ. 0) RETURN
NMSEG = 1
MSET = 1
IF (NSET .LT. 0) MSET = -1
IF (NSET .LT. 0) NSET = -NSET
DO 100 I = 1,3
DO 100 J = 1,3
IDH(8,I,J) = JRT(I,J,NSET)*MSET
100 CONTINUE
NSET = NSET*MSET
C-----------------------------------------------------------------------
C Normal sequence of sets. NSYM is the max no. of sets (+/-).
C If end of data collection set NSET = 0
C-----------------------------------------------------------------------
ELSE
IF (NSET .EQ. -NSYM) THEN
NSET = 0
RETURN
C-----------------------------------------------------------------------
C If a + set make it -; if a - set get the next + set.
C-----------------------------------------------------------------------
ELSE IF (NSET .GE. 0) THEN
NSET = -NSET
NMSEG = 1
DO 110 I = 1,3
DO 110 J = 1,3
IDH(8,I,J) = -IDH(8,I,J)
110 CONTINUE
ELSE
NSET = 1 - NSET
DO 120 I = 1,3
DO 120 J = 1,3
IDH(8,I,J) = JRT(I,J,NSET)
120 CONTINUE
NMSEG = 1
ENDIF
ENDIF
RETURN
END