Fortran Fortran 77 variable declaration issue

  • Thread starter Thread starter AmenoParallax
  • Start date Start date
  • Tags Tags
    Fortran Variable
AI Thread Summary
The discussion revolves around issues encountered while rewriting a Fortran 77 code for an astrophysics thesis. The user aimed to enhance code readability and rigor by declaring all variables explicitly and switching to double precision. However, this led to unexpected differences in computational results. The problem was traced to the declaration of a double precision array within a common block. The original code used implicit declarations, while the updated version switched to explicit declarations. The user initially did not modify all common block declarations throughout the code, which may have contributed to the discrepancies. After ensuring uniformity in the common block declarations, the issue was resolved, although the user found it strange that the two seemingly equivalent declaration methods produced different results. The discussion highlights the importance of consistency in variable declarations, especially in legacy code.
AmenoParallax
Messages
11
Reaction score
0
Hi

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:

IMPLICIT REAL*8 (A-H,L,M,O-Z)
COMMON /CMN1/ VA1(4),VA2(4),...

while in my updated version I changed it to:

IMPLICIT NONE
REAL*8 VA1(4),VA2(4),...
COMMON /CMN1/ VA1,VA2

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!
 
Technology news on Phys.org
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)?
 
DrClaude said:
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)?
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.
 
DrClaude said:
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)?
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!
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
25
Views
3K
Replies
3
Views
2K
Replies
4
Views
2K
Replies
8
Views
2K
Replies
8
Views
4K
Replies
4
Views
2K
Replies
9
Views
5K
Replies
12
Views
3K
Back
Top