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.

192 lines
4.3 KiB
Fortran

SUBROUTINE ADDTRIANG
! Subroutine to add a triangular block
USE BLK1MOD
USE BLK2MOD
! INCLUDE 'BLK1.COM'
! INCLUDE 'BLK2.COM'
INCLUDE 'TXFRM.COM'
CHARACTER*1 IFLAG
DATA N1,N2,N3/1,1,1/
! Initiliaze list etc
NHTPSV=NHTP
NMESSSV=NMESS
NBRRSV=NBRR
DO N=1,NP
LIST(N)=0
ENDDO
! Get the points that form the triangle
4 CONTINUE
NHTP=0
NMESS=8
NBRR = 3
CALL HEDR
!
! Get screen coordinates of each end of line
!
7 CALL XYLOC(XTEMP,YTEMP,IFLAG,IBOX)
ALX=XTEMP
ALY=YTEMP
IF(IRMAIN .EQ. 1) RETURN
!
IF(IFLAG .EQ. 'q' .OR. (IFLAG .EQ. 'c' .AND. IBOX .EQ. 10))THEN
CALL WRTOUT(0)
RETURN
elseif(iflag .eq. 'n') then
call getfpna(XTEMP)
call getfpna(YTEMP)
ENDIF
!
! Exit input
!
! 9 CALL PLOTT(ALX,ALY,3)
! CALL PLOTT(ALX,ALY,2)
NBRR=0
CALL HEDR
CALL XYLOC(XTEMP,YTEMP,IFLAG,IBOX)
ARX=XTEMP
ARY=YTEMP
if(iflag .eq. 'n') then
call getfpna(XTEMP)
call getfpna(YTEMP)
endif
IF(IRMAIN .EQ. 1) RETURN
!
! 12 CALL PLOTT(XTEMP,YTEMP,3)
CALL PLOTT(ALX,ALY,3)
CALL PLOTT(XTEMP,YTEMP,2)
CALL XYLOC(XTEMP,YTEMP,IFLAG,IBOX)
BRX=XTEMP
BRY=YTEMP
if(iflag .eq. 'n') then
call getfpna(XTEMP)
call getfpna(YTEMP)
endif
IF(IRMAIN .EQ. 1) RETURN
!
16 CONTINUE
! CALL PLOTT(XTEMP,YTEMP,3)
CALL PLOTT(XTEMP,YTEMP,2)
CALL PLOTT(ALX,ALY,2)
! Get the number of element information
CALL PANELTRG(N1,N2,N3)
! Get middle number
IF(N1 .GT. N2) THEN
IF(N1 .GT. N3) THEN
IF(N2 .GT. N3) THEN
NMID=N2
ELSE
NMID=N1
ENDIF
ELSE
NMID=N1
ENDIF
ELSE
IF(N2 .GT. N3) THEN
IF(N1 .GT. N3) THEN
NMID=N1
ELSE
NMID=N3
ENDIF
ELSE
NMID=N2
ENDIF
ENDIF
! Form the new nodes
CALL DEFNOD(ALX,ALY)
CALL DEFNOD(ARX,ARY)
CALL DEFNOD(BRX,BRY)
! Now work on sides
DO N=1,N1-1
RATIO=FLOAT(N)/FLOAT(N1)
X1=ALX+RATIO*(ARX-ALX)
Y1=ALY+RATIO*(ARY-ALY)
CALL DEFNOD(X1,Y1)
ENDDO
DO N=1,N2-1
RATIO=FLOAT(N)/FLOAT(N2)
X1=ARX+RATIO*(BRX-ARX)
Y1=ARY+RATIO*(BRY-ARY)
CALL DEFNOD(X1,Y1)
ENDDO
DO N=1,N3-1
RATIO=FLOAT(N)/FLOAT(N3)
X1=BRX+RATIO*(ALX-BRX)
Y1=BRY+RATIO*(ALY-BRY)
CALL DEFNOD(X1,Y1)
ENDDO
CALL FRMNODT(ALX,ALY,ARX,ARY,BRX,BRY,NMID)
! For triangles for the added nodes
CALL DELN2(NP,1)
NHTP=NHTPSV
NMESS=NMESSSV
NBRR=NBRRSV
CALL HEDR
RETURN
END
SUBROUTINE PANELTRG(N1,N2,N3)
use winteracter
implicit none
include 'D.inc'
INCLUDE 'BFILES.I90'
!
! Declare window-type and message variables
!
TYPE(WIN_STYLE) :: WINDOW
TYPE(WIN_MESSAGE) :: MESSAGE
integer :: N1,N2,N3,IERR
! real ::
character*3 :: sub
call wdialogload(IDD_TRIANG)
ierr=infoerror(1)
CALL WDialogPutInteger(idf_integer1,n1)
CALL WDialogPutInteger(idf_integer2,n2)
CALL WDialogPutInteger(idf_integer3,n3)
CALL WDialogSelect(IDD_TRIANG)
ierr=infoerror(1)
CALL WDialogShow(-1,-1,0,Modal)
ierr=infoerror(1)
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
CALL WDialogGetInteger(idf_integer1,n1)
CALL WDialogGetInteger(idf_integer2,n2)
CALL WDialogGetInteger(idf_integer3,n3)
ENDIF
RETURN
END