Fortran 90/95 : passing parameters to functions

Click For Summary
SUMMARY

The forum discussion centers on passing parameters to functions in Fortran 90/95, specifically when using a general-purpose subroutine, fzero, to find the zero of a function. The user seeks alternative methods to pass an additional parameter, alpha, to the function func(x) without modifying the subroutine's interface. One proposed solution involves using a module to define alpha, allowing the function to access it. However, the user is looking for other potential solutions that do not require altering the existing function signature.

PREREQUISITES
  • Understanding of Fortran 90/95 syntax and structure
  • Familiarity with subroutines and functions in Fortran
  • Knowledge of module usage in Fortran for parameter management
  • Basic concepts of numerical methods for root-finding
NEXT STEPS
  • Explore Fortran 90/95 function interfaces and how to define them
  • Research advanced techniques for parameter passing in Fortran, such as using derived types
  • Learn about Fortran 2008 features that enhance function parameter handling
  • Investigate numerical libraries in Fortran that may offer built-in solutions for parameterized functions
USEFUL FOR

This discussion is beneficial for Fortran developers, numerical analysts, and anyone involved in scientific computing who needs to manage function parameters effectively in Fortran 90/95.

pezze
Messages
7
Reaction score
0
Hello, I have the following doubt, maybe someone can help me with this.
Suppose I have a general purpose routine that finds the zero of a function f(x), something like

subroutine fzero( func, x1, x2, xzero )
implicit none
real, intent(in) :: x1, x2 ! Upper and lower bounds where the zero lies
real, intent(out) :: xzero ! zero of the function here
interface
real function func(x)
implicit none
real, INTENT(in) :: x
end function func
end interface
...
f = func( x )
...
end subroutine fzero


My problem is the following. The function I want to find the zero depends on some parameter, say alpha, so it would be something like function(x,alpha)
Now, to use the previous general purpose routine I need to input the alpha in some other way. One possibility is to put "alpha" in a module, something like

module parameter
implicit none
real :: alpha
end module parameter

and then define the function

real func( x )
use parameter
...
end func

That would work. But do you know of any other way of doing the same thing?

Thanks for your help!
 
Technology news on Phys.org
Why not defing the function with the parameter alpha to begin with, then set it equal to some value like 1 when it doesn't matter.
 
Dr Transport said:
Why not defing the function with the parameter alpha to begin with, then set it equal to some value like 1 when it doesn't matter.

The problem is that the general purpose subroutine fzero does not allow the function func(x) to have additional parameters.
 
That doesn't quite work, I have many parameters, but thanks anyway!
 

Similar threads

  • · Replies 20 ·
Replies
20
Views
3K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K