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

77 lines
3.0 KiB
Fortran

C-----------------------------------------------------------------------
C Routine to read or write the alignment angles from IDATA.DA
C
C The call is CALL ANGRW (IRDWRT,NANG,NUM,NRECS,IOFF) where
C IRDWRT is 0/1 for read or write;
C NANG is the number of angles to be used;
C NUM is the number of reflections;
C NRECS is the record number to start the operation;
C IOFF is the offset in the ACOUNT array.
C The ACOUNT array is equivalenced to the angle arrays as :--
C DIMENSION THETAS(NSIZE),OMEGAS(NSIZE),CHIS(NSIZE),PHIS(NSIZE),
C $ ICNT(NSIZE),
C $ THETAP(NSIZE),OMEGAP(NSIZE),CHIP(NSIZE),PHIP(NSIZE)
C EQUIVALENCE (ACOUNT( 1),THETAS(1)),
C $ (ACOUNT( NSIZE*1),OMEGAS(1)),
C $ (ACOUNT(2*NSIZE+1),CHIS(1)),
C $ (ACOUNT(3*NSIZE+1),PHIS(1)),
C $ (ACOUNT(4*NSIZE+1),ICNT(1)),
C $ (ACOUNT(5*NSIZE+1),THETAP(1)),
C $ (ACOUNT(6*NSIZE+1),OMEGAP(1)),
C $ (ACOUNT(7*NSIZE+1),CHIP(1)),
C $ (ACOUNT(8*NSIZE+1),PHIP(1))
C-----------------------------------------------------------------------
SUBROUTINE ANGRW (IRDWRT,NANG,NUM,NRECS,IOFF)
INCLUDE 'COMDIF'
C-----------------------------------------------------------------------
C Calculate the ACOUNT address offset and number of reads or writes
C-----------------------------------------------------------------------
NOFF = 0
IF (IOFF .EQ. 1) NOFF = 5*NSIZE
NRW = (NSIZE + 79)/80
NADD = NOFF
NREC = NRECS
C-----------------------------------------------------------------------
C Read data from the file
C-----------------------------------------------------------------------
IF (IRDWRT .EQ. 0) THEN
DO 110 N = 1,NANG
NADD1 = NADD + 1
NADD2 = NADD + 80
DO 100 J = 1,NRW
IF (N .EQ. 1 .AND. J .EQ. 1) THEN
READ (ISD,REC=NREC) NUM,(ACOUNT(I),I = NADD1,NADD2)
ELSE
READ (ISD,REC=NREC) (ACOUNT(I),I = NADD1,NADD2)
ENDIF
NREC = NREC + 1
NADD1 = NADD2 + 1
NADD2 = NADD2 + 80
IF (NADD2 .GT. NADD+NSIZE) NADD2 = NADD + NSIZE
100 CONTINUE
NADD = NADD + NSIZE
110 CONTINUE
C-----------------------------------------------------------------------
C Write data to the file
C-----------------------------------------------------------------------
ELSE
DO 130 N = 1,NANG
NADD1 = NADD + 1
NADD2 = NADD + 80
DO 120 J = 1,NRW
IF (N .EQ. 1 .AND. J .EQ. 1) THEN
WRITE (ISD,REC=NREC) NUM,(ACOUNT(I),I = NADD1,NADD2)
ELSE
WRITE (ISD,REC=NREC) (ACOUNT(I),I = NADD1,NADD2)
ENDIF
NREC = NREC + 1
NADD1 = NADD2 + 1
NADD2 = NADD2 + 80
IF (NADD2 .GT. NADD+NSIZE) NADD2 = NADD + NSIZE
120 CONTINUE
NADD = NADD + NSIZE
130 CONTINUE
ENDIF
RETURN
END