___________________________________________________________________
| |
| INFN INTERPOLATION EXAMPLE |
|_________________________________________________________________|
This example is from Guide VI (PREDPP), Figure 37.
C INFN ROUTINE FOR COMPUTING LINEARLY INTERPOLATED VALUES
C OF AN INDEPENDENT VARIABLE. ILUSTRATES USE OF ROUTINE PASS.
C ASSUMES THERE ARE ALWAYS AT LEAST TWO MEASURED VALUES PER INDIV. REC.
C DATREC(3)=TIME DATA ITEM
C DATREC(4)=INDEPENDENT VARIABLE DATA ITEM
C DATREC(5)=MISSING INDEPENDENT VARIABLE DATA ITEM
C =0 INDEP VAR NOT MISSING
C =1 IF FIRST DATA RECORD OF INDIVIDUAL RECORD IS MISSING INDEP VAR
C =3 IF LAST DATA RECORD OF INDIVIDUAL RECORD IS MISSING INDEP VAR
C =2 OTHERWISE
C
SUBROUTINE INFN (ICALL,THETA,DATREC,INDXS,NEWIND)
DIMENSION THETA(*),DATREC(*),INDXS(*)
DOUBLE PRECISION THETA
DIMENSION U(1000),V(1000)
IF (ICALL.EQ.3) RETURN
I=0
C INITIALIZE PASS
MODE=0
CALL PASS (MODE)
MODE=2
C PASS THROUGH DATA
5 CALL PASS (MODE)
IF (MODE.EQ.0) GO TO 10
C IF INDEP VAR IS PRESENT, STORE TIME AND VALUE
IF (DATREC(5).EQ.0.) THEN
I=I+1
U(I)=DATREC(3)
V(I)=DATREC(4)
ENDIF
GO TO 5
10 I=0
C INITIALIZE PASS A SECOND TIME
MODE=0
CALL PASS (MODE)
MODE=2
C PASS THROUGH DATA A SECOND TIME
15 CALL PASS (MODE)
IF (MODE.EQ.0) RETURN
C IF INDEP VAR IS MISSING, STORE INTERPOLATED VALUE
IF (DATREC(5).EQ.0.) THEN
I=I+1
ELSE
IF (DATREC(5).EQ.1) THEN
K=I+1
L=I+2
ELSEIF (DATREC(5).EQ.2.) THEN
K=I
L=I+1
ELSEIF (DATREC(5).EQ.3.) THEN
K=I-1
L=I
ENDIF
A=(U(K)*V(L)+U(L)*V(K))/(U(K)-U(L))
B=(V(K)-V(L))/(U(K)-U(L))
DATREC(4)=A+B*DATREC(3)
ENDIF
GO TO 15
END
REFERENCES: Guide VI Section VI.A, Figure 37
Go to main index.
Created by nmhelp2html v. 1.0 written by Niclas Jonsson (Modified by AJB 5/2006,11/2007)