Your view is colored by the fact that you are using Fortran (I assume Fortran 77) where you have only two ways to access variables: (1) they are global variables in some COMMON block, or (2) they have been passed as arguments (typically scalar) to the current function.
Since 1977, this has been addressed in many ways in all more modern programming languages. An example is the use of structures in C/C++ (composite types or records in other languages) that allow you to group many variables into one and only pass a reference to one structure to a function as an argument. Or, more elegantly in most object oriented programming languages, to group things together in classes and then have a reference or pointer to such a class object passed implicitly to every member function. These techniques have made dealing with the problem you see unimportant and eliminate the incentive to use global variables.
The reasons not to use global variables have already been given in other answers. My personal favorite among the reasons is that one of the best strategies for reducing the potential for bugs is to limit the scope of variables. A variable that lives only in a very small part of the program can not create trouble elsewhere. So my goal is often to declare any variable as late as possible and destroy it as early as possible, simply because that makes it so much easier to read and understand code. On the other hand, global variables violate this goal in the most egregious possible way.