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.
100 lines
3.6 KiB
100 lines
3.6 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
|
|
SUBROUTINE MXEXEC (MYV, MYCV, MYLOC, MYCLOC, UCLOC, COFFST,
|
|
* OFFSET, DPOINT, LDICT, NNAMES,
|
|
* VOID, LVOID, NVOIDS, FILL, FDATA, CFILL, CFDATA, CHRNUM,
|
|
* CHRCOL, LASTER)
|
|
|
|
IMPLICIT INTEGER (A-Z)
|
|
INCLUDE 'params.inc'
|
|
|
|
C This routine satisfies deferred memory requests.
|
|
C It will service both numeric and character
|
|
C deferred requests in the mixed mode. In the nonmixed mode,
|
|
C character memory is not deferred.
|
|
|
|
C***********************************************************************
|
|
|
|
C MYV Internal reference vector.
|
|
DIMENSION MYV(*)
|
|
C MYCV Internal reference array.
|
|
CHARACTER MYCV(*)
|
|
C MYLOC Address of internal reference vector.
|
|
C MYCLOC Address of internal character array.
|
|
C UCLOC Address of user's character array.
|
|
C COFFST Offset between internal numeric array and user's
|
|
C character array.
|
|
C OFFSET Offset address between internal and user arrays.
|
|
C DPOINT Dictionary pointer table.
|
|
C LDICT Dimension of dictionary table.
|
|
C NNAMES Number of names in dictionary.
|
|
DIMENSION DPOINT(LDICT,CHRCOL,3), NNAMES(2)
|
|
C VOID Void table.
|
|
C LVOID Dimension of void table.
|
|
C NVOIDS Number of voids.
|
|
DIMENSION VOID(LVOID,CHRCOL,2), NVOIDS(2)
|
|
C FILL Flag for data fill.
|
|
C FDATA Data for fill.
|
|
LOGICAL FILL
|
|
C CFILL Flag for character data fill.
|
|
C CFDATA Data for fill.
|
|
LOGICAL CFILL
|
|
CHARACTER*1 CFDATA
|
|
C CHRNUM Number of characters per numeric storage unit
|
|
C CHRCOL Column for character tables.
|
|
C LASTER Error return.
|
|
|
|
C***********************************************************************
|
|
|
|
LASTER = SUCCESS
|
|
MEM = 0
|
|
DO 100 IDICT = 1, NNAMES(1)
|
|
MEM = MEM + MIN(0, DPOINT(IDICT,1,2))
|
|
100 CONTINUE
|
|
IF (MEM .EQ. 0) RETURN
|
|
MEM = - MEM
|
|
|
|
CALL MXGET (MYLOC, MEM, VOID, LVOID, NVOIDS,
|
|
* CHRCOL, LASTER, VROW)
|
|
IF (LASTER .NE. SUCCESS) RETURN
|
|
|
|
C Now satisfy all the deferred requests.
|
|
|
|
DO 130 IDICT = 1, NNAMES(1)
|
|
IF (DPOINT(IDICT,1,2) .LT. 0) THEN
|
|
IF (DPOINT(IDICT,1,3) .EQ. -1) THEN
|
|
MYV(DPOINT(IDICT,1,1) - MYLOC + 1) =
|
|
* VOID(VROW,1,1) + OFFSET
|
|
ELSE
|
|
MYV(DPOINT(IDICT,1,1) - MYLOC + 1) =
|
|
* (VOID(VROW,1,1) - 1) * CHRNUM + 1 + COFFST
|
|
END IF
|
|
VOID(VROW,1,2) = VOID(VROW,1,2) + DPOINT(IDICT,1,2)
|
|
DPOINT(IDICT,1,2) = - DPOINT(IDICT,1,2)
|
|
DPOINT(IDICT,1,1) = VOID(VROW,1,1)
|
|
VOID(VROW,1,1) = VOID(VROW,1,1) + DPOINT(IDICT,1,2)
|
|
|
|
C Perform data fill if appropriate.
|
|
|
|
IF (FILL .AND. DPOINT(IDICT,1,3) .EQ. -1) THEN
|
|
DO 110 I = DPOINT(IDICT,1,1),
|
|
* DPOINT(IDICT,1,1)+DPOINT(IDICT,1,2)-1
|
|
MYV(I) = FDATA
|
|
110 CONTINUE
|
|
ELSE IF (CFILL .AND. DPOINT(IDICT,1,3) .GT. 0) THEN
|
|
TLOC = (DPOINT(IDICT,1,1) - 1) * CHRNUM + 1 + COFFST
|
|
* + UCLOC - MYCLOC
|
|
DO 120 I = TLOC, TLOC + DPOINT(IDICT,1,3) - 1
|
|
MYCV(I) = CFDATA
|
|
120 CONTINUE
|
|
END IF
|
|
|
|
END IF
|
|
130 CONTINUE
|
|
|
|
CALL VTABLE (0, 0, VOID, LVOID, NVOIDS(1), CHRCOL, LASTER)
|
|
RETURN
|
|
END
|
|
|