c LINER SUBROUTINE LINER (X1,Y1,X2,Y2,NUM1,NUM2) C======================================================================C C C C SUBROUTINE : LINER C C C C PURPOSE: C C C C THIS SUBROUTINE DOES A TWO-DIMENSIONAL LINEAR FIT USING THE C C LOCATIONS STORED IN ANOTHER ARRAY. C C C C USE: C C CALL LINER (X1,Y1,X2,Y2,NUM1,NUM2) C C C C PARAMETERS : C C C C X1 THE X COORDINATES OF THE KNOWN ARRAY C C C C Y1 THE Y COORDINATES OF THE KNOWN ARRAY C C C C X2 THE X POSITION OF THE ARRAY THAT HOLDS THE C C LOCATION OF THE LINEAR FIT POINTS C C C C Y2 THE LINEAR FIT POSITION CORRESPONDING TO X2 C C C C NUM1 THE NUMBER OF POINTS IN X1,Y1 ARRAYS C C C C NUM2 THE NUMBER OF POINT TO BE FITTED IN THE X1 ARRAY C C C C SOURCE: DONALD J. RICHARDSON C C (SYSTEM AND APPLIED SCIENCES CORPORATION) C C C C LANGUAGE: FORTRAN 5 C C C C LATEST REVISION: December 15, 1991 C C C C======================================================================C DIMENSION X1(NUM1),Y1(NUM1),X2(NUM2),Y2(NUM2) ILOOK=1 IF (NUM1.LE.1) THEN PRINT*,'NOT ENOUGH POINTS TO DO A LINEAR INTEPOLATION' STOP 'TOO FEW DATA POINTS IN LINER FOR INTERPOLATION' END IF DO 100 I=1,NUM1 - 1 100 IF (X1(I).NE.X1(I + 1)) GO TO 110 PRINT*,'ALL OF THE ORDINATE VALUE FOR LINER WERE THE SAME' print*,'num1 =', num1 do i=1,num1 print*,x1(i),y1(i) end do STOP 'X ARRAY IDENTICAL IN LINER' 110 IUPDWN=SIGN(1.,X1(NUM1) - X1(I)) !modified 12/15/91 INDX1=(IUPDWN+1)/2 INDX2=1-INDX1 DO 20 I=1,NUM2 C *** C THE SECTION POSTIONS THE X2 ARRAY C *** 5 IF (NUM1.GT.ILOOK) THEN IF(X2(I).GT.X1(ILOOK+INDX1).OR.X2(I).LT.X1(ILOOK+INDX2)) 1 THEN ILOOK=ILOOK + IUPDWN * SIGN(1.,X2(I)-X1(ILOOK+1)) IF (ILOOK.LT.1) THEN ILOOK=1 GO TO 10 END IF GO TO 5 END IF ELSE ILOOK=NUM1-1 END IF C *** C DO THE LINEAR INTERPOLATION C *** 10 IF (X1(ILOOK).EQ.X1(ILOOK+1)) THEN Y2(I)=(Y1(ILOOK)+Y1(ILOOK+1))*.5 ELSE Y2(I)=(Y1(ILOOK)*(X2(I)-X1(ILOOK+1))+Y1(ILOOK+1)*(X1(ILOOK) 1 -X2(I)))/(X1(ILOOK)-X1(ILOOK+1)) ENDIF 20 CONTINUE RETURN END c cLINERD SUBROUTINE LINERD (X1,Y1,X2,Y2,NUM1,NUM2) C======================================================================C C C C SUBROUTINE : LINER C C C C PURPOSE: C C C C THIS SUBROUTINE DOES A TWO-DIMENSIONAL LINEAR FIT USING THE C C LOCATIONS STORED IN ANOTHER ARRAY. C C C C USE: C C CALL LINER (X1,Y1,X2,Y2,NUM1,NUM2) C C C C PARAMETERS : C C C C X1 THE X COORDINATES OF THE KNOWN ARRAY C C C C Y1 THE Y COORDINATES OF THE KNOWN ARRAY C C C C X2 THE X POSITION OF THE ARRAY THAT HOLDS THE C C LOCATION OF THE LINEAR FIT POINTS C C C C Y2 THE LINEAR FIT POSITION CORRESPONDING TO X2 C C C C NUM1 THE NUMBER OF POINTS IN X1,Y1 ARRAYS C C C C NUM2 THE NUMBER OF POINT TO BE FITTED IN THE X1 ARRAY C C C C SOURCE: DONALD J. RICHARDSON C C (SYSTEM AND APPLIED SCIENCES CORPORATION) C C C C LANGUAGE: FORTRAN 5 C C C C LATEST REVISION: December 15, 1991 C C C C======================================================================C IMPLICIT REAL*8 (A-H,O-Z) DIMENSION X1(NUM1),Y1(NUM1),X2(NUM2),Y2(NUM2) ILOOK=1 IF (NUM1.LE.1) THEN PRINT*,'NOT ENOUGH POINTS TO DO A LINEAR INTEPOLATION' STOP 'TOO FEW DATA POINTS IN LINER FOR INTERPOLATION' END IF DO 100 I=1,NUM1 - 1 100 IF (X1(I).NE.X1(I + 1)) GO TO 110 PRINT*,'ALL OF THE ORDINATE VALUE FOR LINER WERE THE SAME' STOP 'X ARRAY IDENTICAL IN LINER' 110 IUPDWN=SIGN(1.D0,X1(NUM1) - X1(I)) !modified 12/15/91 INDX1=(IUPDWN+1)/2 INDX2=1-INDX1 DO 20 I=1,NUM2 C *** C THE SECTION POSTIONS THE X2 ARRAY C *** 5 IF (NUM1.GT.ILOOK) THEN IF(X2(I).GT.X1(ILOOK+INDX1).OR.X2(I).LT.X1(ILOOK+INDX2)) 1 THEN ILOOK=ILOOK + IUPDWN*SIGN(1.D0,X2(I)-X1(ILOOK+1)) IF (ILOOK.LT.1) THEN ILOOK=1 GO TO 10 END IF GO TO 5 END IF ELSE ILOOK=NUM1-1 END IF C *** C DO THE LINEAR INTERPOLATION C *** 10 IF (X1(ILOOK).EQ.X1(ILOOK+1)) THEN Y2(I)=(Y1(ILOOK)+Y1(ILOOK+1))*.5 ELSE Y2(I)=(Y1(ILOOK)*(X2(I)-X1(ILOOK+1))+Y1(ILOOK+1)*(X1(ILOOK) 1 -X2(I)))/(X1(ILOOK)-X1(ILOOK+1)) ENDIF 20 CONTINUE RETURN END