- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Need some help on old f file with an integer function.
I get a break "Unhandled exception at 0x100116cb" at
IF(ZENTRY.EQ. 1) THEN
ZIMIN=IMIN
When this function is called. Does any know why this is so.
I am using IA32 and v9.
Perhaps compiler rules changed from old to new coding?
Thanks
Ken
The whole function looks like:
INTEGER FUNCTION limit(ZIMIN,ZI,ZIMAX)
USE IFPORT
INTEGER ZN
REAL ZARG
INTEGER ZIMAX
INTEGER ZI
INTEGER ZIMIN
INTEGER ZENTRY
REAL TABLE(ZN)
!C.....INTEGER FUNCTION LIMITS I BETWEEN IMIN, AND IMAX.
LIM(MIN,MAX)=MAX0(MIN,MIN0(I,MAX))
ZENTRY= 1
IMIN=ZIMIN
I=ZI
IMAX=ZIMAX
LIMIT=LIM(IMIN,IMAX)
GOTO 3
ENTRY TLU(TABLE,ZARG,ZN,ZI)
TLU=0.
I=ZI
N=ZN
ARG=ZARG
ZENTRY= 2
I=LIM(1,N)
IF (ARG.GE.TABLE(I)) GO TO 2
!C.....DESCEND IN TABLE.
1 I=I-1
IF (I.LE.0) GOTO 3
IF (ARG.GE.TABLE(I)) GOTO 3
GO TO 1
!C.....ASCEND IN TABLE.
2 IF (I.GE.N) GOTO 3
IF (ARG.LT.TABLE(I+1)) GOTO 3
I=I+1
GO TO 2
3 CONTINUE
IF (ZENTRY.EQ. 1) THEN
ZIMIN=IMIN
ZI=I
ZIMAX=IMAX
elseif(ZENTRY.EQ. 2) THEN
ZARG=ARG
ZN=N
ZI=I
ENDIF
END FUNCTION
Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
We'd need to see a sample program that calls this function.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This is the only sub that calls it.
SUBROUTINE fntrpa(A,ZX,ZNA)INTEGER ZNAREAL ZXEXTERNAL LIMIT!C.....COMMON SUBROUTINE EVALUATES A COEFFICIENTS IN DOUBLE
!C.....3-POINT INTERPOLATIONS.
!C L=NO. OF POINTS IN THE FIT
!C I=INDEX TO FIRST POINT
REAL A(ZNA)COMMON /NTRPC1/ L,I,A11,A12,A13,A14,A22,A23,A24,A33,A34,A44X = ZX
NA = ZNA
!C.....GET I AND L BY TABLE LOOK-UP.
L = LIMIT (1,NA,3)
M =
MAX0(1,NA-2)!C CALL TLU (A,X,NA,J)
DUMMY = TLU(A,X,NA,J)
!C
!!CJJC Changed following line to correct possible divide by zero condition
!C
!CJJC IF (J .EQ. LIMIT(2,J,M)) L=4
IF (J .EQ. LIMIT(2,J,M) .AND. NA .GT. 3) L=4I = LIMIT(1,J-1,M)
!C.....CALCULATE A-ARRAY.
A11 = A(I)
A22 = A(I+1)
IF(I+2 .GT. ZNA)THENA33 = A(ZNA)
ELSEA33 = A(I+2)
END IFIF (L .NE. 4) IF (L-2) 3,2,1IF(I+3 .GT. ZNA)THENA44 = A(ZNA)
ELSEA44 = A(I+3)
END IFA14 = A11-A44
A24 = A22-A44
A34 = A33-A44
A44 = X-A44
1 A13 = A11-A33A23 = A22-A33
A33 = X-A33
2 A12 = A11-A22A22 = X-A22
A11 = X-A11
3 GOTO 44 CONTINUEZX = X
ZNA = NA
5 RETURNEND
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It's what I thought. You call LIMIT with 1 as the first argument, ZIMIN, and then assign to ZIMIN in the function. This is not legal. You should create local variables with the min and max to be updated, setting them initially at the beginning of the routine.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page