Fortran functions as arguments of functions

  • Context: Fortran 
  • Thread starter Thread starter Biederman
  • Start date Start date
  • Tags Tags
    Fortran Functions
Click For Summary
SUMMARY

The forum discussion centers on using user-defined functions as arguments in Fortran, specifically in the context of numerical integration. The user encountered a "segmentation fault (core dumped)" error when executing their code. The issue was resolved by incorporating the EXTERNAL declaration statement, which is necessary when passing function names as arguments. This highlights the importance of proper function declaration in Fortran programming.

PREREQUISITES
  • Understanding of Fortran programming language
  • Familiarity with user-defined functions in Fortran
  • Knowledge of numerical integration techniques
  • Experience with debugging segmentation faults in programming
NEXT STEPS
  • Research the EXTERNAL declaration statement in Fortran
  • Learn about function pointers and their usage in Fortran
  • Explore advanced numerical integration techniques in Fortran
  • Study common debugging techniques for Fortran programs
USEFUL FOR

This discussion is beneficial for Fortran programmers, especially those new to the language, as well as developers working on numerical methods and integration algorithms.

Biederman
Messages
9
Reaction score
0
Hi all,

It is my first time to resort to the help of members of this forum :)

My question is related to programming in fortran but I am rather new with it.

So here is the question:Can I use user defined functions as arguments of a user defined functions in Fortran?

I have written a simple code for numerical integration but when I run the program I get an error message "segmentation fault (core dumped)"

Here is the code:
C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

PROGRAM NUMERIC

REAL :: INTEG,SINE

PRINT*,INTEG(SINE,0.0,3.14159,100)

END

FUNCTION INTEG(FUNC,A,B,N)

INTERFACE
FUNCTION FUNC(X)
REAL :: FUNC, X
END FUNCTION
END INTERFACE
REAL :: A,B,INTEG,H,TOTAL,FUNC
INTEGER N,I


! THE INTEGRATION FORMULA IS: INTEG=H*(0.5*FUNC(X0)+FUNC(X1)+...+0.5*FUNC(XN))

H=(B-A)/N

TOTAL=0.5*(FUNC(A)+FUNC(B))
DO I=1,N-1
TOTAL=TOTAL+FUNC(A+I*H)
ENDDO
INTEG=TOTAL*H
RETURN
END FUNCTION INTEG



FUNCTION SINE(X)

REAL :: X,SINE

SINE=X*SIN(X)

RETURN
END
C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
After running I get: Segmentation fault (core dumped)

I don't know what's wrong with the code, since there is no error message during the compilation.

I would appreciate your help.
 
Last edited:
Technology news on Phys.org
You should research the EXTERNAL declaration statement if you are passing function or subroutine names as arguments.
 
Thank you SteamKing. I've got the program working after checking the EXTERNAL statement, as you had suggested.

Thanks again
 
Last edited:

Similar threads

  • · Replies 16 ·
Replies
16
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
Replies
6
Views
2K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 25 ·
Replies
25
Views
4K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K