next up previous
Next: Comments on the example Up: INTRODUCTION TO CCSL Previous: An introductory example

Explanation of the Example

The user will naturally need some knowledge of FORTRAN. Throughout the manual, words which are parts of the FORTRAN programs will be written in capitals, as they usually are in the actual source code.

This main program should be recognisable to the user as FORTRAN, most of which he can interpret. The nine names which refer to routines of CCSL are:

PREFIN, SYMOP, SYMUNI, RECIP and SETGEN (all for input), OPSYM for symmetry output and GETGEN, MULBOX and INDFIX inside a loop generating $h,k,l$ values.

The routines GETGEN and MULBOX are of special interest. GETGEN fills the array H with the ``next" set of reflection indices $h,k,l$, eventually generating all reciprocal lattice vectors in the whole of an asymmetric unit of reciprocal space. MULBOX returns the value of the multiplicity of the reflection with indices $h,k,l$.

GETGEN is a FORTRAN SUBROUTINE (invoked by the word CALL), whereas MULBOX is a FORTRAN FUNCTION, in which a variable called MULBOX is set to the multiplicity. Every member of the CCSL except for a few BLOCK DATA SUBPROGRAMS is either a SUBROUTINE or a FUNCTION ; for ease of discussion we use the word ``routine" to mean ``either SUBROUTINE or FUNCTION".

GETGEN and MULBOX, then, are examples of crystallographic routines of CCSL. There are a variety of others, such as LOGICAL FUNCTION ISPABS(H) which determines whether $h,k,l$ in array H is or is not a space group absence, COMPLEX FUNCTION FCALC(H) which calculates a complex Structure Factor, and SUBROUTINE FOUR1Z which calculates one layer of a Fourier map.

INDFIX is a small utility routine of CCSL which takes the 3 numbers in the array H and ``fixes" them (converts them from REAL numbers to INTEGERS) into the integer array K. Utility routines exist for any operation which the authors have become tired of writing several times, such as matrix multiplication, finding a number in a given list, vector products, packing small integers into bigger ones, etc.

Except for OPSYM, the remaining CCSL routines in the example (PREFIN, SYMOP, RECIP, SYMUNI and SETGEN) are all involved in the input of data necessary to perform the later calculations and are examples of setting-up routines .

SYMOP
reads and interprets the data cards starting S for the space group symmetry.
RECIP
reads the C card for the unit cell parameters.
SYMUNI
makes a reciprocal space asymmetric unit, using the space group information.
SETGEN
sets up the system ready for repeated use of GETGEN. It needs to know the space group, the asymmetric unit and the cell parameters, so SYMOP, SYMUNI and RECIP must all have been obeyed before SETGEN.
OPSYM(1)
writes out the space group so found, in real space terms. (OPSYM(2) would use reciprocal space).

This leaves PREFIN. All CCSL programs which read a Crystal Data File should CALL PREFIN with the name of the program as argument at an early stage. It initialises various aspects of the system, and puts the crystal data into a form from which it can subsequently be read and interpreted as often as required.

The remainder of the main program is ordinary FORTRAN. Note that although the Library does the work of producing $h,k,l$ values and multiplicities, it is the main program which controls what is done with them and how they are printed. The labelled COMMON /IOUNIT/ has to be declared in the main program to direct the output of indices to the logical unit LPT which has been set up in PREFIN to be a printable file.

                    * * * S I M P L E * * *

         Cambridge Crystallography Subroutine Library     Mark 4.0

                    Job run at 15:59 on 19-AUG-92

 Crystal data file  SAMPLE.CRY opened

 Data read by PREFIN from file SAMPLE.CRY
        1 card   labelled C
        2 cards  labelled S

 Non-centrosymmetric space group with 12 operator(s)

 The group is generated by the 2 element(s) numbered:  2  7

 Friedel's law NOT assumed - hkl distinct from -h-k-l

 General equivalent positions are:
       0                   0                   0       + 

  1      x                   y                   z       
  2      y                  -x+y                1/6+z    
  3     -x+y                -x                  1/3+z    
  4     -x                  -y                  1/2+z    
  5     -y                   x-y                2/3+z    
  6      x-y                 x                  5/6+z    
  7     -y                  -x                  1/6-z    
  8     -x                  -x+y                1/3-z    
  9      x-y                -y                  -z       
 10     -x+y                 y                  1/2-z    
 11      x                   x-y                5/6-z    
 12      y                   x                  2/3-z    

 Indices  13  11  10 to be used for typical reflection inside asymmetric unit

 Asymmetric unit has  2 plane(s):
             k>=0        
             h>=k        

 Symmetry constraints on lattice parameters    b   =  a  
                                             alpha = 90
                                              beta = 90
                                             gamma = 120

 Real cell          7.0711    7.0711    8.6602   90.00   90.00  120.00
 Volume =   375.0001

 Reciprocal cell    0.1633    0.1633    0.1155   90.00   90.00   60.00
 Volume =   0.2667E-02

 Real cell quadratic products:
 A (=a  sqrd)     B            C   D (=b c cos alpha)  E          F 
     50.00003    50.00003    74.99992     0.00000     0.00000   -25.00002

 Reciprocal cell quadratic products:
 A*(=a* sqrd)     B*          C*  D*(=b*c*cos alpha*)  E*         F*
      0.02667     0.02667     0.01333     0.00000     0.00000     0.01333

 Matrices for transformation of vectors to orthogonal axes
 Real space:
    6.1237    0.0000    0.0000
   -3.5355    7.0711    0.0000
    0.0000    0.0000    8.6602

 Reciprocal space:
    0.1633    0.0816    0.0000
    0.0000    0.1414    0.0000
    0.0000    0.0000    0.1155

   h     k    l  Multiplicity
    1    1    2      12
    1    1    1      12
    1    1    0       6
    1    0    0       6
    2    0    0       6
    0    0   -1       2
    1    0   -1      12
    2    0   -1      12
    0    0   -2       2
    1    0   -2      12
    2    0   -2      12
    0    0   -3       2
    1    0   -3      12

 Number of reflections inside sphere =  108


next up previous
Next: Comments on the example Up: INTRODUCTION TO CCSL Previous: An introductory example
P.J. Brown - Institut Laue Langevin, Grenoble, FRANCE. e-mail brown@ill.fr