Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

120 lines
3.4 KiB

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 GETCRN (MXND, MXCORN, MLN, LNODES, NCORN, LCORN,
& ANGLE, XN, YN, LXN, NLOOP, N1, ONLYC, PPOSBL, GRAPH, ERR)
C***********************************************************************
C SUBROUTINE GETCRN = SETS UP ALL THE POSSIBLE CORNER (OR NON-SIDE)
C LOCATIONS IN THE MESH
C***********************************************************************
DIMENSION LNODES (MLN, MXND), LCORN (MXCORN), ANGLE (MXND)
DIMENSION XN (MXND), YN (MXND), LXN (4, MXND), X(1), Y(1)
LOGICAL ONLYC, GRAPH, PPOSBL, ERR
ERR = .FALSE.
C COUNT THE CURRENT "POSSIBLE NON-SIDES" STARTING AT THE I COUNTER
NODE = N1
NOLD = N1
KOUNTC = 0
KOUNT = 0
NCORN = 0
PPOSBL = .TRUE.
100 CONTINUE
KOUNT = KOUNT + 1
IF (KOUNT .GT. NLOOP) THEN
CALL MESSAGE('PROBLEM IN GETCRN WITH UNCLOSED LOOP')
ERR = .TRUE.
GOTO 120
ENDIF
C CHECK IF A PRIMITIVE IS EVEN POSSIBLE HERE
IF ( LNODES (6, NODE) .GT. 4) PPOSBL = .FALSE.
C CHECK FOR A POSSIBLE "NON - SIDE" NODE
IF (ONLYC) CALL NDSTAT (NODE, LXN (1, NODE), ANGLE (NODE), ISTAT)
C A NEW "POSSIBLE NON-SIDE" NODE HAS BEEN FOUND
IF ( ( (ONLYC) .AND. (ISTAT .EQ. 1) ) .OR.
& ( (.NOT. ONLYC) .AND. (LNODES (6, NODE) .NE. 3) ) ) THEN
IF (GRAPH) THEN
ISQR = NODE
X(1) = XN (ISQR)
Y(1) = YN (ISQR)
IF ((ONLYC) .AND. (ISTAT .EQ. 1)) THEN
CALL SYMBOL (1, X, Y, 'DIAMND')
ELSEIF (.NOT. ONLYC) THEN
IF (LNODES (6, NODE) .EQ. 1) THEN
CALL SYMBOL (1, X, Y, 'DIAMND')
ELSEIF (LNODES (6, NODE) .EQ. 2) THEN
CALL SYMBOL (1, X, Y, 'CENTRX')
ELSEIF (LNODES (6, NODE) .EQ. 4) THEN
CALL SYMBOL (1, X, Y, 'TRINGL')
ELSE
CALL SYMBOL (1, X, Y, 'CIRCLE')
ENDIF
ENDIF
CALL SFLUSH
ENDIF
C TOO MANY "NON-SIDES" HAVE BEEN FOUND - JUST PICK ONE AND GO
IF (NCORN .EQ. MXCORN) THEN
PPOSBL = .FALSE.
DO 110 J = 1, NCORN
IF (LNODES (6, LCORN (J)) .EQ. 1) THEN
NODE = J
IF (GRAPH) CALL LCOLOR ('WHITE')
GOTO 120
ENDIF
110 CONTINUE
NODE = LCORN (1)
IF (GRAPH) CALL LCOLOR ('WHITE')
GOTO 120
ENDIF
C INPUT THIS "NON-SIDE"
NCORN = NCORN + 1
LCORN (NCORN) = NODE
C ADD UP THE NUMBER OF NODES FROM THE LAST "NON-SIDE"
IF (NCORN .GT. 1) THEN
LNODES (7, LCORN (NCORN - 1)) = KOUNTC + 1
ELSE
KKC = KOUNTC + 1
ENDIF
KOUNTC = 0
C THIS IS A SIDE - JUST CONTINUE
ELSE
KOUNTC = KOUNTC + 1
ENDIF
C CHECK FOR COMPLETION OF THE LOOP
NODE = LNODES (3, NODE)
IF (NODE .NE. NOLD) GOTO 100
C GET THE FIRST CORNER'S DISTANCE FROM PREVIOUS CORNER CORRECT
IF (NCORN .GE. 1) LNODES (7, LCORN (NCORN ) ) = KKC + KOUNTC
120 CONTINUE
RETURN
END