Cloned SEACAS for EXODUS library with extra build files for internal package management.
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

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