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.
435 lines
9.8 KiB
Fortran
435 lines
9.8 KiB
Fortran
!IPK NEW ROUTINE SEP 9 2006
|
|
SUBROUTINE FORM999(ISWT9,iswtw,NELC)
|
|
!
|
|
! Generate continuity lines
|
|
!
|
|
|
|
USE WINTERACTER
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
include 'd.inc'
|
|
|
|
! INCLUDE 'BLK1.COM'
|
|
! INCLUDE 'BLK2.COM'
|
|
INCLUDE 'TXFRM.COM'
|
|
CHARACTER*1 IFLAG
|
|
DIMENSION DIRL(5000),IPROCES(MAXE)
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
|
|
integer :: N1,N2,N3,IERR
|
|
|
|
DATA SPAC/10./,ieltyp/1/,ielsw/1/,iensw/0/
|
|
|
|
! DIST(N1,N2)=SQRT((CORD(N1,1)-CORD(N2,1))**2 &
|
|
! & +(CORD(N1,2)-CORD(N2,2))**2)
|
|
! PROJ(N1,N2,DR)= (CORD(N2,1)-CORD(N1,1))*COS(DR)+(CORD(N2,2)-CORD(N1,2))*SIN(DR)
|
|
!
|
|
! WRITE(150,*) 'IN FORM999',ISWT9,iswtw,NELC
|
|
! FLUSH(150)
|
|
if(iswtw .eq. 1) THEN
|
|
IFRMEL=0
|
|
IGTWEL=0
|
|
CALL ADD999(ISWT9,NELC)
|
|
RETURN
|
|
ENDIF
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Are 1-D elements already formed?','1-D ELEMENTS')
|
|
|
|
! If answer 'Yes' set ifrmel to 0
|
|
!
|
|
IF (WInfoDialog(4) .EQ. 2) then
|
|
IFRMEL=1
|
|
!NO
|
|
! WRITE(150,*) 'GOING TO FROM1DEL'
|
|
! FLUSH(150)
|
|
CALL FORM1DEL
|
|
! WRITE(150,*) 'BACK FROM FROM1DEL'
|
|
! FLUSH(150)
|
|
|
|
ELSE
|
|
!YES
|
|
IFRMEL=0
|
|
|
|
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Is width data available?','WIDTH DATA')
|
|
|
|
! If answer 'Yes' set igtwel to 0
|
|
!
|
|
IF (WInfoDialog(4) .EQ. 2) then
|
|
!NO
|
|
IGTWEL=1
|
|
CALL SETWID
|
|
! WRITE(150,*) 'BACK FROM SETWID'
|
|
! FLUSH(150)
|
|
ELSE
|
|
!YES
|
|
IGTWEL=0
|
|
! CALL CCLINE(2)
|
|
! WRITE(150,*) 'GOING TO ADD999'
|
|
! FLUSH(150)
|
|
! temp may20
|
|
CALL ADD999(ISWT9,NELC)
|
|
! tep may20 GO TO 100
|
|
! WRITE(150,*) 'BACK FROM ADD999'
|
|
! FLUSH(150)
|
|
CALL HEDR
|
|
RETURN
|
|
ENDIF
|
|
|
|
100 CONTINUE
|
|
|
|
ENDIF
|
|
|
|
! GET NODAL CONNECTIONS
|
|
! WRITE(150,*) 'ABOUT TO GO TO NDNECON'
|
|
! FLUSH(150)
|
|
IERR=0
|
|
CALL NDNECON(IERR)
|
|
|
|
! START ALONG LINE OF ELEMENTS
|
|
|
|
DO N=1,NTRAC
|
|
|
|
N1=ITRAC(N)
|
|
IF(N .GT. 1) THEN
|
|
N0=ITRAC(N-1)
|
|
ENDIF
|
|
IF(N .LT. NTRAC) THEN
|
|
N2=ITRAC(N+1)
|
|
ENDIF
|
|
|
|
! Get direction
|
|
|
|
IF(N .EQ. 1) THEN
|
|
DIRX=XUSR(N2)-XUSR(N1)
|
|
DIRY=YUSR(N2)-YUSR(N1)
|
|
DIRL(N)=ATAN2(DIRX,-DIRY)
|
|
ELSEIF(N .EQ. NTRAC) THEN
|
|
DIRX=XUSR(N1)-XUSR(N0)
|
|
DIRY=YUSR(N1)-YUSR(N0)
|
|
DIRL(N)=ATAN2(DIRX,-DIRY)
|
|
ELSE
|
|
DIRX=XUSR(N2)-XUSR(N0)
|
|
DIRY=YUSR(N2)-YUSR(N0)
|
|
DIRL(N)=ATAN2(DIRX,-DIRY)
|
|
ENDIF
|
|
ENDDO
|
|
|
|
! Move nodes apart adding new numbers
|
|
NNEL=6
|
|
DO N=1,NTRAC
|
|
! WRITE(150,*) 'STARTING NTRAC ITRAC',N,ITRAC(N)
|
|
N1=ITRAC(N)
|
|
DO M=1,NNEL/2
|
|
CALL GETNOD(J)
|
|
JTRAC(N,M)=J
|
|
XUSR(J)=XUSR(N1)-(WIDTH(N1)*M)/(NNEL)*COS(DIRL(N))
|
|
YUSR(J)=YUSR(N1)-(WIDTH(N1)*M)/(NNEL)*SIN(DIRL(N))
|
|
CORD(J,1)=(XUSR(J)+XS)/TXSCAL
|
|
CORD(J,2)=(YUSR(J)+YS)/TXSCAL
|
|
INEW(J)=1
|
|
INSKP(J) = 0
|
|
WD(J)=-9999.
|
|
WIDTH(J)=0.
|
|
SS1(J)=0.
|
|
SS2(J)=0.
|
|
WIDS(J)=0.
|
|
WIDBS(J)=0.
|
|
SSO(J)=0.
|
|
|
|
CALL GETNOD(J1)
|
|
KTRAC(N,M)=J1
|
|
XUSR(J1)=XUSR(N1)+(WIDTH(N1)*M)/NNEL*COS(DIRL(N))
|
|
YUSR(J1)=YUSR(N1)+(WIDTH(N1)*M)/NNEL*SIN(DIRL(N))
|
|
CORD(J1,1)=(XUSR(J1)+XS)/TXSCAL
|
|
CORD(J1,2)=(YUSR(J1)+YS)/TXSCAL
|
|
INEW(J1)=1
|
|
INSKP(J1) = 0
|
|
WD(J1)=-9999.
|
|
WIDTH(J1)=0.
|
|
SS1(J1)=0.
|
|
SS2(J1)=0.
|
|
WIDS(J1)=0.
|
|
WIDBS(J1)=0.
|
|
SSO(J1)=0.
|
|
ENDDO
|
|
ENDDO
|
|
DO N=1,NTRAC-1
|
|
DO M=1,NNEL/2
|
|
CALL GETELM(J)
|
|
IF(M .EQ. 1) THEN
|
|
NOP(J,1)=ITRAC(N+1)
|
|
NOP(J,3)=ITRAC(N)
|
|
NOP(J,5)=JTRAC(N,1)
|
|
NOP(J,7)=JTRAC(N+1,1)
|
|
ELSE
|
|
NOP(J,1)=JTRAC(N+1,M-1)
|
|
NOP(J,3)=JTRAC(N,M-1)
|
|
NOP(J,5)=JTRAC(N,M)
|
|
NOP(J,7)=JTRAC(N+1,M)
|
|
ENDIF
|
|
NOP(J,2)=0
|
|
NOP(J,4)=0
|
|
NOP(J,6)=0
|
|
NOP(J,8)=0
|
|
IMAT(J)=999
|
|
NCORN(J) = 8
|
|
IESKP(J) = 0
|
|
CALL GETELM(J)
|
|
IF(M .EQ. 1) THEN
|
|
NOP(J,1)=ITRAC(N)
|
|
NOP(J,3)=ITRAC(N+1)
|
|
NOP(J,5)=KTRAC(N+1,1)
|
|
NOP(J,7)=KTRAC(N,1)
|
|
ELSE
|
|
NOP(J,1)=KTRAC(N,M-1)
|
|
NOP(J,3)=KTRAC(N+1,M-1)
|
|
NOP(J,5)=KTRAC(N+1,M)
|
|
NOP(J,7)=KTRAC(N,M)
|
|
ENDIF
|
|
NOP(J,2)=0
|
|
NOP(J,4)=0
|
|
NOP(J,6)=0
|
|
NOP(J,8)=0
|
|
IMAT(J)=999
|
|
NCORN(J) = 8
|
|
IESKP(J) = 0
|
|
NE = MAX(J,NE)
|
|
ENDDO
|
|
ENDDO
|
|
NE = MAX(J,NE)
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE FORM1DEL
|
|
|
|
USE WINTERACTER
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
include 'd.inc'
|
|
|
|
! INCLUDE 'BLK1.COM'
|
|
! INCLUDE 'BLK2.COM'
|
|
INCLUDE 'TXFRM.COM'
|
|
CHARACTER*1 IFLAG
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
|
|
integer :: N1,N2,N3,IERR
|
|
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Are 1-D nodes already defined?','FORM 1-D ELEMENTS')
|
|
|
|
! If answer 'Yes' set ifrmel to 0
|
|
!
|
|
IF (WInfoDialog(4) .ne. 2) then
|
|
|
|
! yes
|
|
CALL FRMEL(1)
|
|
ELSE
|
|
! no
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Use same width etc properties ?','FORM 1-D ELEMENTS')
|
|
|
|
! If answer 'Yes' set IGWID=1
|
|
!
|
|
IF (WInfoDialog(4) .ne. 2) then
|
|
|
|
! yes
|
|
IGWID=1
|
|
ELSE
|
|
IGWID=0
|
|
! no
|
|
ENDIF
|
|
|
|
CALL WMessageBox(OKCancel, 4, 1,'Click on each node to form elements?'//CHAR(13)// &
|
|
'Then click quit to continue','FORM 1-D ELEMENTS')
|
|
JREF=0
|
|
NTRAC=0
|
|
NHTP=0
|
|
NBRR=3
|
|
NMESS=15
|
|
CALL HEDR
|
|
|
|
100 CONTINUE
|
|
CALL XYLOC(XX,YY,IFLAG,IBOX)
|
|
IF(IRMAIN .EQ. 1) RETURN
|
|
IF(IFLAG .EQ. 'q' .OR. (IFLAG .EQ. 'c' .AND. IBOX .EQ. 10))THEN
|
|
GO TO 200
|
|
ENDIF
|
|
!
|
|
IF (IFLAG .EQ. 'c') THEN
|
|
!
|
|
call getnod(j)
|
|
NTRAC=NTRAC+1
|
|
ITRAC(NTRAC)=J
|
|
INSKP(J)=0
|
|
CORD(J,1) = XX
|
|
CORD(J,2) = YY
|
|
INEW(J) = 1
|
|
!
|
|
XUSR(J) = XX*TXSCAL - XS
|
|
YUSR(J) = YY*TXSCAL - YS
|
|
IF (J .GT. NP) NP = J
|
|
call pltnod(j,1)
|
|
IF(JREF .EQ.0) THEN
|
|
WIDTH(J)=50.
|
|
call nodedisp(j)
|
|
ELSE
|
|
WIDTH(J)=WIDTH(J1)
|
|
WD(J)=WD(J1)
|
|
SS1(J)=SS1(J1)
|
|
SS2(J)=SS2(J1)
|
|
WIDS(J)=WIDS(J1)
|
|
WIDBS(J)=WIDBS(J1)
|
|
SSO(J)=SSO(J1)
|
|
BS1(J)=BS1(J1)
|
|
IF(IGWID .EQ. 0) THEN
|
|
call nodedisp(j)
|
|
ENDIF
|
|
CALL PLTNOD(J,0)
|
|
call getelm(k)
|
|
NOP(K,1)=J1
|
|
NOP(K,2)=0
|
|
NOP(K,3)=J
|
|
NCORN(K)=3
|
|
IMAT(K)=1
|
|
IESKP(K) = 0
|
|
NE = MAX(K,NE)
|
|
IERC=0
|
|
CALL PLTELM(K,IERC)
|
|
|
|
ENDIF
|
|
J1=J
|
|
JREF=1
|
|
GO TO 100
|
|
ENDIF
|
|
ENDIF
|
|
|
|
200 CONTINUE
|
|
call clscrn
|
|
CALL PLOTOT(1)
|
|
NHTP=1
|
|
NMESS=0
|
|
NBRR=0
|
|
CALL HEDR
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE SETWID
|
|
|
|
CALL FRMEL(0)
|
|
RETURN
|
|
END
|
|
|
|
SUBROUTINE FRMEL(ISW)
|
|
|
|
USE WINTERACTER
|
|
USE BLK1MOD
|
|
USE BLK2MOD
|
|
include 'd.inc'
|
|
|
|
! INCLUDE 'BLK1.COM'
|
|
! INCLUDE 'BLK2.COM'
|
|
INCLUDE 'TXFRM.COM'
|
|
CHARACTER*1 IFLAG
|
|
!
|
|
! Declare window-type and message variables
|
|
!
|
|
TYPE(WIN_STYLE) :: WINDOW
|
|
|
|
TYPE(WIN_MESSAGE) :: MESSAGE
|
|
|
|
integer :: N1,N2,N3,IERR
|
|
|
|
NHTP=0
|
|
NBRR=3
|
|
NMESS=15
|
|
CALL HEDR
|
|
|
|
IF(ISW .EQ. 1) THEN
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Is width data available?','WIDTH DATA')
|
|
|
|
! If answer 'Yes' set igtwel to 0
|
|
!
|
|
IF (WInfoDialog(4) .EQ. 2) then
|
|
!NO
|
|
IGTWEL=1
|
|
ELSE
|
|
!YES
|
|
IGTWEL=0
|
|
ENDIF
|
|
ELSE
|
|
|
|
IGTWEL=1
|
|
ENDIF
|
|
|
|
IF(IGTWEL .EQ. 1) THEN
|
|
CALL WMessageBox(YesNo, QuestionIcon, 1,'Use same width etc properties ?','FORM 1-D ELEMENTS')
|
|
|
|
! If answer 'Yes' set IGWID=1
|
|
!
|
|
IF (WInfoDialog(4) .ne. 2) then
|
|
|
|
! yes
|
|
IGWID=1
|
|
ELSE
|
|
IGWID=0
|
|
! no
|
|
ENDIF
|
|
ENDIF
|
|
NTRAC=0
|
|
100 CONTINUE
|
|
CALL PROX(CORD(1,1),CORD(1,2),NP,XX,YY,J,IFLAG,INSKP,IBOX)
|
|
IF(IRMAIN .EQ. 1) RETURN
|
|
IF(IFLAG .EQ. 'q' .OR. (IFLAG .EQ. 'c' .AND. IBOX .EQ. 10))THEN
|
|
GO TO 200
|
|
ENDIF
|
|
!
|
|
IF (IFLAG .EQ. 'c') THEN
|
|
!
|
|
IF(IGTWEL .EQ. 1) THEN
|
|
IF(NTRAC .EQ. 0) THEN
|
|
call nodedisp(j)
|
|
ELSE
|
|
WIDTH(J)=WIDTH(J1)
|
|
WD(J)=WD(J1)
|
|
SS1(J)=SS1(J1)
|
|
SS2(J)=SS2(J1)
|
|
WIDS(J)=WIDS(J1)
|
|
WIDBS(J)=WIDBS(J1)
|
|
SSO(J)=SSO(J1)
|
|
BS1(J)=BS1(J1)
|
|
IF(IGWID .EQ. 0) THEN
|
|
call nodedisp(j)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
CALL PLTNOD(J,0)
|
|
! IF(ISW .EQ. 1) THEN
|
|
if(ntrac .ne. 0) then
|
|
call getelm(k)
|
|
NOP(K,1)=J1
|
|
NOP(K,2)=0
|
|
NOP(K,3)=J
|
|
NCORN(K)=3
|
|
IMAT(K)=1
|
|
IESKP(K) = 0
|
|
NE = MAX(K,NE)
|
|
IERC=0
|
|
CALL PLTELM(K,IERC)
|
|
ENDIF
|
|
J1=J
|
|
NTRAC=NTRAC+1
|
|
ITRAC(NTRAC)=J
|
|
GO TO 100
|
|
ENDIF
|
|
200 CONTINUE
|
|
RETURN
|
|
END |