C    Copyright(C) 1999-2020 National Technology & Engineering Solutions
C    of Sandia, LLC (NTESS).  Under the terms of Contract DE-NA0003525 with
C    NTESS, the U.S. Government retains certain rights in this software.
C
C    See packages/seacas/LICENSE for details

      SUBROUTINE CONNOD (MXND, MLN, XN, YN, NUID, LXK, KXL, NXL, LXN,
     &   ANGLE, LNODES, NNN, KKK, LLL, NNNOLD, LLLOLD, N0, N1, N2,
     &   NODE, I, NLOOP, IAVAIL, NAVAIL, GRAPH, VIDEO, NOROOM, ERR)
C***********************************************************************

C  SUBROUTINE CONNOD = ADDS A NEW ELEMENT TO AN EXISTING NODE

C***********************************************************************

      DIMENSION XN (MXND), YN (MXND), NUID (MXND)
      DIMENSION LXK (4, MXND), KXL (2, 3*MXND)
      DIMENSION NXL (2, 3*MXND), LXN (4, MXND)
      DIMENSION ANGLE (MXND), LNODES (MLN, MXND)

      LOGICAL GRAPH, VIDEO, ERR, NOROOM

      ERR = .FALSE.

      NLOOP = NLOOP-2

C  TAKE CARE OF A COUNTERCLOCKWISE CONNECTION

      IF (LNODES (3, N2) .EQ. NODE) THEN
         LNODES (3, N0) = NODE
         LNODES (2, NODE) = N0
         LNODES (4, N1) = - 2
         LNODES (4, N2) = - 2
         ANGLE (N1) = 0.
         ANGLE (N2) = 0.
         LLL = LLL+1
         KKK = KKK+1
         NXL (1, LLL) = NODE
         NXL (2, LLL) = N0

C  MAKE THE NEW ELEMENT

         LXK (1, KKK) = LNODES (5, N0)
         LXK (2, KKK) = LNODES (5, N1)
         LXK (3, KKK) = LNODES (5, N2)
         LXK (4, KKK) = LLL

         CALL ADDKXL (MXND, KXL, KKK, LLL)
         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, N0))
         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, N1))
         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, N2))

         LNODES (5, N0) = LLL
         IF ((GRAPH) .OR. (VIDEO)) THEN
            CALL D2NODE (MXND, XN, YN, N0, NODE)
            CALL SFLUSH
            IF (VIDEO) CALL SNAPIT (1)
         ENDIF
         I = NODE

C  TAKE CARE OF A CLOCKWISE CONNECTION

      ELSE IF (LNODES (2, N0) .EQ. NODE) THEN
         LNODES (3, NODE) = N2
         LNODES (2, N2) = NODE
         LNODES (4, N0) = - 2
         LNODES (4, N1) = - 2
         ANGLE (N0) = 0.
         ANGLE (N1) = 0.
         LLL = LLL+1
         KKK = KKK+1
         NXL (1, LLL) = NODE
         NXL (2, LLL) = N2

C  MAKE THE NEW ELEMENT

         LXK (1, KKK) = LNODES (5, NODE)
         LXK (2, KKK) = LNODES (5, N0)
         LXK (3, KKK) = LNODES (5, N1)
         LXK (4, KKK) = LLL

         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, NODE))
         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, N0))
         CALL ADDKXL (MXND, KXL, KKK, LNODES (5, N1))
         CALL ADDKXL (MXND, KXL, KKK, LLL)

         LNODES (5, NODE) = LLL

         IF ((GRAPH) .OR. (VIDEO)) THEN
            CALL D2NODE (MXND, XN, YN, NODE, N2)
            CALL SFLUSH
            IF (VIDEO) CALL SNAPIT (1)
         ENDIF
         I = N2

      ELSE
         CALL MESSAGE('PROBLEM HANDLING CONNECTION IN CONNOD')
         CALL MESSAGE('CONNECTION DOES NOT FORM A SIMPLE CORNER')
         ERR = .TRUE.
         GOTO 100
      ENDIF
      CALL MARKSM (MXND, MLN, LXK, KXL, NXL, LXN, LNODES, N1, ERR)
      IF (ERR) GOTO 100
      CALL MARKSM (MXND, MLN, LXK, KXL, NXL, LXN, LNODES, N2, ERR)
      IF (ERR) GOTO 100
      CALL MARKSM (MXND, MLN, LXK, KXL, NXL, LXN, LNODES, NODE, ERR)
      IF (ERR) GOTO 100

      CALL FIXLXN (MXND, LXN, NXL, NUID, NAVAIL, IAVAIL, NNN, LLL,
     &   NNNOLD, LLLOLD, ERR, NOROOM)
      IF (ERR) GOTO 100
      LLLOLD = LLL
      NNNOLD = NNN

  100 CONTINUE

      RETURN

      END
