      SUBROUTINE LOC(I,J,IR,N,M,MS)
C
C     PURPOSE
C        COMPUTE A VECTOR SUBSCRIPT FOR AN ELEMENT IN A MATRIX OF
C        SPECIFIED STORAGE MODE
C
C     DESCRIPTION OF PARAMETERS
C        I   - ROW NUMBER OF ELEMENT
C        J   - COLUMN NUMBER OF ELEMENT
C        IR  - RESULTANT VECTOR SUBSCRIPT
C        N   - NUMBER OF ROWS IN MATRIX
C        M   - NUMBER OF COLUMNS IN MATRIX
C        MS  - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX
C               0 - GENERAL
C               1 - SYMMETRIC
C               2 - DIAGONAL
C     REMARKS
C        NONE
C
C     SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C        NONE
C
C     METHOD
C        MS=0   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N*M ELEMENTS
C               IN STORAGE (GENERAL MATRIX)
C        MS=1   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N*(N-1)/2 IN 
C               STORAGE (UPPER TRIANGLE OF SYMMETRIC MATRIX). IF
C               ELEMENT IS IN LOWER TRIANGULAR PORTION, SUBSCRIPT IS
C               CORRESPONDING ELEMENT IN UPPER TRIANGLE
C        MS=2   SUBSCRIPT IS COMPUTED FOR A MATRIX WITH N ELEMENTS 
C               IN STORAGE (DIAGONAL ELEMENTS OF DIAGONAL MATRIX).
C               IF ELEMENT IS NOT ON DIAGONAL (AND THEREFORE NOT IN 
C               STORAGE), IR IS SET TO ZERO
C
C     ..............................................................
C
      IX=I
      JX=J
      IF(MS-1) 10,20,30
   10 IRX=N*(JX-1)+IX
      GO TO 36
   20 IF(IX-JX) 22,24,24
   22 IRX=IX+(JX*JX-JX)/2
      GO TO 36
   24 IRX=JX+(IX*IX-IX)/2
      GO TO 36
   30 IRX=0
      IF(IX-JX) 36,32,36
   32 IRX=IX
   36 IR=IRX
      RETURN
      END 
