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.
176 lines
4.7 KiB
176 lines
4.7 KiB
2 years ago
|
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 ADD3ND (MXND, MLN, XN, YN, LXK, KXL, NXL, LXN,
|
||
|
& BNSIZE, LNODES, X, Y, DIST, NNN, LLL, KKK, N1, NLOOP, SIZEIT,
|
||
|
& ERR, NOROOM, XNOLD, YNOLD, NXKOLD, LINKEG, LISTEG, BMESUR,
|
||
|
& MLINK, NPNOLD, NPEOLD, NNXK, REMESH, REXMIN, REXMAX, REYMIN,
|
||
|
& REYMAX, IDIVIS, SIZMIN, EMAX, EMIN)
|
||
|
C***********************************************************************
|
||
|
|
||
|
C SUBROUTINE ADD2ND = ADDS A NEW ELEMENT JUTTING OUT FROM AN EXISTING
|
||
|
C LINE
|
||
|
|
||
|
C***********************************************************************
|
||
|
|
||
|
DIMENSION XN (MXND), YN (MXND)
|
||
|
DIMENSION LXK (4, MXND), KXL (2, 3*MXND)
|
||
|
DIMENSION NXL (2, 3*MXND), LXN (4, MXND)
|
||
|
DIMENSION LNODES (MLN, MXND), BNSIZE (2, MXND)
|
||
|
DIMENSION X(3), Y(3)
|
||
|
|
||
|
DIMENSION XNOLD(NPNOLD), YNOLD(NPNOLD)
|
||
|
DIMENSION NXKOLD(NNXK, NPEOLD)
|
||
|
DIMENSION LINKEG(2, MLINK), LISTEG(4 * NPEOLD), BMESUR(NPNOLD)
|
||
|
|
||
|
LOGICAL SIZEIT, ERR, NOROOM
|
||
|
|
||
|
NNN = NNN+1
|
||
|
IF (NNN .GT. MXND) THEN
|
||
|
NOROOM = .TRUE.
|
||
|
GOTO 110
|
||
|
ENDIF
|
||
|
XN (NNN) = X(1)
|
||
|
YN (NNN) = Y(1)
|
||
|
NODE1 = NNN
|
||
|
NNN = NNN+1
|
||
|
IF (NNN .GT. MXND) THEN
|
||
|
NOROOM = .TRUE.
|
||
|
GOTO 110
|
||
|
ENDIF
|
||
|
XN (NNN) = X(2)
|
||
|
YN (NNN) = Y(2)
|
||
|
NODE2 = NNN
|
||
|
NNN = NNN+1
|
||
|
IF (NNN .GT. MXND) THEN
|
||
|
NOROOM = .TRUE.
|
||
|
GOTO 110
|
||
|
ENDIF
|
||
|
XN (NNN) = X(3)
|
||
|
YN (NNN) = Y(3)
|
||
|
NODE3 = NNN
|
||
|
|
||
|
C PUT THE BEGINNING BOUNDARY DISTANCE IN PLACE
|
||
|
|
||
|
IF (LXN (2, N1) .LT. 0) THEN
|
||
|
BNSIZE (1, NODE1) = DIST
|
||
|
BNSIZE (1, NODE2) = DIST
|
||
|
BNSIZE (1, NODE3) = DIST
|
||
|
BNSIZE (2, NODE1) = 1.
|
||
|
BNSIZE (2, NODE2) = 1.
|
||
|
BNSIZE (2, NODE3) = 1.
|
||
|
ELSE
|
||
|
IF (SIZEIT) THEN
|
||
|
|
||
|
C** LOCATION SIZE AND PROJECTING FROM LOCATION SIZE.
|
||
|
|
||
|
CALL GETSIZ (XNOLD, YNOLD, NXKOLD, LINKEG, LISTEG, BMESUR,
|
||
|
& MLINK, NPNOLD, NPEOLD, NNXK, REMESH, REXMIN, REXMAX,
|
||
|
& REYMIN, REYMAX, IDIVIS, SIZMIN, EMAX, EMIN, X(1), Y(1),
|
||
|
& SIZE1)
|
||
|
CALL GETSIZ (XNOLD, YNOLD, NXKOLD, LINKEG, LISTEG, BMESUR,
|
||
|
& MLINK, NPNOLD, NPEOLD, NNXK, REMESH, REXMIN, REXMAX,
|
||
|
& REYMIN, REYMAX, IDIVIS, SIZMIN, EMAX, EMIN, XN(N1),
|
||
|
& YN(N1), SIZE2)
|
||
|
SIZNEW = AMIN1 (SIZE1, SIZE2)
|
||
|
ELSE
|
||
|
SIZNEW = BNSIZE (1, N1)
|
||
|
ENDIF
|
||
|
BNSIZE (1, NODE1) = SIZNEW
|
||
|
BNSIZE (1, NODE2) = SIZNEW
|
||
|
BNSIZE (1, NODE3) = SIZNEW
|
||
|
IF ((BNSIZE (1, N1) .EQ. 0.) .OR. (SIZEIT)) THEN
|
||
|
BNSIZE (2, NODE1) = 1.
|
||
|
BNSIZE (2, NODE2) = 1.
|
||
|
BNSIZE (2, NODE3) = 1.
|
||
|
ELSE
|
||
|
BNSIZE (2, NODE1) = DIST / SIZNEW
|
||
|
BNSIZE (2, NODE2) = DIST / SIZNEW
|
||
|
BNSIZE (2, NODE3) = DIST / SIZNEW
|
||
|
ENDIF
|
||
|
ENDIF
|
||
|
|
||
|
C MAKE NXL ARRAY
|
||
|
C ADD THE FOUR NEW LINES
|
||
|
|
||
|
LLL = LLL+1
|
||
|
L1 = LLL
|
||
|
NXL (1, L1) = N1
|
||
|
NXL (2, L1) = NODE1
|
||
|
|
||
|
LLL = LLL+1
|
||
|
L2 = LLL
|
||
|
NXL (1, L2) = NODE1
|
||
|
NXL (2, L2) = NODE2
|
||
|
|
||
|
LLL = LLL+1
|
||
|
L3 = LLL
|
||
|
NXL (1, L3) = NODE2
|
||
|
NXL (2, L3) = NODE3
|
||
|
|
||
|
LLL = LLL+1
|
||
|
L4 = LLL
|
||
|
NXL (1, L4) = NODE3
|
||
|
NXL (2, L4) = N1
|
||
|
|
||
|
C MAKE THE NEW ELEMENT
|
||
|
|
||
|
KKK = KKK+1
|
||
|
LXK (1, KKK) = L4
|
||
|
LXK (2, KKK) = L3
|
||
|
LXK (3, KKK) = L2
|
||
|
LXK (4, KKK) = L1
|
||
|
CALL ADDKXL (MXND, KXL, KKK, L1)
|
||
|
CALL ADDKXL (MXND, KXL, KKK, L2)
|
||
|
CALL ADDKXL (MXND, KXL, KKK, L3)
|
||
|
CALL ADDKXL (MXND, KXL, KKK, L4)
|
||
|
|
||
|
C ZERO OUT THE LXN ARRAY
|
||
|
|
||
|
DO 100 I = 1, 4
|
||
|
LXN (I, NODE1) = 0
|
||
|
LXN (I, NODE2) = 0
|
||
|
LXN (I, NODE3) = 0
|
||
|
100 CONTINUE
|
||
|
|
||
|
C REDO THE LNODES ARRAY
|
||
|
|
||
|
LNODES (1, NODE1) = 0
|
||
|
LNODES (1, NODE2) = 0
|
||
|
LNODES (1, NODE3) = 0
|
||
|
LNODES (1, N1) = 0
|
||
|
|
||
|
LNODES (2, NODE1) = N1
|
||
|
LNODES (2, NODE2) = NODE1
|
||
|
LNODES (2, NODE3) = NODE2
|
||
|
|
||
|
LNODES (3, N1) = NODE1
|
||
|
LNODES (3, NODE1) = NODE2
|
||
|
LNODES (3, NODE2) = NODE3
|
||
|
LNODES (3, NODE3) = N1
|
||
|
|
||
|
LNODES (4, NODE1) = - 1
|
||
|
LNODES (4, NODE2) = - 1
|
||
|
LNODES (4, NODE3) = - 1
|
||
|
|
||
|
LNODES (5, N1) = L1
|
||
|
LNODES (5, NODE1) = L2
|
||
|
LNODES (5, NODE2) = L3
|
||
|
LNODES (5, NODE3) = L4
|
||
|
|
||
|
LNODES (8, NODE1) = LNODES (8, N1) + 1
|
||
|
LNODES (8, NODE2) = LNODES (8, N1) + 1
|
||
|
LNODES (8, NODE3) = LNODES (8, N1) + 1
|
||
|
|
||
|
NLOOP = NLOOP + 4
|
||
|
|
||
|
CALL MARKSM (MXND, MLN, LXK, KXL, NXL, LXN, LNODES, N1, ERR)
|
||
|
|
||
|
110 CONTINUE
|
||
|
RETURN
|
||
|
|
||
|
END
|