[petsc-users] [Fortran] subroutines inside modules?

Leo van Kampenhout lvankampenhout at gmail.com
Thu Sep 30 17:09:53 CDT 2010


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


2010/9/30 Stephan Kramer <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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20101001/99fc02b5/attachment.htm>


More information about the petsc-users mailing list