Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Easy fortran Q?

  1. Sep 25, 2012 #1
    So I am making a module to run in the main program. The module contains a subroutine and several functions. I want to call one of the functions into the subroutine but it is not getting recognized. I am just doing

    Real :: fct %fct is the function name that returns a real value

    but when I try to use the function i get the error

    Error: Unclassifiable statement at (1)

    I also tried

    Real, external :: fct

    but the same problem occurs.
     
  2. jcsd
  3. Sep 25, 2012 #2

    uart

    User Avatar
    Science Advisor

    I'm not a Fortran expert, and I've only used Fortran95, but defining functions like in the following (trivial example) works for me.

    Code (Text):

    !  Example using modules
    module module1
    implicit none
    contains

     function times2(x)
     real :: times2,x

       times2 = x*2.0

     end function times2

    end module module1
     
  4. Sep 25, 2012 #3
    I get that part, but calling that function inside a subroutine in the module as follows:


    Code (Text):

    !Example using modules
    module module1
    implicit none
    contains

     function times2(x)
     real :: times2,x

       times2 = x*2.0

     end function times2

    !This is what I am wondering about

    subroutine proc(input1)
    real :: input1
    real :: times2  !This does not seem to work for me
                        !Nor does real, external :: times2
    times2(input1)

    end subroutine proc


    end module module1
     
     
  5. Sep 25, 2012 #4

    uart

    User Avatar
    Science Advisor

    Oh I see, you're making much the same mistake as in your previous question. :)

    You are redefining "times2" as just a plain old variable (instead of a function) inside the scope of the subroutine.

    All you need is this :
    Code (Text):

    !Example using modules
    module module1
    implicit none
    contains

     function times2(x)
     real :: times2,x

       times2 = x*2.0

     end function times2

     subroutine printx2(input1)
     real :: input1

       print *,times2(input1)

     end subroutine printx2

    end module module1
     
     
  6. Sep 25, 2012 #5
    now I get the error using your modifications

    times2(input1)
    1 (1 is under first parenthesis)
    Error: 'times2' at (1) is not a variable


    ??????
     
  7. Sep 25, 2012 #6

    uart

    User Avatar
    Science Advisor

    It should work, functions defined in the same module should be accessible to each other without any explicit interfacing. It works ok for me in "g95" Fortran, what Fortran compiler are you using?

    BTW. Can you post the exact code you're trying to compile?
     
    Last edited: Sep 25, 2012
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Easy fortran Q?
  1. FORTRAN Help (Replies: 1)

  2. Fortran Help (Replies: 2)

  3. Infinity in fortran (Replies: 5)

  4. Linking Fortran (Replies: 5)

Loading...