C LAST UPDATE: 
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C
C**************************
C**     LFN_NODHIST      **
C**************************
C
CD-Routine: Get Nodals Histogram Data - LFN_NODHIST
C This routine is used to return a histogram of the number of non-spatially
C overlapped nodal spots (cumulative) as a function of nodal index using
C the data in the current Laue Reflection List (LRL).
CD-end
CD-Fortran:
      SUBROUTINE LFN_NODHIST (NNODS, MAXDIM, NODMAX)
CD-end
      INCLUDE 'implicit_none.finc'
C
C Purpose: Get histogram for numbers of non-spatially-overlapping nodal spots
C
C Author:  John W. Campbell, September 1994
C
C Arguments:
C
      INTEGER MAXDIM
      INTEGER NNODS(MAXDIM)
      INTEGER NODMAX

C
CD-Parameters:
C NNODS(*)    i  (W)  Cumulative numbers of non-spatially overlapping nodal 
C                     spots as a function of nodal index. Zero values will
C                     be returned if no spot list has been generated.
C MAXDIM      i  (R)  Maximum dimension of NNODS array; if this is less
C                     than NODMAX then only the first MAXDIM values will
C                     be returned in NNODS.
C NODMAX      i  (W)  Returns the maximum nodal index as defined for the
C                     Laue Reflection List (LRL)
CD-end
C
C====== Parameter statements
C 

C
C====== GLOBALS:
C

C
C====== FUNCTION TYPES:
C

C
C====== LOCALS:
C
      LOGICAL SPOV
      LOGICAL CLOS
      INTEGER I
      INTEGER IERR
      INTEGER ISPOT
      INTEGER NSPOTS
      INTEGER NOD_IDX
      INTEGER MAXLIM

C     LOGICAL SPOV         !Spatial overlap flag
C     LOGICAL CLOS         !Spatially too close flag
C     INTEGER I            !Temp/loop variable
C     INTEGER IERR         !Error flag
C     INTEGER ISPOT        !Spot index in spot list
C     INTEGER NSPOTS       !No. of spots in spot list
C     INTEGER NOD_IDX      !Nodal index of current spot
C     INTEGER MAXLIM       !Maximum limit used for nodal index
C
C-------------------------------------------------------------------------------
C
C====== Initialise
C
      IF (MAXDIM.LE.0) RETURN
      CALL LRL_NODMAX (NODMAX)
      MAXLIM = NODMAX
      IF (MAXLIM.GT.MAXDIM) MAXLIM = MAXDIM
      DO 10 I = 1, MAXDIM
         NNODS(I) = 0
10    CONTINUE
      CALL LRL_NUMSPOTS (NSPOTS)
      IF (NSPOTS.LE.0) RETURN
C
C====== Examine spots and accumulate totals
C
      DO 20 ISPOT = 1, NSPOTS
         CALL LRL_GET_NIDX (ISPOT, NOD_IDX, IERR)
         CALL LRL_GET_OVLP (ISPOT, SPOV, CLOS, IERR)
         IF (SPOV) GO TO 20
         IF (NOD_IDX.LE.MAXLIM) NNODS(NOD_IDX) = NNODS(NOD_IDX) + 1
20    CONTINUE
C
C====== Now get cumulative totals
C
      DO 30 I = 1 , MAXLIM - 1
         NNODS(I+1) = NNODS(I+1) + NNODS(I)
30    CONTINUE
      RETURN
      END
