Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29261 Discussions

Unhandled exception at 0x100116cb

pecan204
Beginner
909 Views

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

0 Kudos
3 Replies
Steven_L_Intel1
Employee
909 Views
We'd need to see a sample program that calls this function.
0 Kudos
pecan204
Beginner
909 Views

This is the only sub that calls it.

SUBROUTINE fntrpa(A,ZX,ZNA)

INTEGER ZNA

REAL ZX

EXTERNAL 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,A44

X = 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=4

I = LIMIT(1,J-1,M)

!C.....CALCULATE A-ARRAY.

A11 = A(I)

A22 = A(I+1)

IF(I+2 .GT. ZNA)THEN

A33 = A(ZNA)

ELSE

A33 = A(I+2)

END IF

IF (L .NE. 4) IF (L-2) 3,2,1

IF(I+3 .GT. ZNA)THEN

A44 = A(ZNA)

ELSE

A44 = A(I+3)

END IF

A14 = A11-A44

A24 = A22-A44

A34 = A33-A44

A44 = X-A44

1 A13 = A11-A33

A23 = A22-A33

A33 = X-A33

2 A12 = A11-A22

A22 = X-A22

A11 = X-A11

3 GOTO 4

4 CONTINUE

ZX = X

ZNA = NA

5 RETURN

END

0 Kudos
Steven_L_Intel1
Employee
909 Views
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.
0 Kudos
Reply