You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.5 KiB
Fortran
111 lines
2.5 KiB
Fortran
SUBROUTINE REATTACH
|
|
|
|
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
|
|
INTEGER NS1(3,4),NT1(3,4)
|
|
CHARACTER*1 IFLAG,ANSW(10)
|
|
DATA ANSW/' ',' ',' ',' ',' ',' ','n','z','r','q'/
|
|
|
|
! SETUP CONNECTIVITY TABLE
|
|
ISWW=0
|
|
CALL KCON(ISWW)
|
|
! SELECT FIRST ELEMENT
|
|
10 CONTINUE
|
|
NHTPSV=NHTP
|
|
NMESSSV=NMESS
|
|
NBRRSV=NBRR
|
|
NHTP=0
|
|
NMESS=20
|
|
NBRR=8
|
|
CALL HEDR
|
|
|
|
CALL PROX(XC,YC,NE,XX,YY,IELEM,IFLAG,IESKP,IBOX)
|
|
IF(IRMAIN .EQ. 1) THEN
|
|
NHTP=NHTPSV
|
|
NMESS=NMESSSV
|
|
NBRR=NBRRSV
|
|
CALL HEDR
|
|
RETURN
|
|
ENDIF
|
|
IF(IFLAG .EQ. 'c' .AND. IBOX .GT. 0) THEN
|
|
IFLAG=ANSW(IBOX)
|
|
ENDIF
|
|
!
|
|
IF(IFLAG .EQ. 'q') THEN
|
|
NHTP=NHTPSV
|
|
NMESS=NMESSSV
|
|
NBRR=NBRRSV
|
|
CALL HEDR
|
|
RETURN
|
|
ENDIF
|
|
call fillem(ielem)
|
|
! GET UNATTACHED NOP
|
|
kk=0
|
|
DO K=2,NCORN(IELEM),2
|
|
NSX=NOP(IELEM,K)
|
|
IF(NDELM(NSX) .EQ. 1) THEN
|
|
! FOUND IT
|
|
KK=KK+1
|
|
NS1(1,KK)=NOP(IELEM,K-1)
|
|
NS1(2,KK)=NSX
|
|
KKK=MOD(K,NCORN(IELEM))+1
|
|
NS1(3,KK)=NOP(IELEM,KKK)
|
|
! GO TO 280
|
|
ENDIF
|
|
ENDDO
|
|
280 CONTINUE
|
|
|
|
|
|
! SELECT NEXT ELEMENT
|
|
|
|
CALL PROX(XC,YC,NE,XX,YY,IELEM1,IFLAG,IESKP,IBOX)
|
|
call fillem(ielem1)
|
|
|
|
! GET UNNATCHED SIDE
|
|
! FIND AN UNATTACHED SIDE (INDICATE OF TRIANGLE OR QUADRILATERAL)
|
|
LL=0
|
|
DO K=2,NCORN(IELEM1),2
|
|
NSX=NOP(IELEM1,K)
|
|
IF(NDELM(NSX) .EQ. 1) THEN
|
|
! FOUND IT
|
|
LL=LL+1
|
|
NT1(1,LL)=NOP(IELEM1,K-1)
|
|
NT1(2,LL)=NSX
|
|
KKK=MOD(K,NCORN(IELEM1))+1
|
|
NT1(3,LL)=NOP(IELEM1,KKK)
|
|
! GO TO 300
|
|
ENDIF
|
|
ENDDO
|
|
300 CONTINUE
|
|
|
|
! FORM A NEW ELEMENT ASSIGN TYPE AS INDICATED
|
|
! GET THE NEAREST TWO FACES
|
|
DISTKP=1.E20
|
|
DO NN=1,KK
|
|
DO MM=1,LL
|
|
DIST=(XUSR(NS1(2,NN))-XUSR(NT1(2,MM)))**2+(YUSR(NS1(2,NN))-YUSR(NT1(2,MM)))**2
|
|
IF(DIST .LT. DISTKP) THEN
|
|
NNN=NN
|
|
MMM=MM
|
|
DISTKP=DIST
|
|
ENDIF
|
|
ENDDO
|
|
ENDDO
|
|
CALL GETELM(J)
|
|
DO K=1,3
|
|
NOP(J,K)=NS1(K,NNN)
|
|
NOP(J,K+4)=NT1(K,MMM)
|
|
ENDDO
|
|
NOP(J,4)=0
|
|
NOP(J,8)=0
|
|
IMAT(J)=1
|
|
IESKP(J) = 0
|
|
NCORN(J)=8
|
|
|
|
! GO BACK TO LOOK FOR NEW PAIR
|
|
CALL PLOTOT(1)
|
|
GO TO 10
|
|
RETURN
|
|
END |