- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?

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