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.
 
 
 
 
 
 

105 lines
2.3 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 SRCHC(IVEC,ILBIN,IUBIN,NUM,ICOD,LOC)
C THIS SUBROUTINE SEARCHES ROW ILB THOURGH ROW IUB OF A
C NUMERICALLY ORDERED CHARACTER COLUMN VECTOR FOR THE OCCURRENCE
C THE VALUE NUM.
C IF NUM IS FOUND ICOD IS SET TO UNITY AND LOC IS THE ROW NUMBER
C WHERE NUM RESIDES. IF NUM IS NOT FOUND ICOD IS ZERO AND LOC IS
C THE ROW NUMBER WHERE NUM WOULD RESIDE IF IT WERE IN THE NUMER-
C ICALLY ORDER LIST. BOB LUST
C THIS SUBROUTINE HAS BEEN CHANGED FROM BOB LUST'S VERSION
C AND NOW ASSUMES THAT THERE IS NO MORE THAN ONE MATCH
C IN THE ORDERED LIST 'IVEC'. BILL MILLS-CURRAN JAN. 1, 1983
C IVEC ORDERED CHARACTER LIST (SINGLE COLUMN)
C ILBIN LOW NUMBERED ROW OF SEARCH RANGE
C IUBIN HIGH NUMBERED ROW OF SEARCH RANGE
C NUM VALUE TO BE LOCATED IN IVEC
C ICOD RETURN CODE 0 = NO MATCH 1 = MATCH
C LOC LOCATION IN IVEC FOR NUM
CHARACTER*(*) IVEC(1),NUM
ILB = ILBIN
IUB = IUBIN
ICOD=0
IF (IUB .LT. ILB) THEN
LOC = 1
RETURN
END IF
C CHECK TO SEE IF NUM IS AT EITHER END OF LIST
IF(IVEC(ILB).GT.NUM)THEN
LOC=ILB
RETURN
ELSE IF(IVEC(IUB).LT.NUM) THEN
LOC=IUB+1
RETURN
END IF
C NUM IS INTERNAL TO IVEC
100 MID=(ILB+IUB)/2
IF(MID.LE.ILB)GO TO 110
C SEARCH RANGE IS MORE THAN 2
IF(IVEC(MID).LT.NUM) THEN
C UPPER PART OF LIST
ILB=MID
GO TO 100
ELSE IF(IVEC(MID).GT.NUM) THEN
C LOWER PART OF LIST
IUB=MID
GO TO 100
ELSE
C MATCH HAS OCCURRED AT "MID"
ICOD=1
LOC=MID
RETURN
END IF
110 CONTINUE
C SEARCH RANGE IS 2 OR LESS
IF(NUM.EQ.IVEC(ILB)) THEN
C MATCH AT "ILB"
ICOD=1
LOC=ILB
RETURN
ELSE IF(NUM.EQ.IVEC(IUB)) THEN
C MATCH AT "IUB"
ICOD=1
LOC=IUB
RETURN
ELSE
C NO MATCH IN LIST.
C LOCATION FOR NEW ENTRY IS "IUB".
LOC=IUB
RETURN
END IF
END