Quantcast
Channel: Intel® Fortran Composer XE
Viewing all articles
Browse latest Browse all 1424

forrtl: severe (159): Program Exception - breakpoint

$
0
0
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

Viewing all articles
Browse latest Browse all 1424


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>