Fortran passing parameters to a function of one variable

In summary, the OP wants to be able to call a function f(x) with y held constant, but fortran doesn't allow this. He could use a common block to set y before calling the function, or go the module/use route.
  • #1
Thereso
1
0
Hi all! I have a question about fortran. So far in my coding, if i wanted to define a function ( say f(x) ) I would manually set a grid for x, and then define f for each x value, so that i would have a vector for f and a vector for x. However, I'd now like to use the 'function' command, so i can call f for ANY x.

I'll do my best to explain my question: say I define a function g(x,y) by

g(x,y) = x**2 + y

and I want to define another function f(x), which is EQUAL to g(x,y) but with y held constant. I want to use a set of subroutines on the function f, but the problem is that all of the subroutines call f as a function of one variable and not two. So basically I want to pass y as a parameter into a function defining f(x). Later I will change y and then repeat. One way I can do it is to write y to a data file, and then read it from inside the function f:
program lolz
implicit none
real, external :: f
real y,c,x
! g(x,y) = x^2 + y
!calculate g(3.0,2.0)
y=2.0
open(26,file='y.dat',status='unknown')
write(26,*) (y)
close(26)
!test
x=3.0
write(*,*)"f(x) is",f(x)

end

function f (x)
implicit none
real f
real x,y
open(26,file='y.dat',status='unknown')
read(26,*) y
close(26)
f= x**2.0 +y
return
end function f


this program correctly returns "f(x) is 11.". But I'm sure that this constant opening and closing of data files is inefficient, there must be a better way of doing it? Thanks everyone :D
 
Technology news on Phys.org
  • #2
Well...I don't quite get what you REALLY are trying to achieve...why can't you just pass x AND y to the function f? ...just declare the function f to take two parameters and return one...nothing wrong with that.

Other than that, you could use common block (up to fortran 77 style) to set y before you start calling the function with just x; or, you could go the module/use route (fortran 90 forward style). These two methods allow the function and the main program to share values without having to pass them around as arguments/parameters.
 
  • #3
gsal said:
Well...I don't quite get what you REALLY are trying to achieve...why can't you just pass x AND y to the function f? ...just declare the function f to take two parameters and return one...nothing wrong with that.

That won't work, because the OP has some existing code (which presumably can't be changed) that called f() as a function with one variable.

The way to do this in fortran 77 is use a common block, something like

Code:
function f(x)
common/fcom/y
...
g(x,y)
...
end

program main
common/fcom/y
...
y = 2.0
...
f(x)
...
y = 3.0
...
f(x)
...
end
I expect you can achieve the same effect in Fortran 90 without using COMMON, but with far more typing :smile:
 

What is the syntax for passing parameters to a Fortran function of one variable?

The syntax for passing parameters to a Fortran function of one variable is as follows:

function_name(parameter1, parameter2, ...)

Can I pass more than one parameter to a Fortran function of one variable?

Yes, you can pass multiple parameters to a Fortran function of one variable. Simply separate each parameter with a comma.

Do Fortran functions of one variable always return a value?

No, Fortran functions of one variable can be declared as either function or subroutine. Only function returns a value while subroutine does not.

Can I pass arrays or matrices as parameters to a Fortran function of one variable?

Yes, Fortran allows you to pass arrays or matrices as parameters to a function of one variable. However, the function must be explicitly declared to accept arrays or matrices as arguments.

Can I modify the values of the parameters passed to a Fortran function of one variable?

No, Fortran functions of one variable use intent(in) by default, which means the parameters passed to the function are read-only and cannot be modified within the function. To modify the values of parameters, you must declare them with intent(out) or intent(inout).

Similar threads

  • Programming and Computer Science
Replies
20
Views
1K
  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
4
Views
586
  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
5
Views
3K
  • Programming and Computer Science
Replies
8
Views
3K
  • Calculus and Beyond Homework Help
Replies
5
Views
195
  • Programming and Computer Science
Replies
15
Views
2K
  • Programming and Computer Science
Replies
8
Views
786
  • Programming and Computer Science
Replies
4
Views
2K
Back
Top