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

Fortran Fortran 77 variable declaration issue

  1. Feb 12, 2015 #1

    I've been struggling with a fortran 77 code that I need for my astrophysics thesis... Since it's quite old, I'm trying to rewrite some features in order to make it more readable, and I'm trying to make it more rigorous by declaring all variables (I'm declaring "implicit none" everywhere), setting all real variable to double precision, and that kind of stuff. No main changes, and most importantly nothing that would alter the result of the computation.

    However, something happened, and I got different results with respect to the original version. I spent hours debugging and looking for the exact place where the difference originated, and apparently the problem is due to the declaration of a variable (a double precision array) which is part of a common block.

    More precisely, in the original version the variable was declared as:

    COMMON /CMN1/ VA1(4),VA2(4),...

    while in my updated version I changed it to:

    REAL*8 VA1(4),VA2(4),...

    Now, I wouldn't expect that this could change the calculations, but that's what happened... Anybody can explain why?

    I don't think the rest of the code and the specific calculations performed are important in solving the issue, and beside that I can't post the code because it's not mine and anyway it's very long.

    Any suggestion would be very appreciated. Thanks everybody!
  2. jcsd
  3. Feb 12, 2015 #2


    User Avatar

    Staff: Mentor

    That should have worked. Maybe the compiler is doing something to the common blocks (aligning, etc.) that is causing an issue. Are the common blocks declared the same everywhere (have you modified them everywhere they appear in the code)?
  4. Feb 12, 2015 #3
    I have not modified the common blocks everywhere yet... I was trying to apply one change at a time in order to find the problematic part of the code. I'll try to uniform all the common block right away.
  5. Feb 12, 2015 #4
    I changed the way common blocks are declared everywhere, meaning that keeping the implicit declaration of double precision variables I explicitly declared the types of all variables belonging to any common blocks everywhere in the code.

    It actually seems to have worked! But still it seems quite strange that the two ways of declaring a variables (apparently equivalent) give different results...

    Anyway thanks, I think this solves my problem!
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook