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.
 
 
 
 
 
 

167 lines
5.0 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 SETUP (MSHDEF, ZMMESH)
C=======================================================================
C --*** SETUP *** (MESH) Setup for plot set
C -- Written by Amy Gilkey - revised 05/26/88
C -- D. P. Flanagan, 07/27/82
C --
C --SETUP sets graphics parameters common to the plot sequence. It
C --computes the display area and window for each view. It also computes
C --and sets the axis lengths and limits (with "nice" tick intervals).
C --The only information that is returned about the axis is the
C --starting locations and the label size factor (through COMMON).
C --
C --Parameters:
C -- MSHDEF - IN - the display modes for all views (none/defined)
C -- (as in /MSHOPT/)
C -- ZMMESH - IN - the zoomed mesh coordinates
C --
C --Common Variables:
C -- Uses XISSYM, YISSYM, XAXSYM, YAXSYM, LFTSYM, BOTSYM of /VIEWS/
C -- Uses ZMMESH of /MSHLIM/
C -- Uses DVIEW0 of /LAYOUT/
C -- Sets DVIEW, WVIEW of /LAYOUT/
C -- Uses DTW, VWSCL of /DEVDAT/
PARAMETER (KLFT=1, KRGT=2, KBOT=3, KTOP=4, KNEA=5, KFAR=6)
COMMON /VIEWS/ MULTIM,
& XISSYM, YISSYM, XAXSYM, YAXSYM, LFTSYM, BOTSYM
LOGICAL MULTIM, XISSYM, YISSYM, LFTSYM, BOTSYM
COMMON /LAYOUT/ CHLSIZ, DBORD0(KTOP), DVIEW0(KTOP)
COMMON /LAYOUD/ DVIEW(KTOP,4), WVIEW(KTOP,4)
COMMON /DEVDAT/ DTW, VWSCL
CHARACTER*(*) MSHDEF(4)
REAL ZMMESH(KTOP)
INTEGER NDEFVW, IXVW
LOGICAL RGTVW, TOPVW
LOGICAL XISDIV, YISDIV
RGTVW(I) = (I .EQ. 2) .OR. (I .EQ. 4)
TOPVW(I) = (I .EQ. 1) .OR. (I .EQ. 2)
XISDIV = (MSHDEF(1) .NE. 'NONE')
YISDIV = (MSHDEF(4) .NE. 'NONE')
C --WXRNG and WYRNG are the window limits for a single view
WXRNG = ZMMESH(KRGT) - ZMMESH(KLFT)
WYRNG = ZMMESH(KTOP) - ZMMESH(KBOT)
C --Set view device boundaries
IF (XISDIV .EQV. YISDIV) THEN
RAT = WXRNG / WYRNG
ELSE IF (XISDIV) THEN
RAT = (2 * WXRNG) / WYRNG
ELSE IF (YISDIV) THEN
RAT = WXRNG / (2 * WYRNG)
END IF
C --DXRNG2 and DYRNG2 are the device limits for all defined views / 2
DXRNG2 = 0.5 * (DVIEW0(KRGT) - DVIEW0(KLFT))
DYRNG2 = 0.5 * (DVIEW0(KTOP) - DVIEW0(KBOT))
IF (RAT .LT. 0.99) THEN
DXRNG2 = DXRNG2 * RAT
ELSE IF (RAT .GT. 1.01) THEN
DYRNG2 = DYRNG2 / RAT
END IF
DXMID = 0.5 * (DVIEW0(KRGT) + DVIEW0(KLFT))
DYMID = 0.5 * (DVIEW0(KTOP) + DVIEW0(KBOT))
DO 100 IVW = 1, NDEFVW (.TRUE.)
IVIEW = IXVW (.TRUE., IVW)
IF (XISDIV) THEN
IF (RGTVW(IVIEW)) THEN
DVIEW(KLFT,IVIEW) = DXMID
DVIEW(KRGT,IVIEW) = DXMID + DXRNG2
ELSE
DVIEW(KLFT,IVIEW) = DXMID - DXRNG2
DVIEW(KRGT,IVIEW) = DXMID
END IF
ELSE
DVIEW(KLFT,IVIEW) = DXMID - DXRNG2
DVIEW(KRGT,IVIEW) = DXMID + DXRNG2
END IF
IF (YISDIV) THEN
IF (TOPVW(IVIEW)) THEN
DVIEW(KBOT,IVIEW) = DYMID
DVIEW(KTOP,IVIEW) = DYMID + DYRNG2
ELSE
DVIEW(KBOT,IVIEW) = DYMID - DYRNG2
DVIEW(KTOP,IVIEW) = DYMID
END IF
ELSE
DVIEW(KBOT,IVIEW) = DYMID - DYRNG2
DVIEW(KTOP,IVIEW) = DYMID + DYRNG2
END IF
100 CONTINUE
C --Set window limits
IF (XISSYM) THEN
IF (LFTSYM) THEN
WLFT = XAXSYM
WRGT = XAXSYM + WXRNG
ELSE
WLFT = XAXSYM
WRGT = XAXSYM - WXRNG
END IF
ELSE
WLFT = ZMMESH(KLFT)
WRGT = ZMMESH(KRGT)
END IF
IF (YISSYM) THEN
IF (BOTSYM) THEN
WBOT = YAXSYM
WTOP = YAXSYM + WYRNG
ELSE
WBOT = YAXSYM
WTOP = YAXSYM - WYRNG
END IF
ELSE
WBOT = ZMMESH(KBOT)
WTOP = ZMMESH(KTOP)
END IF
C --Set view window boundaries
DO 110 IVW = 1, NDEFVW (.TRUE.)
IVIEW = IXVW (.TRUE., IVW)
IF (XISSYM .AND. (.NOT. RGTVW(IVIEW))) THEN
WVIEW(KLFT,IVIEW) = WRGT
WVIEW(KRGT,IVIEW) = WLFT
ELSE
WVIEW(KLFT,IVIEW) = WLFT
WVIEW(KRGT,IVIEW) = WRGT
END IF
IF (YISSYM .AND. (.NOT. TOPVW(IVIEW))) THEN
WVIEW(KBOT,IVIEW) = WTOP
WVIEW(KTOP,IVIEW) = WBOT
ELSE
WVIEW(KBOT,IVIEW) = WBOT
WVIEW(KTOP,IVIEW) = WTOP
END IF
110 CONTINUE
C --Set window to device units ratio
DTW = MIN (ABS (WRGT - WLFT), ABS (WTOP - WBOT))
& / (DVIEW0(KRGT) - DVIEW0(KLFT))
IF (XISDIV .OR. YISDIV) THEN
VWSCL = 0.5
ELSE
VWSCL = 1.0
END IF
RETURN
END