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

forrtl: severe (159): Program Exception - breakpoint

Elvis_T_
Beginner
1,752 Views
I am trying to run and compile this program but i get this error

forrtl: severe (159): Program Exception - breakpoint
Image              PC                Routine            Line        Source

calc1.exe          000000013F22B3C5  Unknown               Unknown  Unknown
calc1.exe          000000013F22B186  Unknown               Unknown  Unknown
calc1.exe          000000013F226F44  Unknown               Unknown  Unknown
calc1.exe          000000013F1BF55A  MAIN_ip_EQNLINE           282  Main.f90
calc1.exe          000000013F1BB345  MAIN__                    154  Main.f90
calc1.exe          000000013F30D6A6  Unknown               Unknown  Unknown
calc1.exe          000000013F2271A4  Unknown               Unknown  Unknown
kernel32.dll       00000000775A59ED  Unknown               Unknown  Unknown
ntdll.dll          00000000776DC541  Unknown               Unknown  Unknown

and hope someone can help me out. The point is the error occurs at run-time with all results calculated well. But the definitions in the /traceback as to where the error occurs are the CALL line to the subroutine (154) [ Here shown as line and the END SUBROUTINE line (282). 

The inputs to the call tb and Tnew are defined earlier and are vectors of the same size.

! THIS IS THE MAIN PROGRAM 

	PROGRAM MAIN

		USE Prop_mod
		USE mkl95_blas
		USE mkl95_lapack
		USE mkl95_precision

		IMPLICIT NONE
		
	!Already defined in Module hst = 8, cst = 2
		INTEGER*8 :: i, k, im, n
		INTEGER*8 :: read_status, write_status, data_status, open_status
		INTEGER*8 :: tbulk, tin, itemp, dep, tdiff, ftstep, csupply, ctarget, tstep, dtstep
		INTEGER*8, PARAMETER ::  velstep = 8
	!REAL*8, PARAMETER :: EA = -44.3, Rg = 0.008314		

		REAL*8 :: frate, ivel, cflow, din, dout, tubeid, vlimit, rd1, rd2, Temp
		REAL*8 :: rho, vis, tc, hc, Qlt
		REAL*8 :: sumx, sumy, sumz, res   !DUMMY VARIABLES

		REAL*8, DIMENSION(:), ALLOCATABLE :: rhom, vism, tcm, hcm 
		REAL*8, DIMENSION(:), ALLOCATABLE :: mflux, Re, Pr, Nu, htc, nfrate, shear
		REAL*8, DIMENSION(:), ALLOCATABLE :: shft, Tfilm, Twall, avel, Tw
		REAL*8, DIMENSION(:), ALLOCATABLE :: Qc
		REAL*8, DIMENSION(:,:), ALLOCATABLE :: NTwall

		REAL*8, DIMENSION(:), ALLOCATABLE :: Tf, tb, Tnew, tbf		

	!	CHARACTER :: comma = ','
		LOGICAL :: exists, limit = .FALSE.



	!INPUT FILES
		OPEN(UNIT = 11, FILE = 'InputData.txt', STATUS = 'old', ACTION = 'read')
		!OPEN(UNIT = 12, FILE = 'InputData.csv', STATUS = 'old', ACCESS = 'direct', RECL = 20, ACTION = 'read')



	!OUTPUT FILES
		OPEN(UNIT = 21, FILE = 'Param.txt', STATUS = 'unknown', ERR = 904, IOSTAT = open_status)
		OPEN(UNIT = 22, FILE = 'Limit.txt', STATUS = 'unknown', ACTION = 'write', ERR = 904, IOSTAT = open_status)
		OPEN(UNIT = 23, FILE = 'Limit.csv', STATUS = 'unknown', ACTION = 'write', ERR = 904, IOSTAT = open_status)
		OPEN(UNIT = 24, FILE = 'HeatLoads.csv', STATUS = 'unknown', ACTION = 'write', ERR = 904, IOSTAT = open_status)
		!OPEN(UNIT = 25, FILE = 'hello.txt', STATUS = 'unknown', ACTION = 'write')

		INQUIRE(11, EXIST =  exists)
		IF (.NOT. exists) THEN
			PRINT *, 'Something definitely wrong'
		END IF

	!READING INITIAL INPUT DATA   
		READ(11, *, ERR = 901, IOSTAT = read_status) dep, frate, tubeid, ivel, itemp, tdiff , ftstep, cflow, csupply, ctarget, tstep, dtstep, rd1, rd2
	!	PRINT *, ''
	!	PRINT *, dep, frate, tubeid, ivel, itemp, tdiff, ftstep, cflow, csupply, ctarget, tstep, dtstep, rd1, rd2

		CALL Props(hrhoa, hrhob, hvisa, hvisb, htca, htcb, hhcapa, hhcapb, crhoa, crhob, cvisa, cvisb, ctca, ctcb, chcapa, chcapb)

	!INITIAL TEMPERATURE SETTINGS
		im = (ctarget - csupply)/ tstep
		ALLOCATE(Tf(im+1))
		Tf = (/(i, i = csupply,ctarget,tstep)/)
		
		n = (400 - itemp)/ tdiff
		n = n + 1
		ALLOCATE(tb(n))
		tb = (/itemp:400:tdiff/)
		

	!Initial analysis to get the limiting values
		rhoa = crhoa(1)
		rhob = crhob(1)
		visa = cvisa(1)
		visb = cvisb(1)
		tca = ctca(1)
		tcb = ctcb(1)
		hca = chcapa(1)
		hcb = chcapb(1)

		ALLOCATE(rhom(n))		
		ALLOCATE(vism(n))
		ALLOCATE(tcm(n))
		ALLOCATE(hcm(n))
		ALLOCATE(tbf(n))
		ALLOCATE(Tnew(n))
		
		DO i = 1, velstep	
			rhom = rhoa + rhob * tb
			vism = visa * Exp(visb/tb)
			tcm = tca + tcb * tb
			hcm = hca + hcb * tb

			CALL DataLimits(Twall)

			IF (i == 1) THEN 
				ALLOCATE(NTwall(n,velstep))
				ALLOCATE(avel(velstep))
				WRITE(23, *)
				WRITE(23, 802, ERR = 902, IOSTAT = write_status) 'T bulk', '', tb
			END IF

			WHERE (Twall <= 0 ) Twall = 0

			NTwall(:, i) = Twall
			avel(i) = ivel
			WRITE(23, 802, ERR = 902, IOSTAT = write_status) '', ivel, Twall
			ivel = ivel + 0.5
		END DO

		tbf = tb + ftstep
		WRITE(23, 802, ERR = 902, IOSTAT = write_status) 'T film', '', tbf
		
		ALLOCATE(Qc(n))		!Heat load between supply and target temperature
		Qc = cflow * (Tf - csupply) * (hca + 0.5 * hcb * (Tf + csupply)) / 1.0E06
		WRITE(24, *)
		WRITE(24, 802, ERR = 902, IOSTAT = write_status) '', 'T target', Tf
		WRITE(24, 802, ERR = 902, IOSTAT = write_status) '', 'Crude Load', Qc
		WRITE(24, *)

	!DETERMINING LIMIT VELOCITY AND TEMPERATURE
		WRITE(*,*)
		WRITE(*,*) 'Please enter a velocity less than 4 m/s'
		WRITE(*, '(A50)', ADVANCE = 'no') 'Enter the value for limiting velocity (m/s): '
		READ (*, *, ERR = 903, IOSTAT = data_status) vlimit

vloop:	DO
			IF (vlimit > 4.0) THEN
				PRINT *, 'The velocity is too high, Please enter a new one'
				WRITE(*, '(A50)', ADVANCE = 'no') 'Enter the value for limiting velocity (m/s): '
				READ (*, *, ERR = 903, IOSTAT = data_status) vlimit
			END IF
			IF (vlimit <= 4.0) EXIT
		ENDDO vloop

		DO i = 1, velstep
			IF (vlimit == avel(i)) THEN
				Tnew = NTwall(:, i)
				limit = .TRUE.
				EXIT
			END IF
		END DO
		
		IF (limit .EQV. .FALSE.) THEN
			ivel = vlimit
			CALL DataLimits(Twall)
			Tnew = Twall
		END IF

		WRITE(*,*) 
		WRITE(23, 802, ERR = 902, IOSTAT = write_status) 'vlimit', vlimit, Tnew

		CALL EqnLine(tb, Tnew, Temp)
		
100		PRINT *, Tnew
		PRINT *, ''
		PRINT *, Temp
		PAUSE
		
		Qlt = cflow * (dtstep - csupply) * (hca + 0.5 * hcb * (dtstep + csupply)) / 1.0E06	!Heat load for cold end of train
		WRITE(24, *)
		WRITE(24, *)
		WRITE(24, 802, ERR = 902, IOSTAT = write_status) '', 'Cold end Q', Qlt
		Qlt = cflow * (Temp - csupply) * (hca + 0.5 * hcb * (Temp + csupply)) / 1.0E06	!Heat load at limiting temperature
		WRITE(24, *)
		WRITE(24, 802, ERR = 902, IOSTAT = write_status) '', 'Limit Temp Q', Qlt
		Qlt = cflow * (Temp - dtstep) * (hca + 0.5 * hcb * (Temp + dtstep)) / 1.0E06	!Heat between limiting temp and desalter
		WRITE(24, *)
		WRITE(24, 802, ERR = 902, IOSTAT = write_status) '', 'Limit T-Desalter Q', Qlt
		WRITE(24, *)







	!DATA FORMATS USED
801 	FORMAT(*(F25.8, /))
802		FORMAT(*(G11.4,:,","))

	!HANDLING ERRORS
901		IF (read_status > 0) THEN 
			WRITE(*,*)
			WRITE(*,*) 'Data COULD NOT be read from file', read_status
		END IF
902		IF (write_status > 0) THEN 
			WRITE(*,*)
			WRITE(*,*)'Data COULD NOT be written to file', write_status
		END IF
903		IF (data_status > 0) THEN 
			WRITE(*,*)
			WRITE(*,*)'Please enter correct value', data_status
		END IF
904		IF (open_status > 0) THEN 
			WRITE(*,*)
			WRITE(*,*)'Output file OPENED, please close it', open_status
		END IF

		WRITE(*,*)
		WRITE(*,*) 'Calculations DONE!!!!'    	
		WRITE(*,*)

		CONTAINS 
			SUBROUTINE DataLimits(Tw)
				REAL*8, DIMENSION(:), ALLOCATABLE, INTENT(OUT) :: Tw 
				REAL*8, DIMENSION(n) :: mflux, Re, Pr, Nu, htc, nfrate, shear, shft, Tfilm
				REAL*8 :: EA = -44.3, Rg = 0.008314

				ALLOCATE(Tw(n))
				mflux = rhom * ivel
				Re = mflux * tubeid			
				Re = Re / vism
				Pr = 0.001 * hcm * vism / tcm
				Nu = 0.027 * (Re ** 0.8) * (Pr ** (1.0/3.0))
				htc = 1000.0 * Nu * tcm / tubeid
				nfrate = 0.19 / (Re ** 0.258)
				shear = nfrate * mflux ** 2.0 / (4.0 * rhom)
				WHERE (shear < 2.0) shear = 2.0 
				shft = (shear - 2.0)/ 98.0
				shft = 1.0 - SQRT(shft)
				nfrate = frate * htc / (dep * shft)
				nfrate = LOG(nfrate)
				Tfilm = (EA / (Rg * nfrate)) - 273.15
				Tw = (Tfilm - 0.45 * tb) / 0.55
			END SUBROUTINE DataLimits
			
			SUBROUTINE EqnLine(tb, Tnew, Temp)
				REAL*8, INTENT(OUT) :: Temp
				REAL*8, DIMENSION(n), INTENT(IN) :: Tnew, tb
				REAL*8, DIMENSION(3,3) :: Mat
				REAL*8, DIMENSION(3) :: xMat, yMat 
				REAL*8 :: sumx, sumy, sumz, sumx2, sumx3, sumx4, sumxy, sumx2y, num, num1, num2
				INTEGER :: ipiv(3), info, error 
				
				sumx = ASUM(tb(1:n))
				sumx2 = DOT(tb(1:n), tb(1:n))
				sumx3 = ASUM(tb(1:n)**3.0)
				sumx4 = ASUM(tb(1:n)**4.0)
				sumxy = DOT(tb(1:n), Tnew(1:n))
				sumx2y = ASUM(Tnew(1:n) * tb(1:n)**2.0)			
				sumy = ASUM(Tnew(1:n))
				
				num = n
				Mat = RESHAPE((/num, sumx, sumx2, sumx, sumx2, sumx3, sumx2, sumx3, sumx4/), (/3,3/))		
				yMat = (/sumy, sumxy, sumx2y/)
	
				CALL gesv(Mat, yMat, ipiv, info)
				IF (info > 0) THEN 
					WRITE(*,*)
					WRITE(*,*) 'Calculations could not be completed in Lapack', info
				END IF
	
			!Equation parameter
				sumx = yMat(1) - 1.818 * ftstep
				sumy = yMat(2) - 1.0 
				sumz = yMat(3) 
				
			!Solving for the intersection of the lines
			! Tw = sumz * tb^2 + sumy * tb + sumx 
			! Tf = tb + ftstep = 0.55Tw + 0.45tb
				num = sumy**2.0 - 4 * sumz * sumx
				IF (num .LT. 0) THEN
					PRINT *, 'Complex results for the temperature intercept, b2-4ac = ', num
				ELSEIF (num .EQ. 0) THEN
					PRINT *, 'Real and equal roots'
					Temp = (-sumy + SQRT(num))/(2.0 * sumz)
				ELSE
					num1 = (-sumy + SQRT(num))/(2.0 * sumz)
					num2 = (-sumy - SQRT(num))/(2.0 * sumz)
					IF (num1 <= 0) THEN
						Temp = num2
					ELSE
						Temp = num1
					ENDIF
				ENDIF
				
				PRINT *, 'Limiting temperature T = ', Temp 	
				PAUSE

			END SUBROUTINE EqnLine
			
	END PROGRAM MAIN
0 Kudos
1 Reply
Steven_L_Intel1
Employee
1,752 Views

How are you starting the program? Are you running this from inside Visual Studio? In some cases one can see this behavior if the run-time library wants to report an error and thinks it is running under the debugger when it isn't.

If you do run the program under the debugger, what happens?

0 Kudos
Reply