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.

193 lines
4.6 KiB
Fortran

SUBROUTINE ADDQUAD
! Subroutine to add a quadrilateral block
USE BLK1MOD
USE BLK2MOD
! INCLUDE 'BLK1.COM'
! INCLUDE 'BLK2.COM'
INCLUDE 'TXFRM.COM'
CHARACTER*1 IFLAG
DATA N1,N2,N3,N4/1,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(XTEMP,YTEMP,3)
! CALL PLOTT(XTEMP,YTEMP,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
!
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 XYLOC(XTEMP,YTEMP,IFLAG,IBOX)
BLX=XTEMP
BLY=YTEMP
if(iflag .eq. 'n') then
call getfpna(XTEMP)
call getfpna(YTEMP)
endif
IF(IRMAIN .EQ. 1) RETURN
!
20 CONTINUE
! CALL PLOTT(XTEMP,YTEMP,3)
CALL PLOTT(XTEMP,YTEMP,2)
CALL PLOTT(ALX,ALY,2)
! Get the number of element information
CALL PANELQUAD(N1,N2,N3,N4)
! Get number For 1 and 3 and 2 and 4
NMID1=(N1+N3)/2
NMID2=(N2+N4)/2
! Form the new nodes
CALL DEFNOD(ALX,ALY)
CALL DEFNOD(ARX,ARY)
CALL DEFNOD(BRX,BRY)
CALL DEFNOD(BLX,BLY)
! 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*(BLX-BRX)
Y1=BRY+RATIO*(BLY-BRY)
CALL DEFNOD(X1,Y1)
ENDDO
DO N=1,N4-1
RATIO=FLOAT(N)/FLOAT(N4)
X1=BLX+RATIO*(ALX-BLX)
Y1=BLY+RATIO*(ALY-BLY)
CALL DEFNOD(X1,Y1)
ENDDO
CALL FRMNODQ(ALX,ALY,ARX,ARY,BRX,BRY,BLX,BLY,NMID1,NMID2)
! Form triangles for the added nodes
CALL DELN2(NP,1)
NHTP=NHTPSV
NMESS=NMESSSV
NBRR=NBRRSV
CALL HEDR
RETURN
END
SUBROUTINE PANELQUAD(N1,N2,N3,N4)
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,N4,IERR
! real ::
character*3 :: sub
call wdialogload(IDD_QUAD)
ierr=infoerror(1)
CALL WDialogPutInteger(idf_integer1,n1)
CALL WDialogPutInteger(idf_integer2,n2)
CALL WDialogPutInteger(idf_integer3,n3)
CALL WDialogPutInteger(idf_integer4,n4)
CALL WDialogSelect(IDD_QUAD)
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)
CALL WDialogGetInteger(idf_integer4,n4)
ENDIF
RETURN
END