C Example program using symmtery library routines
C MSYMLB and SETLIM.
C
C The program gets the limits of the CCP4 asymmetric
C unit for each spacegroup no. using the library
C routine SETLIM.
C The routine MSYMLB is used to get the spacegroup
C name from the number. This should be replaced
C with a call to MSYMLB3 after version 3.5 of CCP4.
C
C To run: compile as "symm_get_box" and run the
C executable (no arguments or input files
C required).
C
C Output consists of the spacegroup name
C corresponding to the number (and real space
C asymmetric unit limits, if defined) for each of the
C 230 spacegroups.
C
C Note that the asymmetric unit definition
C is not unique; these are the CCP4 definitions.
C
PROGRAM SYMM_GET_BOX
C
IMPLICIT NONE
C
INTEGER I,J,LSPGRP,NSYMP,NSYM
REAL XYZLIM(2,3),RSYM(4,4,200)
CHARACTER*20 NAMSPG,NAMPG
C
C CCP4 initialisations
C
CALL CCPFYP
C
C This loop steps through all 230 spacegroups
C
DO 10 LSPGRP = 1,230
C
C Clear the spacegroup names
C
NAMSPG = ' '
NAMPG = ' '
C
C Set the limits to zero
C
DO 20 I = 1,2
DO 30 J = 1,3
XYZLIM(I,J) = 0.0
30 CONTINUE
20 CONTINUE
C
C Call MSYMLB to get the s/grp name
C
CALL MSYMLB(11,LSPGRP,NAMSPG,NAMPG,NSYMP,
+ NSYM,RSYM)
C
C Call SETLIM to get the limits for this s/grp
C
CALL SETLIM(LSPGRP,XYZLIM)
C
C Write out the spacegroup information
C
WRITE(6,FMT=9040)
WRITE(6,FMT=9010) LSPGRP, NAMSPG, NSYM, NAMPG, NSYMP
9010 FORMAT (I3,': Spacegroup name ',A20,/,
+ ' has ',I3,' symmetry operators',//,
+ 'The corresponding pointgroup is ',A20,/,
+ ' with ',I3,' primitive operators',//)
C
C If xyzlim(1,1) = -1.0 then s/grp is unrecognised
C
IF (XYZLIM(1,1).EQ.-1.0) THEN
C
WRITE(6,FMT=9020)
9020 FORMAT ('This spacegroup is not recognised by SETLIM')
C
C Otherwise, print the limits
C
ELSE
C
WRITE(6,FMT=9030) XYZLIM(2,1),XYZLIM(2,2), XYZLIM(2,3)
9030 FORMAT ('Upper limits of the asymmetric unit are:',/
+ ' x : ',F8.3,' y : ',F8.3,' z : ',F8.3,/)
C
ENDIF
C
C Draw a line under this entry
C
WRITE(6,FMT=9040)
9040 FORMAT('-----------------------------------------------',/)
C
C Do the next spacegroup
C
10 CONTINUE
C
C End the program cleanly
C
CALL CCPERR (0, 'Normal termination')
C
END