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.
269 lines
7.8 KiB
269 lines
7.8 KiB
C Copyright(C) 1999-2020 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
|
|
|
|
C=======================================================================
|
|
SUBROUTINE MSMEMY (A, ANYDEF, ANYUND,
|
|
& DOIXF, DON2B, DOELED, DOELEU, DODEAD, DONPS, DOESS,
|
|
& NSURFS, KN2ELB, KDN2B, KIF2EL,
|
|
& KXN, KYN, KZN, KHZ, KVT, KPD, KDHZ, KDVT, KDPD,
|
|
& KXF, KYF, KZF, KDXF, KDYF, KDZF, KHIDEN, KHIDEF, KIXFAC,
|
|
& KSNPS, KSESS)
|
|
C=======================================================================
|
|
|
|
C --*** MSMEMY *** (MESH) Reserve memory for mesh plot
|
|
C -- Written by Amy Gilkey - revised 07/27/88
|
|
C --
|
|
C --MSMEMY reserves or finds the memory needed to plot a mesh.
|
|
C --
|
|
C --This routine reserves and finds the following dynamic memory arrays:
|
|
C -- IN2ELB - the element block for each node;
|
|
C -- <0 if not in any selected element block
|
|
C -- =0 if in more than one selected element block
|
|
C -- IDN2B - the element block for each dead node; dead if >= 0
|
|
C -- HZ, VT, PD - the undeformed nodal coordinates
|
|
C -- (rotated for 3D, PD for 3D only)
|
|
C -- DHZ, DVT, DPD - the deformed nodal coordinates
|
|
C -- (rotated for 3D, DPD for 3D only)
|
|
C -- XF, YF, ZF - the undeformed face center coordinates
|
|
C -- (rotated for 3D, ZF for 3D only)
|
|
C -- DXF, DYF, DZF - the deformed face center coordinates
|
|
C -- (rotated for 3D, DZF for 3D only)
|
|
C -- HIDENP(i) - true iff node i is hidden (3D only)
|
|
C -- HIDEF(i) - true iff face i is hidden (3D only)
|
|
C -- IXFAC - the indices of the ordered faces (3D only)
|
|
C -- IX2NP - the node number for each mesh index
|
|
C -- SCRNPS - scratch array for node sets
|
|
C -- SCRESS - scratch array for side sets
|
|
C --
|
|
C --This routine uses MDFIND to find the following dynamic memory arrays:
|
|
C -- IF2EL - the element number of each face
|
|
C -- XN, YN, ZN - IN - the nodal coordinates (ZN for 3D only)
|
|
C --
|
|
C --Parameters:
|
|
C -- A - IN - the dynamic memory base array
|
|
C -- ANYDEF - IN - true iff any deformed mesh is to be plotted
|
|
C -- ANYUND - IN - true iff any undeformed mesh is to be plotted
|
|
C -- DOIXF - IN - true iff the IXFAC array is needed
|
|
C -- DON2B - IN - true iff the IN2ELB array is needed
|
|
C -- DOELED - IN - true iff the deformed element quarilateral centers
|
|
C -- are needed
|
|
C -- DOELEU - IN - true iff the undeformed element quarilateral centers
|
|
C -- are needed
|
|
C -- DODEAD - IN - true iff dead nodes are needed
|
|
C -- DONPS - IN - true iff node set information is needed
|
|
C -- DOESS - IN - true iff side set information is needed
|
|
C -- NSURFS - IN - the number of surface faces
|
|
C -- KN2ELB - OUT - the index of IN2ELB
|
|
C -- KDN2B - OUT - the index of IDN2B
|
|
C -- KIF2EL - OUT - the index of IF2EL
|
|
C -- KXN, KYN, KZN - OUT - the indices of XN, YN, ZN
|
|
C -- KHZ, KVT, KPD - OUT - the indices of HZ, VT, PD
|
|
C -- KDHZ, KDVT, KDPD - OUT - the indices of DHZ, DVT, DPD
|
|
C -- KXF, KYF, KZF - OUT - the indices of XF, YF, ZF
|
|
C -- KDXF, KDYF, KDZF - OUT - the indices of DXF, DYF, DZF
|
|
C -- KHIDEN - OUT - the index of HIDENP
|
|
C -- KHIDEF - OUT - the index of HIDEF
|
|
C -- KIXFAC - OUT - the index of IXFAC
|
|
C -- KSNPS - OUT - the index of SCRNPS
|
|
C -- KSESS - OUT - the index of SCRESS
|
|
C --
|
|
C --Common Variables:
|
|
C -- Uses NDIM of /DBNUMS/
|
|
C -- Uses IS3DIM, NUMNPF of /D3NUMS/
|
|
C -- Uses DEFPRO, DEFOK of /DEFORM/
|
|
C -- Sets NPSIZ of /SIZES/
|
|
|
|
include 'dbnumgq.blk'
|
|
include 'dbnums.blk'
|
|
include 'd3nums.blk'
|
|
include 'deform.blk'
|
|
include 'sizes.blk'
|
|
|
|
DIMENSION A(*)
|
|
LOGICAL ANYDEF, ANYUND
|
|
LOGICAL DOIXF, DON2B, DOELED, DOELEU, DODEAD, DONPS, DOESS
|
|
|
|
LOGICAL FIRST
|
|
SAVE FIRST
|
|
C --FIRST - true iff first time through routine
|
|
|
|
DATA FIRST / .TRUE. /
|
|
|
|
IF (FIRST) THEN
|
|
FIRST = .FALSE.
|
|
|
|
C --Reserve memory (most will be expanded when needed)
|
|
|
|
CALL MDRSRV ('IN2ELB', KN2ELB, 0)
|
|
CALL MDFIND ('IF2EL', KIF2EL, IDUM)
|
|
|
|
CALL MDFIND ('XN', KXN, IDUM)
|
|
CALL MDFIND ('YN', KYN, IDUM)
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('ZN', KZN, IDUM)
|
|
ELSE
|
|
KZN = 1
|
|
END IF
|
|
|
|
C --Set size of deformed coordinate arrays for hidden line algorithm
|
|
NPSIZ = NUMNPF
|
|
IF (IS3DIM) NPSIZ = (13 * NUMNPF) / 10
|
|
|
|
IF (IS3DIM) THEN
|
|
C --QNPICK uses MDFIND to find HZ, VT, PD
|
|
CALL MDRSRV ('HZ', KHZ, 0)
|
|
CALL MDRSRV ('VT', KVT, 0)
|
|
CALL MDRSRV ('PD', KPD, 0)
|
|
ELSE
|
|
KHZ = KXN
|
|
KVT = KYN
|
|
KPD = KZN
|
|
END IF
|
|
|
|
IF (DEFOK) THEN
|
|
C --QNPICK uses MDFIND to find DHZ, DVT, DPD
|
|
CALL MDRSRV ('DHZ', KDHZ, 0)
|
|
CALL MDRSRV ('DVT', KDVT, 0)
|
|
IF (IS3DIM) THEN
|
|
CALL MDRSRV ('DPD', KDPD, 0)
|
|
ELSE
|
|
KDPD = 1
|
|
END IF
|
|
ELSE
|
|
KDHZ = 1
|
|
KDVT = 1
|
|
KDPD = 1
|
|
END IF
|
|
|
|
CALL MDRSRV ('XF', KXF, 0)
|
|
CALL MDRSRV ('YF', KYF, 0)
|
|
IF (IS3DIM) THEN
|
|
CALL MDRSRV ('ZF', KZF, 0)
|
|
ELSE
|
|
KZF = 1
|
|
END IF
|
|
|
|
IF (DEFOK) THEN
|
|
CALL MDRSRV ('DXF', KDXF, 0)
|
|
CALL MDRSRV ('DYF', KDYF, 0)
|
|
IF (IS3DIM) THEN
|
|
CALL MDRSRV ('DZF', KDZF, 0)
|
|
ELSE
|
|
KDZF = 1
|
|
END IF
|
|
END IF
|
|
|
|
C --QNPICK uses MDFIND to find HIDENP
|
|
IF (IS3DIM) THEN
|
|
CALL MDRSRV ('HIDENP', KHIDEN, NUMNPF)
|
|
ELSE
|
|
KHIDEN = 1
|
|
END IF
|
|
IF (IS3DIM) THEN
|
|
CALL MDRSRV ('HIDEF', KHIDEF, NSURFS)
|
|
ELSE
|
|
KHIDEF = 1
|
|
END IF
|
|
|
|
C --Reserve the mesh index to node number index
|
|
CALL MDRSRV ('IX2NP', KIX2NP, 0)
|
|
END IF
|
|
|
|
C --Find memory
|
|
|
|
CALL MDFIND ('IN2ELB', KN2ELB, IDUM)
|
|
CALL MDFIND ('IF2EL', KIF2EL, IDUM)
|
|
|
|
IF (DODEAD) THEN
|
|
CALL MDRSRV ('IDN2B', KDN2B, 0)
|
|
ELSE
|
|
KDN2B = 1
|
|
END IF
|
|
|
|
CALL MDFIND ('XN', KXN, IDUM)
|
|
CALL MDFIND ('YN', KYN, IDUM)
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('ZN', KZN, IDUM)
|
|
ELSE
|
|
KZN = 1
|
|
END IF
|
|
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('HZ', KHZ, IDUM)
|
|
CALL MDFIND ('VT', KVT, IDUM)
|
|
CALL MDFIND ('PD', KPD, IDUM)
|
|
ELSE
|
|
KHZ = KXN
|
|
KVT = KYN
|
|
KPD = KZN
|
|
END IF
|
|
|
|
IF (DEFOK .AND. DEFPRO) THEN
|
|
CALL MDFIND ('DHZ', KDHZ, IDUM)
|
|
CALL MDFIND ('DVT', KDVT, IDUM)
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('DPD', KDPD, IDUM)
|
|
ELSE
|
|
KDPD = 1
|
|
END IF
|
|
ELSE
|
|
KDHZ = 1
|
|
KDVT = 1
|
|
KDPD = 1
|
|
END IF
|
|
|
|
CALL MDFIND ('XF', KXF, IDUM)
|
|
CALL MDFIND ('YF', KYF, IDUM)
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('ZF', KZF, IDUM)
|
|
ELSE
|
|
KZF = 1
|
|
END IF
|
|
|
|
IF (DEFOK .AND. DEFPRO) THEN
|
|
CALL MDFIND ('DXF', KDXF, IDUM)
|
|
CALL MDFIND ('DYF', KDYF, IDUM)
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('DZF', KDZF, IDUM)
|
|
ELSE
|
|
KDZF = 1
|
|
END IF
|
|
ELSE
|
|
KDXF = 1
|
|
KDYF = 1
|
|
KDZF = 1
|
|
END IF
|
|
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('HIDENP', KHIDEN, IDUM)
|
|
ELSE
|
|
KHIDEN = 1
|
|
END IF
|
|
KIXFAC = 1
|
|
IF (IS3DIM) THEN
|
|
CALL MDFIND ('HIDEF', KHIDEF, IDUM)
|
|
IF (DOIXF) CALL MDRSRV ('IXFAC', KIXFAC, NSURFS)
|
|
ELSE
|
|
KHIDEF = 1
|
|
END IF
|
|
|
|
IF (DONPS) THEN
|
|
CALL MDRSRV ('SCRNPS', KSNPS, NUMNPS)
|
|
ELSE
|
|
KSNPS = 1
|
|
END IF
|
|
IF (DOESS) THEN
|
|
CALL MDRSRV ('SCRESS', KSESS, NUMESS)
|
|
ELSE
|
|
KSESS = 1
|
|
END IF
|
|
|
|
CALL MDSTAT (NERR, MEM)
|
|
IF (NERR .GT. 0) GOTO 100
|
|
|
|
100 CONTINUE
|
|
RETURN
|
|
END
|
|
|