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

Infinity in fortran

  1. Sep 13, 2013 #1
    Dear all,

    I can not figure out why I got negative infinity in my output, so please help. Here is my calculation for FAMAX:

    FAMAG=SQRT(FX**2+FY**2+FZ**2)

    FAMAX=MAXVAL(FAMAG(1:NATOM))

    and for FPBPMAX:

    FMAGPBP(1:NSYN)=SQRT(FXGTASE(1:NSYN)**2+FYGTASE(1:NSYN)**2+FZGTASE(1:NSYN)**2)

    FPBPMAX=MAXVAL(FMAGPBP(1:NSYN))

    FMAGPBP(1:NSYN)=SQRT(FXTPASE(1:NSYN)**2+FYTPASE(1:NSYN)**2+FZTPASE(1:NSYN)**2)

    FPBPMAX=MAX(MAXVAL(FMAGPBP(1:NSYN)),FPBPMAX)

    FMAGPBP(1:NSYN)=SQRT(FXEDASE(1:NSYN)**2+FYEDASE(1:NSYN)**2+FZEDASE(1:NSYN)**2)

    FPBPMAX=MAX(MAXVAL(FMAGPBP(1:NSYN)),FPBPMAX)

    I expected it crash and got either NaN or Infinity for FAMAX and FPBPMAX at some point. But what I did not expect was FAMAX and FPBPMAX got NEGATIVE infinity when it crashed. Does anyone know why?

    Thanks,

    Lam
     
    Last edited: Sep 13, 2013
  2. jcsd
  3. Sep 13, 2013 #2

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    In the first line, FAMAG is used as a single variable; in the next line, FAMAG all of a sudden has become an array variable. This sudden change can be very confusing. Was FAMAG originally dimensioned as an array variable?
     
  4. Sep 13, 2013 #3
    FX,FY,FZ, FAMAG are arrays, but FAMAX is dimensionless. I know I should have used clearly different names to avoid confusion.

    Again, FMAGPBP is an array, FPBPMAX is dimensionless.

    Lam
     
  5. Sep 13, 2013 #4

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    I think when you assign a value to FAMAG in the first line, you have to assign it to a particular location in the array. You can't write FAMAG = some expression, when you need to write FAMAG (array_index) = some expression.
     
  6. Sep 13, 2013 #5

    AlephZero

    User Avatar
    Science Advisor
    Homework Helper

    A statement like FAMAG =SQRT(FX**2+FY**2+FZ**2) should work in Fortran 90/95 , so long as FAMAG, FX, FY, FZ are all arrays with the same dimensions. it is equivalent to a loop (or nested loops fur multi-dimension arrays) to operate on each element of the arrays.

    The only thing I can think of is something weird like:
    Your implementation of the MAXvAL function starts by setting its return value to negative infinity, and then scans through the array to find larger numbers. But because of the curiosities of IEEE floating point arithmetic, comparisons involving NaN tend to always return "false" (in fact NaN is not even equal to NaN!!) So the maximum value of an array consisting entirely of NaNs would be returned as negative infinity. (But if that is the case, it sounds like a bug to me).
     
  7. Sep 13, 2013 #6
    Yes FAMAG, FX, FY, FZ are in the same dimensions.

    And your guessing is right. Maxval(array(1:n)) gives -Infinity if all the elements are NaN. I just did a simple test to confirm this. Thanks a lot.

    Lam
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Infinity in fortran
  1. [Fortran] help (Replies: 2)

  2. Fortran 90 (Replies: 1)

  3. FORTRAN Help (Replies: 1)

  4. Fortran Help (Replies: 2)

  5. Linking Fortran (Replies: 5)

Loading...