PROGRAM GRAPHIC3D27
C========X=========X=========X=========X=========X=========X=========X==
C GRAPHIC DATA GENERATION SOFTWARE
C FOR
C NSEQ8DD3D27LLDECOMPOSITION-IMPLICIT.FOR
C
C 1 DECEMBER 1985
C EIJI FUKUMORI
C=======================================================================
PARAMETER ( NF=9, ND=27, MXE=60000, MXN=40000 )
IMPLICIT REAL*8 ( A-H, O-Z )
DIMENSION XCOORD(3,MXN), U(3,MXN), NODEX(MXE,ND)
DIMENSION XPLOT(3,MXN), UPLOT(3,MXN)
LOGICAL DECISION(MXN)
CHARACTER FNAME(NF)*11
C=======================================================================
RATIO = 0.4D0
INDEX = 2
VALUE = 0.5
C=======================================================================
WRITE (*,*) '======== 3D FLOW VECTOR PLOTTER ========'
WRITE (*,*) 'RATIO=', RATIO
WRITE (*,*) 'INDEX=', INDEX
WRITE (*,*) 'VALUE=', VALUE
C=======================================================================
WRITE (*,*)' READING IN DATA FILES', MXE
CALL INPUT ( MXE,MXN,ND,NE,NNODE,NODEX,XCOORD,U,NF,FNAME )
WRITE (*,*)'NE =', NE
WRITE (*,*)'NNODE=', NNODE
C WRITE (*,*) U(1,14), U(2,14), U(3,14)
C=======================================================================
CALL COMPFACT ( RATIO, MXN, NNODE, XCOORD, U, FACT )
CALL PLOTUV (INDEX, VALUE, MXE, MXN,ND,NE,NNODE, U, NODEX,
* XCOORD, XPLOT, UPLOT, NPOINT, FACT, DECISION )
C=======================================================================
STOP
END
C
C
SUBROUTINE PLOTUV ( INDEX, VALUE, MXE,MXN,ND,NE,NNODE,U,NODEX,
* XCOORD,XPLOT,UPLOT,NPOINT,FACT,DECISION )
IMPLICIT REAL*8 ( A-H, O-Z )
PARAMETER ( NSEG=54, AL=0.3D0, BETA=0.08D0 )
DIMENSION NODEX(MXE,ND), XCOORD(3,MXN), U(3,MXN)
DIMENSION XPLOT(3,MXN), UPLOT(3,MXN),ISEG(NSEG),JSEG(NSEG),
* UP(3),XP(3), XMAX(3), XMIN(3)
LOGICAL DECISION(MXN)
DATA ISEG / 1, 2, 10, 11, 19, 20, 1, 10, 2, 11, 3,
* 12, 8, 9, 17, 18, 26, 27, 8, 17, 9, 18, 4, 13, 7,
* 6, 16, 15, 25, 24, 7, 16, 6, 15, 5, 14, 1, 2, 3,
* 10, 11, 12, 19, 20, 21, 8, 9, 4, 17, 18, 13, 26,
* 27, 22 /
DATA JSEG / 2, 3, 11, 12, 20, 21, 10, 19, 11, 20, 12,
* 21, 9, 4, 18, 13, 27, 22, 17, 26, 18, 27, 13, 22,
* 6, 5, 15, 14, 24, 23, 16, 25, 15, 24, 14, 23, 8,
* 9, 4, 17, 18, 13, 26, 27, 22, 7, 6, 5, 16, 15,
* 14, 25, 24, 23 /
C---------
NPOINT = 0
DO IEL = 1 , NE
DO J = 1 , NSEG
K = NODEX(IEL,ISEG(J))
L = NODEX(IEL,JSEG(J))
DIFF1 = VALUE - XCOORD(INDEX,K)
DIFF2 = VALUE - XCOORD(INDEX,L)
IF ( DIFF1*DIFF2 .LE. 0.D0 ) THEN
CALL LOCATION ( ND,MXN,K,L,INDEX,VALUE,XCOORD,U,UP,XP )
IF ( DSQRT(UP(1)**2+UP(2)**2+UP(3)**2) .NE. 0.D0 ) THEN
NPOINT = NPOINT + 1
XPLOT(1,NPOINT) = XP(1)
XPLOT(2,NPOINT) = XP(2)
XPLOT(3,NPOINT) = XP(3)
UPLOT(1,NPOINT) = UP(1)
UPLOT(2,NPOINT) = UP(2)
UPLOT(3,NPOINT) = UP(3)
END IF
END IF
END DO
END DO
WRITE (*,*) 'NUMBER OF VELOCITY VECTORS =', NPOINT
C-------------------------------------------
IF ( NPOINT .LE. 0 ) STOP 'NPOINT <= 0'
C-------------------------------------------
IF ( INDEX .EQ. 1 ) THEN
WRITE (*,*) 'YOU ARE ABOUT TO VIEW FLOW VECTOR IN Y-Z PLANE'
DO I = 1 , NPOINT
XPLOT(1,I) = XPLOT(2,I)
XPLOT(2,I) = XPLOT(3,I)
UPLOT(1,I) = UPLOT(2,I)
UPLOT(2,I) = UPLOT(3,I)
END DO
END IF
IF ( INDEX .EQ. 2 ) THEN
WRITE (*,*) 'YOU ARE ABOUT TO VIEW FLOW VECTOR IN X-Z PLANE'
DO I = 1 , NPOINT
XPLOT(2,I) = XPLOT(3,I)
UPLOT(2,I) = UPLOT(3,I)
END DO
END IF
IF ( INDEX .EQ. 3 ) THEN
WRITE (*,*) 'YOU ARE ABOUT TO VIEW FLOW VECTOR IN X-Y PLANE'
END IF
C--------------------------------------------------
CALL SORTING ( MXN, NPOINT, XPLOT, DECISION )
C--------------------------------------------------
OPEN ( 1, FILE='CUTUV.OUT', STATUS='UNKNOWN' )
DO I = 1 , NPOINT
IF ( DECISION(I) ) THEN
X0 = XPLOT(1,I)
Y0 = XPLOT(2,I)
DX = UPLOT(1,I) * FACT
DY = UPLOT(2,I) * FACT
RNX = BETA * DY
RNY = - BETA * DX
WRITE (1,*) X0, Y0
WRITE (1,*) X0+(1.-AL)*DX, Y0+(1.-AL)*DY
WRITE (1,*) X0+(1.-AL)*DX+RNX, Y0+(1.-AL)*DY+RNY
WRITE (1,*) X0+DX, Y0+DY
WRITE (1,*) X0+(1.-AL)*DX-RNX, Y0+(1.-AL)*DY-RNY
WRITE (1,*) X0+(1.-AL)*DX, Y0+(1.-AL)*DY
WRITE (1,*)
END IF
END DO
CLOSE (1)
RETURN
END
C
C
SUBROUTINE SORTING ( MXN, NPOINT, XPLOT, DECISION )
IMPLICIT REAL*8 ( A-H, O-Z )
DIMENSION XPLOT(3,MXN)
LOGICAL DECISION(MXN)
C
DO I = 1 , NPOINT
DECISION(I) = .TRUE.
END DO
C
DO I = 1 , NPOINT-1
IF ( DECISION(I) ) THEN
DO J = I+1 , NPOINT
IF ( XPLOT(1,I) .EQ. XPLOT(1,J) .AND.
* XPLOT(2,I) .EQ. XPLOT(2,J) ) THEN
DECISION(J) = .FALSE.
END IF
END DO
END IF
END DO
RETURN
END
C
C
SUBROUTINE LOCATION ( ND,MXN,K,L,INDEX,VALUE,XCOORD,U,UP,XP )
IMPLICIT REAL*8 ( A-H, O-Z )
DIMENSION XCOORD(3,MXN), U(3,MXN),UP(3),XP(3)
C----------------------------------------
DIFF1 = VALUE - XCOORD(INDEX,K)
DIFF2 = VALUE - XCOORD(INDEX,L)
C----------------------------------------
IF ( DIFF1 .EQ. 0.D0 ) THEN
DO J = 1 , 3
UP(J) = U(J,K)
XP(J) = XCOORD(J,K)
END DO
RETURN
END IF
C----------------------------------------
IF ( DIFF2 .EQ. 0.D0 ) THEN
DO J = 1 , 3
UP(J) = U(J,L)
XP(J) = XCOORD(J,L)
END DO
RETURN
END IF
C---------------------------------------------------------------
T=(VALUE-XCOORD(INDEX,K))/(XCOORD(INDEX,L)-XCOORD(INDEX,K))
DO J = 1 , 3
XP(J) = (1.D0-T)*XCOORD(J,K)+T*XCOORD(J,L)
UP(J) = (1.D0-T)*U(J,K)+T*U(J,L)
END DO
RETURN
END
C
C
C========X=========X=========X=========X=========X=========X=========X==
SUBROUTINE INPUT ( MXE,MXN,ND,NE,NNODE,NODEX,XCOORD,U,NF,FNAME )
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION NODEX(MXE,ND),XCOORD(3,MXN),U(3,MXN)
CHARACTER FNAME(NF)*11, PROJECT*7
LOGICAL YES
C------- RETURN VALUES: NEARLY ALL VARIBLES IN THIS SUBROUTINE
C========> FILENAME NSDATA.FLN
INQUIRE ( FILE='NSDATA.FLN', EXIST=YES )
IF ( .NOT. YES ) STOP' NSDATA.FLN DOES NOT EXIST'
OPEN ( 1, FILE='NSDATA.FLN', STATUS='OLD' )
READ(1,*)
READ(1,'(A7)') PROJECT
DO I = 1 , NF
READ(1,'(A11)') FNAME(I)
END DO
CLOSE (1)
WRITE(*,*)' PROJECT NAME:============>>>',PROJECT
C========> FILENAME XXXXXXX.ELE
OPEN ( 1, FILE=FNAME(2), STATUS='OLD' )
READ (1,*) NE
IF ( NE .GT. MXE) STOP'ERROR #1'
IF ( NE .LE. 0 ) STOP'NE=0'
DO I = 1 , NE
READ (1,*) IEL, ( NODEX(IEL,J), J = 1 , ND )
END DO
CLOSE (1)
C========> FILENAME XXXXXXX.NOD
OPEN ( 1, FILE=FNAME(3), STATUS='OLD' )
READ (1,*) NNODE
IF ( NNODE .GT. MXN) STOP'ERROR #2'
IF ( NNODE .LE. 0 ) STOP'NNODE=0'
DO I = 1 , NNODE
READ (1,*) NODE, (XCOORD(J,NODE),J=1,3)
END DO
CLOSE (1)
C========> FILENAME XXXXXXX.BIN
OPEN ( 1, FILE=FNAME(6), STATUS='OLD',FORM='UNFORMATTED' )
READ (1) TIME
READ (1) ( U(1,I) , I = 1 , NNODE )
READ (1) ( U(2,I) , I = 1 , NNODE )
READ (1) ( U(3,I) , I = 1 , NNODE )
CLOSE (1)
RETURN
END
C
C
SUBROUTINE COMPFACT ( RATIO,MXN,NNODE,XCOORD,U,FACT )
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION XCOORD(3,MXN),U(3,MXN),XMAX(3), XMIN(3), DX(3)
C-------------------------------------------------------------
DO J = 1 , 3
XMAX(J) = XCOORD(J,1)
XMIN(J) = XCOORD(J,1)
END DO
DO I = 1 , NNODE
DO J = 1 , 3
XMAX(J) = DMAX1 ( XMAX(J), XCOORD(J,I) )
XMIN(J) = DMIN1 ( XMIN(J), XCOORD(J,I) )
END DO
END DO
DO J = 1 , 3
DX(J) = XMAX(J) - XMIN(J)
END DO
C----------------------------------------------
RMAX = DSQRT ( U(1,1)**2+U(2,1)**2+U(3,1)**2 )
DO I = 1 , NNODE
RMAX = DMAX1 ( RMAX, DSQRT(U(1,I)**2+U(2,I)**2+U(3,I)**2) )
END DO
IF ( RMAX .EQ. 0 ) THEN
WRITE (*,*) 'NO VELOCITY FIELD EXISTS'
STOP
END IF
C---------------------------------------------
FACT = RATIO * DMAX1 (DX(1), DX(2), DX(3) ) / RMAX
RETURN
END