PROGRAM SETNS400
C     REYNOLDS NUMBER = 400
C=======================================================================
C      DATA GENERATING PROGRAM FOR NSEQ8XX.FOR
C   PROJECT: DRIVEN CAVITY FLOW   PROJECT NAME: DCFR400
C    DOMAIN: SQUARE ( 1 X 1 )
C    ELEMENT: FOUR-NODED ISOPARAMETRIC ELEMENT
C    DOMAIN DISCRETIZATION: UNEVEN ELEMENTS WITH VERTICAL SCAN
C     REYNOLDS NUMBER: SPECIFIED IN PARAMETER AS REYNLD
C     VISCOSITY RATIO [VRATIO]: 2ND VISCOSITY / 1ST VISCOSITY
C     EIJI FUKUMORI DECEMBER 29, 1993 
C=======================================================================
      IMPLICIT REAL*8 ( A-H , O-Z )
      PARAMETER ( ND=4, MXE=1200, MXN=1300, MXB=161, NF=9 )
      PARAMETER ( REYNLD=400.D0, VRATIO=1.D7, HEIGHT=1.D0, UAVE=1.D0,
     * VISCO=HEIGHT*UAVE/REYNLD,    FLMDA=VISCO*VRATIO,
     * DT = 0.05D0,     TMAX=50.D0,  MAXITE=10, ERMAX=0.001D0, C1=0.D0,
     * TLX = HEIGHT,   TLY = HEIGHT,   NEY = 20, NEX = 20,
     * DX = TLX / NEX, DY = TLY / NEY,
     * NDX=NEX+1,      NDY=NEY+1,  TIME = 0.D0, DTMAX=0.1D0, ITEFIX=4 )
C=======================================================================
      DIMENSION NODEX(MXE,ND), XCOORD(MXN), YCOORD(MXN), U(MXN), V(MXN),
     * IBNDFX(MXB),IBNDFY(MXB),BVX(MXB),BVY(MXB),IBNDS(MXB),BVS(MXB)
      CHARACTER FNAME(NF)*11,EXTEN(NF)*4,PROJECT*7,EXFILE*3
      LOGICAL YES
C=======================================================================
      DATA PROJECT / 'DCFR400' /
      DATA EXTEN / '.JNK', '.ELE', '.NOD', '.BND', '.INI', '.BIN', 
     *             '.XXX', '.MAX', '.STM' /
C=======================================================================
      F(X) = X * X * ( 3.- 2.* X )
      G(X) = X * ( (0.1-1.)* X + (2.- 0.1) )
C=======================================================================
C    C1: ADDED VISCOSITY COMPUTATION PARAMETER
C    C1=0. FOR NO ADDED VISCOSITY, C1=1. FOR UPWIND (OPTIMUM) ADDED 
C    C1 OPTION IS AVALABLE IN NSEQ8DD.FOR SOLVER
C         NEY: NEMBER OF VERTICAL ELEMENTS (NUMBER OF NODES: NEY+1)
C         NEX: NEMBER OF HORIZONTAL ELEMENTS (NUMBER OF NODES: NEX+1)
C  MAXITE: MAXIMUM NUMBER OF ITERATIONS AT EACH TIME INCREMENT
C ITERATION PROCEDURE IS REQUIRED BECAUSE OF NON-LINEAR CONVECTIVE TERM.
C  ERMAX: MAXIMUM DIFFERENCE BETWEEN GUESSED {U&V} AND COMPUTED {U&V}
C  HEIGHT: HEIGHT OF DRIVEN CAVITY FLOW DOMAIN
C=======================================================================
      CALL FILEMG ( NF, FNAME, EXTEN, PROJECT )
      WRITE (*,*)' DRIVEN CAVITY FLOW: REYNOLDS NUMBER OF ',REYNLD
      WRITE (*,*)' VISCOSITY RATIO OF ',VRATIO
C=======================================================================
C                    ELEMENT CREATION
      NE = 0
      DO J = 1 , NEX
      DO I = 1 , NEY
      NE = NE + 1
      IF ( NE .GT. MXE ) STOP 'NE > MXE'
      NODEX(NE,1) = NDY*(J-1) + I
      NODEX(NE,2) = NODEX(NE,1) + NDY
      NODEX(NE,3) = NODEX(NE,2) + 1
      NODEX(NE,4) = NODEX(NE,1) + 1
      END DO
      END DO
C=======================================================================
C                 NODAL COORDINATE CREATION
      NNODE = 0
      DO I = 1 , NDX
      DO J = 1 , NDY
      NNODE = NNODE + 1
      IF ( NNODE .GT. MXN ) STOP 'NNODE > MXN'
      XCOORD(NNODE) = TLX * F( DX*(I-1)/TLX )
      YCOORD(NNODE) = TLY * G( DY*(J-1)/TLY )
      END DO
      END DO
C=======================================================================
C                    BOUNDARY CONDITIONS
C--------- MOMENTUM EQUATIONS
C--------- FACE OF -X
      NBFX = 0
      NBFY = 0
      U0 = 0.
      V0 = 0.
      DO J = 2 , NDY-1
      NBFX = NBFX + 1
      NBFY = NBFY + 1
      IBNDFX(NBFX) = J
      IBNDFY(NBFY) = J
      BVX(NBFX) = U0
      BVY(NBFY) = V0
      END DO
C--------- FACE OF -Y
      U0 = 0.
      V0 = 0.
      DO I = 1 , NDX
      NBFX = NBFX + 1
      IBNDFX(NBFX) = 1 + NDY*(I-1)
      NBFY = NBFY + 1
      IBNDFY(NBFY) = 1 + NDY*(I-1)
      BVX(NBFX) = U0
      BVY(NBFY) = V0
      END DO
C--------- FACE OF +Y
      U0 = UAVE
      V0 = 0.
      DO I = 1 , NDX
      NBFX = NBFX + 1
      IBNDFX(NBFX) = I*NDY
      NBFY = NBFY + 1
      IBNDFY(NBFY) = I*NDY
      BVX(NBFX) = U0
      BVY(NBFY) = V0
      END DO
C--------- FACE OF +X
      U0 = 0.
      V0 = 0.
      DO I = 2 , NEY
      NBFX = NBFX + 1
      IBNDFX(NBFX) = NEX*NDY + I
      NBFY = NBFY + 1
      IBNDFY(NBFY) = NEX*NDY + I
      BVX(NBFX) = U0
      BVY(NBFY) = V0
      END DO
C=======================================================================
C                       INITIAL CONDITIONS
      U0 = 0.
      V0 = 0.
      DO I = 1 , NNODE
      U(I) = U0
      V(I) = V0
      END DO
C=======================================================================
C                     B. C. FOR STREAM FUNCTION
      DDY = YCOORD(NDY) - YCOORD(NDY-1)
      Q = DDY * UAVE / 2.
      NBS = NBFX
      DO I = 1 , NBS
      IBNDS(I) = IBNDFX(I)
      BVS(I) = BVX(I)
      IF ( BVX(I) .EQ. UAVE ) BVS(I) = Q
      END DO
C=======================================================================
C                      DATA FILE INQUIRY
      EXFILE = 'NEW'
      INQUIRE ( FILE = FNAME(1), EXIST = YES )
      IF ( YES ) EXFILE='OLD'
C=======================================================================
C                     MAKING DATA FILES
C---------- 'PROJECT'.JNK
      OPEN ( 1, FILE=FNAME(1), STATUS = EXFILE )
      WRITE(1,'(4G15.7)') VISCO, FLMDA
      WRITE(1,'(2I10)'  ) NE, NNODE
      WRITE(1,'(2I10)'  ) NBFX, NBFY
      WRITE(1,'(3G15.7)') DT, DTMAX, TMAX
      WRITE(1,'(2I10)'  ) ITEFIX, MAXITE
      WRITE(1,'(G15.7)' ) ERMAX
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.ELE
      OPEN ( 1, FILE=FNAME(2), STATUS = EXFILE )
      DO I = 1 , NE
      WRITE (1,115) I, (NODEX(I,J), J = 1 , ND )
      END DO
  115 FORMAT ( 5 I 6 )
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.NOD
      OPEN ( 1, FILE=FNAME(3), STATUS = EXFILE )
      WRITE(1,120) ( I,XCOORD(I), YCOORD(I) , I = 1, NNODE )
  120 FORMAT ( I6, 2G15.7 )
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.BND
      OPEN ( 1, FILE=FNAME(4), STATUS = EXFILE )
      WRITE (1,125) ( IBNDFX(I), BVX(I) , I = 1 , NBFX )
      WRITE (1,125) ( IBNDFY(I), BVY(I) , I = 1 , NBFY )
  125 FORMAT ( I6, G15.7 )
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.BIN
      OPEN ( 1, FILE=FNAME(6), STATUS = EXFILE,FORM='UNFORMATTED' )
      WRITE(1) TIME, DT
      WRITE(1) ( U(I)    , I = 1 , NNODE )
      WRITE(1) ( V(I)    , I = 1 , NNODE )
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.MAX
      OPEN ( 1, FILE=FNAME(8), STATUS = EXFILE )
      UMIN = 0.
      UMAX = 0.
      VMIN = 0.
      VMAX = 0.
      PMIN = 0.
      PMAX = 0.
      SMIN = 0.
      SMAX = 0.
      WRITE (1,*) UMIN , UMAX
      WRITE (1,*) VMIN , VMAX
      WRITE (1,*) PMIN , PMAX
      WRITE (1,*) SMIN , SMAX
      CLOSE (1)
C=======================================================================
C---------- 'PROJECT'.STM
      OPEN ( 1, FILE=FNAME(9), STATUS = EXFILE )
      WRITE(1,*) NBS
      WRITE (1,140) ( IBNDS(I) , BVS(I) , I = 1 , NBS )
  140 FORMAT ( I6 , G15.7 )
      CLOSE (1)
      STOP
      END
C
C
      SUBROUTINE FILEMG ( NF, FNAME, EXTEN, PROJECT )
      CHARACTER FNAME(NF)*11, PROJECT*7, EXTEN(NF)*4, FNWOE(7)*1,
     *          EXFILE*3
      LOGICAL YES
C------- RETURN VALUE: FNAME
C
      EXFILE ='NEW'
      INQUIRE ( FILE='NSDATA.FLN', EXIST=YES )
      IF ( YES ) EXFILE='OLD'
      OPEN ( UNIT=2, FILE='NSDATA.FLN', STATUS=EXFILE )
C
      NCHAR = 7
      DO I = 1 , NCHAR
      FNWOE(I) = PROJECT (I:I)
      END DO
      CALL GENFNM ( NCHAR, FNWOE, NF, FNAME, EXTEN )
      WRITE (2,'(I5)') NCHAR
      WRITE (2,'(7A1)') ( FNWOE(I) , I = 1 , NCHAR )
      DO I = 1 , NF
      WRITE (*,'(1X,A11)') FNAME(I)
      WRITE (2,'(   A11)') FNAME(I)
      END DO
      CLOSE (2)
      RETURN
      END
C
C
      SUBROUTINE GENFNM ( NCHAR, FNWOE, NF, FNAME, EXTEN )
      CHARACTER*1  FNWOE(7)
      CHARACTER*4  EXTEN(NF)
      CHARACTER*11 FNAME(NF)
      DO I = 1 , NF
      DO J = 1 , NCHAR
      FNAME (I) (J:J) = FNWOE(J)
      END DO
      DO J = NCHAR+1,NCHAR+4
      FNAME (I) (J:J) = EXTEN(I) (J-NCHAR:J-NCHAR)
      END DO
      END DO
      RETURN
      END