[petsc-users] [Fortran] subroutines inside modules?
Stephan Kramer
s.kramer at imperial.ac.uk
Thu Sep 30 17:30:48 CDT 2010
On 30/09/10 23:09, Leo van Kampenhout wrote:
> Declaring it external in the program/subroutine that is using the module
> results in
>
> main.F:65.43:
> external gridtest
> Error: Cannot change attributes of USE-associated symbol at (1)
>
> Thanks, Leo
Yes, as I said before :) - module subroutines should *not* be declared external. You do
not need that line.
Cheers
Stephan
>
>
> 2010/9/30 Stephan Kramer <s.kramer at imperial.ac.uk
> <mailto:s.kramer at imperial.ac.uk>>
>
> On 30/09/10 15:31, Leo van Kampenhout wrote:
>
> Hi all,
>
> since it is mandatory to declare all subroutines as "external" in
> Fortran, is it possible for Modules to have subroutines? I'm
> unable to
> declare the subroutine external inside the module itself, nor in the
> program which is using it. Not declaring it external at all
> results in
> the following compilation error:
>
> /net/users/csg/csg4035/master/workdir/src/main.F:97: undefined
> reference
> to `__grid_MOD_readgrid'
>
> (the module is here is named "grid", the subroutine "readgrid" )
>
> Thanks,
> Leo
>
>
> If you put your subroutine in a module, it should not be declared
> external. You can directly call it from within the module itself. When
> calling it inside any other module/program you need to add "use
> grid" before
> the "implicit none".
>
> Putting subroutines inside a module is highly recommended as it
> automatically
> provides an explicit interface so that the compiler can check the
> arguments in
> your subroutine call.
>
> Cheers
> Stephan
>
>
More information about the petsc-users
mailing list