C C .................................................................. C C SUBROUTINE DATSE C C PURPOSE C NDIM POINTS OF A GIVEN TABLE WITH EQUIDISTANT ARGUMENTS ARE C SELECTED AND ORDERED SUCH THAT C ABS(ARG(I)-X).GE.ABS(ARG(J)-X) IF I.GT.J. C C USAGE C CALL DATSE (X,ZS,DZ,F,IROW,ICOL,ARG,VAL,NDIM) C C DESCRIPTION OF PARAMETERS C X - DOUBLE PRECISION SEARCH ARGUMENT. C ZS - DOUBLE PRECISION STARTING VALUE OF ARGUMENTS. C DZ - DOUBLE PRECISION INCREMENT OF ARGUMENT VALUES. C F - IN CASE ICOL=1, F IS THE DOUBLE PRECISION VECTOR C OF FUNCTION VALUES (DIMENSION IROW). C IN CASE ICOL=2, F IS A DOUBLE PRECISION IROW BY 2 C MATRIX. THE FIRST COLUMN SPECIFIES VECTOR OF FUNC- C TION VALUES AND THE SECOND VECTOR OF DERIVATIVES. C IROW - THE DIMENSION OF EACH COLUMN IN MATRIX F. C ICOL - THE NUMBER OF COLUMNS IN F (I.E. 1 OR 2). C ARG - RESULTING DOUBLE PRECISION VECTOR OF SELECTED AND C ORDERED ARGUMENT VALUES (DIMENSION NDIM). C VAL - RESULTING DOUBLE PRECISION VECTOR OF SELECTED C FUNCTION VALUES (DIMENSION NDIM) IN CASE ICOL=1. C IN CASE ICOL=2, VAL IS THE DOUBLE PRECISION VECTOR C OF FUNCTION AND DERIVATIVE VALUES (DIMENSION C 2*NDIM) WHICH ARE STORED IN PAIRS (I.E. EACH FUNC- C TION VALUE IS FOLLOWED BY ITS DERIVATIVE VALUE). C NDIM - THE NUMBER OF POINTS WHICH MUST BE SELECTED OUT OF C THE GIVEN TABLE. C C REMARKS C NO ACTION IN CASE IROW LESS THAN 1. C IF INPUT VALUE NDIM IS GREATER THAN IROW, THE PROGRAM C SELECTS ONLY A MAXIMUM TABLE OF IROW POINTS. THEREFORE THE C USER OUGHT TO CHECK CORRESPONDENCE BETWEEN TABLE (ARG,VAL) C AND ITS DIMENSION BY COMPARISON OF NDIM AND IROW, IN ORDER C TO GET CORRECT RESULTS IN FURTHER WORK WITH TABLE (ARG,VAL). C THIS TEST MAY BE DONE BEFORE OR AFTER CALLING C SUBROUTINE DATSE. C SUBROUTINE DATSE ESPECIALLY CAN BE USED FOR GENERATING THE C TABLE (ARG,VAL) NEEDED IN SUBROUTINES DALI, DAHI, AND DACFI. C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C NONE C C METHOD C SELECTION IS DONE BY COMPUTING THE SUBSCRIPT J OF THAT C ARGUMENT, WHICH IS NEXT TO X. C AFTERWARDS NEIGHBOURING ARGUMENT VALUES ARE TESTED AND C SELECTED IN THE ABOVE SENSE. C C .................................................................. C SUBROUTINE DATSE(X,ZS,DZ,F,IROW,ICOL,ARG,VAL,NDIM) C C DIMENSION F(1),ARG(1),VAL(1) DOUBLE PRECISION X,ZS,DZ,F,ARG,VAL IF(IROW-1)19,17,1 C C CASE DZ=0 IS CHECKED OUT 1 IF(DZ)2,17,2 2 N=NDIM C C IF N IS GREATER THAN IROW, N IS SET EQUAL TO IROW. IF(N-IROW)4,4,3 3 N=IROW C C COMPUTATION OF STARTING SUBSCRIPT J. 4 J=(X-ZS)/DZ+1.5D0 IF(J)5,5,6 5 J=1 6 IF(J-IROW)8,8,7 7 J=IROW C C GENERATION OF TABLE ARG,VAL IN CASE DZ.NE.0. 8 II=J JL=0 JR=0 DO 16 I=1,N ARG(I)=ZS+DFLOAT(II-1)*DZ IF(ICOL-2)9,10,10 9 VAL(I)=F(II) GOTO 11 10 VAL(2*I-1)=F(II) III=II+IROW VAL(2*I)=F(III) 11 IF(J+JR-IROW)12,15,12 12 IF(J-JL-1)13,14,13 13 IF((ARG(I)-X)*DZ)14,15,15 14 JR=JR+1 II=J+JR GOTO 16 15 JL=JL+1 II=J-JL 16 CONTINUE RETURN C C CASE DZ=0 17 ARG(1)=ZS VAL(1)=F(1) IF(ICOL-2)19,19,18 18 VAL(2)=F(2) 19 RETURN END