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.
 
 
 
 
 
 

119 lines
3.3 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 BCROSS (MXND, MLN, XN, YN, ZN, LXK, KXL, NXL, LXN,
& LNODES, I1, I2, J1, J2, NLOOP, BOK, LLL, XMIN, XMAX, YMIN,
& YMAX, ZMIN, ZMAX, DEV1, KREG, ERR)
C***********************************************************************
C SUBROUTINE BCROSS = CHECKS TO MAKE SURE THAT A BOUNDARY IS NOT
C BECOMING A PERMANENT CROSS
C***********************************************************************
DIMENSION XN(MXND), YN(MXND), ZN(MXND)
DIMENSION NXL(2, 3*MXND), LXN(4, MXND)
DIMENSION LXK(4, MXND), KXL(2, 3*MXND)
DIMENSION LNODES(MLN, MXND)
LOGICAL BOK, LCROSS, ERR
CHARACTER*3 DEV1
BOK = .TRUE.
ERR = .FALSE.
J0 = LNODES(2, J1)
J3 = LNODES(3, J2)
C IF J0 TO I2, OR J3 TO I1 IS TO BECOME A BOUNDARY LINE,
C THEN TEST THE CONNECTION TO SEE IF IT INTERSECTS ANY OTHER
C BOUNDARY LINES
KOUNT = 0
C FIRST TEST THE J0 TO I2 LINE
IF ((LXN(2, J0) .LT. 0) .AND. (LXN(2, I2) .LT. 0)) THEN
NODE1 = I1
NODE2 = I2
100 CONTINUE
NODE1 = NODE2
NODE2 = LNODES(3, NODE2)
IF ((LXN(2, NODE1) .LT. 0) .AND. (LXN(2, NODE2) .LT. 0)) THEN
IF (NODE2 .EQ. J0) THEN
CALL GETANG (MXND, MLN, XN, YN, LNODES, LXK, KXL,
& NXL, LXN, NODE1, J0, J1, ANGLE, ERR)
IF (ANGLE .LT. 0) THEN
BOK = .FALSE.
GOTO 130
ELSE
GOTO 110
ENDIF
ELSE
CALL INTSCT (XN(NODE1), YN(NODE1), XN(NODE2), YN(NODE2),
& XN(J0), YN(J0), XN(I2), YN(I2), U, W, LCROSS)
IF (LCROSS) THEN
BOK = .FALSE.
GOTO 130
ENDIF
ENDIF
ENDIF
KOUNT = KOUNT + 1
IF (KOUNT .LT. NLOOP) THEN
GOTO 100
ELSE
ERR = .TRUE.
GOTO 130
ENDIF
ENDIF
110 CONTINUE
C NEXT TEST THE J3 TO I1 LINE
KOUNT = 0
IF ((LXN(2, J3) .LT. 0) .AND. (LXN(2, I1) .LT. 0)) THEN
NODE1 = J3
NODE2 = LNODES(3, J3)
120 CONTINUE
NODE1 = NODE2
NODE2 = LNODES(3, NODE2)
IF ((LXN(2, NODE1) .LT. 0) .AND. (LXN(2, NODE2) .LT. 0)) THEN
IF (NODE2 .EQ. I1) THEN
CALL GETANG (MXND, MLN, XN, YN, LNODES, LXK, KXL,
& NXL, LXN, NODE1, I1, I2, ANGLE, ERR)
IF (ANGLE .LT. 0) THEN
BOK = .FALSE.
GOTO 130
ELSE
GOTO 130
ENDIF
ELSE
CALL INTSCT (XN(NODE1), YN(NODE1), XN(NODE2), YN(NODE2),
& XN(J3), YN(J3), XN(I1), YN(I1), U, W, LCROSS)
IF (LCROSS) THEN
BOK = .FALSE.
GOTO 130
ENDIF
ENDIF
ENDIF
KOUNT = KOUNT + 1
IF (KOUNT .LT. NLOOP) THEN
GOTO 120
ELSE
ERR = .TRUE.
GOTO 130
ENDIF
ENDIF
130 CONTINUE
RETURN
END