Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran Arithmetic Issue in FORTRAN

  1. Oct 17, 2015 #1
    Good day. My FORTRAN program is throwing an ARITHMETIC exception on this line of code:


    When I check this using gdb and print the contents of the variable SAREA(2,ISN), the value is 1432.
    gdb error message:
    Program received signal SIGFPE, Arithmetic exception.
    0x00000001004330ff in anal2 (sdata1=..., alpha=..., code=..., n2=..., nl2=14)
    at aix_anal2.f:66
    66 13 SAREA(2,ISN)=SAREA(2,ISN)/IND(13)/1000./6080.2*IND(12)/1000.
    (gdb) bt
    #0 0x00000001004330ff in anal2 (sdata1=..., alpha=..., code=..., n2=...,
    nl2=14) at aix_anal2.f:66
    #1 0x000000010042594a in set2 (alpha=...) at aix_set2.f:252
    #2 0x0000000100412024 in setup () at aix_setup.f:58
    #3 0x0000000100445fc7 in test_driver_y2k () at aix_test_driver_y2k.f:338
    #4 0x00000001004460a1 in main (argc=1, argv=0x60003a180)
    at aix_test_driver_y2k.f:344
    #5 0x00000001800483cd in _cygwin_exit_return ()
    at /usr/src/debug/cygwin-2.2.1-1/winsup/cygwin/dcrt0.cc:1047
    #6 0x00000001800460dc in _cygtls::call2 (this=0x22ce00,
    func=0x180047420 <dll_crt0_1(void*)>, arg=0x0, buf=buf@entry=0x22ccf0)
    at /usr/src/debug/cygwin-2.2.1-1/winsup/cygwin/cygtls.cc:111
    #7 0x0000000180046174 in _cygtls::call (func=<optimized out>,
    arg=<optimized out>)
    at /usr/src/debug/cygwin-2.2.1-1/winsup/cygwin/cygtls.cc:30
    #8 0x00000001004462e1 in cygwin_crt0 (f=<optimized out>)
    at /usr/src/debug/cygwin-2.2.1-1/winsup/cygwin/lib/cygwin_crt0.c:22
    #9 0x0000000100401010 in mainCRTStartup ()
    at /usr/src/debug/cygwin-2.2.1-1/winsup/cygwin/crt0.c:29

    This line of code is also causing a stack dump. I tried coding for division by zero but I still get the same stack dump and gdb error message. Any suggestions???

  2. jcsd
  3. Oct 17, 2015 #2


    Staff: Mentor

    My first attempt would be to simplify the expression into several lines:
    Code (Fortran):

    print ISN
    print SAREA(2,ISN)

    Y = SAREA(2,ISN) / X13
    Y = Y / 1000.0
    Y = Y / 6080.2
    Y = Y * X12
    Y = Y / 1000
    SAREA(2,ISN) = Y
    This allows you to see where the point of failure is. My suspicion is that SAREA(2,ISN) is outside the AREA array so I'd also print the value of ISN and verify that SAREA(2,ISN) exists or is within range of your array bounds.
  4. Oct 17, 2015 #3
    Thanks jedishrfu. This worked. I was able to determine that Y = SAREA(2,ISN) / X13 was the culprit. X13 =0....division by zero problem. Thanks so much. Very much appreciated.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook