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.

358 lines
9.1 KiB
Fortran

SUBROUTINE ADDMESHT
USE BLK1MOD
USE WINTERACTER
USE BLKOUT
USE IFPORT
INCLUDE 'BFILES.I90'
INCLUDE 'TXFRM.COM'
INTEGER OUTPOL,TWO,ZERO,IFILOUT,ONE
INTEGER NTRIAN(5000,2),ICT
REAL XMAP1(5000),YMAP1(5000)
CHARACTER*1 ANSW(10),ANS
CHARACTER(LEN=80) :: DATAIN,OPTIONS
CHARACTER(LEN=96) :: LOCDIR,SAVDIR,SAVDIR1
LOGICAL EXISTS
INTEGER*2 RESULT
DATA ANSW/' ',' ',' ',' ',' ','b','n','z','r','q'/
do k=1,80
options(k:k)=' '
enddo
ONE=1
TWO=2
ZERO=0
OUTPOL=23
ICT=0
isw=1
NMESS=2
NHTPSV=NHTP
NMESSSV=NMESS
NBRRSV=NBRR
! call GETINT(ISW)
CALL WMessageBox(YesNo,QuestionIcon,CommonOK,'Do you wish to read outline data from a file'//&
CHAR(13)//' ','READ OUTLINE DATA FROM FILE?')
! If answer 'No', go to get data from screen
!
IF (WInfoDialog(4).EQ.2) GO TO 180
CALL RDOUTLIN
IF(NOUTLIN .EQ. 0) GO TO 180
DO N=1,NOUTLIN
XMAP1(N)=XOUTL(N)
YMAP1(N)=YOUTL(N)
NTRIAN(N,1)=N
IF(N .LT. NOUTLIN) THEN
NTRIAN(N,2)=N+1
ELSE
NTRIAN(N,2)=1
ENDIF
ENDDO
ICT=NOUTLIN
GO TO 500
! add headers
180 NHTPSV=NHTP
NMESSSV=NMESS
NBRRSV=NBRR
NHTP=0
NMESS=48
NBRR=5
call hedr
! go and get points to form outline
200 CALL xyloc(XTEMP,YTEMP,ans,IBOX)
siz=0.1
call drawcr(xtemp,ytemp,siz)
IF(IRMAIN .EQ. 1) RETURN
!
IF(ANS .EQ. 'c') THEN
if(ibox .eq. 0) go to 400
I=IBOX
ANS=ANSW(I)
ENDIF
IF(ANS .EQ. 'b') THEN
ICT=ICT-1
GO TO 200
ELSEIF(ANS .EQ. 'n') THEN
GO TO 500
ELSEIF(ANS .EQ. 'q') THEN
RETURN
ENDIF
400 ICT=ICT+1
XMAP1(ICT) = XTEMP*TXSCAL - XS
YMAP1(ICT) = YTEMP*TXSCAL - YS
IF(ICT .GT. 1) THEN
NTRIAN(ICT-1,1)=ICT-1
NTRIAN(ICT-1,2)=ICT
ENDIF
GO TO 200
500 CONTINUE
NTRIAN(ICT,1)=ICT
NTRIAN(ICT,2)=1
! write current data to a scratch file for later addition
IFILOUT=IACTVFIL+50
CALL WRTFIL(IFILOUT)
!
! IF(IACTVFIL .GT. 0) THEN
! CALL WRTFIL(50)
! IFILOUT=IACTVFIL+50
! CALL WRTFIL(IFILOUT)
! CALL ZEROOUT
! IACTVFIL=ITOTFIL
! ELSE
! IACTVFIL=1
! ENDIF
!
!! clear screen
! CALL clscrn
! form TRIANG file
OPEN(OUTPOL,FILE='TEST.POLY', STATUS='UNKNOWN')
WRITE(OUTPOL,*) ICT,TWO,ZERO,ZERO
DO K=1,ICT
WRITE(OUTPOL,*) K,XMAP1(K),YMAP1(K)
ENDDO
! WRITE(OUTPOL,*) ICT,ZERO
WRITE(OUTPOL,*) ICT,ONE
DO J=1, ICT
WRITE(OUTPOL,*) J,ntrian(J,1),ntrian(J,2),ISW
ENDDO
WRITE(OUTPOL,*) ZERO
FLUSH (OUTPOL)
REWIND (OUTPOL)
CLOSE (OUTPOL)
! OPTIONS = ' -pqa5000V TEST'
OPTIONS(1:3) = ' -p'
nct=3
iswq=1
iswy=0
id1=100
CALL PANELFILLT(ISWQ,ISWY,ID1)
IF(ISWQ .EQ. 1) THEN
NCT=NCT+1
OPTIONS(NCT:NCT)='q'
ENDIF
IF(ISWY .EQ. 1) THEN
NCT=NCT+1
OPTIONS(NCT:NCT)='q'
ENDIF
ID1=ID1**2/2
WRITE(OPTIONS(NCT+1:NCT+12),'(''a'',I6.6,'' TEST'')') ID1
! go to TRIANGLE
INQUIRE (FILE = 'test.1.ele', EXIST = exists)
if(exists) then
open(77,file= 'test.1.ele')
close(77,status='DELETE')
ENDIF
INQUIRE (FILE = 'test.1.node', EXIST = exists)
if(exists) then
open(77,file= 'test.1.node')
close(77,status='DELETE')
ENDIF
INQUIRE (FILE = 'test.1.poly', EXIST = exists)
if(exists) then
open(77,file= 'test.1.poly')
close(77,status='DELETE')
ENDIF
IDCH=0
INQUIRE (FILE = "C:\Program Files\RMA\TRIANGLE.EXE", EXIST = exists)
if(.not. exists) then
INQUIRE (FILE = "TRIANGLE.EXE", EXIST = exists)
if(.not. exists) then
CALL WMessageBox(YesNo,QuestionIcon,CommonOK,'TRIANGLE is not available in '//CHAR(13)//&
'C:\Program Files\RMA\ directory'//CHAR(13)//'Do you wish to define directory?'&
,'WARNING TRIANGLE IS NOT AVAILABLE')
! If answer 'No', return
!
IF (WInfoDialog(4).EQ.2) return
! CALL GETDIR(LOCDIR)
istat=getcwd(savdir)
CALL WSelectDir(IFLAGS,LOCDIR, 'Select TRIANG Directory')
! WRITE(155,*) LOCDIR
do n=96,1,-1
if(LOCDIR(n:n) .ne. ' ') then
lnnam=n
EXIT
endif
enddo
LTOP=LNNAM+9
LOCDIR(LNNAM+1:LTOP)='\TRIANGLE'
RESULT= RUNQQ(LOCDIR(1:LTOP), OPTIONS)
IDCH=1
GO TO 600
else
LOCDIR(1:8)='TRIANGLE'
! WRITE(155,*) LOCDIR
RESULT= RUNQQ(LOCDIR, OPTIONS)
GO TO 600
endif
endif
RESULT= RUNQQ("C:\Program Files\RMA\TRIANGLE", OPTIONS)
! RESULT= RUNQQ("TRIANGLE", OPTIONS)
600 IIN=10
OPEN(IIN,FILE='TEST.1.ELE', STATUS='OLD')
! write(155,*) 'going to get newfile'
CALL GETNEWFIL(IIN,0,-1,-1)
IF(IDCH .EQ. 1) THEN
istat=chdir(savdir)
istat=getcwd(locdir)
ENDIF
!IADD=50+iactvfil+1
!CALL RDTOCLIP(IADD)
!
!IF(IADD .EQ. 51) THEN
!write(90,*) 'finished addmesh'
!
!NHTP=NHTPSV
!NMESS=NMESSSV
!NBRR=NBRRSV
!call hedr
!ELSE
! CALL ADDMESH(0)
NHTP=NHTPSV
NMESS=NMESSSV
NBRR=NBRRSV
call hedr
CALL PLOTOT(0)
! CALL WMessageBox(YesNo,QuestionIcon,CommonOK,'Do you wish to delete unused nodes?'//&
! CHAR(13)//' ','Delete unused nodes?')
! !
!! If answer 'No', return
!!
! IF (WInfoDialog(4).EQ.2) return
!!
!! Delete all unused nodes
!!
! CALL DELETM(2)
!
! ENDIF
! get new mesh
! add meshes together
RETURN
END
SUBROUTINE UNDOGEN
USE BLK1MOD
INCLUDE 'BFILES.I90'
ALLOCATABLE NODETRAN(:)
DATA VDX9/-9.E9/
! Loop through nodes assigning new number and adding to list
IF(.NOT. ALLOCATED(NODETRAN)) ALLOCATE (NODETRAN(maxp))
CALL ZEROOUT
IADD=50+IACTVFIL
CALL RDTOCLIP(IADD)
DO N=1,NPSTO(1)
IF(XUSRSTO(N,1) .GT. VDX9) THEN
CALL GETNOD(J)
NODETRAN(N)=J
XUSR(J)=XUSRSTO(N,1)
YUSR(J)=YUSRSTO(N,1)
WD(J)=WDSTO(N,1)
WIDTH(J)=WIDTHSTO(N,1)
SS1(J)=SS1STO(N,1)
SS2(J)=SS2STO(N,1)
WIDS(J)=WIDSSTO(N,1)
WIDBS(J)=WIDBSSTO(N,1)
SSO(J)=SSOSTO(N,1)
BS1(J)=BS1STO(N,1)
INSKP(J) = 0
INEW(J) = 1
ENDIF
ENDDO
! Loop through elements assigning new number and adding to list
DO N=1,NESTO(1)
IF(IMATSTO(N,1) .GT. 0) THEN
CALL GETELM(M)
DO K=1,8
IF(NOPSTO(N,K,1) .GT. 0) THEN
J=NODETRAN(NOPSTO(N,K,1))
NOP(M,K)=J
ELSE
NOP(M,K)=0
ENDIF
ENDDO
IMAT(M)=IMATSTO(N,1)
THTA(M)=THTASTO(N,1)
IESKP(M)=0
NCN = 2
IF (NOP(M,3) .NE. 0) NCN = 3
IF (NOP(M,4) .NE. 0) NCN = 4
IF (NOP(M,5) .NE. 0 .AND. NOP(M,4) .NE. 0) NCN = 5
IF (NOP(M,5) .NE. 0 .AND. NOP(M,4) .EQ. 0) NCN = 6
IF (NOP(M,6) .NE. 0) NCN = 6
IF (NOP(M,7) .NE. 0) NCN = 8
NCORN(M) = NCN
ENDIF
ENDDO
! if(iswt .eq. 0) CALL RESCAL
CALL RESCAL
CALL HEDR
RETURN
END
SUBROUTINE GETDIR(LOCDIR)
use winteracter
implicit none
include 'D.inc'
INCLUDE 'BFILES.I90'
!
! Declare window-type and message variables
!
TYPE(WIN_STYLE) :: WINDOW
TYPE(WIN_MESSAGE) :: MESSAGE
CHARACTER*96 LOCDIR
integer ierr,K,KL
call wdialogload(IDD_GETFL)
ierr=infoerror(1)
CALL WDialogPutString(idf_string1,locdir)
! LOCDIR='C:\Users\RMA5440\TRIANGLE\TRIANGLE'
CALL WDialogSelect(IDD_GETFL)
ierr=infoerror(1)
CALL WDialogShow(-1,-1,0,Modal)
ierr=infoerror(1)
do
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
CALL WDialogGetString(idf_string1,locdir)
DO K=96,1,-1
KL=K
IF(LOCDIR(K:K) .NE. ' ') GO TO 200
ENDDO
LOCDIR(1:8)='TRIANGLE'
RETURN
200 CONTINUE
LOCDIR(KL+1:KL+9)='\TRIANGLE'
WRITE(90,*) LOCDIR
RETURN
endif
enddo
END