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.

95 lines
3.1 KiB

2 years ago
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 DEFLIM (A, WHOTIM, XN, YN, ZN, NPSURF)
C=======================================================================
C --*** DEFLIM *** (MESH) Calculate deformed mesh limits
C -- Written by Amy Gilkey - revised 01/22/88
C -- D. P. Flanagan, 11/17/82
C --
C --DEFLIM calculates the limits of the deformed mesh.
C --
C --Parameters:
C -- A - IN - the dynamic memory base array
C -- WHOTIM - IN - true iff whole (versus history) time step
C -- XN,YN,ZN - IN - the nodal coordinates (ZN for 3D only)
C -- NPSURF - IN - the node numbers of the surface nodes
C -- or mesh boundary nodes (2D)
C --
C --Common Variables:
C -- Uses NDIM, NVARNP, NSTEPS of /DBNUMS/
C -- Uses IS3DIM, NNPSUR, NUMNPF of /D3NUMS/
C -- Sets DEFOK, DEFFAC, IXDEF, IYDEF, IZDEF of /DEFORM/
C -- Sets ALMESH of /MSHLIM/
PARAMETER (KLFT=1, KRGT=2, KBOT=3, KTOP=4, KNEA=5, KFAR=6)
include 'debug.blk'
include 'dbnums.blk'
include 'd3nums.blk'
include 'deform.blk'
include 'mshlim.blk'
DIMENSION A(*)
LOGICAL WHOTIM(*)
REAL XN(*), YN(*), ZN(*)
INTEGER NPSURF(*)
C --Calculate the default magnification
CALL CALMAG (DEFOK, IS3DIM, DEFFAC)
CALL MDSTAT (NERR, MEM)
IF (NERR .GT. 0) GOTO 110
C --Find deformed mesh limits
C --Note that the displacement variables will be put on the random file
C --which will improve efficiency
CALL CPYREA (2*NDIM, UNMESH, ALMESH)
IF (DEFOK) THEN
CALL MDRSRV ('DLX', KDXN, NUMNPF)
CALL MDRSRV ('DLY', KDYN, NUMNPF)
IF (IS3DIM) THEN
CALL MDRSRV ('DLZ', KDZN, NUMNPF)
ELSE
KDZN = 1
END IF
CALL MDSTAT (NERR, MEM)
IF (NERR .GT. 0) GOTO 110
DO 100 ISTEP = 1, NSTEPS
IF (WHOTIM(ISTEP)) THEN
CALL DEFXYZ (A, ISTEP, DEFFAC, .TRUE., NPSURF,
& XN, YN, ZN, A(KDXN), A(KDYN), A(KDZN))
CALL MINMXS (NNPSUR, NPSURF, A(KDXN), XMIN, XMAX)
ALMESH(KLFT) = MIN (ALMESH(KLFT), XMIN)
ALMESH(KRGT) = MAX (ALMESH(KRGT), XMAX)
CALL MINMXS (NNPSUR, NPSURF, A(KDYN), XMIN, XMAX)
ALMESH(KBOT) = MIN (ALMESH(KBOT), XMIN)
ALMESH(KTOP) = MAX (ALMESH(KTOP), XMAX)
IF (IS3DIM) THEN
CALL MINMXS (NNPSUR, NPSURF, A(KDZN), XMIN, XMAX)
ALMESH(KNEA) = MIN (ALMESH(KNEA), XMIN)
ALMESH(KFAR) = MAX (ALMESH(KFAR), XMAX)
END IF
END IF
100 CONTINUE
CALL MDDEL ('DLX')
CALL MDDEL ('DLY')
IF (IS3DIM) THEN
CALL MDDEL ('DLZ')
END IF
END IF
110 CONTINUE
RETURN
END