Fortran - explicit interface

前端 未结 2 1267
梦谈多话
梦谈多话 2020-12-06 17:56

I\'m very new to Fortran, and for my research I need to get a monster of a model running, so I am learning as I am going along. So I\'m sorry if I ask a \"stupid\" question.

相关标签:
2条回答
  • 2020-12-06 18:10

    "explicit interface" means that the interface to the procedure (subroutine or function) is declared to the compiler. This allows the compiler to check consistency of arguments between calls to the procedure and the actual procedure. This can find a lot of programmer mistakes. You can do this writing out the interface with an interface statement but there is a far easier method: place the procedure into a module and use that module from any other entity that calls it -- from the main program or any procedure that is itself not in the module. But you don't use a procedure from another procedure in the same module -- they are automatically known to each other.

    Placing a procedure into a module automatically makes its interface known to the compiler and available for cross-checking when it is useed. This is easier and less prone to mistakes than writing an interface. With an interface, you have to duplicate the procedure argument list. Then if you revise the procedure, you also have to revise the calls (of course!) but also the interface.

    An explicit interface (interface statement or module) is required when you use "advanced" arguments. Otherwise the compiler doesn't know to generate the correct call

    If you have a procedure that is useed, you shouldn't describe it with external. There are very few uses of external in modern Fortran -- so, remove the external attributes, put all of your procedures into a module, and use them.

    0 讨论(0)
  • 2020-12-06 18:24

    I ran into the same problems you encountered whilst I was trying to install ED2 on my mac 10.9. I fixed it by including all the subroutines in that file in a module, that is:

    module mymodule
    contains
    subroutine update_budget(csite,lsl,ipaa,ipaz)
    other subroutines ecc.
    end module mymodule
    

    The same thing had to be done to some 10 to 15 other files in the package. I have compiled all the files and produced the corresponding object files but now I am getting errors about undefined symbols. However I suspect these are independent of the modifications so if someone has the patience this might be a way to solve at least the interface problem.

    0 讨论(0)
提交回复
热议问题