Search code examples
fortrangfortran

Output of program depends on arbitrary print statements?


I have a Fortran 95 code whose output seems to be a function of things that it shouldn't be a function of. Specifically, the following scenerio is happening:

  • Run code with version A; it doesn't work (I mean, it works as in it compiles and runs, but it doesn't give the result I expect)

  • Run code with Version B; it works. Version B contains only trivial modifications to version A such as print statements or small changes in numerical values of variables.

  • Run code with version A; all of a sudden, it works.

I think there's some issue with memory or using variables before they're initialized, so I was wondering whether or not there was a way to check this sort of thing with gfortran, or if any one knows what the problem might be. I've tried gfortran my_program.f95 -Wall - Wextra, but it just gives me a bunch of complaints about nonconforming tab characters.


Solution

  • This was a while ago, but I fixed the problem so I figured I might as well post it. To be honest, I'm not sure whether or not these steps in particular are what fixed it, but it works, so here they are:

    1. Put all procedures in modules (this also helps to organize the code) as opposed to just "out in the open."

    2. Declare the intent (in, out or inout) of all variables via real, intent(in) :: foo. This is obviously useful for optimization and organization but apparently it has something to do with interfaces as well ... no idea what that's about.

    And that's it!