You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1011 lines
38 KiB
1011 lines
38 KiB
C Copyright(C) 1999-2021 National Technology & Engineering Solutions
|
|
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
|
C NTESS, the U.S. Government retains certain rights in this software.
|
|
C
|
|
C See packages/seacas/LICENSE for details
|
|
|
|
SUBROUTINE MESH (A, IA, MP, ML, MS, MR, MSC, MA, MCOM, ICOM, JCOM,
|
|
& CIN, RIN, IIN, KIN, IDUMP, N, IPOINT, COOR, IPBOUN, ILINE,
|
|
& LTYPE, NINT, FACTOR, LCON, ILBOUN, ISBOUN, ISIDE, NLPS, IFLINE,
|
|
& ILLIST, IBARST, JMAT, JCENT, NLPB, JFLINE, JLLIST, IREGN, IMAT,
|
|
& NSPR, IFSIDE, ISLIST, IRPB, IPBF, NPPF, IFPB, LISTPB, ILBF,
|
|
& NLPF, IFLB, LISTLB, ISBF, NSPF, IFSB, LISTSB, LINKP, LINKL,
|
|
& LINKS, LINKB, LINKR, LINKM, LINKSC, LINKPB, LINKLB, LINKSB,
|
|
& IWTPBF, IWTLBF, IWTSBF, RSIZE, IFHOLE, NHPR, IHLIST, IRGFLG,
|
|
& ISCHM, SCHEME, NUMBER, DEFSCH, DEFSIZ, TITLE, OPTIM, IDEV,
|
|
& ALPHA, DEV1, THREE, EIGHT, NINE, BATCH, VAXVMS, VERSN, AXIS,
|
|
& AREACG, LABN, LABE, LABO, LABNB, LABSB, LABM, LABW, WROTE,
|
|
& TIME1, HARDPL, EXODUSII)
|
|
C***********************************************************************
|
|
|
|
C SUBROUTINE MESH = PROCESSES THE MESH AND THEN GRAPHICALLY DISPLAYS
|
|
C THE MESH
|
|
|
|
C***********************************************************************
|
|
|
|
C SUBROUTINE CALLED BY:
|
|
C FASTQ = A PROGRAM TO QUICKLY PREPARE QMESH INPUT
|
|
|
|
C***********************************************************************
|
|
|
|
C SUBROUTINES CALLED:
|
|
C QMESH = GENERATES THE MESH
|
|
C RENUM = ASSIGNS NODAL AND ELEMENT NUMBERS TO THE MESH
|
|
|
|
C***********************************************************************
|
|
|
|
C VARIABLES USED:
|
|
C IANS = LOGICAL RESPONSE FROM YES-NO QUESTION
|
|
C TITLE = MESH TITLE
|
|
C TALL = CHARACTER HEIGHT SETTING PARAMETER
|
|
C STEP = .TRUE. IF GENERATION TO BE STEPPED THROUGH INTERACTIVELY
|
|
C DONE = .TRUE. IF MESH HAS BEEN PROCESSED
|
|
|
|
C***********************************************************************
|
|
|
|
PARAMETER (MAXNAM = 40, MLINK = 55)
|
|
|
|
include 'exodusII.inc'
|
|
|
|
C DIMENSIONS FOR MESH DEFINING ENTITIES (I.E. POINTS, LINES, ETC.)
|
|
|
|
DIMENSION A(1), IA(1)
|
|
DIMENSION IPOINT(MP), COOR(2, MP), IPBOUN(MP)
|
|
DIMENSION ILINE(ML), LTYPE(ML), NINT(ML), FACTOR(ML)
|
|
DIMENSION LCON(3, ML)
|
|
DIMENSION ILBOUN(ML), ISBOUN(ML)
|
|
DIMENSION ISIDE(MS), NLPS(MS), IFLINE(MS), ILLIST(MS*3)
|
|
DIMENSION IREGN(MR), IMAT(MR)
|
|
DIMENSION NSPR(MR), IFSIDE(MR), ISLIST(MR*4), IRGFLG(MR)
|
|
DIMENSION RSIZE(MR), IFHOLE(MR), NHPR(MR), IHLIST(MR*2)
|
|
DIMENSION IBARST(MS), JMAT(MS), JCENT(MS)
|
|
DIMENSION NLPB(MS), JFLINE(MS), JLLIST(MS*3)
|
|
DIMENSION IRPB(MR), ISCHM(MSC), SCHEME(MSC)
|
|
DIMENSION IPBF(MP), NPPF(MP), IFPB(MP)
|
|
DIMENSION LISTPB(2, MP), IWTPBF(3, MP)
|
|
DIMENSION ILBF(ML), NLPF(ML), IFLB(ML)
|
|
DIMENSION LISTLB(2, ML), IWTLBF(3, ML)
|
|
DIMENSION ISBF(ML), NSPF(ML), IFSB(ML)
|
|
DIMENSION LISTSB(2, ML), IWTSBF(3, ML)
|
|
DIMENSION LINKP(2, MP), LINKL(2, ML), LINKS(2, MS)
|
|
DIMENSION LINKB(2, MS)
|
|
DIMENSION LINKR(2, MR), LINKM(2, (MS + MR)), LINKSC(2, MR)
|
|
DIMENSION LINKPB(2, MP), LINKLB(2, ML), LINKSB(2, ML)
|
|
DIMENSION NUMBER(MSC)
|
|
DIMENSION N(29), K(41), IDEV(2), III(1)
|
|
DIMENSION KIN(MCOM), IIN(MCOM), RIN(MCOM)
|
|
|
|
CHARACTER*72 SCHEME, DEFSCH, TITLE, DEV1*3, CIN(MCOM)
|
|
CHARACTER*2048 FNAME
|
|
CHARACTER*80 NUMBER, HOLD, VERSN*10
|
|
|
|
LOGICAL OPTIM, STEP, ERR, ALPHA, THREE, EIGHT, NINE
|
|
LOGICAL AXIS, AREACG, LABE, LABO, LABN, LABNB, LABSB, LABM, LABW
|
|
LOGICAL ADDLNK, BATCH, VAXVMS, WROTE, HARDPL, LGROUP
|
|
LOGICAL REMESH, LONG
|
|
LOGICAL EXODUSII, ISBARS
|
|
|
|
CHARACTER*8 CDUMH, CDUMS
|
|
INTEGER CMPSIZ
|
|
|
|
NPREGN = 0
|
|
IZ = 0
|
|
ADDLNK = .FALSE.
|
|
REMESH = .FALSE.
|
|
|
|
C ENTER THE MESH OPTION
|
|
|
|
100 CONTINUE
|
|
IF (ICOM.GT.JCOM) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL FREFLD (IZ, IZ, 'ENTER MESH OPTION: ', MCOM, IOSTAT, JCOM,
|
|
& KIN, CIN, IIN, RIN)
|
|
ICOM = 1
|
|
END IF
|
|
|
|
C RETURN FROM MESHING AFTER DELETING THE MESH
|
|
|
|
IF (CIN(ICOM)(1:1) .EQ. ' ') THEN
|
|
ICOM = ICOM + 1
|
|
IF (NPREGN.GT.0) THEN
|
|
CALL MDDEL ('IPART')
|
|
CALL MDDEL ('LSTNBC')
|
|
CALL MDDEL ('LSTSBC')
|
|
CALL MDDEL ('NNFLG')
|
|
CALL MDDEL ('NNPTR')
|
|
CALL MDDEL ('NNLEN')
|
|
CALL MDDEL ('NSFLG')
|
|
CALL MDDEL ('NSPTR')
|
|
CALL MDDEL ('NSLEN')
|
|
CALL MDDEL ('NVPTR')
|
|
CALL MDDEL ('NVLEN')
|
|
CALL MDDEL ('NSIDEN')
|
|
CALL MDDEL ('NUID')
|
|
CALL MDDEL ('XN')
|
|
CALL MDDEL ('YN')
|
|
CALL MDDEL ('NXK')
|
|
CALL MDDEL ('MAT')
|
|
CALL MDDEL ('KXN')
|
|
CALL MDDEL ('LIST')
|
|
CALL MDDEL ('LA')
|
|
CALL MDDEL ('LB')
|
|
CALL MDDEL ('CENTK')
|
|
CALL MDDEL ('MATMAP')
|
|
CALL MDDEL ('LISTN')
|
|
CALL MDDEL ('WTNODE')
|
|
CALL MDDEL ('WTSIDE')
|
|
CALL MDDEL ('WTHOLD')
|
|
CALL MDDEL ('IHERE')
|
|
CALL MDDEL ('ILIST')
|
|
CALL MDDEL ('XLIST')
|
|
CALL MDDEL ('AMESUR')
|
|
CALL MDDEL ('XNOLD')
|
|
CALL MDDEL ('YNOLD')
|
|
CALL MDDEL ('NXKOLD')
|
|
CALL MDDEL ('MMPOLD')
|
|
CALL MDDEL ('LINKEG')
|
|
CALL MDDEL ('LISTEG')
|
|
CALL MDDEL ('BMESUR')
|
|
CALL MDDEL ('CMESUR')
|
|
CALL MDDEL ('DMESUR')
|
|
CALL MDSTAT (NERR, MUSED)
|
|
IF (NERR.GT.0) THEN
|
|
CALL MDEROR (6)
|
|
STOP ' '
|
|
END IF
|
|
KKK = 0
|
|
END IF
|
|
RETURN
|
|
|
|
C SPECIFY ExodusI (X1) or ExodusII (X2) database format
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'X') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'x')) THEN
|
|
if (cin(icom)(2:2) .eq. '2') then
|
|
exodusII = .TRUE.
|
|
call message ('Writing EXODUSII Format')
|
|
else if (cin(icom)(2:2) .eq. '1') then
|
|
exodusII = .FALSE.
|
|
call message ('Writing EXODUSI/GENESIS Format')
|
|
end if
|
|
ICOM = ICOM + 1
|
|
|
|
C ENTER THE MESH GRAPHICS OPTION
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'G') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'g')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO MESH HAS BEEN PROCESSED *')
|
|
CALL MESSAGE('* NO PLOTTING POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
ELSE
|
|
CALL GMESH (NPNODE, NPELEM, MXNFLG, MXSFLG, NPNBC, NPSBC,
|
|
& MAXKXN, MR, NPREGN, MCOM, ICOM, JCOM, CIN, RIN, IIN, KIN,
|
|
& NNN, KKK, NUMMAT, NNXK, IA(K(1)), IA(K(2)), IA(K(4)),
|
|
& IA(K(5)), IA(K(7)), IA(K(10)), IA(K(11)), IA(K(12)),
|
|
& IA(K(13)), A(K(14)), A(K(15)), IA(K(16)),
|
|
& IA(K(17)), IA(K(18)), IA(K(19)), A(K(22)),
|
|
& IA(K(23)), A(K(25)), A(K(26)), NBCNOD, NNLIST,
|
|
& NBCSID, NVLIST, TITLE, IDUMP, AXIS, AREACG, LABE, LABO,
|
|
& LABN, LABNB, LABSB, LABM, LABW, IDEV, ALPHA, DEV1, EIGHT,
|
|
& NINE, VAXVMS, VERSN, WROTE, TIME1, HARDPL, BATCH)
|
|
END IF
|
|
|
|
C TOGGLE OPTIMIZATION
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'O') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'o')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (OPTIM) THEN
|
|
OPTIM = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('BANDWIDTH OPTIMIZATION - DISABLED')
|
|
ELSE
|
|
OPTIM = .TRUE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('BANDWIDTH OPTIMIZATION - ENABLED')
|
|
END IF
|
|
|
|
C TOGGLE THREE NODE BAR ELEMENTS
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'T') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 't')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (THREE) THEN
|
|
THREE = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('THREE NODE BAR GENERATION - DISABLED')
|
|
ELSE
|
|
THREE = .TRUE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('THREE NODE BAR GENERATION - ENABLED')
|
|
END IF
|
|
KKK = 0
|
|
|
|
C TOGGLE EIGHT NODE ELEMENTS
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'EI') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'ei')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (EIGHT) THEN
|
|
EIGHT = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('EIGHT NODE QUAD GENERATION - DISABLED')
|
|
ELSE
|
|
EIGHT = .TRUE.
|
|
NINE = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('EIGHT NODE QUAD GENERATION - ENABLED')
|
|
END IF
|
|
KKK = 0
|
|
|
|
C TOGGLE NINE NODE ELEMENT GENERATION
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'NI') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'ni')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (NINE) THEN
|
|
NINE = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('NINE NODE QUAD GENERATION - DISABLED')
|
|
ELSE
|
|
NINE = .TRUE.
|
|
EIGHT = .FALSE.
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('NINE NODE QUAD GENERATION - ENABLED')
|
|
END IF
|
|
KKK = 0
|
|
|
|
C EXIT OPTION - EXITS FASTQ
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'EX') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'ex')) THEN
|
|
CALL STRLNG (CIN(ICOM), LEN)
|
|
IF (LEN .GT. 1) THEN
|
|
IF ( (CIN(ICOM)(2:2) .EQ. 'X') .OR.
|
|
& (CIN(ICOM)(2:2) .EQ. 'x')) THEN
|
|
ICOM = ICOM + 1
|
|
CALL FEXIT (WROTE, MCOM, ICOM, JCOM, CIN, IIN, RIN, KIN,
|
|
& TIME1, BATCH, VERSN)
|
|
ELSE
|
|
ICOM = ICOM + 1
|
|
CALL HELP_FQ(12)
|
|
ENDIF
|
|
ELSE
|
|
ICOM = ICOM + 1
|
|
CALL FEXIT (WROTE, MCOM, ICOM, JCOM, CIN, IIN, RIN, KIN,
|
|
& TIME1, BATCH, VERSN)
|
|
ENDIF
|
|
GOTO 100
|
|
|
|
C ENTER LINE INTERVALS
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'I') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'i')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (ICOM.GT.JCOM) THEN
|
|
CALL MESSAGE('ENTER LINE INTERVALS IN THE FOLLOWING '//
|
|
& 'FORMAT:')
|
|
CALL MESSAGE('[ LINE NO. (OR NEG SIDE NO.), INTERVALS ]')
|
|
CALL MESSAGE('HIT RETURN TO END INPUT')
|
|
END IF
|
|
110 CONTINUE
|
|
IF (ICOM.GT.JCOM) THEN
|
|
CALL FREFLD (IZ, IZ, '>', MCOM, IOSTAT, JCOM, KIN, CIN, IIN,
|
|
& RIN)
|
|
ICOM = 1
|
|
END IF
|
|
CALL GETI12 (MCOM, ICOM, JCOM, CIN, IIN, KIN, I1, I2, IFOUND)
|
|
IF (IFOUND.GT.0) THEN
|
|
III(1) = I1
|
|
CALL ININTR (ML, MS, 1, I2, III(1), N(19), N(20), NINT,
|
|
& NLPS, IFLINE, ILLIST, LINKL, LINKS, ADDLNK)
|
|
GOTO 110
|
|
END IF
|
|
|
|
C SPAWN A PROCESS
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'SP') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'sp')) THEN
|
|
ICOM = ICOM + 1
|
|
CALL SPAWN (VAXVMS)
|
|
|
|
C ENTER A NEW SIZE FOR A REGION
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'SI') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'si')) THEN
|
|
ICOM = ICOM + 1
|
|
CALL MESSAGE('NOTE: ENTER A DEFAULT SIZE BY SPECIFYING')
|
|
CALL MESSAGE(' A SIZE WITH NO REGIONS.')
|
|
CALL MESSAGE('ENTER REGION SIZE DATA IN THE FOLLOWING FORMAT:')
|
|
CALL MESSAGE('[ SIZE, REGION 1, REGION 2, ..., REGION N ]')
|
|
CALL MESSAGE('HIT RETURN TO END INPUT')
|
|
ICOM = JCOM + 1
|
|
120 CONTINUE
|
|
CALL FREFLD (IZ, IZ, '>', MCOM, IOSTAT, IFOUND, KIN, CIN, IIN,
|
|
& RIN)
|
|
IF (IFOUND .GT. 0) THEN
|
|
IF (IFOUND .LT. 2) THEN
|
|
DEFSIZ = RIN(1)
|
|
ELSE
|
|
ADDLNK = .FALSE.
|
|
DO 130 IRSZ = 2, IFOUND
|
|
CALL LTSORT(MR, LINKR, IIN(IRSZ), JJ, ADDLNK)
|
|
IF (JJ .GE. 0) THEN
|
|
RSIZE(JJ) = AMAX1(RIN(1), 0.)
|
|
ELSE
|
|
WRITE(*, 10000)IIN(IRSZ)
|
|
END IF
|
|
130 CONTINUE
|
|
END IF
|
|
GO TO 120
|
|
END IF
|
|
|
|
C GENERATE THE MESH
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'P') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'p') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'S') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 's')) THEN
|
|
DO 140 I = 1, 2
|
|
IF (N(I).LE.0) THEN
|
|
CALL MESSAGE('***************************************')
|
|
IF (I .EQ. 1) THEN
|
|
CALL MESSAGE
|
|
& ('* NO POINT CARDS IN DATABASE *')
|
|
ELSE
|
|
CALL MESSAGE
|
|
& ('* NO LINE CARDS IN DATABASE *')
|
|
END IF
|
|
CALL MESSAGE('* NO MESH GENERATION POSSIBLE *')
|
|
CALL MESSAGE('***************************************')
|
|
ICOM = ICOM + 1
|
|
GOTO 100
|
|
END IF
|
|
140 CONTINUE
|
|
IF ((CIN(ICOM)(1:1) .EQ. 'S') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 's')) THEN
|
|
STEP = .TRUE.
|
|
ELSE
|
|
STEP = .FALSE.
|
|
END IF
|
|
ICOM = ICOM + 1
|
|
|
|
C OPEN THE TEMPORARY FILE
|
|
|
|
IUNIT = 99
|
|
OPEN (UNIT = IUNIT, STATUS = 'scratch', FORM = 'unformatted',
|
|
& ACCESS = 'sequential')
|
|
REWIND IUNIT
|
|
|
|
C GENERATE THE MESH
|
|
|
|
IF (NPREGN.GT.0) THEN
|
|
CALL MDDEL ('IPART')
|
|
CALL MDDEL ('LSTNBC')
|
|
CALL MDDEL ('LSTSBC')
|
|
CALL MDDEL ('NNFLG')
|
|
CALL MDDEL ('NNPTR')
|
|
CALL MDDEL ('NNLEN')
|
|
CALL MDDEL ('NSFLG')
|
|
CALL MDDEL ('NSPTR')
|
|
CALL MDDEL ('NSLEN')
|
|
CALL MDDEL ('NVPTR')
|
|
CALL MDDEL ('NVLEN')
|
|
CALL MDDEL ('NSIDEN')
|
|
CALL MDDEL ('NUID')
|
|
CALL MDDEL ('XN')
|
|
CALL MDDEL ('YN')
|
|
CALL MDDEL ('NXK')
|
|
CALL MDDEL ('MAT')
|
|
CALL MDDEL ('KXN')
|
|
CALL MDDEL ('LIST')
|
|
CALL MDDEL ('LA')
|
|
CALL MDDEL ('LB')
|
|
CALL MDDEL ('CENTK')
|
|
CALL MDDEL ('MATMAP')
|
|
CALL MDDEL ('LISTN')
|
|
CALL MDDEL ('WTNODE')
|
|
CALL MDDEL ('WTSIDE')
|
|
CALL MDDEL ('WTHOLD')
|
|
CALL MDDEL ('IHERE')
|
|
CALL MDDEL ('ILIST')
|
|
CALL MDDEL ('XLIST')
|
|
IF (.NOT. REMESH) THEN
|
|
CALL MDDEL ('AMESUR')
|
|
CALL MDDEL ('XNOLD')
|
|
CALL MDDEL ('YNOLD')
|
|
CALL MDDEL ('NXKOLD')
|
|
CALL MDDEL ('MMPOLD')
|
|
CALL MDDEL ('LINKEG')
|
|
CALL MDDEL ('LISTEG')
|
|
CALL MDDEL ('BMESUR')
|
|
CALL MDDEL ('CMESUR')
|
|
CALL MDDEL ('DMESUR')
|
|
END IF
|
|
CALL MDSTAT (NERR, MUSED)
|
|
IF (NERR.GT.0) THEN
|
|
CALL MDEROR (6)
|
|
STOP ' '
|
|
END IF
|
|
NPREGN = 0
|
|
|
|
C SET UP THE ARRAYS FOR ADAPTIVE REMESHING
|
|
|
|
END IF
|
|
IF (.NOT. REMESH) THEN
|
|
CALL MDRSRV ('AMESUR', K(31), 1)
|
|
CALL MDRSRV ('XNOLD', K(32), 1)
|
|
CALL MDRSRV ('YNOLD', K(33), 1)
|
|
CALL MDRSRV ('NXKOLD', K(34), 4)
|
|
CALL MDRSRV ('MMPOLD', K(35), 3)
|
|
CALL MDRSRV ('LINKEG', K(36), 2)
|
|
CALL MDRSRV ('LISTEG', K(37), 2)
|
|
CALL MDRSRV ('BMESUR', K(38), 1)
|
|
CALL MDRSRV ('CMESUR', K(39), 1)
|
|
CALL MDRSRV ('DMESUR', K(40), 1)
|
|
NPROLD = 1
|
|
NPNOLD = 1
|
|
NPEOLD = 1
|
|
NNXK = 1
|
|
CALL MDSTAT (NERR, MUSED)
|
|
IF (NERR.GT.0) THEN
|
|
CALL MDEROR (6)
|
|
STOP ' '
|
|
END IF
|
|
END IF
|
|
|
|
LGROUP = .FALSE.
|
|
DO 150 I = 1, N(7)
|
|
IF (IRGFLG(I) .GE. 1) THEN
|
|
LGROUP = .TRUE.
|
|
GO TO 160
|
|
END IF
|
|
150 CONTINUE
|
|
160 CONTINUE
|
|
CALL QMESH (A, IA, MP, ML, MS, MR, MSC, MCOM, ICOM, JCOM, CIN,
|
|
& RIN, IIN, KIN, IUNIT, IDUMP, N, IPOINT, COOR, IPBOUN,
|
|
& ILINE, LTYPE, NINT, FACTOR, LCON, ILBOUN, ISBOUN, ISIDE,
|
|
& NLPS, IFLINE, ILLIST, IBARST, JMAT, JCENT, NLPB, JFLINE,
|
|
& JLLIST, IREGN, IMAT, NSPR, IFSIDE, ISLIST, IRPB, IPBF,
|
|
& NPPF, IFPB, LISTPB, ILBF, NLPF, IFLB, LISTLB, ISBF, NSPF,
|
|
& IFSB, LISTSB, LINKP, LINKL, LINKS, LINKB, LINKR, LINKSC,
|
|
& LINKPB, LINKLB, LINKSB, RSIZE, IFHOLE, NHPR, IHLIST,
|
|
& IRGFLG, ISCHM, SCHEME, DEFSCH, DEFSIZ, NPREGN, NPNBC, NPSBC,
|
|
& NPNODE, NPELEM, MAXKXN, STEP, DEV1, THREE, EIGHT, NINE,
|
|
& LGROUP, BATCH, A(K(31)), A(K(32)), A(K(33)), A(K(34)),
|
|
& A(K(35)), A(K(36)), A(K(37)), A(K(38)), MLINK, NPROLD,
|
|
& NPNOLD, NPEOLD, NNXK, REMESH, REXMIN, REXMAX, REYMIN,
|
|
& REYMAX, IDIVIS, SIZMIN, EMAX, EMIN)
|
|
|
|
IF (REMESH) REMESH = .FALSE.
|
|
IF (NPREGN.GT.0) THEN
|
|
|
|
C SET UP THE NECESSARY DIMENSIONING FOR NUMBERING
|
|
|
|
C A(K(1)) = IPART = ARRAY OF BEGINNING/ENDING ELEMENT NUMBERS/REGION
|
|
C A(K(2)) = LSTNBC = LIST OF NODAL BOUNDARY CONDITIONS
|
|
C (REORDERED TO NODES)
|
|
C A(K(3)) = LSTSBC = LIST OF SIDE BOUNDARY CONDITIONS
|
|
C (REORDERED TO NELEMS)
|
|
C A(K(4)) = NNFLG = LIST OF NODAL FLAGS
|
|
C A(K(5)) = NNPTR = POINTERS INTO THE NODES LIST FOR EACH NODE FLAG
|
|
C A(K(6)) = NNLEN = NUMBER OF NODES IN THE LIST FOR EACH NODE FLAG
|
|
C A(K(7)) = NSFLG = LIST OF SIDE FLAGS
|
|
C A(K(8)) = NSPTR = POINTERS INTO THE SIDES LIST FOR EACH SIDE FLAG
|
|
C A(K(9)) = NSLEN = NUMBER OF SIDES IN THE LIST FOR EACH SIDE FLAG
|
|
C A(K(10)) = NVPTR = POINTERS INTO THE NSIDEN LIST FOR EACH SIDE FLAG
|
|
C A(K(11)) = NVLEN = NUMBER OF NODES IN THE NSIDEN LIST FOR EACH
|
|
C SIDE FLAG
|
|
C A(K(12)) = NSIDEN = LIST OF SIDE NODES ASSOCIATED WITH THE SIDE LIST
|
|
C A(K(13)) = NUID = NODE UNIQUE IDENTIFIER ARRAY
|
|
C (LATER - MAPDXG ARRAY)
|
|
C A(K(14)) = XN = X COORDINATE OF THE NODES
|
|
C A(K(15)) = YN = Y COORDINATE OF THE NODES
|
|
C A(K(16)) = NXK = NODES PER ELEMENT (CONNECTIVITY) ARRAY
|
|
C A(K(17)) = MAT = MATERIAL NUMBER FOR EACH ELEMENT
|
|
C A(K(18)) = KXN = ELEMENTS ATTACHED TO EACH NODE
|
|
C (LATER - LOOKUP TABLE)
|
|
C A(K(19)) = LIST = WORKING ARRAY FOR NODE NUMBERING
|
|
C (LATER - MAPGXD ARRAY)
|
|
C A(K(20)) = LA = WORKING ARRAY FOR NODE NUMBERING
|
|
C A(K(21)) = LB = WORKING ARRAY FOR NODE NUMBERING
|
|
C A(K(22)) = CENTK = ARRAY CONTAINING X, Y LOCATION OF
|
|
C ELEMENT CENTER
|
|
C A(K(23)) = MATMAP = ARRAY OF BEGIN/END ELEMENT NUMBERS/REGION IN
|
|
C MAPGXD
|
|
C A(K(24)) = LISTN = LIST FOR RENUMBERING THE NODES FOR
|
|
C BANDWIDTH OPTIMIZATION
|
|
C A(K(25)) = WTNODE = NODAL BOUNDARY FLAG WEIGHTING FACTOR ARRAY
|
|
C A(K(26)) = WTSIDE = ELEMENT SIDE BOUNDARY FLAG WEIGHTING
|
|
C FACTOR ARRAY
|
|
C A(K(27)) = WTHOLD = TEMPORARY ARRAY USED FOR MIDSIDE NODE
|
|
C PROCESSING
|
|
C A(K(28)) = IHERE = A WORK ARRAY FOR SORTING BOUNDARY FLAGS
|
|
C A(K(29)) = ILIST = LINE LIST FOR WEIGHTED BOUNDARIES
|
|
C A(K(30)) = XLIST = WORKING LIST FOR WEIGHTED BOUNDARIES
|
|
C A(K(31)) = AMESUR = FIRST ADAPTIVE MESHING VARIABLE
|
|
C A(K(32)) = XNOLD = OLD XN ARRAY USED DURING ADAPTIVE MESHING
|
|
C A(K(33)) = YNOLD = OLD YN ARRAY USED DURING ADAPTIVE MESHING
|
|
C A(K(34)) = NXKOLD = OLD NXK ARRAY USED DURING ADAPTIVE MESHING
|
|
C A(K(35)) = MMPOLD = OLD MATMAP ARRAY USED DURING ADAPTIVE MESHING
|
|
C A(K(36)) = LINKEG = ELEMENT GRID LINK FOR ADAPTIVE MESHING
|
|
C A(K(37)) = LISTEG = ELEMENT GRID LIST FOR ADAPTIVE MESHING
|
|
C A(K(38)) = BMESUR = AMESUR VALUES AVERAGED AT THE NODES
|
|
C A(K(31)) = CMESUR = SECOND ADAPTIVE MESHING VARIABLE
|
|
C A(K(40)) = DMESUR = CMESUR VALUES AVERAGED AT THE NODES
|
|
|
|
IF (EIGHT) THEN
|
|
NPNBC = NPNBC*2
|
|
NPSBC = NPSBC*2
|
|
NNXK = 8
|
|
ELSE IF (NINE) THEN
|
|
NPNBC = NPNBC*2
|
|
NPSBC = NPSBC*2
|
|
NNXK = 9
|
|
ELSE
|
|
NNXK = 4
|
|
END IF
|
|
NPWTS = MAX0 (NPNBC, NPSBC)
|
|
MXNFLG = N(11) + N(13) + 1
|
|
MXSFLG = N(15) + 1
|
|
NNUID = MAX0 (NPNODE, NPNBC, NPSBC, NPELEM)
|
|
MXLPS = 2
|
|
DO 170 I = 1, N(3)
|
|
MXLPS = MAX0(NLPS(I) + 1, MXLPS)
|
|
170 CONTINUE
|
|
CALL MDRSRV ('IPART', K(1), 3*NPREGN)
|
|
CALL MDRSRV ('LSTNBC', K(2), NPNBC)
|
|
CALL MDRSRV ('LSTSBC', K(3), NPSBC)
|
|
CALL MDRSRV ('NNFLG', K(4), MXNFLG)
|
|
CALL MDRSRV ('NNPTR', K(5), MXNFLG)
|
|
CALL MDRSRV ('NNLEN', K(6), MXNFLG)
|
|
CALL MDRSRV ('NSFLG', K(7), MXSFLG)
|
|
CALL MDRSRV ('NSPTR', K(8), MXSFLG)
|
|
CALL MDRSRV ('NSLEN', K(9), MXSFLG)
|
|
CALL MDRSRV ('NVPTR', K(10), MXSFLG)
|
|
CALL MDRSRV ('NVLEN', K(11), MXSFLG)
|
|
CALL MDRSRV ('NSIDEN', K(12), NPSBC)
|
|
CALL MDRSRV ('NUID', K(13), NNUID)
|
|
CALL MDRSRV ('XN', K(14), NPNODE)
|
|
CALL MDRSRV ('YN', K(15), NPNODE)
|
|
CALL MDRSRV ('NXK', K(16), NPELEM*NNXK)
|
|
CALL MDRSRV ('MAT', K(17), NPELEM)
|
|
C ... The kxn array is used for a work array in renum and needs to hold npsbc items.
|
|
if (npsbc .gt. maxkxn) maxkxn = npsbc
|
|
CALL MDRSRV ('KXN', K(18), MAXKXN*NNXK)
|
|
CALL MDRSRV ('LIST', K(19), NNUID)
|
|
CALL MDRSRV ('LA', K(20), NPNODE)
|
|
CALL MDRSRV ('LB', K(21), NPNODE)
|
|
CALL MDRSRV ('CENTK', K(22), NPELEM*2)
|
|
CALL MDRSRV ('MATMAP', K(23), NPREGN*3)
|
|
CALL MDRSRV ('LISTN', K(24), NNUID)
|
|
CALL MDRSRV ('WTNODE', K(25), NPNBC)
|
|
CALL MDRSRV ('WTSIDE', K(26), NPSBC)
|
|
CALL MDRSRV ('WTHOLD', K(27), NPWTS)
|
|
CALL MDRSRV ('IHERE', K(28), NNUID)
|
|
CALL MDRSRV ('ILIST', K(29), MXLPS)
|
|
CALL MDRSRV ('XLIST', K(30), MXLPS)
|
|
CALL MDSTAT (NERR, MUSED)
|
|
IF (NERR.GT.0) THEN
|
|
CALL MDEROR (6)
|
|
STOP ' '
|
|
END IF
|
|
|
|
if (n(5) .gt. 0) then
|
|
isbars = .true.
|
|
else
|
|
isbars = .false.
|
|
end if
|
|
|
|
CALL RENUM (NPNODE, NPELEM, MXNFLG, MXSFLG, NPNBC, NPSBC,
|
|
& NPWTS, NPREGN, MP, ML, MS, MR, MSC, MAXKXN, NNUID, NNXK,
|
|
& MXLPS, IUNIT, NNN, KKK, N(28), N(2), N(11), N(13),
|
|
& N(15), IA(K(1)), IA(K(2)), IA(K(3)), IA(K(4)),
|
|
& IA(K(5)), IA(K(6)), IA(K(7)), IA(K(8)), IA(K(9)),
|
|
& IA(K(10)), IA(K(11)), IA(K(12)), IA(K(13)),
|
|
& A(K(14)), A(K(15)), IA(K(16)), IA(K(17)),
|
|
& IA(K(18)), IA(K(19)), IA(K(20)), IA(K(21)),
|
|
& IA(K(23)), IA(K(24)), A(K(25)), A(K(26)),
|
|
& A(K(27)), IA(K(28)), IA(K(29)), A(K(30)), NUMMAT,
|
|
& NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, COOR, ILINE,
|
|
& LTYPE, LCON, ISIDE, NLPS, IFLINE, ILLIST, LINKP, LINKL,
|
|
& LINKS, LINKR, IMAT, LINKB, JMAT, IPBF, NPPF, IFPB,
|
|
& LISTPB, IWTPBF, ILBF, NLPF, IFLB, LISTLB, IWTLBF, ISBF,
|
|
& NSPF, IFSB, LISTSB, IWTSBF, LINKPB, LINKLB, LINKSB,
|
|
& NUMBER, THREE, EIGHT, NINE, OPTIM, ISBARS)
|
|
|
|
C AN ERROR HAS OCCURRED AND THUS THE DUMMY REMESH ARRAYS MUST BE
|
|
C DELETED IF NOT REMESHING
|
|
|
|
ELSEIF (.NOT. REMESH) THEN
|
|
CALL MDDEL ('AMESUR')
|
|
CALL MDDEL ('XNOLD')
|
|
CALL MDDEL ('YNOLD')
|
|
CALL MDDEL ('NXKOLD')
|
|
CALL MDDEL ('MMPOLD')
|
|
CALL MDDEL ('LINKEG')
|
|
CALL MDDEL ('LISTEG')
|
|
CALL MDDEL ('BMESUR')
|
|
CALL MDDEL ('CMESUR')
|
|
CALL MDDEL ('DMESUR')
|
|
CALL MDSTAT (NERR, MUSED)
|
|
IF (NERR.GT.0) THEN
|
|
CALL MDEROR (6)
|
|
STOP ' '
|
|
END IF
|
|
END IF
|
|
|
|
CLOSE (IUNIT)
|
|
|
|
C ENTER LINE FACTORS
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'F') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'f')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (ICOM.GT.JCOM) THEN
|
|
CALL MESSAGE('ENTER LINE FACTORS IN THE FOLLOWING FORMAT:')
|
|
CALL MESSAGE('[ LINE NO. (OR NEG. SIDE NO.), FACTOR ]')
|
|
CALL MESSAGE('HIT RETURN TO END INPUT')
|
|
END IF
|
|
180 CONTINUE
|
|
IF (ICOM.GT.JCOM) THEN
|
|
CALL FREFLD (IZ, IZ, '>', MCOM, IOSTAT, JCOM, KIN, CIN, IIN,
|
|
& RIN)
|
|
ICOM = 1
|
|
END IF
|
|
CALL GETI1R (MCOM, ICOM, JCOM, CIN, IIN, RIN, KIN, I1, R1,
|
|
& IFOUND)
|
|
IF (IFOUND.GT.0) THEN
|
|
III(1) = I1
|
|
CALL INFACT (ML, MS, 1, R1, III(1), N(19), N(20), FACTOR,
|
|
& NLPS, IFLINE, ILLIST, LINKL, LINKS, ADDLNK)
|
|
GOTO 180
|
|
END IF
|
|
|
|
C CLEAR OUT ALL THE INTERVALS ASSIGNED TO LINES BY REGION
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'CI') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'ci')) THEN
|
|
ICOM = ICOM + 1
|
|
CALL MESSAGE('CLEAR INTERVALS FROM REGIONS FROM <I1> TO <I2>')
|
|
CALL MESSAGE('HIT RETURN TO END INPUT')
|
|
200 CONTINUE
|
|
IF (ICOM.GT.JCOM)THEN
|
|
CALL FREFLD (IZ, IZ, '>', MCOM, IOSTAT, JCOM, KIN, CIN,
|
|
& IIN, RIN)
|
|
ICOM = 1
|
|
ENDIF
|
|
CALL GETI12 (MCOM, ICOM, JCOM, CIN, IIN, KIN, I1, I2, IFOUND)
|
|
|
|
IF (IFOUND .GT. 0) THEN
|
|
IF (I1 .GT. 0) THEN
|
|
CALL CHECK (I1, I2, N (22))
|
|
|
|
C REMOVE INTERVALS ON LINES ASSOCIATED WITH THE REGIONS
|
|
|
|
DO 230 I = I1, I2
|
|
CALL LTSORT (MR, LINKR, I, II, ADDLNK)
|
|
IF (II .GT. 0) THEN
|
|
DO 220 J = IFSIDE (II), IFSIDE (II) + NSPR (II)-1
|
|
|
|
C FIRST REMOVE INTERVALS OF LINES ON SIDE DATA
|
|
|
|
CALL LTSORT (MS, LINKS, ISLIST (J), JJ, ADDLNK)
|
|
IF ((ISLIST (J) .GT. 0) .AND. (JJ .GT. 0)) THEN
|
|
DO 210 KKK = IFLINE (JJ), IFLINE (JJ) +
|
|
& NLPS (JJ)-1
|
|
CALL LTSORT (ML, LINKL, ILLIST (KKK), KK,
|
|
& ADDLNK)
|
|
IF (KK .GT. 0) NINT (KK) = 0
|
|
210 CONTINUE
|
|
|
|
C NEXT REMOVE INTERVALS ON LINES ALONE
|
|
|
|
ELSE
|
|
JJ = IABS (ISLIST (J))
|
|
CALL LTSORT (ML, LINKL, JJ, KK, ADDLNK)
|
|
IF (KK.GT.0) NINT (KK) = 0
|
|
ENDIF
|
|
220 CONTINUE
|
|
ENDIF
|
|
230 CONTINUE
|
|
GOTO 200
|
|
ENDIF
|
|
ENDIF
|
|
|
|
C ADJUST THE MESH
|
|
|
|
ELSE IF ((CIN(ICOM)(1:2) .EQ. 'AD') .OR.
|
|
& (CIN(ICOM)(1:2) .EQ. 'ad')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO MESH ADJUSTMENT POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
CALL ADJMSH (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, MCOM, ICOM, JCOM, CIN, RIN, IIN, KIN, NNN,
|
|
& KKK, NNXK, IA(K(2)), IA(K(3)), IA(K(4)), IA(K(5)), IA(K(6)),
|
|
& IA(K(7)), IA(K(8)), IA(K(9)), IA(K(10)), IA(K(11)),
|
|
& IA(K(12)), IA(K(13)), A(K(14)), A(K(15)), IA(K(16)),
|
|
& IA(K(17)), IA(K(19)), IA(K(23)), A(K(25)), A(K(26)), NBCNOD,
|
|
& NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT, LINKM, TITLE, ERR,
|
|
& EIGHT, NINE, VERSN)
|
|
IF (ERR) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('******************************************')
|
|
CALL MESSAGE('* ERROR ADJUSTING MESH *')
|
|
CALL MESSAGE('******************************************')
|
|
CALL MESSAGE(' ')
|
|
END IF
|
|
|
|
C CALCULATE A DISTORTION INDEX FOR THE REGIONS
|
|
|
|
ELSE IF (((CIN(ICOM)(1:1) .EQ. 'D') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'd')) .AND.
|
|
& (CIN(ICOM)(2:2) .NE. 'N') .AND.
|
|
& (CIN(ICOM)(2:2) .NE. 'n')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO DISTORTION INDEX CALCULATED *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
CALL RGDSTR (NPNODE, NPELEM, KKK, NNXK, IA(K(14)),
|
|
& A(K(15)), A(K(16)) )
|
|
|
|
C Write out the mesh data into the genesis or exodusII data base
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'W') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'w')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO EXODUSII FILE WRITING POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
IUNIT = 9
|
|
240 CONTINUE
|
|
IF (BATCH) THEN
|
|
CALL EXNAME (IUNIT, FNAME, LN)
|
|
ELSE
|
|
IF (ICOM.LE.JCOM) THEN
|
|
FNAME = CIN(ICOM)
|
|
LN = lenstr(FNAME)
|
|
ICOM = ICOM + 1
|
|
ELSE
|
|
CALL INQSTR ('OUTPUT DATABASE FILE NAME: ',
|
|
& FNAME)
|
|
LN = lenstr(FNAME)
|
|
END IF
|
|
END IF
|
|
C ... Create the exodusII file
|
|
if (EXODUSII) THEN
|
|
CMPSIZ = 0
|
|
IOWS = 0
|
|
|
|
C ... See if user-specified output word size EXT05
|
|
call exname (-5, hold, llen)
|
|
if (llen .lt. 1) goto 25
|
|
read(hold,'(i1)',ERR=25)iows
|
|
goto 26
|
|
25 continue
|
|
|
|
call exparm (cdumh, cdums, idum, iows, idum, idum)
|
|
26 continue
|
|
|
|
C ... One final check to make sure we have a valid iows.
|
|
if (iows .ne. 4 .and. iows .ne. 8) then
|
|
iows = 4
|
|
endif
|
|
|
|
iunit = excre(FNAME(:LN), EXCLOB, CMPSIZ, IOWS, IERR)
|
|
if (ierr .lt. 0) then
|
|
call exopts (EXVRBS, ierr)
|
|
call exerr('fastq', 'Error from excre', ierr)
|
|
if (batch) then
|
|
stop 'Exodus Error'
|
|
else
|
|
go to 240
|
|
endif
|
|
endif
|
|
CALL WREX2 (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, IUNIT, NNN, KKK, NNXK, IA(K(2)),
|
|
& IA(K(3)), IA(K(4)), IA(K(5)), IA(K(6)), IA(K(7)),
|
|
& IA(K(8)), IA(K(9)), IA(K(10)), IA(K(11)), IA(K(12)),
|
|
& IA(K(13)), A(K(14)), A(K(15)), IA(K(16)), IA(K(17)),
|
|
& IA(K(19)), IA(K(23)), A(K(25)), A(K(26)),
|
|
& NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT, LINKM,
|
|
& TITLE, ERR, EIGHT, NINE, VERSN, A, IA, FNAME(:LN))
|
|
IF (ERR) THEN
|
|
IF (BATCH) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE
|
|
& ('******************************************')
|
|
CALL MESSAGE
|
|
& ('* ERROR WRITING GENESIS DATABASE FILE *')
|
|
CALL MESSAGE
|
|
& ('* NO OUTPUT FILE SAVED *')
|
|
CALL MESSAGE
|
|
& ('******************************************')
|
|
CALL MESSAGE(' ')
|
|
STOP
|
|
END IF
|
|
END IF
|
|
call exclos(iunit, ierr)
|
|
else
|
|
OPEN (UNIT = IUNIT, FILE = FNAME(:LN), STATUS = 'UNKNOWN',
|
|
& FORM = 'UNFORMATTED', ACCESS = 'SEQUENTIAL', ERR = 240)
|
|
REWIND IUNIT
|
|
CALL WRGENS (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, IUNIT, NNN, KKK, NNXK, IA(K(2)),
|
|
& IA(K(3)), IA(K(4)), IA(K(5)), IA(K(6)), IA(K(7)),
|
|
& IA(K(8)), IA(K(9)), IA(K(10)), IA(K(11)), IA(K(12)),
|
|
& IA(K(13)), A(K(14)), A(K(15)), IA(K(16)), IA(K(17)),
|
|
& IA(K(19)), IA(K(23)), A(K(25)), A(K(26)),
|
|
& NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT, LINKM,
|
|
& TITLE, ERR, EIGHT, NINE, VERSN)
|
|
IF (ERR) THEN
|
|
CLOSE (UNIT = IUNIT, STATUS = 'DELETE')
|
|
IF (BATCH) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE
|
|
& ('******************************************')
|
|
CALL MESSAGE
|
|
& ('* ERROR WRITING GENESIS DATABASE FILE *')
|
|
CALL MESSAGE
|
|
& ('* NO OUTPUT FILE SAVED *')
|
|
CALL MESSAGE
|
|
& ('******************************************')
|
|
CALL MESSAGE(' ')
|
|
STOP
|
|
END IF
|
|
ELSE
|
|
CLOSE (UNIT = IUNIT, STATUS = 'KEEP')
|
|
end if
|
|
end if
|
|
|
|
C WRITE OUT THE MESH DATA INTO THE ERROR CODE DATA FORMAT
|
|
|
|
ELSE IF ((CIN (ICOM) (1:1) .EQ. 'J') .OR.
|
|
& (CIN (ICOM) (1:1) .EQ. 'j')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO FILE WRITING POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
IUNIT = 99
|
|
250 CONTINUE
|
|
IF (ICOM.LE.JCOM) THEN
|
|
FNAME = CIN (ICOM)
|
|
ICOM = ICOM + 1
|
|
ELSE
|
|
CALL INQSTR ('JOE''S ERROR OUTPUT FILE NAME: ', FNAME)
|
|
END IF
|
|
OPEN (UNIT = IUNIT, FILE = FNAME, STATUS = 'NEW', ERR = 250)
|
|
REWIND IUNIT
|
|
CALL WRJERR (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, IUNIT, NNN, KKK, NNXK, IA(K(2)), IA(K(3)),
|
|
& IA(K(4)), IA(K(5)), IA(K(6)), IA(K(7)), IA(K(8)),
|
|
& IA(K(9)), IA(K(10)), IA(K(11)), IA(K(12)), IA(K(13)),
|
|
& A(K(14)), A(K(15)), IA(K(16)), IA(K(17)), IA(K(19)),
|
|
& IA(K(23)), NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT,
|
|
& LINKM, TITLE, ERR, EIGHT, NINE)
|
|
IF(ERR) THEN
|
|
CLOSE (UNIT = IUNIT, STATUS = 'DELETE')
|
|
ELSE
|
|
CLOSE (UNIT = IUNIT, STATUS = 'KEEP')
|
|
END IF
|
|
|
|
C WRITE OUT THE MESH DATA INTO THE ABAQUS DATA FORMAT
|
|
|
|
ELSE IF ((CIN (ICOM) (1:1) .EQ. 'A') .OR.
|
|
& (CIN (ICOM) (1:1) .EQ. 'a')) THEN
|
|
ICOM = ICOM + 1
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO FILE WRITING POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
IUNIT = 99
|
|
260 CONTINUE
|
|
IF (ICOM.LE.JCOM) THEN
|
|
FNAME = CIN (ICOM)
|
|
ICOM = ICOM + 1
|
|
ELSE
|
|
CALL INQSTR ('ABAQUS OUTPUT FILE NAME: ', FNAME)
|
|
END IF
|
|
OPEN (UNIT = IUNIT, FILE = FNAME, STATUS = 'UNKNOWN',
|
|
& ERR = 260)
|
|
REWIND IUNIT
|
|
CALL WRABQS (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, IUNIT, NNN, KKK, NNXK, IA(K(2)), IA(K(3)),
|
|
& IA(K(4)), IA(K(5)), IA(K(6)), IA(K(7)), IA(K(8)),
|
|
& IA(K(9)), IA(K(10)), IA(K(11)), IA(K(12)), IA(K(13)),
|
|
& A(K(14)), A(K(15)), IA(K(16)), IA(K(17)), IA(K(19)),
|
|
& IA(K(23)), NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT,
|
|
& LINKM, TITLE, ERR, EIGHT, NINE)
|
|
IF(ERR) THEN
|
|
CLOSE (UNIT = IUNIT, STATUS = 'DELETE')
|
|
ELSE
|
|
CLOSE (UNIT = IUNIT, STATUS = 'KEEP')
|
|
END IF
|
|
|
|
C WRITE OUT THE MESH DATA INTO THE NASTRAN DATA FORMAT
|
|
|
|
ELSE IF ((CIN(ICOM)(1:1) .EQ. 'N') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'n') .OR. (CIN(ICOM)(1:2) .EQ. 'DN') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'DN')) THEN
|
|
ICOM = ICOM + 1
|
|
IF ((CIN(ICOM)(1:1) .EQ. 'N') .OR.
|
|
& (CIN(ICOM)(1:1) .EQ. 'n')) THEN
|
|
LONG = .TRUE.
|
|
ELSE
|
|
LONG = .FALSE.
|
|
ENDIF
|
|
IF (KKK.LE.0) THEN
|
|
CALL MESSAGE(' ')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE('* NO ELEMENTS IN DATABASE *')
|
|
CALL MESSAGE('* NO FILE WRITING POSSIBLE *')
|
|
CALL MESSAGE('****************************************')
|
|
CALL MESSAGE(' ')
|
|
GOTO 100
|
|
END IF
|
|
IUNIT = 99
|
|
270 CONTINUE
|
|
IF (ICOM.LE.JCOM) THEN
|
|
FNAME = CIN(ICOM)
|
|
ICOM = ICOM + 1
|
|
ELSE
|
|
CALL INQSTR ('NASTRAN OUTPUT FILE NAME: ', FNAME)
|
|
END IF
|
|
OPEN (UNIT = IUNIT, FILE = FNAME, STATUS = 'UNKNOWN',
|
|
& ERR = 270)
|
|
REWIND IUNIT
|
|
CALL WRNAST (MS, MR, NPNODE, NPELEM, MXNFLG, MXSFLG, NPREGN,
|
|
& NPNBC, NPSBC, IUNIT, NNN, KKK, NNXK, IA(K(2)), IA(K(3)),
|
|
& IA(K(4)), IA(K(5)), IA(K(6)), IA(K(7)), IA(K(8)),
|
|
& IA(K(9)), IA(K(10)), IA(K(11)), IA(K(12)), IA(K(13)),
|
|
& A(K(14)), A(K(15)), IA(K(16)), IA(K(17)), IA(K(19)),
|
|
& IA(K(23)), NBCNOD, NNLIST, NBCSID, NSLIST, NVLIST, NUMMAT,
|
|
& LINKM, TITLE, ERR, EIGHT, NINE, LONG)
|
|
IF (ERR) THEN
|
|
CLOSE (UNIT = IUNIT, STATUS = 'DELETE')
|
|
ELSE
|
|
CLOSE (UNIT = IUNIT, STATUS = 'KEEP')
|
|
END IF
|
|
ELSE
|
|
ICOM = ICOM + 1
|
|
CALL HELP_FQ (12)
|
|
END IF
|
|
GOTO 100
|
|
|
|
10000 FORMAT (' REGION NO:', I5, ' IS NOT IN THE DATABASE', /,
|
|
& ' THUS NO SIZE CAN BE ENTERED')
|
|
|
|
END
|
|
|