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