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
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 |